[Avida-cvs] [Avida2-svn] r155 - in trunk/source:
bindings/Boost.Python main python python/AvidaGui2
kaben at myxo.css.msu.edu
kaben at myxo.css.msu.edu
Fri May 13 14:09:17 PDT 2005
Author: kaben
Date: 2005-05-13 17:09:17 -0400 (Fri, 13 May 2005)
New Revision: 155
Added:
trunk/source/python/AvidaGui2/Avida_ED_startup.py
trunk/source/python/AvidaGui2/Avida_ED_startup_utils.py
trunk/source/python/AvidaGui2/avidalogo.png
Removed:
trunk/source/python/AvidaEd-interactive.py
Modified:
trunk/source/bindings/Boost.Python/change_list.pyste
trunk/source/main/population.cc
trunk/source/main/stats.cc
trunk/source/main/stats.hh
trunk/source/python/AvidaEd-osx.py
trunk/source/python/AvidaGui2/pyAvida.py
trunk/source/python/AvidaGui2/pyEduSessionMenuBarHdlr.py
trunk/source/python/AvidaGui2/pyEduWorkspaceCtrl.py
trunk/source/python/AvidaGui2/pyGradientScaleCtrl.py
trunk/source/python/AvidaGui2/pyGradientScaleView.py
trunk/source/python/AvidaGui2/pyHardwareCPUTrace.py
trunk/source/python/AvidaGui2/pyLiveControlsCtrl.py
trunk/source/python/AvidaGui2/pyMapProfile.py
trunk/source/python/AvidaGui2/pyOnePop_GraphCtrl.py
trunk/source/python/AvidaGui2/pyOnePop_PetriDishCtrl.py
trunk/source/python/AvidaGui2/pyOnePop_PetriDishView.ui
trunk/source/python/AvidaGui2/pyOnePop_StatsCtrl.py
trunk/source/python/AvidaGui2/pyOnePop_TimelineCtrl.py
trunk/source/python/AvidaGui2/pyOrganismScopeCtrl.py
trunk/source/python/AvidaGui2/pyOrganismScopeView.py
trunk/source/python/AvidaGui2/pyPetriConfigureCtrl.py
trunk/source/python/AvidaGui2/pyPetriDishCtrl.py
trunk/source/python/AvidaGui2/pySessionControllerFactory.py
trunk/source/python/AvidaGui2/pySessionCtrl.py
trunk/source/python/AvidaGui2/pySessionDumbCtrl.py
trunk/source/python/AvidaGui2/pySessionWorkThreadHdlr.py
trunk/source/python/setup_osx.py.in
Log:
* Reorganized PyQt signals in Avida-ED code by collapsing the
hierarchies of mediators that carry the signals.
* Moved as much as I could think of to move of the Avida-ED startup code
into the AvidaGUI2 Python module, which is under Subversion source
control in the Avida-ED application bundle.
* Some further cleanup of optimizations of the petri dish map view.
* Added a splash screen at Avida-ED launch to indicate startup progress
to user.
* Added some unworkable changes to the organism scope view -- using
filled splines to track the progress of organism instruction pointers.
Will need to be rewritten.
Modified: trunk/source/bindings/Boost.Python/change_list.pyste
===================================================================
--- trunk/source/bindings/Boost.Python/change_list.pyste 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/bindings/Boost.Python/change_list.pyste 2005-05-13 21:09:17 UTC (rev 155)
@@ -6,6 +6,9 @@
inline unsigned int cChangeList__len__(const cChangeList &change_list) {
return change_list.GetChangeCount();
}
+/*
+Crap. This doesn't work at all. @kgn
+*/
inline unsigned int cChangeList__getitem__(const cChangeList &change_list, unsigned int i) {
return change_list.GetChangeAt(i);
}
Modified: trunk/source/main/population.cc
===================================================================
--- trunk/source/main/population.cc 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/main/population.cc 2005-05-13 21:09:17 UTC (rev 155)
@@ -41,6 +41,8 @@
#include <algorithm>
#include <set>
+#include <math.h>
+
using namespace std;
@@ -1179,6 +1181,12 @@
int max_gestation_time = 0;
int max_genome_length = 0;
+ // Minimums...
+ cMerit min_merit(HUGE_VAL);
+ double min_fitness = HUGE_VAL;
+ int min_gestation_time = INT_MAX;
+ int min_genome_length = INT_MAX;
+
for (int i = 0; i < cell_array.GetSize(); i++) {
// Only look at cells with organisms in them.
if (cell_array[i].IsOccupied() == false) continue;
@@ -1217,6 +1225,11 @@
if (cur_gestation_time > max_gestation_time) max_gestation_time = cur_gestation_time;
if (cur_genome_length > max_genome_length) max_genome_length = cur_genome_length;
+ if (cur_merit < min_merit) min_merit = cur_merit;
+ if (cur_fitness < min_fitness) min_fitness = cur_fitness;
+ if (cur_gestation_time < min_gestation_time) min_gestation_time = cur_gestation_time;
+ if (cur_genome_length < min_genome_length) min_genome_length = cur_genome_length;
+
// Test what tasks this creatures has completed.
for (int j=0; j < phenotype.GetEnvironment().GetTaskLib().GetSize(); j++) {
if (phenotype.GetCurTaskCount()[j] > 0) stats.AddCurTask(j);
@@ -1255,6 +1268,11 @@
stats.SetMaxGestationTime(max_gestation_time);
stats.SetMaxGenomeLength(max_genome_length);
+ stats.SetMinMerit(min_merit.GetDouble());
+ stats.SetMinFitness(min_fitness);
+ stats.SetMinGestationTime(min_gestation_time);
+ stats.SetMinGenomeLength(min_genome_length);
+
stats.SetResources(resource_count.GetResources());
stats.SetSpatialRes(resource_count.GetSpatialRes());
stats.SetResourcesGeometry(resource_count.GetResourcesGeometry());
Modified: trunk/source/main/stats.cc
===================================================================
--- trunk/source/main/stats.cc 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/main/stats.cc 2005-05-13 21:09:17 UTC (rev 155)
@@ -13,6 +13,7 @@
#include "string_util.hh"
#include "tDataEntry.hh"
+#include <math.h>
using namespace std;
@@ -42,6 +43,12 @@
, dom_exe_size(0)
, max_fitness(0)
, max_merit(0)
+ , max_gestation_time(0)
+ , max_genome_length(0)
+ , min_fitness(HUGE_VAL)
+ , min_merit(HUGE_VAL)
+ , min_gestation_time(INT_MAX)
+ , min_genome_length(INT_MAX)
, dom_genotype_id(-1)
, dom_name("(none)")
, dom_births(0)
Modified: trunk/source/main/stats.hh
===================================================================
--- trunk/source/main/stats.hh 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/main/stats.hh 2005-05-13 21:09:17 UTC (rev 155)
@@ -168,6 +168,10 @@
double max_merit;
int max_gestation_time;
int max_genome_length;
+ double min_fitness;
+ double min_merit;
+ int min_gestation_time;
+ int min_genome_length;
int dom_genotype_id;
cString dom_name;
int dom_births;
@@ -348,6 +352,16 @@
{ max_gestation_time = in_max_gestation_time; }
inline void SetMaxGenomeLength(int in_max_genome_length)
{ max_genome_length = in_max_genome_length; }
+
+ inline void SetMinFitness(double in_min_fitness)
+ { min_fitness = in_min_fitness; }
+ inline void SetMinMerit(double in_min_merit)
+ { min_merit = in_min_merit; }
+ inline void SetMinGestationTime(int in_min_gestation_time)
+ { min_gestation_time = in_min_gestation_time; }
+ inline void SetMinGenomeLength(int in_min_genome_length)
+ { min_genome_length = in_min_genome_length; }
+
inline void SetEntropy(double in_entropy)
{ entropy = in_entropy; }
inline void SetSpeciesEntropy(double in_ent)
@@ -522,7 +536,12 @@
int GetMaxGestationTime() const { return max_gestation_time; }
int GetMaxGenomeLength() const { return max_genome_length; }
+ double GetMinFitness() const { return min_fitness; }
+ double GetMinMerit() const { return min_merit; }
+ int GetMinGestationTime() const { return min_gestation_time; }
+ int GetMinGenomeLength() const { return min_genome_length; }
+
// this value gets recorded when a creature with the particular
// fitness value gets born. It will never change to a smaller value,
// i.e., when the maximum fitness in the population drops, this value will
Deleted: trunk/source/python/AvidaEd-interactive.py
===================================================================
--- trunk/source/python/AvidaEd-interactive.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaEd-interactive.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -1,39 +0,0 @@
-
-import AvidaCore
-import qt
-import iqt
-import sys
-
-def Reload():
- import AvidaGui2.pyTemporaryReloads
- reload(AvidaGui2.pyTemporaryReloads)
- import linecache
- linecache.checkcache()
-
-def UTs():
- Reload()
- AvidaGui2.pyTemporaryReloads.UTs()
-
-def AvidaEd():
- Reload()
- edu_main_controller = AvidaGui2.pyEduMainCtrl.pyEduMainCtrl()
- edu_main_controller.construct()
- edu_main_controller.m_main_mdl.m_main_mdtr.m_main_controller_factory_mdtr.emit(
- qt.PYSIGNAL("newMainControllerSig"), ("pySessionCtrl",))
- sys.exc_clear()
- sys.exc_traceback = sys.last_traceback = None
- return edu_main_controller
-
-AvidaCore.cConfig.InitGroupList()
-
-import AvidaGui2.pyTemporaryReloads
-reload(AvidaGui2.pyTemporaryReloads)
-
-#UTs()
-avida_ed=AvidaEd()
-
-print """
-
-Type 'avida_ed=AvidaEd()' to reload the AvidaEd user interface.
-
-"""
Modified: trunk/source/python/AvidaEd-osx.py
===================================================================
--- trunk/source/python/AvidaEd-osx.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaEd-osx.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -1,27 +1,3 @@
-# Modified from IPython sources for use in AvidaEd
-"""IPython -- An enhanced Interactive Python
-
-This is just the startup wrapper script, kept deliberately to a minimum.
-
-The shell's mainloop() takes an optional argument, sys_exit (default=0). If
-set to 1, it calls sys.exit() at exit time. You can use the following code in
-your PYTHONSTARTUP file:
-
-import IPython
-IPython.Shell.IPShell().mainloop(sys_exit=1)
-
-[or simply IPython.Shell.IPShell().mainloop(1) ]
-
-and IPython will be your working environment when you start python. The final
-sys.exit() call will make python exit transparently when IPython finishes, so
-you don't have an extra prompt to get out of.
-
-This is probably useful to developers who manage multiple Python versions and
-don't want to have correspondingly multiple IPython versions. Note that in
-this mode, there is no way to pass IPython any command-line options, as those
-are trapped first by Python itself.
-"""
-
import sys
# When an OS X application is double-clicked, argv[1] is set to
@@ -30,28 +6,37 @@
# so we need to find another way to distinguish between launches by
# double-clicking vs. launches by command-line.
# @kgn
+
if len(sys.argv) > 1 and sys.argv[1] >= 5 and sys.argv[1][:5] == '-psn_':
- import qt
- import AvidaCore
-
- def Run():
- import AvidaGui2.pyEduMainCtrl
- edu_main_controller = AvidaGui2.pyEduMainCtrl.pyEduMainCtrl()
- edu_main_controller.construct()
- edu_main_controller.m_main_mdl.m_main_mdtr.m_main_controller_factory_mdtr.emit(
- #sys.exc_clear()
- #sys.exc_traceback = sys.last_traceback = None
- qt.PYSIGNAL("newMainControllerSig"), ("pySessionCtrl",))
- return edu_main_controller
-
- AvidaCore.cConfig.InitGroupList()
- a = qt.QApplication(sys.argv)
- ctrl=Run()
- a.exec_loop()
+ # NonInteractive Avida-ED
+
+ from AvidaGui2 import Avida_ED_startup
+ Avida_ED_startup.NonInteractive()
+
else:
+
+ # Interactive Avida-ED
+
+ # The bundled version of Avida-ED has a stripped-down version of
+ # Python, so here I'm adding back some of the missing stuff for the
+ # convenience of developers using the interactive version of Avida-ED.
+
import site
+
+ class _Helper(object):
+ """Define the built-in 'help'.
+ This is a wrapper around pydoc.help (with a twist).
+ """
+
+ def __repr__(self):
+ return "Type help() for interactive help, " \
+ "or help(object) for help about object."
+ def __call__(self, *args, **kwds):
+ import pydoc
+ return pydoc.help(*args, **kwds)
+
class _Printer(object):
"""interactive prompt objects for printing the license text, a list of
contributors and the copyright notice."""
@@ -112,6 +97,7 @@
key = None
if key == 'q':
break
+
__builtins__.credits = _Printer("credits", """
Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands
for supporting Python development. See www.python.org for more information.""")
@@ -132,15 +118,15 @@
Copyright (c) 2001-2004 Fernando Perez, Janko Hauser, Nathan Gray.
All Rights Reserved.""")
- __builtins__.exit = """
- Use Ctrl-D (i.e. EOF) to exit."""
+ __builtins__.exit = """Use Ctrl-D (i.e. EOF) to exit."""
- __builtins__.quit = """
- Use Ctrl-D (i.e. EOF) to exit."""
-
-
- import IPython
- import __builtin__
-
- ipython_shell = IPython.Shell.IPShell(argv=['AvidaEd-interactive.py'])
- ipython_shell.mainloop()
+ __builtins__.quit = """Use Ctrl-D (i.e. EOF) to exit."""
+
+ __builtins__.help = _Helper()
+
+
+ #
+
+ from AvidaGui2 import Avida_ED_startup
+ Avida_ED_startup.Interactive()
+
Added: trunk/source/python/AvidaGui2/Avida_ED_startup.py
===================================================================
--- trunk/source/python/AvidaGui2/Avida_ED_startup.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/Avida_ED_startup.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -0,0 +1,14 @@
+def NonInteractive():
+ import sys
+ import qt
+ a = qt.QApplication(sys.argv)
+ from AvidaGui2 import Avida_ED_startup_utils as Avida_ED_startup_utils
+ Avida_ED_startup_utils.AvidaCore.cConfig.InitGroupList()
+ ctrl = Avida_ED_startup_utils.AvidaEd()
+ a.exec_loop()
+
+def Interactive():
+ import IPython
+ import __builtin__
+ ipython_shell = IPython.Shell.IPShell(argv=["-c", "import iqt; import AvidaGui2; from AvidaGui2.Avida_ED_startup_utils import *; AvidaCore.cConfig.InitGroupList(); avida_ed = AvidaEd();"])
+ ipython_shell.mainloop()
Added: trunk/source/python/AvidaGui2/Avida_ED_startup_utils.py
===================================================================
--- trunk/source/python/AvidaGui2/Avida_ED_startup_utils.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/Avida_ED_startup_utils.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -0,0 +1,65 @@
+
+import qt
+
+# Make a splash screen to give feedback to the user about progress in
+# launchning Avida-ED.
+#
+s_pixmap = qt.QPixmap("avidalogo.png")
+s_splash = qt.QSplashScreen(s_pixmap)
+font = s_splash.font()
+font.setPointSize(9)
+s_splash.setFont(font)
+del font
+s_splash.show()
+s_splash.message("Loading core Avida modules ...")
+
+import AvidaCore
+import sys
+
+# For developers : this asks the pyTemporaryReloads class to reload
+# certain parts of the python source code for the Avida gui, picking up
+# any changes since the last launch of the gui. This can be called
+# without restarting the application (convenient for quickly checking
+# the results of changes to the source code).
+#
+def Reload():
+ import AvidaGui2.pyTemporaryReloads
+ reload(AvidaGui2.pyTemporaryReloads)
+ # Ask the linecache module to refresh its cache with new versions of
+ # the source code.
+ import linecache
+ linecache.checkcache()
+
+# Runs unit tests. Can be called while gui is running, and will
+# instantiate a new copy of Avida for testing (but this will disturb
+# Avida's random number generator).
+#
+def UTs():
+ Reload()
+ AvidaGui2.pyTemporaryReloads.UTs()
+
+# Instantiate (or reinstantiate) the Avida-ED gui. Return controller for
+# new gui instance.
+#
+def AvidaEd():
+ sys.exc_clear()
+ sys.exc_traceback = sys.last_traceback = None
+ s_splash.message("Loading Avida-ED user-interface ...")
+ s_splash.show()
+ try:
+ Reload()
+ from AvidaGui2.pyEduMainCtrl import pyEduMainCtrl
+ s_splash.message("Assembling Avida-ED user-interface ...")
+ edu_main_controller = pyEduMainCtrl()
+ edu_main_controller.construct()
+ edu_main_controller.m_main_mdl.m_main_mdtr.m_main_controller_factory_mdtr.emit(
+ qt.PYSIGNAL("newMainControllerSig"), ("pySessionCtrl",))
+ finally:
+ s_splash.clear()
+ s_splash.hide()
+ print """
+
+ Type 'avida_ed=AvidaEd()' to reload the AvidaEd user interface.
+
+ """
+ return edu_main_controller
Added: trunk/source/python/AvidaGui2/avidalogo.png
===================================================================
(Binary files differ)
Property changes on: trunk/source/python/AvidaGui2/avidalogo.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/source/python/AvidaGui2/pyAvida.py
===================================================================
--- trunk/source/python/AvidaGui2/pyAvida.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyAvida.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -85,6 +85,7 @@
self.m_avida_threaded_driver.removeGuiWorkFunctor(thread_work_functor)
def destruct(self):
+ print("pyAvida.destruct() ...")
self.m_avida_thread_mdtr.emit(qt.PYSIGNAL("doCloseAvidaSig"),())
if hasattr(self, "m_update_ck_timer"):
self.m_update_ck_timer.stop()
@@ -92,33 +93,11 @@
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.")
+ print("pyAvida.destruct() self.m_avida_thread_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()
Modified: trunk/source/python/AvidaGui2/pyEduSessionMenuBarHdlr.py
===================================================================
--- trunk/source/python/AvidaGui2/pyEduSessionMenuBarHdlr.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyEduSessionMenuBarHdlr.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -39,89 +39,88 @@
def construct(self, session_mdl):
self.m_session_mdl = session_mdl
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr = pyMdtr()
- self.connect(self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
+ self.connect(self.m_session_mdl.m_session_mdtr,
qt.PYSIGNAL("doSetupMainWindowMenuBarSig"), self.doSetupMainWindowMenuBarSlot)
def doSetupMainWindowMenuBarSlot(self, main_window):
main_window.m_menu_bar = main_window.menuBar()
main_window.m_file_menu = qt.QPopupMenu()
main_window.m_new_workspace_fmi_id = main_window.m_file_menu.insertItem("New Workspace",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doNewWorkspaceSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doNewWorkspaceSig"),
qt.Qt.CTRL + qt.Qt.SHIFT + qt.Qt.Key_N)
main_window.m_open_workspace_fmi_id = main_window.m_file_menu.insertItem("Open Workspace...",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doOpenWorkspaceSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doOpenWorkspaceSig"),
qt.Qt.CTRL + qt.Qt.Key_O)
main_window.m_close_workspace_fmi_id = main_window.m_file_menu.insertItem("Close Workspace",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doCloseWorkspaceSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doCloseWorkspaceSig"),
qt.Qt.CTRL + qt.Qt.Key_W)
main_window.m_file_menu.insertSeparator()
main_window.m_save_workspace_fmi_id = main_window.m_file_menu.insertItem("Save Workspace",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doSaveWorkspaceSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doSaveWorkspaceSig"),
qt.Qt.CTRL + qt.Qt.Key_S)
main_window.m_save_workspace_as_fmi_id = main_window.m_file_menu.insertItem("Save Workspace As...",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doSaveWorkspaceAsSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doSaveWorkspaceAsSig"),
qt.Qt.CTRL + qt.Qt.SHIFT + qt.Qt.Key_S)
main_window.m_file_menu.insertSeparator()
main_window.m_import_fmi_id = main_window.m_file_menu.insertItem("Import...",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doImportSig"))
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doImportSig"))
main_window.m_export_fmi_id = main_window.m_file_menu.insertItem("Export...",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doSaveWorkspaceSig"))
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doSaveWorkspaceSig"))
main_window.m_file_menu.insertSeparator()
main_window.m_quit_fmi_id = main_window.m_file_menu.insertItem("Quit",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doSaveWorkspaceSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doSaveWorkspaceSig"),
qt.Qt.CTRL + qt.Qt.Key_Q)
main_window.m_menu_bar.insertItem("File", main_window.m_file_menu)
main_window.m_edit_menu = qt.QPopupMenu()
main_window.m_undo_emi_id = main_window.m_edit_menu.insertItem("Undo",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doUndoSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doUndoSig"),
qt.Qt.CTRL + qt.Qt.Key_Z)
main_window.m_redo_emi_id = main_window.m_edit_menu.insertItem("Redo",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doRedoSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doRedoSig"),
qt.Qt.CTRL + qt.Qt.SHIFT + qt.Qt.Key_Z)
main_window.m_edit_menu.insertSeparator()
main_window.m_cut_emi_id = main_window.m_edit_menu.insertItem("Cut",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doCutSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doCutSig"),
qt.Qt.CTRL + qt.Qt.Key_X)
main_window.m_copy_emi_id = main_window.m_edit_menu.insertItem("Copy",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doCopySig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doCopySig"),
qt.Qt.CTRL + qt.Qt.Key_C)
main_window.m_paste_emi_id = main_window.m_edit_menu.insertItem("Paste",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doPasteSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doPasteSig"),
qt.Qt.CTRL + qt.Qt.Key_V)
main_window.m_edit_menu.insertSeparator()
main_window.m_select_all_emi_id = main_window.m_edit_menu.insertItem("Select All",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doSelectAllSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doSelectAllSig"),
qt.Qt.CTRL + qt.Qt.Key_A)
main_window.m_menu_bar.insertItem("Edit", main_window.m_edit_menu)
main_window.m_control_menu = qt.QPopupMenu()
main_window.m_start_cmi_id = main_window.m_control_menu.insertItem("Start",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doStartSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doStartSig"),
qt.Qt.Key_Space)
main_window.m_pause_cmi_id = main_window.m_control_menu.insertItem("Pause",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doPauseSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doPauseSig"),
qt.Qt.Key_Space)
main_window.m_next_update_cmi_id = main_window.m_control_menu.insertItem("Next Update",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doNextUpdateSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doNextUpdateSig"),
qt.Qt.Key_Return)
main_window.m_next_step_cmi_id = main_window.m_control_menu.insertItem("Next Step",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doNextStepSig"),
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doNextStepSig"),
qt.Qt.Key_Return)
main_window.m_menu_bar.insertItem("Control", main_window.m_control_menu)
main_window.m_view_menu = qt.QPopupMenu()
main_window.m_tmp_view_window_vmi_id = main_window.m_view_menu.insertItem("Workspace Window (tmp)",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doWorkspaceWindowTmpSig"))
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doWorkspaceWindowTmpSig"))
main_window.m_menu_bar.insertItem("View", main_window.m_view_menu)
main_window.m_window_menu = qt.QPopupMenu()
main_window.m_zoom_window_wmi_id = main_window.m_window_menu.insertItem("Zoom Window",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doZoomWindowSig"))
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doZoomWindowSig"))
main_window.m_minimize_window_wmi_id = main_window.m_window_menu.insertItem("Minimize Window",
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr, qt.PYSIGNAL("doMinimizeWindowSig"))
+ self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doMinimizeWindowSig"))
main_window.m_menu_bar.insertItem("Window", main_window.m_window_menu)
if hasattr(main_window, 'setupCustomMenus'):
Modified: trunk/source/python/AvidaGui2/pyEduWorkspaceCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyEduWorkspaceCtrl.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyEduWorkspaceCtrl.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -17,7 +17,6 @@
def construct(self, session_mdl):
self.m_session_mdl = session_mdl
- self.m_session_mdl.m_session_mdtr.m_workspace_mdtr = pyMdtr()
self.m_avida = None
self.startStatus = True
self.m_nav_bar_ctrl.construct(session_mdl)
@@ -72,15 +71,15 @@
self.doStartAvidaSlot)
self.connect(
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
+ self.m_session_mdl.m_session_mdtr,
PYSIGNAL("doStartSig"),
self.doStartAvidaSlot)
self.connect(
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
+ self.m_session_mdl.m_session_mdtr,
PYSIGNAL("doPauseSig"),
self.doPauseAvidaSlot)
# self.connect(
- # self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
+ # self.m_session_mdl.m_session_mdtr,
# PYSIGNAL("doNextUpdateSig"),
# self.updatePBClickedSlot)
@@ -176,8 +175,8 @@
# public slot
def filePrint(self):
- print "pyEduWorkspaceCtrl.filePrint() emitting printGraphSig via self.m_session_mdl.m_session_mdtr.m_workspace_mdtr"
- self.m_session_mdl.m_session_mdtr.m_workspace_mdtr.emit(PYSIGNAL("printGraphSig"), ())
+ print "pyEduWorkspaceCtrl.filePrint() emitting printGraphSig via self.m_session_mdl.m_session_mdtr"
+ self.m_session_mdl.m_session_mdtr.emit(PYSIGNAL("printGraphSig"), ())
# public slot
@@ -244,14 +243,17 @@
print "send pause signal"
def setAvidaSlot(self, avida):
+ print "pyEduWorkspaceCtrl.setAvidaSlot() ..."
old_avida = self.m_avida
self.m_avida = avida
- if(old_avida):
+ if old_avida:
+ print "pyEduWorkspaceCtrl.setAvidaSlot() disconnecting old_avida ..."
self.disconnect(
- self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+ old_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
del old_avida
- if(self.m_avida):
+ if self.m_avida:
+ print "pyEduWorkspaceCtrl.setAvidaSlot() connecting self.m_avida ..."
self.connect(
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
Modified: trunk/source/python/AvidaGui2/pyGradientScaleCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyGradientScaleCtrl.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyGradientScaleCtrl.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -17,17 +17,20 @@
self.setAvidaSlot)
def setAvidaSlot(self, avida):
+ print "pyGradientScaleCtrl.setAvidaSlot() ..."
old_avida = self.m_avida
self.m_avida = avida
if(old_avida):
+ print "pyGradientScaleCtrl.setAvidaSlot() disconnecting old_avida ..."
self.disconnect(
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
del old_avida
if(self.m_avida):
+ print "pyGradientScaleCtrl.setAvidaSlot() connecting 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
+ pass
Modified: trunk/source/python/AvidaGui2/pyGradientScaleView.py
===================================================================
--- trunk/source/python/AvidaGui2/pyGradientScaleView.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyGradientScaleView.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -14,9 +14,15 @@
s_bottom_margin = 6
s_right_margin = 6
s_spacing = 6
- s_stripe_width = 20
+ s_stripe_height = 20
s_stripes = 100
s_step = 10
+ s_empty_text = "(empty)"
+ s_off_scale_text = "(off scale)"
+ s_empty_text_width = 0
+ s_off_scale_text_width = 0
+ s_label_text_width = 0
+ s_text_height = 0
def __init__(self,parent = None,name = None,fl = 0):
QWidget.__init__(self,parent,name,fl)
@@ -33,9 +39,14 @@
self.recalcSize()
font = QFont(self.font())
- font.setPointSize(10)
+ font.setPointSize(9)
self.setFont(font)
+ self.s_empty_text_width = self.fontMetrics().width(self.s_empty_text)
+ self.s_off_scale_text_width = self.fontMetrics().width(self.s_off_scale_text)
+ self.s_label_text_width = self.fontMetrics().width("0.00000")
+ self.s_text_height = self.fontMetrics().height()
+
if not name:
setName("pyGradientScaleView")
@@ -74,30 +85,58 @@
h = self.height()
p = QPainter(self)
- stripe_height = (h-self.s_top_margin-self.s_bottom_margin)/self.s_stripes + 1
- plot_height = h-self.s_top_margin-self.s_bottom_margin-stripe_height+1
+ stripe_width = (w-self.s_left_margin-self.s_right_margin)/self.s_stripes + 1
+ plot_width = w-self.s_left_margin-self.s_right_margin+1
+ #plot_width = w-self.s_left_margin-self.s_right_margin-stripe_width+1
- text_width = w - self.s_left_margin - self.s_stripe_width - self.s_spacing
+ #text_height = self.fontMetrics().height()
+ #label_width = self.fontMetrics().width("0.00000")
for i in range(self.s_stripes):
x = float(i) / float(self.s_stripes);
p.fillRect(
- self.s_left_margin,
- (self.s_top_margin + (1-x)*plot_height),
- self.s_stripe_width,
- stripe_height,
+ (self.s_left_margin + x*plot_width),
+ #self.s_top_margin + text_height + self.s_spacing,
+ self.s_top_margin + self.s_text_height + self.s_spacing,
+ stripe_width,
+ self.s_stripe_height,
QBrush(self.doubleToColor(x))
)
- if i%self.s_step == 0:
- p.drawText(
- self.s_left_margin+self.s_stripe_width + self.s_spacing,
- (self.s_top_margin + (1-x)*plot_height-(self.s_step-1)*stripe_height/2),
- text_width,
- self.s_step*stripe_height,
- Qt.AlignVCenter | Qt.AlignLeft,
- self.getLabelString( self.m_min_value+x*(self.m_max_value - self.m_min_value))
- )
+ p.drawText(
+ self.s_left_margin,
+ self.s_top_margin,
+ self.s_label_text_width,
+ self.s_text_height,
+ #label_width,
+ #text_height,
+ Qt.AlignBottom | Qt.AlignLeft,
+ self.getLabelString(self.m_min_value)
+ )
+ p.drawText(
+ #w - self.s_right_margin - label_width,
+ w - self.s_right_margin - self.s_label_text_width,
+ self.s_top_margin,
+ self.s_label_text_width,
+ self.s_text_height,
+ #label_width,
+ #text_height,
+ Qt.AlignBottom | Qt.AlignRight,
+ self.getLabelString(self.m_max_value)
+ )
+
+ #self.s_spacing + 2 * self.fontMetrics().width("0.0e+02")
+
+ #if i%self.s_step == 0:
+ # p.drawText(
+ # self.s_left_margin+self.s_stripe_height + self.s_spacing,
+ # (self.s_top_margin + (1-x)*plot_width-(self.s_step-1)*stripe_width/2),
+ # text_width,
+ # self.s_step*stripe_width,
+ # Qt.AlignVCenter | Qt.AlignLeft,
+ # self.getLabelString( self.m_min_value+x*(self.m_max_value - self.m_min_value))
+ # )
+
#def drawColorList(self):
# QValueVector<QString>::const_iterator str_it = m_descr_vector.begin();
# QValueVector<QColor>::const_iterator color_it = m_color_vector.begin();
@@ -106,10 +145,10 @@
# h = self.height()
# p = QPainter(self)
#
- # stripe_height = (h-self.s_top_margin-self.s_bottom_margin)/len(m_color_vector)
- # plot_height = h-self.s_top_margin-self.s_bottom_margin-stripe_height
+ # stripe_width = (h-self.s_top_margin-self.s_bottom_margin)/len(m_color_vector)
+ # plot_width = h-self.s_top_margin-self.s_bottom_margin-stripe_width
#
- # text_width = w - self.s_left_margin - self.s_stripe_width - self.s_spacing;
+ # text_width = w - self.s_left_margin - self.s_stripe_height - self.s_spacing;
#
# int i,j;
# i = j = m_color_list_length-1;
@@ -117,9 +156,9 @@
# if ( !(*str_it).isNull() ){ // draw only if description exists
# double x = (double) j / (double)(m_color_list_length-1);
# // the colored stripe
- # p.fillRect( m_left_margin, (int) (m_top_margin + (1-x)*plot_height + .1*stripe_height), m_stripe_width, (int) (.8*stripe_height), *color_it );
+ # p.fillRect( m_left_margin, (int) (m_top_margin + (1-x)*plot_width + .1*stripe_width), m_stripe_width, (int) (.8*stripe_width), *color_it );
# // the label
- # p.drawText( m_left_margin+m_stripe_width + m_spacing, (int) (m_top_margin + (1-x)*plot_height), text_width, stripe_height, Qt::AlignVCenter | Qt::AlignLeft, *str_it );
+ # p.drawText( m_left_margin+m_stripe_width + m_spacing, (int) (m_top_margin + (1-x)*plot_width), text_width, stripe_width, Qt::AlignVCenter | Qt::AlignLeft, *str_it );
# j--;
# }
# }
@@ -130,15 +169,16 @@
h = 1
if self.m_activated:
if self.m_continuous:
- w = (
- self.s_left_margin +
- self.s_stripe_width +
+ #w = self.s_left_margin + self.s_right_margin + self.s_spacing + 2 * self.fontMetrics().width("0.0e+02")
+ w = self.s_left_margin + self.s_right_margin + self.s_spacing + 2 * self.s_label_text_width
+ h = (
+ self.s_top_margin +
+ #self.fontMetrics().height() +
+ self.s_label_text_width +
self.s_spacing +
- self.s_right_margin +
- self.fontMetrics().width("0.0e+02")
- #self.fontMetrics().width(self.getLabelString(self.m_max_value))
- )
- h = self.fontMetrics().height() * self.s_stripes / self.s_step
+ self.s_stripe_height +
+ self.s_bottom_margin
+ )
else:
min_label_width = 0
for desc in self.m_descr_vector:
@@ -147,7 +187,7 @@
min_label_width = x
w = (
self.s_left_margin +
- self.s_stripe_width +
+ self.s_stripe_height +
self.s_spacing +
self.s_right_margin +
min_label_width
@@ -155,9 +195,10 @@
h = self.fontMetrics().height() * len(self.m_color_vector)
self.setMinimumWidth(w)
- self.setMaximumWidth(w)
+ #self.setMaximumWidth(w)
self.setMinimumHeight(h)
+ self.setMaximumHeight(h)
def getLabelString(self, x):
Modified: trunk/source/python/AvidaGui2/pyHardwareCPUTrace.py
===================================================================
--- trunk/source/python/AvidaGui2/pyHardwareCPUTrace.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyHardwareCPUTrace.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -16,6 +16,10 @@
self.m_register_cx_info = []
self.m_read_label_info = []
self.m_last_copy_info = []
+ self.m_ihead_moves = []
+ self.m_ihead_moves_info = []
+ self.m_ihead_moves_counts = {}
+
self.m_last_copied_instruction = 0
self.m_is_viable = None
@@ -41,6 +45,15 @@
)
self.m_last_copy_info.append(self.m_last_copied_instruction)
+ if 1 < len(self.m_ihead_info):
+ if self.m_ihead_info[-2] != self.m_ihead_info[-1]:
+ move_count = 1
+ if self.m_ihead_moves_counts.has_key((self.m_ihead_info[-2], self.m_ihead_info[-1])):
+ move_count = self.m_ihead_moves_counts[(self.m_ihead_info[-2], self.m_ihead_info[-1])] + 1
+ self.m_ihead_moves_counts[(self.m_ihead_info[-2], self.m_ihead_info[-1])] = move_count
+ self.m_ihead_moves.append((self.m_ihead_info[-2], self.m_ihead_info[-1], move_count))
+ self.m_ihead_moves_info.append(len(self.m_ihead_moves))
+
def recordGenotypeSummary(self, analyze_genotype):
self.m_is_viable = analyze_genotype.GetViable()
self.m_gestation_time = analyze_genotype.GetGestTime()
Modified: trunk/source/python/AvidaGui2/pyLiveControlsCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyLiveControlsCtrl.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyLiveControlsCtrl.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -29,14 +29,17 @@
self.clickedPauseAvidaSlot)
def setAvidaSlot(self, avida):
+ print "pyLiveControlsCtrl.setAvidaSlot() ..."
old_avida = self.m_avida
self.m_avida = avida
if(old_avida):
+ print "pyLiveControlsCtrl.setAvidaSlot() disconnecting old_avida ..."
self.disconnect(
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
del old_avida
if(self.m_avida):
+ print "pyLiveControlsCtrl.setAvidaSlot() connecting self.m_avida ..."
self.connect(
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
Modified: trunk/source/python/AvidaGui2/pyMapProfile.py
===================================================================
--- trunk/source/python/AvidaGui2/pyMapProfile.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyMapProfile.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -1,5 +1,5 @@
-from qt import PYSIGNAL, QColor, QObject
+from qt import PYSIGNAL, QColor, QObject, Qt
from math import exp
class pyMapProfile:
@@ -11,10 +11,8 @@
def continuousIndexingFunction(population_cell_item, min, range):
population_cell = population_cell_item.m_population_cell
if 0.0 < range:
- index = population_cell.IsOccupied() and ((float(idx_functor(population_cell)) - min) / range) or 0.0
- else: index = 0.0
- if index < 0.0: index = 0.0
- elif 1.0 < index: index = 1.0
+ index = population_cell.IsOccupied() and ((float(idx_functor(population_cell)) - min) / range) or -1.0
+ else: index = -1.0
if population_cell_item.m_index == index: return False
else:
@@ -39,10 +37,11 @@
self.m_sup = 0.0
self.m_target_inf = 0.0
self.m_target_sup = 0.0
- self.m_inf_tol_coef = 0.1
- self.m_sup_tol_coef = 0.1
+ self.m_inf_tolerance_coeff = 0.1
+ self.m_sup_tolerance_coeff = 0.1
self.m_inf_rescale_rate = 0.0
self.m_sup_rescale_rate = 0.0
+ self.m_max_rescale_factor = 0.03
self.m_updates_to_rescale = 40
self.m_should_reset = True
@@ -57,7 +56,8 @@
def resetRange(self, population):
(inf, sup) = self.m_range.getRange()
- (self.m_target_inf, self.m_target_sup) = (self.m_inf, self.m_sup) = (inf, sup)
+ #(self.m_target_inf, self.m_target_sup) = (self.m_inf, self.m_sup) = (inf, sup)
+ (self.m_target_inf, self.m_target_sup) = (self.m_inf, self.m_sup) = (0, sup)
self.m_inf_rescale_rate = self.m_sup_rescale_rate = 0
return self.getRange()
@@ -67,17 +67,40 @@
return self.resetRange(population)
(inf, sup) = self.m_range.getRange()
- if (sup < (1 - self.m_sup_tol_coef) * self.m_target_sup) or (self.m_target_sup < sup):
- new_target_sup = sup * (1 + self.m_sup_tol_coef)
+ if (sup < (1 - self.m_sup_tolerance_coeff) * self.m_target_sup) or (self.m_target_sup < sup):
+ new_target_sup = sup * (1 + self.m_sup_tolerance_coeff)
+ #self.m_sup_rescale_rate = float(new_target_sup - self.m_sup)
self.m_sup_rescale_rate = float(new_target_sup - self.m_sup) / self.m_updates_to_rescale
self.m_target_sup = new_target_sup
+ #if (inf > (1 + self.m_inf_tolerance_coeff) * self.m_target_inf) or (self.m_target_inf > inf):
+ # new_target_inf = inf * (1 - self.m_inf_tolerance_coeff)
+ # #self.m_sup_rescale_rate = float(new_target_sup - self.m_sup)
+ # self.m_inf_rescale_rate = float(self.m_inf - new_target_inf) / self.m_updates_to_rescale
+ # self.m_target_inf = new_target_inf
+
if self.m_sup_rescale_rate != 0:
- self.m_sup += self.m_sup_rescale_rate
+ if inf <= self.m_sup:
+ #self.m_sup = self.m_target_sup
+ self.m_sup += self.m_sup_rescale_rate
+ else:
+ max_rate = self.m_sup * self.m_max_rescale_factor
+ self.m_sup += min(self.m_sup_rescale_rate, max_rate)
if abs(self.m_target_sup - self.m_sup) < abs(self.m_sup_rescale_rate):
self.m_sup = self.m_target_sup
self.m_sup_rescale_rate = 0
+ #if self.m_inf_rescale_rate != 0:
+ # if self.m_inf <= inf:
+ # #self.m_sup = self.m_target_sup
+ # self.m_inf -= self.m_sup_rescale_rate
+ # else:
+ # max_rate = self.m_inf * self.m_max_rescale_factor
+ # self.m_inf -= min(self.m_inf_rescale_rate, max_rate)
+ # if abs(self.m_target_inf - self.m_inf) < abs(self.m_inf_rescale_rate):
+ # self.m_inf = self.m_target_inf
+ # self.m_inf_rescale_rate = 0
+
return self.getRange()
class RangeReport(QObject):
@@ -88,14 +111,21 @@
self.m_avida = None
self.m_range = (0, 0)
def setAvidaSlot(self, avida):
+ print "RangeReport.setAvidaSlot() ..."
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)
+ print "RangeReport.setAvidaSlot() unsetting old_avida ..."
+ if hasattr(old_avida, "m_avida_thread_mdtr"):
+ print "RangeReport.setAvidaSlot() disconnect old_avida ..."
+ self.disconnect(
+ old_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
+ self.avidaUpdatedSlot)
+ print "RangeReport.setAvidaSlot() deleting old_avida ..."
del old_avida
+ print "RangeReport.setAvidaSlot() done ..."
if(self.m_avida):
+ print "RangeReport.setAvidaSlot() connecting self.m_avida ..."
self.connect(
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
@@ -106,10 +136,10 @@
return self.m_range
NullRng = lambda p: (0, 0)
- MeritRng = lambda p: (0, p.GetStats().GetMaxMerit())
- FitnessRng = lambda p: (0, p.GetStats().GetMaxFitness())
- GestationTimeRng = lambda p: (0, p.GetStats().GetMaxGestationTime())
- SizeRng = lambda p: (0, p.GetStats().GetMaxGenomeLength())
+ MeritRng = lambda p: (p.GetStats().GetMinMerit(), p.GetStats().GetMaxMerit())
+ FitnessRng = lambda p: (p.GetStats().GetMinFitness(), p.GetStats().GetMaxFitness())
+ GestationTimeRng = lambda p: (p.GetStats().GetMinGestationTime(), p.GetStats().GetMaxGestationTime())
+ SizeRng = lambda p: (p.GetStats().GetMinGenomeLength(), p.GetStats().GetMaxGenomeLength())
def sigmoid(x, midpoint, steepness):
@@ -119,18 +149,20 @@
#x = max(0, min(x, 1)) * (1 - 0.1) + 0.1
x = 1 < x and 1 or x
x = x < 0 and 0 or x
- x = 0.1 + 0.9*x
+ x = 0.1 + 0.8*x
h = (x * 360 + 100) % 360
v = sigmoid(x, 0.3, 10) * 255
s = sigmoid(1 - x, 0.1, 30) * 255
return QColor(h, s, v, QColor.Hsv)
self.m_color_cache = [sigmoidDoubleToColor(float(n)/(self.m_color_cache_size - 1)) for n in range(self.m_color_cache_size)]
+ self.m_empty_color = QColor(Qt.black)
+ self.m_off_scale_color = QColor(Qt.white)
def sigmoidColorLookup(x):
sup = self.m_color_cache_size - 1
x *= sup
- x = sup < x and sup or x
- x = x < 0 and 0 or x
+ if sup < x: return self.m_off_scale_color
+ if x < 0: return self.m_empty_color
return self.m_color_cache[int(x)]
self.m_entries = (
Modified: trunk/source/python/AvidaGui2/pyOnePop_GraphCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOnePop_GraphCtrl.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyOnePop_GraphCtrl.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -61,7 +61,7 @@
self.modeActivatedSlot(self.m_combo_box.currentItem())
self.connect(
- self.m_session_mdl.m_session_mdtr.m_workspace_mdtr, PYSIGNAL("printGraphSig"),
+ self.m_session_mdl.m_session_mdtr, PYSIGNAL("printGraphSig"),
self.printGraphSlot)
def load(self, filename, colx, coly):
@@ -102,14 +102,17 @@
self.m_graph_ctrl.replot()
def setAvidaSlot(self, avida):
+ print "pyOnePop_GraphCtrl.setAvidaSlot() ..."
old_avida = self.m_avida
self.m_avida = avida
if(old_avida):
+ print "pyOnePop_GraphCtrl.setAvidaSlot() disconnecting old_avida ..."
self.disconnect(
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
del old_avida
if(self.m_avida):
+ print "pyOnePop_GraphCtrl.setAvidaSlot() connecting self.m_avida ..."
self.connect(
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
Modified: trunk/source/python/AvidaGui2/pyOnePop_PetriDishCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOnePop_PetriDishCtrl.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyOnePop_PetriDishCtrl.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -45,14 +45,17 @@
#self.m_petri_dish_ctrl.emit(PYSIGNAL("zoomSig"), (self.m_petri_dish_ctrl.m_initial_target_zoom,))
def setAvidaSlot(self, avida):
+ print "pyOnePop_PetriDishCtrl.setAvidaSlot() ..."
old_avida = self.m_avida
self.m_avida = avida
if(old_avida):
+ print "pyOnePop_PetriDishCtrl.setAvidaSlot() disconnecting old_avida ..."
self.disconnect(
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
del old_avida
if(self.m_avida):
+ print "pyOnePop_PetriDishCtrl.setAvidaSlot() connecting self.m_avida ..."
self.connect(
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
Modified: trunk/source/python/AvidaGui2/pyOnePop_PetriDishView.ui
===================================================================
--- trunk/source/python/AvidaGui2/pyOnePop_PetriDishView.ui 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyOnePop_PetriDishView.ui 2005-05-13 21:09:17 UTC (rev 155)
@@ -177,218 +177,198 @@
<property name="name">
<cstring>unnamed</cstring>
</property>
+ <widget class="pyPetriDishCtrl">
+ <property name="name">
+ <cstring>m_petri_dish_ctrl</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>5</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="pyGradientScaleCtrl">
+ <property name="name">
+ <cstring>m_gradient_scale_ctrl</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>50</width>
+ <height>50</height>
+ </size>
+ </property>
+ <property name="backgroundMode">
+ <enum>PaletteDark</enum>
+ </property>
+ </widget>
<widget class="QLayoutWidget">
<property name="name">
- <cstring>layout10</cstring>
+ <cstring>layout1</cstring>
</property>
- <vbox>
+ <hbox>
<property name="name">
<cstring>unnamed</cstring>
</property>
- <widget class="QLayoutWidget">
+ <widget class="QLabel">
<property name="name">
- <cstring>layout91</cstring>
+ <cstring>textLabel11</cstring>
</property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <widget class="pyPetriDishCtrl">
- <property name="name">
- <cstring>m_petri_dish_ctrl</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>3</hsizetype>
- <vsizetype>3</vsizetype>
- <horstretch>5</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- <widget class="pyGradientScaleCtrl">
- <property name="name">
- <cstring>m_gradient_scale_ctrl</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>1</vsizetype>
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>50</width>
- <height>50</height>
- </size>
- </property>
- <property name="backgroundMode">
- <enum>PaletteDark</enum>
- </property>
- </widget>
- </hbox>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string><font size="-1"><p align="right">Update:</p></font></string>
+ </property>
</widget>
- <widget class="QLayoutWidget">
+ <widget class="QLabel">
<property name="name">
- <cstring>layout1</cstring>
+ <cstring>m_update_label</cstring>
</property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string><font size="-1">-</font></string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Merit</string>
</property>
- <widget class="QLabel">
- <property name="name">
- <cstring>textLabel11</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>1</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string><font size="-1"><p align="right">Update:</p></font></string>
- </property>
- </widget>
- <widget class="QLabel">
- <property name="name">
- <cstring>m_update_label</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>1</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string><font size="-1">-</font></string>
- </property>
- </widget>
- <widget class="QComboBox">
- <item>
- <property name="text">
- <string>Merit</string>
- </property>
- </item>
- <property name="name">
- <cstring>m_mode_combobox</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>1</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <pointsize>11</pointsize>
- </font>
- </property>
- </widget>
- <widget class="QLabel">
- <property name="name">
- <cstring>textLabel10</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>1</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string><font size="-1"><p align="right">Zoom:</p></font></string>
- </property>
- </widget>
- <widget class="QSpinBox">
- <property name="name">
- <cstring>m_zoom_spinbox</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </hbox>
+ </item>
+ <property name="name">
+ <cstring>m_mode_combobox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>11</pointsize>
+ </font>
+ </property>
</widget>
- <widget class="QLayoutWidget">
+ <widget class="QLabel">
<property name="name">
- <cstring>layout229</cstring>
+ <cstring>textLabel10</cstring>
</property>
- <hbox>
- <property name="name">
- <cstring>unnamed</cstring>
- </property>
- <spacer>
- <property name="name">
- <cstring>spacer169_2</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>MinimumExpanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>10</width>
- <height>10</height>
- </size>
- </property>
- </spacer>
- <widget class="pyLiveControlsCtrl">
- <property name="name">
- <cstring>m_live_controls_ctrl</cstring>
- </property>
- <property name="sizePolicy">
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>50</height>
- </size>
- </property>
- </widget>
- <spacer>
- <property name="name">
- <cstring>spacer169</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>MinimumExpanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>10</width>
- <height>10</height>
- </size>
- </property>
- </spacer>
- </hbox>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string><font size="-1"><p align="right">Zoom:</p></font></string>
+ </property>
</widget>
- </vbox>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>m_zoom_spinbox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
</widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout229</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer169_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>10</width>
+ <height>10</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="pyLiveControlsCtrl">
+ <property name="name">
+ <cstring>m_live_controls_ctrl</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>50</height>
+ </size>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer169</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>10</width>
+ <height>10</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
</vbox>
</widget>
<widget class="QWidget">
@@ -478,6 +458,12 @@
<property type="0">-1</property>
<property type="1">pyPetriDishCtrl</property>
<property type="0">-1</property>
+ <property type="1">pyPetriDishCtrl</property>
+ <property type="0">-1</property>
+ <property type="1">pyPetriDishCtrl</property>
+ <property type="0">-1</property>
+ <property type="1">pyPetriDishCtrl</property>
+ <property type="0">-1</property>
<property type="pyPetriDishCtrl"></property>
<property type="-1">1</property>
</customwidget>
@@ -527,6 +513,12 @@
<property type="0">-1</property>
<property type="1">pyGradientScaleCtrl</property>
<property type="0">-1</property>
+ <property type="1">pyGradientScaleCtrl</property>
+ <property type="0">-1</property>
+ <property type="1">pyGradientScaleCtrl</property>
+ <property type="0">-1</property>
+ <property type="1">pyGradientScaleCtrl</property>
+ <property type="0">-1</property>
<property type="pyGradientScaleCtrl"></property>
<property type="-1">1</property>
</customwidget>
@@ -576,6 +568,12 @@
<property type="0">-1</property>
<property type="1">pyLiveControlsCtrl</property>
<property type="0">-1</property>
+ <property type="1">pyLiveControlsCtrl</property>
+ <property type="0">-1</property>
+ <property type="1">pyLiveControlsCtrl</property>
+ <property type="0">-1</property>
+ <property type="1">pyLiveControlsCtrl</property>
+ <property type="0">-1</property>
<property type="pyLiveControlsCtrl"></property>
<property type="-1">1</property>
</customwidget>
@@ -593,7 +591,7 @@
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
- <pixmap>image3</pixmap>
+ <pixmap>image2</pixmap>
</customwidget>
</customwidgets>
<images>
@@ -604,9 +602,6 @@
<data format="PNG" length="528">89504e470d0a1a0a0000000d494844520000000f0000000e0806000000f08a46ef000001d749444154789c8592cd6a53511485bf9b5c098969a3adb645c1e24f1a9d288a139180c1d0a9e044a18238a8934ed4e2d41770208a5121fa04fa06058722c46141090d0435850493e6aff626b9e72c076dd33411ba6071e0ecb3ce62efbd90c4205bad96969f3c55a552d1706d980106d06eb7957991e5883b85319683e04802a0d3e928f332cb4c608edfb53c53735142a1d0bec7b1588c542a45381c76fa62dff7f5e65596e39ca356dee2d8d418963d6721ac0c5e6f8b5223cfdd07b74824128e238977afdf2bd63dc546b983acc0d91581248c8495c5f37da6a7c7215a63e1e16d82972f5e5577fd30ed3f86dd16f63b8295c5588b91a5d6dce4686492466f9dc0cdf91b14367ee0197f48b80dbbf3a19130b20868793dcabfea04a2d1a8b3f4688192f79dae35fb5ca5edd358db77b7b2f47a066fabbb37edc25a4199e79f383d769e4dbfc3df6e1383b0560870022eae13c2c8303931ce89b303ab02c8e5bee9e3872f6c7a75aea5cf100c06fbb566a34deeeb1a13e10bb8ee21aecf4f32929a9595cfba776749d56a752461f97c5e8bf79fe9f1e25b158b45b9c3a949a7534e28e42a12898c242a1e8f3b3327a3aa55eaccce!
ce3a2362806432e9fcef1ee0d29504eb3f6b3b533d20fcc35c5d5d55a9549224fe01033d5afa3250e5560000000049454e44ae426082</data>
</image>
<image name="image2">
- <data format="XBM.GZ" length="79">789c534e494dcbcc4b554829cdcdad8c2fcf4c29c95030e0524611cd48cd4ccf28010a1797249664262b2467241641a592324b8aa363156c15aab914146aadb90067111b1f</data>
- </image>
- <image name="image3">
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d0326df7!
ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df218e05!
82c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454e44a!
e426082<
/data>
</image>
</images>
Modified: trunk/source/python/AvidaGui2/pyOnePop_StatsCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOnePop_StatsCtrl.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyOnePop_StatsCtrl.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -21,14 +21,17 @@
self.m_clicked_cell_number = -99
def setAvidaSlot(self, avida):
+ print "pyOnePop_StatsCtrl.setAvidaSlot() ..."
old_avida = self.m_avida
self.m_avida = avida
if(old_avida):
+ print "pyOnePop_StatsCtrl.setAvidaSlot() disconnecting old_avida ..."
self.disconnect(
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
del old_avida
if(self.m_avida):
+ print "pyOnePop_StatsCtrl.setAvidaSlot() connecting self.m_avida ..."
self.connect(
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
Modified: trunk/source/python/AvidaGui2/pyOnePop_TimelineCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOnePop_TimelineCtrl.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyOnePop_TimelineCtrl.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -17,17 +17,20 @@
self.setAvidaSlot)
def setAvidaSlot(self, avida):
+ print "pyOnePop_TimelineCtrl.setAvidaSlot() ..."
old_avida = self.m_avida
self.m_avida = avida
if(old_avida):
+ print "pyOnePop_TimelineCtrl.setAvidaSlot() disconnecting old_avida ..."
self.disconnect(
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
del old_avida
if(self.m_avida):
+ print "pyOnePop_TimelineCtrl.setAvidaSlot() connecting 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
+ pass
Modified: trunk/source/python/AvidaGui2/pyOrganismScopeCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOrganismScopeCtrl.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyOrganismScopeCtrl.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -30,9 +30,12 @@
self.setDebugOrganismFileSlot)
def setAvidaSlot(self, avida):
+ print "pyOrganismScopeCtrl.setAvidaSlot() ..."
old_avida = self.m_avida
self.m_avida = avida
- if(old_avida): del old_avida
+ if(old_avida):
+ print "pyOrganismScopeCtrl.setAvidaSlot() deleting old_avida ..."
+ del old_avida
def setDebugOrganismFileSlot(self, organism_filename):
print "pyOrganismScopeCtrl.setDebugOrganismFileSlot"
Modified: trunk/source/python/AvidaGui2/pyOrganismScopeView.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOrganismScopeView.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyOrganismScopeView.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
-from qt import PYSIGNAL, QFont, QFontMetrics, QScrollView, QWMatrix
-from qtcanvas import QCanvas, QCanvasView, QCanvasText
+from qt import PYSIGNAL, QBrush, QColor, QFont, QFontMetrics, QPointArray, QPoint, QScrollView, Qt, QWMatrix
+from qtcanvas import QCanvas, QCanvasSpline, QCanvasText, QCanvasView
import math
class pyOrganismScopeView(QCanvasView):
@@ -37,6 +37,7 @@
self.m_rhead_item = None
self.m_whead_item = None
self.m_fhead_item = None
+ self.m_rhead_move_items = None
self.m_task_names = None
self.m_inst_names = None
@@ -44,12 +45,14 @@
self.m_frames = None
self.m_max_genome_size = 0
self.m_current_frame_number = 0
+ self.m_current_radius = None
self.m_current_genome = None
self.m_current_tasks = None
self.m_current_ihead = None
self.m_current_rhead = None
self.m_current_whead = None
self.m_current_fhead = None
+ self.m_current_rhead_move = None
# Hmm; can't emit gestationTimeChangedSig(0) without causing absurd slider values. @kgn
self.emit(PYSIGNAL("gestationTimeChangedSig"),(1,))
@@ -70,6 +73,8 @@
if self.m_frames.m_genome_info is not None:
self.m_max_genome_size = max([len(genome) for genome in self.m_frames.m_genome_info])
self.m_instruction_items = [QCanvasText(self.m_canvas) for i in range(self.m_max_genome_size)]
+ if self.m_frames.m_ihead_moves is not None:
+ self.m_rhead_move_items = [QCanvasSpline(self.m_canvas) for i in range(len(self.m_frames.m_ihead_moves))]
self.emit(PYSIGNAL("gestationTimeChangedSig"),(self.m_frames.m_gestation_time,))
self.updateCircle()
self.showFrame(0)
@@ -98,6 +103,7 @@
for instruction_item in self.m_instruction_items:
instruction_item.setFont(font)
self.m_circles = []
+ self.m_circle_radii = []
for frame_no in range(self.m_frames.m_gestation_time):
organism_current_size = max(self.m_frames.m_last_copy_info[frame_no] + 1, self.m_frames.m_size)
circumference = text_height * organism_current_size
@@ -113,29 +119,37 @@
y = radius * s + self.m_circle_center_y
circle_pts.append((x,y))
self.m_circles.append(circle_pts)
+ self.m_circle_radii.append(radius)
def showFrame(self, frame_number = 0):
old_frame_number = self.m_current_frame_number
+ old_radius = self.m_current_radius
old_genome = self.m_current_genome
old_tasks = self.m_current_tasks
old_ihead = self.m_current_ihead
old_rhead = self.m_current_rhead
old_whead = self.m_current_whead
old_fhead = self.m_current_fhead
+ old_rhead_move = self.m_current_rhead_move
self.m_current_frame_number = 0
+ self.m_current_radius = None
self.m_current_genome = None
self.m_current_tasks = None
self.m_current_ihead = None
self.m_current_rhead = None
self.m_current_whead = None
self.m_current_fhead = None
+ self.m_current_rhead_move = None
+ circle_pts = None
+
if self.m_frames is not None and frame_number < self.m_frames.m_gestation_time:
self.m_current_frame_number = frame_number
+ self.m_current_radius = self.m_circle_radii[frame_number]
+ circle_pts = self.m_circles[frame_number]
if self.m_frames.m_genome_info is not None:
self.m_current_genome = self.m_frames.m_genome_info[frame_number]
- circle_pts = self.m_circles[self.m_current_frame_number]
if old_genome is None:
displayed_genome_size = max(self.m_frames.m_last_copy_info[self.m_current_frame_number], self.m_frames.m_size)
# Update all instruction_items.
@@ -151,27 +165,99 @@
new_length = max(self.m_frames.m_last_copy_info[self.m_current_frame_number] + 1, self.m_frames.m_size)
compare_max = min(old_length, new_length)
range_end = max(old_length, new_length)
+
+ if old_radius != self.m_current_radius:
+ for i in range(compare_max):
+ instruction_item = self.m_instruction_items[i]
+ instruction_item.setX(circle_pts[i][0])
+ instruction_item.setY(circle_pts[i][1])
+ if old_length < new_length:
+ for i in range(compare_max, range_end):
+ instruction_item = self.m_instruction_items[i]
+ instruction_item.setX(circle_pts[i][0])
+ instruction_item.setY(circle_pts[i][1])
+
for i in range(compare_max):
instruction_item = self.m_instruction_items[i]
- instruction_item.setX(circle_pts[i][0])
- instruction_item.setY(circle_pts[i][1])
if old_genome[i] == self.m_current_genome[i]:
pass
else:
- #self.m_instruction_items[i].setText(self.m_current_genome[i])
- instruction_item.setText(self.m_current_genome[i])
+ self.m_instruction_items[i].setText(self.m_current_genome[i])
if old_length < new_length:
for i in range(compare_max, range_end):
instruction_item = self.m_instruction_items[i]
- instruction_item.setX(circle_pts[i][0])
- instruction_item.setY(circle_pts[i][1])
instruction_item.setText(self.m_current_genome[i])
instruction_item.show()
else:
for i in range(compare_max, range_end):
self.m_instruction_items[i].hide()
+ if self.m_frames.m_ihead_moves_info is not None:
+ self.m_current_rhead_move = self.m_frames.m_ihead_moves_info[frame_number]
+ if old_rhead_move is None:
+ # Update all rhead_move_items.
+ for i in range(self.m_current_rhead_move):
+ rhead_move_item = self.m_rhead_move_items[self.m_current_rhead_move]
+ anchor_radius = float(m_current_radius - 10)
+ anchor_radii_ratio = anchor_radius / self.m_current_radius
+ control_radii_ratio = (0.5 + 0.4/math.ldexp(1, self.m_frames.m_ihead_moves[rhead_move_item][2])) * anchor_radii_ratio
+ point_array = QPointArray(4)
+ from_circle_pt = circle_pts[self.m_frames.m_ihead_moves[rhead_move_item][0]]
+ to_circle_pt = circle_pts[self.m_frames.m_ihead_moves[rhead_move_item][1]]
+ point_array[0] = QPoint(
+ self.m_circle_center_x + anchor_radii_ratio * (from_circle_pt[0] - self.m_circle_center_x),
+ self.m_circle_center_y + anchor_radii_ratio * (from_circle_pt[1] - self.m_circle_center_y)
+ )
+ point_array[1] = QPoint(
+ self.m_circle_center_x + control_radii_ratio * (from_circle_pt[0] - self.m_circle_center_x),
+ self.m_circle_center_y + control_radii_ratio * (from_circle_pt[1] - self.m_circle_center_y)
+ )
+ point_array[2] = QPoint(
+ self.m_circle_center_x + control_radii_ratio * (to_circle_pt[0] - self.m_circle_center_x),
+ self.m_circle_center_y + control_radii_ratio * (to_circle_pt[1] - self.m_circle_center_y)
+ )
+ point_array[3] = QPoint(
+ self.m_circle_center_x + anchor_radii_ratio * (to_circle_pt[0] - self.m_circle_center_x),
+ self.m_circle_center_y + anchor_radii_ratio * (to_circle_pt[1] - self.m_circle_center_y)
+ )
+ rhead_move_item.setControlPoints(point_array, False)
+ rhead_move_item.setBrush(QBrush(Qt.blue))
+ rhead_move_item.show()
+ else:
+ # Update changed rhead_move_items.
+ for i in range(self.m_current_rhead_move):
+ rhead_move_item = self.m_rhead_move_items[i]
+ anchor_radius = float(self.m_current_radius - 10)
+ anchor_radii_ratio = anchor_radius / self.m_current_radius
+ control_radii_ratio = (0.5 + 0.4/math.ldexp(1, self.m_frames.m_ihead_moves[i][2])) * anchor_radii_ratio
+ point_array = QPointArray(4)
+ from_circle_pt = circle_pts[self.m_frames.m_ihead_moves[i][0]]
+ to_circle_pt = circle_pts[self.m_frames.m_ihead_moves[i][1]]
+ point_array.setPoint(0, QPoint(
+ self.m_circle_center_x + anchor_radii_ratio * (from_circle_pt[0] - self.m_circle_center_x),
+ self.m_circle_center_y + anchor_radii_ratio * (from_circle_pt[1] - self.m_circle_center_y)
+ ) )
+ point_array.setPoint(1, QPoint(
+ self.m_circle_center_x + control_radii_ratio * (from_circle_pt[0] - self.m_circle_center_x),
+ self.m_circle_center_y + control_radii_ratio * (from_circle_pt[1] - self.m_circle_center_y)
+ ) )
+ point_array.setPoint(2, QPoint(
+ self.m_circle_center_x + control_radii_ratio * (to_circle_pt[0] - self.m_circle_center_x),
+ self.m_circle_center_y + control_radii_ratio * (to_circle_pt[1] - self.m_circle_center_y)
+ ) )
+ point_array.setPoint(3, QPoint(
+ self.m_circle_center_x + anchor_radii_ratio * (to_circle_pt[0] - self.m_circle_center_x),
+ self.m_circle_center_y + anchor_radii_ratio * (to_circle_pt[1] - self.m_circle_center_y)
+ ) )
+ rhead_move_item.setControlPoints(point_array, False)
+ rhead_move_item.setBrush(QBrush(Qt.blue))
+ rhead_move_item.show()
+ if self.m_current_rhead_move < old_rhead_move:
+ for i in range(self.m_current_rhead_move, old_rhead_move):
+ self.m_rhead_move_items[i].hide()
+ pass
+
if self.m_frames.m_tasks_info is not None:
self.m_current_tasks = self.m_frames.m_tasks_info[frame_number]
# Update tasks_item.
Modified: trunk/source/python/AvidaGui2/pyPetriConfigureCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyPetriConfigureCtrl.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyPetriConfigureCtrl.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -1,22 +1,36 @@
# -*- coding: utf-8 -*-
-from qt import *
-import os
-import math
+from pyAvida import pyAvida
+from pyFreezeDialogCtrl import pyFreezeDialogCtrl
from pyPetriConfigureView import pyPetriConfigureView
from pyWriteGenesis import pyWriteGenesis
-from pyFreezeDialogCtrl import pyFreezeDialogCtrl
from pyWriteToFreezer import pyWriteToFreezer
+from AvidaCore import cGenesis, cString
+from qt import *
+
+import os
+import math
+
class pyPetriConfigureCtrl(pyPetriConfigureView):
def __init__(self,parent = None,name = None,fl = 0):
pyPetriConfigureView.__init__(self,parent,name,fl)
+
+ def setAvidaSlot(self, avida):
+ old_avida = self.m_avida
+ self.m_avida = avida
+ if old_avida:
+ del old_avida
+ if self.m_avida:
+ pass
+
def construct(self, session_mdl):
self.m_session_mdl = session_mdl
self.m_session_petri_view = pyPetriConfigureView()
+ self.m_avida = None
self.full_petri_dict = {}
self.DishDisabled = False
self.connect(self.MutationSlider, SIGNAL("valueChanged(int)"),
@@ -45,6 +59,9 @@
self.DisablePetriConfigureSlot)
self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("doInitializeAvidaPhaseISig"),
self.CreateFilesFromPetriSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"), self.setAvidaSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("doInitializeAvidaPhaseIISig"),
+ self.doLoadPetriDishConfigFileSlot)
self.ChangeMutationTextSlot()
self.ChangeWorldSizeTextSlot()
self.populated = False
@@ -235,3 +252,26 @@
print "sending quit signal from pyPetriConfigureCtrl:FreezePetriSlot"
self.m_session_mdl.m_session_mdtr.emit(
PYSIGNAL("quitAvidaPhaseIISig"), ())
+
+ def doLoadPetriDishConfigFileSlot(self, genesisFileName = None):
+ genesis = cGenesis()
+ genesis.Open(cString(genesisFileName))
+ if 0 == genesis.IsOpen():
+ print "Warning: Unable to find file '", genesisFileName
+ return
+ avida = pyAvida()
+ avida.construct(genesis)
+ self.setAvidaSlot(avida)
+
+ # Stops self from hearing own setAvidaSig signal
+
+ 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)
+
Modified: trunk/source/python/AvidaGui2/pyPetriDishCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyPetriDishCtrl.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pyPetriDishCtrl.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -16,6 +16,11 @@
from pyPopulationCellItem import pyPopulationCellItem
#from pyPetriDishView import pyPetriDishView
+class pySquareVBoxLayout(QVBoxLayout):
+ def __init__(self, *args): apply(QVBoxLayout.__init__, (self,)+args)
+ def hasHeightForWidth(self): return True
+ def heightForWidth(self, w): return w
+
#class pyPetriDishCtrl(pyPetriDishView):
class pyPetriDishCtrl(QWidget):
def __init__(self,parent = None,name = None,fl = 0):
@@ -23,7 +28,7 @@
QWidget.__init__(self,parent,name,fl)
if not name: self.setName("pyPetriDishCtrl")
- self.resize(QSize(202,202).expandedTo(self.minimumSizeHint()))
+ #self.resize(QSize(202,202).expandedTo(self.minimumSizeHint()))
self.clearWState(Qt.WState_Polished)
def construct(self, session_mdl):
@@ -32,8 +37,10 @@
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_petri_dish_layout = QVBoxLayout(self,0,0,"m_petri_dish_layout")
+ self.m_petri_dish_layout = pySquareVBoxLayout(self,0,0,"m_petri_dish_layout")
+ print "pyPetriDishCtrl.construct() self.m_petri_dish_layout.heightForWidth(20) :", self.m_petri_dish_layout.heightForWidth(20)
+ #self.m_petri_dish_layout.setResizeMode(QLayout.Minimum)
self.m_canvas_view = pyPetriCanvasView(None, self,"m_canvas_view")
self.m_petri_dish_layout.addWidget(self.m_canvas_view)
self.m_changed_cell_items = []
@@ -64,9 +71,11 @@
self.m_canvas)
def setAvidaSlot(self, avida):
+ print "pyPetriDishCtrl.setAvidaSlot() ..."
old_avida = self.m_avida
self.m_avida = avida
if(old_avida):
+ print "pyPetriDishCtrl.setAvidaSlot() deleting old_avida ..."
del old_avida
if(self.m_avida):
pass
Modified: trunk/source/python/AvidaGui2/pySessionControllerFactory.py
===================================================================
--- trunk/source/python/AvidaGui2/pySessionControllerFactory.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pySessionControllerFactory.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -10,10 +10,9 @@
self.m_session_mdl = m_session_mdl
self.m_controller_creators_dict = {}
self.m_session_controllers_list = []
- self.m_session_mdl.m_session_mdtr.m_session_controller_factory_mdtr = pyMdtr()
- self.connect(self.m_session_mdl.m_session_mdtr.m_session_controller_factory_mdtr,
+ self.connect(self.m_session_mdl.m_session_mdtr,
qt.PYSIGNAL("newSessionControllerSig"), self.newSessionControllerSlot)
- self.connect(self.m_session_mdl.m_session_mdtr.m_session_controller_factory_mdtr,
+ self.connect(self.m_session_mdl.m_session_mdtr,
qt.PYSIGNAL("deleteControllerSig"), self.deleteControllerSlot)
return self
def addControllerCreator(self, creator_key, creator):
@@ -47,17 +46,12 @@
def test(self):
class pyMdl: pass
stub_mdl = pyMdl()
- stub_mdl.m_session_mdtr = pyMdtr()
session_controller_factory_factory = lambda : pySessionControllerFactory().construct(stub_mdl)
things_that_will_live_on = [
# I instantiated these above, and (on purpose) they won't be deleted.
'.m_session_mdl',
'.m_session_mdl.m_session_mdtr',
- # pySessionControllerFactory creates
- # m_session_controller_factory_mdtr, but by design doesn't
- # delete it.
- '.m_session_mdl.m_session_mdtr.m_session_controller_factory_mdtr',
]
endotests = recursiveDeleteChecks(session_controller_factory_factory, things_that_will_live_on)
Modified: trunk/source/python/AvidaGui2/pySessionCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pySessionCtrl.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pySessionCtrl.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -4,7 +4,6 @@
from pyMdtr import *
from pySessionControllerFactory import *
from pySessionDumbCtrl import *
-from pySessionWorkThreadHdlr import *
from AvidaCore import cString
@@ -59,14 +58,14 @@
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(
+ self.m_session_mdl.m_session_mdtr.emit(
qt.PYSIGNAL("newSessionControllerSig"), ("pyEduSessionMenuBarHdlr",))
## XXX Temporary. Cause instantiation of a dumb gui for testing. @kgn
- self.m_session_mdl.m_session_mdtr.m_session_controller_factory_mdtr.emit(
+ self.m_session_mdl.m_session_mdtr.emit(
qt.PYSIGNAL("newSessionControllerSig"), ("pySessionDumbCtrl",))
- self.m_session_mdl.m_session_mdtr.m_session_controller_factory_mdtr.emit(
+ self.m_session_mdl.m_session_mdtr.emit(
qt.PYSIGNAL("newSessionControllerSig"), ("pyEduWorkspaceCtrl",))
self.connect(self.m_session_mdl.m_session_mdtr, qt.PYSIGNAL("doOrphanSessionSig"), self.doOrphanSessionSlot)
@@ -107,7 +106,6 @@
self.adoptUnitTestSuite("pyMdtr")
self.adoptUnitTestSuite("pySessionControllerFactory")
self.adoptUnitTestSuite("pySessionDumbCtrl")
- self.adoptUnitTestSuite("pySessionWorkThreadHdlr")
class deleteChecks(pyTestCase):
def test(self):
Modified: trunk/source/python/AvidaGui2/pySessionDumbCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pySessionDumbCtrl.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pySessionDumbCtrl.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -14,13 +14,13 @@
def setAvidaSlot(self, avida):
old_avida = self.m_avida
self.m_avida = avida
- if(old_avida):
- print "pySessionDumbCtrl.setAvidaSlot(): disconnecting..."
+ if old_avida and hasattr(old_avida, "m_avida_thread_mdtr"):
+ print "pySessionDumbCtrl.setAvidaSlot(): disconnecting old_avida ..."
self.disconnect(
old_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
self.disconnect(
- self.m_session_mdl.m_session_mdtr, PYSIGNAL("doStartAvidaSig"),
+ self.m_session_mdl.m_session_mdtr, PYSIGNAL("doStartAvidaSig"),
old_avida.m_avida_thread_mdtr, PYSIGNAL("doStartAvidaSig"))
self.disconnect(
self.m_session_mdl.m_session_mdtr, PYSIGNAL("doPauseAvidaSig"),
@@ -32,9 +32,10 @@
self.m_session_mdl.m_session_mdtr,
PYSIGNAL("fromLiveCtrlUpdateAvidaSig"),
old_avida.m_avida_thread_mdtr, PYSIGNAL("doUpdateAvidaSig"))
+ print "pySessionDumbCtrl.setAvidaSlot(): deleting old_avida ..."
del old_avida
- if(self.m_avida):
- print "pySessionDumbCtrl.setAvidaSlot(): connecting..."
+ if self.m_avida and hasattr(self.m_avida, "m_avida_thread_mdtr"):
+ print "pySessionDumbCtrl.setAvidaSlot(): connecting self.m_avida ..."
self.connect(
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
@@ -62,35 +63,6 @@
self.connect(
self, PYSIGNAL("doDebugLoadOrganismSig"),
self.doDebugLoadOrganismSlot)
-
- def doLoadPetriDishConfigFileSlot(self, genesisFileName = None):
-# s = QFileDialog.getOpenFileName(
-# ".",
-# "(*.avida)",
-# None,
-# "open file dialog",
-# "Choose a file")
-# print "s:", s
- genesis = cGenesis()
- genesis.Open(cString(genesisFileName))
- if 0 == genesis.IsOpen():
- print "Warning: Unable to find file '", genesisFileName
- return
- avida = pyAvida()
- avida.construct(genesis)
- self.setAvidaSlot(avida)
-
- # Stops self from hearing own setAvidaSig signal
-
- 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 doDebugLoadOrganismSlot(self):
if self.m_avida:
@@ -122,20 +94,20 @@
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(
+ self.m_session_mdl.m_session_mdtr.emit(
PYSIGNAL("doSetupMainWindowMenuBarSig"),
(self,))
self.connect(
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
+ self.m_session_mdl.m_session_mdtr,
PYSIGNAL("doStartSig"),
self.doStart)
self.connect(
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
+ self.m_session_mdl.m_session_mdtr,
PYSIGNAL("doPauseSig"),
self.doPause)
self.connect(
- self.m_session_mdl.m_session_mdtr.m_edu_session_menu_bar_hdlr_mdtr,
+ self.m_session_mdl.m_session_mdtr,
PYSIGNAL("doNextUpdateSig"),
self.updatePBClickedSlot)
@@ -148,10 +120,6 @@
self.connect(
self.m_session_mdl.m_session_mdtr,
- PYSIGNAL("doInitializeAvidaPhaseIISig"),
- self.doLoadPetriDishConfigFileSlot)
- self.connect(
- self.m_session_mdl.m_session_mdtr,
PYSIGNAL("fromLiveCtrlPauseAvidaSig"),
self.doPause)
self.connect(
@@ -174,13 +142,16 @@
self.show()
def __del__(self):
- self.setAvidaSlot(None)
+ print "pySessionDumbCtrl.__del__() disconnecting ..."
self.disconnect(
self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
self.setAvidaSlot)
+ print "pySessionDumbCtrl.__del__() sending setAvidaSig(None) ..."
self.m_session_mdl.m_session_mdtr.emit(
PYSIGNAL("setAvidaSig"),
(None,))
+ #self.setAvidaSlot(None)
+ print "pySessionDumbCtrl.__del__() done ..."
def doStart(self):
if self.sessionInitialized == False:
Modified: trunk/source/python/AvidaGui2/pySessionWorkThreadHdlr.py
===================================================================
--- trunk/source/python/AvidaGui2/pySessionWorkThreadHdlr.py 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/AvidaGui2/pySessionWorkThreadHdlr.py 2005-05-13 21:09:17 UTC (rev 155)
@@ -31,21 +31,20 @@
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,
+ self.m_session_mdl.m_session_mdtr,
qt.PYSIGNAL("doPauseAvidaSig"),
self.doPauseAvidaSlot)
self.connect(
- self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+ self.m_session_mdl.m_session_mdtr,
qt.PYSIGNAL("doStartAvidaSig"),
self.doStartAvidaSlot)
self.connect(
- self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+ self.m_session_mdl.m_session_mdtr,
qt.PYSIGNAL("doUpdateAvidaSig"),
self.doUpdateAvidaSlot)
self.connect(
- self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+ self.m_session_mdl.m_session_mdtr,
qt.PYSIGNAL("doCloseAvidaSig"),
self.doCloseAvidaSlot)
@@ -59,7 +58,7 @@
def destruct(self):
print("pySessionWorkThreadHdlr.destruct()...")
- self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr.emit(
+ self.m_session_mdl.m_session_mdtr.emit(
qt.PYSIGNAL("doCloseAvidaSig"),())
if hasattr(self, "m_update_ck_timer"):
self.m_update_ck_timer.stop()
@@ -68,27 +67,22 @@
print("pySessionWorkThreadHdlr.destruct() self.m_update_ck_timer missing.")
self.disconnect(
- self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+ self.m_session_mdl.m_session_mdtr,
qt.PYSIGNAL("doPauseAvidaSig"),
self.doPauseAvidaSlot)
self.disconnect(
- self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+ self.m_session_mdl.m_session_mdtr,
qt.PYSIGNAL("doStartAvidaSig"),
self.doStartAvidaSlot)
self.disconnect(
- self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+ self.m_session_mdl.m_session_mdtr,
qt.PYSIGNAL("doUpdateAvidaSig"),
self.doUpdateAvidaSlot)
self.disconnect(
- self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr,
+ self.m_session_mdl.m_session_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
- else:
- print("pySessionWorkThreadHdlr.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:
@@ -105,11 +99,6 @@
#print("pySessionWorkThreadHdlr.destruct() self.m_session_mdl.m_avida_threaded_driver missing.")
print("pySessionWorkThreadHdlr.destruct() self.m_avida_threaded_driver missing.")
- if hasattr(self, "m_session_mdl"):
- del self.m_session_mdl
- else:
- print("pySessionWorkThreadHdlr.destruct() self.m_session_mdl missing.")
-
print("pySessionWorkThreadHdlr.destruct() done.")
def __del__(self):
@@ -119,7 +108,7 @@
def updateCheckSlot(self):
if self.m_updated_semaphore.acquire(False):
- self.m_session_mdl.m_session_mdtr.m_avida_threaded_driver_mdtr.emit(
+ self.m_session_mdl.m_session_mdtr.emit(
qt.PYSIGNAL("AvidaUpdatedSig"),())
if True == self.m_should_update:
self.doUpdateAvidaSlot()
Modified: trunk/source/python/setup_osx.py.in
===================================================================
--- trunk/source/python/setup_osx.py.in 2005-05-02 14:46:24 UTC (rev 154)
+++ trunk/source/python/setup_osx.py.in 2005-05-13 21:09:17 UTC (rev 155)
@@ -52,9 +52,7 @@
),
data_files=[
('../Resources',
- # script to launch AvidaEd from command-line, then drop into
- # python shell (for convenience of developers)
- [ '${CMAKE_CURRENT_SOURCE_DIR}/AvidaEd-interactive.py' ]
+ [ '${CMAKE_CURRENT_SOURCE_DIR}/AvidaGui2/avidalogo.png' ]
#+
## Avida configuration files
## FIXME # these only temporarily live in Resources, until we make
More information about the Avida-cvs
mailing list