[Avida-cvs] [Avida2-svn] r40 - trunk/source/python/AvidaGui2

kaben at myxo.css.msu.edu kaben at myxo.css.msu.edu
Mon Mar 7 12:57:12 PST 2005


Author: kaben
Date: 2005-03-07 15:57:11 -0500 (Mon, 07 Mar 2005)
New Revision: 40

Added:
   trunk/source/python/AvidaGui2/pyAvida.py
Modified:
   trunk/source/python/AvidaGui2/pyAvidaThreadedDriver.py
   trunk/source/python/AvidaGui2/pyEduSessionMenuBarHdlr.py
   trunk/source/python/AvidaGui2/pyGradientScaleCtrl.py
   trunk/source/python/AvidaGui2/pyLiveControlsCtrl.py
   trunk/source/python/AvidaGui2/pyMainControllerFactory.py
   trunk/source/python/AvidaGui2/pyOnePop_GraphCtrl.py
   trunk/source/python/AvidaGui2/pyOnePop_StatsCtrl.py
   trunk/source/python/AvidaGui2/pyOnePop_TimelineCtrl.py
   trunk/source/python/AvidaGui2/pyOnePopulationCtrl.py
   trunk/source/python/AvidaGui2/pyPetriDishCtrl.py
   trunk/source/python/AvidaGui2/pySessionCtrl.py
   trunk/source/python/AvidaGui2/pySessionDumbCtrl.py
   trunk/source/python/AvidaGui2/pySessionWorkThreadHdlr.py
   trunk/source/python/AvidaGui2/pyTemporaryReloads.py
Log:

* AvidaEd no longer starts an Avida session at launch time. Instead an
  Avida object can be created after launch time using the sequence of
  commands:

    avida = pyAvida()
    avida.construct(genesis)

  For debugging and demonstration, the dumb controller
  (pySessionDumbCtrl.py) now has a debugging menu item "Load Petri Dish
  Config File" that triggers the above sequence of commands to
  instantiate an Avida object (see
  pySessionDumbCtrl.doLoadPetriDishConfigFileSlot()).



Added: trunk/source/python/AvidaGui2/pyAvida.py
===================================================================
--- trunk/source/python/AvidaGui2/pyAvida.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pyAvida.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -0,0 +1,157 @@
+#
+#  pyAvida.py
+#  AvidaEd
+#
+#  Created by Kaben Nanlohy on 05.3.3.
+#  Copyright (c) 2005 __MyCompanyName__. All rights reserved.
+#
+import pyAvidaThreadedDriver; reload(pyAvidaThreadedDriver)
+from pyAvidaThreadedDriver import *
+
+import pyMdtr; reload(pyMdtr)
+from pyMdtr import *
+
+import qt
+from AvidaCore import *
+
+class pyAvida(qt.QObject):
+
+  def __init__(self):
+    qt.QObject.__init__(self, None, self.__class__.__name__)
+
+  def construct(self, genesis):
+    self.m_name = genesis.GetFilename()
+    self.m_environment = cEnvironment()
+    cConfig.Setup(genesis)
+    if 0 == self.m_environment.Load(cConfig.GetEnvironmentFilename()):
+      print "Unable to load environment... aborting."
+      self.m_population = None
+      return None
+
+    self.m_environment.GetInstSet().SetInstLib(cHardwareCPU.GetInstLib())
+    cHardwareUtil.LoadInstSet_CPUOriginal(
+      cConfig.GetInstFilename(),
+      self.m_environment.GetInstSet())
+    cConfig.SetNumInstructions(self.m_environment.GetInstSet().GetSize())
+    cConfig.SetNumTasks(self.m_environment.GetTaskLib().GetSize())
+    cConfig.SetNumReactions(self.m_environment.GetReactionLib().GetSize())
+    cConfig.SetNumResources(self.m_environment.GetResourceLib().GetSize())
+    
+    # Test-CPU creation.
+    test_interface = cPopulationInterface()
+    BuildTestPopInterface(test_interface)
+    cTestCPU.Setup(
+      self.m_environment.GetInstSet(),
+      self.m_environment,
+      self.m_environment.GetResourceLib().GetSize(),
+      test_interface)
+
+    self.m_avida_threaded_driver = pyAvidaThreadedDriver(self.m_environment)
+    self.m_avida_threaded_driver.construct()
+    self.m_population = self.m_avida_threaded_driver.GetPopulation()
+    self.m_avida_thread_mdtr = pyMdtr()
+    self.m_should_update = False
+
+    self.connect(
+      self.m_avida_thread_mdtr,
+      qt.PYSIGNAL("doPauseAvidaSig"),
+      self.doPauseAvidaSlot)
+    self.connect(
+      self.m_avida_thread_mdtr,
+      qt.PYSIGNAL("doStartAvidaSig"),
+      self.doStartAvidaSlot)
+    self.connect(
+      self.m_avida_thread_mdtr,
+      qt.PYSIGNAL("doUpdateAvidaSig"),
+      self.doUpdateAvidaSlot)
+    self.connect(
+      self.m_avida_thread_mdtr,
+      qt.PYSIGNAL("doCloseAvidaSig"),
+      self.doCloseAvidaSlot)
+
+    self.m_update_ck_timer = qt.QTimer()
+    self.connect(
+      self.m_update_ck_timer,
+      qt.SIGNAL("timeout()"),
+      self.updateCheckSlot)
+    self.m_update_ck_timer.start(0)
+
+    return self
+
+  def destruct(self):
+    self.m_avida_thread_mdtr.emit(qt.PYSIGNAL("doCloseAvidaSig"),())
+    if hasattr(self, "m_update_ck_timer"):
+      self.m_update_ck_timer.stop()
+      del self.m_update_ck_timer
+    else:
+      print("pyAvida.destruct() self.m_update_ck_timer missing.")
+
+    self.disconnect(
+      self.m_avida_thread_mdtr,
+      qt.PYSIGNAL("doPauseAvidaSig"),
+      self.doPauseAvidaSlot)
+    self.disconnect(
+      self.m_avida_thread_mdtr,
+      qt.PYSIGNAL("doStartAvidaSig"),
+      self.doStartAvidaSlot)
+    self.disconnect(
+      self.m_avida_thread_mdtr,
+      qt.PYSIGNAL("doUpdateAvidaSig"),
+      self.doUpdateAvidaSlot)
+    self.disconnect(
+      self.m_avida_thread_mdtr,
+      qt.PYSIGNAL("doCloseAvidaSig"),
+      self.doCloseAvidaSlot)
+
+    if hasattr(self, "m_avida_thread_mdtr"):
+      del self.m_avida_thread_mdtr
+    else:
+      print("pyAvida.destruct() self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr missing.")
+
+    if hasattr(self, "updated_semaphore"):
+      del self.m_updated_semaphore
+    else:
+      print("pyAvida.destruct() self.m_updated_semaphore missing.")
+
+    if hasattr(self, "m_avida_threaded_driver"):
+      self.m_avida_threaded_driver.doExit()
+      self.m_avida_threaded_driver.m_thread.join()
+      del self.m_avida_threaded_driver
+    else:
+      print("pyAvida.destruct() self.m_avida_threaded_driver missing.")
+
+    print("pyAvida.destruct() done.")
+
+  def __del__(self):
+    print("pyAvida.__del__()...")
+    self.destruct()
+    print("pyAvida.__del__() done.")
+
+  def updateCheckSlot(self):
+    if self.m_avida_threaded_driver.m_updated_semaphore.acquire(False):
+      self.m_avida_thread_mdtr.emit(qt.PYSIGNAL("AvidaUpdatedSig"),())
+      if True == self.m_should_update:
+        self.doUpdateAvidaSlot()
+
+  def doPauseAvidaSlot(self):
+    self.m_should_update = False;
+
+  def doStartAvidaSlot(self):
+    self.m_should_update = True;
+    self.doUpdateAvidaSlot()
+
+  def doUpdateAvidaSlot(self):
+    try:
+      self.m_avida_threaded_driver.doUpdate()
+    except AttributeError:
+      pass
+
+  def doStepAvidaSlot(self, cell_id):
+    print("doStepAvidaSlot")
+
+  def doCloseAvidaSlot(self):
+    self.m_avida_threaded_driver.doExit()
+    if self.m_avida_threaded_driver.m_thread.isAlive():
+      self.m_avida_threaded_driver.m_thread.join()
+    else:
+      print("pyAvida.doCloseAvidaSlot() thread is dead!")

