📄 mainwindow.java
字号:
// MainWindow.java// Copyright (c) 1998, Regents of the University of California// $Id: MainWindow.java,v 1.3 1999/12/14 06:07:34 marcel Exp $//import com.sun.java.swing.*;import javax.swing.*;import javax.swing.event.*;//import com.sun.java.swing.event.*;//import com.sun.java.swing.preview.*;import java.awt.event.*;import java.awt.*;import java.io.*;import java.lang.*;import java.io.*;import java.util.*;/* * MainWindow - main amdb GUI window * * Contains menus, console window, etc. */public class MainWindow extends JFrame //implements WindowListener{// GUI states w.r.t. status of menu itemsstatic final int INITSTATE = 0;static final int IDXOPENSTATE = 1;static final int DEBUGSTATE = 2;static final int ANLOPENSTATE = 3;static final int STOPSTATE = 4;// various stuffJDesktopPane desktop;public ConsoleWindow consoleFrame; // our text output windowboolean scriptWasCancelled; // set by 'Stop' button, read by execution threadint guiState; // one of the above; determines which menu items are enabledString idxName; // filename of currently open indexOpThread opThread; // thread to execute libgist operations (debugging fcts in separate thread)Workload wkld; // profile we're currently working withWkldStatsDlg wkldStatsDlg;SplitStatsDlg splitStatsDlg;PenaltyStatsDlg penaltyStatsDlg;TreeView treeView; // internal frame subclass for display of tree structureboolean isOpen; // true if some index is openedLibgistCommand cmd; // passed to opThread for executionboolean inWkld = false; // true if opThread is executing an analysis workload for usStringBuffer echoBuffer = new StringBuffer();public ResultProcessor echoResults = new ResultProcessor() { public void processItem(String key, String data) { if (!inWkld && showResultsItem.getState()) { consoleFrame.echoTuple(key + ": " + data); } } };// global GUI state, needed for enabling/disabling themJMenuBar menuBar;JMenu fileMenu, debugMenu, opsMenu, analysisMenu, windowsMenu, treeStatsMenu;JMenuItem newItem, openItem, closeItem, flushItem, exitItem, settingsItem, optionsItem;JMenuItem dumpItem;JMenuItem insertItem, deleteItem, searchItem, executeItem;JMenuItem breakpointsItem;JCheckBoxMenuItem traceAllItem;AbstractAction stepAction, nextAction, contAction, stopAction, cancelAction;JMenuItem newAnalysisItem, openAnalysisItem, completeAnalysisItem, wkldStatsItem, splitStatsItem, penaltyStatsItem;JCheckBoxMenuItem showCmdsItem, showResultsItem, showTraceItem;JCheckBoxMenuItem checkPenaltyItem;JMenuItem utilItem, slotCntItem, predSzItem;JMenuItem tileItem;// analysis infoAnalysisInfo analysisInfo;public voidwindowActivated(WindowEvent e){}public voidwindowClosed(WindowEvent e){}public voidwindowClosing(WindowEvent e){ try { Libgist.close(); } catch (LibgistException exc) { // can't do very much at this point System.err.println("Could not close " + exc); } opThread.stopNow(); System.exit(0); }public voidwindowDeactivated(WindowEvent e){}public voidwindowDeiconified(WindowEvent e){}public voidwindowIconified(WindowEvent e){}public voidwindowOpened(WindowEvent e){}public TreeViewtreeView(){ return treeView;}// returns the old state and applies the new state// 'isScript' and 'enableCancel' are only relevant for debug modepublic intsetGuiState(int state){ return setGuiState(state, false, false);}public intsetGuiState(int state, boolean isScript, boolean enableCancel){ DbgOutput.println(2, "state: " + state); int oldState = guiState; guiState = state; switch (guiState) { case INITSTATE: enableInit(); break; case IDXOPENSTATE: enableIndexOpened(); break; case DEBUGSTATE: enableDebug(isScript, enableCancel); break; case ANLOPENSTATE: enableAnalysis(); break; } return oldState;}// enable all menu items/menus for operations that require // a Gist to work on, excluding the debugging functionsprivate voidenableIndexOpened(){ DbgOutput.println(1, "enableIndexOpened()"); setAllEnabled(true); // debugging operations only during operations stepAction.setEnabled(false); stopAction.setEnabled(false); cancelAction.setEnabled(false); nextAction.setEnabled(false); contAction.setEnabled(false); // no profile opened completeAnalysisItem.setEnabled(false); wkldStatsItem.setEnabled(false); splitStatsItem.setEnabled(false); penaltyStatsItem.setEnabled(false);}// enable startup menu items that don't require an index or profile to work withprivate voidenableInit(){ setAllEnabled(false); // we can create and open indices fileMenu.setEnabled(true); newItem.setEnabled(true); openItem.setEnabled(true); // we can execute scripts opsMenu.setEnabled(true); executeItem.setEnabled(true); // we can open profile analysisMenu.setEnabled(true); openAnalysisItem.setEnabled(true);}// enable/disable all menu items/actionsprivate voidsetAllEnabled(boolean enabled){ DbgOutput.println(2, "enabled: " + enabled); fileMenu.setEnabled(enabled); newItem.setEnabled(enabled); openItem.setEnabled(enabled); closeItem.setEnabled(enabled); //dumpItem.setEnabled(enabled); flushItem.setEnabled(enabled); optionsItem.setEnabled(enabled); settingsItem.setEnabled(enabled); debugMenu.setEnabled(enabled); stepAction.setEnabled(enabled); stopAction.setEnabled(enabled); cancelAction.setEnabled(enabled); nextAction.setEnabled(enabled); contAction.setEnabled(enabled); breakpointsItem.setEnabled(enabled); opsMenu.setEnabled(enabled); insertItem.setEnabled(enabled); deleteItem.setEnabled(enabled); searchItem.setEnabled(enabled); executeItem.setEnabled(enabled); treeStatsMenu.setEnabled(enabled); utilItem.setEnabled(enabled); predSzItem.setEnabled(enabled); slotCntItem.setEnabled(enabled); analysisMenu.setEnabled(enabled); newAnalysisItem.setEnabled(enabled); openAnalysisItem.setEnabled(enabled); completeAnalysisItem.setEnabled(enabled); wkldStatsItem.setEnabled(enabled); splitStatsItem.setEnabled(enabled); penaltyStatsItem.setEnabled(enabled); // these are never disabled windowsMenu.setEnabled(true); showCmdsItem.setEnabled(true); showResultsItem.setEnabled(true); showTraceItem.setEnabled(true); tileItem.setEnabled(true);}// set all menu items related to debugging enabled, all else disabled;// for insert, remove and fetch: continue, step// additionally for scripts: next and sometimes cancelprivate voidenableDebug(boolean isScript, boolean enableCancel){ setAllEnabled(false); debugMenu.setEnabled(true); stepAction.setEnabled(true); cancelAction.setEnabled(enableCancel); nextAction.setEnabled(isScript); contAction.setEnabled(true); breakpointsItem.setEnabled(true); treeStatsMenu.setEnabled(true); utilItem.setEnabled(true); predSzItem.setEnabled(true); slotCntItem.setEnabled(true);}// set all menu items except for "stop" to disabledprivate voidenableStop(){ setAllEnabled(false); debugMenu.setEnabled(true); stopAction.setEnabled(true);}///////////////////////////////////////////////////////////////////////////////// enableAnalysis - enable menu items for analysis//// Description://///////////////////////////////////////////////////////////////////////////////private voidenableAnalysis(){ setAllEnabled(false); analysisMenu.setEnabled(true); // get info on state of analysis String scriptFile; Libgist.getAnalysisInfo(analysisInfo); // newAnalysisItem not enabled: can't create new profile, we just closed the index newAnalysisItem.setEnabled(false); openAnalysisItem.setEnabled(true); completeAnalysisItem.setEnabled(true); wkldStatsItem.setEnabled(analysisInfo.actualHasWkldStats); splitStatsItem.setEnabled(analysisInfo.actualHasSplitStats); penaltyStatsItem.setEnabled(analysisInfo.actualHasPenaltyStats); // general tree statistics are okay treeStatsMenu.setEnabled(true); utilItem.setEnabled(true); predSzItem.setEnabled(true); slotCntItem.setEnabled(true); // can always select another index or exit fileMenu.setEnabled(true); newItem.setEnabled(true); openItem.setEnabled(true); exitItem.setEnabled(true);}// saves the current configuration (breakpoints, window sizes and positions...)private voidsaveConfig(){ try { ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream(idxName + ".config")); Breakpoints.save(out); Properties.save(out); out.close(); } catch (IOException exc) { consoleFrame.echoInfo("Could not save settings: " + exc); }}// reads the configuration (breakpoints, window sizes and positions...) for the current indexprivate voidrestoreConfig(){ Breakpoints.reset(); Properties.reset(); try { ObjectInputStream in = new ObjectInputStream( new FileInputStream(idxName + ".config")); Breakpoints.restore(in); Properties.restore(in); in.close(); } catch (IOException exc) { // something went wrong - there probably was no .config file // ignore it }}// resets the configuration (breakpoints, window sizes and positions...)private voidresetConfig(){ Breakpoints.reset(); Properties.reset();}///////////////////////////////////////////////////////////////////////////////// resetState - clean up when switching GUI state //// Description:// - goes to INITSTATE and makes all open dialogs invisible///////////////////////////////////////////////////////////////////////////////private voidresetState(){ if (treeView != null) { treeView.dispose(); treeView = null; } isOpen = false; idxName = null; setGuiState(INITSTATE); //setTitle("amdb"); setTree(""); wkldStatsDlg.setVisible(false); splitStatsDlg.setVisible(false); penaltyStatsDlg.setVisible(false);}// tiles treeView, globalView and consoleFramepublic voidtile(){ if (treeView != null) treeView.tile(); consoleFrame.tile();}///////////////////////////////////////////////////////////////////////////////// echoCmd - display command in console//// Description://// Exceptions: none///////////////////////////////////////////////////////////////////////////////public voidechoCmd(LibgistCommand cmd){ if (!showCmdsItem.getState()) { return; } echoBuffer.setLength(0); // reset switch (cmd.cmdType) { case LibgistCommand.INSERT: echoBuffer.append("insert \"").append(cmd.key); echoBuffer.append("\" \"").append(cmd.data).append("\""); break; case LibgistCommand.REMOVE: echoBuffer.append("delete \"").append(cmd.qual); echoBuffer.append("\""); break; case LibgistCommand.FETCH: echoBuffer.append("select ");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -