added for convenience: reload simulation with new random seed

This commit is contained in:
fros4943 2008-12-08 09:38:42 +00:00
parent 28f299ad87
commit 2e66e36755
1 changed files with 44 additions and 8 deletions

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.93 2008/12/03 16:06:33 fros4943 Exp $ * $Id: GUI.java,v 1.94 2008/12/08 09:38:42 fros4943 Exp $
*/ */
package se.sics.cooja; package se.sics.cooja;
@ -501,14 +501,31 @@ public class GUI extends Observable {
menuItem.addActionListener(guiEventHandler); menuItem.addActionListener(guiEventHandler);
menu.add(menuItem); menu.add(menuItem);
menuItem = new JMenuItem("Reload simulation"); menuItem = new JMenu("Reload simulation");
menuItem.addActionListener(new ActionListener() { menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
reloadCurrentSimulation(false); reloadCurrentSimulation(false);
} }
}); });
menuItem.setToolTipText("Reload simulation using the same random seed");
menu.add(menuItem); menu.add(menuItem);
JMenuItem menuItem2 = new JMenuItem("same random seed");
menuItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
reloadCurrentSimulation(false, false);
}
});
menuItem.add(menuItem2);
menuItem2 = new JMenuItem("new random seed");
menuItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
reloadCurrentSimulation(false, true);
}
});
menuItem.add(menuItem2);
menuItem = new JMenuItem("Close simulation"); menuItem = new JMenuItem("Close simulation");
menuItem.setMnemonic(KeyEvent.VK_C); menuItem.setMnemonic(KeyEvent.VK_C);
menuItem.setActionCommand("close sim"); menuItem.setActionCommand("close sim");
@ -2273,10 +2290,13 @@ public class GUI extends Observable {
} }
/** /**
* Reloads current simulation. * Reload currently configured simulation.
* This may include recompiling libraries and renaming mote type identifiers. * Reloading a simulation may include recompiling Contiki.
*
* @param autoStart Start executing simulation when loaded
* @param newSeed Change simulation seed
*/ */
public void reloadCurrentSimulation(final boolean autoStart) { public void reloadCurrentSimulation(final boolean autoStart, final boolean newSeed) {
if (getSimulation() == null) { if (getSimulation() == null) {
logger.fatal("No simulation to reload"); logger.fatal("No simulation to reload");
return; return;
@ -2289,6 +2309,10 @@ public class GUI extends Observable {
/* Get current simulation configuration */ /* Get current simulation configuration */
Element root = new Element("simconf"); Element root = new Element("simconf");
Element simulationElement = new Element("simulation"); Element simulationElement = new Element("simulation");
if (newSeed) {
getSimulation().setRandomSeed(getSimulation().getRandomSeed() + 1);
}
simulationElement.addContent(getSimulation().getConfigXML()); simulationElement.addContent(getSimulation().getConfigXML());
root.addContent(simulationElement); root.addContent(simulationElement);
Collection<Element> pluginsConfig = getPluginsConfigXML(); Collection<Element> pluginsConfig = getPluginsConfigXML();
@ -2318,7 +2342,7 @@ public class GUI extends Observable {
} }
} while (shouldRetry); } while (shouldRetry);
if (progressDialog != null && progressDialog.isDisplayable()) { if (progressDialog.isDisplayable()) {
progressDialog.dispose(); progressDialog.dispose();
} }
} }
@ -2332,11 +2356,11 @@ public class GUI extends Observable {
JButton button = new JButton("Cancel"); JButton button = new JButton("Cancel");
button.addActionListener(new ActionListener() { button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if (loadThread != null && loadThread.isAlive()) { if (loadThread.isAlive()) {
loadThread.interrupt(); loadThread.interrupt();
doRemoveSimulation(false); doRemoveSimulation(false);
} }
if (progressDialog != null && progressDialog.isDisplayable()) { if (progressDialog.isDisplayable()) {
progressDialog.dispose(); progressDialog.dispose();
} }
} }
@ -2360,6 +2384,18 @@ public class GUI extends Observable {
progressDialog.setVisible(true); progressDialog.setVisible(true);
} }
/**
* Reload currently configured simulation.
* Reloading a simulation may include recompiling Contiki.
* The same random seed is used.
*
* @see #reloadCurrentSimulation(boolean, boolean)
* @param autoStart Start executing simulation when loaded
*/
public void reloadCurrentSimulation(boolean autoStart) {
reloadCurrentSimulation(autoStart, false);
}
/** /**
* Save current simulation configuration to disk * Save current simulation configuration to disk
* *