added functionality for observing GUI (added/removed simulations)

This commit is contained in:
fros4943 2008-04-22 13:04:43 +00:00
parent edb5a18000
commit c7954c8a5b

View file

@ -24,7 +24,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* $Id: GUI.java,v 1.76 2008/04/03 13:59:37 fros4943 Exp $ * $Id: GUI.java,v 1.77 2008/04/22 13:04:43 fros4943 Exp $
*/ */
package se.sics.cooja; package se.sics.cooja;
@ -71,7 +71,7 @@ import se.sics.cooja.plugins.*;
* *
* @author Fredrik Osterlind * @author Fredrik Osterlind
*/ */
public class GUI { public class GUI extends Observable {
/** /**
* External tools default Win32 settings filename. * External tools default Win32 settings filename.
@ -501,7 +501,7 @@ public class GUI {
menuItem = new JMenuItem("Reload simulation"); menuItem = new JMenuItem("Reload simulation");
menuItem.addActionListener(new ActionListener() { menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
reloadCurrentSimulation(); reloadCurrentSimulation(false);
} }
}); });
menu.add(menuItem); menu.add(menuItem);
@ -1998,6 +1998,9 @@ public class GUI {
} }
} }
} }
setChanged();
notifyObservers();
} }
/** /**
@ -2086,6 +2089,9 @@ public class GUI {
if (isVisualizedInFrame()) { if (isVisualizedInFrame()) {
frame.setTitle("COOJA Simulator"); frame.setTitle("COOJA Simulator");
} }
setChanged();
notifyObservers();
} }
} }
@ -2252,7 +2258,7 @@ public class GUI {
* Reloads current simulation. * Reloads current simulation.
* This may include recompiling libraries and renaming mote type identifiers. * This may include recompiling libraries and renaming mote type identifiers.
*/ */
private void reloadCurrentSimulation() { public void reloadCurrentSimulation(final boolean autoStart) {
if (getSimulation() == null) { if (getSimulation() == null) {
logger.fatal("No simulation to reload"); logger.fatal("No simulation to reload");
return; return;
@ -2280,6 +2286,9 @@ public class GUI {
myGUI.doRemoveSimulation(false); myGUI.doRemoveSimulation(false);
Simulation newSim = loadSimulationConfig(root, true); Simulation newSim = loadSimulationConfig(root, true);
myGUI.setSimulation(newSim); myGUI.setSimulation(newSim);
if (autoStart) {
newSim.startSimulation();
}
} catch (UnsatisfiedLinkError e) { } catch (UnsatisfiedLinkError e) {
shouldRetry = showErrorDialog(frame, "Simulation reload error", e, true); shouldRetry = showErrorDialog(frame, "Simulation reload error", e, true);
@ -3047,12 +3056,62 @@ public class GUI {
} else if (args.length > 0 && args[0].startsWith("-nogui")) { } else if (args.length > 0 && args[0].startsWith("-nogui")) {
// No GUI start-up /* Parse optional script argument */
String tmpTest=null;
for (int i=1; i < args.length; i++) {
if (args[i].startsWith("-test=")) {
tmpTest = args[i].substring("-test=".length());
} else {
logger.fatal("Unknown argument: " + args[i]);
System.exit(1);
}
}
final File scriptFile;
final File configFile;
final File logFile;
if (tmpTest != null) {
/* Locate script and simulation config files */
scriptFile = new File(tmpTest + ".js");
configFile = new File(tmpTest + ".csc");
logFile = new File(tmpTest + ".log");
if (!scriptFile.exists()) {
logger.fatal("Can't locate script: " + scriptFile);
System.exit(1);
}
if (!configFile.exists()) {
logger.fatal("Can't locate simulation config: " + configFile);
System.exit(1);
}
if (logFile.exists()) {
logFile.delete();
}
if (logFile.exists() && !logFile.canWrite()) {
logger.fatal("Can't write to log file: " + logFile);
System.exit(1);
}
} else {
scriptFile = null;
configFile = null;
logFile = null;
}
/* No GUI start-up */
javax.swing.SwingUtilities.invokeLater(new Runnable() { javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() { public void run() {
JDesktopPane desktop = new JDesktopPane(); JDesktopPane desktop = new JDesktopPane();
desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
new GUI(desktop); GUI gui = new GUI(desktop);
if (scriptFile != null && configFile != null) {
/* Load and start script plugin (no-GUI version) */
gui.registerPlugin(ScriptRunnerNoGUI.class, false);
ScriptRunnerNoGUI scriptPlugin = (ScriptRunnerNoGUI) gui.startPlugin(ScriptRunnerNoGUI.class, gui, null, null);
/* Activate test */
scriptPlugin.activateTest(configFile, scriptFile, logFile);
}
} }
}); });
@ -3208,6 +3267,7 @@ public class GUI {
if (((Element) element).getName().equals("simulation")) { if (((Element) element).getName().equals("simulation")) {
Collection<Element> config = ((Element) element).getChildren(); Collection<Element> config = ((Element) element).getChildren();
newSim = new Simulation(this); newSim = new Simulation(this);
System.gc();
boolean createdOK = newSim.setConfigXML(config, !quick); boolean createdOK = newSim.setConfigXML(config, !quick);
if (!createdOK) { if (!createdOK) {
logger.info("Simulation not loaded"); logger.info("Simulation not loaded");