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 java.awt.*; 027 import java.awt.event.*; 028 import java.util.ArrayList; 029 import javax.swing.*; 030 import javax.swing.event.*; 031 import EVolve.data.DataManager; 032 import EVolve.util.HelperFuncs; 033 import EVolve.util.predefinedutils.VisualizationSerializer; 034 import EVolve.util.predefinedutils.*; 035 import EVolve.util.overlappers.OverlapVisualization; 036 import EVolve.util.phasedetectors.phasedetectorUI.PhaseDetectorToolBar; 037 import EVolve.util.settings.SceneSetting; 038 import EVolve.visualization.Visualization; 039 040 public class UIManager { 041 private JFrame frame; 042 private JDesktopPane desktop; 043 private boolean doNotRemoveWindow; 044 045 private ArrayList windowList; 046 047 private JPanel panelStatus; 048 private JLabel labelStatus; 049 050 private JMenuBar menuBar; 051 052 private JMenu menuFile; 053 private JMenuItem itemLoad; 054 private JMenuItem itemAddDataSource; 055 private JMenuItem itemExit; 056 private JMenuItem itemRemoveDataSource; 057 058 private JMenu menuVisualization; 059 private JMenu menuNew; 060 private JMenuItem[] itemNew; 061 private JMenuItem itemVisualize; 062 063 private JMenu menuWindow; 064 private JMenuItem itemArrange; 065 066 /** added functions */ 067 private JMenu menuTool; 068 069 private JMenu menuBatch; 070 private JMenuItem itemBuildBatch; 071 private JMenuItem itemRunBatch; 072 073 private JMenuItem itemReadSetting; 074 private JMenuItem itemSaveSetting; 075 076 private JMenu menuOverlapViz; 077 078 private JCheckBoxMenuItem itemDebug; 079 080 private JMenuItem[] itemSettings; 081 private JMenuItem itemSynOverlap; 082 private JMenuItem itemAsynOverlap; 083 084 private JMenuItem itemEnablePhaseDetector; 085 086 private JMenu menuOptions; 087 private JMenuItem itemPath; 088 089 private JMenu menuHelp; 090 private JMenuItem itemAbout; 091 092 private JDialog dialog; 093 private JComboBox comboColumn; 094 private JList listVisualization; 095 private DefaultListModel model; 096 097 private JDialog dialogAbout; 098 099 private String lastConfigDir, lastDataDir, lastResultDir; 100 101 private JToolBar toolbar; 102 private EVolve.util.phasedetectors.phasedetectorUI.PhaseDetectorToolBar toolbarPhaseDetector; 103 private JButton tblVizNow, tblConfigure; 104 private JComboBox tblComboDataSource; 105 106 private JList listDataSource; 107 private JDialog dialogDataSource; 108 109 public UIManager() { 110 try { 111 javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getCrossPlatformLookAndFeelClassName()); 112 } catch (Exception e) {} 113 114 frame = new JFrame(Scene.VERSION); 115 116 ImageIcon icon = new ImageIcon(this.getClass().getResource("img/logo_icon.gif")); 117 frame.setIconImage(icon.getImage()); 118 119 frame.addWindowListener(new WindowAdapter() { 120 public void windowClosing(WindowEvent e) { 121 System.exit(0); 122 } 123 }); 124 125 frame.setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height); 126 127 windowList = new ArrayList(); 128 129 createMenu(); 130 131 createToolBar(); 132 frame.getContentPane().add(toolbar, BorderLayout.NORTH); 133 134 135 desktop = new JDesktopPane(); 136 desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); 137 frame.getContentPane().add(desktop, BorderLayout.CENTER); 138 139 panelStatus = new JPanel(new BorderLayout()); 140 panelStatus.setBackground(new Color(240, 240, 240)); 141 panelStatus.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLoweredBevelBorder(), BorderFactory.createLineBorder(new Color(240, 240, 240), 2))); 142 frame.getContentPane().add(panelStatus, BorderLayout.SOUTH); 143 144 labelStatus = new JLabel(Scene.VERSION); 145 panelStatus.add(labelStatus, BorderLayout.WEST); 146 147 frame.setVisible(true); 148 149 createDialog(); 150 createAbout(); 151 doNotRemoveWindow = false; 152 153 lastDataDir = ""; 154 lastConfigDir = ""; 155 lastResultDir=""; 156 } 157 158 private void createMenu() { 159 menuBar = new JMenuBar(); 160 frame.setJMenuBar(menuBar); 161 162 menuFile = new JMenu("File"); 163 menuFile.setMnemonic(KeyEvent.VK_F); 164 menuFile.addMenuListener(new MenuListener() { 165 public void menuCanceled(MenuEvent e) {} 166 public void menuDeselected(MenuEvent e) {} 167 public void menuSelected(MenuEvent e) { 168 menuFile.removeAll(); 169 menuFile.add(itemLoad); 170 menuFile.addSeparator(); 171 for (int i=0; i<Main.availableDataSource.size(); i++) { 172 JMenuItem item = new JMenuItem(((char)(i + 48)) + " - Load a " + Main.availableDataSource.get(i) + " Trace"); 173 item.setMnemonic(i + 48); 174 item.addActionListener(new ActionListener() { 175 public void actionPerformed(ActionEvent e) { 176 String menuSelected = ((JMenuItem)e.getSource()).getText(); 177 String name = menuSelected.substring(11,menuSelected.length()-6); 178 boolean success = addDataSource(name); 179 if (success) 180 loadDataSource(); 181 } 182 }); 183 menuFile.add(item); 184 } 185 menuFile.addSeparator(); 186 menuFile.add(itemAddDataSource); 187 menuFile.add(itemRemoveDataSource); 188 for (int i=0; i<Main.availableDataSource.size(); i++) { 189 JMenuItem item = new JMenuItem(((char)(i + 65)) + " - Add " + Main.availableDataSource.get(i)); 190 item.setMnemonic(i + 65); 191 item.addActionListener(new ActionListener() { 192 public void actionPerformed(ActionEvent e) { 193 String name = ((JMenuItem)(e.getSource())).getText().substring(8); 194 addDataSource(name); 195 } 196 }); 197 menuFile.add(item); 198 } 199 200 menuFile.addSeparator(); 201 menuFile.add(itemExit); 202 } 203 }); 204 205 menuBar.add(menuFile); 206 207 itemLoad = new JMenuItem("Load Data..."); 208 itemLoad.setMnemonic(KeyEvent.VK_L); 209 itemLoad.addActionListener(new ActionListener() { 210 public void actionPerformed(ActionEvent e) { 211 loadDataSource(); 212 } 213 }); 214 215 itemAddDataSource = new JMenuItem("Add Data Source..."); 216 itemAddDataSource.setMnemonic(KeyEvent.VK_A); 217 itemAddDataSource.addActionListener(new ActionListener() { 218 public void actionPerformed(ActionEvent e) { 219 String name = JOptionPane.showInputDialog(getDesktop(),"Name of the new data source:"); 220 if (name != null) { 221 addDataSource(name); 222 } 223 } 224 }); 225 226 itemRemoveDataSource = new JMenuItem("Remove Data Source..."); 227 itemRemoveDataSource.setMnemonic(KeyEvent.VK_R); 228 itemRemoveDataSource.addActionListener(new ActionListener() { 229 public void actionPerformed(ActionEvent e) { 230 removeDataSource(); 231 } 232 }); 233 234 itemExit = new JMenuItem("Exit"); 235 itemExit.setMnemonic(KeyEvent.VK_X); 236 itemExit.addActionListener(new ActionListener() { 237 public void actionPerformed(ActionEvent e) { 238 System.exit(0); 239 } 240 }); 241 242 menuVisualization = new JMenu("Visualization"); 243 menuVisualization.setMnemonic(KeyEvent.VK_V); 244 menuBar.add(menuVisualization); 245 menuVisualization.addMenuListener(new MenuListener() { 246 public void menuSelected(MenuEvent e) { 247 menuVisualization.removeAll(); 248 menuVisualization.add(menuNew); 249 menuVisualization.add(itemVisualize); 250 menuVisualization.add(itemReadSetting); 251 menuVisualization.add(itemSaveSetting); 252 253 itemSettings = new JMenuItem[Scene.getToolsManager().getPredefinedVisualizationRunner().getPredefinedVisualizationNumber()]; 254 for (int i = 0; i < itemSettings.length; i++) { 255 String addConfigureName = Scene.getToolsManager().getPredefinedVisualizationRunner().getConfigureName(i); 256 itemSettings[i] = new JMenuItem(addConfigureName); 257 itemSettings[i].addActionListener(new ActionListener() { 258 public void actionPerformed(ActionEvent e) { 259 PredefinedVisualizationRunner runner = Scene.getToolsManager().getPredefinedVisualizationRunner(); 260 int selected = runner.getIdFromName(((JMenuItem)(e.getSource())).getText()); 261 runner.setSelected(selected); 262 runner.runPredefinedVisualization(); 263 } 264 }); 265 } 266 if (itemSettings.length > 0) { 267 menuVisualization.addSeparator(); 268 for (int i=0; i<itemSettings.length; i++) 269 menuVisualization.add(itemSettings[i]); 270 } 271 enablePredefinedMenu(); 272 } 273 274 public void menuDeselected(MenuEvent e) {}; 275 public void menuCanceled(MenuEvent e) {}; 276 }); 277 278 itemVisualize = new JMenuItem("Visualize..."); 279 itemVisualize.setMnemonic(KeyEvent.VK_V); 280 itemVisualize.addActionListener(new ActionListener() { 281 public void actionPerformed(ActionEvent e) { 282 Scene.getVisualizationManager().preVisualize(); 283 } 284 }); 285 menuVisualization.add(itemVisualize); 286 287 itemReadSetting = new JMenuItem("Load Predefined Viz Setting"); 288 itemReadSetting.setMnemonic(KeyEvent.VK_L); 289 itemReadSetting.addActionListener(new ActionListener() { 290 public void actionPerformed(ActionEvent e) { 291 VisualizationSerializer.v().loadConfiguration(); 292 enableFileMenus(); 293 } 294 }); 295 itemSaveSetting = new JMenuItem("Save Current Viz Setting"); 296 itemSaveSetting.setMnemonic(KeyEvent.VK_S); 297 itemSaveSetting.addActionListener(new ActionListener() { 298 public void actionPerformed(ActionEvent e) { 299 ArrayList vizList = Scene.getVisualizationManager().getVisualizationList(); 300 if (vizList.size() == 0) return; 301 302 VisualizationSerializer.v().showSavingDialog(); 303 } 304 }); 305 306 menuNew = new JMenu("New"); 307 menuNew.setMnemonic(KeyEvent.VK_N); 308 menuVisualization.add(menuNew); 309 310 menuWindow = new JMenu("Window"); 311 menuWindow.setMnemonic(KeyEvent.VK_W); 312 menuWindow.addMenuListener(new MenuListener() { 313 public void menuSelected(MenuEvent e) { 314 menuWindow.removeAll(); 315 menuWindow.add(itemArrange); 316 for (int i=0; i<windowList.size(); i++){ 317 JMenuItem item = new JMenuItem(((char)(i + 65)) + " - " + ((Window)windowList.get(i)).getTitle()); 318 item.setMnemonic(i + 65); 319 item.addActionListener(new ActionListener() { 320 public void actionPerformed(ActionEvent e) { 321 Window selected = null; 322 for (int i=0; i<windowList.size(); i++) { 323 selected = (Window)windowList.get(i); 324 if (((JMenuItem)(e.getSource())).getText().substring(4).equals(selected.getTitle())) { 325 break; 326 } 327 } 328 if (selected != null) { 329 try { 330 selected.setIcon(false); 331 } catch (Exception exp) {} 332 selected.moveToFront(); 333 selected.setVisible(true); 334 } 335 } 336 }); 337 menuWindow.add(item); 338 } 339 } 340 341 public void menuDeselected(MenuEvent e) {}; 342 public void menuCanceled(MenuEvent e) {}; 343 }); 344 menuBar.add(menuWindow); 345 346 itemArrange = new JMenuItem("Arrange..."); 347 itemArrange.setMnemonic(KeyEvent.VK_A); 348 itemArrange.addActionListener(new ActionListener() { 349 public void actionPerformed(ActionEvent e) { 350 arrange(); 351 } 352 }); 353 menuWindow.add(itemArrange); 354 355 menuTool = new JMenu("Tools"); 356 menuTool.setMnemonic(KeyEvent.VK_T); 357 menuBar.add(menuTool); 358 359 itemBuildBatch = new JMenuItem("Build Batch"); 360 itemBuildBatch.setMnemonic(KeyEvent.VK_B); 361 itemBuildBatch.addActionListener(new ActionListener() { 362 public void actionPerformed(ActionEvent e) { 363 Scene.getToolsManager().getBatchRunner().showWindow(); 364 } 365 }); 366 itemRunBatch = new JMenuItem("Run Batch"); 367 itemRunBatch.setMnemonic(KeyEvent.VK_R); 368 itemRunBatch.addActionListener(new ActionListener() { 369 public void actionPerformed(ActionEvent e) { 370 if (Scene.getToolsManager().getBatchRunner() != null) 371 Scene.getToolsManager().getBatchRunner().runBatch(); 372 } 373 }); 374 menuBatch = new JMenu("Auto Generate Visualizations"); 375 menuBatch.setMnemonic(KeyEvent.VK_A); 376 menuBatch.add(itemBuildBatch); 377 menuBatch.add(itemRunBatch); 378 379 itemSynOverlap = new JMenuItem("Overlap Visualizations..."); 380 itemSynOverlap.setMnemonic(KeyEvent.VK_O); 381 itemSynOverlap.addActionListener(new ActionListener() { 382 public void actionPerformed(ActionEvent e) { 383 Scene.getToolsManager().getOverlapVisualizationRunner().getSynOverlapper().showWindow(); 384 } 385 }); 386 itemAsynOverlap = new JMenuItem("Auto Overlap Visualizations ..."); 387 itemAsynOverlap.setMnemonic(KeyEvent.VK_A); 388 itemAsynOverlap.addActionListener(new ActionListener() { 389 public void actionPerformed(ActionEvent e) { 390 Scene.getToolsManager().getOverlapVisualizationRunner().getAsynOverlapper().showWindow(); 391 } 392 }); 393 menuOverlapViz = new JMenu("Overlap Visualizations"); 394 menuOverlapViz.setMnemonic(KeyEvent.VK_O); 395 menuOverlapViz.add(itemSynOverlap); 396 menuOverlapViz.add(itemAsynOverlap); 397 398 itemEnablePhaseDetector = new JMenuItem("Enable Phase Detector"); 399 itemEnablePhaseDetector.setMnemonic(KeyEvent.VK_E); 400 itemEnablePhaseDetector.addActionListener(new ActionListener() { 401 public void actionPerformed(ActionEvent e) { 402 toolbarPhaseDetector.setVisible(true); 403 refreshToolBar(); 404 Scene.getVisualizationManager().enablePhaseDetector(true); 405 } 406 }); 407 408 itemDebug = new JCheckBoxMenuItem("In debugging"); 409 itemDebug.setMnemonic(KeyEvent.VK_D); 410 itemDebug.addActionListener(new ActionListener() { 411 public void actionPerformed(ActionEvent e) { 412 HelperFuncs.inDebug = itemDebug.isSelected(); 413 } 414 }); 415 itemDebug.setSelected(false); 416 417 menuTool.add(menuBatch); 418 menuTool.add(menuOverlapViz); 419 //menuTool.add(itemLinkViz); 420 menuTool.add(itemEnablePhaseDetector); 421 //menuTool.add(itemDebug); 422 423 menuOptions = new JMenu("Options"); 424 menuOptions.setMnemonic(KeyEvent.VK_O); 425 menuBar.add(menuOptions); 426 427 itemPath = new JMenuItem("Setting Path..."); 428 itemPath.setMnemonic(KeyEvent.VK_S); 429 itemPath.addActionListener(new ActionListener() { 430 public void actionPerformed(ActionEvent e) { 431 SceneSetting.v().showSettingDialog(); 432 } 433 }); 434 435 menuOptions.add(itemPath); 436 437 menuHelp = new JMenu("Help"); 438 menuHelp.setMnemonic(KeyEvent.VK_H); 439 menuBar.add(menuHelp); 440 441 itemAbout = new JMenuItem("About EVolve..."); 442 itemAbout.setMnemonic(KeyEvent.VK_A); 443 itemAbout.addActionListener(new ActionListener() { 444 public void actionPerformed(ActionEvent e) { 445 showDialog(dialogAbout, 300, 150); 446 } 447 }); 448 menuHelp.add(itemAbout); 449 } 450 451 private void createToolBar() { 452 toolbar = new JToolBar(); 453 toolbar.setPreferredSize(new java.awt.Dimension(frame.getWidth(),31)); 454 FlowLayout layout = new FlowLayout(FlowLayout.LEFT,2,0); 455 layout.layoutContainer(toolbar); 456 toolbar.setLayout(layout); 457 toolbar.setFloatable(false); 458 toolbar.setRollover(true); 459 toolbar.setBackground(new Color(207,207,207)); 460 461 tblComboDataSource = new JComboBox(); 462 ArrayList dmList = Scene.getDataSourceManager().getDataManagerList(); 463 for (int i=0; i<dmList.size(); i++) { 464 tblComboDataSource.addItem(((DataManager)dmList.get(i)).getDatasourceName()); 465 } 466 tblComboDataSource.addActionListener(new ActionListener() { 467 public void actionPerformed(ActionEvent e) { 468 DataSourceManager dsm = Scene.getDataSourceManager(); 469 dsm.switchDataSource(tblComboDataSource.getSelectedIndex()); 470 if (Scene.getDataManager().isDataLoaded() == false) { 471 disableFunctionMenus(); 472 } else { 473 enableMenu(); 474 } 475 } 476 }); 477 478 tblConfigure = new JButton(new ImageIcon(Scene.getGifURL("config.gif"))); 479 tblConfigure.setToolTipText("Configure Current Visualization"); 480 tblConfigure.addActionListener(new ActionListener() { 481 public void actionPerformed(ActionEvent e) { 482 Visualization visual = Scene.getVisualizationManager().getActiveVisualization(); 483 if (visual != null) visual.configure(); 484 } 485 }); 486 tblConfigure.setPreferredSize(new java.awt.Dimension(28,28)); 487 488 tblVizNow = new JButton(new ImageIcon(Scene.getGifURL("vizNow.gif"))); 489 tblVizNow.setToolTipText("Visualize Current Visualization Now"); 490 tblVizNow.addActionListener(new ActionListener() { 491 public void actionPerformed(ActionEvent e) { 492 Scene.getVisualizationManager().visualizeNow(); 493 } 494 }); 495 tblVizNow.setPreferredSize(new java.awt.Dimension(28,28)); 496 497 toolbarPhaseDetector = new EVolve.util.phasedetectors.phasedetectorUI.PhaseDetectorToolBar(); 498 toolbarPhaseDetector.setVisible(false); 499 500 toolbar.add(new JLabel("Data Source: ")); 501 toolbar.add(tblComboDataSource); 502 toolbar.add(tblConfigure); 503 toolbar.add(tblVizNow); 504 toolbar.add(toolbarPhaseDetector); 505 506 toolbar.addContainerListener(new ContainerAdapter() { 507 public void componentAdded(ContainerEvent e) { 508 refreshToolBar(); 509 } 510 511 public void componentRemoved(ContainerEvent e) { 512 refreshToolBar(); 513 } 514 }); 515 } 516 517 private void createDialog() { 518 dialog = new JDialog(frame, "Select Windows", true); 519 model = new DefaultListModel(); 520 listVisualization = new JList(model); 521 listVisualization.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 522 523 JPanel panelColumn = new JPanel(new FlowLayout()); 524 dialog.getContentPane().add(panelColumn, BorderLayout.NORTH); 525 526 panelColumn.add(new JLabel("Number of column: ")); 527 528 comboColumn = new JComboBox(); 529 comboColumn.addItem(" 1 "); 530 comboColumn.addItem(" 2 "); 531 comboColumn.addItem(" 3 "); 532 comboColumn.addItem(" 4 "); 533 panelColumn.add(comboColumn); 534 535 JScrollPane scrollPane = new JScrollPane(listVisualization); 536 scrollPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Choose windows")); 537 dialog.getContentPane().add(scrollPane, BorderLayout.CENTER); 538 539 JPanel panelButton = new JPanel(new FlowLayout()); 540 dialog.getContentPane().add(panelButton, BorderLayout.SOUTH); 541 542 JButton buttonApply = new JButton("Apply"); 543 buttonApply.addActionListener(new ActionListener() { 544 public void actionPerformed(ActionEvent e) { 545 dialogApply(); 546 } 547 }); 548 panelButton.add(buttonApply); 549 550 JButton buttonCancel = new JButton("Cancel"); 551 buttonCancel.addActionListener(new ActionListener() { 552 public void actionPerformed(ActionEvent e) { 553 dialogCancel(); 554 } 555 }); 556 panelButton.add(buttonCancel); 557 } 558 559 public void createAbout() { 560 dialogAbout = new JDialog(frame, "About EVolve", true); 561 dialogAbout.getContentPane().setBackground(new Color(240, 240, 240)); 562 dialogAbout.getContentPane().add(new JLabel(new ImageIcon(this.getClass().getResource("img/logo_about.gif"))), BorderLayout.CENTER); 563 } 564 565 public void init() { 566 if (doNotRemoveWindow) return; 567 /*windowList.clear(); 568 JInternalFrame[] frame = desktop.getAllFrames(); 569 for (int i = 0; i < frame.length; i++) { 570 frame[i].dispose(); 571 }*/ 572 ArrayList vizList = Scene.getVisualizationManager().getVisualizationList(); 573 ArrayList newWindowList = new ArrayList(); 574 int datasourceId = Scene.getDataSourceManager().getCurrentDataSourceId(); 575 for (int i=0; i<vizList.size(); i++) { 576 Visualization visual = (Visualization)vizList.get(i); 577 EVolve.Window window = visual.getWindow(); 578 if (visual.getDataSourceId() == datasourceId) 579 window.dispose(); 580 else 581 newWindowList.add(window); 582 } 583 windowList = newWindowList; 584 585 disableFunctionMenus(); 586 menuWindow.setEnabled(false); 587 } 588 589 public JFrame getFrame() { 590 return frame; 591 } 592 593 public void setStatus(String status) { 594 labelStatus.setText(status); 595 } 596 597 public void enableMenu() { 598 menuNew.removeAll(); 599 String[] name = Scene.getVisualizationManager().getFactoryName(); 600 itemNew = new JMenuItem[name.length]; 601 for (int i = 0; i < itemNew.length; i++) { 602 itemNew[i] = new JMenuItem(((char)(i + 65)) + " - " + name[i]); 603 itemNew[i].setMnemonic(i + 65); 604 itemNew[i].addActionListener(new ActionListener() { 605 public void actionPerformed(ActionEvent e) { 606 Scene.getVisualizationManager().newVisualization(((JMenuItem)(e.getSource())).getText().substring(4)); 607 } 608 }); 609 menuNew.add(itemNew[i]); 610 } 611 612 //menuVisualization.setEnabled(true); 613 menuNew.setEnabled(true); 614 itemVisualize.setEnabled(true); 615 menuWindow.setEnabled(true); 616 enablePredefinedMenu(); 617 updateToolbarButtons(windowList.size() > 0); 618 } 619 620 public void enableFileMenus() { 621 menuFile.setEnabled(true); 622 menuTool.setEnabled(true); 623 } 624 625 public void showDialog(JDialog dialog, int width, int height) { 626 dialog.setBounds((Toolkit.getDefaultToolkit().getScreenSize().width - width) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - height) / 2, width, height); 627 dialog.setVisible(true); 628 } 629 630 public void addVisualization(Visualization visualization) { 631 Window newWindow = new Window(visualization); 632 newWindow.setBounds(0, 0, desktop.getSize().width, desktop.getSize().height); 633 newWindow.setVisible(true); 634 635 desktop.add(newWindow); 636 newWindow.addInternalFrameListener(new InternalFrameAdapter() { 637 public void internalFrameActivated(InternalFrameEvent e) { 638 Visualization visual = Scene.getVisualizationManager().getActiveVisualization(); 639 if (visual != null) { 640 switchDataSource(visual.getDataSourceId()); 641 } 642 refreshToolBar(); 643 } 644 645 public void internalFrameClosed(InternalFrameEvent e) { 646 refreshToolBar(); 647 } 648 649 public void internalFrameOpened(InternalFrameEvent e) { 650 refreshToolBar(); 651 } 652 }); 653 try { 654 newWindow.setSelected(true); 655 } catch (Exception e) {}; 656 657 windowList.add(newWindow); 658 659 visualization.setWindow(newWindow); 660 updateToolbarButtons(windowList.size() > 0); 661 refreshToolBar(); 662 } 663 664 public Window addOverlappedVisualization(OverlapVisualization visual) { 665 Window newWindow = new Window(visual); 666 newWindow.setBounds(0, 0, desktop.getSize().width/2, desktop.getSize().height/2); 667 newWindow.setVisible(true); 668 669 desktop.add(newWindow); 670 newWindow.addInternalFrameListener(new InternalFrameAdapter() { 671 public void internalFrameActivated(InternalFrameEvent e) { 672 updateToolbarButtons(false); 673 refreshToolBar(); 674 } 675 676 public void internalFrameClosed(InternalFrameEvent e) { 677 updateToolbarButtons(true); 678 refreshToolBar(); 679 } 680 681 public void internalFrameDeactivated(InternalFrameEvent e) { 682 updateToolbarButtons(true); 683 refreshToolBar(); 684 } 685 }); 686 try { 687 newWindow.setSelected(true); 688 } catch (Exception e) {}; 689 690 windowList.add(newWindow); 691 return newWindow; 692 } 693 694 public void removeWindow(Window window) { 695 window.dispose(); 696 Scene.getVisualizationManager().removeVisualization(window.getVisualization()); 697 windowList.remove(window); 698 updateToolbarButtons(windowList.size()>0); 699 } 700 701 private void arrange() { 702 int selectedCounter = 0; 703 for (int i = 0; i < windowList.size(); i++) { 704 if (!((Window)(windowList.get(i))).isIcon()) { 705 selectedCounter++; 706 } 707 } 708 709 int[] selected = new int[selectedCounter]; 710 selectedCounter = 0; 711 712 model.removeAllElements(); 713 714 for (int i = 0; i < windowList.size(); i++) { 715 model.addElement(((Window)(windowList.get(i))).getTitle()); 716 if (!((Window)(windowList.get(i))).isIcon()) { 717 selected[selectedCounter] = i; 718 selectedCounter++; 719 } 720 } 721 722 listVisualization.setSelectedIndices(selected); 723 724 showDialog(dialog, 270, 360); 725 } 726 727 private void dialogApply() { 728 dialog.setVisible(false); 729 730 for (int i = 0; i < windowList.size(); i++) { 731 try { 732 ((Window)(windowList.get(i))).setIcon(true); 733 } catch (Exception e) {} 734 } 735 736 int[] selected = listVisualization.getSelectedIndices(); 737 738 if (selected.length != 0) { 739 boolean[] located = new boolean[selected.length]; 740 for (int i = 0; i < located.length; i++) { 741 located[i] = false; 742 } 743 744 int columnNumber = comboColumn.getSelectedIndex() + 1; 745 int width = desktop.getWidth() / columnNumber; 746 int height = desktop.getHeight() / ((selected.length - 1) / columnNumber + 1); 747 748 for (int i = 0; i < selected.length; i++) { 749 int x = (i % columnNumber) * width; 750 int y = (i / columnNumber) * height; 751 752 int minDistance = Integer.MAX_VALUE; 753 int minIndex = -1; 754 755 for (int j = 0; j < selected.length; j++) { 756 if (!located[j]) { 757 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); 758 if (distance < minDistance) { 759 minDistance = distance; 760 minIndex = j; 761 } 762 } 763 } 764 765 try { 766 ((Window)(windowList.get(selected[minIndex]))).setIcon(false); 767 ((Window)(windowList.get(selected[minIndex]))).setBounds(x, y, width, height); 768 located[minIndex] = true; 769 } catch (Exception e) {} 770 } 771 } 772 } 773 774 private void dialogCancel() { 775 dialog.setVisible(false); 776 } 777 778 private void refreshMenu(String filename,String configureName) { 779 int selIndex = 0; 780 /*if (Scene.getToolsManager().getPredefinedVisualizationRunner().containsConfigure(configureName)) { 781 Scene.showErrorMessage("Visualization configuration for this name already exists!"); 782 return; 783 }*/ 784 785 Scene.getToolsManager().getPredefinedVisualizationRunner().addPredefinedVisualization(filename,configureName); 786 itemSettings = new JMenuItem[Scene.getToolsManager().getPredefinedVisualizationRunner().getPredefinedVisualizationNumber()]; 787 for (int i = 0; i < itemSettings.length; i++) { 788 String addConfigureName = Scene.getToolsManager().getPredefinedVisualizationRunner().getConfigureName(i); 789 if (addConfigureName.equals(configureName)) { 790 Scene.getToolsManager().getPredefinedVisualizationRunner().setSelected(i); 791 selIndex = i; 792 } 793 itemSettings[i] = new JMenuItem(addConfigureName); 794 itemSettings[i].addActionListener(new ActionListener() { 795 public void actionPerformed(ActionEvent e) { 796 for (int i=0; i<itemSettings.length; i++) { 797 if (itemSettings[i].isSelected()) itemSettings[i].setSelected(false); 798 } 799 int selected = Scene.getToolsManager().getPredefinedVisualizationRunner().getIdFromName( 800 ((JRadioButtonMenuItem)(e.getSource())).getText()); 801 Scene.getToolsManager().getPredefinedVisualizationRunner().setSelected(selected); 802 itemSettings[selected].setSelected(true); 803 } 804 }); 805 } 806 itemSettings[selIndex].setSelected(true); 807 } 808 809 public void clearWindowsList() { 810 windowList.clear(); 811 } 812 813 public void setDoNotRemoveWindow(boolean newValue) { 814 doNotRemoveWindow = newValue; 815 } 816 817 public JDesktopPane getDesktop() { 818 return desktop; 819 } 820 821 public String getLastDataDir() { 822 return lastDataDir; 823 } 824 825 public void setLastDataDir(String dir) { 826 lastDataDir = dir; 827 } 828 829 public String getLastConfigDir() { 830 return lastConfigDir; 831 } 832 833 public void setLastConfigDir(String dir) { 834 lastConfigDir = dir; 835 } 836 837 public String getLastResultDir() { 838 return lastResultDir; 839 } 840 841 public void setLastResultDir(String dir) { 842 lastResultDir = dir; 843 } 844 845 public void disableFunctionMenus() { 846 //menuVisualization.setEnabled(false); 847 menuNew.setEnabled(false); 848 itemVisualize.setEnabled(false); 849 enablePredefinedMenu(); 850 tblVizNow.setEnabled(false); 851 tblConfigure.setEnabled(false); 852 } 853 854 public void disableFileMenus() { 855 menuFile.setEnabled(false); 856 menuTool.setEnabled(false); 857 } 858 859 public void updateDatasourceCombo() { 860 int dsourceId = Scene.getDataSourceManager().getCurrentDataSourceId(); 861 862 tblComboDataSource.removeAllItems(); 863 ArrayList dmList = Scene.getDataSourceManager().getDataManagerList(); 864 for (int i=0; i<dmList.size(); i++) { 865 tblComboDataSource.addItem(((DataManager)dmList.get(i)).getDatasourceName()); 866 } 867 tblComboDataSource.setSelectedIndex(dsourceId); 868 refreshToolBar(); 869 } 870 871 public void updateToolbarButtons(boolean flag) { 872 tblVizNow.setEnabled(flag); 873 tblConfigure.setEnabled(flag); 874 } 875 876 public void refreshToolBar() { 877 int toolbarWidth = 0; 878 879 toolbarPhaseDetector.refresh(); 880 for (int i=0; i<toolbar.getComponents().length; i++) { 881 if (!toolbar.getComponent(i).isVisible()) continue; 882 double width = toolbar.getComponent(i).getPreferredSize().getWidth(); 883 884 if (width < toolbar.getComponent(i).getWidth()) 885 width = toolbar.getComponent(i).getWidth(); 886 887 toolbarWidth += width; 888 } 889 if (toolbarWidth>=frame.getWidth()-20) { 890 toolbar.setBounds(0,0,frame.getWidth(),60); 891 toolbar.setPreferredSize(new Dimension(frame.getWidth(),60)); 892 } else { 893 toolbar.setPreferredSize(new Dimension(frame.getWidth(),30)); 894 toolbar.setBounds(0,0,frame.getWidth(),30); 895 } 896 toolbar.revalidate(); 897 desktop.revalidate(); 898 899 } 900 901 public void enablePhaseDetectorButton(boolean flag) { 902 toolbarPhaseDetector.enableButton(flag); 903 } 904 905 public void updateFunctionControl(boolean flag) { 906 //menuVisualization.setEnabled(flag); 907 menuNew.setEnabled(flag); 908 itemVisualize.setEnabled(flag); 909 enablePredefinedMenu(); 910 tblVizNow.setEnabled(flag); 911 tblConfigure.setEnabled(flag); 912 913 menuFile.setEnabled(flag); 914 menuTool.setEnabled(flag); 915 916 for (int i=0; i<toolbar.getComponents().length; i++) { 917 toolbar.getComponent(i).setEnabled(flag); 918 } 919 toolbarPhaseDetector.enableButton(flag); 920 } 921 922 public PhaseDetectorToolBar getPhaseDetectorToolBar() { 923 return toolbarPhaseDetector; 924 } 925 926 public void resetDebugMenu(boolean flag) { 927 itemDebug.setSelected(flag); 928 } 929 930 public void switchDataSource(int datasourceId) { 931 if (!tblComboDataSource.isEnabled()) return; 932 DataSourceManager dsm = Scene.getDataSourceManager(); 933 tblComboDataSource.setSelectedIndex(datasourceId); 934 dsm.switchDataSource(datasourceId); 935 refreshToolBar(); 936 } 937 938 public boolean addDataSource(String name) { 939 boolean success = Scene.getDataSourceManager().addDataSource(name); 940 if (success) { 941 updateDatasourceCombo(); 942 switchDataSource(Scene.getDataSourceManager().getDataManagerList().size()-1); 943 } 944 945 return success; 946 } 947 948 private void loadDataSource() { 949 Scene.loadDataSource(); 950 for (int i = 0; i<Scene.getToolsManager().getPredefinedVisualizationRunner().getPredefinedVisualizationNumber(); i++) { 951 Scene.getToolsManager().getPredefinedVisualizationRunner().getPredefinedVizByIndex(i).setTranslated(false); 952 } 953 } 954 955 private void removeDataSource() { 956 dialogDataSource = new JDialog(Scene.getFrame(), "Select Data Source to be reomved", true); 957 model = new DefaultListModel(); 958 listDataSource = new JList(model); 959 listDataSource.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 960 961 JScrollPane scrollPane = new JScrollPane(listDataSource); 962 scrollPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Choose Data Source")); 963 dialogDataSource.getContentPane().add(scrollPane, BorderLayout.CENTER); 964 965 JPanel panelButton = new JPanel(new FlowLayout()); 966 dialogDataSource.getContentPane().add(panelButton, BorderLayout.SOUTH); 967 968 JButton buttonRemove = new JButton("Remove"); 969 buttonRemove.addActionListener(new ActionListener() { 970 public void actionPerformed(ActionEvent e) { 971 remove(); 972 dialogDataSource.setVisible(false); 973 } 974 }); 975 panelButton.add(buttonRemove); 976 977 JButton buttonCancel = new JButton("Cancel"); 978 buttonCancel.addActionListener(new ActionListener() { 979 public void actionPerformed(ActionEvent e) { 980 dialogDataSource.setVisible(false); 981 } 982 }); 983 panelButton.add(buttonCancel); 984 985 ArrayList dmList = Scene.getDataSourceManager().getDataManagerList(); 986 for (int i=0; i<dmList.size(); i++) 987 model.addElement(((DataManager)dmList.get(i)).getDatasourceName()); 988 989 Scene.getUIManager().showDialog(dialogDataSource, 270, 360); 990 } 991 992 private void remove() { 993 int [] indices = listDataSource.getSelectedIndices(); 994 995 if (indices.length == model.getSize()) { 996 Scene.showErrorMessage("At least one data source should be left!"); 997 return; 998 } 999 1000 windowList = Scene.getVisualizationManager().removeDataSource(indices); 1001 Scene.getDataSourceManager().removeDataSource(indices); 1002 Scene.setCurrentDataFilename(Scene.getDataManager().getDataSource().getFileName()); 1003 updateDatasourceCombo(); 1004 createDialog(); 1005 } 1006 1007 private void enablePredefinedMenu() { 1008 if (itemSettings == null) return; 1009 1010 PredefinedVisualizationRunner runner = Scene.getToolsManager().getPredefinedVisualizationRunner(); 1011 ArrayList list = runner.getPredefinedVizList(); 1012 boolean flag = Scene.getDataManager().isDataLoaded(); 1013 1014 for (int i=0; i<itemSettings.length; i++) { 1015 PredefinedVisualization pViz = (PredefinedVisualization)list.get(i); 1016 itemSettings[i].setEnabled(pViz.isAutoLoadTrace()|(flag&& 1017 pViz.getUsedDataSourceName().equals(Scene.getDataManager().getDataSource().getClass().getName()))); 1018 } 1019 } 1020 }