[Avida-cvs] [Avida2-svn] r225 - trunk/source/python/AvidaGui2
kaben@myxo.css.msu.edu
kaben at myxo.css.msu.edu
Tue Jul 5 15:19:48 PDT 2005
Author: kaben
Date: 2005-07-05 18:19:48 -0400 (Tue, 05 Jul 2005)
New Revision: 225
Modified:
trunk/source/python/AvidaGui2/pyAnalyzeControlsView.ui
trunk/source/python/AvidaGui2/pyAvida.py
trunk/source/python/AvidaGui2/pyGradientScaleView.py
trunk/source/python/AvidaGui2/pyHardwareCPUTrace.py
trunk/source/python/AvidaGui2/pyMapProfile.py
trunk/source/python/AvidaGui2/pyOneAna_GraphCtrl.py
trunk/source/python/AvidaGui2/pyOneOrg_ScopeCtrl.py
trunk/source/python/AvidaGui2/pyOneOrg_ScopeView.ui
trunk/source/python/AvidaGui2/pyOrganismScopeCtrl.py
trunk/source/python/AvidaGui2/pyOrganismScopeView.py
trunk/source/python/AvidaGui2/pyPetriDishCtrl.py
trunk/source/python/AvidaGui2/py_test_utils.py
Log:
Changes to the organism view:
- Can drag organism from freezer into view
- Can use rewind, play, pause, and cue buttons to play organism
gestation
- Instruction head path is now marked by lines
- Instructions have correspondingly colored backgrounds
Modified: trunk/source/python/AvidaGui2/pyAnalyzeControlsView.ui
===================================================================
--- trunk/source/python/AvidaGui2/pyAnalyzeControlsView.ui 2005-07-05 20:05:52 UTC (rev 224)
+++ trunk/source/python/AvidaGui2/pyAnalyzeControlsView.ui 2005-07-05 22:19:48 UTC (rev 225)
@@ -44,7 +44,7 @@
</spacer>
<widget class="QToolButton">
<property name="name">
- <cstring>toolButton23</cstring>
+ <cstring>m_rewind_btn</cstring>
</property>
<property name="text">
<string></string>
@@ -55,11 +55,11 @@
</widget>
<widget class="QWidgetStack">
<property name="name">
- <cstring>widgetStack3</cstring>
+ <cstring>m_widget_stack</cstring>
</property>
<widget class="QWidget">
<property name="name">
- <cstring>WStackPage</cstring>
+ <cstring>m_play_page</cstring>
</property>
<attribute name="id">
<number>0</number>
@@ -76,7 +76,7 @@
</property>
<widget class="QToolButton">
<property name="name">
- <cstring>toolButton19</cstring>
+ <cstring>m_play_btn</cstring>
</property>
<property name="text">
<string></string>
@@ -92,7 +92,7 @@
</widget>
<widget class="QWidget">
<property name="name">
- <cstring>WStackPage</cstring>
+ <cstring>m_pause_page</cstring>
</property>
<attribute name="id">
<number>1</number>
@@ -109,7 +109,7 @@
</property>
<widget class="QToolButton">
<property name="name">
- <cstring>toolButton20</cstring>
+ <cstring>m_pause_btn</cstring>
</property>
<property name="text">
<string></string>
@@ -126,7 +126,7 @@
</widget>
<widget class="QToolButton">
<property name="name">
- <cstring>toolButton24</cstring>
+ <cstring>m_cue_btn</cstring>
</property>
<property name="text">
<string></string>
Modified: trunk/source/python/AvidaGui2/pyAvida.py
===================================================================
--- trunk/source/python/AvidaGui2/pyAvida.py 2005-07-05 20:05:52 UTC (rev 224)
+++ trunk/source/python/AvidaGui2/pyAvida.py 2005-07-05 22:19:48 UTC (rev 225)
@@ -132,9 +132,10 @@
pass
def doStepAvidaSlot(self, cell_id):
- print("doStepAvidaSlot")
+ print("pyAvida.doStepAvidaSlot() ...")
def doCloseAvidaSlot(self):
+ print("pyAvida.doCloseAvidaSlot() ...")
self.m_avida_threaded_driver.doExit()
if self.m_avida_threaded_driver.m_thread.isAlive():
self.m_avida_threaded_driver.m_thread.join()
Modified: trunk/source/python/AvidaGui2/pyGradientScaleView.py
===================================================================
--- trunk/source/python/AvidaGui2/pyGradientScaleView.py 2005-07-05 20:05:52 UTC (rev 224)
+++ trunk/source/python/AvidaGui2/pyGradientScaleView.py 2005-07-05 22:19:48 UTC (rev 225)
@@ -92,7 +92,7 @@
#text_height = self.fontMetrics().height()
#label_width = self.fontMetrics().width("0.00000")
- for i in range(self.s_stripes):
+ for i in xrange(self.s_stripes):
x = float(i) / float(self.s_stripes);
p.fillRect(
(self.s_left_margin + x*plot_width),
Modified: trunk/source/python/AvidaGui2/pyHardwareCPUTrace.py
===================================================================
--- trunk/source/python/AvidaGui2/pyHardwareCPUTrace.py 2005-07-05 20:05:52 UTC (rev 224)
+++ trunk/source/python/AvidaGui2/pyHardwareCPUTrace.py 2005-07-05 22:19:48 UTC (rev 225)
@@ -41,7 +41,7 @@
self.m_last_copied_instruction = max(
[hardware.GetMemory().GetFlagCopied(i) and i or self.m_last_copied_instruction \
- for i in range(self.m_last_copied_instruction, hardware.GetMemory().GetSize())]
+ for i in xrange(self.m_last_copied_instruction, hardware.GetMemory().GetSize())]
)
self.m_last_copy_info.append(self.m_last_copied_instruction)
Modified: trunk/source/python/AvidaGui2/pyMapProfile.py
===================================================================
--- trunk/source/python/AvidaGui2/pyMapProfile.py 2005-07-05 20:05:52 UTC (rev 224)
+++ trunk/source/python/AvidaGui2/pyMapProfile.py 2005-07-05 22:19:48 UTC (rev 225)
@@ -155,7 +155,7 @@
s = sigmoid(1 - x, 0.1, 30) * 255
return QColor(h, s, v, QColor.Hsv)
- self.m_color_cache = [sigmoidDoubleToColor(float(n)/(self.m_color_cache_size - 1)) for n in range(self.m_color_cache_size)]
+ self.m_color_cache = [sigmoidDoubleToColor(float(n)/(self.m_color_cache_size - 1)) for n in xrange(self.m_color_cache_size)]
self.m_empty_color = QColor(Qt.black)
self.m_off_scale_color = QColor(Qt.white)
def sigmoidColorLookup(x):
Modified: trunk/source/python/AvidaGui2/pyOneAna_GraphCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOneAna_GraphCtrl.py 2005-07-05 20:05:52 UTC (rev 224)
+++ trunk/source/python/AvidaGui2/pyOneAna_GraphCtrl.py 2005-07-05 22:19:48 UTC (rev 225)
@@ -113,7 +113,7 @@
x_array = zeros(init_file.GetNumLines(), Float)
y_array = zeros(init_file.GetNumLines(), Float)
- for line_id in range(init_file.GetNumLines()):
+ for line_id in xrange(init_file.GetNumLines()):
line = init_file.GetLine(line_id)
x_array[line_id] = line.GetWord(colx - 1).AsDouble()
y_array[line_id] = line.GetWord(coly - 1).AsDouble()
Modified: trunk/source/python/AvidaGui2/pyOneOrg_ScopeCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOneOrg_ScopeCtrl.py 2005-07-05 20:05:52 UTC (rev 224)
+++ trunk/source/python/AvidaGui2/pyOneOrg_ScopeCtrl.py 2005-07-05 22:19:48 UTC (rev 225)
@@ -2,6 +2,7 @@
from pyOneOrg_ScopeView import pyOneOrg_ScopeView
import qt
+import os
class pyOneOrg_ScopeCtrl(pyOneOrg_ScopeView):
@@ -13,19 +14,44 @@
self.m_organism_scope_ctrl.construct(self.m_session_mdl)
self.m_execution_step_slider.setMinValue(0)
self.m_execution_step_slider.setMaxValue(0)
+ self.m_clock = qt.QTime()
+ self.m_timer = qt.QTimer()
+ self.m_next = qt.QTimer()
+ self.m_timer_interval = 250
+
self.connect(
self.m_execution_step_slider, qt.SIGNAL("valueChanged(int)"),
- self.m_organism_scope_ctrl.showFrame)
+ self.sliderValueChangedSlot)
self.connect(
+ self.m_execution_step_slider, qt.SIGNAL("sliderMoved(int)"),
+ self.sliderMovedSlot)
+
+ self.connect(
self.m_organism_scope_ctrl, qt.PYSIGNAL("gestationTimeChangedSig"),
self.gestationTimeChangedSlot)
self.connect(
self.m_organism_scope_ctrl, qt.PYSIGNAL("executionStepResetSig"),
self.executionStepResetSlot)
+ self.connect(
+ self.m_analyze_controls_ctrl.m_rewind_btn, qt.SIGNAL("clicked()"),
+ self.rewindSlot)
+ self.connect(
+ self.m_analyze_controls_ctrl.m_cue_btn, qt.SIGNAL("clicked()"),
+ self.cueSlot)
+ self.connect(
+ self.m_analyze_controls_ctrl.m_play_btn, qt.SIGNAL("clicked()"),
+ self.playSlot)
+ self.connect(
+ self.m_analyze_controls_ctrl.m_pause_btn, qt.SIGNAL("clicked()"),
+ self.pauseSlot)
+
+ self.connect(self.m_timer, qt.SIGNAL("timeout()"), self.advanceSlot)
+
def gestationTimeChangedSlot(self, gestation_time):
print "pyOneOrg_ScopeCtrl.gestationTimeChangedSlot called, gestation_time ", gestation_time
self.m_execution_step_slider.setMaxValue(gestation_time - 1)
+ self.rewindSlot()
def executionStepResetSlot(self, execution_step):
print "pyOneOrg_ScopeCtrl.executionStepResetSlot called, execution_step ", execution_step
@@ -33,3 +59,39 @@
# 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):
+ self.m_organism_scope_ctrl.showFrame(frame_number)
+
+ def sliderMovedSlot(self, frame_number):
+ print "pyOneOrg_ScopeCtrl.sliderMovedSlot()."
+ self.pauseSlot()
+
+ def rewindSlot(self):
+ print "pyOneOrg_ScopeCtrl.rewindSlot()."
+ self.m_execution_step_slider.setValue(0)
+ self.pauseSlot()
+
+ def cueSlot(self):
+ print "pyOneOrg_ScopeCtrl.cueSlot()."
+ self.m_execution_step_slider.setValue(self.m_execution_step_slider.maxValue())
+ self.pauseSlot()
+
+ def pauseSlot(self):
+ print "pyOneOrg_ScopeCtrl.pauseSlot()."
+ self.m_analyze_controls_ctrl.m_widget_stack.raiseWidget(self.m_analyze_controls_ctrl.m_play_page)
+ self.m_timer.stop()
+
+ def playSlot(self):
+ print "pyOneOrg_ScopeCtrl.playSlot()."
+ self.m_analyze_controls_ctrl.m_widget_stack.raiseWidget(self.m_analyze_controls_ctrl.m_pause_page)
+ self.m_timer.start(self.m_timer_interval, True)
+ self.m_clock.start()
+
+ def advanceSlot(self):
+ #print "pyOneOrg_ScopeCtrl.advanceSlot()."
+ slider_value = self.m_execution_step_slider.value()
+ if self.m_execution_step_slider.maxValue() <= slider_value:
+ self.pauseSlot()
+ else:
+ self.m_execution_step_slider.setValue(slider_value + 1)
+ self.m_timer.start(min(0, self.m_timer_interval - self.m_clock.restart(), True))
Modified: trunk/source/python/AvidaGui2/pyOneOrg_ScopeView.ui
===================================================================
--- trunk/source/python/AvidaGui2/pyOneOrg_ScopeView.ui 2005-07-05 20:05:52 UTC (rev 224)
+++ trunk/source/python/AvidaGui2/pyOneOrg_ScopeView.ui 2005-07-05 22:19:48 UTC (rev 225)
@@ -70,7 +70,7 @@
</spacer>
<widget class="pyAnalyzeControlsCtrl">
<property name="name">
- <cstring>pyAnalyzeControlsCtrl1</cstring>
+ <cstring>m_analyze_controls_ctrl</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
@@ -123,6 +123,8 @@
<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>
Modified: trunk/source/python/AvidaGui2/pyOrganismScopeCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOrganismScopeCtrl.py 2005-07-05 20:05:52 UTC (rev 224)
+++ trunk/source/python/AvidaGui2/pyOrganismScopeCtrl.py 2005-07-05 22:19:48 UTC (rev 225)
@@ -20,8 +20,10 @@
if not name: self.setName("pyOrganismScopeCtrl")
def construct(self, session_mdl):
+ print "pyOrganismScopeCtrl.construct()."
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)
@@ -29,6 +31,41 @@
self.m_session_mdl.m_session_mdtr, PYSIGNAL("setDebugOrganismFileSig"),
self.setDebugOrganismFileSlot)
+ def dragEnterEvent( self, e ):
+ e.acceptAction(True)
+ if e.isAccepted():
+ print "pyOrganismScopeCtrl.dragEnterEvent(e): isAccepted."
+ else:
+ print "pyOrganismScopeCtrl.dragEnterEvent(e): not isAccepted."
+
+ freezer_item_name = QString()
+ if ( QTextDrag.decode( e, freezer_item_name ) ) :
+ if os.path.exists( str(freezer_item_name)) == False:
+ print "pyOrganismScopeCtrl.dragEnterEvent(e): that was not a valid path."
+ else:
+ print "pyOrganismScopeCtrl.dragEnterEvent(e): that was a valid path."
+ print "pyOrganismScopeCtrl.dragEnterEvent(e): freezer_item_name", freezer_item_name
+ if str(freezer_item_name).endswith('.organism'):
+ print "pyOrganismScopeCtrl.dragEnterEvent(e): freezer_item_name ends with .organism."
+ e.accept()
+ else:
+ print "pyOrganismScopeCtrl.dragEnterEvent(e): freezer_item_name doesn't end with .organism."
+
+ def dropEvent( self, e ):
+ freezer_item_name = QString()
+ if ( QTextDrag.decode( e, freezer_item_name ) ) :
+ if os.path.exists( str(freezer_item_name)) == False:
+ print "pyOrganismScopeCtrl.dropEvent(e): that was not a valid path."
+ else:
+ print "pyOrganismScopeCtrl.dropEvent(e): that was a valid path."
+ if str(freezer_item_name).endswith('.organism'):
+ print "pyOrganismScopeCtrl.dropEvent(e): freezer_item_name ends with .organism."
+ e.accept()
+ self.m_session_mdl.m_session_mdtr.emit(PYSIGNAL("setDebugOrganismFileSig"), (freezer_item_name,))
+ else:
+ print "pyOrganismScopeCtrl.dropEvent(e): freezer_item_name doesn't end with .organism."
+
+
def setAvidaSlot(self, avida):
print "pyOrganismScopeCtrl.setAvidaSlot() ..."
old_avida = self.m_avida
@@ -48,11 +85,14 @@
# Translate from string genome representation to actual command names.
inst_names = {}
+ ops = {}
inst_set = self.m_avida.m_environment.GetInstSet()
instruction = cInstruction()
- for id in range(inst_set.GetSize()):
+ for id in xrange(inst_set.GetSize()):
instruction.SetOp(id)
inst_names[instruction.GetSymbol()] = str(inst_set.GetName(instruction))
+ ops[instruction.GetSymbol()] = id
self.setInstNames(inst_names)
+ self.setOps(ops)
self.setFrames(hardware_tracer.m_hardware_trace)
Modified: trunk/source/python/AvidaGui2/pyOrganismScopeView.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOrganismScopeView.py 2005-07-05 20:05:52 UTC (rev 224)
+++ trunk/source/python/AvidaGui2/pyOrganismScopeView.py 2005-07-05 22:19:48 UTC (rev 225)
@@ -1,10 +1,38 @@
# -*- coding: utf-8 -*-
-from qt import PYSIGNAL, QBrush, QColor, QFont, QFontMetrics, QPointArray, QPoint, QScrollView, Qt, QWMatrix
-from qtcanvas import QCanvas, QCanvasSpline, QCanvasText, QCanvasView
+from qt import PYSIGNAL, QBrush, QColor, QFont, QFontMetrics, QPen, QPointArray, QPoint, QScrollView, Qt, QWMatrix
+from qtcanvas import QCanvas, QCanvasEllipse, QCanvasLine, QCanvasSpline, QCanvasText, QCanvasView
import math
+class pyHeadPath:
+ def __init__(self, canvas):
+ self.m_canvas = canvas
+ self.m_line1 = QCanvasLine(canvas)
+ self.m_line2 = QCanvasLine(canvas)
+ def setCanvas(self, canvas):
+ self.m_canvas = canvas
+ self.m_line1.setCanvas(canvas)
+ self.m_line2.setCanvas(canvas)
+ def setControlPoints(self, point_array, ignored_bool):
+ x0 = point_array.point(0)[0]
+ x1 = point_array.point(1)[0]
+ x2 = point_array.point(2)[0]
+ y0 = point_array.point(0)[1]
+ y1 = point_array.point(1)[1]
+ y2 = point_array.point(2)[1]
+ self.m_line1.setPoints(x0, y0, x1, y1)
+ self.m_line2.setPoints(x1, y1, x2, y2)
+ def setPen(self, pen):
+ self.m_line1.setPen(pen)
+ self.m_line2.setPen(pen)
+ def show(self):
+ self.m_line1.show()
+ self.m_line2.show()
+ def hide(self):
+ self.m_line1.hide()
+ self.m_line2.hide()
+
class pyOrganismScopeView(QCanvasView):
def __init__(self,parent = None,name = None,fl = 0):
QCanvasView.__init__(self,parent,name,fl)
@@ -29,15 +57,18 @@
def reset(self):
if hasattr(self, "m_instruction_items") and self.m_instruction_items is not None:
- for instruction_item in self.m_instruction_items:
- instruction_item.setCanvas(None)
+ for item in self.m_instruction_items:
+ item.setCanvas(None)
+ if hasattr(self, "m_ihead_move_items") and self.m_ihead_move_items is not None:
+ for item in self.m_ihead_move_items:
+ item.setCanvas(None)
self.m_instruction_items = None
self.m_task_items = None
self.m_ihead_item = None
self.m_rhead_item = None
self.m_whead_item = None
self.m_fhead_item = None
- self.m_rhead_move_items = None
+ self.m_ihead_move_items = None
self.m_task_names = None
self.m_inst_names = None
@@ -52,29 +83,37 @@
self.m_current_rhead = None
self.m_current_whead = None
self.m_current_fhead = None
- self.m_current_rhead_move = None
+ self.m_current_ihead_move = None
# Hmm; can't emit gestationTimeChangedSig(0) without causing absurd slider values. @kgn
self.emit(PYSIGNAL("gestationTimeChangedSig"),(1,))
self.emit(PYSIGNAL("executionStepResetSig"),(0,))
def setTaskNames(self, task_names = None):
- old_task_names = self.m_task_names
self.m_task_names = task_names
def setInstNames(self, inst_names = None):
- old_inst_names = self.m_inst_names
self.m_inst_names = inst_names
+ def setOps(self, ops = None):
+ self.m_ops_dict = ops
+
def setFrames(self, frames = None):
self.reset()
self.m_frames = frames
if self.m_frames is not None:
if self.m_frames.m_genome_info is not None:
self.m_max_genome_size = max([len(genome) for genome in self.m_frames.m_genome_info])
- self.m_instruction_items = [QCanvasText(self.m_canvas) for i in range(self.m_max_genome_size)]
+ self.m_instruction_items = [QCanvasText(self.m_canvas) for i in xrange(self.m_max_genome_size)]
+ self.m_instruction_bg_items = [QCanvasEllipse(self.m_canvas) for i in xrange(self.m_max_genome_size)]
+ for item in self.m_instruction_items:
+ item.setTextFlags(Qt.AlignCenter)
+ item.setZ(1.)
+ for item in self.m_instruction_bg_items:
+ item.setZ(0.)
if self.m_frames.m_ihead_moves is not None:
- self.m_rhead_move_items = [QCanvasSpline(self.m_canvas) for i in range(len(self.m_frames.m_ihead_moves))]
+ #self.m_ihead_move_items = [QCanvasSpline(self.m_canvas) for i in xrange(len(self.m_frames.m_ihead_moves))]
+ self.m_ihead_move_items = [pyHeadPath(self.m_canvas) for i in xrange(len(self.m_frames.m_ihead_moves))]
self.emit(PYSIGNAL("gestationTimeChangedSig"),(self.m_frames.m_gestation_time,))
self.updateCircle()
self.showFrame(0)
@@ -99,19 +138,22 @@
if self.m_instruction_items is not None:
text_height = 2 * 3.14159 * self.m_max_circle_radius / self.m_max_genome_size
font = QFont(self.font())
- font.setPointSizeFloat(self.m_font_oversize_factor * text_height * self.m_font_points_per_pixel)
- for instruction_item in self.m_instruction_items:
- instruction_item.setFont(font)
+ point_size_float = self.m_font_oversize_factor * text_height * self.m_font_points_per_pixel
+ font.setPointSizeFloat(point_size_float)
+ for item in self.m_instruction_items:
+ item.setFont(font)
+ for item in self.m_instruction_bg_items:
+ item.setSize(point_size_float, point_size_float)
self.m_circles = []
self.m_circle_radii = []
- for frame_no in range(self.m_frames.m_gestation_time):
+ for frame_no in xrange(self.m_frames.m_gestation_time):
organism_current_size = max(self.m_frames.m_last_copy_info[frame_no] + 1, self.m_frames.m_size)
circumference = text_height * organism_current_size
radius = circumference / (2 * 3.14159)
dt = 2 * 3.14159 / (organism_current_size + 1)
angle_offset = 3.14159 / 2
circle_pts = []
- for i in range(organism_current_size):
+ for i in xrange(organism_current_size):
theta = i * dt + angle_offset
c = math.cos(theta)
s = -math.sin(theta)
@@ -130,7 +172,7 @@
old_rhead = self.m_current_rhead
old_whead = self.m_current_whead
old_fhead = self.m_current_fhead
- old_rhead_move = self.m_current_rhead_move
+ old_ihead_move = self.m_current_ihead_move
self.m_current_frame_number = 0
self.m_current_radius = None
@@ -140,7 +182,7 @@
self.m_current_rhead = None
self.m_current_whead = None
self.m_current_fhead = None
- self.m_current_rhead_move = None
+ self.m_current_ihead_move = None
circle_pts = None
@@ -153,12 +195,20 @@
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.
- for i in range(displayed_genome_size):
- instruction_item = self.m_instruction_items[i]
- instruction_item.setX(circle_pts[i][0])
- instruction_item.setY(circle_pts[i][1])
- instruction_item.setText(self.m_current_genome[i])
- instruction_item.show()
+ 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)
@@ -167,71 +217,87 @@
range_end = max(old_length, new_length)
if old_radius != self.m_current_radius:
- for i in range(compare_max):
- instruction_item = self.m_instruction_items[i]
- instruction_item.setX(circle_pts[i][0])
- instruction_item.setY(circle_pts[i][1])
+ 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 range(compare_max, range_end):
- instruction_item = self.m_instruction_items[i]
- instruction_item.setX(circle_pts[i][0])
- instruction_item.setY(circle_pts[i][1])
+ for i in 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 range(compare_max):
+ 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 range(compare_max, range_end):
- instruction_item = self.m_instruction_items[i]
- instruction_item.setText(self.m_current_genome[i])
- instruction_item.show()
+ 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 range(compare_max, range_end):
+ 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_rhead_move = self.m_frames.m_ihead_moves_info[frame_number]
- if old_rhead_move is None:
- # Update all rhead_move_items.
- for i in range(self.m_current_rhead_move):
- rhead_move_item = self.m_rhead_move_items[self.m_current_rhead_move]
+ 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):
+ 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.5 + 0.4/math.ldexp(1, self.m_frames.m_ihead_moves[rhead_move_item][2])) * anchor_radii_ratio
- point_array = QPointArray(4)
- from_circle_pt = circle_pts[self.m_frames.m_ihead_moves[rhead_move_item][0]]
- to_circle_pt = circle_pts[self.m_frames.m_ihead_moves[rhead_move_item][1]]
+ 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[ihead_move_item][0]]
+ to_circle_pt = circle_pts[self.m_frames.m_ihead_moves[ihead_move_item][1]]
point_array[0] = QPoint(
self.m_circle_center_x + anchor_radii_ratio * (from_circle_pt[0] - self.m_circle_center_x),
self.m_circle_center_y + anchor_radii_ratio * (from_circle_pt[1] - self.m_circle_center_y)
)
point_array[1] = QPoint(
- self.m_circle_center_x + control_radii_ratio * (from_circle_pt[0] - self.m_circle_center_x),
- self.m_circle_center_y + control_radii_ratio * (from_circle_pt[1] - self.m_circle_center_y)
+ 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 + control_radii_ratio * (to_circle_pt[0] - self.m_circle_center_x),
- self.m_circle_center_y + control_radii_ratio * (to_circle_pt[1] - self.m_circle_center_y)
- )
- point_array[3] = QPoint(
self.m_circle_center_x + anchor_radii_ratio * (to_circle_pt[0] - self.m_circle_center_x),
self.m_circle_center_y + anchor_radii_ratio * (to_circle_pt[1] - self.m_circle_center_y)
)
- rhead_move_item.setControlPoints(point_array, False)
- rhead_move_item.setBrush(QBrush(Qt.blue))
- rhead_move_item.show()
+ 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 rhead_move_items.
- for i in range(self.m_current_rhead_move):
- rhead_move_item = self.m_rhead_move_items[i]
+ # 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.5 + 0.4/math.ldexp(1, self.m_frames.m_ihead_moves[i][2])) * anchor_radii_ratio
- point_array = QPointArray(4)
+ 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]]
point_array.setPoint(0, QPoint(
@@ -239,23 +305,22 @@
self.m_circle_center_y + anchor_radii_ratio * (from_circle_pt[1] - self.m_circle_center_y)
) )
point_array.setPoint(1, QPoint(
- self.m_circle_center_x + control_radii_ratio * (from_circle_pt[0] - self.m_circle_center_x),
- self.m_circle_center_y + control_radii_ratio * (from_circle_pt[1] - self.m_circle_center_y)
+ 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 + control_radii_ratio * (to_circle_pt[0] - self.m_circle_center_x),
- self.m_circle_center_y + control_radii_ratio * (to_circle_pt[1] - self.m_circle_center_y)
- ) )
- point_array.setPoint(3, QPoint(
self.m_circle_center_x + anchor_radii_ratio * (to_circle_pt[0] - self.m_circle_center_x),
self.m_circle_center_y + anchor_radii_ratio * (to_circle_pt[1] - self.m_circle_center_y)
) )
- rhead_move_item.setControlPoints(point_array, False)
- rhead_move_item.setBrush(QBrush(Qt.blue))
- rhead_move_item.show()
- if self.m_current_rhead_move < old_rhead_move:
- for i in range(self.m_current_rhead_move, old_rhead_move):
- self.m_rhead_move_items[i].hide()
+ 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:
Modified: trunk/source/python/AvidaGui2/pyPetriDishCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyPetriDishCtrl.py 2005-07-05 20:05:52 UTC (rev 224)
+++ trunk/source/python/AvidaGui2/pyPetriDishCtrl.py 2005-07-05 22:19:48 UTC (rev 225)
@@ -186,7 +186,7 @@
self.m_avida and self.m_avida.m_avida_threaded_driver.m_lock.acquire()
if self.m_change_list:
- for index in range(self.m_change_list.GetChangeCount()):
+ for index in xrange(self.m_change_list.GetChangeCount()):
self.updateCellItem(self.m_change_list[index])
self.m_change_list.Reset()
self.m_avida and self.m_avida.m_avida_threaded_driver.m_lock.release()
Modified: trunk/source/python/AvidaGui2/py_test_utils.py
===================================================================
--- trunk/source/python/AvidaGui2/py_test_utils.py 2005-07-05 20:05:52 UTC (rev 224)
+++ trunk/source/python/AvidaGui2/py_test_utils.py 2005-07-05 22:19:48 UTC (rev 225)
@@ -93,7 +93,7 @@
# will have the index embedded in it. similarly, embedded keys for
# undeleted objects in dictionaries.
if type(o) == types.ListType:
- for i in range(len(o)):
+ for i in xrange(len(o)):
attr = o[i]
if not id_dict.has_key(id(attr)):
enqueueAndMark(attr, id_dict[id(o)] + '[%d]'%i + str(attr), id_dict, object_queue)
More information about the Avida-cvs
mailing list