diff -r 702db66f4011 src/visualizer/model/visual-simulator-impl.cc --- a/src/visualizer/model/visual-simulator-impl.cc Sun Mar 19 21:02:51 2017 +0100 +++ b/src/visualizer/model/visual-simulator-impl.cc Thu Mar 23 13:15:41 2017 +0530 @@ -108,17 +108,20 @@ return m_simulator->IsFinished (); } + void VisualSimulatorImpl::Run (void) { + std::ostringstream str; + str << m_stopTime; + std::string pystring = std::string("import visualizer\nvisualizer.start(\'") + str.str () + std::string ("\');\n"); if (!Py_IsInitialized ()) { const char *argv[] = { "python", NULL}; Py_Initialize (); PySys_SetArgv (1, (char**) argv); PyRun_SimpleString ( - "import visualizer\n" - "visualizer.start();\n" + pystring.c_str() ); } else @@ -126,14 +129,14 @@ PyGILState_STATE __py_gil_state = PyGILState_Ensure (); PyRun_SimpleString ( - "import visualizer\n" - "visualizer.start();\n" + pystring.c_str() ); PyGILState_Release (__py_gil_state); } } + void VisualSimulatorImpl::Stop (void) { @@ -143,6 +146,7 @@ void VisualSimulatorImpl::Stop (Time const &delay) { + m_stopTime = delay; m_simulator->Stop (delay); } diff -r 702db66f4011 src/visualizer/model/visual-simulator-impl.h --- a/src/visualizer/model/visual-simulator-impl.h Sun Mar 19 21:02:51 2017 +0100 +++ b/src/visualizer/model/visual-simulator-impl.h Thu Mar 23 13:15:41 2017 +0530 @@ -80,6 +80,7 @@ Ptr m_simulator; ObjectFactory m_simulatorImplFactory; + Time m_stopTime; }; } // namespace ns3 diff -r 702db66f4011 src/visualizer/visualizer/core.py --- a/src/visualizer/visualizer/core.py Sun Mar 19 21:02:51 2017 +0100 +++ b/src/visualizer/visualizer/core.py Thu Mar 23 13:15:41 2017 +0530 @@ -365,6 +365,7 @@ self.quit = False self.sim_helper = ns.visualizer.PyViz() self.pause_messages = [] + self.simtime = '' def set_nodes_of_interest(self, nodes): self.lock.acquire() @@ -372,9 +373,16 @@ self.sim_helper.SetNodesOfInterest(nodes) finally: self.lock.release() + + def set_sim_time (self, simtime): + self.simtime = simtime def run(self): while not self.quit: + if not self.simtime == '': + if ns.core.Simulator.Now () >= ns.core.Time(self.simtime): + self.viz.play_button.set_sensitive(False) + break #print "sim: Wait for go" self.go.wait() # wait until the main (view) thread gives us the go signal self.go.clear() @@ -1185,6 +1193,9 @@ gtk.main() + def setSimTime (self, simtime): + self.simulation.set_sim_time (simtime) + def on_root_button_press_event(self, view, target, event): if event.button == 1: @@ -1479,7 +1490,7 @@ add_initialization_hook(hook) -def start(): +def start(simtime): assert Visualizer.INSTANCE is None if _import_error is not None: import sys @@ -1491,4 +1502,5 @@ for hook, args in initialization_hooks: gobject.idle_add(hook, viz, *args) ns.network.Packet.EnablePrinting() + viz.setSimTime(simtime) viz.start()