[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/designer/src base/MultiObjectGridEditor.py...
From: |
Jason Cater |
Subject: |
gnue/designer/src base/MultiObjectGridEditor.py... |
Date: |
Wed, 28 May 2003 17:08:26 -0400 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Changes by: Jason Cater <address@hidden> 03/05/28 17:08:26
Modified files:
designer/src/base: MultiObjectGridEditor.py PrimaryToolBar.py
ToolFrame.py ToolPanel.py
designer/src/forms: BlockEditor.py
Log message:
more work on block editor and the general purpose grid editor
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/designer/src/base/MultiObjectGridEditor.py.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/designer/src/base/PrimaryToolBar.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/designer/src/base/ToolFrame.py.diff?tr1=1.19&tr2=1.20&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/designer/src/base/ToolPanel.py.diff?tr1=1.14&tr2=1.15&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/designer/src/forms/BlockEditor.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
Patches:
Index: gnue/designer/src/base/MultiObjectGridEditor.py
diff -c gnue/designer/src/base/MultiObjectGridEditor.py:1.5
gnue/designer/src/base/MultiObjectGridEditor.py:1.6
*** gnue/designer/src/base/MultiObjectGridEditor.py:1.5 Wed May 28 00:41:59 2003
--- gnue/designer/src/base/MultiObjectGridEditor.py Wed May 28 17:08:26 2003
***************
*** 64,69 ****
--- 64,71 ----
self.objects = []
self.rows = []
self.current = None
+ self.lastSort = -1
+ self.lastReverse = 0
# Set up our grid
***************
*** 92,98 ****
self.CreateGrid(1,len(columns))
# self.SetEditable(1)
! ## self.SetSelectionMode(wxGrid.wxGridSelectRows)
self.BeginBatch()
self.SetRowLabelSize(0)
--- 94,100 ----
self.CreateGrid(1,len(columns))
# self.SetEditable(1)
! self.SetSelectionMode(wxGrid.wxGridSelectRows)
self.BeginBatch()
self.SetRowLabelSize(0)
***************
*** 120,127 ****
self.EndBatch()
! def __rebuildGrid(self):
! self.rows = self.objects[:]
num = len(self.rows)
self.BeginBatch()
--- 122,194 ----
self.EndBatch()
! #
! # Rebuild an individual row in the visible grid
! #
! def __rebuildRow(self, ri):
! self.BeginBatch()
!
! # Add any necessary rows
! if ri + 1 > self.GetNumberRows():
! self.AppendRows(ri - self.GetNumberRows() + 1)
!
! row = self.rows[ri]
! ci = 0
! for column in self.columns:
! v = column['Attribute']
! if type(v) == types.MethodType:
! value = v(row)
! else:
! try:
! value = str(row.__dict__[v])
! except KeyError:
! value = ""
! self.SetCellValue(ri, ci, value)
! ci += 1
! self.EndBatch()
!
!
! #
! # Rebuild the visible grid.
! # If sort != -1, then sort is
! # the column # to sort by.
! #
! def __rebuildGrid(self, sort=-1, reverse=0):
!
! # Save the sorting preference
! self.lastSort = sort
! self.lastReverse = reverse
!
! # Sort, if appropriate
! if sort >= 0:
! column = self.columns[sort]['Attribute']
! rows = []
! for object in self.objects:
! # If key is dynamically created, create it
! if type(column) == types.MethodType:
! key = column(object)
! else:
! # Otherwise get the value, if available
! try:
! key = object.__dict__[column]
! except KeyError:
! key = None
! try:
! # If the key is a string, lowercase it
! key = key.lower()
! except AttributeError:
! pass
! rows.append ( (key, object) )
! rows.sort()
! if reverse:
! rows.reverse()
! self.rows = []
! for key, object in rows:
! self.rows.append(object)
! else:
! self.rows = self.objects[:]
!
! # .. and update the visible grid
num = len(self.rows)
self.BeginBatch()
***************
*** 132,159 ****
elif num > existing:
self.AppendRows(num - existing)
! ri = 0
! for row in self.rows:
! ci = 0
! for column in self.columns:
! v = column['Attribute']
! if type(v) == types.MethodType:
! value = v(row)
! else:
! try:
! value = str(row.__dict__[v])
! except KeyError:
! value = ""
! self.SetCellValue(ri, ci, value)
! ci += 1
! ri += 1
self.EndBatch()
!
def saveRuntimeSettings(self):
-
settings = {}
# Save the top-level list column sizes
--- 199,223 ----
elif num > existing:
self.AppendRows(num - existing)
! # And update each individual row
! for i in range(len(self.rows)):
! self.__rebuildRow(i)
!
! if self.current in self.rows:
! self.SelectRow(self.rows.index(self.current))
! else:
! try:
! self.current = self.rows[0]
! except IndexError:
! self.current = None
self.EndBatch()
! #
! #
! #
def saveRuntimeSettings(self):
settings = {}
# Save the top-level list column sizes
***************
*** 172,202 ****
settings )
! def inventoryObject(self, object):
if isinstance(object, self.base_gobject):
self.objects.append(object)
def _objectSelected(self, event):
if event.originator == self:
return
!
! if event.object in self.objects:
! index = self.objects.index(event.object)
def _objectModified(self, event):
-
if event.originator == self:
return
-
if event.object in self.objects:
! pass
!
def _objectCreated(self, event):
! self.inventoryObject(event.object)
def _objectDeleted(self, event):
object = event.object
if object in self.objects:
--- 236,291 ----
settings )
! #
! # Add the object to our inventory, if applicable
! # If rebuild=1, then the visible grid is rebuilt
! #
! def inventoryObject(self, object, rebuild=0):
if isinstance(object, self.base_gobject):
self.objects.append(object)
+ if rebuild:
+ if self.lastSort > 0:
+ self.__rebuildGrid(sort=self.lastSort, reverse=self.lastReverse)
+ else:
+ self.rows.append(object)
+ self.__rebuildRow(len(self.rows)-1)
+
+ #
+ # ObjectSelected event
+ #
def _objectSelected(self, event):
if event.originator == self:
return
! object = event.object
! if object in self.objects:
! self.current = object
! self.SelectRow(self.rows.index(object))
! index = self.objects.index(object)
+ #
+ # ObjectModified event
+ #
def _objectModified(self, event):
if event.originator == self:
return
if event.object in self.objects:
! if self.lastSort > 0:
! self.__rebuildGrid(sort=self.lastSort, reverse=self.lastReverse)
! else:
! self.__rebuildRow(self.rows.index(event.object))
+ #
+ # ObjectCreated event
+ #
def _objectCreated(self, event):
! self.inventoryObject(event.object, 1)
+ #
+ # ObjectDeleted event
+ #
def _objectDeleted(self, event):
object = event.object
if object in self.objects:
***************
*** 221,230 ****
## Wx event handlers
##
def __OnCellChange(self, event):
! print "TODO: Cell changed"
! event.Skip()
def __OnSelectCell(self, event):
object = self.rows[event.GetRow()]
if object != self.current:
self.instance.dispatchEvent('ObjectSelected',
--- 310,336 ----
## Wx event handlers
##
def __OnCellChange(self, event):
! r = event.GetRow()
! c = event.GetCol()
! val = self.GetCellValue(r,c)
! object = self.rows[r]
! column = self.columns[c]
! attribute = column['Attribute']
! try:
! old = {attribute: object.__dict__[attribute] }
! except KeyError:
! old = {}
!
! self.instance.dispatchEvent('ObjectModified',
! object=object, originator=self,
! old=old, new = {attribute: val})
!
+ #
+ # User selected a new cell (row)
+ #
def __OnSelectCell(self, event):
+ # Fire an ObjectSelected event
object = self.rows[event.GetRow()]
if object != self.current:
self.instance.dispatchEvent('ObjectSelected',
***************
*** 233,239 ****
self.current = object
event.Skip()
def __OnLabelLeftClick(self, event):
! print "TODO: Label left click"
! event.Skip()
--- 339,350 ----
self.current = object
event.Skip()
+ #
+ # User clicked the top label; resort by that column
+ #
def __OnLabelLeftClick(self, event):
! sort = event.GetCol()
! reverse = (sort == self.lastSort) and not self.lastReverse
! self.__rebuildGrid(sort=sort, reverse=reverse)
!
Index: gnue/designer/src/base/PrimaryToolBar.py
diff -c gnue/designer/src/base/PrimaryToolBar.py:1.2
gnue/designer/src/base/PrimaryToolBar.py:1.3
*** gnue/designer/src/base/PrimaryToolBar.py:1.2 Fri May 23 20:02:31 2003
--- gnue/designer/src/base/PrimaryToolBar.py Wed May 28 17:08:26 2003
***************
*** 31,37 ****
ToolbarMapping = 'File|New|Form,tb_new.png;' \
+ 'File|Open,tb_open.png;' \
+ 'File|Save,tb_save.png;' \
! + 'File|Save As,tb_save_as.png;'
class PrimaryToolBar(BaseToolBar):
--- 31,39 ----
ToolbarMapping = 'File|New|Form,tb_new.png;' \
+ 'File|Open,tb_open.png;' \
+ 'File|Save,tb_save.png;' \
! + 'File|Save As,tb_save_as.png;' \
! + ';' \
! + 'File|Exit,tb_exit.png;'
class PrimaryToolBar(BaseToolBar):
Index: gnue/designer/src/base/ToolFrame.py
diff -c gnue/designer/src/base/ToolFrame.py:1.19
gnue/designer/src/base/ToolFrame.py:1.20
*** gnue/designer/src/base/ToolFrame.py:1.19 Sun May 25 11:55:49 2003
--- gnue/designer/src/base/ToolFrame.py Wed May 28 17:08:26 2003
***************
*** 43,49 ****
default_height = 150
default_visible = 0
! def __init__(self, instance, title, statusbar=0):
if sys.platform[:3] == 'win':
style = wxFRAME_TOOL_WINDOW|wxMINIMIZE_BOX|wxRESIZE_BORDER| \
wxCAPTION|wxFRAME_FLOAT_ON_PARENT|wxSYSTEM_MENU
--- 43,49 ----
default_height = 150
default_visible = 0
! def __init__(self, instance, title, statusbar=0, toolbar=0):
if sys.platform[:3] == 'win':
style = wxFRAME_TOOL_WINDOW|wxMINIMIZE_BOX|wxRESIZE_BORDER| \
wxCAPTION|wxFRAME_FLOAT_ON_PARENT|wxSYSTEM_MENU
Index: gnue/designer/src/base/ToolPanel.py
diff -c gnue/designer/src/base/ToolPanel.py:1.14
gnue/designer/src/base/ToolPanel.py:1.15
*** gnue/designer/src/base/ToolPanel.py:1.14 Sun May 25 12:13:12 2003
--- gnue/designer/src/base/ToolPanel.py Wed May 28 17:08:26 2003
***************
*** 117,123 ****
if control.uses_toolbar:
sizer.Add(control.createToolbar(self), 0, wxEXPAND)
! control.setFeedback = self.setFeedback
sizer.Add(control, 1, wxEXPAND)
self.SetAutoLayout(true)
--- 117,124 ----
if control.uses_toolbar:
sizer.Add(control.createToolbar(self), 0, wxEXPAND)
!
! control.setFeedback = self.setFeedback
sizer.Add(control, 1, wxEXPAND)
self.SetAutoLayout(true)
Index: gnue/designer/src/forms/BlockEditor.py
diff -c gnue/designer/src/forms/BlockEditor.py:1.1
gnue/designer/src/forms/BlockEditor.py:1.2
*** gnue/designer/src/forms/BlockEditor.py:1.1 Tue May 27 22:49:39 2003
--- gnue/designer/src/forms/BlockEditor.py Wed May 28 17:08:26 2003
***************
*** 32,37 ****
--- 32,38 ----
from gnue.designer.base.ToolBase import *
from gnue.designer.base.MultiObjectGridEditor import *
from gnue.designer.base.ObjectList import *
+ from gnue.designer.base.ToolBar import BaseToolBar
from gnue.forms.GFObjects.GFBlock import GFBlock
from gnue.common.datasources.GDataSource import GDataSource
from wxPython.wx import *
***************
*** 39,45 ****
class BlockEditor(ToolBase):
runtime_section = "FormsBlockEditor"
! default_dock = 'frame' # 'right-20'
## uses_feedback_bar = 1
def init(self):
--- 40,47 ----
class BlockEditor(ToolBase):
runtime_section = "FormsBlockEditor"
! default_dock = 'right-20'
! uses_toolbar = 1
## uses_feedback_bar = 1
def init(self):
***************
*** 49,56 ****
--- 51,64 ----
def __OnSize(self, event):
self.grid.SetSize(self.GetClientSize())
+ def createToolbar(self, parent):
+ return _BlockToolbar(parent, self.instance)
+
+ ######################################################################
+ #
+ #
class _BlockEditorGrid(MultiObjectGridEditor):
base_gobject = GFBlock
***************
*** 84,95 ****
# Given a datasource, find the base table
#
def __getBaseTable(self, object):
! if not object.datasource:
return ""
try:
datasource = self.datasources[object.datasource]
! except NameError:
return ""
if hasattr(datasource,'table') and datasource.table:
--- 92,106 ----
# Given a datasource, find the base table
#
def __getBaseTable(self, object):
! try:
! if not object.datasource:
! return ""
! except AttributeError:
return ""
try:
datasource = self.datasources[object.datasource]
! except AttributeError:
return ""
if hasattr(datasource,'table') and datasource.table:
***************
*** 111,113 ****
--- 122,135 ----
#
def __datasourcesUpdated(self):
self.updateValidSet('DataSource')
+
+
+ ######################################################################
+ #
+ #
+ ToolbarMapping = 'Edit|Insert|Block,deslay_block.png;' \
+ + 'Edit|Delete,tb_delete.png' \
+
+ class _BlockToolbar(BaseToolBar):
+ def init(self):
+ self.addToolbarMapping(ToolbarMapping)