📄 applicationwindow.java
字号:
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package eti.bi.alphaminer.ui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.event.WindowEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.WindowStateListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.DefaultDesktopManager;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JInternalFrame.JDesktopIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;
import eti.bi.alphaminer.Locale.LocalesManager;
import eti.bi.alphaminer.core.handler.AccessController;
import eti.bi.alphaminer.core.handler.CaseHandler;
import eti.bi.alphaminer.core.handler.CaseInfoListHandler;
import eti.bi.alphaminer.core.observer.HelpObserver;
import eti.bi.alphaminer.core.observer.HelpObserveSubject;
import eti.bi.alphaminer.core.observer.ObserveSubject;
import eti.bi.alphaminer.core.observer.Observer;
import eti.bi.alphaminer.core.workspace.WorkspacesManager;
import eti.bi.alphaminer.jhelpcomponent.HelpCursor;
import eti.bi.alphaminer.jhelpcomponent.JHelpDesktopPane;
import eti.bi.alphaminer.jhelpcomponent.JHelpPanel;
import eti.bi.common.Locale.Resource;
import eti.bi.common.System.SysConfig;
import eti.bi.alphaminer.tools.SystemTools.CaseHelpToolBarHandler;
import eti.bi.alphaminer.ui.dialog.MessageDialog;
import eti.bi.alphaminer.ui.menu.MainMenuBarHandler;
import eti.bi.alphaminer.vo.BICase;
import eti.bi.exception.BaseException;
import eti.bi.exception.SysException;
/**
* ApplicationWindow is the main frame of the KBBI-client standalone application.
*/
public class ApplicationWindow extends JFrame implements
Observer,
HelpObserver,
ObserveSubject,
WindowStateListener,
MouseListener {
/**
*
*/
private static final long serialVersionUID = 1L;
/* Modal frames of ApplicationWindow */
private AboutDialog m_AboutDialog;
private SearchingCriteria m_SearchingCriteria;
/* Internal frame of ApplicationWindow */
private ManagementWindow m_ManagementWindow;
/* Menubar handler */
private MainMenuBarHandler m_MenuBarHandler;
/* Content pane of ApplicationWindow frame
containing panel content and status bar */
private JPanel m_ContentPaneApplicationWindow;
/* Panel content containing a toolbar and a desktop pane */
// private JPanel m_PanelContent; // <<27/07/2005 Kenneth Lai: Modify for JHelp>>
private JHelpPanel m_PanelContent; // <<27/07/2005 Kenneth Lai: Modify for JHelp>>
/* Toolbar handler */
private ToolBarHandler m_ToolBarHandler;
/* Desktop pane for internal frames */
// private JDesktopPane m_ContentApplicationWindow; // <<27/07/2005 Kenneth Lai: Modify for JHelp>>
private JHelpDesktopPane m_ContentApplicationWindow; // <<27/07/2005 Kenneth Lai: Modify for JHelp>>
/* Status bar */
private JHelpPanel m_StatusBarApplicationWindow;
private JLabel m_StatusBarMessage;
private ApplicationWindowDesktopManager m_ApplicationWindowDesktopManager;
private int m_NewCase;
private ArrayList<CaseWindow> CaseWindowList = new ArrayList<CaseWindow>();
//<<11/12/2005, XJ. Chen
//private ResourceBundle m_Messages;
//<<20/01/2005, Frank J. Xu
//To Adapt to Different Data Mining Engine
private int m_DMEngineType;
//20/01/2005, Frank J. Xu>>
//<<25/01/2005, Mark Li
//Add a pop up picture before enter the main function
// private final static String splashIconName = "bin/kbbiapplication/ui/images/splash.png";
//25/01/2005, Mark Li>>
//<<01/02/2005, Mark
//Add an image as background
// private final static String backgroundImage = "bin/kbbiapplication/ui/images/Background.png";
// private JLabel backgroundLabel;
//01/02/2005, Mark>>
// <<23/03/2005 Mark Li: Set flag to show Search Window
public boolean enableSerachResultPanel = true;
// <<23/03/2005 Mark Li: Set flag to show Search Window
private boolean m_HelpState;
// 25/07/2005: Kenneth Lai: Add for JHelp>>
public static boolean POPUP_WINDOW = false;
public static final String NOTIFY_SAVE_CASE="SAVE_CASE";
public static final String NOTIFY_DELETE_CASE = "DELETE_CASE";
private static Vector<Observer> observers = new Vector<Observer>();
/**
* Constructs an ApplicationWindow.
* @param a_Messages the ResourceBundle to be used.
* @throws SysException
*/
//<<11/12/2005, XJ. Chen
//public ApplicationWindow(ResourceBundle aMessages) throws SysException {
public ApplicationWindow() throws SysException {
//<<11/12/2005, XJ. Chen
//m_Messages = aMessages;
MessageDialog.setFrame(this);
/*
Frame splashFrame = SplashWindow.splash(splashImage);
splashFrame.setAlwaysOnTop(true);
splashFrame.
*/
createApplicationWindow();
Resource.registerInterest(this);
}
/**
* Gets the toolbar handler.
* @return ToolBarHandler the toolbar handler.
*/
public ToolBarHandler getToolBarHandler() {
return m_ToolBarHandler;
}
/**
* Gets the menu bar handler.
* @return MenuBarHandler the menu bar handler.
*/
public MainMenuBarHandler getMenuBarHandler() {
return m_MenuBarHandler;
}
/**
* Gets the desktop pane of the ApplicationWindow frame.
* @return ContentApplicationWindow the desktop pane.
*/
// public JDesktopPane getDesktopPane() {
public JHelpDesktopPane getDesktopPane() {// <<22/07/2005 Kenneth Lai: Modify for JHelp
return m_ContentApplicationWindow;
}
// <<22/07/2005 Kenneth Lai: Add for JHelp
public void setHelpState(boolean a_SetActive) {
if ( a_SetActive ) {
// setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
m_HelpState = a_SetActive;
// JInternalFrame[] frames = m_ContentApplicationWindow.getAllFrames();
// if (frames != null) {
// for (int i = frames.length - 1; i >= 0; i--) {
// frames[i].setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
// }
// }
}
// else {
// setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
// }
}
public boolean getHelpState() {
return m_HelpState;
}
// 22/07/2005 Kenneth Lai: Add for JHelp>>
//<< 21/02/2005 Mark Li. Add for dynamic update the Case List window
public ManagementWindow getManagementWindow(){
return m_ManagementWindow;
}
//21/02/2005 Mark Li. Add for dynamic update the Case List window>>
/**
* Create a new Case.
* @param a_CaseID temporary ID of the new Case.
*/
public void newCase(String a_CaseID) {
m_NewCase++;
CaseWindow caseWin = new CaseWindow(this, true, a_CaseID, true, m_DMEngineType);
caseWin.setSize(400, 300);// <<22/07/2005 Kenneth Lai: Add for new Case Window cascade problem>>
caseWin.setTitle(Resource.srcStr("UntitledTitle") + m_NewCase + " *");
caseWin.setVisible(true);
caseWin.moveToFront();
m_ContentApplicationWindow.add(caseWin);
CaseWindowList.add(caseWin);
//cascadeWindows();
try {
caseWin.setMaximum(true);
caseWin.setSelected(true);
} catch (java.beans.PropertyVetoException pe) {
}
}
/**
* Copies a specific Case.
* @param a_CaseID ID of the case to be copied.
*/
public void copyCase(String a_CaseID) {
if (a_CaseID == null || a_CaseID.trim().equals(""))
System.err.println("Cannot copy case without case id");
newCase(a_CaseID);
}
/**
* Saves the Case of a CaseWindow in focus.
*/
public void saveCase() {
Component iFrame = m_ContentApplicationWindow.getSelectedFrame();
if (iFrame instanceof CaseWindow) {
CaseWindow caseWindow = (CaseWindow) iFrame;
caseWindow.save();
sendNotifytoObserver(NOTIFY_SAVE_CASE+"|"+caseWindow.getCaseID());
};
}
/**
* Saves Cases of all openning CaseWindows.
*/
public void saveAllCase() {
JInternalFrame[] frames = m_ContentApplicationWindow.getAllFrames();
if (frames != null) {
for (int i = 0; i < frames.length; i++) {
if (frames[i].isVisible()) {
if (frames[i] instanceof CaseWindow)
((CaseWindow) frames[i]).save();
}
}
}
}
/**
* Closes a CaseWindow in focus.
*/
public void closeCase() {
Component iFrame = m_ContentApplicationWindow.getSelectedFrame();
if (iFrame instanceof CaseWindow) {
((CaseWindow) iFrame).close();
}
}
/**
* Closes all openning CaseWindows.
* TWang. Apri 1, 2005.
* @return true of all CaseWindows are sucessfully closed; false otherwise.
*/
public boolean closeAllCase() {
JInternalFrame[] frames = m_ContentApplicationWindow.getAllFrames();
if (frames != null) {
//count how many CaseWindow should be closed.
int shouldDeleteNum = 0;
for (int i = 0; i < frames.length; i++) {
if (frames[i].isVisible() && (frames[i] instanceof CaseWindow)) {
shouldDeleteNum ++;
}
}
int previousShouldDel = 0;
boolean isMax = false;
while (shouldDeleteNum > 0){
previousShouldDel = shouldDeleteNum;
for (int i = 0; i < frames.length; i++) {
if (frames[i].isVisible() && (frames[i] instanceof CaseWindow) && frames[i].isSelected()) {
//Close CaseWindow according to the selection sequence
if (!((CaseWindow) frames[i]).close())
return false;
else{
shouldDeleteNum --;
}
} else if (frames[i].isVisible() && (frames[i] instanceof ManagementWindow && frames[i].isSelected())){
//if the next focus is a ManagementWindow, record isMax or not.
isMax = ((ManagementWindow)frames[i]).isMaximum();
}
}
if (previousShouldDel == shouldDeleteNum){
//if no Selected CaseWindow is found, select one.
setFocusToFirstCaseWindow(isMax);
}
}
}
//finally, set focus on the Management Window if it is visible
for (int i = 0; i < frames.length; i++) {
if (frames[i].isVisible() && (frames[i] instanceof ManagementWindow)) {
try {
frames[i].setSelected(true);
} catch (java.beans.PropertyVetoException pe) {
}
break;
}
}
return true;
}
/**
* Dispose all CaseWindows.
* Xiaojun Chen. July 14, 2006.
* @return true of all CaseWindows are sucessfully disposed; false otherwise.
*/
public boolean disposeAllCases() {
JInternalFrame[] frames = m_ContentApplicationWindow.getAllFrames();
if (frames != null) {
//count how many CaseWindow should be closed.
int shouldDeleteNum = 0;
for (int i = 0; i < frames.length; i++) {
if ((frames[i] instanceof CaseWindow)) {
shouldDeleteNum ++;
}
}
int previousShouldDel = 0;
boolean isMax = false;
while (shouldDeleteNum > 0){
previousShouldDel = shouldDeleteNum;
for (int i = 0; i < frames.length; i++) {
if ((frames[i] instanceof CaseWindow) && frames[i].isSelected()) {
//Close CaseWindow according to the selection sequence
if (!((CaseWindow) frames[i]).close())
return false;
else{
shouldDeleteNum --;
}
} else if ((frames[i] instanceof ManagementWindow && frames[i].isSelected())){
//if the next focus is a ManagementWindow, record isMax or not.
isMax = ((ManagementWindow)frames[i]).isMaximum();
}
}
if (previousShouldDel == shouldDeleteNum){
//if no Selected CaseWindow is found, select one.
setFocusToFirstCaseWindow(isMax);
}
}
}
//finally, set focus on the Management Window if it is visible
for (int i = 0; i < frames.length; i++) {
if (frames[i].isVisible() && (frames[i] instanceof ManagementWindow)) {
try {
frames[i].setSelected(true);
} catch (java.beans.PropertyVetoException pe) {
}
break;
}
}
return true;
}
/**
* Deletes a specific Case.
* @param a_CaseID ID of the case to be deleted.
*/
public void deleteCase(String a_CaseID) {
Component iFrame = m_ContentApplicationWindow.getSelectedFrame();
if (iFrame instanceof CaseWindow) {
((CaseWindow) iFrame).delete();
m_ManagementWindow.getCaseListPanel().getCaseListTree().removeChildNode(a_CaseID);
sendNotifytoObserver(NOTIFY_DELETE_CASE+"|"+a_CaseID);
return;
}
else if (iFrame instanceof ManagementWindow) {
JInternalFrame[] frames = m_ContentApplicationWindow.getAllFrames();
if (frames != null) {
for (int i = 0; i < frames.length; i++) {
if (frames[i].isVisible()) {
if (frames[i] instanceof CaseWindow) {
if (((CaseWindow) frames[i]).getCaseID().equals(a_CaseID))
{
((CaseWindow) frames[i]).delete();
m_ManagementWindow.getCaseListPanel().getCaseListTree().removeChildNode(a_CaseID);
sendNotifytoObserver(NOTIFY_DELETE_CASE+"|"+a_CaseID);
return;
}
}
}
}
}
String deletedCaseName = null;
try{
BICase deletedCase = CaseHandler.getInstance().getCase(a_CaseID,false);
deletedCaseName
= deletedCase.getTaskNode().getCaseName()
+ "( ID:" + CaseListTree.getFormatedCaseID(a_CaseID) + " )";
}catch (Exception e){
}
int option =
JOptionPane.showConfirmDialog(
(Component) this,
Resource.srcStr("DeleteConfirm") + deletedCaseName + "\"?",
"AlphaMiner",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if (option == JOptionPane.YES_OPTION)
try {
// <<21/03/2005 Mark Li: modify to update caseList when press delete button
// String a_caseName = CaseHandler.getInstance().getCase(a_CaseID,false).getCaseName()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -