From 1483a80a281053a4bcd752643dd21e4cdf8cd6ee Mon Sep 17 00:00:00 2001 From: fros4943 Date: Mon, 29 Sep 2008 13:02:15 +0000 Subject: [PATCH] some minor fixed: * warn when trying to load visualized plugins when cooja is not visualized * force calling doLoadConfig() from non-AWT thread --- tools/cooja/java/se/sics/cooja/GUI.java | 213 +++++++++++++----------- 1 file changed, 116 insertions(+), 97 deletions(-) diff --git a/tools/cooja/java/se/sics/cooja/GUI.java b/tools/cooja/java/se/sics/cooja/GUI.java index c6ea7be9e..9e2d77856 100644 --- a/tools/cooja/java/se/sics/cooja/GUI.java +++ b/tools/cooja/java/se/sics/cooja/GUI.java @@ -24,7 +24,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: GUI.java,v 1.80 2008/09/18 14:46:24 fros4943 Exp $ + * $Id: GUI.java,v 1.81 2008/09/29 13:02:15 fros4943 Exp $ */ package se.sics.cooja; @@ -384,7 +384,7 @@ public class GUI extends Observable { } } - private Vector getFileHistory() { + public Vector getFileHistory() { Vector history = new Vector(); // Fetch current history @@ -397,7 +397,7 @@ public class GUI extends Observable { return history; } - private void addToFileHistory(File file) { + public void addToFileHistory(File file) { // Fetch current history String[] history = getExternalToolsSetting("SIMCFG_HISTORY", "").split(";"); @@ -1740,7 +1740,7 @@ public class GUI extends Observable { pluginClass.asSubclass(VisPlugin.class); // Cast succeded, plugin is visualizer plugin! - logger.fatal("Can't start visualizer plugin (no GUI): " + pluginClass); + logger.warn("Can't start visualizer plugin (no GUI): " + pluginClass); return null; } catch (ClassCastException e) { } @@ -2131,7 +2131,7 @@ public class GUI extends Observable { doRemoveSimulation(false); // Check already selected file, or select file using filechooser - if (configFile != null) { + if (configFile != null && !configFile.isDirectory()) { if (!configFile.exists() || !configFile.canRead()) { logger.fatal("No read access to file"); return; @@ -2141,11 +2141,15 @@ public class GUI extends Observable { fc.setFileFilter(GUI.SAVED_SIMULATIONS_FILES); - // Suggest file using history - Vector history = getFileHistory(); - if (history != null && history.size() > 0) { - File suggestedFile = getFileHistory().firstElement(); - fc.setSelectedFile(suggestedFile); + if (configFile != null && configFile.isDirectory()) { + fc.setCurrentDirectory(configFile); + } else { + // Suggest file using history + Vector history = getFileHistory(); + if (history != null && history.size() > 0) { + File suggestedFile = getFileHistory().firstElement(); + fc.setSelectedFile(suggestedFile); + } } int returnVal = fc.showOpenDialog(GUI.getTopParentContainer()); @@ -2169,90 +2173,83 @@ public class GUI extends Observable { } } - // Load simulation in separate thread, while showing progress monitor final JDialog progressDialog; - if (GUI.getTopParentContainer() instanceof Window) { - progressDialog = new JDialog((Window) GUI.getTopParentContainer(), "Loading", ModalityType.APPLICATION_MODAL); - } else if (GUI.getTopParentContainer() instanceof Frame) { - progressDialog = new JDialog((Frame) GUI.getTopParentContainer(), "Loading", ModalityType.APPLICATION_MODAL); - } else if (GUI.getTopParentContainer() instanceof Dialog) { - progressDialog = new JDialog((Dialog) GUI.getTopParentContainer(), "Loading", ModalityType.APPLICATION_MODAL); - } else { - logger.warn("No parent container"); - progressDialog = new JDialog((Frame) null, "Loading", ModalityType.APPLICATION_MODAL); - } - final File fileToLoad = configFile; - final Thread loadThread = new Thread(new Runnable() { - public void run() { - Simulation newSim = null; - try { - newSim = loadSimulationConfig(fileToLoad, quick); - addToFileHistory(fileToLoad); - if (progressDialog != null && progressDialog.isDisplayable()) { - progressDialog.dispose(); - } - } catch (UnsatisfiedLinkError e) { - showErrorDialog(GUI.getTopParentContainer(), "Simulation load error", e, false); - - if (progressDialog != null && progressDialog.isDisplayable()) { - progressDialog.dispose(); - } - newSim = null; - } catch (SimulationCreationException e) { - showErrorDialog(GUI.getTopParentContainer(), "Simulation load error", e, false); - - if (progressDialog != null && progressDialog.isDisplayable()) { - progressDialog.dispose(); - } - newSim = null; - } - if (newSim != null) { - myGUI.setSimulation(newSim); - } - } - }); - - JPanel progressPanel = new JPanel(new BorderLayout()); - JProgressBar progressBar; - JButton button; - - progressBar = new JProgressBar(0, 100); - progressBar.setValue(0); - progressBar.setIndeterminate(true); - button = new JButton("Cancel"); - button.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - if (loadThread != null && loadThread.isAlive()) { - loadThread.interrupt(); - doRemoveSimulation(false); - } - if (progressDialog != null && progressDialog.isDisplayable()) { - progressDialog.dispose(); - } - } - }); - - progressPanel.add(BorderLayout.CENTER, progressBar); - progressPanel.add(BorderLayout.SOUTH, button); - progressPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); - - progressPanel.setVisible(true); - - progressDialog.getContentPane().add(progressPanel); - progressDialog.pack(); - - progressDialog.getRootPane().setDefaultButton(button); - progressDialog.setLocationRelativeTo(GUI.getTopParentContainer()); - progressDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); - loadThread.start(); if (quick) { + if (GUI.getTopParentContainer() instanceof Window) { + progressDialog = new JDialog((Window) GUI.getTopParentContainer(), "Loading", ModalityType.APPLICATION_MODAL); + } else if (GUI.getTopParentContainer() instanceof Frame) { + progressDialog = new JDialog((Frame) GUI.getTopParentContainer(), "Loading", ModalityType.APPLICATION_MODAL); + } else if (GUI.getTopParentContainer() instanceof Dialog) { + progressDialog = new JDialog((Dialog) GUI.getTopParentContainer(), "Loading", ModalityType.APPLICATION_MODAL); + } else { + logger.warn("No parent container"); + progressDialog = new JDialog((Frame) null, "Loading", ModalityType.APPLICATION_MODAL); + } + + final Thread loadThread = Thread.currentThread(); SwingUtilities.invokeLater(new Runnable() { public void run() { + JPanel progressPanel = new JPanel(new BorderLayout()); + JProgressBar progressBar; + JButton button; + + progressBar = new JProgressBar(0, 100); + progressBar.setValue(0); + progressBar.setIndeterminate(true); + button = new JButton("Cancel"); + + button.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (loadThread != null && loadThread.isAlive()) { + loadThread.interrupt(); + doRemoveSimulation(false); + } + if (progressDialog != null && progressDialog.isDisplayable()) { + progressDialog.dispose(); + } + } + }); + + progressPanel.add(BorderLayout.CENTER, progressBar); + progressPanel.add(BorderLayout.SOUTH, button); + progressPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); + + progressPanel.setVisible(true); + + progressDialog.getContentPane().add(progressPanel); + progressDialog.pack(); + + progressDialog.getRootPane().setDefaultButton(button); + progressDialog.setLocationRelativeTo(GUI.getTopParentContainer()); + progressDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); progressDialog.setVisible(true); } }); + } else { + progressDialog = null; } + + // Load simulation in this thread, while showing progress monitor + final File fileToLoad = configFile; + Simulation newSim = null; + try { + newSim = loadSimulationConfig(fileToLoad, quick); + addToFileHistory(fileToLoad); + } catch (UnsatisfiedLinkError e) { + showErrorDialog(GUI.getTopParentContainer(), "Simulation load error", e, false); + } catch (SimulationCreationException e) { + showErrorDialog(GUI.getTopParentContainer(), "Simulation load error", e, false); + } + + if (progressDialog != null && progressDialog.isDisplayable()) { + progressDialog.dispose(); + } + if (newSim != null) { + myGUI.setSimulation(newSim); + } + + return; } /** @@ -2694,15 +2691,31 @@ public class GUI extends Observable { } else if (e.getActionCommand().equals("close sim")) { myGUI.doRemoveSimulation(true); } else if (e.getActionCommand().equals("confopen sim")) { - myGUI.doLoadConfig(true, false, null); + new Thread(new Runnable() { + public void run() { + myGUI.doLoadConfig(true, false, null); + } + }).start(); } else if (e.getActionCommand().equals("confopen last sim")) { - File file = (File) ((JMenuItem) e.getSource()).getClientProperty("file"); - myGUI.doLoadConfig(true, false, file); + final File file = (File) ((JMenuItem) e.getSource()).getClientProperty("file"); + new Thread(new Runnable() { + public void run() { + myGUI.doLoadConfig(true, false, file); + } + }).start(); } else if (e.getActionCommand().equals("open sim")) { - myGUI.doLoadConfig(true, true, null); + new Thread(new Runnable() { + public void run() { + myGUI.doLoadConfig(true, true, null); + } + }).start(); } else if (e.getActionCommand().equals("open last sim")) { - File file = (File) ((JMenuItem) e.getSource()).getClientProperty("file"); - myGUI.doLoadConfig(true, true, file); + final File file = (File) ((JMenuItem) e.getSource()).getClientProperty("file"); + new Thread(new Runnable() { + public void run() { + myGUI.doLoadConfig(true, true, file); + } + }).start(); } else if (e.getActionCommand().equals("save sim")) { myGUI.doSaveConfig(true); } else if (e.getActionCommand().equals("quit")) { @@ -3435,9 +3448,9 @@ public class GUI extends Observable { // Read plugin class String pluginClassName = pluginElement.getText().trim(); - Class visPluginClass = tryLoadClass(this, + Class pluginClass = tryLoadClass(this, Plugin.class, pluginClassName); - if (visPluginClass == null) { + if (pluginClass == null) { logger.fatal("Could not load plugin class: " + pluginClassName); return false; } @@ -3455,15 +3468,21 @@ public class GUI extends Observable { } // Start plugin (before applying rest of config) - Plugin startedPlugin = startPlugin(visPluginClass, this, simulation, - mote); + Plugin startedPlugin = startPlugin(pluginClass, this, simulation, mote); + + /* Ignore visualized plugins if Cooja not visualized */ + try { + if (!visAvailable && startedPlugin == null && pluginClass.asSubclass(VisPlugin.class) != null) { + continue; + } + } catch (ClassCastException e) { } + // Apply plugin specific configuration for (Element pluginSubElement : (List) pluginElement .getChildren()) { if (pluginSubElement.getName().equals("plugin_config")) { - startedPlugin.setConfigXML(pluginSubElement.getChildren(), - visAvailable); + startedPlugin.setConfigXML(pluginSubElement.getChildren(), visAvailable); } }