Modified: trunk/source/python/AvidaGui2/pyAvidaThreadedDriver.py
===================================================================
--- trunk/source/python/AvidaGui2/pyAvidaThreadedDriver.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pyAvidaThreadedDriver.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -5,7 +5,7 @@
 class pyAvidaThreadedDriver(pyAvidaDriver):
 
   def construct(self):
-    self.doSetProcessBitesize(30)
+    self.doSetProcessBitesize(1)
     self.m_thread.start()
   def __init__(self, environment):
     self.m_environment = environment
@@ -16,6 +16,8 @@
     I'm using the wrong locking model in the driver threads...
     I need to lock on access to the Avida core library, rather than on
     per-thread locks (in order to protect static data in the library).
+    ...
+    (so, think of a good way to associate a library mutex with the Avida libraries.)
     """)
     self.m_lock = threading.Lock()
     self.m_do_update_semaphore = threading.Semaphore(0)

Modified: trunk/source/python/AvidaGui2/pyEduSessionMenuBarHdlr.py
===================================================================
--- trunk/source/python/AvidaGui2/pyEduSessionMenuBarHdlr.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pyEduSessionMenuBarHdlr.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -44,53 +44,6 @@
     self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
       qt.PYSIGNAL("doSetupMainWindowMenuBarSig"), self.doSetupMainWindowMenuBarSlot)
 
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doNewWorkspaceSig"), self.doNewWorkspaceSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doSaveWorkspaceSig"), self.doSaveWorkspaceSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doSaveWorkspaceAsSig"), self.doSaveWorkspaceAsSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doOpenWorkspaceSig"), self.doOpenWorkspaceSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doCloseWorkspaceSig"), self.doCloseWorkspaceSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doImportSig"), self.doImportSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doExportSig"), self.doExportSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doQuitSig"), self.doQuitSlot)
-
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doUndoSig"), self.doUndoSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doRedoSig"), self.doRedoSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doCutSig"), self.doCutSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doCopySig"), self.doCopySlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doPasteSig"), self.doPasteSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doSelectAllSig"), self.doSelectAllSlot)
-
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doStartSig"), self.doStartSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doPauseSig"), self.doPauseSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doNextUpdateSig"), self.doNextUpdateSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doNextStepSig"), self.doNextStepSlot)
-
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doWorkspaceWindowTmpSig"), self.doWorkspaceWindowTmpSlot)
-
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doZoomWindowSig"), self.doZoomWindowSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doMinimizeWindowSig"), self.doMinimizeWindowSlot)
-
   def doSetupMainWindowMenuBarSlot(self, main_window):
     main_window.m_menu_bar = main_window.menuBar()
     main_window.m_file_menu = qt.QPopupMenu()
@@ -171,63 +124,8 @@
       self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doMinimizeWindowSig"))
     main_window.m_menu_bar.insertItem("Window", main_window.m_window_menu)
 
-  def doNewWorkspaceSlot(self):
-    print "pyEduSessionMenuBarHdlr.doNewWorkspaceSlot()."
-  def doSaveWorkspaceSlot(self):
-    print "pyEduSessionMenuBarHdlr.doSaveWorkspaceSlot()."
-  def doSaveWorkspaceAsSlot(self):
-    print "pyEduSessionMenuBarHdlr.doSaveWorkspaceAsSlot()."
-  def doOpenWorkspaceSlot(self):
-    print "pyEduSessionMenuBarHdlr.doOpenWorkspaceSlot()."
-  def doCloseWorkspaceSlot(self):
-    print "pyEduSessionMenuBarHdlr.doCloseWorkspaceSlot()."
-    self.m_session_mdl.m_session_mdtr.emit(qt.PYSIGNAL("doOrphanSessionSig"), ())
-  def doImportSlot(self):
-    print "pyEduSessionMenuBarHdlr.doImportSlot()."
-  def doExportSlot(self):
-    print "pyEduSessionMenuBarHdlr.doExportSlot()."
-  def doQuitSlot(self):
-    print "pyEduSessionMenuBarHdlr.doQuitSlot()."
+    main_window.setupCustomMenus(self)
 
-
-  def doUndoSlot(self):
-    print "pyEduSessionMenuBarHdlr.doUndoSlot()."
-  def doRedoSlot(self):
-    print "pyEduSessionMenuBarHdlr.doRedoSlot()."
-  def doCutSlot(self):
-    print "pyEduSessionMenuBarHdlr.doCutSlot()."
-  def doCopySlot(self):
-    print "pyEduSessionMenuBarHdlr.doCopySlot()."
-  def doPasteSlot(self):
-    print "pyEduSessionMenuBarHdlr.doPasteSlot()."
-  def doSelectAllSlot(self):
-    print "pyEduSessionMenuBarHdlr.doSelectAllSlot()."
-
-
-  def doStartSlot(self):
-    print "pyEduSessionMenuBarHdlr.doStartSlot()."
-    self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr.emit(qt.PYSIGNAL("doStartSig"), ())
-  def doPauseSlot(self):
-    print "pyEduSessionMenuBarHdlr.doPauseSlot()."
-    self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr.emit(qt.PYSIGNAL("doPauseSig"), ())
-  def doNextUpdateSlot(self):
-    print "pyEduSessionMenuBarHdlr.doNextUpdateSlot()."
-  def doNextStepSlot(self):
-    print "pyEduSessionMenuBarHdlr.doNextStepSlot()."
-
-  def doWorkspaceWindowTmpSlot(self):
-    print "pyEduSessionMenuBarHdlr.doWorkspaceWindowTmpSlot()..."
-    self.m_session_mdl.m_session_mdtr.m_session_controller_factory_mdtr.emit(
-      qt.PYSIGNAL("newSessionControllerSig"), ("pyEduWorkspaceCtrl",))
-    print "pyEduSessionMenuBarHdlr.doWorkspaceWindowTmpSlot() done."
-
-
-  def doZoomWindowSlot(self):
-    print "pyEduSessionMenuBarHdlr.doZoomWindowSlot()."
-  def doMinimizeWindowSlot(self):
-    print "pyEduSessionMenuBarHdlr.doMinimizeWindowSlot()."
-
-
 # Unit tests.
 
 from pyUnitTestSuiteRecurser import *

Modified: trunk/source/python/AvidaGui2/pyGradientScaleCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyGradientScaleCtrl.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pyGradientScaleCtrl.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -11,3 +11,23 @@
 
   def construct(self, session_mdl):
     self.m_session_mdl = session_mdl
+    self.m_avida = None
+    self.connect(
+      self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
+      self.setAvidaSlot)
+
+  def setAvidaSlot(self, avida):
+    old_avida = self.m_avida
+    self.m_avida = avida
+    if(old_avida):
+      self.disconnect(
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
+      del old_avida
+    if(self.m_avida):
+      self.connect(
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
+
+  def avidaUpdatedSlot(self):
+    pass
\ No newline at end of file

Modified: trunk/source/python/AvidaGui2/pyLiveControlsCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyLiveControlsCtrl.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pyLiveControlsCtrl.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -11,3 +11,23 @@
 
   def construct(self, session_mdl):
     self.m_session_mdl = session_mdl
+    self.m_avida = None
+    self.connect(
+      self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
+      self.setAvidaSlot)
+
+  def setAvidaSlot(self, avida):
+    old_avida = self.m_avida
+    self.m_avida = avida
+    if(old_avida):
+      self.disconnect(
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
+      del old_avida
+    if(self.m_avida):
+      self.connect(
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
+
+  def avidaUpdatedSlot(self):
+    pass
\ No newline at end of file

Modified: trunk/source/python/AvidaGui2/pyMainControllerFactory.py
===================================================================
--- trunk/source/python/AvidaGui2/pyMainControllerFactory.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pyMainControllerFactory.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -1,7 +1,4 @@
-
-import pyMdtr; reload(pyMdtr)
 from pyMdtr import pyMdtr
-
 import qt
 
 class pyMainControllerFactory(qt.QObject):

Modified: trunk/source/python/AvidaGui2/pyOnePop_GraphCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOnePop_GraphCtrl.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pyOnePop_GraphCtrl.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -16,16 +16,17 @@
 
   def construct(self, session_mdl):
     self.m_session_mdl = session_mdl
+    self.m_avida = None
+    self.connect(
+      self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
+      self.setAvidaSlot)
+
     self.m_graph_ctrl.construct(self.m_session_mdl)
     self.m_combo_box.clear()
     self.m_combo_box.setInsertionPolicy(QComboBox.AtBottom)
     for entry in self.m_avida_stats_interface.m_entries:
       self.m_combo_box.insertItem(entry[0])
 
-    self.connect(self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
-      PYSIGNAL("AvidaUpdatedSig"), self.avidaUpdatedSlot)
-    self.connect(self.m_combo_box, SIGNAL("activated(int)"), self.modeActivatedSlot)
-
     self.m_x_array = zeros(2, Float)
     self.m_y_array = zeros(2, Float)
 
@@ -55,6 +56,18 @@
       self.m_graph_ctrl.setCurvePen(self.m_graph_ctrl.m_curve, QPen(Qt.red))
       self.m_graph_ctrl.replot()
       
+  def setAvidaSlot(self, avida):
+    old_avida = self.m_avida
+    self.m_avida = avida
+    if(old_avida):
+      self.disconnect(
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
+      del old_avida
+    if(self.m_avida):
+      self.connect(
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
 
   def avidaUpdatedSlot(self):
     if self.m_combo_box.currentItem():

Modified: trunk/source/python/AvidaGui2/pyOnePop_StatsCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOnePop_StatsCtrl.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pyOnePop_StatsCtrl.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -8,3 +8,26 @@
 
   def __init__(self,parent = None,name = None,fl = 0):
     pyOnePop_StatsView.__init__(self,parent,name,fl)
+        
+  def construct(self, session_mdl):
+    self.m_session_mdl = session_mdl
+    self.m_avida = None
+    self.connect(
+      self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
+      self.setAvidaSlot)
+
+  def setAvidaSlot(self, avida):
+    old_avida = self.m_avida
+    self.m_avida = avida
+    if(old_avida):
+      self.disconnect(
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
+      del old_avida
+    if(self.m_avida):
+      self.connect(
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
+
+  def avidaUpdatedSlot(self):
+    pass
\ No newline at end of file

Modified: trunk/source/python/AvidaGui2/pyOnePop_TimelineCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOnePop_TimelineCtrl.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pyOnePop_TimelineCtrl.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -8,3 +8,26 @@
 
   def __init__(self,parent = None,name = None,fl = 0):
     pyOnePop_TimelineView.__init__(self,parent,name,fl)
+
+  def construct(self, session_mdl):
+    self.m_session_mdl = session_mdl
+    self.m_avida = None
+    self.connect(
+      self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
+      self.setAvidaSlot)
+
+  def setAvidaSlot(self, avida):
+    old_avida = self.m_avida
+    self.m_avida = avida
+    if(old_avida):
+      self.disconnect(
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
+      del old_avida
+    if(self.m_avida):
+      self.connect(
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
+
+  def avidaUpdatedSlot(self):
+    pass
\ No newline at end of file

Modified: trunk/source/python/AvidaGui2/pyOnePopulationCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOnePopulationCtrl.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pyOnePopulationCtrl.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -12,4 +12,4 @@
   def construct(self, session_mdl):
     self.m_session_mdl = session_mdl
     self.m_one_pop_petri_dish_ctrl.construct(self.m_session_mdl)
-    self.m_one_pop_graph_ctrl.construct(self.m_session_mdl)
+    #self.m_one_pop_graph_ctrl.construct(self.m_session_mdl)

Modified: trunk/source/python/AvidaGui2/pyPetriDishCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyPetriDishCtrl.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pyPetriDishCtrl.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -20,18 +20,30 @@
     self.resize(QSize(202,202).expandedTo(self.minimumSizeHint()))
     self.clearWState(Qt.WState_Polished)
 
-  def construct(self, session_mdl):
-    self.m_session_mdl = session_mdl
+  def setAvidaSlot(self, avida):
+    print "pyPetriDishCtrl.setAvidaSlot() : called."
+    old_avida = self.m_avida
+    self.m_avida = avida
+    if(old_avida):
+      self.disconnect(
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
+      del old_avida
+    if(self.m_avida):
+      self.connect(
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
 
     self.m_map_cell_w = 2
     self.m_map_cell_h = 2
     world_w = cConfig.GetWorldX()
     world_h = cConfig.GetWorldY()
 
-    print "world_w %d, world_h %d" % (world_w, world_h)
-
+    if self.m_canvas: del self.m_canvas
     self.m_canvas = QCanvas(self.m_map_cell_w * world_w, self.m_map_cell_h * world_h)
+    self.m_canvas_view.setCanvas(self.m_canvas)
 
+    if self.m_cell_info: del self.m_cell_info
     self.m_cell_info = [[QCanvasRectangle(
       x * self.m_map_cell_w,
       y * self.m_map_cell_h,
@@ -39,29 +51,29 @@
       self.m_map_cell_h,
       self.m_canvas) for y in range(world_h)] for x in range(world_w)]
 
-    #for x in range(len(self.m_cell_info)):
-    #  for y in range(len(self.m_cell_info[x])):
     for x in range(world_w):
       for y in range(world_h):
         self.m_cell_info[x][y].setBrush(QBrush(QColor(x*255/world_w, y*255/world_h, x*y*255/(world_w*world_h))))
         self.m_cell_info[x][y].setPen(QPen(QColor(x*255/world_w, y*255/world_h, x*y*255/(world_w*world_h))))
         self.m_cell_info[x][y].show()
 
+  def construct(self, session_mdl):
+    self.m_session_mdl = session_mdl
+    self.m_avida = None
+    self.connect(
+      self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
+      self.setAvidaSlot)
+
+    self.m_canvas = None
+    self.m_cell_info = None
     self.m_petri_dish_layout = QVBoxLayout(self,0,0,"m_petri_dish_layout")
     self.m_petri_dish_layout.setResizeMode(QLayout.Minimum)
-
-    self.m_canvas_view = QCanvasView(self.m_canvas, self,"m_canvas_view")
+    self.m_canvas_view = QCanvasView(None, self,"m_canvas_view")
     self.m_petri_dish_layout.addWidget(self.m_canvas_view)
-
-    self.connect(self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
-      PYSIGNAL("AvidaUpdatedSig"), self.avidaUpdatedSlot)
-
-    print "woohoo!"
-
+    
   def calcColorScale(self):
     self.m_cs_min_value = 0
-    #self.m_cs_value_range = self.m_session_mdl.m_population.GetStats().GetMaxMerit()
-    self.m_cs_value_range = self.m_session_mdl.m_population.GetStats().GetMaxFitness()
+    self.m_cs_value_range = self.m_avida.m_population.GetStats().GetMaxFitness()
 
   def doubleToColor(self, x):
     def sigmoid(w, midpoint, steepness):
@@ -69,20 +81,14 @@
       return exp(val)/(1+exp(val))     
 
     y = 1
-    if self.m_cs_value_range > 0:
-      y = (x - self.m_cs_min_value)/self.m_cs_value_range
+    if self.m_cs_value_range > 0: y = (x - self.m_cs_min_value)/self.m_cs_value_range
+    if y > 1: y = 1
+    elif y < 0: y = 0
 
-    if y > 1:
-      y = 1
-    elif y < 0:
-      y = 0
-
     h = (y*360 + 100) % 360
     v = sigmoid(y, 0.3, 10) * 255
     s = sigmoid(1 - y, 0.1, 30) * 255
 
-    #print "(",h,",",s,",",v,")"
-
     return QColor(h, s, v, QColor.Hsv)
 
   def calcCellState(self, population_cell):
@@ -90,19 +96,18 @@
     if population_cell.IsOccupied():
       organism = population_cell.GetOrganism()
       phenotype = organism.GetPhenotype()
-      #merit = phenotype.GetMerit()
-      #dbl = merit.GetDouble()
       dbl = phenotype.GetFitness()
       state = self.doubleToColor(dbl)
     return state
 
   def avidaUpdatedSlot(self):
+    print "pyPetriDishCtrl.avidaUpdatedSlot() : called."
     self.calcColorScale()
     world_w = cConfig.GetWorldX()
     world_h = cConfig.GetWorldY()
     for x in range(world_w):
       for y in range(world_h):
-        cell = self.m_session_mdl.m_population.GetCell(x + world_w*y)
+        cell = self.m_avida.m_population.GetCell(x + world_w*y)
         color = self.calcCellState(cell)
         xm = (x + world_w/2) % world_w
         ym = (y + world_h/2) % world_h

Modified: trunk/source/python/AvidaGui2/pySessionCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pySessionCtrl.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pySessionCtrl.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -1,29 +1,13 @@
 #from pyAvidaCoreData import pyAvidaCoreData
 #from pyAvidaThreadedDriver import pyAvidaThreadedDriver
-
-import pyEduSessionMenuBarHdlr; reload (pyEduSessionMenuBarHdlr)
 from pyEduSessionMenuBarHdlr import *
-
-#import pyEduWorkspaceCtrl; reload (pyEduWorkspaceCtrl)
 from pyEduWorkspaceCtrl import *
-
-import pyAvidaCoreData; reload(pyAvidaCoreData)
 from pyAvidaCoreData import *
-
-import pyMdtr; reload(pyMdtr)
 from pyMdtr import *
-
-import pySessionControllerFactory; reload(pySessionControllerFactory)
 from pySessionControllerFactory import *
-
-import pySessionDumbCtrl; reload(pySessionDumbCtrl)
 from pySessionDumbCtrl import *
-
-import pySessionWorkThreadHdlr; reload(pySessionWorkThreadHdlr)
 from pySessionWorkThreadHdlr import *
-
 from AvidaCore import cString
-
 import qt
 
 class pySessionCtrl(qt.QObject):
@@ -52,23 +36,26 @@
     self.m_session_controller_factory.construct(self.m_session_mdl)
 
     # create an avida processing thread
-    self.m_session_mdl.m_avida_core_data = pyAvidaCoreData()
-    self.m_session_mdl.m_avida_core_data.construct(self.m_session_mdl.m_genesis_filename)
+    ## XXX excising obsolete code. @kgn
+    # self.m_session_mdl.m_avida_core_data = pyAvidaCoreData()
+    # self.m_session_mdl.m_avida_core_data.construct(self.m_session_mdl.m_genesis_filename)
 
     # connect various session controller creators to the controller
     # factory.
     self.m_session_controller_factory.addControllerCreator("pyEduSessionMenuBarHdlr", pyEduSessionMenuBarHdlr)
-    self.m_session_controller_factory.addControllerCreator("pySessionWorkThreadHdlr", pySessionWorkThreadHdlr)
+    ## XXX excising obsolete code. @kgn
+    # self.m_session_controller_factory.addControllerCreator("pySessionWorkThreadHdlr", pySessionWorkThreadHdlr)
     self.m_session_controller_factory.addControllerCreator("pySessionDumbCtrl", pySessionDumbCtrl)
     self.m_session_controller_factory.addControllerCreator("pyEduWorkspaceCtrl", pyEduWorkspaceCtrl)
 
     self.m_session_mdl.m_session_mdtr.m_session_controller_factory_mdtr.emit(
       qt.PYSIGNAL("newSessionControllerSig"), ("pyEduSessionMenuBarHdlr",))
-    ## XXX temporary.
+    ## XXX this was temporary code, now kept around for reference. @kgn
+    # self.m_session_mdl.m_session_mdtr.m_session_controller_factory_mdtr.emit(
+    #   qt.PYSIGNAL("newSessionControllerSig"), ("pySessionWorkThreadHdlr",))
+    
+    ## XXX temporary. cause instantiation of a dumb gui for testing. @kgn
     self.m_session_mdl.m_session_mdtr.m_session_controller_factory_mdtr.emit(
-      qt.PYSIGNAL("newSessionControllerSig"), ("pySessionWorkThreadHdlr",))
-    ## XXX temporary. cause instantiation of a dumb gui for testing.
-    self.m_session_mdl.m_session_mdtr.m_session_controller_factory_mdtr.emit(
       qt.PYSIGNAL("newSessionControllerSig"), ("pySessionDumbCtrl",))
 
     self.m_session_mdl.m_session_mdtr.m_session_controller_factory_mdtr.emit(

Modified: trunk/source/python/AvidaGui2/pySessionDumbCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pySessionDumbCtrl.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pySessionDumbCtrl.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -1,103 +1,172 @@
 import pySessionDumbView; reload(pySessionDumbView)
 from pySessionDumbView import *
 
-import qt
+import pyAvida; reload(pyAvida)
+from pyAvida import *
 
-class pySessionDumbCtrl(qt.QObject):
+from AvidaCore import *
+from qt import *
+
+class pySessionDumbCtrl(pySessionDumbView):
   def __init__(self):
-    qt.QObject.__init__(self, None, self.__class__.__name__)
+    pySessionDumbView.__init__(self)
 
+  def setAvidaSlot(self, avida):
+    old_avida = self.m_avida
+    self.m_avida = avida
+    if(old_avida):
+      print "pySessionDumbCtrl.setAvidaSlot(): disconnecting..."
+      self.disconnect(
+        old_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
+      self.disconnect(
+        self, PYSIGNAL("doStartAvidaSig"),
+        old_avida.m_avida_thread_mdtr, PYSIGNAL("doStartAvidaSig"))
+      self.disconnect(
+        self, PYSIGNAL("doPauseAvidaSig"),
+        old_avida.m_avida_thread_mdtr, PYSIGNAL("doPauseAvidaSig"))
+      self.disconnect(
+        self, PYSIGNAL("doUpdateAvidaSig"),
+        old_avida.m_avida_thread_mdtr, PYSIGNAL("doUpdateAvidaSig"))
+      del old_avida
+    if(self.m_avida):
+      print "pySessionDumbCtrl.setAvidaSlot(): connecting..."
+      self.connect(
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+        self.avidaUpdatedSlot)
+      self.connect(
+        self, PYSIGNAL("doStartAvidaSig"),
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("doStartAvidaSig"))
+      self.connect(
+        self, PYSIGNAL("doPauseAvidaSig"),
+        self.m_avida.m_avida_thread_mdtr,  PYSIGNAL("doPauseAvidaSig"))
+      self.connect(
+        self, PYSIGNAL("doUpdateAvidaSig"),
+        self.m_avida.m_avida_thread_mdtr, PYSIGNAL("doUpdateAvidaSig"))
+    
+  def setupCustomMenus(self, edu_session_menu_bar_hdlr):
+    self.m_debugging_menu = QPopupMenu()
+    self.m_zoom_window_wmi_id = self.m_debugging_menu.insertItem(
+      "Load Petri Dish Config File",
+      self, PYSIGNAL("doLoadPetriDishConfigFileSig"))
+    self.m_menu_bar.insertItem("Debugging", self.m_debugging_menu)
+
+    self.connect(
+      self, PYSIGNAL("doLoadPetriDishConfigFileSig"),
+      self.doLoadPetriDishConfigFileSlot)
+
+  def doLoadPetriDishConfigFileSlot(self):
+    print "pySessionDumbCtrl.doLoadPetriDishConfigFileSlot()."
+    s = QFileDialog.getOpenFileName(
+      ".",
+      "(*.avida)",
+      None,
+      "open file dialog",
+      "Choose a file")
+    print "s:", s
+    genesis = cGenesis()
+    genesis.Open(cString(s.ascii()))
+    if 0 == genesis.IsOpen():
+      print "Warning: Unable to find file '", s
+      return
+    avida = pyAvida()
+    avida.construct(genesis)
+    self.setAvidaSlot(avida)
+    self.disconnect(
+      self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
+      self.setAvidaSlot)
+    self.m_session_mdl.m_session_mdtr.emit(
+      PYSIGNAL("setAvidaSig"),
+      (self.m_avida,))
+    self.connect(
+      self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
+      self.setAvidaSlot)
+
   def construct(self, session_mdl):
     self.m_session_mdl = session_mdl
-    self.m_session_dumb_view = pySessionDumbView()
+    self.m_avida = None
+    self.connect(
+      self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
+      self.setAvidaSlot)
 
     self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr.emit(
-        qt.PYSIGNAL("doSetupMainWindowMenuBarSig"), (self.m_session_dumb_view,))
+        PYSIGNAL("doSetupMainWindowMenuBarSig"),
+        (self,))
 
-    self.connect(self.m_session_dumb_view.m_startpause_avida_pb, qt.SIGNAL("clicked()"), self.startPausePBClickedSlot)
-    self.connect(self.m_session_dumb_view.m_update_avida_pb, qt.SIGNAL("clicked()"), self.updatePBClickedSlot)
+    self.connect(
+      self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
+      PYSIGNAL("doStartSig"),
+      self.doStart)
+    self.connect(
+      self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
+      PYSIGNAL("doPauseSig"),
+      self.doPause)
+    self.connect(
+      self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
+      PYSIGNAL("doNextUpdateSig"),
+      self.updatePBClickedSlot)
 
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doStartSig"), self.doStart)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doPauseSig"), self.doPause)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
-      qt.PYSIGNAL("doNextUpdateSig"), self.updatePBClickedSlot)
+    self.connect(
+      self.m_startpause_avida_pb, SIGNAL("clicked()"),
+      self.startPausePBClickedSlot)
+    self.connect(
+      self.m_update_avida_pb, SIGNAL("clicked()"),
+      self.updatePBClickedSlot)
 
-    self.connect(self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
-      qt.PYSIGNAL("AvidaUpdatedSig"), self.avidaUpdatedSlot)
-
     self.m_start_pb_text = "Start..."
     self.m_pause_pb_text = "Pause..."
     self.m_should_update = False
-    self.m_session_dumb_view.m_control_menu.setItemVisible(self.m_session_dumb_view.m_next_step_cmi_id, False)
-    self.m_session_dumb_view.m_edit_menu.setItemEnabled(self.m_session_dumb_view.m_undo_emi_id, False)
-    self.m_session_dumb_view.m_edit_menu.setItemEnabled(self.m_session_dumb_view.m_redo_emi_id, False)
-    self.m_session_dumb_view.m_edit_menu.setItemEnabled(self.m_session_dumb_view.m_cut_emi_id, False)
-    self.m_session_dumb_view.m_edit_menu.setItemEnabled(self.m_session_dumb_view.m_copy_emi_id, False)
-    self.m_session_dumb_view.m_edit_menu.setItemEnabled(self.m_session_dumb_view.m_paste_emi_id, False)
-    self.m_session_dumb_view.m_edit_menu.setItemEnabled(self.m_session_dumb_view.m_select_all_emi_id, False)
+    self.m_control_menu.setItemVisible(self.m_next_step_cmi_id, False)
+    self.m_edit_menu.setItemEnabled(self.m_undo_emi_id, False)
+    self.m_edit_menu.setItemEnabled(self.m_redo_emi_id, False)
+    self.m_edit_menu.setItemEnabled(self.m_cut_emi_id, False)
+    self.m_edit_menu.setItemEnabled(self.m_copy_emi_id, False)
+    self.m_edit_menu.setItemEnabled(self.m_paste_emi_id, False)
+    self.m_edit_menu.setItemEnabled(self.m_select_all_emi_id, False)
     self.doPause()
-    self.m_session_dumb_view.show()
+    self.show()
 
-  def destruct(self):
-    print("pySessionDumbCtrl.destruct()...")
-    self.disconnect(self.m_session_dumb_view.m_startpause_avida_pb,
-      qt.SIGNAL("clicked()"), self.startPausePBClickedSlot)
-    print("pySessionDumbCtrl.destruct()...1")
-    self.disconnect(self.m_session_dumb_view.m_update_avida_pb,
-      qt.SIGNAL("clicked()"), self.updatePBClickedSlot)
-    print("pySessionDumbCtrl.destruct()...2")
-    self.disconnect(self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
-      qt.PYSIGNAL("AvidaUpdatedSig"), self.avidaUpdatedSlot)
-    print("pySessionDumbCtrl.destruct()...3")
-    del self.m_session_mdl
-    print("pySessionDumbCtrl.destruct()...4")
-    del self.m_session_dumb_view.m_menu_bar
-    del self.m_session_dumb_view
-    print("pySessionDumbCtrl.destruct() done.")
-
   def __del__(self):
-    print("pySessionDumbCtrl.__del__()...")
-    self.destruct()
-    print("pySessionDumbCtrl.__del__() done.")
-
+    self.setAvidaSlot(None)
+    self.disconnect(
+      self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
+      self.setAvidaSlot)
+    self.m_session_mdl.m_session_mdtr.emit(
+      PYSIGNAL("setAvidaSig"),
+      (None,))
+      
   def doStart(self):
     self.m_should_update = True
-    self.m_session_dumb_view.m_startpause_avida_pb.setText(self.m_pause_pb_text)
-    self.m_session_dumb_view.m_update_avida_pb.setEnabled(False)
-    self.m_session_dumb_view.m_control_menu.setItemVisible(self.m_session_dumb_view.m_pause_cmi_id, True)
-    self.m_session_dumb_view.m_control_menu.setItemVisible(self.m_session_dumb_view.m_start_cmi_id, False)
-    self.m_session_dumb_view.m_control_menu.setItemEnabled(self.m_session_dumb_view.m_next_update_cmi_id, False)
-    self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr.emit(qt.PYSIGNAL("doStartAvidaSig"), ())
+    self.m_startpause_avida_pb.setText(self.m_pause_pb_text)
+    self.m_update_avida_pb.setEnabled(False)
+    self.m_control_menu.setItemVisible(self.m_pause_cmi_id, True)
+    self.m_control_menu.setItemVisible(self.m_start_cmi_id, False)
+    self.m_control_menu.setItemEnabled(self.m_next_update_cmi_id, False)
+    self.emit(PYSIGNAL("doStartAvidaSig"), ())
 
   def doPause(self):
     self.m_should_update = False
-    self.m_session_dumb_view.m_startpause_avida_pb.setText(self.m_start_pb_text)
-    self.m_session_dumb_view.m_update_avida_pb.setEnabled(True)
-    self.m_session_dumb_view.m_control_menu.setItemVisible(self.m_session_dumb_view.m_pause_cmi_id, False)
-    self.m_session_dumb_view.m_control_menu.setItemVisible(self.m_session_dumb_view.m_start_cmi_id, True)
-    self.m_session_dumb_view.m_control_menu.setItemEnabled(self.m_session_dumb_view.m_next_update_cmi_id, True)
-    self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr.emit(qt.PYSIGNAL("doPauseAvidaSig"), ())
+    self.m_startpause_avida_pb.setText(self.m_start_pb_text)
+    self.m_update_avida_pb.setEnabled(True)
+    self.m_control_menu.setItemVisible(self.m_pause_cmi_id, False)
+    self.m_control_menu.setItemVisible(self.m_start_cmi_id, True)
+    self.m_control_menu.setItemEnabled(self.m_next_update_cmi_id, True)
+    self.emit(PYSIGNAL("doPauseAvidaSig"), ())
 
   def startPausePBClickedSlot(self):
-    if True == self.m_should_update:
-      self.doPause()
-    else:
-      self.doStart()
+    if True == self.m_should_update: self.doPause()
+    else: self.doStart()
     
   def updatePBClickedSlot(self):
-    self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr.emit(qt.PYSIGNAL("doUpdateAvidaSig"), ())
+    self.emit(PYSIGNAL("doUpdateAvidaSig"), ())
 
   def avidaUpdatedSlot(self):
-    #stats = self.m_session_mdl.m_avida_threaded_driver.GetPopulation().GetStats()
-    stats = self.m_session_mdl.m_population.GetStats()
-    self.m_session_dumb_view.m_log_te.append(
+    stats = self.m_avida.m_population.GetStats()
+    self.m_log_te.append(
       "UD: " + repr(stats.GetUpdate()) +
       "\t Gen: " + repr(stats.SumGeneration().Average()) +
       "\t Fit: " + repr(stats.GetAveFitness()) +
-      #"\t Size: " + repr(self.m_session_mdl.m_avida_threaded_driver.GetPopulation().GetNumOrganisms()))
-      "\t Size: " + repr(self.m_session_mdl.m_population.GetNumOrganisms()))
+      "\t Size: " + repr(self.m_avida.m_population.GetNumOrganisms()))
 
 
 

Modified: trunk/source/python/AvidaGui2/pySessionWorkThreadHdlr.py
===================================================================
--- trunk/source/python/AvidaGui2/pySessionWorkThreadHdlr.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pySessionWorkThreadHdlr.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -17,39 +17,72 @@
 
   def construct(self, session_mdl):
     self.m_session_mdl = session_mdl
-    self.m_session_mdl.m_avida_threaded_driver = pyAvidaThreadedDriver(self.m_session_mdl.m_avida_core_data.m_environment)
-    self.m_avida_threaded_driver = pyAvidaThreadedDriver(self.m_session_mdl.m_avida_core_data.m_environment)
-    self.m_updated_semaphore = self.m_session_mdl.m_avida_threaded_driver.m_updated_semaphore
-    self.m_updated_semaphore = self.m_avida_threaded_driver.m_updated_semaphore
+    self.m_session_mdl.m_avida_threaded_driver = pyAvidaThreadedDriver(
+      self.m_session_mdl.m_avida_core_data.m_environment)
+    self.m_avida_threaded_driver = pyAvidaThreadedDriver(
+      self.m_session_mdl.m_avida_core_data.m_environment)
+    self.m_updated_semaphore = \
+      self.m_session_mdl.m_avida_threaded_driver.m_updated_semaphore
+    self.m_updated_semaphore = \
+      self.m_avida_threaded_driver.m_updated_semaphore
     self.m_should_update = False
     self.m_session_mdl.m_avida_threaded_driver.construct()
     self.m_avida_threaded_driver.construct()
-    self.m_session_mdl.m_population = self.m_avida_threaded_driver.GetPopulation()
+    self.m_session_mdl.m_population = \
+      self.m_avida_threaded_driver.GetPopulation()
 
     self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr = pyMdtr()
-    self.connect(self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr, qt.PYSIGNAL("doPauseAvidaSig"), self.doPauseAvidaSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr, qt.PYSIGNAL("doStartAvidaSig"), self.doStartAvidaSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr, qt.PYSIGNAL("doUpdateAvidaSig"), self.doUpdateAvidaSlot)
-    self.connect(self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr, qt.PYSIGNAL("doCloseAvidaSig"), self.doCloseAvidaSlot)
+    self.connect(
+      self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+      qt.PYSIGNAL("doPauseAvidaSig"),
+      self.doPauseAvidaSlot)
+    self.connect(
+      self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+      qt.PYSIGNAL("doStartAvidaSig"),
+      self.doStartAvidaSlot)
+    self.connect(
+      self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+      qt.PYSIGNAL("doUpdateAvidaSig"),
+      self.doUpdateAvidaSlot)
+    self.connect(
+      self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+      qt.PYSIGNAL("doCloseAvidaSig"),
+      self.doCloseAvidaSlot)
 
     self.m_update_ck_timer = qt.QTimer()
-    self.connect(self.m_update_ck_timer, qt.SIGNAL("timeout()"), self.updateCheckSlot)
+    self.connect(
+      self.m_update_ck_timer,
+      qt.SIGNAL("timeout()"),
+      self.updateCheckSlot)
     self.m_update_ck_timer.start(100)
 
 
   def destruct(self):
     print("pySessionWorkThreadHdlr.destruct()...")
-    self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr.emit(qt.PYSIGNAL("doCloseAvidaSig"),())
+    self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr.emit(
+      qt.PYSIGNAL("doCloseAvidaSig"),())
     if hasattr(self, "m_update_ck_timer"):
       self.m_update_ck_timer.stop()
       del self.m_update_ck_timer
     else:
       print("pySessionWorkThreadHdlr.destruct() self.m_update_ck_timer missing.")
 
-    self.disconnect(self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr, qt.PYSIGNAL("doPauseAvidaSig"), self.doPauseAvidaSlot)
-    self.disconnect(self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr, qt.PYSIGNAL("doStartAvidaSig"), self.doStartAvidaSlot)
-    self.disconnect(self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr, qt.PYSIGNAL("doUpdateAvidaSig"), self.doUpdateAvidaSlot)
-    self.disconnect(self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr, qt.PYSIGNAL("doCloseAvidaSig"), self.doCloseAvidaSlot)
+    self.disconnect(
+      self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+      qt.PYSIGNAL("doPauseAvidaSig"),
+      self.doPauseAvidaSlot)
+    self.disconnect(
+      self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+      qt.PYSIGNAL("doStartAvidaSig"),
+      self.doStartAvidaSlot)
+    self.disconnect(
+      self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+      qt.PYSIGNAL("doUpdateAvidaSig"),
+      self.doUpdateAvidaSlot)
+    self.disconnect(
+      self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+      qt.PYSIGNAL("doCloseAvidaSig"),
+      self.doCloseAvidaSlot)
 
     if hasattr(self.m_session_mdl.m_session_mdtr, "m_avida_threaded_driver_mdtr"):
       del self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr
@@ -85,22 +118,9 @@
     print("pySessionWorkThreadHdlr.__del__() done.")
 
   def updateCheckSlot(self):
-    #if hasattr(self.m_session_mdl, "m_avida_threaded_driver"):
-    #  if self.m_session_mdl.m_avida_threaded_driver.m_updated_semaphore.acquire(False):
-    #    self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr.emit(qt.PYSIGNAL("AvidaUpdatedSig"),())
-    #    if True == self.m_should_update:
-    #      self.doUpdateAvidaSlot()
-
-    #try:
-    #  if self.m_updated_semaphore.acquire(False):
-    #    self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr.emit(qt.PYSIGNAL("AvidaUpdatedSig"),())
-    #    if True == self.m_should_update:
-    #      self.doUpdateAvidaSlot()
-    #except AttributeError:
-    #  pass
-
     if self.m_updated_semaphore.acquire(False):
-      self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr.emit(qt.PYSIGNAL("AvidaUpdatedSig"),())
+      self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr.emit(
+	qt.PYSIGNAL("AvidaUpdatedSig"),())
       if True == self.m_should_update:
         self.doUpdateAvidaSlot()
 

Modified: trunk/source/python/AvidaGui2/pyTemporaryReloads.py
===================================================================
--- trunk/source/python/AvidaGui2/pyTemporaryReloads.py	2005-02-28 20:52:41 UTC (rev 39)
+++ trunk/source/python/AvidaGui2/pyTemporaryReloads.py	2005-03-07 20:57:11 UTC (rev 40)
@@ -108,6 +108,12 @@
 
   "AvidaGui2.pyEduWorkspaceView",
   "AvidaGui2.pyEduWorkspaceCtrl",
+
+  "AvidaGui2.pyEduSessionMenuBarHdlr",
+  "AvidaGui2.pySessionDumbCtrl",
+  
+  "AvidaGui2.pyAvida",
+#  "AvidaGui2.pyAvidaThreadHdlr",
 ]
 
 module_names = nontest_module_names + test_module_names




More information about the Avida-cvs mailing list