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 }