commit-gnue
[Top][All Lists]
Advanced

[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)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]