[Avida-cvs] [Avida2-svn] r349 - trunk/source/python/AvidaGui2
kaben@myxo.css.msu.edu
kaben at myxo.css.msu.edu
Tue Oct 18 12:34:41 PDT 2005
Author: kaben
Date: 2005-10-18 15:11:59 -0400 (Tue, 18 Oct 2005)
New Revision: 349
Modified:
trunk/source/python/AvidaGui2/_Custom_Widgets.cw
trunk/source/python/AvidaGui2/pyEduWorkspaceCtrl.py
trunk/source/python/AvidaGui2/pyFreezerCtrl.py
trunk/source/python/AvidaGui2/pyFreezerView.ui
trunk/source/python/AvidaGui2/pyHardwareCPUTrace.py
trunk/source/python/AvidaGui2/pyHardwareTracer.py
trunk/source/python/AvidaGui2/pyMapProfile.py
trunk/source/python/AvidaGui2/pyOneOrg_ScopeCtrl.py
trunk/source/python/AvidaGui2/pyOneOrganismCtrl.py
trunk/source/python/AvidaGui2/pyOneOrganismView.ui
trunk/source/python/AvidaGui2/pyOnePop_PetriDishCtrl.py
trunk/source/python/AvidaGui2/pyOnePopulationCtrl.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/pySessionCtrl.py
trunk/source/python/AvidaGui2/pyTemporaryReloads.py
Log:
Repairs restoring lost Avida-ED functionality.
Modified: trunk/source/python/AvidaGui2/_Custom_Widgets.cw
===================================================================
--- trunk/source/python/AvidaGui2/_Custom_Widgets.cw 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/_Custom_Widgets.cw 2005-10-18 19:11:59 UTC (rev 349)
@@ -1,7 +1,7 @@
<!DOCTYPE CW><CW>
<customwidgets>
<customwidget>
- <class>pyFreezerCtrl</class>
+ <class>pyPetriDishCtrl</class>
<header location="global">1</header>
<sizehint>
<width>-1</width>
@@ -9,22 +9,54 @@
</sizehint>
<container>0</container>
<sizepolicy>
- <hordata>3</hordata>
- <verdata>3</verdata>
+ <hordata>0</hordata>
+ <verdata>0</verdata>
</sizepolicy>
<pixmap>
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
</pixmap>
<property type="0">3</property>
- <property type="1">pyFreezerView</property>
+ <property type="1">pyPetriDishCtrl</property>
<property type="3">-1</property>
- <property type="1">pyFreezerView</property>
+ <property type="1">pyPetriDishCtrl</property>
<property type="3">-1</property>
- <property type="pyFreezerView"></property>
+ <property type="1">pyPetriDishCtrl</property>
+ <property type="4">-1</property>
+ <property type="1">pyPetriDishCtrl</property>
+ <property type="4">-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="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="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="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>
<customwidget>
- <class>pyNavBarCtrl</class>
+ <class>pyGradientScaleCtrl</class>
<header location="global">1</header>
<sizehint>
<width>-1</width>
@@ -32,22 +64,54 @@
</sizehint>
<container>0</container>
<sizepolicy>
- <hordata>3</hordata>
- <verdata>3</verdata>
+ <hordata>0</hordata>
+ <verdata>0</verdata>
</sizepolicy>
<pixmap>
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
</pixmap>
<property type="0">3</property>
- <property type="1">pyNavBarView</property>
+ <property type="1">pyGradientScaleCtrl</property>
<property type="3">-1</property>
- <property type="1">pyNavBarView</property>
+ <property type="1">pyGradientScaleCtrl</property>
<property type="3">-1</property>
- <property type="pyNavBarView"></property>
+ <property type="1">pyGradientScaleCtrl</property>
+ <property type="4">-1</property>
+ <property type="1">pyGradientScaleCtrl</property>
+ <property type="4">-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="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="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="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>
<customwidget>
- <class>pyOneAnalyzeCtrl</class>
+ <class>pyLiveControlsCtrl</class>
<header location="global">1</header>
<sizehint>
<width>-1</width>
@@ -55,18 +119,70 @@
</sizehint>
<container>0</container>
<sizepolicy>
- <hordata>3</hordata>
- <verdata>3</verdata>
+ <hordata>0</hordata>
+ <verdata>0</verdata>
</sizepolicy>
<pixmap>
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
</pixmap>
<property type="0">3</property>
- <property type="1">pyOneAnalyzeCtrl</property>
+ <property type="1">pyLiveControlsCtrl</property>
<property type="3">-1</property>
+ <property type="1">pyLiveControlsCtrl</property>
+ <property type="3">-1</property>
+ <property type="1">pyLiveControlsCtrl</property>
+ <property type="4">-1</property>
+ <property type="1">pyLiveControlsCtrl</property>
+ <property type="4">-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="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="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="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>
<customwidget>
- <class>pyTwoAnalyzeCtrl</class>
+ <class>pyPetriConfigureCtrl</class>
+ <header location="local">mywidget.h</header>
+ <sizehint>
+ <width>202</width>
+ <height>202</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ </sizepolicy>
+ <pixmap>
+ <data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
+ </pixmap>
+ </customwidget>
+ <customwidget>
+ <class>pyAnalyzeControlsCtrl</class>
<header location="global">1</header>
<sizehint>
<width>-1</width>
@@ -74,6 +190,63 @@
</sizehint>
<container>0</container>
<sizepolicy>
+ <hordata>0</hordata>
+ <verdata>0</verdata>
+ </sizepolicy>
+ <pixmap>
+ <data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
+ </pixmap>
+ <property type="0">3</property>
+ <property type="1">pyAnalyzeControlsCtrl</property>
+ <property type="3">-1</property>
+ <property type="1">pyAnalyzeControlsCtrl</property>
+ <property type="3">-1</property>
+ <property type="1">pyAnalyzeControlsCtrl</property>
+ <property type="0">-1</property>
+ <property type="pyAnalyzeControlsCtrl"></property>
+ <property type="-1">1</property>
+ </customwidget>
+ <customwidget>
+ <class>pyOrganismScopeCtrl</class>
+ <header location="local">1</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ </sizepolicy>
+ <pixmap>
+ <data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
+ </pixmap>
+ </customwidget>
+ <customwidget>
+ <class>pyOneOrg_ScopeCtrl</class>
+ <header location="local">1</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ </sizepolicy>
+ <pixmap>
+ <data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
+ </pixmap>
+ </customwidget>
+ <customwidget>
+ <class>pyFreezerCtrl</class>
+ <header location="global">1</header>
+ <sizehint>
+ <width>-1</width>
+ <height>0</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
<hordata>3</hordata>
<verdata>3</verdata>
</sizepolicy>
@@ -81,11 +254,15 @@
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
</pixmap>
<property type="0">3</property>
- <property type="1">pyTwoAnalyzeCtrl</property>
+ <property type="1">pyFreezerView</property>
<property type="3">-1</property>
+ <property type="1">pyFreezerView</property>
+ <property type="3">-1</property>
+ <property type="pyFreezerView"></property>
+ <property type="-1">1</property>
</customwidget>
<customwidget>
- <class>pyOneOrganismCtrl</class>
+ <class>pyNavBarCtrl</class>
<header location="global">1</header>
<sizehint>
<width>-1</width>
@@ -100,11 +277,15 @@
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
</pixmap>
<property type="0">3</property>
- <property type="1">pyOneOrganismCtrl</property>
+ <property type="1">pyNavBarView</property>
<property type="3">-1</property>
+ <property type="1">pyNavBarView</property>
+ <property type="3">-1</property>
+ <property type="pyNavBarView"></property>
+ <property type="-1">1</property>
</customwidget>
<customwidget>
- <class>pyTwoOrganismCtrl</class>
+ <class>pyOneAnalyzeCtrl</class>
<header location="global">1</header>
<sizehint>
<width>-1</width>
@@ -119,11 +300,11 @@
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
</pixmap>
<property type="0">3</property>
- <property type="1">pyTwoOrganismCtrl</property>
+ <property type="1">pyOneAnalyzeCtrl</property>
<property type="3">-1</property>
</customwidget>
<customwidget>
- <class>pyOnePopulationCtrl</class>
+ <class>pyTwoAnalyzeCtrl</class>
<header location="global">1</header>
<sizehint>
<width>-1</width>
@@ -138,11 +319,11 @@
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
</pixmap>
<property type="0">3</property>
- <property type="1">pyOnePopulationCtrl</property>
+ <property type="1">pyTwoAnalyzeCtrl</property>
<property type="3">-1</property>
</customwidget>
<customwidget>
- <class>pyTwoPopulationCtrl</class>
+ <class>pyOneOrganismCtrl</class>
<header location="global">1</header>
<sizehint>
<width>-1</width>
@@ -157,11 +338,11 @@
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
</pixmap>
<property type="0">3</property>
- <property type="1">pyTwoPopulationCtrl</property>
+ <property type="1">pyOneOrganismCtrl</property>
<property type="3">-1</property>
</customwidget>
<customwidget>
- <class>pyPetriDishCtrl</class>
+ <class>pyTwoOrganismCtrl</class>
<header location="global">1</header>
<sizehint>
<width>-1</width>
@@ -176,15 +357,11 @@
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
</pixmap>
<property type="0">3</property>
- <property type="1">pyPetriDishCtrl</property>
+ <property type="1">pyTwoOrganismCtrl</property>
<property type="3">-1</property>
- <property type="1">pyPetriDishCtrl</property>
- <property type="3">-1</property>
- <property type="pyPetriDishCtrl"></property>
- <property type="-1">1</property>
</customwidget>
<customwidget>
- <class>pyOrgSquareCtrl</class>
+ <class>pyOnePopulationCtrl</class>
<header location="global">1</header>
<sizehint>
<width>-1</width>
@@ -199,15 +376,11 @@
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
</pixmap>
<property type="0">3</property>
- <property type="1">pyOrgSquareCtrl</property>
+ <property type="1">pyOnePopulationCtrl</property>
<property type="3">-1</property>
- <property type="1">pyOrgSquareCtrl</property>
- <property type="3">-1</property>
- <property type="pyOrgSquareCtrl"></property>
- <property type="-1">1</property>
</customwidget>
<customwidget>
- <class>pyTimelineCtrl</class>
+ <class>pyTwoPopulationCtrl</class>
<header location="global">1</header>
<sizehint>
<width>-1</width>
@@ -222,15 +395,11 @@
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
</pixmap>
<property type="0">3</property>
- <property type="1">pyTimelineCtrl</property>
+ <property type="1">pyTwoPopulationCtrl</property>
<property type="3">-1</property>
- <property type="1">pyTimelineCtrl</property>
- <property type="3">-1</property>
- <property type="pyTimelineCtrl"></property>
- <property type="-1">1</property>
</customwidget>
<customwidget>
- <class>pyGradientScaleCtrl</class>
+ <class>pyOrgSquareCtrl</class>
<header location="global">1</header>
<sizehint>
<width>-1</width>
@@ -245,15 +414,15 @@
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
</pixmap>
<property type="0">3</property>
- <property type="1">pyGradientScaleCtrl</property>
+ <property type="1">pyOrgSquareCtrl</property>
<property type="3">-1</property>
- <property type="1">pyGradientScaleCtrl</property>
+ <property type="1">pyOrgSquareCtrl</property>
<property type="3">-1</property>
- <property type="pyGradientScaleCtrl"></property>
+ <property type="pyOrgSquareCtrl"></property>
<property type="-1">1</property>
</customwidget>
<customwidget>
- <class>pyLiveControlsCtrl</class>
+ <class>pyTimelineCtrl</class>
<header location="global">1</header>
<sizehint>
<width>-1</width>
@@ -268,11 +437,11 @@
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d032!
6df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df21!
8e0582c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454!
e44ae426
082</data>
</pixmap>
<property type="0">3</property>
- <property type="1">pyLiveControlsCtrl</property>
+ <property type="1">pyTimelineCtrl</property>
<property type="3">-1</property>
- <property type="1">pyLiveControlsCtrl</property>
+ <property type="1">pyTimelineCtrl</property>
<property type="3">-1</property>
- <property type="pyLiveControlsCtrl"></property>
+ <property type="pyTimelineCtrl"></property>
<property type="-1">1</property>
</customwidget>
<customwidget>
@@ -471,7 +640,7 @@
</pixmap>
</customwidget>
<customwidget>
- <class>pyAnalyzeControlsCtrl</class>
+ <class>pyTwoOrg_VivisectionCtrl</class>
<header location="local"></header>
<sizehint>
<width>-1</width>
@@ -487,7 +656,7 @@
</pixmap>
</customwidget>
<customwidget>
- <class>pyTwoOrg_VivisectionCtrl</class>
+ <class>pyOneAna_GraphCtrl</class>
<header location="local"></header>
<sizehint>
<width>-1</width>
@@ -503,7 +672,7 @@
</pixmap>
</customwidget>
<customwidget>
- <class>pyOneAna_GraphCtrl</class>
+ <class>pyOneAna_PetriDishCtrl</class>
<header location="local"></header>
<sizehint>
<width>-1</width>
@@ -519,7 +688,7 @@
</pixmap>
</customwidget>
<customwidget>
- <class>pyOneAna_PetriDishCtrl</class>
+ <class>pyOneAna_StatsCtrl</class>
<header location="local"></header>
<sizehint>
<width>-1</width>
@@ -535,7 +704,7 @@
</pixmap>
</customwidget>
<customwidget>
- <class>pyOneAna_StatsCtrl</class>
+ <class>pyOneAna_TimelineCtrl</class>
<header location="local"></header>
<sizehint>
<width>-1</width>
@@ -551,7 +720,7 @@
</pixmap>
</customwidget>
<customwidget>
- <class>pyOneAna_TimelineCtrl</class>
+ <class>pyOrganismConfigureCtrl</class>
<header location="local"></header>
<sizehint>
<width>-1</width>
Modified: trunk/source/python/AvidaGui2/pyEduWorkspaceCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyEduWorkspaceCtrl.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyEduWorkspaceCtrl.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -98,6 +98,11 @@
self.connect(self.controlRepopulateAction,SIGNAL("activated()"),
self.RepopulateActionSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("addStatusBarWidgetSig"), self.addStatusBarWidgetSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("removeStatusBarWidgetSig"), self.removeStatusBarWidgetSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("statusBarMessageSig"), self.statusBarMessageSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("statusBarClearSig"), self.statusBarClearSlot)
+
self.m_nav_bar_ctrl.m_one_population_cli.setState(QCheckListItem.On)
self.m_widget_stack.raiseWidget(self.m_one_population_ctrl)
self.splitter1.setSizes([100])
@@ -130,7 +135,6 @@
self.emit(PYSIGNAL("quitAvidaPhaseISig"), ())
return False
-######### pyuic-one-time-generated-code lives below this line.
def __del__(self):
print "pyEduWorkspaceCtrl.__del__(): Not implemented yet"
@@ -317,3 +321,14 @@
PYSIGNAL("freezerItemDoubleClicked"), (file_name, ))
+ def addStatusBarWidgetSlot(self, *args):
+ widget = args[0]
+ pt = QPoint()
+ widget.reparent(self, pt)
+ apply(QStatusBar.addWidget,(self.statusBar(),) + args)
+ def removeStatusBarWidgetSlot(self, *args):
+ apply(QStatusBar.removeWidget,(self.statusBar(),) + args)
+ def statusBarMessageSlot(self, *args):
+ apply(QStatusBar.message,(self.statusBar(),) + args)
+ def statusBarClearSlot(self):
+ self.statusBar().clear()
Modified: trunk/source/python/AvidaGui2/pyFreezerCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyFreezerCtrl.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyFreezerCtrl.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -1,17 +1,125 @@
# -*- coding: utf-8 -*-
+from descr import *
+
import os
from qt import *
-from pyFreezerView import pyFreezerView
+from pyFreezerView import *
from pyReadFreezer import pyReadFreezer
from pyWriteToFreezer import pyWriteToFreezer
from pyFreezeOrganismCtrl import pyFreezeOrganismCtrl
import os.path
-class pyFreezerCtrl(pyFreezerView):
+class pyFreezerListView(QListView):
+ def __init__(self, *args):
+ descr()
+ apply(QListView.__init__,(self,) + args)
+ self.setAcceptDrops( True )
+ self.viewport().setAcceptDrops( True )
+ def construct(self, session_mdl):
+ descr()
+ self.m_session_mdl = session_mdl
+ def contentsDropEvent(self, e):
+ descr(e)
+ freezer_item_name = QString()
+ if e.source() is self:
+ return
+ if ( QTextDrag.decode( e, freezer_item_name ) ) : #freezer_item_name is a string...the file name
+ if freezer_item_name[:9] == 'organism.':
+ freezer_item_name = freezer_item_name[9:]
+ self.FreezeOrganismSlot(freezer_item_name)
+ else:
+ print "that was not an organism"
+
+ def FreezeOrganismSlot(self, freezer_item_name, send_reset_signal = False, send_quit_signal = False):
+ tmp_dict = {1:freezer_item_name}
+ pop_up_organism_file_name = pyFreezeOrganismCtrl()
+ file_name = pop_up_organism_file_name.showDialog(self.m_session_mdl.m_current_freezer)
+
+ file_name_len = len(file_name.rstrip())
+ if (file_name_len > 0):
+ freezer_file = pyWriteToFreezer(tmp_dict, file_name)
+
+ self.m_session_mdl.m_session_mdtr.emit(
+ PYSIGNAL("doRefreshFreezerInventorySig"), ())
+
+class pyEmptyDishListViewItem(QListViewItem):
+ def __init__(self, *args):
+ apply(QListViewItem.__init__,(self,) + args)
+ descr()
+ def dragEntered(self):
+ descr()
+ def dragLeft(self):
+ descr()
+ def dropped(self, e):
+ descr(e)
+
+class pyFullDishListViewItem(QListViewItem):
+ def __init__(self, *args):
+ apply(QListViewItem.__init__,(self,) + args)
+ descr()
+ def dragEntered(self):
+ descr()
+ def dragLeft(self):
+ descr()
+ def dropped(self, e):
+ descr(e)
+
+class pyOrganismListViewItem(QListViewItem):
+ def __init__(self, *args):
+ apply(QListViewItem.__init__,(self,) + args)
+ descr()
+ def dragEntered(self):
+ self.setDropEnabled(True)
+ descr()
+ def dragLeft(self):
+ descr()
+ def dropped(self, e):
+ descr(e)
+
+#class pyFreezerCtrl(pyFreezerView):
+class pyFreezerCtrl(QWidget):
+
def __init__(self,parent = None,name = None,fl = 0):
- pyFreezerView.__init__(self,parent,name,fl)
+ QWidget.__init__(self,parent,name,fl)
+
+ self.image0 = QPixmap()
+ self.image0.loadFromData(image0_data,"PNG")
+ self.image1 = QPixmap()
+ self.image1.loadFromData(image1_data,"PNG")
+ self.image2 = QPixmap()
+ self.image2.loadFromData(image2_data,"PNG")
+ if not name:
+ self.setName("pyFreezerView")
+
+ self.setSizePolicy(QSizePolicy(QSizePolicy.Preferred,QSizePolicy.Preferred,0,0,self.sizePolicy().hasHeightForWidth()))
+
+ pyFreezerViewLayout = QVBoxLayout(self,0,6,"pyFreezerViewLayout")
+
+ self.m_list_view = pyFreezerListView(self,"m_list_view")
+ self.m_list_view.addColumn("Freezer")
+ self.m_list_view.header().setClickEnabled(0,self.m_list_view.header().count() - 1)
+ self.m_list_view.header().setResizeEnabled(0,self.m_list_view.header().count() - 1)
+ self.m_list_view.setSizePolicy(QSizePolicy(QSizePolicy.Preferred,QSizePolicy.Preferred,0,0,self.m_list_view.sizePolicy().hasHeightForWidth()))
+ m_list_view_font = QFont(self.m_list_view.font())
+ m_list_view_font.setPointSize(9)
+ self.m_list_view.setFont(m_list_view_font)
+ self.m_list_view.setAcceptDrops(1)
+ self.m_list_view.setFrameShape(QListView.StyledPanel)
+ self.m_list_view.setFrameShadow(QListView.Sunken)
+ self.m_list_view.setHScrollBarMode(QListView.AlwaysOff)
+ self.m_list_view.setAllColumnsShowFocus(1)
+ self.m_list_view.setRootIsDecorated(1)
+ self.m_list_view.setResizeMode(QListView.AllColumns)
+ pyFreezerViewLayout.addWidget(self.m_list_view)
+
+ self.languageChange()
+
+ self.resize(QSize(232,383).expandedTo(self.minimumSizeHint()))
+ self.clearWState(Qt.WState_Polished)
+
+ #pyFreezerView.__init__(self,parent,name,fl)
self.m_list_view.setSelectionMode(QListView.Extended)
self.connect(self.m_list_view,
SIGNAL("doubleClicked(QListViewItem*, const QPoint &, int)"),
@@ -19,30 +127,57 @@
self.connect(self.m_list_view,
SIGNAL("pressed(QListViewItem*, const QPoint &, int )"),
self.pressed_itemSlot)
+ self.setAcceptDrops(1)
+ descr()
+ # This shadows pyFreezerView.languageChange, which was generated by
+ # pyuic from pyFreezerView.ui. @kgn
+ def languageChange(self):
+ self.setCaption("pyFreezerView")
+ self.m_list_view.header().setLabel(0,"Freezer")
+ self.m_list_view.clear()
+ item = pyEmptyDishListViewItem(self.m_list_view,None)
+ item.setText(0," Empty Petri Dishes")
+ item.setPixmap(0,self.image0)
+
+ item = pyFullDishListViewItem(self.m_list_view,item)
+ item.setText(0," Full Petri Dishes")
+ item.setPixmap(0,self.image1)
+
+ item = pyOrganismListViewItem(self.m_list_view,item)
+ item.setText(0," Organisms")
+ item.setPixmap(0,self.image2)
+
def construct(self, session_mdl):
+ descr()
self.m_session_mdl = session_mdl
+ self.m_list_view.construct(session_mdl)
self.connect(self.m_session_mdl.m_session_mdtr,
PYSIGNAL("doRefreshFreezerInventorySig"),
self.createFreezerIndexSlot)
self.createFreezerIndexSlot()
+ self.m_list_view.setAcceptDrops(True)
+ self.m_empty_item.setDropEnabled(True)
+ self.m_full_item.setDropEnabled(True)
+ self.m_organism_item.setDropEnabled(True)
def createFreezerIndexSlot(self):
- empty_item = self.m_list_view.firstChild()
- while empty_item.firstChild():
- tmp_child = empty_item.firstChild()
- empty_item.takeItem(tmp_child)
+ descr()
+ self.m_empty_item = self.m_list_view.firstChild()
+ while self.m_empty_item.firstChild():
+ tmp_child = self.m_empty_item.firstChild()
+ self.m_empty_item.takeItem(tmp_child)
del (tmp_child)
- full_item = empty_item.nextSibling()
- while full_item.firstChild():
- tmp_child = full_item.firstChild()
- full_item.takeItem(tmp_child)
+ self.m_full_item = self.m_empty_item.nextSibling()
+ while self.m_full_item.firstChild():
+ tmp_child = self.m_full_item.firstChild()
+ self.m_full_item.takeItem(tmp_child)
del (tmp_child)
- organism_item = full_item.nextSibling()
- while organism_item.firstChild():
- tmp_child = organism_item.firstChild()
- organism_item.takeItem(tmp_child)
+ self.m_organism_item = self.m_full_item.nextSibling()
+ while self.m_organism_item.firstChild():
+ tmp_child = self.m_organism_item.firstChild()
+ self.m_organism_item.takeItem(tmp_child)
del (tmp_child)
if os.path.exists(self.m_session_mdl.m_current_freezer) == False:
os.mkdir(self.m_session_mdl.m_current_freezer)
@@ -50,15 +185,15 @@
for file in freezer_dir:
if file.endswith(".empty"):
dish_name = file[:-6]
- tmp_item = QListViewItem(empty_item)
+ tmp_item = QListViewItem(self.m_empty_item)
tmp_item.setText(0,dish_name)
if file.endswith(".full"):
dish_name = file[:-5]
- tmp_item = QListViewItem(full_item)
+ tmp_item = QListViewItem(self.m_full_item)
tmp_item.setText(0,dish_name)
if file.endswith(".organism"):
organism_name = file[:-9]
- tmp_item = QListViewItem(organism_item)
+ tmp_item = QListViewItem(self.m_organism_item)
tmp_item.setText(0,organism_name)
# if mouse is pressed on list item prepare its info to be dragged
@@ -117,10 +252,26 @@
class itemDrag(QTextDrag):
def __init__(self, item_name, parent=None, name=None):
- QStoredDrag.__init__(self, 'item name (QString)', parent, name)
- self.setText(item_name)
+ QStoredDrag.__init__(self, 'item name (QString)', parent, name)
+ self.setText(item_name)
+ descr(item_name)
+ def dragMoveEvent( self, e ):
+ descr(e)
+
+ def dragEnterEvent( self, e ):
+ descr(e)
+ e.acceptAction(True)
+ if e.isAccepted():
+ descr("isAccepted.")
+ else:
+ descr("not isAccepted.")
+
+ def dragLeaveEvent( self, e ):
+ descr(e)
+
def dropEvent( self, e):
+ descr(e)
freezer_item_name = QString()
if e.source() is self:
return
@@ -131,11 +282,10 @@
else:
print "that was not an organism"
- def FreezeOrganismSlot(self, freezer_item_name,
- send_reset_signal = False, send_quit_signal = False):
+ def FreezeOrganismSlot(self, freezer_item_name, send_reset_signal = False, send_quit_signal = False):
tmp_dict = {1:freezer_item_name}
- m_pop_up_organism_file_name = pyFreezeOrganismCtrl()
- file_name = m_pop_up_organism_file_name.showDialog(self.m_session_mdl.m_current_freezer)
+ pop_up_organism_file_name = pyFreezeOrganismCtrl()
+ file_name = pop_up_organism_file_name.showDialog(self.m_session_mdl.m_current_freezer)
file_name_len = len(file_name.rstrip())
if (file_name_len > 0):
Modified: trunk/source/python/AvidaGui2/pyFreezerView.ui
===================================================================
--- trunk/source/python/AvidaGui2/pyFreezerView.ui 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyFreezerView.ui 2005-10-18 19:11:59 UTC (rev 349)
@@ -83,7 +83,7 @@
</font>
</property>
<property name="acceptDrops">
- <bool>false</bool>
+ <bool>true</bool>
</property>
<property name="frameShape">
<enum>StyledPanel</enum>
Modified: trunk/source/python/AvidaGui2/pyHardwareCPUTrace.py
===================================================================
--- trunk/source/python/AvidaGui2/pyHardwareCPUTrace.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyHardwareCPUTrace.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -1,11 +1,25 @@
from AvidaCore import cHardwareDefs
from AvidaCore import cHardwareCPUDefs
+from AvidaCore import cHardwareCPU
+#class pyHardwareCPUFrame:
+# def __init__(self):
+# pass
+# # cCPUMemory memory : cCPUMemory & GetMemory()
+# # cCPUStack global_stack : cCPUStack pyGetGlobalStack()
+# # int thread_time_used : int pyGetThreadTimeUsed()
+# ### assume a single thread
+# # cHardwareCPU_Thread thread : tArray<cHardwareCPU_Thread> pyGetThreads()
+# # bool mal_active : bool GetMalActive()
+# # bool advance_ip : bool pyGetAdvanceIP()
+
class pyHardwareCPUTrace:
def __init__(self):
self.clearFrames()
def clearFrames(self):
+ self.m_hardware_snapshots = []
+
self.m_genome_info = []
self.m_ihead_info = []
self.m_rhead_info = []
@@ -28,7 +42,18 @@
self.m_fitness = None
self.m_size = None
+ def getSnapshotCount(self):
+ return len(self.m_hardware_snapshots)
+ def getHardwareSnapshotAt(self, frame_number):
+ return self.m_hardware_snapshots[frame_number]
+ def getMemorySnapshotAt(self, frame_number):
+ return self.getHardwareSnapshotAt(frame_number).GetMemory()
+ def getThreadsSnapshotAt(self, frame_number):
+ return self.getHardwareSnapshotAt(frame_number).pyGetThreads()
+
def recordFrame(self, hardware):
+ self.m_hardware_snapshots.append(cHardwareCPU(hardware))
+
self.m_genome_info.append(hardware.GetMemory().AsString().GetData())
self.m_ihead_info.append(hardware.GetHead(cHardwareDefs.s_HEAD_IP).GetPosition())
self.m_rhead_info.append(hardware.GetHead(cHardwareDefs.s_HEAD_READ).GetPosition())
Modified: trunk/source/python/AvidaGui2/pyHardwareTracer.py
===================================================================
--- trunk/source/python/AvidaGui2/pyHardwareTracer.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyHardwareTracer.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -5,35 +5,55 @@
class pyHardwareTracer(pyHardwareTracerBase):
+ def __init__(self, progress_callback = None):
+ pyHardwareTracerBase.__init__(self)
+ self.m_progress_callback = progress_callback
+
def TraceHardware_CPU(self, hardware):
self.m_hardware_trace.recordFrame(hardware)
+ if self.m_progress_callback is not None:
+ self.m_trace_progress = self.m_trace_progress + 1
+ self.m_progress_callback(self.m_trace_progress)
def TraceHardware_CPUBonus(self, hardware):
self.m_hardware_trace.recordFrame(hardware)
+ if self.m_progress_callback is not None:
+ self.m_trace_progress = self.m_trace_progress + 1
+ self.m_progress_callback(self.m_trace_progress)
- def backupTestCPU(self, environment):
- backup_environment = cTestCPU.GetEnvironment()
- original_resource_count = cTestCPU.GetResourceCount()
- backup_usage = cTestCPU.GetUseResources()
+ # XXX Changes to Avida core have broken the next two functions, and
+ # now isn't a good time to fix them. @kgn
+ #
+ #def backupTestCPU(self, environment):
+ # print "pyHardwareTracer.backupTestCPU()..."
+ # backup_environment = cTestCPU.GetEnvironment()
+ # original_resource_count = cTestCPU.GetResourceCount()
+ # backup_usage = cTestCPU.GetUseResources()
- cTestCPU.SetEnvironment(environment)
- cTestCPU.SetupResources()
- cTestCPU.SetUseResources(True)
+ # cTestCPU.SetEnvironment(environment)
+ # cTestCPU.SetupResources()
+ # cTestCPU.SetUseResources(True)
- return backup_environment, original_resource_count, backup_usage
+ # return backup_environment, original_resource_count, backup_usage
- def restoreTestCPU(self, backup_environment, original_resource_count, backup_usage):
- cTestCPU.SetEnvironment(backup_environment)
- cTestCPU.GetResourceCount().SetTo(original_resource_count)
- cTestCPU.SetUseResources(True)
+ #def restoreTestCPU(self, backup_environment, original_resource_count, backup_usage):
+ # cTestCPU.SetEnvironment(backup_environment)
+ # cTestCPU.GetResourceCount().SetTo(original_resource_count)
+ # cTestCPU.SetUseResources(True)
def traceAnalyzeGenotype(self, analyze_genotype, environment, should_use_resources):
+ print "pyHardwareTracer.traceAnalyzeGenotype()..."
backup_environment = None
original_resource_count = None
backup_usage = None
+
# Backup test cpu if we need to use resources.
+ #if should_use_resources:
+ # backup_environment, original_resource_count, backup_usage = self.backupTestCPU(environment)
if should_use_resources:
- backup_environment, original_resource_count, backup_usage = self.backupTestCPU(environment)
+ print " *** Warning in pyHardwareTracer.traceAnalyzeGenotype():"
+ print " *** traceAnalyzeGenotype called with should_use_resources = True,"
+ print " *** but resources in the python test-cpu are disabled for now."
# Build the test info for tracing hardware.
test_info = cCPUTestInfo()
@@ -42,10 +62,11 @@
self.m_hardware_trace = pyHardwareCPUTrace()
test_info.SetTraceExecution(self)
# Trace the genotype's execution.
+ self.m_trace_progress = 0
cTestCPU.TestGenome(test_info, analyze_genotype.GetGenome())
# Record some of the genotype's statistics.
analyze_genotype.Recalculate()
self.m_hardware_trace.recordGenotypeSummary(analyze_genotype)
# Restore test cpu if we need to use resources.
- if should_use_resources: self.restoreTestCPU(backup_environment, original_resource_count, backup_usage)
+ #if should_use_resources: self.restoreTestCPU(backup_environment, original_resource_count, backup_usage)
Modified: trunk/source/python/AvidaGui2/pyMapProfile.py
===================================================================
--- trunk/source/python/AvidaGui2/pyMapProfile.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyMapProfile.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -1,4 +1,6 @@
+from descr import *
+
from qt import PYSIGNAL, QColor, QObject, Qt
from math import exp
@@ -46,16 +48,21 @@
self.m_should_reset = True
def reset(self, should_reset):
+ #descr(should_reset)
self.m_should_reset = should_reset
def shouldReset(self):
+ #descr()
return self.m_should_reset
def getRange(self):
+ #descr()
return self.m_inf, self.m_sup
def resetRange(self, population):
+ #descr(population)
(inf, sup) = self.m_range.getRange()
+ #descr("(inf, 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
@@ -63,6 +70,7 @@
return self.getRange()
def updateRange(self, population):
+ #descr(population)
if self.m_should_reset:
return self.resetRange(population)
Modified: trunk/source/python/AvidaGui2/pyOneOrg_ScopeCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOneOrg_ScopeCtrl.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyOneOrg_ScopeCtrl.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -48,6 +48,12 @@
self.connect(self.m_timer, qt.SIGNAL("timeout()"), self.advanceSlot)
+
+ def sliderValueChangedSlot(self, frame_number):
+ print "pyOneOrg_ScopeCtrl.sliderValueChangedSlot(", frame_number, ")."
+ self.m_organism_scope_ctrl.showFrame(frame_number)
+
+
def gestationTimeChangedSlot(self, gestation_time):
print "pyOneOrg_ScopeCtrl.gestationTimeChangedSlot called, gestation_time ", gestation_time
self.m_execution_step_slider.setMaxValue(gestation_time - 1)
@@ -59,10 +65,6 @@
# This may be redundant (I'm not sure). @kgn
self.m_execution_step_slider.emit(qt.SIGNAL("valueChanged(int)"),(execution_step,))
- def sliderValueChangedSlot(self, frame_number):
- print "pyOneOrg_ScopeCtrl.sliderValueChangedSlot(", frame_number, ")."
- self.m_organism_scope_ctrl.showFrame(frame_number)
-
def sliderMovedSlot(self, frame_number):
print "pyOneOrg_ScopeCtrl.sliderMovedSlot()."
self.pauseSlot()
Modified: trunk/source/python/AvidaGui2/pyOneOrganismCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOneOrganismCtrl.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyOneOrganismCtrl.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -12,3 +12,22 @@
def construct(self, session_mdl):
self.m_session_mdl = session_mdl
self.m_one_org_scope_ctrl.construct(self.m_session_mdl)
+ self.m_organism_configure_ctrl.construct(self.m_session_mdl)
+
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("setOneOrganismViewNameLabelTextSig"),
+ self.setOneOrganismViewNameLabelTextSlot)
+ self.connect(self.m_organism_scope_toggle, SIGNAL("clicked()"),
+ self.ToggleScopeSlot)
+
+
+ def setOneOrganismViewNameLabelTextSlot(self, name):
+ self.m_organism_name_label.setText(name)
+
+ def ToggleScopeSlot (self):
+ current_page = self.m_organism_scope_widget_stack.visibleWidget()
+ current_page_int = self.m_organism_scope_widget_stack.id(current_page)
+ if (current_page_int == 0):
+ self.m_organism_scope_widget_stack.raiseWidget(1)
+ else:
+ self.m_organism_scope_widget_stack.raiseWidget(0)
+
Modified: trunk/source/python/AvidaGui2/pyOneOrganismView.ui
===================================================================
--- trunk/source/python/AvidaGui2/pyOneOrganismView.ui 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyOneOrganismView.ui 2005-10-18 19:11:59 UTC (rev 349)
@@ -1,6 +1,7 @@
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
<class>pyOneOrganismView</class>
<comment>Python:from pyOneOrg_ScopeCtrl import pyOneOrg_ScopeCtrl
+Python:from pyOrganismConfigureCtrl import pyOrganismConfigureCtrl
Python:from pyTimelineCtrl import pyTimelineCtrl
</comment>
<widget class="QWidget">
@@ -11,7 +12,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>613</width>
+ <width>455</width>
<height>434</height>
</rect>
</property>
@@ -49,37 +50,25 @@
</widget>
<widget class="QLabel">
<property name="name">
- <cstring>textLabel13</cstring>
+ <cstring>m_organism_name_label</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
- <hsizetype>5</hsizetype>
+ <hsizetype>3</hsizetype>
<vsizetype>5</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="font">
+ <font>
+ <pointsize>11</pointsize>
+ </font>
+ </property>
<property name="text">
- <string>Leopold</string>
+ <string>[organism]</string>
</property>
</widget>
- <spacer>
- <property name="name">
- <cstring>spacer33</cstring>
- </property>
- <property name="orientation">
- <enum>Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>MinimumExpanding</enum>
- </property>
- <property name="sizeHint">
- <size>
- <width>477</width>
- <height>16</height>
- </size>
- </property>
- </spacer>
<widget class="QLayoutWidget">
<property name="name">
<cstring>layout178</cstring>
@@ -107,7 +96,7 @@
</spacer>
<widget class="QToolButton">
<property name="name">
- <cstring>toolButton31_2</cstring>
+ <cstring>m_organism_scope_toggle</cstring>
</property>
<property name="font">
<font>
@@ -142,18 +131,68 @@
</widget>
</hbox>
</widget>
- <widget class="pyOneOrg_ScopeCtrl">
+ <widget class="QWidgetStack">
<property name="name">
- <cstring>m_one_org_scope_ctrl</cstring>
+ <cstring>m_organism_scope_widget_stack</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
- <hsizetype>5</hsizetype>
+ <hsizetype>3</hsizetype>
<vsizetype>3</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>WStackPage</cstring>
+ </property>
+ <attribute name="id">
+ <number>0</number>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="pyOneOrg_ScopeCtrl">
+ <property name="name">
+ <cstring>m_one_org_scope_ctrl</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>WStackPage</cstring>
+ </property>
+ <attribute name="id">
+ <number>1</number>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="pyOrganismConfigureCtrl">
+ <property name="name">
+ <cstring>m_organism_configure_ctrl</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
</widget>
</vbox>
</widget>
@@ -174,6 +213,22 @@
</sizepolicy>
<pixmap>image2</pixmap>
</customwidget>
+ <customwidget>
+ <class>pyOrganismConfigureCtrl</class>
+ <header location="local"></header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image3</pixmap>
+ </customwidget>
</customwidgets>
<images>
<image name="image0">
@@ -185,9 +240,13 @@
<image name="image2">
<data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d0326df7!
ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df218e05!
82c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454e44a!
e426082<
/data>
</image>
+ <image name="image3">
+ <data format="PNG" length="1125">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000042c49444154789cb5954f6c14551cc73fefcd7476b65bdaae4bb78bb5502a14d404e4801c88182d1c4c2c693da847400f9c24c68b878684238660e2b1e01f12c19493012ef2478c814412d354a46017a8a564bb6da5bbedccee767776e63d0ffb073751d483bfe49799974c3eeffb7ebf37df9fd05a530b2184040cc0042420aaf9a4d0d554800f045a6b256ae0e1e1e1d6bebebe838ee31c48a7d39b5cd7fd075e251cc7617272f2ded8d8d819cff33e0316819259537aead4a9839d5dd6d1784f91f55b0a94830242088404d304292bef68a89f520802a598fecddaa04f1a876f5c250c7c0a64cdeac686e33807e23d45e6b297c8b877f1831542614550b6599835c83c2a81b6786a75134faf2f1169f12997350881d9021d0903e06de0745d3160a6d3e94dbd5b0a64dcbb94b5831d0e3375ab892b1772dcf9790528543f8dd0d367b36768153b5e31503a0f1aecb004580b44ffac58baae8b1714f0833c7638cc8dab303a320f4822ab4c7a37c69196203de3319d5ce1c4d13c733331dedc67a129a154fd128401ab0616d55a130ac3d42d93d1913940d13fd0c9ee0183685c60da01c5421bd72f7a8c8efccef9afd374267ad93!
d642365be0636a0d28ec7600941d9e6f23917f0e97f23ce5bef35d19ec863da0ed9059b2be70bec196c66dfa10ec0e49b338f7017258651bf95021035c595429bb0903248fe52a2b5b595dd7b4d945cc2340cdca536be389ee3f67886c5798f773fe8e0dac508c989659277a2180da4ca4ff07821058b8b251445d63d6b13ed1098a6417e39cac85197dbe31962ab9bd9f1f22a226d45366f6d0620fdb08c900d281af6110284b20085b414861d905d88f2e52739ee8cbb8022143259d3dd84691730aa2d52da441a8de0c6958068870022a41e9629ad3473fd3b8fdbe319dadb9b4924da994d2d716c7896fbe35152f78b48245d6b2da4507faf582be8eaf159b721cc837b05ae7debb1f79d08cb8b515edad942a22bc4b1c33eb3d34b1c797f06af90a72d16e2f96d9a74aa11dca8586b222d01af0fb60070f6c402d72f15d97f28c6f6d7027a5f5ce6c3233dc4e2ede496b278be4fff608cee8d3e1add806aeca51094cbb06397c1ecc328e746537c7e3ccdb5cb1136bf60635882d4d41c6ec6836ab37efa214f72208ed9f4d7cdd38ee310280542e38b1c43fb6de26b3672e1ec3cc99bcb246f66a938a3241ab3e91f7c861fbf77710b1e5e49915bae974203ba0e9e9c9cbc373d6d6d305a040a89c2a77f50b27d5782bbbf7acccf28349235dd16cf6dd374f7295e1de8a45!
c02d37499182b01cc0201a085d61a2144d8b2ac8fb6ed340e77240c4261890!
e04c2501
85262546d534a032154b59e0ad394e41c98182bf268ce6721ed9f064e0253356f6da2e24c1f030f783c15fe6da680af8021602bd051532ca9b8521488559f61aa86c29343578fbf0264a94c906c7d3409214c20043457a116ff6de6795578012889ff6b98fe016ea0ce1c203e47720000000049454e44ae426082</data>
+ </image>
</images>
<layoutdefaults spacing="6" margin="11"/>
<includehints>
<includehint>pyoneorg_scopectrl.h</includehint>
+ <includehint>pyorganismconfigurectrl.h</includehint>
</includehints>
</UI>
Modified: trunk/source/python/AvidaGui2/pyOnePop_PetriDishCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOnePop_PetriDishCtrl.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyOnePop_PetriDishCtrl.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -1,5 +1,7 @@
# -*- coding: utf-8 -*-
+from descr import descr
+
from qt import *
from pyMapProfile import pyMapProfile
from pyOnePop_PetriDishView import pyOnePop_PetriDishView
@@ -88,6 +90,7 @@
if self.m_avida:
self.m_map_profile.getUpdater(self.m_mode_combobox.currentItem()).resetRange(self.m_avida.m_population)
+ self.modeActivatedSlot(self.m_mode_combobox.currentItem())
def ToggleDishSlot (self):
@@ -130,11 +133,14 @@
if self.m_updater:
(old_min, old_max) = self.m_updater.getRange()
(min, max) = self.m_avida and self.m_updater.updateRange(self.m_avida.m_population) or (0, 0)
+ #descr(self.m_avida)
if self.m_updater.shouldReset() or ((old_min, old_max) != (min, max)):
self.m_gradient_scale_ctrl.setRange(min, max)
self.m_gradient_scale_ctrl.activate(True)
self.m_petri_dish_ctrl.setRange(min, max)
- self.m_updater.reset(False)
+ # Force subsequent resets until valid range is obtained.
+ if ((min, max) != (0, 0)):
+ self.m_updater.reset(False)
should_update_all = True
else:
self.m_gradient_scale_ctrl.setRange(0, 0)
@@ -148,17 +154,20 @@
if update: self.m_update_label.setText(QString("%1").arg(update))
def RenameDishSlot(self, dishName):
+ descr()
if (not self.dishDisabled):
self.PopulationTextLabel.setText(dishName)
# Dummy routine
def freezeDishPhaseISlot(self, send_reset_signal = False, send_quit_signal = False):
+ descr()
print "in pyOnePop_PetriDishCtrl recieved freezeDishPhaseISig"
print "send_reset_signal = " + str(send_reset_signal)
print "send_quit_signal = " + str(send_quit_signal)
def petriDropped(self, e):
+ descr()
# Try to decode to the data you understand...
freezer_item_name = QString()
if ( QTextDrag.decode( e, freezer_item_name ) ) :
@@ -180,6 +189,7 @@
self.MakeConfigVisiableSlot()
def DefrostSlot(self, dish_name, petri_dict):
+ descr()
if self.isVisible():
Restart_Only_Flag = False
@@ -225,9 +235,11 @@
PYSIGNAL("restartPopulationSig"), (self.m_session_mdl, ))
def finishedPetriDishSlot(self):
+ descr()
self.finishedPetriDish = True
def restart(self, session_mdl):
- print "pyOnePop_PetriDishCtrl.py:restart called"
+ descr()
+ descr(session_mdl)
self.dishDisabled = False
Modified: trunk/source/python/AvidaGui2/pyOnePopulationCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOnePopulationCtrl.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyOnePopulationCtrl.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -1,5 +1,7 @@
# -*- coding: utf-8 -*-
+from descr import descr
+
from pyAvida import pyAvida
from qt import *
from pyOnePopulationView import pyOnePopulationView
@@ -28,8 +30,17 @@
self.connect(self.m_session_mdl.m_session_mdtr,
PYSIGNAL("restartPopulationSig"), self.restartPopulationSlot)
+ def dragEnterEvent( self, e ):
+ descr(e)
+ e.acceptAction(True)
+ if e.isAccepted():
+ descr("isAccepted.")
+ else:
+ descr("not isAccepted.")
+
def dropEvent( self, e ):
+ descr(e)
freezer_item_name = QString()
if ( QTextDrag.decode( e, freezer_item_name ) ) : #freezer_item_name is a string...the file name
if os.path.exists(str(freezer_item_name)) == False:
@@ -43,9 +54,11 @@
(freezer_item_name,))
def restartPopulationSlot(self, session_mdl):
+ descr()
self.m_one_pop_petri_dish_ctrl.restart(self.m_session_mdl)
self.m_one_pop_graph_ctrl.restart()
self.m_one_pop_stats_ctrl.restart()
+ self.m_session_mdl.m_session_mdtr.emit(PYSIGNAL("doSyncSig"), ())
# self.m_session_mdl.m_session_mdtr.emit(
# PYSIGNAL("doInitializeAvidaPhaseISig"), (self.m_session_mdl.m_tempdir,))
Modified: trunk/source/python/AvidaGui2/pyOrganismScopeCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOrganismScopeCtrl.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyOrganismScopeCtrl.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -1,17 +1,18 @@
# -*- coding: utf-8 -*-
-from pyOrganismScopeView import pyOrganismScopeView
-
+from pyOrganismScopeView import pyOrganismScopeView, pyOrganismAnimator
from AvidaCore import cAnalyzeGenotype, cGenome, cInstruction, cInstUtil, cString
-
from pyHardwareTracer import pyHardwareTracer
+from descr import descr
+
from qt import *
import os
import tempfile
+
class pyOrganismScopeCtrl(pyOrganismScopeView):
def __init__(self,parent = None,name = None,fl = 0):
@@ -24,19 +25,49 @@
self.m_session_mdl = session_mdl
self.m_avida = None
self.setAcceptDrops(1)
- self.connect(
- self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
- self.setAvidaSlot)
- self.connect(
- self.m_session_mdl.m_session_mdtr, PYSIGNAL("setDebugOrganismFileSig"),
- self.setDebugOrganismFileSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"), self.setAvidaSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("setDebugOrganismFileSig"), self.setDebugOrganismFileSlot)
+
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_HeadsTypeCBActivatedSig"),
+ self.HeadsTypeCBActivatedSlot)
+
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_ShowTaskTestsCBToggledSig"),
+ self.ShowTaskTestsCBToggledSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_ShowRegistersCBToggledSig"),
+ self.ShowRegistersCBToggledSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_AnimateHeadMovementCBToggledSig"),
+ self.AnimateHeadMovementCBToggledSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_ShowStacksCBToggledSig"),
+ self.ShowStacksCBToggledSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_ShowHeadsAsLettersCBToggledSig"),
+ self.ShowHeadsAsLettersCBToggledSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_ShowInstructionNamesCBToggledSig"),
+ self.ShowInstructionNamesCBToggledSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_ShowInputsAndOutputsCBToggledSig"),
+ self.ShowInputsAndOutputsCBToggledSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_ShowFullStacksCBToggledSig"),
+ self.ShowFullStacksCBToggledSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_AnimateInstructionCopyCBToggledSig"),
+ self.AnimateInstructionCopyCBToggledSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_ShowHardwareCBToggledSig"),
+ self.ShowHardwareCBToggledSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_AnimateOrganismDivideCBToggledSig"),
+ self.AnimateOrganismDivideCBToggledSlot)
+
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_LayoutSpacingSBValueChangedSig"),
+ self.LayoutSpacingSBValueChangedSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr, PYSIGNAL("ScopeConfig_HardwareIndicatorSBValueChangedSig"),
+ self.HardwareIndicatorSBValueChangedSlot)
+
+
def dragEnterEvent( self, e ):
+ descr(e)
e.acceptAction(True)
if e.isAccepted():
- print "pyOrganismScopeCtrl.dragEnterEvent(e): isAccepted."
+ descr("isAccepted.")
else:
- print "pyOrganismScopeCtrl.dragEnterEvent(e): not isAccepted."
+ descr("not isAccepted.")
freezer_item_name = QString()
if ( QTextDrag.decode( e, freezer_item_name ) ) :
@@ -52,6 +83,7 @@
print "pyOrganismScopeCtrl.dragEnterEvent(e): freezer_item_name doesn't end with .organism."
def dropEvent( self, e ):
+ descr(e)
freezer_item_name = QString()
if ( QTextDrag.decode( e, freezer_item_name ) ) :
if os.path.exists( str(freezer_item_name)) == False:
@@ -77,7 +109,7 @@
def setDebugOrganismFileSlot(self, organism_filename):
print "pyOrganismScopeCtrl.setDebugOrganismFileSlot"
if self.m_avida:
- self.reset()
+ self.setFrames()
inst_set = self.m_avida.m_environment.GetInstSet()
org_file = open(organism_filename.ascii())
@@ -87,9 +119,36 @@
org_file.close
genome = cGenome(cString(org_string))
analyze_genotype = cAnalyzeGenotype(genome, inst_set)
- hardware_tracer = pyHardwareTracer()
+
+
+ class ProgressCallback:
+ def __init__(self, qobj):
+ self.qobj = qobj
+ # FIXME : remove hard-coding of 2000 below. @kgn
+ self.progress_bar = QProgressBar(2000)
+ self.qobj.emit(PYSIGNAL("addStatusBarWidgetSig"), (self.progress_bar, 0, True))
+ def clear(self):
+ self.qobj.emit(PYSIGNAL("removeStatusBarWidgetSig"), (self.progress_bar,))
+ pt = QPoint()
+ self.progress_bar.reparent(None, pt)
+ del self.progress_bar
+ def __call__(self, step):
+ self.progress_bar.setProgress(step)
+ qApp.processEvents()
+
+ self.m_session_mdl.m_session_mdtr.emit(PYSIGNAL("setOneOrganismViewNameLabelTextSig"), (organism_filename.ascii(),))
+ self.m_session_mdl.m_session_mdtr.emit(PYSIGNAL("statusBarMessageSig"), ("Analyzing organism...",))
+ progress_callback = ProgressCallback(self.m_session_mdl.m_session_mdtr)
+
+ hardware_tracer = pyHardwareTracer(progress_callback)
hardware_tracer.traceAnalyzeGenotype(analyze_genotype, self.m_avida.m_environment, should_use_resources = False)
+ progress_callback(2000)
+ #del progress_callback
+
+ self.m_session_mdl.m_session_mdtr.emit(PYSIGNAL("statusBarMessageSig"), ("Setting up organism scope...",))
+ qApp.processEvents()
+
# Translate from string genome representation to actual command names.
inst_names = {}
ops = {}
@@ -103,3 +162,51 @@
self.setInstNames(inst_names)
self.setOps(ops)
self.setFrames(hardware_tracer.m_hardware_trace)
+
+ progress_callback.clear()
+ self.m_session_mdl.m_session_mdtr.emit(PYSIGNAL("statusBarClearSig"), ())
+
+ else:
+ # XXX Temporary. @kgn
+ warning_message_box = QMessageBox.warning(
+ self,
+ "Avida-ED Beta Limitation",
+ """In this beta version, you must start an Avida population before you can analyze an organism.
+(After you start a population, if you want you can pause it.)""",
+ QMessageBox.Ok,
+ QMessageBox.NoButton,
+ QMessageBox.NoButton
+ )
+
+ def HeadsTypeCBActivatedSlot(self, index):
+ descr(index)
+ self.anim.setDisplayHeadsAs(index)
+
+ def ShowTaskTestsCBToggledSlot(self, bool):
+ descr(bool)
+ def ShowRegistersCBToggledSlot(self, bool):
+ descr(bool)
+ def AnimateHeadMovementCBToggledSlot(self, bool):
+ descr(bool)
+ def ShowStacksCBToggledSlot(self, bool):
+ descr(bool)
+ def ShowHeadsAsLettersCBToggledSlot(self, bool):
+ descr(bool)
+ def ShowInstructionNamesCBToggledSlot(self, bool):
+ descr(bool)
+ def ShowInputsAndOutputsCBToggledSlot(self, bool):
+ descr(bool)
+ def ShowFullStacksCBToggledSlot(self, bool):
+ descr(bool)
+ def AnimateInstructionCopyCBToggledSlot(self, bool):
+ descr(bool)
+ def ShowHardwareCBToggledSlot(self, bool):
+ descr(bool)
+ def AnimateOrganismDivideCBToggledSlot(self, bool):
+ descr(bool)
+
+ def LayoutSpacingSBValueChangedSlot(self, value):
+ descr(value)
+ def HardwareIndicatorSBValueChangedSlot(self, value):
+ descr(value)
+
Modified: trunk/source/python/AvidaGui2/pyOrganismScopeView.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOrganismScopeView.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyOrganismScopeView.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -1,10 +1,599 @@
# -*- coding: utf-8 -*-
-from qt import PYSIGNAL, QBrush, QColor, QFont, QFontMetrics, QPen, QPointArray, QPoint, QScrollView, Qt, QWMatrix
-from qtcanvas import QCanvas, QCanvasEllipse, QCanvasLine, QCanvasSpline, QCanvasText, QCanvasView
+from AvidaCore import cHardwareDefs, cHardwareCPUDefs
+
+from descr import descr
+
+from qt import *
+from qtcanvas import *
import math
+
+class ringHead(QCanvasEllipse):
+ def __init__(self, anim, color):
+ QCanvasEllipse.__init__(self, anim.canvas)
+ descr()
+ self.anim = anim
+ if hasattr(anim, 'r'):
+ diam = 2 * (anim.r + 1)
+ self.setSize(diam, diam)
+ self.setBrush(QBrush(color))
+ def move(self, displayed_genome_size, head_pos):
+ circle_pts = self.anim.circles[displayed_genome_size]
+ if len(circle_pts) <= head_pos: head_pos = -1
+ circle_pt = circle_pts[head_pos]
+ self.setX(circle_pt[0])
+ self.setY(circle_pt[1])
+ self.show()
+
+class textHead(QCanvasText):
+ def __init__(self, anim, text):
+ QCanvasText.__init__(self, anim.canvas)
+ descr()
+ self.anim = anim
+ self.setTextFlags(Qt.AlignCenter)
+ self.setFont(anim.font)
+ self.setText(text)
+ def move(self, displayed_genome_size, head_pos):
+ circle_pts = self.anim.head_circles[displayed_genome_size]
+ if len(circle_pts) <= head_pos: head_pos = -1
+ circle_pt = circle_pts[head_pos]
+ self.setX(circle_pt[0])
+ self.setY(circle_pt[1])
+ self.show()
+
+class headsDotShapePolicy:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+ def createHeads(self):
+ a = self.anim
+ return (ringHead(a, Qt.blue), ringHead(a, Qt.green), ringHead(a, Qt.red), textHead(a, 'F'))
+
+
+class headsLetterShapePolicy:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+ def createHeads(self):
+ a = self.anim
+ return (textHead(a, 'I'), textHead(a, 'R'), textHead(a, 'W'), textHead(a, 'F'))
+
+
+class headsAnimator:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+ anim.ihead_item = anim.rhead_item = anim.whead_item = anim.fhead_item = None
+
+ def resetHeads(self, head_items):
+ descr()
+ a = self.anim
+ for head_item in head_items:
+ if head_item is not None: head_item.setCanvas(None)
+ return a.heads_shape_policy.createHeads()
+
+ def setFrames(self, frames):
+ descr()
+ a = self.anim
+ (a.ihead_item, a.rhead_item, a.whead_item, a.fhead_item
+ ) = self.resetHeads((a.ihead_item, a.rhead_item, a.whead_item, a.fhead_item))
+
+ def showFrame(self, frame_number):
+ descr()
+ a = self.anim
+ if a.frames is not None and frame_number < a.frames.m_gestation_time:
+ displayed_genome_size = max(a.last_copied_instruction_cache[frame_number] + 1, a.frames.m_size)
+ circle_pts = a.head_circles[displayed_genome_size]
+ hw = a.frames.getHardwareSnapshotAt(frame_number)
+ for id, item in (
+ (cHardwareDefs.s_HEAD_IP, a.ihead_item),
+ (cHardwareDefs.s_HEAD_READ, a.rhead_item),
+ (cHardwareDefs.s_HEAD_WRITE, a.whead_item),
+ (cHardwareDefs.s_HEAD_FLOW, a.fhead_item)
+ ):
+ head_pos = hw.GetHead(id).GetPosition()
+ item.move(displayed_genome_size, head_pos)
+
+
+class instructionsAnimator:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+ anim.canvas_ellipses = []
+ anim.current_genome_str = None
+ anim.current_frame_number = 0
+ anim.current_radius = None
+ anim.color = QColor()
+
+ def setFrames(self, frames):
+ descr("frames", frames)
+ a = self.anim
+ # canvas items must be detached from canvas before attempt is made to delete them.
+ for item in a.canvas_ellipses: item.setCanvas(None)
+ # create new canvas items, deleting old ones.
+ if frames is None: a.canvas_ellipses = []
+ else:
+ a.canvas_ellipses = [QCanvasEllipse(a.canvas) for i in xrange(frames.getSnapshotCount())]
+ for ellipse in a.canvas_ellipses:
+ ellipse.setSize(2*a.r, 2*a.r)
+ ellipse.setZ(10.)
+
+ def _placeEllipses(self, circle_pts, rng):
+ a = self.anim
+ for i in rng:
+ ellipse = a.canvas_ellipses[i]
+ ellipse.setX(circle_pts[i][0])
+ ellipse.setY(circle_pts[i][1])
+
+ def _brushEllipses(self, circle_pts, rng):
+ a = self.anim
+ for i in rng:
+ ellipse = a.canvas_ellipses[i]
+ a.color.setHsv((a.ops_dict[a.current_genome_str[i]] * 360) / len(a.ops_dict), 85, 248)
+ ellipse.setBrush(QBrush(a.color))
+ ellipse.show()
+
+ def showFrame(self, frame_number):
+ descr("frame number", frame_number)
+
+ a = self.anim
+
+ old_genome_str = a.current_genome_str
+ old_frame_number = a.current_frame_number
+ old_radius = a.current_radius
+
+ a.current_frame_number = 0
+ a.current_radius = None
+ a.current_genome_str = None
+
+ if frame_number < 0:
+ descr("bad frame_number %d reset to zero." % frame_number)
+ frame_number = 0
+
+ if a.frames is not None and frame_number < a.frames.m_gestation_time:
+ a.current_frame_number = frame_number
+ a.current_genome_str = a.frames.getMemorySnapshotAt(frame_number).AsString().GetData()
+ displayed_genome_size = max(a.last_copied_instruction_cache[frame_number] + 1, a.frames.m_size)
+ a.current_radius = a.circle_radii[displayed_genome_size - 1]
+ circle_pts = a.circles[displayed_genome_size]
+ if old_genome_str is None:
+ rng = xrange(displayed_genome_size)
+ self._placeEllipses(circle_pts, rng)
+ self._brushEllipses(circle_pts, rng)
+ else:
+ old_length = max(a.last_copied_instruction_cache[old_frame_number] + 1, a.frames.m_size)
+ new_length = max(a.last_copied_instruction_cache[frame_number] + 1, a.frames.m_size)
+ compare_max = min(old_length, new_length)
+ range_end = max(old_length, new_length)
+ if old_radius != a.current_radius:
+ self._placeEllipses(circle_pts, xrange(compare_max))
+ if old_length < new_length:
+ self._placeEllipses(circle_pts, xrange(compare_max, range_end))
+ for i in xrange(compare_max):
+ if old_genome_str[i] != a.current_genome_str[i]:
+ a.color.setHsv((a.ops_dict[a.current_genome_str[i]] * 360) / len(a.ops_dict), 85, 248)
+ a.canvas_ellipses[i].setBrush(QBrush(a.color))
+ if old_length < new_length:
+ self._brushEllipses(circle_pts, xrange(compare_max, range_end))
+ else:
+ for i in xrange(compare_max, range_end):
+ a.canvas_ellipses[i].hide()
+
+class instFactoryAnimator:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+
+
+class segAnimator:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+
+class pathAnimator:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+
+class indicator(QCanvasRectangle):
+ def __init__(self, anim, x, y, width, height):
+ QCanvasRectangle.__init__(self, x, y, width, height, anim.canvas)
+ descr()
+ self.anim = anim
+ def setBit(self, bit):
+ self.setBrush(bit and self.anim.on_brush or self.anim.off_brush)
+ self.setPen(bit and self.anim.on_pen or self.anim.off_pen)
+
+class indicatorPolicy:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+ def createIndicators(self):
+ a = self.anim
+ hw_anim = a.hw_anim
+ x = hw_anim.regs_anim.x
+ y = hw_anim.regs_anim.y
+ w = a.hardware_indicator_size
+ h = a.hardware_indicator_size
+ return [indicator(a, x + i*w, y, w, h) for i in xrange(32)]
+
+class bufAnimator:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+ self.indicator_items = []
+ self.indicator_policy = indicatorPolicy()
+ def width(self):
+ return 32 * anim.hardware_indicator_size
+ def height(self):
+ return anim.hardware_indicator_size
+
+ def setReadFnc(self, read_fnc):
+ self.read_fnc = read_fnc
+ def resetIndicators(self, indicator_items):
+ descr()
+ a = self.anim
+ for item in indicator_items:
+ if item is not None: item.setCanvas(None)
+ return self.indicator_policy.createIndicators()
+ def setX(self, x):
+ descr()
+ def setY(self, y):
+ descr()
+ def setZ(self, z):
+ descr()
+ def show(self):
+ descr()
+ def hide(self):
+ descr()
+ def setFrames(self, frames):
+ descr()
+ self.indicator_items = self.resetIndicators()
+ def showFrame(self, frame_number):
+ descr()
+
+
+class regsAnimator:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+ def size(self):
+ descr()
+ if not self.anim.show_registers_flag:
+ return 0, 0
+ def setFrames(self, frames):
+ descr()
+ if self.anim.show_hardware_flag and self.anim.show_registers_flag:
+ pass
+ else:
+ pass
+ def showFrame(self, frame_number):
+ descr()
+ if self.anim.show_hardware_flag and self.anim.show_registers_flag:
+ pass
+ else:
+ pass
+
+class stackAnimator:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+ def size(self):
+ descr()
+ return 0, 0
+
+class ioAnimator:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+ def size(self):
+ descr()
+ return 0, 0
+
+class taskTestsAnimator:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+ def size(self):
+ descr()
+ return 0, 0
+
+
+class hwAnimator:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+ self.regs_anim = regsAnimator(anim)
+ self.stack_a_anim = stackAnimator(anim)
+ self.stack_b_anim = stackAnimator(anim)
+ self.io_anim = ioAnimator(anim)
+ self.task_tests_anim = taskTestsAnimator(anim)
+
+ self.x = None
+ self.y = None
+
+ self.regs_anim.x = None
+ self.regs_anim.y = None
+
+ def size(self):
+ descr()
+ if not self.anim.show_hardware_flag:
+ return 0, 0
+
+ width = height = self.anim.layout_margin
+ for a in (self.regs_anim, self.stack_a_anim, self.stack_b_anim, self.io_anim, self.task_tests_anim):
+ a_width, a_height = a.size()
+ width, height = (max(width, a_width), height + a_height)
+ return width, height
+
+ def setFrames(self, frames):
+ descr()
+ self.x = self.anim.layout_margin
+ self.y = self.anim.layout_margin
+
+ self.regs_anim.x = self.x
+ self.regs_anim.y = self.y
+
+ self.regs_anim.setFrames(frames)
+
+ def showFrame(self, frame_number):
+ descr()
+ self.regs_anim.showFrame(frame_number)
+
+class dataAnimator:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+
+
+class divideAnimator:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+
+
+class layoutManager:
+ def __init__(self, anim):
+ descr()
+ self.anim = anim
+ anim.MAX_ORG_LEN = 200
+ def checkDimensions(self, width, height):
+ descr(width, height)
+ a = self.anim
+ hw_width, hw_height = a.hw_anim.size()
+ w = width - hw_width
+ w = w - 2 * a.layout_margin
+
+ h = height - hw_width
+ h = h - 2 * a.layout_margin
+
+ # FIXME: remove hard-coded 200 - the maximum (expected) length of an organism. @kgn
+ sin_n = math.sin(math.pi/a.MAX_ORG_LEN)
+ sin_n_3 = 3 * sin_n
+ R = (h / 2.) / (1 + sin_n_3)
+ r = R * sin_n
+ rr = r - a.layout_spacing / 2.
+
+ c_x = width - w / 2.
+ c_y = height / 2.
+
+ descr(c_x, c_y, R, r, rr)
+ return c_x, c_y, R, r, rr
+
+ def setDimensions(self, layout_dims):
+ descr()
+ a = self.anim
+ c_x, c_y, R, r, rr = layout_dims
+ descr(c_x, c_y, R, r, rr)
+ descr(layout_dims)
+ a.circles = []
+ a.head_circles = []
+ a.circle_radii = []
+ a.head_circle_radii = []
+
+ angle_offset = math.pi/2
+ for i in xrange(1, a.MAX_ORG_LEN + 2):
+ radius = R*i/a.MAX_ORG_LEN
+ head_radius = radius + 3*r
+ dt = 2*math.pi/i
+ circle_pts = []
+ head_circle_pts = []
+ for j in xrange(i):
+ theta = j * dt + angle_offset
+ c = math.cos(theta)
+ s = -math.sin(theta)
+ x = radius * c + c_x
+ y = radius * s + c_y
+ h_x = head_radius * c + c_x
+ h_y = head_radius * s + c_y
+ circle_pts.append((x,y))
+ head_circle_pts.append((h_x,h_y))
+ a.circles.append(circle_pts)
+ a.head_circles.append(head_circle_pts)
+ a.circle_radii.append(radius)
+ a.head_circle_radii.append(head_radius)
+
+
+class pyOrganismAnimator:
+ def __init__(self):
+ descr()
+ self.heads_anim = headsAnimator(self)
+ self.instructions_anim = instructionsAnimator(self)
+ self.ihead_path_anim = pathAnimator(self)
+ self.hw_anim = hwAnimator(self)
+ self.divide_anim = divideAnimator(self)
+
+ self.layout_manager = layoutManager(self)
+
+ self.font = QFont(qApp.font())
+
+ self.on_brush = QBrush(Qt.white)
+ self.off_brush = QBrush(Qt.black)
+ self.on_pen = QPen(Qt.white)
+ self.off_pen = QPen(Qt.black)
+
+ self.hardware_indicator_size = 4
+ self.layout_spacing = 2
+ self.layout_margin = 20
+
+ self.layout_dims = None
+
+ self.canvas = None
+ self.ops_dict = None
+
+ self.frames = None
+
+ self.animate_head_movement_flag = False
+ self.animate_instruction_copy_flag = False
+ self.animate_organism_divide_flag = False
+ self.show_hardware_flag = None
+ self.show_registers_flag = False
+ self.show_stacks_flag = False
+ self.show_full_stacks_flag = False
+ self.show_io_flag = False
+ self.show_task_tests_flag = False
+ self.show_instruction_names_flag = False
+
+ self.display_heads_as = None
+
+ self.setDisplayHeadsAs(0)
+ self.setShowHardwareCBToggled(True)
+
+ def setOps(self, ops = None):
+ self.ops_dict = ops
+
+ def setCanvas(self, canvas = None):
+ descr()
+ self.canvas = canvas
+ def setFrames(self, frames = None):
+ descr()
+ self.frames = frames
+ if frames is None:
+ self.last_copied_instruction_cache = None
+ else:
+ self.last_copied_instruction_cache = []
+ last_copied_instruction = 0
+ for i in xrange(frames.getSnapshotCount()):
+ ms = frames.getMemorySnapshotAt(i)
+ last_copied_instruction = max(
+ [ms.GetFlagCopied(j) and j or last_copied_instruction for j in xrange(last_copied_instruction, ms.GetSize())]
+ )
+ self.last_copied_instruction_cache.append(last_copied_instruction)
+ descr("self.last_copied_instruction_cache", self.last_copied_instruction_cache)
+
+ self.instructions_anim.setFrames(frames)
+ self.heads_anim.setFrames(frames)
+ self.hw_anim.setFrames(frames)
+ def showFrame(self, frame_number):
+ descr()
+ self.instructions_anim.showFrame(frame_number)
+ self.heads_anim.showFrame(frame_number)
+ self.hw_anim.showFrame(frame_number)
+ self.canvas.update()
+ def animateFrame(self, frame_number):
+ descr()
+ pass
+
+
+ def setSize(self, width, height):
+ descr()
+ self.canvas_width = width
+ self.canvas_height = height
+
+ layout_dims = self.layout_manager.checkDimensions(width, height)
+ for num in layout_dims:
+ if num <= 0:
+ return
+ if layout_dims != self.layout_dims:
+ self.layout_dims = layout_dims
+ self.layout_manager.setDimensions(layout_dims)
+ descr()
+ self.c_x, self.c_y, self.R, self.r, self.rr = layout_dims
+ text_height = 3 * self.r
+ font_metrics = QFontMetrics(self.font)
+ font_points_per_pixel = self.font.pointSizeFloat()/font_metrics.height()
+ point_size_float = text_height * font_points_per_pixel
+ self.font.setPointSizeFloat(point_size_float)
+
+
+ def setAnimateHeadMovementCBToggled(self, bool):
+ descr()
+ if self.animate_head_movement_flag != bool:
+ self.animate_head_movement_flag = bool
+ def setAnimateInstructionCopyCBToggled(self, bool):
+ descr()
+ if self.animate_instruction_copy_flag != bool:
+ self.animate_instruction_copy_flag = bool
+ def setAnimateOrganismDivideCBToggled(self, bool):
+ descr()
+ if self.animate_organism_divide_flag != bool:
+ self.animate_organism_divide_flag = bool
+
+
+ def setDisplayHeadsAs(self, head_type_index):
+ descr()
+ heads_shape_policy_table = (
+ headsDotShapePolicy,
+ headsLetterShapePolicy
+ )
+ if self.display_heads_as != head_type_index:
+ self.display_heads_as = head_type_index
+ self.heads_shape_policy = heads_shape_policy_table[head_type_index](self)
+ self.heads_anim.setFrames(self.frames)
+ self.heads_anim.showFrame(self.current_frame_number)
+
+ def setShowHardwareCBToggled(self, bool):
+ descr()
+ if self.show_hardware_flag != bool:
+ self.show_hardware_flag = bool
+ self.hw_anim.setFrames(self.frames)
+ self.hw_anim.showFrame(self.current_frame_number)
+ def setShowRegistersCBToggled(self, bool):
+ descr()
+ if self.show_registers_flag != bool:
+ self.show_registers_flag = bool
+ def setShowStacksCBToggled(self, bool):
+ descr()
+ if self.show_stacks_flag != bool:
+ self.show_stacks_flag = bool
+ def setShowFullStacksCBToggled(self, bool):
+ descr()
+ if self.show_full_stacks_flag != bool:
+ self.show_full_stacks_flag = bool
+ def setShowInputsAndOutputsCBToggled(self, bool):
+ descr()
+ if self.show_io_flag != bool:
+ self.show_io_flag = bool
+ def setShowTaskTestsCBToggled(self, bool):
+ descr()
+ if self.show_task_tests_flag != bool:
+ self.show_task_tests_flag = bool
+ def setShowInstructionNamesCBToggled(self, bool):
+ descr()
+ if self.show_instruction_names_flag != bool:
+ self.show_instruction_names_flag = bool
+
+
+ def setHardwareIndicatorSBValueChanged(self, value):
+ descr()
+ if self.hardware_indicator_size != value:
+ self.hardware_indicator_size = value
+
+
+ def setLayoutSpacingSBValueChanged(self, value):
+ descr()
+ if self.layout_spacing != value:
+ self.layout_spacing = value
+ def setLayoutMarginSBValueChanged(self, value):
+ descr()
+ if self.layout_margin != value:
+ self.layout_margin = value
+
+
+
+
class pyHeadPath:
def __init__(self, canvas):
self.m_canvas = canvas
@@ -50,9 +639,13 @@
self.m_organism_circle_margin = 10
self.m_font_oversize_factor = 1.2
- self.m_visible_width = 0
- self.m_visible_height = 0
+ self.m_visible_width = 1
+ self.m_visible_height = 1
+ self.anim = pyOrganismAnimator()
+ self.anim.setSize(1, 1)
+ self.anim.setCanvas(self.m_canvas)
+
self.reset()
def reset(self):
@@ -98,6 +691,8 @@
self.m_current_fhead = None
self.m_current_ihead_move = None
+ self.anim.setFrames()
+
# Hmm; can't emit gestationTimeChangedSig(0) without causing absurd slider values. @kgn
self.emit(PYSIGNAL("gestationTimeChangedSig"),(1,))
self.emit(PYSIGNAL("executionStepResetSig"),(0,))
@@ -110,6 +705,7 @@
def setOps(self, ops = None):
self.m_ops_dict = ops
+ self.anim.setOps(ops)
def setFrames(self, frames = None):
self.reset()
@@ -163,6 +759,10 @@
self.updateCircle()
self.showFrame(0)
+ # XXX XXX
+ self.anim.setFrames(frames)
+ self.anim.showFrame(0)
+
def viewportResizeEvent(self, resize_event):
QCanvasView.viewportResizeEvent(self, resize_event)
# XXX Fragility: If the top-level Avida-ED window is allowed to change height, this is going to cause a painful slow-down
@@ -176,6 +776,10 @@
self.updateCircle()
self.showFrame(self.m_current_frame_number)
+ # XXX XXX
+ self.anim.setSize(self.m_visible_width, self.m_visible_height)
+ self.anim.showFrame(self.m_current_frame_number)
+
def updateCircle(self):
self.m_circle_center_x = self.m_visible_width / 2
self.m_circle_center_y = self.m_visible_height / 2
@@ -214,7 +818,58 @@
self.m_head_circles.append(head_circle_pts)
self.m_circle_radii.append(radius)
+ def debug_displayHardwareCPUSnapshot(self, frame_number):
+ print "pyOrganismScopeView.debug_displayHardwareCPUSnapshot()..."
+ hardware_snapshot = self.m_frames.getHardwareSnapshotAt(frame_number)
+ memory_snapshot = self.m_frames.getMemorySnapshotAt(frame_number)
+ threads_snapshot = self.m_frames.getThreadsSnapshotAt(frame_number)
+
+ print "hardware_snapshot", hardware_snapshot
+ print "memory_snapshot", memory_snapshot
+ print "threads_snapshot", threads_snapshot
+ memory_size = memory_snapshot.GetSize()
+ memory_string = str(memory_snapshot.AsString())
+ print "memory_snapshot.GetSize()", memory_size
+ print "memory:"
+ for i in xrange(memory_size):
+ print " ", memory_string[i], memory_snapshot.GetFlagCopied(i), memory_snapshot.GetFlagExecuted(i)
+ threads_count = len(threads_snapshot)
+ print "thread:"
+ for i in xrange(threads_count):
+ thread = threads_snapshot[i]
+ print " .cur_head", thread.cur_head
+ print " .cur_stack", thread.cur_stack
+ print " .next_label", thread.next_label
+ print " .read_label", thread.read_label
+ #print " .stack", thread.stack
+ for j in xrange(cHardwareDefs.s_STACK_SIZE):
+ print " .stack[%d]" % j, thread.stack.Get(j)
+ print " .reg[s_REG_AX]", thread.GetRegister(cHardwareCPUDefs.s_REG_AX)
+ print " .reg[s_REG_BX]", thread.GetRegister(cHardwareCPUDefs.s_REG_BX)
+ print " .reg[s_REG_CX]", thread.GetRegister(cHardwareCPUDefs.s_REG_CX)
+ #print " .reg[s_REG_DX]", thread.GetRegister(cHardwareCPUDefs.s_REG_DX)
+ print " .heads[s_HEAD_IP]", thread.GetHead(cHardwareDefs.s_HEAD_IP).GetPosition()
+ print " .heads[s_HEAD_READ]", thread.GetHead(cHardwareDefs.s_HEAD_READ).GetPosition()
+ print " .heads[s_HEAD_WRITE]", thread.GetHead(cHardwareDefs.s_HEAD_WRITE).GetPosition()
+ print " .heads[s_HEAD_FLOW]", thread.GetHead(cHardwareDefs.s_HEAD_FLOW).GetPosition()
+
+
+ #print "ss", hardware_snapshot
+ #print "ss.GetMemory()", hardware_snapshot.GetMemory()
+ #print "ss.GetMemory().AsString()", hardware_snapshot.GetMemory().AsString()
+
+ # cCPUMemory memory : cCPUMemory & GetMemory()
+ # cCPUStack global_stack : cCPUStack pyGetGlobalStack()
+ # int thread_time_used : int pyGetThreadTimeUsed()
+ ### assume a single thread
+ # cHardwareCPU_Thread thread : tArray<cHardwareCPU_Thread> pyGetThreads()
+ # bool mal_active : bool GetMalActive()
+ # bool advance_ip : bool pyGetAdvanceIP()
+
def showFrame(self, frame_number = 0):
+ # XXX
+ self.anim.showFrame(frame_number)
+
old_frame_number = self.m_current_frame_number
old_radius = self.m_current_radius
old_genome = self.m_current_genome
@@ -242,198 +897,209 @@
frame_number = 0
if self.m_frames is not None and frame_number < self.m_frames.m_gestation_time:
+ # XXX
+ #self.debug_displayHardwareCPUSnapshot(frame_number)
+
self.m_current_frame_number = frame_number
self.m_current_radius = self.m_circle_radii[frame_number]
circle_pts = self.m_circles[frame_number]
head_circle_pts = self.m_head_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]
- 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.
- color = QColor()
- for i in xrange(displayed_genome_size):
- item = self.m_instruction_items[i]
- item.setX(circle_pts[i][0])
- item.setY(circle_pts[i][1])
- item.setText(self.m_current_genome[i])
- item.show()
+ #if self.m_frames.m_genome_info is not None:
+ # self.m_current_genome = self.m_frames.m_genome_info[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.
+ # color = QColor()
+ # for i in xrange(displayed_genome_size):
+ # item = self.m_instruction_items[i]
+ # item.setX(circle_pts[i][0])
+ # item.setY(circle_pts[i][1])
+ # item.setText(self.m_current_genome[i])
+ # item.show()
- bg_item = self.m_instruction_bg_items[i]
- bg_item.setX(circle_pts[i][0])
- bg_item.setY(circle_pts[i][1])
- color.setHsv((self.m_ops_dict[self.m_current_genome[i]] * 360) / len(self.m_ops_dict), 85, 248)
- bg_item.setBrush(QBrush(color))
- bg_item.show()
- else:
- # Update changed instruction_items.
- old_length = max(self.m_frames.m_last_copy_info[old_frame_number] + 1, self.m_frames.m_size)
- 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)
+ # bg_item = self.m_instruction_bg_items[i]
+ # bg_item.setX(circle_pts[i][0])
+ # bg_item.setY(circle_pts[i][1])
+ # color.setHsv((self.m_ops_dict[self.m_current_genome[i]] * 360) / len(self.m_ops_dict), 85, 248)
+ # bg_item.setBrush(QBrush(color))
+ # bg_item.show()
+ # else:
+ # # Update changed instruction_items.
+ # old_length = max(self.m_frames.m_last_copy_info[old_frame_number] + 1, self.m_frames.m_size)
+ # 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 xrange(compare_max):
- item = self.m_instruction_items[i]
- item.setX(circle_pts[i][0])
- item.setY(circle_pts[i][1])
- bg_item = self.m_instruction_bg_items[i]
- bg_item.setX(circle_pts[i][0])
- bg_item.setY(circle_pts[i][1])
- if old_length < new_length:
- for i in xrange(compare_max, range_end):
- item = self.m_instruction_items[i]
- item.setX(circle_pts[i][0])
- item.setY(circle_pts[i][1])
- bg_item = self.m_instruction_bg_items[i]
- bg_item.setX(circle_pts[i][0])
- bg_item.setY(circle_pts[i][1])
+ # if old_radius != self.m_current_radius:
+ # for i in xrange(compare_max):
+ # item = self.m_instruction_items[i]
+ # item.setX(circle_pts[i][0])
+ # item.setY(circle_pts[i][1])
+ # bg_item = self.m_instruction_bg_items[i]
+ # bg_item.setX(circle_pts[i][0])
+ # bg_item.setY(circle_pts[i][1])
+ # if old_length < new_length:
+ # for i in xrange(compare_max, range_end):
+ # item = self.m_instruction_items[i]
+ # item.setX(circle_pts[i][0])
+ # item.setY(circle_pts[i][1])
+ # bg_item = self.m_instruction_bg_items[i]
+ # bg_item.setX(circle_pts[i][0])
+ # bg_item.setY(circle_pts[i][1])
- for i in xrange(compare_max):
- instruction_item = self.m_instruction_items[i]
- if old_genome[i] == self.m_current_genome[i]:
- pass
- else:
- self.m_instruction_items[i].setText(self.m_current_genome[i])
- color = QColor()
- color.setHsv((self.m_ops_dict[self.m_current_genome[i]] * 360) / len(self.m_ops_dict), 85, 248)
- self.m_instruction_bg_items[i].setBrush(QBrush(color))
+ # for i in xrange(compare_max):
+ # instruction_item = self.m_instruction_items[i]
+ # if old_genome[i] == self.m_current_genome[i]:
+ # pass
+ # else:
+ # self.m_instruction_items[i].setText(self.m_current_genome[i])
+ # color = QColor()
+ # color.setHsv((self.m_ops_dict[self.m_current_genome[i]] * 360) / len(self.m_ops_dict), 85, 248)
+ # self.m_instruction_bg_items[i].setBrush(QBrush(color))
- if old_length < new_length:
- for i in xrange(compare_max, range_end):
- item = self.m_instruction_items[i]
- item.setText(self.m_current_genome[i])
- item.show()
- bg_item = self.m_instruction_bg_items[i]
- color = QColor()
- color.setHsv((self.m_ops_dict[self.m_current_genome[i]] * 360) / len(self.m_ops_dict), 85, 248)
- bg_item.setBrush(QBrush(color))
- bg_item.show()
- else:
- for i in xrange(compare_max, range_end):
- self.m_instruction_items[i].hide()
- self.m_instruction_bg_items[i].hide()
+ # if old_length < new_length:
+ # for i in xrange(compare_max, range_end):
+ # item = self.m_instruction_items[i]
+ # item.setText(self.m_current_genome[i])
+ # item.show()
+ # bg_item = self.m_instruction_bg_items[i]
+ # color = QColor()
+ # color.setHsv((self.m_ops_dict[self.m_current_genome[i]] * 360) / len(self.m_ops_dict), 85, 248)
+ # bg_item.setBrush(QBrush(color))
+ # bg_item.show()
+ # else:
+ # for i in xrange(compare_max, range_end):
+ # self.m_instruction_items[i].hide()
+ # self.m_instruction_bg_items[i].hide()
- if self.m_frames.m_ihead_moves_info is not None:
- self.m_current_ihead_move = self.m_frames.m_ihead_moves_info[frame_number]
- if old_ihead_move is None:
- # Update all ihead_move_items.
- for i in xrange(self.m_current_ihead_move):
- if len(self.m_ihead_move_items) < i:
- print "pyOrganismScopeView.showFrame(): i", i, ", len(self.m_ihead_move_items)", len(self.m_ihead_move_items)
- ihead_move_item = self.m_ihead_move_items[self.m_current_ihead_move]
- anchor_radius = float(m_current_radius - 10)
- anchor_radii_ratio = anchor_radius / self.m_current_radius
- control_radii_ratio = 0.4 + 0.5 * pow(2., -float(self.m_frames.m_ihead_moves[i][2])/25)
- #control_radii_ratio = 0.4 + 0.5 * pow(2., -float((1 + self.m_frames.m_ihead_moves[i][2]))/8)
- point_array = QPointArray(3)
- #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]]
- if len(circle_pts) > self.m_frames.m_ihead_moves[i][0]:
- from_circle_pt = circle_pts[self.m_frames.m_ihead_moves[i][0]]
- else:
- from_circle_pt = circle_pts[-1]
- if len(circle_pts) > self.m_frames.m_ihead_moves[i][1]:
- to_circle_pt = circle_pts[self.m_frames.m_ihead_moves[i][1]]
- else:
- to_circle_pt = circle_pts[-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] + to_circle_pt[0])/2 - self.m_circle_center_x),
- self.m_circle_center_y + control_radii_ratio * ((from_circle_pt[1] + to_circle_pt[1])/2 - self.m_circle_center_y),
- )
- point_array[2] = 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)
- )
- ihead_move_item.setControlPoints(point_array, False)
- if self.m_frames.m_ihead_moves[i][0] < self.m_frames.m_ihead_moves[i][1]:
- ihead_move_item.setPen(QPen(Qt.blue))
- else:
- ihead_move_item.setPen(QPen(Qt.red))
- ihead_move_item.show()
- else:
- # Update changed ihead_move_items.
- for i in xrange(self.m_current_ihead_move):
- ihead_move_item = self.m_ihead_move_items[i]
- anchor_radius = float(self.m_current_radius - 10)
- anchor_radii_ratio = anchor_radius / self.m_current_radius
- control_radii_ratio = 0.4 + 0.5 * pow(2., -float(self.m_frames.m_ihead_moves[i][2])/25)
- #control_radii_ratio = 0.4 + 0.5 * pow(2., -float((1 + self.m_frames.m_ihead_moves[i][2]))/8)
- point_array = QPointArray(3)
- #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]]
- if len(circle_pts) > self.m_frames.m_ihead_moves[i][0]:
- from_circle_pt = circle_pts[self.m_frames.m_ihead_moves[i][0]]
- else:
- from_circle_pt = circle_pts[-1]
- if len(circle_pts) > self.m_frames.m_ihead_moves[i][1]:
- to_circle_pt = circle_pts[self.m_frames.m_ihead_moves[i][1]]
- else:
- to_circle_pt = circle_pts[-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] + to_circle_pt[0])/2 - self.m_circle_center_x),
- self.m_circle_center_y + control_radii_ratio * ((from_circle_pt[1] + to_circle_pt[1])/2 - self.m_circle_center_y),
- ) )
- point_array.setPoint(2, 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)
- ) )
- ihead_move_item.setControlPoints(point_array, False)
- if self.m_frames.m_ihead_moves[i][0] < self.m_frames.m_ihead_moves[i][1]:
- ihead_move_item.setPen(QPen(Qt.blue))
- else:
- ihead_move_item.setPen(QPen(Qt.red))
- ihead_move_item.show()
- if self.m_current_ihead_move < old_ihead_move:
- for i in xrange(self.m_current_ihead_move, old_ihead_move):
- self.m_ihead_move_items[i].hide()
- pass
+
+
+
+ # if self.m_frames.m_ihead_moves_info is not None:
+ # self.m_current_ihead_move = self.m_frames.m_ihead_moves_info[frame_number]
+ # if old_ihead_move is None:
+ # # Update all ihead_move_items.
+ # for i in xrange(self.m_current_ihead_move):
+ # if len(self.m_ihead_move_items) < i:
+ # print "pyOrganismScopeView.showFrame(): i", i, ", len(self.m_ihead_move_items)", len(self.m_ihead_move_items)
+ # ihead_move_item = self.m_ihead_move_items[self.m_current_ihead_move]
+ # anchor_radius = float(m_current_radius - 10)
+ # anchor_radii_ratio = anchor_radius / self.m_current_radius
+ # control_radii_ratio = 0.4 + 0.5 * pow(2., -float(self.m_frames.m_ihead_moves[i][2])/25)
+ # #control_radii_ratio = 0.4 + 0.5 * pow(2., -float((1 + self.m_frames.m_ihead_moves[i][2]))/8)
+ # point_array = QPointArray(3)
+ # #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]]
+ # if len(circle_pts) > self.m_frames.m_ihead_moves[i][0]:
+ # from_circle_pt = circle_pts[self.m_frames.m_ihead_moves[i][0]]
+ # else:
+ # from_circle_pt = circle_pts[-1]
+ # if len(circle_pts) > self.m_frames.m_ihead_moves[i][1]:
+ # to_circle_pt = circle_pts[self.m_frames.m_ihead_moves[i][1]]
+ # else:
+ # to_circle_pt = circle_pts[-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] + to_circle_pt[0])/2 - self.m_circle_center_x),
+ # self.m_circle_center_y + control_radii_ratio * ((from_circle_pt[1] + to_circle_pt[1])/2 - self.m_circle_center_y),
+ # )
+ # point_array[2] = 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)
+ # )
+ # ihead_move_item.setControlPoints(point_array, False)
+ # if self.m_frames.m_ihead_moves[i][0] < self.m_frames.m_ihead_moves[i][1]:
+ # ihead_move_item.setPen(QPen(Qt.blue))
+ # else:
+ # ihead_move_item.setPen(QPen(Qt.red))
+ # ihead_move_item.show()
+ # else:
+ # # Update changed ihead_move_items.
+ # for i in xrange(self.m_current_ihead_move):
+ # ihead_move_item = self.m_ihead_move_items[i]
+ # anchor_radius = float(self.m_current_radius - 10)
+ # anchor_radii_ratio = anchor_radius / self.m_current_radius
+ # control_radii_ratio = 0.4 + 0.5 * pow(2., -float(self.m_frames.m_ihead_moves[i][2])/25)
+ # #control_radii_ratio = 0.4 + 0.5 * pow(2., -float((1 + self.m_frames.m_ihead_moves[i][2]))/8)
+ # point_array = QPointArray(3)
+ # #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]]
+ # if len(circle_pts) > self.m_frames.m_ihead_moves[i][0]:
+ # from_circle_pt = circle_pts[self.m_frames.m_ihead_moves[i][0]]
+ # else:
+ # from_circle_pt = circle_pts[-1]
+ # if len(circle_pts) > self.m_frames.m_ihead_moves[i][1]:
+ # to_circle_pt = circle_pts[self.m_frames.m_ihead_moves[i][1]]
+ # else:
+ # to_circle_pt = circle_pts[-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] + to_circle_pt[0])/2 - self.m_circle_center_x),
+ # self.m_circle_center_y + control_radii_ratio * ((from_circle_pt[1] + to_circle_pt[1])/2 - self.m_circle_center_y),
+ # ) )
+ # point_array.setPoint(2, 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)
+ # ) )
+ # ihead_move_item.setControlPoints(point_array, False)
+ # if self.m_frames.m_ihead_moves[i][0] < self.m_frames.m_ihead_moves[i][1]:
+ # ihead_move_item.setPen(QPen(Qt.blue))
+ # else:
+ # ihead_move_item.setPen(QPen(Qt.red))
+ # ihead_move_item.show()
+ # if self.m_current_ihead_move < old_ihead_move:
+ # for i in xrange(self.m_current_ihead_move, old_ihead_move):
+ # self.m_ihead_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.
- if self.m_frames.m_ihead_info is not None:
- self.m_current_ihead = self.m_frames.m_ihead_info[frame_number]
- if len(head_circle_pts) < self.m_current_ihead:
- self.m_current_ihead = -1
- self.m_ihead_item.setX(head_circle_pts[self.m_current_ihead][0])
- self.m_ihead_item.setY(head_circle_pts[self.m_current_ihead][1])
- self.m_ihead_item.show()
+ #if self.m_frames.m_ihead_info is not None:
+ # self.m_current_ihead = self.m_frames.m_ihead_info[frame_number]
+ # if len(head_circle_pts) < self.m_current_ihead:
+ # self.m_current_ihead = -1
+ # self.m_ihead_item.setX(head_circle_pts[self.m_current_ihead][0])
+ # self.m_ihead_item.setY(head_circle_pts[self.m_current_ihead][1])
+ # self.m_ihead_item.show()
- if self.m_frames.m_rhead_info is not None:
- self.m_current_rhead = self.m_frames.m_rhead_info[frame_number]
- if len(head_circle_pts) <= self.m_current_rhead:
- self.m_current_rhead = -1
- self.m_rhead_item.setX(head_circle_pts[self.m_current_rhead][0])
- self.m_rhead_item.setY(head_circle_pts[self.m_current_rhead][1])
- self.m_rhead_item.show()
- # Update changed rhead_item.
+ #if self.m_frames.m_rhead_info is not None:
+ # self.m_current_rhead = self.m_frames.m_rhead_info[frame_number]
+ # if len(head_circle_pts) <= self.m_current_rhead:
+ # self.m_current_rhead = -1
+ # self.m_rhead_item.setX(head_circle_pts[self.m_current_rhead][0])
+ # self.m_rhead_item.setY(head_circle_pts[self.m_current_rhead][1])
+ # self.m_rhead_item.show()
+ # # Update changed rhead_item.
- if self.m_frames.m_whead_info is not None:
- self.m_current_whead = self.m_frames.m_whead_info[frame_number]
- if len(head_circle_pts) <= self.m_current_whead:
- self.m_current_whead = -1
- self.m_whead_item.setX(head_circle_pts[self.m_current_whead][0])
- self.m_whead_item.setY(head_circle_pts[self.m_current_whead][1])
- self.m_whead_item.show()
- # Update changed whead_item.
+ #if self.m_frames.m_whead_info is not None:
+ # self.m_current_whead = self.m_frames.m_whead_info[frame_number]
+ # if len(head_circle_pts) <= self.m_current_whead:
+ # self.m_current_whead = -1
+ # self.m_whead_item.setX(head_circle_pts[self.m_current_whead][0])
+ # self.m_whead_item.setY(head_circle_pts[self.m_current_whead][1])
+ # self.m_whead_item.show()
+ # # Update changed whead_item.
- if self.m_frames.m_fhead_info is not None:
- self.m_current_fhead = self.m_frames.m_fhead_info[frame_number]
- if len(head_circle_pts) <= self.m_current_fhead:
- self.m_current_fhead = -1
- self.m_fhead_item.setX(head_circle_pts[self.m_current_fhead][0])
- self.m_fhead_item.setY(head_circle_pts[self.m_current_fhead][1])
- self.m_fhead_item.show()
- # Update changed fhead_item.
+ #if self.m_frames.m_fhead_info is not None:
+ # self.m_current_fhead = self.m_frames.m_fhead_info[frame_number]
+ # if len(head_circle_pts) <= self.m_current_fhead:
+ # self.m_current_fhead = -1
+ # self.m_fhead_item.setX(head_circle_pts[self.m_current_fhead][0])
+ # self.m_fhead_item.setY(head_circle_pts[self.m_current_fhead][1])
+ # self.m_fhead_item.show()
+ # # Update changed fhead_item.
self.m_canvas.update()
Modified: trunk/source/python/AvidaGui2/pyPetriConfigureCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyPetriConfigureCtrl.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyPetriConfigureCtrl.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -1,5 +1,7 @@
# -*- coding: utf-8 -*-
+from descr import descr
+
from pyAvida import pyAvida
from pyFreezeDialogCtrl import pyFreezeDialogCtrl
from pyPetriConfigureView import pyPetriConfigureView
@@ -28,6 +30,7 @@
pass
def construct(self, session_mdl):
+ descr()
self.m_session_mdl = session_mdl
self.m_session_petri_view = pyPetriConfigureView()
self.m_avida = None
@@ -60,6 +63,8 @@
self.connect(self.m_session_mdl.m_session_mdtr,
PYSIGNAL("doEnablePetriDishSig"), self.EnablePetriConfigureSlot)
self.connect(self.m_session_mdl.m_session_mdtr,
+ PYSIGNAL("doInitializeAvidaPhaseSyncSig"), self.CreateFilesFromPetriSlot)
+ 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)
@@ -76,6 +81,7 @@
self.populated = False
def destruct(self):
+ descr()
self.m_session_petri_view = None
self.m_avida = None
self.full_petri_dict = {}
@@ -163,6 +169,7 @@
self.StopAtSpinBox.setEnabled(True)
def FillDishSlot(self, dish_name, petri_dict):
+ descr()
self.full_petri_dict = petri_dict.dictionary
settings_dict = petri_dict.dictionary["SETTINGS"]
@@ -226,6 +233,7 @@
def DisablePetriConfigureSlot(self):
+ descr()
# Turn off the controls
@@ -259,6 +267,7 @@
PYSIGNAL("doDisablePetriDishSig"), ())
def EnablePetriConfigureSlot(self):
+ descr()
# Turn on the controls
@@ -291,6 +300,7 @@
def CreateFilesFromPetriSlot(self, out_dir = None):
+ descr()
# The input files will be placed in a python generated temporary directory
# ouput files will be stored in tmp_dir/output until the data is frozen
@@ -305,6 +315,7 @@
PYSIGNAL("doInitializeAvidaPhaseIISig"), (os.path.join(self.m_session_mdl.m_tempdir, "genesis.avida"),))
def Form2Dictionary(self):
+ descr()
settings_dict = {}
# Write START_CREATUREx for all the organisms in the Ancestor Combo Box
@@ -337,8 +348,8 @@
settings_dict["DEATH_METHOD"] = 2
return settings_dict
- def FreezePetriSlot(self, population_dict = None,
- send_reset_signal = False, send_quit_signal = False):
+ def FreezePetriSlot(self, population_dict = None, send_reset_signal = False, send_quit_signal = False):
+ descr()
tmp_dict = {}
tmp_dict["SETTINGS"] = self.Form2Dictionary()
m_pop_up_freezer_file_name = pyFreezeDialogCtrl()
@@ -385,6 +396,7 @@
def doLoadPetriDishConfigFileSlot(self, genesisFileName = None):
+ descr()
genesis = cGenesis()
genesis.Open(cString(genesisFileName))
if 0 == genesis.IsOpen():
@@ -407,6 +419,7 @@
self.setAvidaSlot)
def dropEvent( self, e ):
+ descr()
freezer_item_name = QString()
if ( QTextDrag.decode( e, freezer_item_name ) ) :
if os.path.exists(str(freezer_item_name)) == False:
@@ -415,6 +428,7 @@
self.emit(PYSIGNAL("petriDishDroppedInPopViewSig"), (e,))
def petriDropped(self, e):
+ descr()
# Try to decode to the data you understand...
freezer_item_name = QString()
if ( QTextDrag.decode( e, freezer_item_name ) and not self.DishDisabled) :
Modified: trunk/source/python/AvidaGui2/pyPetriDishCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyPetriDishCtrl.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyPetriDishCtrl.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -8,6 +8,8 @@
@kgn
"""
+from descr import *
+
from AvidaCore import cConfig
from AvidaCore import cInitFile, cString
@@ -158,6 +160,7 @@
self.updateCellItems(True)
def setDragSlot(self, org_clicked_on_item = None):
+ descr(org_clicked_on_item)
if org_clicked_on_item:
clicked_cell_num = org_clicked_on_item.m_population_cell.GetID()
clicked_cell = self.m_avida.m_population.GetCell(int(clicked_cell_num))
@@ -325,4 +328,5 @@
def __init__(self, item_name, parent=None, name=None):
QStoredDrag.__init__(self, 'item name (QString)', parent, name)
self.setText(item_name)
+ descr(item_name)
Modified: trunk/source/python/AvidaGui2/pySessionCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pySessionCtrl.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pySessionCtrl.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -106,6 +106,11 @@
self.connect(
self.m_session_mdl.m_session_mdtr,
+ PYSIGNAL("doSyncSig"),
+ self.doSync)
+
+ self.connect(
+ self.m_session_mdl.m_session_mdtr,
PYSIGNAL("doStartSig"),
self.doStart)
@@ -197,6 +202,12 @@
self.m_session_mdl.m_main_mdl.m_main_mdtr.m_main_controller_factory_mdtr.emit(
qt.PYSIGNAL("deleteControllerSig"), (self,))
+ def doSync(self):
+ self.m_session_mdl.m_session_mdtr.emit(
+ PYSIGNAL("doInitializeAvidaPhaseSyncSig"),
+ (self.m_session_mdl.m_tempdir,))
+ self.m_avida.m_avida_thread_mdtr.emit(PYSIGNAL("AvidaUpdatedSig"), ())
+
def doStart(self):
if self.sessionInitialized == False:
self.m_session_mdl.m_session_mdtr.emit(
Modified: trunk/source/python/AvidaGui2/pyTemporaryReloads.py
===================================================================
--- trunk/source/python/AvidaGui2/pyTemporaryReloads.py 2005-10-16 19:25:00 UTC (rev 348)
+++ trunk/source/python/AvidaGui2/pyTemporaryReloads.py 2005-10-18 19:11:59 UTC (rev 349)
@@ -64,6 +64,8 @@
"AvidaGui2.pyMapProfile",
"AvidaGui2.pyNavBarView",
"AvidaGui2.pyNavBarCtrl",
+ "AvidaGui2.pyOrganismConfigureView",
+ "AvidaGui2.pyOrganismConfigureCtrl",
"AvidaGui2.pyOrganismScopeView",
"AvidaGui2.pyOrganismScopeCtrl",
"AvidaGui2.pyPetriConfigureView",
More information about the Avida-cvs
mailing list