[Avida-cvs] [Avida2-svn] r367 - branches/developers/kaben-organism-scope/source/python/AvidaGui2
kaben@myxo.css.msu.edu
kaben at myxo.css.msu.edu
Mon Oct 31 21:59:21 PST 2005
Author: kaben
Date: 2005-11-01 00:59:21 -0500 (Tue, 01 Nov 2005)
New Revision: 367
Modified:
branches/developers/kaben-organism-scope/source/python/AvidaGui2/pyOrganismScopeView.py
Log:
Changes to organism scope.
- Restored head paths.
- Temporarily added legend associating dot colors with instruction
names.
- Added some code documentation.
Modified: branches/developers/kaben-organism-scope/source/python/AvidaGui2/pyOrganismScopeView.py
===================================================================
--- branches/developers/kaben-organism-scope/source/python/AvidaGui2/pyOrganismScopeView.py 2005-11-01 05:56:56 UTC (rev 366)
+++ branches/developers/kaben-organism-scope/source/python/AvidaGui2/pyOrganismScopeView.py 2005-11-01 05:59:21 UTC (rev 367)
@@ -120,6 +120,54 @@
ellipse.setSize(2*a.r, 2*a.r)
ellipse.setZ(10.)
+ if hasattr(a, "legend_hack_ellipses"):
+ for item in a.legend_hack_ellipses: item.setCanvas(None)
+ del a.legend_hack_ellipses
+ if hasattr(a, "legend_hack_instructions"):
+ for item in a.legend_hack_instructions: item.setCanvas(None)
+ del a.legend_hack_instructions
+
+ if a.ops_dict is not None:
+ l = len(a.ops_dict)
+ descr(l)
+
+ a.legend_hack_ellipses = [QCanvasEllipse(a.canvas) for i in xrange(l)]
+ for ellipse in a.legend_hack_ellipses:
+ ellipse.setSize(2*a.r, 2*a.r)
+ ellipse.setZ(10.)
+
+ a.legend_hack_instructions = [QCanvasText(a.canvas) for i in xrange(l)]
+
+ a.legend_hack_e_x = 20
+ a.legend_hack_i_x = a.legend_hack_e_x + 3*a.r
+ a.legend_hack_y = 20
+
+ for key in a.ops_dict.keys():
+ op_id = a.ops_dict[key]
+ instr_name = a.inst_names_dict[key]
+ descr(instr_name, (op_id * 360)/l)
+
+ ellipse = a.legend_hack_ellipses[op_id]
+ a.color.setHsv(
+ (op_id * 360)/l,
+ a.default_color_saturation,
+ a.default_color_value
+ )
+ ellipse.setBrush(QBrush(a.color))
+ ellipse.setX(a.legend_hack_e_x)
+ ellipse.setY(a.legend_hack_y)
+ ellipse.show()
+
+ instruction = a.legend_hack_instructions[op_id]
+ instruction.setTextFlags(Qt.AlignVCenter)
+ instruction.setFont(a.font)
+ instruction.setText(instr_name)
+ instruction.setX(a.legend_hack_i_x)
+ instruction.setY(a.legend_hack_y)
+ instruction.show()
+
+ a.legend_hack_y = a.legend_hack_y + 3*a.r
+
def _placeEllipses(self, circle_pts, rng):
a = self.anim
for i in rng:
@@ -129,9 +177,14 @@
def _brushEllipses(self, circle_pts, rng):
a = self.anim
+ l = len(a.ops_dict)
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)
+ a.color.setHsv(
+ (a.ops_dict[a.current_genome_str[i]] * 360) / l,
+ a.default_color_saturation,
+ a.default_color_value
+ )
ellipse.setBrush(QBrush(a.color))
ellipse.show()
@@ -330,17 +383,26 @@
def setFrames(self, frames):
descr()
- self.x = self.anim.layout_margin
- self.y = self.anim.layout_margin
+ #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)
- self.regs_anim.x = self.x
- self.regs_anim.y = self.y
+ #a = self.anim
- self.regs_anim.setFrames(frames)
+ #killus = [
+ # "lh_hw_ra_label",
+ # "lh_hw_rb_label",
+ # "lh_hw_rc_label",
+ # "lh_hw_ra_label",
+ # "lh_hw_rb_label",
+ # "lh_hw_rc_label",
+ #]
def showFrame(self, frame_number):
descr()
- self.regs_anim.showFrame(frame_number)
+ #self.regs_anim.showFrame(frame_number)
class dataAnimator:
def __init__(self, anim):
@@ -429,6 +491,9 @@
self.font = QFont(qApp.font())
+ self.default_color_saturation = 100
+ self.default_color_value = 248
+
self.on_brush = QBrush(Qt.white)
self.off_brush = QBrush(Qt.black)
self.on_pen = QPen(Qt.white)
@@ -464,10 +529,18 @@
def setOps(self, ops = None):
self.ops_dict = ops
+ def setInstNames(self, inst_names = None):
+ self.inst_names_dict = inst_names
+
def setCanvas(self, canvas = None):
descr()
self.canvas = canvas
def setFrames(self, frames = None):
+ """
+ Preps pyOrganismAnimator for displaying organism movie frames.
+
+ frames - sequence of hardware snapshots from organism analysis.
+ """
descr()
self.frames = frames
if frames is None:
@@ -487,17 +560,34 @@
self.heads_anim.setFrames(frames)
self.hw_anim.setFrames(frames)
def showFrame(self, frame_number):
+ """
+ Forwards call to .showFrame() of various subanimators, then updates
+ canvas.
+ """
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):
+ """
+ Doesn't do anything yet. I was planning to use this call to animate
+ transitions between adjacent frames.
+ """
descr()
pass
def setSize(self, width, height):
+ """
+ Called when canvas dimensions have changed.
+
+ XXX
+
+ This has become hackish. It was supposed to manage required layout
+ changes, but the code that does this has been scattered all over the
+ place, and needs reconsolidation. @kgn
+ """
descr()
self.canvas_width = width
self.canvas_height = height
@@ -519,20 +609,38 @@
def setAnimateHeadMovementCBToggled(self, bool):
+ """
+ Enables or disables animation of instr, read, write, and flow heads.
+
+ This doesn't do anything yet. I may remove it. @kgn
+ """
descr()
if self.animate_head_movement_flag != bool:
self.animate_head_movement_flag = bool
def setAnimateInstructionCopyCBToggled(self, bool):
+ """
+ Enables or disables animation of copying instruction.
+
+ This doesn't do anything yet. I may remove it. @kgn
+ """
descr()
if self.animate_instruction_copy_flag != bool:
self.animate_instruction_copy_flag = bool
def setAnimateOrganismDivideCBToggled(self, bool):
+ """
+ Enables or disables animation of organism division.
+
+ This doesn't do anything yet. @kgn
+ """
descr()
if self.animate_organism_divide_flag != bool:
self.animate_organism_divide_flag = bool
def setDisplayHeadsAs(self, head_type_index):
+ """
+ Sets display method for organism hardware heads.
+ """
descr()
heads_shape_policy_table = (
headsDotShapePolicy,
@@ -545,48 +653,99 @@
self.heads_anim.showFrame(self.current_frame_number)
def setShowHardwareCBToggled(self, bool):
+ """
+ Enables or disables display of organism's hardware.
+
+ This doesn't do anything yet. @kgn
+ """
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):
+ """
+ Enables or disables display of organism's hardware's registers.
+
+ This doesn't do anything yet. @kgn
+ """
descr()
if self.show_registers_flag != bool:
self.show_registers_flag = bool
def setShowStacksCBToggled(self, bool):
+ """
+ Enables or disables display of tops of organism's hardware's stacks.
+
+ This doesn't do anything yet. @kgn
+ """
descr()
if self.show_stacks_flag != bool:
self.show_stacks_flag = bool
def setShowFullStacksCBToggled(self, bool):
+ """
+ Enables or disables display of organism's hardware's full stacks.
+
+ This doesn't do anything yet. @kgn
+ """
descr()
if self.show_full_stacks_flag != bool:
self.show_full_stacks_flag = bool
def setShowInputsAndOutputsCBToggled(self, bool):
+ """
+ Enables or disables display of organism's hardware's inputs and
+ outputs.
+
+ This doesn't do anything yet. @kgn
+ """
descr()
if self.show_io_flag != bool:
self.show_io_flag = bool
def setShowTaskTestsCBToggled(self, bool):
+ """
+ Enables or disables display of status of organism's tasks.
+
+ This doesn't do anything yet. @kgn
+ """
descr()
if self.show_task_tests_flag != bool:
self.show_task_tests_flag = bool
def setShowInstructionNamesCBToggled(self, bool):
+ """
+ Enables or disables display of name of next instruction.
+
+ This doesn't do anything yet. @kgn
+ """
descr()
if self.show_instruction_names_flag != bool:
self.show_instruction_names_flag = bool
def setHardwareIndicatorSBValueChanged(self, value):
+ """
+ Resizes the binary indicator squares in the hardware display.
+
+ This doesn't do anything yet. I may remove it. @kgn
+ """
descr()
if self.hardware_indicator_size != value:
self.hardware_indicator_size = value
def setLayoutSpacingSBValueChanged(self, value):
+ """
+ Changes layout spacing in the hardware display.
+
+ This doesn't do anything yet. I may remove it. @kgn
+ """
descr()
if self.layout_spacing != value:
self.layout_spacing = value
def setLayoutMarginSBValueChanged(self, value):
+ """
+ Changes layout margin in the hardware display.
+
+ This doesn't do anything yet. I may remove it. @kgn
+ """
descr()
if self.layout_margin != value:
self.layout_margin = value
@@ -702,6 +861,7 @@
def setInstNames(self, inst_names = None):
self.m_inst_names = inst_names
+ self.anim.setInstNames(inst_names)
def setOps(self, ops = None):
self.m_ops_dict = ops
@@ -709,6 +869,11 @@
def setFrames(self, frames = None):
self.reset()
+
+ # XXX XXX
+ self.anim.setFrames(frames)
+ self.anim.showFrame(0)
+
self.m_frames = frames
if self.m_frames is not None:
if self.m_frames.m_genome_info is not None:
@@ -759,10 +924,6 @@
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
@@ -793,30 +954,30 @@
item.setFont(font)
for item in self.m_instruction_bg_items:
item.setSize(point_size_float, point_size_float)
- self.m_circles = []
- self.m_head_circles = []
- self.m_circle_radii = []
- 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 = []
- head_circle_pts = []
- for i in xrange(organism_current_size + 1):
- theta = i * dt + angle_offset
- c = math.cos(theta)
- s = -math.sin(theta)
- x = radius * c + self.m_circle_center_x
- y = radius * s + self.m_circle_center_y
- h_x = (radius + 10) * c + self.m_circle_center_x
- h_y = (radius + 10) * s + self.m_circle_center_y
- circle_pts.append((x,y))
- head_circle_pts.append((h_x,h_y))
- self.m_circles.append(circle_pts)
- self.m_head_circles.append(head_circle_pts)
- self.m_circle_radii.append(radius)
+ #self.m_circles = []
+ #self.m_head_circles = []
+ #self.m_circle_radii = []
+ #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 = []
+ # head_circle_pts = []
+ # for i in xrange(organism_current_size + 1):
+ # theta = i * dt + angle_offset
+ # c = math.cos(theta)
+ # s = -math.sin(theta)
+ # x = radius * c + self.m_circle_center_x
+ # y = radius * s + self.m_circle_center_y
+ # h_x = (radius + 10) * c + self.m_circle_center_x
+ # h_y = (radius + 10) * s + self.m_circle_center_y
+ # circle_pts.append((x,y))
+ # head_circle_pts.append((h_x,h_y))
+ # self.m_circles.append(circle_pts)
+ # self.m_head_circles.append(head_circle_pts)
+ # self.m_circle_radii.append(radius)
def debug_displayHardwareCPUSnapshot(self, frame_number):
print "pyOrganismScopeView.debug_displayHardwareCPUSnapshot()..."
@@ -901,9 +1062,12 @@
#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]
+ displayed_genome_size = max(self.anim.last_copied_instruction_cache[frame_number] + 1, self.anim.frames.m_size)
+ #self.m_current_radius = self.m_circle_radii[frame_number]
+ self.m_current_radius = self.anim.circle_radii[displayed_genome_size]
+ #circle_pts = self.m_circles[frame_number]
+ circle_pts = self.anim.circles[displayed_genome_size]
+ #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:
@@ -976,88 +1140,82 @@
- # 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(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)
+ point_array = QPointArray(3)
+ 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.anim.c_x + anchor_radii_ratio * (from_circle_pt[0] - self.anim.c_x),
+ self.anim.c_y + anchor_radii_ratio * (from_circle_pt[1] - self.anim.c_y)
+ )
+ point_array[1] = QPoint(
+ self.anim.c_x + control_radii_ratio * ((from_circle_pt[0] + to_circle_pt[0])/2 - self.anim.c_x),
+ self.anim.c_y + control_radii_ratio * ((from_circle_pt[1] + to_circle_pt[1])/2 - self.anim.c_y),
+ )
+ point_array[2] = QPoint(
+ self.anim.c_x + anchor_radii_ratio * (to_circle_pt[0] - self.anim.c_x),
+ self.anim.c_y + anchor_radii_ratio * (to_circle_pt[1] - self.anim.c_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)
+ point_array = QPointArray(3)
+ 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.anim.c_x + anchor_radii_ratio * (from_circle_pt[0] - self.anim.c_x),
+ self.anim.c_y + anchor_radii_ratio * (from_circle_pt[1] - self.anim.c_y)
+ ) )
+ point_array.setPoint(1, QPoint(
+ self.anim.c_x + control_radii_ratio * ((from_circle_pt[0] + to_circle_pt[0])/2 - self.anim.c_x),
+ self.anim.c_y + control_radii_ratio * ((from_circle_pt[1] + to_circle_pt[1])/2 - self.anim.c_y),
+ ) )
+ point_array.setPoint(2, QPoint(
+ self.anim.c_x + anchor_radii_ratio * (to_circle_pt[0] - self.anim.c_x),
+ self.anim.c_y + anchor_radii_ratio * (to_circle_pt[1] - self.anim.c_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
More information about the Avida-cvs
mailing list