[Avida-cvs] [Avida2-svn] r232 - trunk/source/python/AvidaGui2
jclune@myxo.css.msu.edu
jclune at myxo.css.msu.edu
Tue Jul 12 10:53:21 PDT 2005
Author: jclune
Date: 2005-07-12 13:53:21 -0400 (Tue, 12 Jul 2005)
New Revision: 232
Modified:
trunk/source/python/AvidaGui2/pyGradientScaleCtrl.py
trunk/source/python/AvidaGui2/pyGradientScaleView.py
trunk/source/python/AvidaGui2/pyOnePop_PetriDishCtrl.py
trunk/source/python/AvidaGui2/pyPetriDishCtrl.py
Log:
scrolling works....mostly (still some glitches right after you zoom)
Modified: trunk/source/python/AvidaGui2/pyGradientScaleCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyGradientScaleCtrl.py 2005-07-12 17:28:43 UTC (rev 231)
+++ trunk/source/python/AvidaGui2/pyGradientScaleCtrl.py 2005-07-12 17:53:21 UTC (rev 232)
@@ -12,10 +12,14 @@
def construct(self, session_mdl):
self.m_session_mdl = session_mdl
self.m_avida = None
+ self.m_current_map_mode_name = None
self.connect(
self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
self.setAvidaSlot)
+ self.connect(self.m_session_mdl.m_session_mdtr,
+ PYSIGNAL("mapModeChangedSig"), self.setMapModeSlot)
+
def setAvidaSlot(self, avida):
print "pyGradientScaleCtrl.setAvidaSlot() ..."
old_avida = self.m_avida
@@ -32,6 +36,9 @@
self.m_avida.m_avida_thread_mdtr, PYSIGNAL("AvidaUpdatedSig"),
self.avidaUpdatedSlot)
+ def setMapModeSlot(self,index):
+ self.m_current_map_mode_name = index
+
def avidaUpdatedSlot(self):
pass
Modified: trunk/source/python/AvidaGui2/pyGradientScaleView.py
===================================================================
--- trunk/source/python/AvidaGui2/pyGradientScaleView.py 2005-07-12 17:28:43 UTC (rev 231)
+++ trunk/source/python/AvidaGui2/pyGradientScaleView.py 2005-07-12 17:53:21 UTC (rev 232)
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+ # -*- coding: utf-8 -*-
# Original form implementation generated from reading ui file
# '/Users/kaben/Projects/Software/Avida/svn/avida2/trunk/source/python/AvidaGui2/pyGradientScaleView.ui'
@@ -22,6 +22,7 @@
s_empty_text_width = 0
s_off_scale_text_width = 0
s_label_text_width = 0
+ s_map_mode_name_label_width = 100
s_text_height = 0
def __init__(self,parent = None,name = None,fl = 0):
@@ -49,7 +50,14 @@
if not name:
setName("pyGradientScaleView")
+
+ def construct(self, session_mdl):
+ self.m_session_mdl = session_mdl
+ self.m_avida = None
+
+
+
def doubleToColor(self, x): return self.m_color_lookup and self.m_color_lookup(x) or QColor(Qt.black)
def setRange(self, min, max):
@@ -125,6 +133,34 @@
self.getLabelString(self.m_max_value)
)
+# draw the number label for the midpoint
+ p.drawText(
+ #w - self.s_right_margin - label_width,
+# w/2 - self.s_right_margin - self.s_label_text_width,
+ w/2 - self.s_label_text_width/2,
+ self.s_top_margin,
+ self.s_label_text_width,
+ self.s_text_height,
+ #label_width,
+ #text_height,
+ Qt.AlignBottom | Qt.AlignCenter,
+ self.getLabelString((self.m_max_value-self.m_min_value)/2.0)
+ )
+
+
+# make a word label for the scale
+ p.drawText(
+ w/2 - self.s_map_mode_name_label_width/2,
+ h - self.s_top_margin*4, #the multiple is a hack
+ self.s_map_mode_name_label_width,
+ self.s_text_height,
+ #label_width,
+ #text_height,
+ Qt.AlignBottom | Qt.AlignCenter,
+ self.m_current_map_mode_name
+ )
+
+
#self.s_spacing + 2 * self.fontMetrics().width("0.0e+02")
#if i%self.s_step == 0:
@@ -200,6 +236,7 @@
self.setMinimumHeight(h)
self.setMaximumHeight(h)
+
def getLabelString(self, x):
# To show numbers < 10,000 without going to sci. notation had to
@@ -209,4 +246,5 @@
if x >= 100:
ix = int(x)
x = float(ix)
- return QString("%1").arg(x, 0, 'g', 5)
+ return QString("%1").arg(x, 0, 'g', 2)
+
Modified: trunk/source/python/AvidaGui2/pyOnePop_PetriDishCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyOnePop_PetriDishCtrl.py 2005-07-12 17:28:43 UTC (rev 231)
+++ trunk/source/python/AvidaGui2/pyOnePop_PetriDishCtrl.py 2005-07-12 17:53:21 UTC (rev 232)
@@ -6,6 +6,7 @@
import os
from pyReadFreezer import pyReadFreezer
+
class pyOnePop_PetriDishCtrl(pyOnePop_PetriDishView):
def __init__(self,parent = None,name = None,fl = 0):
@@ -15,10 +16,19 @@
self.m_session_mdl = session_mdl
self.m_avida = None
self.dishDisabled = False
+
print "*** pyOnePop_PetriDishCtrl.py:consruct about to call m_petri_dish_ctrl.construct ***"
self.m_petri_dish_ctrl.construct(self.m_session_mdl)
+
+# self.m_petri_dish_ctrl_h_scrollBar = QScrollBar(1,300,1,20,300,Qt.Horizontal,self.m_petri_dish_ctrl)
+# self.m_petri_dish_ctrl_v_scrollBar = QScrollBar(1,300,1,20,300,Qt.Vertical,self.m_petri_dish_ctrl)
+# self.m_petri_dish_ctrl_h_scrollBar.setGeometry(0,371, 371,15)
+# self.m_petri_dish_ctrl_v_scrollBar.setGeometry(371,0,15,371)
print "*** pyOnePop_PetriDishCtrl.py:consruct about to call m_gradient_scale_ctrl.construct ***"
self.m_gradient_scale_ctrl.construct(self.m_session_mdl)
+ print "*** pyOnePop_PetriDishView.py:consruct about to call m_gradient_scale_view.construct ***"
+ self.m_gradient_scale_view.construct(self.m_session_mdl)
+
print "*** pyOnePop_PetriDishCtrl.py:consruct about to call m_live_controls_ctrl.construct ***"
self.m_live_controls_ctrl.construct(self.m_session_mdl)
print "*** pyOnePop_PetriDishCtrl.py:consruct about to call m_petri_configure_ctrl.construct ***"
@@ -56,7 +66,7 @@
self.m_map_profile = pyMapProfile(self.m_session_mdl)
for i in range(self.m_map_profile.getSize()):
self.m_mode_combobox.insertItem(self.m_map_profile.getModeName(i))
-
+
# Start with second map mode -- "Fitness".
self.m_mode_combobox.setCurrentItem(2)
self.m_mode_index = self.m_mode_combobox.currentItem()
@@ -105,7 +115,7 @@
def modeActivatedSlot(self, index):
self.m_avida and self.m_avida.m_avida_threaded_driver.m_lock.acquire()
-
+ self.m_session_mdl.m_session_mdtr.emit(PYSIGNAL("mapModeChangedSig"), (self.m_map_profile.getModeName(index),))
self.m_mode_index = index
self.m_petri_dish_ctrl.setIndexer(self.m_map_profile.getIndexer(self.m_mode_index))
self.m_petri_dish_ctrl.setColorLookupFunctor(self.m_map_profile.getColorLookup(self.m_mode_index))
Modified: trunk/source/python/AvidaGui2/pyPetriDishCtrl.py
===================================================================
--- trunk/source/python/AvidaGui2/pyPetriDishCtrl.py 2005-07-12 17:28:43 UTC (rev 231)
+++ trunk/source/python/AvidaGui2/pyPetriDishCtrl.py 2005-07-12 17:53:21 UTC (rev 232)
@@ -10,8 +10,9 @@
from AvidaCore import cConfig
from AvidaCore import cInitFile, cString
+from qt import *
from math import exp
-from qt import PYSIGNAL, QBrush, QColor, QLayout, QPen, QSize, Qt, QVBoxLayout, QWidget, QWMatrix, QTextDrag, QStoredDrag
+from qt import PYSIGNAL, QBrush, QColor, QLayout, QPen, QSize, Qt, QVBoxLayout, QWidget, QWMatrix, QTextDrag, QStoredDrag, QScrollView, QScrollBar
from qtcanvas import QCanvas, QCanvasRectangle
from pyPetriCanvasView import pyPetriCanvasView
from pyPopulationCellItem import pyPopulationCellItem
@@ -38,11 +39,32 @@
self.m_canvas = None
self.m_cell_info = None
- #self.m_petri_dish_layout = QVBoxLayout(self,0,0,"m_petri_dish_layout")
+ self.m_zoom_factor = 11
+ self.m_target_dish_width = 350
+ self.m_target_dish_scaling = 5.
+ self.m_map_cell_width = 5
+ self.m_h_scrollbar_offset = 0
+ self.m_v_scrollbar_offset = 0
+ self.m_zoom_old_value = self.m_zoom_factor
+
self.m_petri_dish_layout = pySquareVBoxLayout(self,0,0,"m_petri_dish_layout")
print "pyPetriDishCtrl.construct() self.m_petri_dish_layout.heightForWidth(20) :", self.m_petri_dish_layout.heightForWidth(20)
- #self.m_petri_dish_layout.setResizeMode(QLayout.Minimum)
self.m_canvas_view = pyPetriCanvasView(None, self,"m_canvas_view")
+
+ #hiding the scroll bars, the pre-packaged ones were not working so we are adding them manually elsewhere
+ self.m_canvas_view.setVScrollBarMode(QScrollView.AlwaysOff)
+ self.m_canvas_view.setHScrollBarMode(QScrollView.AlwaysOff)
+
+ #adding manual ones
+ self.m_scroll_bar_width = 15 # also the height if vertical
+ # the following settings get overridden once the scroll bars are necessary, so they are junk
+ self.m_petri_dish_ctrl_h_scrollBar = QScrollBar(0,371,0,20,185,Qt.Horizontal,self.m_canvas_view)
+ self.m_petri_dish_ctrl_v_scrollBar = QScrollBar(0,371,0,20,185,Qt.Vertical,self.m_canvas_view)
+ print "setting up scroll bar"
+ self.m_petri_dish_ctrl_h_scrollBar.setGeometry(0,371, 371,self.m_scroll_bar_width)
+ print "done setting geo"
+ self.m_petri_dish_ctrl_v_scrollBar.setGeometry(371,0,self.m_scroll_bar_width,371)
+
self.m_petri_dish_layout.addWidget(self.m_canvas_view)
self.m_changed_cell_items = []
self.m_indexer = None
@@ -52,10 +74,6 @@
self.m_org_clicked_on_item = None
self.m_occupied_cells_ids = []
- self.m_target_dish_width = 350
- self.m_target_dish_scaling = 5.
- self.m_map_cell_width = 5
-
self.connect( self.m_session_mdl.m_session_mdtr, PYSIGNAL("setAvidaSig"),
self.setAvidaSlot)
self.connect( self.m_canvas_view, PYSIGNAL("orgClickedOnSig"),
@@ -64,7 +82,14 @@
PYSIGNAL("orgClickedOnSig"), self.updateOrgClickedOutlineCellNumberSlot)
self.connect( self.m_session_mdl.m_session_mdtr,
PYSIGNAL("orgClickedOnSig"), self.setDragSlot)
+# self.connect(self.m_petri_dish_ctrl_h_scrollBar, SIGNAL("valueChanged(int)"), self.moveCanvasHorizontallySlot)
+# self.connect(self.m_petri_dish_ctrl_h_scrollBar, SIGNAL("nextLine()"), self.hbarScrollNextLineSlot)
+# self.connect(self.m_petri_dish_ctrl_h_scrollBar, SIGNAL("prevLine()"), self.hbarScrollPrevLineSlot)
+ self.connect(self.m_petri_dish_ctrl_v_scrollBar, SIGNAL("valueChanged(int)"), self.moveCanvasVerticallySlot)
+ self.connect(self.m_petri_dish_ctrl_v_scrollBar, SIGNAL("nextLine()"), self.vbarScrollNextLineSlot)
+ self.connect(self.m_petri_dish_ctrl_v_scrollBar, SIGNAL("prevLine()"), self.vbarScrollPrevLineSlot)
+
def restart(self):
self.m_cell_info = None
self.m_changed_cell_items = []
@@ -205,19 +230,96 @@
(population_dict, send_reset_signal, send_quit_signal, ))
def zoomSlot(self, zoom_factor):
+ if hasattr(self,"m_world_h") == False:
+ return
+
+ self.m_zoom_factor = zoom_factor
+ self.m_world_matrix = QWMatrix()
if self.m_canvas_view:
- m = QWMatrix()
- m.scale(zoom_factor/self.m_target_dish_scaling, zoom_factor/self.m_target_dish_scaling)
- trans_h = (self.m_canvas_view.size().height() - (self.m_map_cell_width * self.m_world_h)*
- (zoom_factor/self.m_target_dish_scaling))/2
+ self.m_world_matrix.scale(self.m_zoom_factor/self.m_target_dish_scaling, self.m_zoom_factor/self.m_target_dish_scaling)
+ trans_h = ((self.m_canvas_view.size().height()-self.m_scroll_bar_width) - (self.m_map_cell_width * self.m_world_h)*
+ (self.m_zoom_factor/self.m_target_dish_scaling))/2
- if zoom_factor == 0:
- m.translate(trans_h/(1/self.m_target_dish_scaling),trans_h/(1/self.m_target_dish_scaling))
+ trans_h = trans_h + self.m_v_scrollbar_offset*(self.m_zoom_factor/self.m_target_dish_scaling)
+ trans_w = trans_h + self.m_h_scrollbar_offset*(self.m_zoom_factor/self.m_target_dish_scaling)
+
+
+ if self.m_zoom_factor == 0:
+ self.m_world_matrix.translate(trans_w/(1/self.m_target_dish_scaling),trans_h/(1/self.m_target_dish_scaling))
else:
- m.translate(trans_h/(zoom_factor/self.m_target_dish_scaling),trans_h/(zoom_factor/self.m_target_dish_scaling))
- self.m_canvas_view.setWorldMatrix(m)
-
+ self.m_world_matrix.translate(trans_w/(self.m_zoom_factor/self.m_target_dish_scaling),trans_h/(self.m_zoom_factor/self.m_target_dish_scaling))
+ self.m_canvas_view.setWorldMatrix(self.m_world_matrix)
+
+ black_box = (self.m_map_cell_width * self.m_world_h)*(self.m_zoom_factor/self.m_target_dish_scaling)
+ outside = black_box - 371
+ if outside < 0:
+ outside = 1
+
+ self.m_setting_scrollbar_values = 1
+
+ self.m_petri_dish_ctrl_h_scrollBar.setMaxValue( 30 + outside/(self.m_zoom_factor/self.m_target_dish_scaling) )
+ self.m_petri_dish_ctrl_v_scrollBar.setMaxValue( 30 + outside/(self.m_zoom_factor/self.m_target_dish_scaling) )
+
+ self.m_h_scrollbar_offset = self.m_h_scrollbar_offset*(float(self.m_zoom_factor)/self.m_zoom_old_value)
+ self.m_v_scrollbar_offset = self.m_v_scrollbar_offset*(float(self.m_zoom_factor)/self.m_zoom_old_value)
+
+ self.m_petri_dish_ctrl_h_scrollBar.setValue( (self.m_petri_dish_ctrl_h_scrollBar.maxValue()/2) - self.m_h_scrollbar_offset)
+ self.m_petri_dish_ctrl_v_scrollBar.setValue( (self.m_petri_dish_ctrl_v_scrollBar.maxValue()/2) - self.m_v_scrollbar_offset)
+
+ self.m_zoom_old_value = self.m_zoom_factor
+
+ self.m_setting_scrollbar_values = 0
+
+ def moveCanvasHorizontallySlot(self,horizontal_value):
+
+ if horizontal_value < 0:
+ return
+
+ if self.m_setting_scrollbar_values == 1:
+ return
+
+ h_scroll_adjustment_needed = (horizontal_value- (self.m_petri_dish_ctrl_h_scrollBar.maxValue()/2)+ self.m_h_scrollbar_offset)*-1
+ self.m_h_scrollbar_offset = h_scroll_adjustment_needed + self.m_h_scrollbar_offset
+
+ if self.m_canvas_view:
+ self.m_world_matrix.translate(h_scroll_adjustment_needed,0)
+ self.m_canvas_view.setWorldMatrix(self.m_world_matrix)
+
+ def moveCanvasVerticallySlot(self,vertical_value):
+ print "############################################################"
+ if vertical_value < 0:
+ return
+
+ if self.m_setting_scrollbar_values == 1:
+ print "returning"
+ return
+
+ v_scroll_adjustment_needed = (vertical_value- (self.m_petri_dish_ctrl_v_scrollBar.maxValue()/2)+ self.m_v_scrollbar_offset)*-1
+ self.m_v_scrollbar_offset = v_scroll_adjustment_needed + self.m_v_scrollbar_offset
+
+ if self.m_canvas_view:
+ self.m_world_matrix.translate(0,v_scroll_adjustment_needed)
+ self.m_canvas_view.setWorldMatrix(self.m_world_matrix)
+
+
+ def hbarScrollNextLineSlot(self):
+ if self.m_petri_dish_ctrl_h_scrollBar.value() < self.m_petri_dish_ctrl_h_scrollBar.maxValue():
+ self.m_petri_dish_ctrl_h_scrollBar.setValue(self.m_petri_dish_ctrl_h_scrollBar.value()+1)
+
+ def vbarScrollNextLineSlot(self):
+ if self.m_petri_dish_ctrl_v_scrollBar.value() < self.m_petri_dish_ctrl_v_scrollBar.maxValue():
+ self.m_petri_dish_ctrl_v_scrollBar.setValue(self.m_petri_dish_ctrl_v_scrollBar.value()+1)
+
+ def hbarScrollPrevLineSlot(self):
+ if self.m_petri_dish_ctrl_h_scrollBar.value() > self.m_petri_dish_ctrl_h_scrollBar.minValue():
+ self.m_petri_dish_ctrl_h_scrollBar.setValue(self.m_petri_dish_ctrl_h_scrollBar.value()-1)
+
+ def vbarScrollPrevLineSlot(self):
+ if self.m_petri_dish_ctrl_v_scrollBar.value() > self.m_petri_dish_ctrl_v_scrollBar.minValue():
+ self.m_petri_dish_ctrl_v_scrollBar.setValue(self.m_petri_dish_ctrl_v_scrollBar.value()-1)
+
class itemDrag(QTextDrag):
def __init__(self, item_name, parent=None, name=None):
QStoredDrag.__init__(self, 'item name (QString)', parent, name)
self.setText(item_name)
+
More information about the Avida-cvs
mailing list