001    /* EVolve - an Extensible Software Visualization Framework
002     * Copyright (C) 2001-2002 Qin Wang
003     *
004     * This library is free software; you can redistribute it and/or
005     * modify it under the terms of the GNU Library General Public
006     * License as published by the Free Software Foundation; either
007     * version 2 of the License, or (at your option) any later version.
008     *
009     * This library is distributed in the hope that it will be useful,
010     * but WITHOUT ANY WARRANTY; without even the implied warranty of
011     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
012     * Library General Public License for more details.
013     *
014     * You should have received a copy of the GNU Library General Public
015     * License along with this library; if not, write to the
016     * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
017     * Boston, MA 02111-1307, USA.
018     */
019    
020    /*
021     * EVolve is distributed at http://www.sable.mcgill.ca/EVolve/
022     */
023    
024    package EVolve;
025    
026    import EVolve.visualization.*;
027    import EVolve.util.*;
028    import java.awt.*;
029    import java.awt.event.*;
030    import java.util.*;
031    import java.io.*;
032    import javax.swing.*;
033    import javax.swing.event.*;
034    
035    public class UIManager {
036        private JFrame frame;
037        private JDesktopPane desktop;
038        private boolean doNotRemoveWindow;
039    
040        private ArrayList windowList;
041    
042        private JPanel panelStatus;
043        private JLabel labelStatus;
044    
045        private JMenuBar menuBar;
046    
047        private JMenu menuFile;
048        private JMenuItem itemLoad;
049        private JMenuItem itemExit;
050    
051        private JMenu menuVisualization;
052        private JMenu menuNew;
053        private JMenuItem[] itemNew;
054        private JMenuItem itemVisualize;
055        private JMenuItem itemPredefinedVisualize;
056    
057        private JMenu menuWindow;
058        private JMenuItem itemArrange;
059        private JMenuItem itemVizNow;
060    
061        /** added functions */
062        private JMenu menuTool;
063    
064        private JMenu menuBatch;
065        private JMenuItem itemBuildBatch;
066        private JMenuItem itemRunBatch;
067    
068        private JMenu menuPredefinedViz;
069        private JMenuItem itemReadSetting;
070        private JMenuItem itemSaveSetting;
071        private JMenu menuUseSetting;
072    
073        private JMenu menuOverlapViz;
074        private JMenuItem itemLinkViz;
075    
076        private JMenu menuSelection;
077        private JMenuItem itemCurrentSelection;
078    
079        private JRadioButtonMenuItem[] itemSettings;
080        private JMenuItem itemSynOverlap;
081        private JMenuItem itemAsynOverlap;
082    
083        private JMenu menuOptions;
084        private JMenuItem itemPath;
085        private JMenuItem itemInfo;
086    
087        private JMenu menuHelp;
088        private JMenuItem itemAbout;
089    
090        private JDialog dialogTimer;
091        private JLabel labelTimer;
092        private javax.swing.Timer timer;
093    
094        private JDialog dialog;
095        private JComboBox comboColumn;
096        private JList listVisualization;
097        private DefaultListModel model;
098    
099        private JDialog dialogAbout;
100    
101        private String lastConfigDir, lastDataDir, lastResultDir;
102    
103        public UIManager() {
104            try {
105                javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getCrossPlatformLookAndFeelClassName());
106            } catch (Exception e) {}
107    
108            frame = new JFrame(Scene.VERSION);
109    
110            ImageIcon icon = new ImageIcon(this.getClass().getResource("img/logo_icon.gif"));
111            frame.setIconImage(icon.getImage());
112    
113            frame.addWindowListener(new WindowAdapter() {
114                public void windowClosing(WindowEvent e) {
115                    System.exit(0);
116                }
117            });
118    
119            frame.setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
120    
121            windowList = new ArrayList();
122    
123            createMenu();
124    
125            desktop = new JDesktopPane();
126            desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
127            frame.getContentPane().add(desktop, BorderLayout.CENTER);
128    
129            panelStatus = new JPanel(new BorderLayout());
130            panelStatus.setBackground(new Color(240, 240, 240));
131            panelStatus.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLoweredBevelBorder(), BorderFactory.createLineBorder(new Color(240, 240, 240), 2)));
132            frame.getContentPane().add(panelStatus, BorderLayout.SOUTH);
133    
134            labelStatus = new JLabel(Scene.VERSION);
135            panelStatus.add(labelStatus, BorderLayout.WEST);
136    
137            frame.setVisible(true);
138    
139            createTimer();
140            createDialog();
141            createAbout();
142            doNotRemoveWindow = false;
143    
144            lastDataDir = "";
145            lastConfigDir = "";
146            lastResultDir="";
147        }
148    
149        private void createMenu() {
150            menuBar = new JMenuBar();
151            frame.setJMenuBar(menuBar);
152    
153            menuFile = new JMenu("File");
154            menuFile.setMnemonic(KeyEvent.VK_F);
155            menuBar.add(menuFile);
156    
157            itemLoad = new JMenuItem("Load Data...");
158            itemLoad.setMnemonic(KeyEvent.VK_L);
159            itemLoad.addActionListener(new ActionListener() {
160                public void actionPerformed(ActionEvent e) {
161                    Scene.loadDataSource();
162                    for (int i = 0; i<Scene.getToolsManager().getPredefinedVisualizationRunner().getPredefinedVisualizationNumber(); i++) {
163                        Scene.getToolsManager().getPredefinedVisualizationRunner().getPredefinedVizByIndex(i).setTranslated(false);
164                    }
165                }
166            });
167            menuFile.add(itemLoad);
168    
169            menuFile.addSeparator();
170    
171            itemExit = new JMenuItem("Exit");
172            itemExit.setMnemonic(KeyEvent.VK_X);
173            itemExit.addActionListener(new ActionListener() {
174                public void actionPerformed(ActionEvent e) {
175                    System.exit(0);
176                }
177            });
178            menuFile.add(itemExit);
179    
180            menuVisualization = new JMenu("Visualization");
181            menuVisualization.setMnemonic(KeyEvent.VK_V);
182            menuBar.add(menuVisualization);
183    
184            menuNew = new JMenu("New");
185            menuNew.setMnemonic(KeyEvent.VK_N);
186            menuVisualization.add(menuNew);
187    
188            itemPredefinedVisualize = new JMenuItem("Predefined Visualize");
189            itemPredefinedVisualize.setMnemonic(KeyEvent.VK_P);
190            itemPredefinedVisualize.addActionListener(new ActionListener() {
191                public void actionPerformed(ActionEvent e) {
192                    Scene.getToolsManager().getPredefinedVisualizationRunner().runPredefinedVisualization();
193                }
194            });
195            menuVisualization.add(itemPredefinedVisualize);
196    
197            itemVisualize = new JMenuItem("Visualize...");
198            itemVisualize.setMnemonic(KeyEvent.VK_V);
199            itemVisualize.addActionListener(new ActionListener() {
200                public void actionPerformed(ActionEvent e) {
201                    Scene.getVisualizationManager().preVisualize();
202                }
203            });
204            menuVisualization.add(itemVisualize);
205    
206            menuWindow = new JMenu("Window");
207            menuWindow.setMnemonic(KeyEvent.VK_W);
208            menuBar.add(menuWindow);
209    
210            itemArrange = new JMenuItem("Arrange...");
211            itemArrange.setMnemonic(KeyEvent.VK_A);
212            itemArrange.addActionListener(new ActionListener() {
213                public void actionPerformed(ActionEvent e) {
214                    arrange();
215                }
216            });
217            menuWindow.add(itemArrange);
218    
219            menuTool = new JMenu("Tools");
220            menuTool.setMnemonic(KeyEvent.VK_T);
221            menuBar.add(menuTool);
222    
223            itemBuildBatch = new JMenuItem("Build Batch");
224            itemBuildBatch.setMnemonic(KeyEvent.VK_B);
225            itemBuildBatch.addActionListener(new ActionListener() {
226                public void actionPerformed(ActionEvent e) {
227                    Scene.getToolsManager().getBatchRunner().showWindow();
228                 }
229            });
230            itemRunBatch = new JMenuItem("Run Batch");
231            itemRunBatch.setMnemonic(KeyEvent.VK_R);
232            itemRunBatch.addActionListener(new ActionListener() {
233                public void actionPerformed(ActionEvent e) {
234                    if (Scene.getToolsManager().getBatchRunner() != null)
235                        Scene.getToolsManager().getBatchRunner().runBatch();
236                }
237            });
238            menuBatch = new JMenu("Auto Generate Visualizations");
239            menuBatch.setMnemonic(KeyEvent.VK_A);
240            menuBatch.add(itemBuildBatch);
241            menuBatch.add(itemRunBatch);
242    
243            itemReadSetting = new JMenuItem("Load Predefined Viz Setting");
244            itemReadSetting.setMnemonic(KeyEvent.VK_L);
245            itemReadSetting.addActionListener(new ActionListener() {
246                public void actionPerformed(ActionEvent e) {
247                    VisualizationSerializer.v().loadConfiguration();
248                }
249            });
250            itemSaveSetting = new JMenuItem("Save Current Viz Setting");
251            itemSaveSetting.setMnemonic(KeyEvent.VK_S);
252            itemSaveSetting.addActionListener(new ActionListener() {
253                public void actionPerformed(ActionEvent e) {
254                    ArrayList vizList = Scene.getVisualizationManager().getVisualizationList();
255                    if (vizList.size() == 0) return;
256    
257                    VisualizationSerializer.v().showSavingDialog();
258                }
259            });
260            menuUseSetting = new JMenu("Choose Predefined Viz Setting");
261            menuUseSetting.setMnemonic(KeyEvent.VK_C);
262            menuPredefinedViz = new JMenu("Predefined Visualization");
263            menuPredefinedViz.setMnemonic(KeyEvent.VK_P);
264            menuPredefinedViz.add(itemReadSetting);
265            menuPredefinedViz.add(itemSaveSetting);
266            menuPredefinedViz.add(menuUseSetting);
267    
268    
269            itemLinkViz = new JMenuItem("Unify Visualizations...");
270            itemLinkViz.setMnemonic(KeyEvent.VK_U);
271            itemLinkViz.addActionListener(new ActionListener() {
272                public void actionPerformed(ActionEvent e) {
273                    Scene.getToolsManager().getLinkedVisualizationRunner().showWindow();
274                }
275            });
276    
277            itemSynOverlap = new JMenuItem("Overlap Viz from Same Data Source");
278            itemSynOverlap.setMnemonic(KeyEvent.VK_S);
279            itemSynOverlap.addActionListener(new ActionListener() {
280                public void actionPerformed(ActionEvent e) {
281                    Scene.getToolsManager().getOverlapVisualizationRunner().getSynOverlapper().showWindow();
282                }
283            });
284            itemAsynOverlap = new JMenuItem("Overlap Viz from Different Data Source");
285            itemAsynOverlap.setMnemonic(KeyEvent.VK_D);
286            itemAsynOverlap.addActionListener(new ActionListener() {
287                public void actionPerformed(ActionEvent e) {
288                    Scene.getToolsManager().getOverlapVisualizationRunner().getAsynOverlapper().showWindow();
289                }
290            });
291            menuOverlapViz = new JMenu("Overlap Visualizations");
292            menuOverlapViz.setMnemonic(KeyEvent.VK_O);
293            menuOverlapViz.add(itemSynOverlap);
294            menuOverlapViz.add(itemAsynOverlap);
295    
296    
297            menuSelection = new JMenu("Selection");
298            menuSelection.setMnemonic(KeyEvent.VK_S);
299            menuSelection.addMenuListener(new MenuListener() {
300                public void menuSelected(MenuEvent e) {
301                    menuSelection.removeAll();
302                    createSelectionMenuItem();
303                }
304                public void menuDeselected(MenuEvent e) {
305    
306                }
307                public void menuCanceled(MenuEvent e) {
308    
309                }
310            });
311            menuBar.add(menuSelection);
312    
313            menuTool.add(menuBatch);
314            menuTool.add(menuPredefinedViz);
315            menuTool.add(menuOverlapViz);
316            menuTool.add(itemLinkViz);
317    
318            menuOptions = new JMenu("Options");
319            menuOptions.setMnemonic(KeyEvent.VK_O);
320            menuBar.add(menuOptions);
321    
322            itemPath = new JMenuItem("Setting Path...");
323            itemPath.setMnemonic(KeyEvent.VK_S);
324            itemPath.addActionListener(new ActionListener() {
325                public void actionPerformed(ActionEvent e) {
326                    SceneSetting.v().showPathDialog();
327                }
328            });
329    
330            itemInfo = new JMenuItem("View Current Setting");
331            itemInfo.setMnemonic(KeyEvent.VK_V);
332            itemInfo.addActionListener(new ActionListener() {
333                public void actionPerformed(ActionEvent e) {
334                    SceneSetting.v().showCurrentSetting();
335                }
336            });
337            menuOptions.add(itemPath);
338            menuOptions.add(itemInfo);
339    
340            menuHelp = new JMenu("Help");
341            menuHelp.setMnemonic(KeyEvent.VK_H);
342            menuBar.add(menuHelp);
343    
344            itemAbout = new JMenuItem("About EVolve...");
345            itemAbout.setMnemonic(KeyEvent.VK_A);
346            itemAbout.addActionListener(new ActionListener() {
347                public void actionPerformed(ActionEvent e) {
348                    showDialog(dialogAbout, 300, 150);
349                }
350            });
351            menuHelp.add(itemAbout);
352    
353            itemVizNow = new JMenuItem("Visualize Now!");
354            itemVizNow.setMnemonic(KeyEvent.VK_N);
355            itemVizNow.addActionListener(new ActionListener() {
356                public void actionPerformed(ActionEvent e) {
357                    Scene.getVisualizationManager().viuslizeNow();
358                }
359            });
360            menuBar.add(itemVizNow);
361        }
362    
363        private void createTimer() {
364            dialogTimer = new JDialog(frame, "Processing Progress", true);
365            dialogTimer.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
366            dialogTimer.getContentPane().setLayout(new GridLayout(3, 1));
367    
368            dialogTimer.getContentPane().add(new JLabel(""));
369    
370            JPanel panelTimer = new JPanel(new FlowLayout());
371            dialogTimer.getContentPane().add(panelTimer);
372    
373            panelTimer.add(new JLabel("Events processed:"));
374    
375            labelTimer = new JLabel("");
376            panelTimer.add(labelTimer);
377    
378            dialogTimer.getContentPane().add(new JLabel(""));
379    
380            timer = new javax.swing.Timer(1000, new ActionListener() {
381                public void actionPerformed(ActionEvent e) {
382                    labelTimer.setText(" " + Scene.getDataManager().getEventCounter());
383                }
384            });
385        }
386    
387        private void createDialog() {
388            dialog = new JDialog(frame, "Select Windows", true);
389            model = new DefaultListModel();
390            listVisualization = new JList(model);
391            listVisualization.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
392    
393            JPanel panelColumn = new JPanel(new FlowLayout());
394            dialog.getContentPane().add(panelColumn, BorderLayout.NORTH);
395    
396            panelColumn.add(new JLabel("Number of column: "));
397    
398            comboColumn = new JComboBox();
399            comboColumn.addItem("   1   ");
400            comboColumn.addItem("   2   ");
401            comboColumn.addItem("   3   ");
402            comboColumn.addItem("   4   ");
403            panelColumn.add(comboColumn);
404    
405            JScrollPane scrollPane = new JScrollPane(listVisualization);
406            scrollPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Choose windows"));
407            dialog.getContentPane().add(scrollPane, BorderLayout.CENTER);
408    
409            JPanel panelButton = new JPanel(new FlowLayout());
410            dialog.getContentPane().add(panelButton, BorderLayout.SOUTH);
411    
412            JButton buttonApply = new JButton("Apply");
413            buttonApply.addActionListener(new ActionListener() {
414                public void actionPerformed(ActionEvent e) {
415                    dialogApply();
416                }
417            });
418            panelButton.add(buttonApply);
419    
420            JButton buttonCancel = new JButton("Cancel");
421            buttonCancel.addActionListener(new ActionListener() {
422                public void actionPerformed(ActionEvent e) {
423                    dialogCancel();
424                }
425            });
426            panelButton.add(buttonCancel);
427        }
428    
429        public void createAbout() {
430            dialogAbout = new JDialog(frame, "About EVolve", true);
431            dialogAbout.getContentPane().setBackground(new Color(240, 240, 240));
432            dialogAbout.getContentPane().add(new JLabel(new ImageIcon(this.getClass().getResource("img/logo_about.gif"))), BorderLayout.CENTER);
433        }
434    
435        public void init() {
436            if (doNotRemoveWindow) return;
437            windowList.clear();
438            JInternalFrame[] frame = desktop.getAllFrames();
439            for (int i = 0; i < frame.length; i++) {
440                frame[i].dispose();
441            }
442            menuVisualization.setEnabled(false);
443            menuSelection.setEnabled(false);
444            menuWindow.setEnabled(false);
445            itemVizNow.setEnabled(false);
446        }
447    
448        public JFrame getFrame() {
449            return frame;
450        }
451    
452        public void setStatus(String status) {
453            labelStatus.setText(status);
454        }
455    
456        public void enableMenu() {
457            menuNew.removeAll();
458            String[] name = Scene.getVisualizationManager().getFactoryName();
459            itemNew = new JMenuItem[name.length];
460            for (int i = 0; i < itemNew.length; i++) {
461                itemNew[i] = new JMenuItem(((char)(i + 65)) + " - " + name[i]);
462                itemNew[i].setMnemonic(i + 65);
463                itemNew[i].addActionListener(new ActionListener() {
464                    public void actionPerformed(ActionEvent e) {
465                        Scene.getVisualizationManager().newVisualization(((JMenuItem)(e.getSource())).getText().substring(4));
466                        menuSelection.removeAll();
467                        createSelectionMenuItem();
468                    }
469                });
470                menuNew.add(itemNew[i]);
471            }
472    
473            menuVisualization.setEnabled(true);
474            menuWindow.setEnabled(true);
475            itemVizNow.setEnabled(true);
476            menuSelection.setEnabled(true);
477        }
478    
479        public void showDialog(JDialog dialog, int width, int height) {
480            dialog.setBounds((Toolkit.getDefaultToolkit().getScreenSize().width - width) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - height) / 2, width, height);
481            dialog.setVisible(true);
482        }
483    
484        public void addVisualization(Visualization visualization) {
485            Window newWindow = new Window(visualization);
486            newWindow.setBounds(0, 0, desktop.getSize().width, desktop.getSize().height);
487            newWindow.setVisible(true);
488    
489            desktop.add(newWindow);
490            try {
491                newWindow.setSelected(true);
492            } catch (Exception e) {};
493    
494            windowList.add(newWindow);
495    
496            visualization.setWindow(newWindow);
497        }
498    
499        public Window addOverlappedVisualization(OverlapVisualization visual) {
500            Window newWindow = new Window(visual);
501            newWindow.setBounds(0, 0, desktop.getSize().width/2, desktop.getSize().height/2);
502            newWindow.setVisible(true);
503    
504            desktop.add(newWindow);
505            try {
506                newWindow.setSelected(true);
507            } catch (Exception e) {};
508    
509            windowList.add(newWindow);
510            return newWindow;
511        }
512    
513        public void removeWindow(Window window) {
514            window.dispose();
515            Scene.getVisualizationManager().removeVisualization(window.getVisualization());
516            windowList.remove(window);
517        }
518    
519        private void arrange() {
520            int selectedCounter = 0;
521            for (int i = 0; i < windowList.size(); i++) {
522                if (!((Window)(windowList.get(i))).isIcon()) {
523                    selectedCounter++;
524                }
525            }
526    
527            int[] selected = new int[selectedCounter];
528            selectedCounter = 0;
529    
530            model.removeAllElements();
531    
532            for (int i = 0; i < windowList.size(); i++) {
533                model.addElement(((Window)(windowList.get(i))).getTitle());
534                if (!((Window)(windowList.get(i))).isIcon()) {
535                    selected[selectedCounter] = i;
536                    selectedCounter++;
537                }
538            }
539    
540            listVisualization.setSelectedIndices(selected);
541    
542            showDialog(dialog, 270, 360);
543        }
544    
545        public void startTimer() {
546            labelTimer.setText("");
547            timer.start();
548            showDialog(dialogTimer, 300, 100);
549        }
550    
551        public void endTimer() {
552            timer.stop();
553            dialogTimer.setVisible(false);
554        }
555    
556        private void dialogApply() {
557            dialog.setVisible(false);
558    
559            for (int i = 0; i < windowList.size(); i++) {
560                try {
561                    ((Window)(windowList.get(i))).setIcon(true);
562                } catch (Exception e) {}
563            }
564    
565            int[] selected = listVisualization.getSelectedIndices();
566    
567            if (selected.length != 0) {
568                boolean[] located = new boolean[selected.length];
569                for (int i = 0; i < located.length; i++) {
570                    located[i] = false;
571                }
572    
573                int columnNumber = comboColumn.getSelectedIndex() + 1;
574                int width = desktop.getWidth() / columnNumber;
575                int height = desktop.getHeight() / ((selected.length - 1) / columnNumber + 1);
576    
577                for (int i = 0; i < selected.length; i++) {
578                    int x = (i % columnNumber) * width;
579                    int y = (i / columnNumber) * height;
580    
581                    int minDistance = Integer.MAX_VALUE;
582                    int minIndex = -1;
583    
584                    for (int j = 0; j < selected.length; j++) {
585                        if (!located[j]) {
586                            int distance = (((Window)(windowList.get(selected[j]))).getX() - x) * (((Window)(windowList.get(selected[j]))).getX() - x) + (((Window)(windowList.get(selected[j]))).getY() - y) * (((Window)(windowList.get(selected[j]))).getY() - y);
587                            if (distance < minDistance) {
588                                minDistance = distance;
589                                minIndex = j;
590                            }
591                        }
592                    }
593    
594                    try {
595                        ((Window)(windowList.get(selected[minIndex]))).setIcon(false);
596                        ((Window)(windowList.get(selected[minIndex]))).setBounds(x, y, width, height);
597                        located[minIndex] = true;
598                    } catch (Exception e) {}
599                }
600            }
601        }
602    
603        private void dialogCancel() {
604            dialog.setVisible(false);
605        }
606    
607        public void refreshMenu(String filename,String configureName) {
608            int selIndex = 0;
609            if (Scene.getToolsManager().getPredefinedVisualizationRunner().containsConfigure(configureName)) {
610                Scene.showErrorMessage("Visualization configuration for this name already exists!");
611                return;
612            }
613    
614            Scene.getToolsManager().getPredefinedVisualizationRunner().addPredefinedVisualization(filename,configureName);
615            menuUseSetting.removeAll();
616            itemSettings = new JRadioButtonMenuItem[Scene.getToolsManager().getPredefinedVisualizationRunner().getPredefinedVisualizationNumber()];
617            for (int i = 0; i < itemSettings.length; i++) {
618                String addConfigureName = Scene.getToolsManager().getPredefinedVisualizationRunner().getConfigureName(i);
619                if (addConfigureName.equals(configureName)) {
620                    Scene.getToolsManager().getPredefinedVisualizationRunner().setSelected(i);
621                    selIndex = i;
622                }
623                itemSettings[i] = new JRadioButtonMenuItem(addConfigureName);
624                itemSettings[i].addActionListener(new ActionListener() {
625                    public void actionPerformed(ActionEvent e) {
626                        for (int i=0; i<itemSettings.length; i++) {
627                            if (itemSettings[i].isSelected()) itemSettings[i].setSelected(false);
628                        }
629                        int selected = Scene.getToolsManager().getPredefinedVisualizationRunner().getIdFromName(
630                                       ((JRadioButtonMenuItem)(e.getSource())).getText());
631                        Scene.getToolsManager().getPredefinedVisualizationRunner().setSelected(selected);
632                        itemSettings[selected].setSelected(true);
633                    }
634                });
635                menuUseSetting.add(itemSettings[i]);
636            }
637            itemSettings[selIndex].setSelected(true);
638        }
639    
640        public void clearWindowsList() {
641            windowList.clear();
642        }
643    
644        public void setDoNotRemoveWindow(boolean newValue) {
645            doNotRemoveWindow = newValue;
646        }
647    
648        public JDesktopPane getDesktop() {
649            return desktop;
650        }
651    
652        public String getLastDataDir() {
653            return lastDataDir;
654        }
655    
656        public void setLastDataDir(String dir) {
657            lastDataDir = dir;
658        }
659    
660        public String getLastConfigDir() {
661            return lastConfigDir;
662        }
663    
664        public void setLastConfigDir(String dir) {
665            lastConfigDir = dir;
666        }
667    
668        public String getLastResultDir() {
669            return lastResultDir;
670        }
671    
672        public void setLastResultDir(String dir) {
673            lastResultDir = dir;
674        }
675    
676        public void disableVisualizationMenu() {
677            menuVisualization.setEnabled(false);
678            itemVizNow.setEnabled(false);
679        }
680    
681        public void disableFileMenus() {
682            menuFile.setEnabled(false);
683            menuTool.setEnabled(false);
684        }
685    
686        public void enableFileMenus() {
687            menuFile.setEnabled(true);
688            menuTool.setEnabled(true);
689        }
690    
691        public void loadSelection() {
692            RandomAccessFile selectionFile;
693            JFileChooser fc = new JFileChooser(getLastConfigDir());
694            String filename = null;
695    
696            if(fc.showOpenDialog(frame) != JFileChooser.APPROVE_OPTION) return;
697    
698            try {
699                filename = fc.getSelectedFile().getPath();
700                setLastConfigDir(filename);
701                selectionFile = new RandomAccessFile(filename, "r");
702    
703                //String version = selectionFile.readLine().trim();
704                //if (!version.equals(Scene.VERSION)) throw (new IOException());
705                //selectionName = selectionFile.readLine().trim();
706    
707                Scene.getFilter().loadSelection(selectionFile);
708    
709            } catch (Exception e) {
710                Scene.showErrorMessage("Invalid selection file format.");
711                return;
712            }
713        }
714    
715        private void createSelectionMenuItem() {
716            ArrayList list = Scene.getVisualizationManager().getVisualizationList();
717            JMenuItem[] tempMenus = null;
718            Visualization visual = null;
719    
720            for (int i=0; i<list.size(); i++) {
721                visual = (Visualization)list.get(i);
722                if (visual.getWindow().isSelected()) {
723                    tempMenus = visual.createSelectionMenuItem();
724                    break;
725                }
726            }
727    
728            if (tempMenus != null) {
729                for (int i=0; i<tempMenus.length; i++)
730                    menuSelection.add(tempMenus[i]);
731            }
732    
733            itemCurrentSelection = new JMenuItem("Current Selections...");
734            itemCurrentSelection.setMnemonic(KeyEvent.VK_C);
735            itemCurrentSelection.addActionListener(new ActionListener() {
736                public void actionPerformed(ActionEvent e) {
737                    Scene.getFilter().load();
738                }
739            });
740    
741            menuSelection.add(itemCurrentSelection);
742        }
743    
744        public String getSelectionOptions() {
745            String retString = "";
746    
747            MenuElement[] subItems = menuSelection.getSubElements()[0].getSubElements();
748    
749            for (int i=0; i<subItems.length - 1; i++) {
750                String menuText = ((JCheckBoxMenuItem)subItems[i]).getText();
751                if (((JCheckBoxMenuItem)(subItems[i])).isSelected()) {
752                    if (menuText.indexOf("Entit") != -1)
753                        menuText = menuText + " inside box";
754                    retString = retString + "-" + menuText + "\n";
755                }
756            }
757    
758            return retString.length() == 0 ? "Occurred Entities\n" : retString;
759        }
760     }