[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue common/src/events/EventController.py desig...
From: |
Jason Cater |
Subject: |
gnue common/src/events/EventController.py desig... |
Date: |
Mon, 25 Nov 2002 00:41:43 -0500 |
CVSROOT: /home/cvs
Module name: gnue
Changes by: Jason Cater <address@hidden> 02/11/25 00:41:42
Modified files:
common/src/events: EventController.py
designer/doc/technotes: 00003.txt
designer/src : DataSourceEditor.py EventEditor.py Instance.py
MenuBar.py PropertyEditor.py SchemaViewer.py
ToolFrame.py ToolPanel.py TreeView.py
TriggerEditor.py
designer/src/forms: Incubator.py Instance.py TreeView.py
designer/src/forms/LayoutEditor: LayoutEditor.py PropertyBar.py
WidgetHandler.py
designer/src/navigator: LayoutEditor.py
designer/src/reports: Incubator.py LayoutEditor.py
designer/src/schema: Incubator.py LayoutEditor.py
VisualEditor.py
Added files:
designer/src : ToolDock.py
Log message:
* Implemented a docking system for forms
* Started on HotKey support (F10 ==> Property Editor, etc)
* Moved from the old listener support to common's events model
* More work to get Designer working with new GFD format
* Start of Trigger Inspector
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/common/src/events/EventController.py.diff?cvsroot=OldCVS&tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/doc/technotes/00003.txt.diff?cvsroot=OldCVS&tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/ToolDock.py?cvsroot=OldCVS&rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/DataSourceEditor.py.diff?cvsroot=OldCVS&tr1=1.26&tr2=1.27&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/EventEditor.py.diff?cvsroot=OldCVS&tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/Instance.py.diff?cvsroot=OldCVS&tr1=1.68&tr2=1.69&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/MenuBar.py.diff?cvsroot=OldCVS&tr1=1.33&tr2=1.34&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/PropertyEditor.py.diff?cvsroot=OldCVS&tr1=1.29&tr2=1.30&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/SchemaViewer.py.diff?cvsroot=OldCVS&tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/ToolFrame.py.diff?cvsroot=OldCVS&tr1=1.13&tr2=1.14&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/ToolPanel.py.diff?cvsroot=OldCVS&tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/TreeView.py.diff?cvsroot=OldCVS&tr1=1.25&tr2=1.26&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/TriggerEditor.py.diff?cvsroot=OldCVS&tr1=1.21&tr2=1.22&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/forms/Incubator.py.diff?cvsroot=OldCVS&tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/forms/Instance.py.diff?cvsroot=OldCVS&tr1=1.17&tr2=1.18&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/forms/TreeView.py.diff?cvsroot=OldCVS&tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/forms/LayoutEditor/LayoutEditor.py.diff?cvsroot=OldCVS&tr1=1.34&tr2=1.35&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/forms/LayoutEditor/PropertyBar.py.diff?cvsroot=OldCVS&tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/forms/LayoutEditor/WidgetHandler.py.diff?cvsroot=OldCVS&tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/navigator/LayoutEditor.py.diff?cvsroot=OldCVS&tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/reports/Incubator.py.diff?cvsroot=OldCVS&tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/reports/LayoutEditor.py.diff?cvsroot=OldCVS&tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/schema/Incubator.py.diff?cvsroot=OldCVS&tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/schema/LayoutEditor.py.diff?cvsroot=OldCVS&tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/schema/VisualEditor.py.diff?cvsroot=OldCVS&tr1=1.4&tr2=1.5&r1=text&r2=text
Patches:
Index: gnue/common/src/events/EventController.py
diff -c gnue/common/src/events/EventController.py:1.2
gnue/common/src/events/EventController.py:1.3
*** gnue/common/src/events/EventController.py:1.2 Mon Oct 7 19:13:29 2002
--- gnue/common/src/events/EventController.py Mon Nov 25 00:41:41 2002
***************
*** 30,35 ****
--- 30,36 ----
import string
from EventAware import EventAware
+ from Event import Event
class EventController(EventAware):
***************
*** 49,55 ****
self.__incomingEvents[event] = [events[event]]
! def dispatchEvent(self, event):
#GDebug.printMesg(0, "Event: %s" % (event.__event__))
try:
handlers = self.__incomingEvents[event.__event__]
--- 50,66 ----
self.__incomingEvents[event] = [events[event]]
! def dispatchEvent(self, event, *args, **parms):
!
! # Hackery so dispatchEvent can be passed
! # either an Event() object, or a text string
! # identifying the type of event. If the
! # latter, an event is created on the fly.
! try:
! event.__event__
! except:
! event = Event(event, *args, **parms)
!
#GDebug.printMesg(0, "Event: %s" % (event.__event__))
try:
handlers = self.__incomingEvents[event.__event__]
Index: gnue/designer/doc/technotes/00003.txt
diff -c gnue/designer/doc/technotes/00003.txt:1.2
gnue/designer/doc/technotes/00003.txt:1.3
*** gnue/designer/doc/technotes/00003.txt:1.2 Mon Oct 7 22:24:26 2002
--- gnue/designer/doc/technotes/00003.txt Mon Nov 25 00:41:41 2002
***************
*** 6,14 ****
ObjectModified
ObjectDeleted
ObjectCreated
MakeDirty -- Called after a document has been modified
MakeClean -- Called after a document has been saved
BeginWizard -- Called whenever a wizard has been selected to run
! EndWizard -- Called whenever a wizard has finished running
\ No newline at end of file
--- 6,15 ----
ObjectModified
ObjectDeleted
ObjectCreated
+ ObjectSelected
MakeDirty -- Called after a document has been modified
MakeClean -- Called after a document has been saved
BeginWizard -- Called whenever a wizard has been selected to run
! EndWizard -- Called whenever a wizard has finished running
Index: gnue/designer/src/DataSourceEditor.py
diff -c gnue/designer/src/DataSourceEditor.py:1.26
gnue/designer/src/DataSourceEditor.py:1.27
*** gnue/designer/src/DataSourceEditor.py:1.26 Fri Nov 22 20:48:02 2002
--- gnue/designer/src/DataSourceEditor.py Mon Nov 25 00:41:41 2002
***************
*** 30,36 ****
import sys, os, cPickle, traceback, StringIO
from wxPython.wx import *
from gnue.common import GDebug, GDataSource, GConfig
! from gnue.common import RuntimeSettings
from ToolPanel import ToolPanel
class DataSourceEditor(ToolPanel):
--- 30,36 ----
import sys, os, cPickle, traceback, StringIO
from wxPython.wx import *
from gnue.common import GDebug, GDataSource, GConfig
! from gnue.common import RuntimeSettings, events
from ToolPanel import ToolPanel
class DataSourceEditor(ToolPanel):
***************
*** 75,88 ****
self.instance.rootObject.walk (self.inventoryObject)
self.fillList()
EVT_LIST_ITEM_SELECTED(self, self.list.GetId(), self.OnDSSelected)
! self.onSetCurrentObject(self.current, "")
self.finalized = 0
self.splitter.SetSize(self.GetSize())
-
def fillList(self):
self.list.DeleteAllItems()
--- 75,95 ----
self.instance.rootObject.walk (self.inventoryObject)
self.fillList()
+ # EventAware provided by ToolPanel
+ self.registerEventListeners({
+ 'ObjectSelected' : self.onSetCurrentObject,
+ 'ObjectCreated' : self.onCreateObject,
+ 'ObjectModified' : self.onModifyObject,
+ 'ObjectDeleted' : self.onDeleteObject,
+ })
+
EVT_LIST_ITEM_SELECTED(self, self.list.GetId(), self.OnDSSelected)
! self._setCurrent(self.current)
self.finalized = 0
self.splitter.SetSize(self.GetSize())
def fillList(self):
self.list.DeleteAllItems()
***************
*** 172,199 ****
! def onSetCurrentObject (self, object, handler):
!
self._currentObject = object
if object == None:
return
if handler != __name__:
! if isinstance(object, GDataSource.GDataSource):
! self.current = object
! self.list.SetItemState ( object.__listIndex,
! wxLIST_STATE_SELECTED,
! wxLIST_STATE_SELECTED)
! self.list.EnsureVisible(object.__listIndex)
! self.propertyPanel.onSetCurrentObject(object, handler)
! self.referencesPanel.onSetCurrentObject(object, handler)
! self.schemaPanel.onSetCurrentObject(object, handler)
! def onCreateObject (self, object, handler):
self._currentSelection = {}
if object == None:
return
--- 179,212 ----
! def onSetCurrentObject (self, event):
! object = event.object
! handler = event.originator
self._currentObject = object
if object == None:
return
if handler != __name__:
! self._setCurrent(object)
! def _setCurrent(self, object):
! if isinstance(object, GDataSource.GDataSource):
!
! self.current = object
! self.list.SetItemState ( object.__listIndex,
! wxLIST_STATE_SELECTED,
! wxLIST_STATE_SELECTED)
! self.list.EnsureVisible(object.__listIndex)
! self.propertyPanel.setCurrent(object)
! self.referencesPanel.setCurrent(object)
! self.schemaPanel.setCurrent(object)
! def onCreateObject (self, event):
! object = event.object
! handler = event.originator
self._currentSelection = {}
if object == None:
return
***************
*** 206,212 ****
self.fillList()
! def onModifyObject (self, object, handler, modifications):
if object == None:
return
--- 219,227 ----
self.fillList()
! def onModifyObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
***************
*** 218,227 ****
# Dirty way to rebuild all our lists
if object == self.current:
! self.onSetCurrentObject(object, __name__)
! def onDeleteObject (self, object, handler):
if object == None:
return
--- 233,244 ----
# Dirty way to rebuild all our lists
if object == self.current:
! self._setCurrent(object)
! def onDeleteObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
***************
*** 314,320 ****
# A Datasource was selected in the menu
def OnDSSelected(self, event):
self.current = self.datasourceMap[event.GetData()]
! self.instance.onSetCurrentObject(self.current, __name__)
def OnAddDSSelected(self, event):
--- 331,337 ----
# A Datasource was selected in the menu
def OnDSSelected(self, event):
self.current = self.datasourceMap[event.GetData()]
!
self.instance.dispatchEvent(events.Event('ObjectSelected',object=self.current,
originator=__name__))
def OnAddDSSelected(self, event):
***************
*** 380,386 ****
EVT_SIZE(self, self.OnSize)
! def onSetCurrentObject(self, object, controller):
if isinstance(object, GDataSource.GDataSource):
self.current = object
--- 397,403 ----
EVT_SIZE(self, self.OnSize)
! def setCurrent(self, object):
if isinstance(object, GDataSource.GDataSource):
self.current = object
***************
*** 414,420 ****
EVT_SIZE(self, self.OnSize)
! def onSetCurrentObject(self, object, controller):
if isinstance(object, GDataSource.GDataSource):
self.current = object
self.fillList()
--- 431,437 ----
EVT_SIZE(self, self.OnSize)
! def setCurrent(self, object):
if isinstance(object, GDataSource.GDataSource):
self.current = object
self.fillList()
***************
*** 589,595 ****
GDebug.printMesg(5,"%s"%buffer.getvalue())
buffer.close()
! def onSetCurrentObject(self, object, controller):
if isinstance(object, GDataSource.GDataSource):
self.current = object
self.fillList()
--- 606,612 ----
GDebug.printMesg(5,"%s"%buffer.getvalue())
buffer.close()
! def setCurrent(self, object):
if isinstance(object, GDataSource.GDataSource):
self.current = object
self.fillList()
Index: gnue/designer/src/EventEditor.py
diff -c gnue/designer/src/EventEditor.py:1.1
gnue/designer/src/EventEditor.py:1.2
*** gnue/designer/src/EventEditor.py:1.1 Fri Nov 22 20:48:02 2002
--- gnue/designer/src/EventEditor.py Mon Nov 25 00:41:41 2002
***************
*** 19,127 ****
# Copyright 2001-2002 Free Software Foundation
#
# FILE:
! # EventEditor.py
#
# DESCRIPTION:
#
# NOTES:
#
import sys, os, string
from wxPython.wx import *
from wxPython.grid import *
from gnue.common import GDebug, GTypecast
from ToolPanel import *
- #
- #
- #
class EventEditor (ToolPanel):
! runtime_section = "DataSourceEditor"
def init(self):
self.objectList = []
self.objectMap = {}
! self.object = None
! self.grid = wxGrid(self, -1, pos=wxPoint(0,0))
self.grid.CreateGrid(1,1)
EVT_SIZE(self, self.onSize)
! def onSetCurrentObject (self, object, handler):
- if object == None:
- return
- if handler != __name__:
self.object = object
- elements = self.instance.incubator.elements
try:
! self.attributes =
elements[string.lower(object._type[2:])]['Attributes']
! except KeyError:
! self.attributes = {}
! self.elements = elements[string.lower(object._type[2:])]
! # This is a nasty temporary way of refreshing grid
! if self.grid:
! self.grid.Destroy()
! self.grid = wxGrid(self, -1, pos=wxPoint(0,0))
!
! self.grid.CreateGrid(len(self.attributes.keys()),1)
! self.grid.SetColLabelSize(0)
! self.rowList = self.attributes.keys()
self.rowList.sort()
i = 0
! for key in self.rowList:
! self.grid.SetRowLabelValue(i, string.upper(key[0]) +
string.lower(key[1:]))
! if hasattr(object, key):
! self.grid.SetCellValue(i,0,"%s" % object.__dict__[key])
i = i + 1
- self.onSize(None)
- EVT_GRID_CELL_CHANGE(self.grid, self.OnCellChange)
- def onCreateObject (self, object, handler):
! # Until this works!
! return
- pass
! def onModifyObject (self, object, handler, modifications):
- # Until this works!
- return
! if object == None:
return
! if handler != __name__ and self.object == object:
! # for modification in modifications:
# attribute, value = modification
! self.onSetCurrentObject(object, handler)
!
! def onDeleteObject (self, object, handler):
- # Until this works!
- return
! if object == None:
return
if handler != __name__:
pass
! def onSize(self, event):
x,y = self.GetClientSizeTuple()
! self.SetSize((x-12,y-12))
! self.grid.SetSize(self.GetClientSizeTuple())
w,h = self.grid.GetClientSizeTuple()
self.grid.SetColSize(0, w - self.grid.GetRowLabelSize())
def OnCellChange(self, evt):
attr = self.rowList[evt.GetRow()]
value = self.grid.GetCellValue(evt.GetRow(), evt.GetCol())
! try:
! self.object.__dict__[attr] = self.attributes[attr][2](value)
! self.instance.onModifyObject(self.object, __name__, ((attr,
self.object.__dict__[attr]),))
evt.Skip()
except ValueError:
wxBell()
--- 19,444 ----
# Copyright 2001-2002 Free Software Foundation
#
# FILE:
! # PropertyEditor.py
#
# DESCRIPTION:
#
# NOTES:
#
+
import sys, os, string
from wxPython.wx import *
from wxPython.grid import *
from gnue.common import GDebug, GTypecast
from ToolPanel import *
class EventEditor (ToolPanel):
! runtime_section = 'EventEditor'
! uses_feedback_header = 1
def init(self):
+ self.panel = wxPanel(self,-1,style=wxSIMPLE_BORDER, pos=wxPoint(6,6))
+
+ self.object = None
self.objectList = []
self.objectMap = {}
!
! # Set up our grid
! self.grid = wxGrid(self.panel, -1, pos=wxPoint(0,0))
self.grid.CreateGrid(1,1)
+ self.grid.SetColLabelSize(0)
+
+ EVT_GRID_CELL_CHANGE(self.grid, self.OnCellChange)
+ EVT_GRID_CELL_LEFT_DCLICK(self.grid, self.OnLeftDClick)
EVT_SIZE(self, self.onSize)
! # EventAware provided by ToolPanel
! self.registerEventListeners({
! 'ObjectSelected' : self.onSetCurrentObject,
! 'ObjectCreated' : self.onCreateObject,
! 'ObjectModified' : self.onModifyObject,
! 'ObjectDeleted' : self.onDeleteObject,
! })
!
! def onSetCurrentObject (self, event):
! object = event.object
! handler = event.originator
! if object and handler != self:
! self._setCurrent(object)
!
! def _setCurrent(self, object):
! try:
! text = "%s Triggers (%s)" %
(object._type[2:].capitalize(),object.name)
! except:
! text = object.getDescription()
! self.setHeaderText(text)
self.object = object
try:
! self.triggerList = object._validTriggers
! except AttributeError:
! self.triggerList = {}
! # Speed up the process by not refreshing the grid yet
! self.grid.BeginBatch()
!
! # Delete any old rows from a previous object
! nr = self.grid.GetNumberRows()
! if nr:
! self.grid.DeleteRows(0,nr)
!
!
! self.rowList = self.triggerList.keys()
self.rowList.sort()
+
+ # Create the number of rows we'll need
+ self.grid.InsertRows(0,len(self.rowList))
+ self.triggerTypes = {'NONE':'<None>',
+ 'CUSTOM':'<Custom Trigger>',
+ 'NAMED':'Named Trigger'}
+
i = 0
!
! for key in self.rowList:
! self.grid.SetRowLabelValue(i,self.triggerList[key])
! self.grid.SetCellEditor(i, 0,
RestrictedCellEditor(self.grid,self.triggerTypes))
! self.grid.SetCellValue(i,0, "%s" % 'CUSTOM')
i = i + 1
! # Redraw the grid
! self.grid.EndBatch()
! try:
! self.grid.ForceRefresh() # Added in 2.3.1
! except AttributeError:
! pass
! def onCreateObject (self, event):
! object = event.object
! handler = event.originator
! def onModifyObject (self, event):
! object = event.object
! handler = event.originator
! if object == None:
return
! if handler != self and self.object == object:
! # for modification in modifications:
# attribute, value = modification
! self._setCurrent(object)
! def onDeleteObject (self, event):
! object = event.object
! handler = event.originator
! if object == None:
return
if handler != __name__:
pass
!
! def onSize(self, event):
x,y = self.GetClientSizeTuple()
! self.panel.SetSize((x-12,y-12))
! self.grid.SetSize(self.panel.GetClientSizeTuple())
w,h = self.grid.GetClientSizeTuple()
self.grid.SetColSize(0, w - self.grid.GetRowLabelSize())
+ try:
+ self.grid.ForceRefresh() # Added in 2.3.1
+ except AttributeError:
+ pass
+
+
+
+ # Force a grid cell into Edit mode when Double-Clicked
+ def OnLeftDClick(self,evt):
+ if self.grid.CanEnableCellControl():
+ self.grid.EnableCellEditControl()
def OnCellChange(self, evt):
attr = self.rowList[evt.GetRow()]
value = self.grid.GetCellValue(evt.GetRow(), evt.GetCol())
! try:
! try:
! oldVal = {attr: self.object.__dict__[attr]}
! except KeyError:
! oldVal = {attr: None}
! self.object.__dict__[attr] = self.attributes[attr]['Typecast'](value)
! newVal = {attr: self.object.__dict__[attr]}
! self.dispatchEvent('ObjectModified',
! object=self.object,
! originator=self,
! old=oldVal,
! new=newVal)
evt.Skip()
except ValueError:
wxBell()
+
+ #
+ #
+ #
+ class CharCellEditor (wxPyGridCellEditor):
+ def __init__(self, grid, attributes):
+ wxPyGridCellEditor.__init__(self)
+ self.grid = grid
+ self.attributes = attributes
+ self.__created = 0
+
+
+ def Create(self, parent, id, evtHandler):
+ self.__created = 1
+ GDebug.printMesg(10,'Creating CharCellEditor')
+ self._tc = wxTextCtrl(parent, id, "")
+ self._tc.SetInsertionPoint(0)
+ self.SetControl(self._tc)
+ if evtHandler:
+ self._tc.PushEventHandler(evtHandler)
+
+ def SetSize(self, rect):
+ self._tc.SetDimensions(rect.x, rect.y, rect.width+2, rect.height+2)
+
+ def Show(self, show, attr):
+ self.base_Show(show, attr)
+
+ def PaintBackground(self, rect, attr):
+ pass
+
+ def BeginEdit(self, row, col, grid):
+ self.startValue = grid.GetTable().GetValue(row, col)
+ self._tc.SetValue(self.startValue)
+ self._tc.SetInsertionPointEnd()
+ self._tc.SetFocus()
+
+ # For this example, select the text
+ self._tc.SetSelection(0, self._tc.GetLastPosition())
+
+
+ def EndEdit(self, row, col, grid):
+ changed = false
+
+ val = self._tc.GetValue()
+ if val != self.startValue:
+ changed = true
+ grid.GetTable().SetValue(row, col, val) # update the table
+
+ self.startValue = ''
+ self._tc.SetValue('')
+ return changed
+
+
+ def Reset(self):
+ self._tc.SetValue(self.startValue)
+ self._tc.SetInsertionPointEnd()
+
+
+ def IsAcceptedKey(self, evt):
+ return (not (evt.ControlDown() or evt.AltDown()) and
+ evt.GetKeyCode() != WXK_SHIFT)
+
+
+ def StartingKey(self, evt):
+ GDebug.printMesg(10, "Starting Key; created=%s" % self.__created)
+ key = evt.GetKeyCode()
+ ch = None
+ if key in [WXK_NUMPAD0, WXK_NUMPAD1, WXK_NUMPAD2, WXK_NUMPAD3,
WXK_NUMPAD4,
+ WXK_NUMPAD5, WXK_NUMPAD6, WXK_NUMPAD7, WXK_NUMPAD8,
WXK_NUMPAD9]:
+ ch = ch = chr(ord('0') + key - WXK_NUMPAD0)
+
+ elif key < 256 and key >= 0 and chr(key):
+ ch = chr(key)
+ if not evt.ShiftDown():
+ ch = string.lower(ch)
+
+ if ch is not None:
+ # For this example, replace the text. Normally we would append it.
+ #self._tc.AppendText(ch)
+ # self._tc.SetValue(ch)
+ # self._tc.SetInsertionPointEnd()
+ pass
+ else:
+ evt.Skip()
+
+
+ def StartingClick(self):
+ pass
+
+ def Destroy(self):
+ self.base_Destroy()
+
+ def Clone(self):
+ return CharCellEditor(self.attributes)
+
+
+ class IntCellEditor (CharCellEditor):
+ def __init__(self, grid, attributes):
+ CharCellEditor.__init__(self, grid, attributes)
+
+ def Create(self, parent, id, evtHandler):
+ CharCellEditor.Create(self, parent, id, evtHandler)
+ EVT_CHAR(self._tc, self.OnKeyPressed)
+
+ def OnKeyPressed(self, evt):
+ if (ord('0') <= evt.KeyCode() <= ord('9') or \
+ evt.KeyCode() in (ord('-'), ord('+')) or \
+ evt.KeyCode() < 32 or evt.KeyCode() > 126):
+ evt.Skip()
+
+ def StartingKey(self, evt):
+ key = evt.GetKeyCode()
+ ch = None
+ if key in [WXK_NUMPAD0, WXK_NUMPAD1, WXK_NUMPAD2, WXK_NUMPAD3,
WXK_NUMPAD4,
+ WXK_NUMPAD5, WXK_NUMPAD6, WXK_NUMPAD7, WXK_NUMPAD8,
WXK_NUMPAD9]:
+ ch = ch = chr(ord('0') + key - WXK_NUMPAD0)
+
+ elif key < 256 and key >= 0 and chr(key):
+ ch = chr(key)
+ if not evt.ShiftDown():
+ ch = string.lower(ch)
+
+ if '0' <= ch <= '9':
+ # For this example, replace the text. Normally we would append it.
+ #self._tc.AppendText(ch)
+ pass
+ # self._tc.SetValue(ch)
+ # self._tc.SetInsertionPointEnd()
+ else:
+ evt.Skip()
+
+
+ class RestrictedCellEditor (CharCellEditor):
+ def __init__(self, grid, attributes):
+ CharCellEditor.__init__(self, grid, attributes)
+ self.valueList = attributes.keys()
+
+ self.valueList.sort()
+ self.selectionList = []
+ self.valueMap = {}
+
+ i = 0
+ for v in self.valueList:
+ self.valueMap[v] = i
+ self.selectionList.append("%s" % (attributes[v] or v))
+ i = i + 1
+
+ ## self.valueList.insert(0, '')
+
+ def Create(self, parent, id, evtHandler):
+ GDebug.printMesg(10,'Creating CharCellEditor')
+ self._tc = wxComboBox(parent, id, "", style=wxCB_READONLY,
+ choices=self.selectionList)
+ self.SetControl(self._tc)
+ if evtHandler:
+ self._tc.PushEventHandler(evtHandler)
+
+ def BeginEdit(self, row, col, grid):
+ self.startValue = grid.GetTable().GetValue(row, col)
+ self._tc.SetSelection(self.valueMap[self.startValue])
+ self._tc.SetFocus()
+
+ def EndEdit(self, row, col, grid):
+ changed = false
+
+ val = self.valueList[self._tc.GetSelection()]
+ if val != self.startValue:
+ changed = true
+ grid.GetTable().SetValue(row, col, "%s" % val) # update the table
+
+ self.startValue = ''
+ self._tc.SetSelection(0)
+ return changed
+
+
+ def Reset(self):
+ self._tc.SetSelection(self.valueMap[self.startValue])
+ #self._tc.SetInsertionPointEnd()
+
+
+ def StartingKey(self, evt):
+ key = evt.GetKeyCode()
+ ch = None
+ if key in [WXK_NUMPAD0, WXK_NUMPAD1, WXK_NUMPAD2, WXK_NUMPAD3,
WXK_NUMPAD4,
+ WXK_NUMPAD5, WXK_NUMPAD6, WXK_NUMPAD7, WXK_NUMPAD8,
WXK_NUMPAD9]:
+ ch = ch = chr(ord('0') + key - WXK_NUMPAD0)
+
+ elif key < 256 and key >= 0 and chr(key):
+ ch = chr(key)
+ if not evt.ShiftDown():
+ ch = string.lower(ch)
+
+ if ch is not None:
+ # For this example, replace the text. Normally we would append it.
+ #self._tc.AppendText(ch)
+ pass
+ # self._tc.SetValue(ch)
+ # self._tc.SetInsertionPointEnd()
+ else:
+ evt.Skip()
+
+
+ class BoolCellEditor (CharCellEditor):
+ def __init__(self, grid, attributes):
+ CharCellEditor.__init__(self, grid, attributes)
+
+ self.selectionList = ['FALSE','TRUE']
+
+ def Create(self, parent, id, evtHandler):
+ self._tc = wxComboBox(parent, id, "", style=wxCB_READONLY,
+ choices=self.selectionList)
+ self.SetControl(self._tc)
+ if evtHandler:
+ self._tc.PushEventHandler(evtHandler)
+
+ def BeginEdit(self, row, col, grid):
+ self.startValue = grid.GetTable().GetValue(row, col)
+
+ self._tc.SetValue(self.startValue)
+ self._tc.SetFocus()
+
+ def EndEdit(self, row, col, grid):
+ changed = false
+
+ if self._tc.GetSelection():
+ val = 'TRUE'
+ else:
+ val = 'FALSE'
+ if val != self.startValue:
+ changed = true
+ grid.GetTable().SetValue(row, col, "%s" % val) # update the table
+
+ self.startValue = ''
+ self._tc.SetSelection(0)
+ return changed
+
+
+ def Reset(self):
+ self._tc.SetValue(self.startValue)
+ #self._tc.SetInsertionPointEnd()
+
+
+ def StartingKey(self, evt):
+ key = evt.GetKeyCode()
+ ch = None
+ if key in [WXK_NUMPAD0, WXK_NUMPAD1, WXK_NUMPAD2, WXK_NUMPAD3,
WXK_NUMPAD4,
+ WXK_NUMPAD5, WXK_NUMPAD6, WXK_NUMPAD7, WXK_NUMPAD8,
WXK_NUMPAD9]:
+ ch = ch = chr(ord('0') + key - WXK_NUMPAD0)
+
+ elif key < 256 and key >= 0 and chr(key):
+ ch = chr(key)
+ if not evt.ShiftDown():
+ ch = string.lower(ch)
+
+ if ch is not None:
+ # For this example, replace the text. Normally we would append it.
+ #self._tc.AppendText(ch)
+ pass
+ # self._tc.SetValue(ch)
+ # self._tc.SetInsertionPointEnd()
+ else:
+ evt.Skip()
+
Index: gnue/designer/src/Instance.py
diff -c gnue/designer/src/Instance.py:1.68 gnue/designer/src/Instance.py:1.69
*** gnue/designer/src/Instance.py:1.68 Fri Nov 22 20:48:02 2002
--- gnue/designer/src/Instance.py Mon Nov 25 00:41:41 2002
***************
*** 37,42 ****
--- 37,43 ----
from gnue.common.events import EventController, Event
from ToolFrame import ToolFrame
from ToolPanel import ToolPanel
+ from ToolDock import *
from gnue.designer import VERSION, PACKAGE
from gnue.designer.Debugger import DebugSession
import TemplateBase
***************
*** 123,128 ****
--- 124,136 ----
self._path = ""
+ self.registerEventListeners({
+ 'ObjectSelected' : self.__onSetCurrentObject,
+ 'ObjectCreated' : self.__onCreateObject,
+ 'ObjectModified' : self.__onModifyObject,
+ 'ObjectDeleted' : self.__onDeleteObject,
+ })
+
if location == None:
if buffer != None:
***************
*** 163,191 ****
self.SetStatusText('Welcome to GNUe Designer. Watch your step and try not
to get hurt.')
self._menubar = MainMenuBar(self)
self.SetMenuBar(self._menubar)
- self.Show(true)
self.rootObject.walk(self.__inventory)
# Create the supplemental tools
- self.__objectListeners = []
self._toolCache = []
self.createTools()
self._initTools()
self.createWizards()
self._menubar.buildMenu()
- # Create our tools
- ## self.visualEditorWindow = self
- ## self.visualEditor = self.createVisualEditor()
- ## self.__objectListeners.append(self.visualEditor)
self._app.addInstance(self)
# Fit the widgets to the screen
- ## self.visualEditor.Fit()
self.Fit()
self.SetSize((
--- 171,192 ----
***************
*** 196,203 ****
RuntimeSettings.getint(self.runtime_section, 'x', -1),
RuntimeSettings.getint(self.runtime_section, 'y', -1)))
! self.onSetCurrentObject(self.rootObject, __name__)
self.Refresh()
EVT_CLOSE(self, self.OnClose)
--- 197,207 ----
RuntimeSettings.getint(self.runtime_section, 'x', -1),
RuntimeSettings.getint(self.runtime_section, 'y', -1)))
! self.dispatchEvent(Event('ObjectSelected', originator=self,
! object=self.rootObject))
! ##self.onSetCurrentObject(self.rootObject, __name__)
+ self.Show(true)
self.Refresh()
EVT_CLOSE(self, self.OnClose)
***************
*** 210,249 ****
cache = []
! for id, title, baseclass in self._toolCache:
! if baseclass.DEFAULTDOC
! pos = RuntimeSettings.get(self.runtime_section, 'Dock-%s' % id,
baseclass.default_dock),
lefties += 1 and (pos == 'left')
toppies += 1 and (pos == 'top')
bottomites += 1 and (pos == 'bottom')
! cache.append( (id, title, baseclass, pos) )
if lefties:
! self.horizSplitter = wxSplitter(self, -1, style=wxSP_FULLSASH)
rightWin = leftWin = self.horizSplitter
if lefties > 1:
! leftPane = MultiTooledPane(leftWin)
else:
! leftPane = SingleTooledPane(leftWin)
!
! leftPane.AddTool
else:
rightWin = leftWin = self
if bottomites:
! topWin = bottomWin = self.vertSplitter = wxSplitter(rightWin, -1,
style=wxSP_FULLSASH)
else:
topWin = bottomWin = rightWin
- self.mainArea = wxPanel(self, -1)
- self.left = wxPanel(self, -1)
! for id, title, baseclass, pos in cache:
if id == None:
self._menubar.addToolSeparator()
else:
--- 214,258 ----
cache = []
! for id, title, baseclass, hotkey in self._toolCache:
! if not id: continue
! print "Dock-%s" % id
! pos = RuntimeSettings.get(self.runtime_section, 'Dock-%s' % id,
baseclass.default_dock)
lefties += 1 and (pos == 'left')
toppies += 1 and (pos == 'top')
bottomites += 1 and (pos == 'bottom')
! cache.append( (id, title, baseclass, hotkey, pos) )
if lefties:
! self.horizSplitter = wxSplitterWindow(self, -1, style=wxSP_3D)
rightWin = leftWin = self.horizSplitter
if lefties > 1:
! leftPane = MultiTooledPane(leftWin, self)
else:
! leftPane = SingleTooledPane(leftWin, self)
else:
rightWin = leftWin = self
if bottomites:
! topWin = bottomWin = self.vertSplitter = wxSplitterWindow(rightWin, -1,
style=wxSP_3D)
! if bottomites > 1:
! bottomPane = MultiTooledPane(bottomWin, self)
! else:
! bottomPane = SingleTooledPane(bottomWin, self)
else:
topWin = bottomWin = rightWin
+ if toppies > 1:
+ topPane = MultiTooledPane(topWin, self)
+ else:
+ topPane = SingleTooledPane(topWin, self)
! for id, title, baseclass, hotkey, pos in cache:
if id == None:
self._menubar.addToolSeparator()
else:
***************
*** 251,284 ****
if pos == 'frame':
window = ToolFrame(self, title)
control = baseclass(self, self.rootObject, window)
elif pos == 'left':
! control = leftPane.AddTool(title, baseclass, self.rootObject)
window = leftPane.GetWindow()
elif pos == 'top':
! control = topPane.AddTool(title, baseclass, self.rootObject)
window = topPane.GetWindow()
elif pos == 'bottom':
! control = bottomPane.AddTool(title, baseclass, self.rootObject)
window = bottomPane.GetWindow()
! control = baseclass(self, self.rootObject, window)
self.__dict__["%sWindow" % id] = window
self.__dict__[id] = control
- self.__objectListeners.append(control)
-
if lefties:
! self.horizSplitter.SplitVertically(leftPane, self.vertSplitter)
if bottomites:
! self.vertSplitter.SplitHorizontally(topPane, bottomPane)
! def addTool(self, id, title, baseclass):
! self._toolCache.append( (id, title, baseclass) )
def addToolSeparator(self):
! self._toolCache.append( (None, None, None) )
def addToolCreate(self, title, method):
self._menubar.addToolCreate(title, method)
--- 260,299 ----
if pos == 'frame':
window = ToolFrame(self, title)
control = baseclass(self, self.rootObject, window)
+ window.control = control
elif pos == 'left':
! control = leftPane.AddTool(title, baseclass, self.rootObject, self)
window = leftPane.GetWindow()
elif pos == 'top':
! control = topPane.AddTool(title, baseclass, self.rootObject, self)
window = topPane.GetWindow()
elif pos == 'bottom':
! control = bottomPane.AddTool(title, baseclass, self.rootObject,
self)
window = bottomPane.GetWindow()
! # Add ourselves to the Window menu
! control._menutool = self._menubar.addTool(window, title, hotkey)
!
self.__dict__["%sWindow" % id] = window
self.__dict__[id] = control
if lefties:
! self.horizSplitter.SetSize(self.GetClientSize())
! self.horizSplitter.SplitVertically(leftPane.GetWindow(),
self.vertSplitter,
! RuntimeSettings.getint(self.runtime_section,
'DockSplitter-Horiz',200))
if bottomites:
! self.vertSplitter.SplitHorizontally(topPane.GetWindow(),
bottomPane.GetWindow(),
! RuntimeSettings.getint(self.runtime_section,
'DockSplitter-Vert-Right',200))
!
! # topPane.GetWindow().Fit()
! def addTool(self, id, title, baseclass, hotkey=None):
! self._toolCache.append( (id, title, baseclass, hotkey) )
def addToolSeparator(self):
! self._toolCache.append( (None, None, None, None) )
def addToolCreate(self, title, method):
self._menubar.addToolCreate(title, method)
***************
*** 313,323 ****
def saveRuntimeSettings(self):
x, y = self.GetPositionTuple()
width, height = self.GetSizeTuple()
! return ( self.runtime_section,
! { 'x': abs(x),
! 'y': abs(y),
! 'height': height,
! 'width': width } )
# Do we need to be saved?
def isDirty(self):
--- 328,348 ----
def saveRuntimeSettings(self):
x, y = self.GetPositionTuple()
width, height = self.GetSizeTuple()
! settings = { 'x': abs(x),
! 'y': abs(y),
! 'height': height,
! 'width': width }
! try:
! settings['docksplitter-vert-right'] =
self.vertSplitter.GetSashPosition()
! except AttributeError:
! pass
!
! try:
! settings['DockSplitter-Horiz'] = self.horizSplitter.GetSashPosition()
! except AttributeError:
! pass
!
! return ( self.runtime_section, settings )
# Do we need to be saved?
def isDirty(self):
***************
*** 348,354 ****
def __inventory (self, object):
if object != self.rootObject:
!
# just a hack for designer.reports.TreeView.py (btami)
if object._xmlnamespace:
if object.name:
--- 373,379 ----
def __inventory (self, object):
if object != self.rootObject:
!
# just a hack for designer.reports.TreeView.py (btami)
if object._xmlnamespace:
if object.name:
***************
*** 356,362 ****
else:
object._description = object._xmltag + "(out:)"
! # Assign an ID if none exists
# TODO: in the future, I want to change these to id=".." instead of
name=".."
if hasattr(object, 'name'):
if (object.name == None or ( \
--- 381,387 ----
else:
object._description = object._xmltag + "(out:)"
! # Assign an ID if none exists
# TODO: in the future, I want to change these to id=".." instead of
name=".."
if hasattr(object, 'name'):
if (object.name == None or ( \
***************
*** 369,395 ****
self.inventoryObject(object)
! def onSetCurrentObject (self, object, handler):
self._currentObject = object
- for listener in self.__objectListeners:
- listener.onSetCurrentObject(object, handler)
! def onCreateObject (self, object, handler):
self.__inventory(object)
- for listener in self.__objectListeners:
- listener.onCreateObject(object, handler)
self.makeDirty()
! def onModifyObject (self, object, handler, modifications):
! for listener in self.__objectListeners:
! listener.onModifyObject(object, handler, modifications)
self.makeDirty()
! def onDeleteObject (self, object, handler):
!
! # Notify all listeners
! for listener in self.__objectListeners:
! listener.onDeleteObject(object, handler)
# Delete the actual object from its parent
i = 0
--- 394,427 ----
self.inventoryObject(object)
! def __onSetCurrentObject (self, event):
! object = event.object
! handler = event.originator
self._currentObject = object
! def __onCreateObject (self, object, handler):
self.__inventory(object)
self.makeDirty()
! def __onModifyObject (self, event):
! object = event.object
! # Check for any name dependencies
! # (i.e., GFEntry is dependent on GFBlock.name and GFField.name)
! # Automatically create any change events for the child objects
! if hasattr(object, '_nameDependencies'):
! for key in object._nameDependencies.keys():
! masterattr, slaveattr = object._nameDependencies[key]
! if masterattr in event.new.keys():
! oa = {slaveattr: key[slaveattr]}
! na = {slaveattr: object[masterattr]}
! key.__dict__.update(na)
! self.dispatchEvent( 'ObjectModified',
! object=key,
! originator=self,
! old=oa, new=na )
self.makeDirty()
! def __onDeleteObject (self, object, handler):
# Delete the actual object from its parent
i = 0
***************
*** 621,688 ****
- def MultipleTooledPane(wxNotebook):
- def __init__(self, parent, menutool):
- wxNotebook.__init__(self, parent, -1, style=wxCLIP_CHILDREN):
- self.menutool = menutool
-
- def AddTool(self, title, baseclass, rootObject):
- control = baseclass(self, rootObject, self.parent)
- self.AddPage(control, title)
- return control
-
- def GetWindow(self):
- return self
-
-
- ######
- def OnMenuSelected(self, event):
- if self.menutool.menu.IsChecked():
- self.show()
- else:
- self.hide()
-
- def show(self):
- self.menutool.menu.SetHelp(_("Hide the %s window") % self.title)
- self.menutool.menu.Check(1)
- self.Show(1)
-
- def hide(self):
- self.menutool.menu.SetHelp(_("Show the %s window") % self.title)
- self.menutool.menu.Check(0)
- self.Show(0)
-
-
-
- def SingleTooledPane:
- def __init__(self, parent):
- self.menutool = menutool
- self.parent = parent
-
- def AddTool(self, title, baseclass, rootObject):
- self.window = baseclass(self, rootObject, self.parent)
- return self.window
-
- def GetWindow(self):
- return self.window
-
- ######
- def OnMenuSelected(self, event):
- if self.menutool.menu.IsChecked():
- self.show()
- else:
- self.hide()
-
- def show(self):
- self.menutool.menu.SetHelp(_("Hide the %s window") % self.title)
- self.menutool.menu.Check(1)
- self.Show(1)
-
- def hide(self):
- self.menutool.menu.SetHelp(_("Show the %s window") % self.title)
- self.menutool.menu.Check(0)
- self.Show(0)
-
#
# Helper class used by the tool-specific packages
--- 653,658 ----
***************
*** 694,707 ****
description = 'undefined'
fileExtensions = {}
defaultFileExtension = 'undefined'
-
-
-
-
-
-
-
-
-
--- 664,668 ----
Index: gnue/designer/src/MenuBar.py
diff -c gnue/designer/src/MenuBar.py:1.33 gnue/designer/src/MenuBar.py:1.34
*** gnue/designer/src/MenuBar.py:1.33 Fri Nov 22 20:48:02 2002
--- gnue/designer/src/MenuBar.py Mon Nov 25 00:41:41 2002
***************
*** 302,310 ****
! def addTool(self, toolFrame, title):
location = 'Tools|%s' % title
! self._menuMappings[location] = ToolRunner(toolFrame, title)
self._toolMenuOrder.append(location)
return self._menuMappings[location]
--- 302,310 ----
! def addTool(self, toolFrame, title, hotkey=None):
location = 'Tools|%s' % title
! self._menuMappings[location] = ToolRunner(toolFrame, title, hotkey)
self._toolMenuOrder.append(location)
return self._menuMappings[location]
***************
*** 321,331 ****
class ToolRunner:
! def __init__(self, toolFrame, title):
self.toolFrame = toolFrame
self.wxId = wxNewId()
! self.title = title
self.checkable = 1
self.tooltip = _("Show or hide the %s") % title
--- 321,332 ----
class ToolRunner:
! def __init__(self, toolFrame, title, hotkey):
self.toolFrame = toolFrame
+ self.hotkey = hotkey
self.wxId = wxNewId()
! self.title = title + (hotkey and '\t%s'% hotkey or '')
self.checkable = 1
self.tooltip = _("Show or hide the %s") % title
Index: gnue/designer/src/PropertyEditor.py
diff -c gnue/designer/src/PropertyEditor.py:1.29
gnue/designer/src/PropertyEditor.py:1.30
*** gnue/designer/src/PropertyEditor.py:1.29 Fri Nov 22 20:48:02 2002
--- gnue/designer/src/PropertyEditor.py Mon Nov 25 00:41:41 2002
***************
*** 36,41 ****
--- 36,42 ----
class PropertyEditor (ToolPanel):
runtime_section = 'PropertyEditor'
+ uses_feedback_header = 1
def init(self):
self.panel = wxPanel(self,-1,style=wxSIMPLE_BORDER, pos=wxPoint(6,6))
***************
*** 53,63 ****
EVT_GRID_CELL_LEFT_DCLICK(self.grid, self.OnLeftDClick)
EVT_SIZE(self, self.onSize)
!
! def onSetCurrentObject (self, object, handler):
if object == None:
return
! if handler != __name__:
self.object = object
elements = self.instance.incubator.elements
try:
--- 54,82 ----
EVT_GRID_CELL_LEFT_DCLICK(self.grid, self.OnLeftDClick)
EVT_SIZE(self, self.onSize)
! # EventAware provided by ToolPanel
! self.registerEventListeners({
! 'ObjectSelected' : self.onSetCurrentObject,
! 'ObjectCreated' : self.onCreateObject,
! 'ObjectModified' : self.onModifyObject,
! 'ObjectDeleted' : self.onDeleteObject,
! })
!
! def onSetCurrentObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
! if handler != self:
! self._setCurrent(object)
!
! def _setCurrent(self, object):
! try:
! text = "%s Properties (%s)" %
(object._type[2:].capitalize(),object.name)
! except:
! text = object.getDescription()
! self.setHeaderText(text)
!
self.object = object
elements = self.instance.incubator.elements
try:
***************
*** 66,72 ****
self.attributes = {}
self.elements = elements[string.lower(object._type[2:])]
!
# Speed up the process by not refreshing the grid yet
self.grid.BeginBatch()
--- 85,91 ----
self.attributes = {}
self.elements = elements[string.lower(object._type[2:])]
!
# Speed up the process by not refreshing the grid yet
self.grid.BeginBatch()
***************
*** 89,97 ****
self.attributes[key]['Deprecated'] and \
(not hasattr(object, key) or \
(self.attributes[key].has_key('Default') and \
! object.__dict__[key] == self.attributes[key]['Default'] ) ):
self.rowList.pop(i)
! else:
i = i + 1
--- 108,116 ----
self.attributes[key]['Deprecated'] and \
(not hasattr(object, key) or \
(self.attributes[key].has_key('Default') and \
! object.__dict__[key] == self.attributes[key]['Default'] ) ):
self.rowList.pop(i)
! else:
i = i + 1
***************
*** 114,122 ****
# Determine the type of Cell Editor we want
# (Integer, Boolean, Dropdown, Char)
! if self.attributes[key].has_key('ValueSet'):
self.grid.SetCellEditor(i, 0,
RestrictedCellEditor(self.grid,self.attributes[key]))
! elif self.attributes[key]['Typecast'] == GTypecast.boolean:
self.grid.SetCellEditor(i, 0,
BoolCellEditor(self.grid,self.attributes[key]))
elif self.attributes[key]['Typecast'] in (GTypecast.integer,
GTypecast.number, GTypecast.whole):
--- 133,141 ----
# Determine the type of Cell Editor we want
# (Integer, Boolean, Dropdown, Char)
! if self.attributes[key].has_key('ValueSet'):
self.grid.SetCellEditor(i, 0,
RestrictedCellEditor(self.grid,self.attributes[key]))
! elif self.attributes[key]['Typecast'] == GTypecast.boolean:
self.grid.SetCellEditor(i, 0,
BoolCellEditor(self.grid,self.attributes[key]))
elif self.attributes[key]['Typecast'] in (GTypecast.integer,
GTypecast.number, GTypecast.whole):
***************
*** 125,139 ****
self.grid.SetCellEditor(i, 0,
CharCellEditor(self.grid,self.attributes[key]))
! # Set the initial value of the cells to the current property values
! if hasattr(object, key):
if self.attributes[key]['Typecast'] == GTypecast.boolean:
! if object.__dict__[key]:
self.grid.SetCellValue(i,0,"TRUE")
! else:
self.grid.SetCellValue(i,0,"FALSE")
pass
! else:
self.grid.SetCellValue(i,0, "%s" % object.__dict__[key])
pass
i = i + 1
--- 144,158 ----
self.grid.SetCellEditor(i, 0,
CharCellEditor(self.grid,self.attributes[key]))
! # Set the initial value of the cells to the current property values
! if hasattr(object, key):
if self.attributes[key]['Typecast'] == GTypecast.boolean:
! if object.__dict__[key]:
self.grid.SetCellValue(i,0,"TRUE")
! else:
self.grid.SetCellValue(i,0,"FALSE")
pass
! else:
self.grid.SetCellValue(i,0, "%s" % object.__dict__[key])
pass
i = i + 1
***************
*** 141,167 ****
# Redraw the grid
self.grid.EndBatch()
! try:
self.grid.ForceRefresh() # Added in 2.3.1
! except AttributeError:
pass
! def onCreateObject (self, object, handler):
! pass
! def onModifyObject (self, object, handler, modifications):
! if object == None:
return
! if handler != __name__ and self.object == object:
! # for modification in modifications:
# attribute, value = modification
! self.onSetCurrentObject(object, handler)
! def onDeleteObject (self, object, handler):
! if object == None:
return
if handler != __name__:
pass
--- 160,191 ----
# Redraw the grid
self.grid.EndBatch()
! try:
self.grid.ForceRefresh() # Added in 2.3.1
! except AttributeError:
pass
! def onCreateObject (self, event):
! object = event.object
! handler = event.originator
! def onModifyObject (self, event):
! object = event.object
! handler = event.originator
! if object == None:
return
! if handler != self and self.object == object:
! # for modification in modifications:
# attribute, value = modification
! self._setCurrent(object)
! def onDeleteObject (self, event):
! object = event.object
! handler = event.originator
! if object == None:
return
if handler != __name__:
pass
***************
*** 189,199 ****
attr = self.rowList[evt.GetRow()]
value = self.grid.GetCellValue(evt.GetRow(), evt.GetCol())
! try:
self.object.__dict__[attr] = self.attributes[attr]['Typecast'](value)
! self.instance.onModifyObject(self.object, __name__, ((attr,
self.object.__dict__[attr]),))
evt.Skip()
! except ValueError:
wxBell()
#
--- 213,232 ----
attr = self.rowList[evt.GetRow()]
value = self.grid.GetCellValue(evt.GetRow(), evt.GetCol())
! try:
! try:
! oldVal = {attr: self.object.__dict__[attr]}
! except KeyError:
! oldVal = {attr: None}
self.object.__dict__[attr] = self.attributes[attr]['Typecast'](value)
! newVal = {attr: self.object.__dict__[attr]}
! self.dispatchEvent('ObjectModified',
! object=self.object,
! originator=self,
! old=oldVal,
! new=newVal)
evt.Skip()
! except ValueError:
wxBell()
#
Index: gnue/designer/src/SchemaViewer.py
diff -c gnue/designer/src/SchemaViewer.py:1.8
gnue/designer/src/SchemaViewer.py:1.9
*** gnue/designer/src/SchemaViewer.py:1.8 Fri Nov 22 20:48:02 2002
--- gnue/designer/src/SchemaViewer.py Mon Nov 25 00:41:42 2002
***************
*** 30,36 ****
import sys, os, cPickle, traceback, StringIO
from wxPython.wx import *
from gnue.common import GDebug, GDataSource
! from gnue.common import RuntimeSettings
from ToolPanel import *
class SchemaViewer(ToolPanel):
--- 30,36 ----
import sys, os, cPickle, traceback, StringIO
from wxPython.wx import *
from gnue.common import GDebug, GDataSource
! from gnue.common import RuntimeSettings, events
from ToolPanel import *
class SchemaViewer(ToolPanel):
***************
*** 64,69 ****
--- 64,77 ----
self.current = None
+ # EventAware provided by ToolPanel
+ self.registerEventListeners({
+ 'ObjectSelected' : self.onSetCurrentObject,
+ 'ObjectCreated' : self.onCreateObject,
+ 'ObjectModified' : self.onModifyObject,
+ 'ObjectDeleted' : self.onDeleteObject,
+ })
+
#
# Set up the "selection" panel
***************
*** 100,106 ****
EVT_LIST_BEGIN_DRAG(self, self.list.GetId(), self.OnBeginDrag)
EVT_LIST_ITEM_SELECTED(self, self.list.GetId(), self.OnTableSelected)
- self.onSetCurrentObject(self.current, "")
self.finalized = 0
self.splitter.SetSize(self.GetSize())
--- 108,113 ----
***************
*** 160,177 ****
! def onSetCurrentObject (self, object, handler):
! pass
!
! def onCreateObject (self, object, handler):
! pass
!
! def onModifyObject (self, object, handler, modifications):
! pass
!
! def onDeleteObject (self, object, handler):
! pass
!
def OnSize(self, event):
if not self.finalized:
--- 167,187 ----
! def onSetCurrentObject (self, event):
! object = event.object
! handler = event.originator
!
! def onCreateObject (self, event):
! object = event.object
! handler = event.originator
!
! def onModifyObject (self, event):
! object = event.object
! handler = event.originator
!
! def onDeleteObject (self, event):
! object = event.object
! handler = event.originator
def OnSize(self, event):
if not self.finalized:
***************
*** 184,190 ****
# Runtime Setting Support
-
def finalize(self):
self.finalized = 1
--- 194,199 ----
Index: gnue/designer/src/ToolFrame.py
diff -c gnue/designer/src/ToolFrame.py:1.13 gnue/designer/src/ToolFrame.py:1.14
*** gnue/designer/src/ToolFrame.py:1.13 Fri Nov 22 20:48:02 2002
--- gnue/designer/src/ToolFrame.py Mon Nov 25 00:41:42 2002
***************
*** 30,44 ****
from gnue.common import RuntimeSettings
from wxPython.wx import *
from gnue.common import GDebug
#
# Any tool frames inherit from this
# It handles the Window menu and
# saving size/position/display settings
#
! class ToolFrame (wxFrame):
- # TODO: Set by the toolpanel??
default_width = 200
default_height = 150
default_visible = 0
--- 30,44 ----
from gnue.common import RuntimeSettings
from wxPython.wx import *
from gnue.common import GDebug
+ from ToolDock import ToolDock
#
# Any tool frames inherit from this
# It handles the Window menu and
# saving size/position/display settings
#
! class ToolFrame (wxFrame, ToolDock):
default_width = 200
default_height = 150
default_visible = 0
***************
*** 56,66 ****
self.runtime_section = "ToolFrame-%s" % string.replace(self.title,' ','')
self.instance = instance
- # Add ourselves to the Window menu
- self.menutool = self.instance._menubar.addTool(self, title)
-
EVT_CLOSE(self, self.OnClose)
!
def finalize(self):
--- 56,66 ----
self.runtime_section = "ToolFrame-%s" % string.replace(self.title,' ','')
self.instance = instance
EVT_CLOSE(self, self.OnClose)
! ## EVT_SIZE(self, self.OnSize)
! ##
! ## def OnSize(self, evt):
! ## self.child.SetSize(self.GetClientSize())
def finalize(self):
***************
*** 89,113 ****
'y': y,
'height': height,
'width': width,
! 'visible': self.menutool.menu.IsChecked() } )
# This event is set by MenuBar.addTool
# Called whenever menu item is selected
def OnMenuSelected(self, event):
! if self.menutool.menu.IsChecked():
self.show()
else:
self.hide()
def show(self):
! self.menutool.menu.SetHelp(_("Hide the %s window") % self.title)
! self.menutool.menu.Check(1)
self.Show(1)
def hide(self):
! self.menutool.menu.SetHelp(_("Show the %s window") % self.title)
! self.menutool.menu.Check(0)
self.Show(0)
def OnClose(self, event):
--- 89,113 ----
'y': y,
'height': height,
'width': width,
! 'visible': self.control._menutool.menu.IsChecked() } )
# This event is set by MenuBar.addTool
# Called whenever menu item is selected
def OnMenuSelected(self, event):
! if self.control._menutool.menu.IsChecked():
self.show()
else:
self.hide()
def show(self):
! self.control._menutool.menu.SetHelp(_("Hide the %s window") % self.title)
! self.control._menutool.menu.Check(1)
self.Show(1)
def hide(self):
! self.control._menutool.menu.SetHelp(_("Show the %s window") % self.title)
! self.control._menutool.menu.Check(0)
self.Show(0)
def OnClose(self, event):
Index: gnue/designer/src/ToolPanel.py
diff -c gnue/designer/src/ToolPanel.py:1.1 gnue/designer/src/ToolPanel.py:1.2
*** gnue/designer/src/ToolPanel.py:1.1 Fri Nov 22 20:48:02 2002
--- gnue/designer/src/ToolPanel.py Mon Nov 25 00:41:42 2002
***************
*** 28,48 ****
#
from wxPython.wx import *
! from gnue.common import RuntimeSettings
DOCK_FRAME = 'frame' # The tool has its own frame
DOCK_LEFT = 'left' # The tool is in the left split of the main window
DOCK_TOP = 'top' # The tool is in the top split of the main window
DOCK_BOTTOM = 'bottom' # The tool is in the bottom split of the main window
! class ToolPanel (wxPanel):
default_visible = 0
default_dock = DOCK_FRAME
runtime_section = ""
def __init__(self, instance, rootObject, parentWindow):
wxPanel.__init__(self,parentWindow,-1)
self.frame = parentWindow
self.instance = instance
self.rootObject = rootObject
--- 28,51 ----
#
from wxPython.wx import *
! from gnue.common import RuntimeSettings, events
DOCK_FRAME = 'frame' # The tool has its own frame
DOCK_LEFT = 'left' # The tool is in the left split of the main window
DOCK_TOP = 'top' # The tool is in the top split of the main window
DOCK_BOTTOM = 'bottom' # The tool is in the bottom split of the main window
! class ToolPanel (wxPanel, events.EventAware):
default_visible = 0
default_dock = DOCK_FRAME
runtime_section = ""
+ uses_feedback_header = 0
def __init__(self, instance, rootObject, parentWindow):
wxPanel.__init__(self,parentWindow,-1)
+ events.EventAware.__init__(self, instance.eventController)
+
self.frame = parentWindow
self.instance = instance
self.rootObject = rootObject
***************
*** 54,56 ****
--- 57,65 ----
def saveRuntimeSettings(self):
return (self.runtime_section, {})
+ def setHeaderText(self, text):
+ self.frame.setFeedbackText(text)
+
+ # Over-written by the parent docks
+ def setHeaderText(self, text):
+ return
Index: gnue/designer/src/TreeView.py
diff -c gnue/designer/src/TreeView.py:1.25 gnue/designer/src/TreeView.py:1.26
*** gnue/designer/src/TreeView.py:1.25 Fri Nov 22 20:48:02 2002
--- gnue/designer/src/TreeView.py Mon Nov 25 00:41:42 2002
***************
*** 44,49 ****
--- 44,58 ----
def init(self):
+
+ # EventAware provided by ToolPanel
+ self.registerEventListeners({
+ 'ObjectSelected' : self.onSetCurrentObject,
+ 'ObjectCreated' : self.onCreateObject,
+ 'ObjectModified' : self.onModifyObject,
+ 'ObjectDeleted' : self.onDeleteObject,
+ })
+
self.tree = wxTreeCtrl(self, wxNewId(),
style=wxTR_HAS_BUTTONS|wxTR_EDIT_LABELS|wxTR_HAS_VARIABLE_ROW_HEIGHT)
self._handler = None
***************
*** 68,74 ****
rv = self.tree.AppendItem(parent, description)
return rv
! def onSetCurrentObject (self, object, handler):
if object == None:
return
if handler != __name__:
--- 77,85 ----
rv = self.tree.AppendItem(parent, description)
return rv
! def onSetCurrentObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
if handler != __name__:
***************
*** 77,83 ****
self.tree.SelectItem(object._treeItem)
self._handler = None
! def onCreateObject (self, object, handler):
if object == None:
return
if handler != __name__:
--- 88,96 ----
self.tree.SelectItem(object._treeItem)
self._handler = None
! def onCreateObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
if handler != __name__:
***************
*** 87,102 ****
pass
self.inventoryObject(object)
! def onModifyObject (self, object, handler, modifications):
if object == None:
return
if handler != __name__:
! for modification in modifications:
! attribute, value = modification
if attribute == 'name' and object != self.rootObject:
! self.SetItemText(object._treeItem, object.getDescription())
! def onDeleteObject (self, object, handler):
if object == None:
return
if hasattr(object, '_treeItemTrigger'):
--- 100,119 ----
pass
self.inventoryObject(object)
! def onModifyObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
if handler != __name__:
! for attribute in event.new.keys():
! value = event.new[attribute]
if attribute == 'name' and object != self.rootObject:
! self.tree.SetItemText(object._treeItem, object.getDescription())
! def onDeleteObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
if hasattr(object, '_treeItemTrigger'):
Index: gnue/designer/src/TriggerEditor.py
diff -c gnue/designer/src/TriggerEditor.py:1.21
gnue/designer/src/TriggerEditor.py:1.22
*** gnue/designer/src/TriggerEditor.py:1.21 Fri Nov 22 20:48:02 2002
--- gnue/designer/src/TriggerEditor.py Mon Nov 25 00:41:42 2002
***************
*** 55,62 ****
self.editor = EditorCtrl(self,-1, pos=wxPoint(0,32))
! self.SetSize(self.frame.GetClientSize())
! self.editor.SetSize(self.GetClientSize())
self.object = None
self.namedTriggerList = []
--- 55,62 ----
self.editor = EditorCtrl(self,-1, pos=wxPoint(0,32))
! # self.SetSize(self.frame.GetClientSize())
! # self.editor.SetSize(self.GetClientSize())
self.object = None
self.namedTriggerList = []
***************
*** 84,89 ****
--- 84,97 ----
self.namedTriggerCombo = wxComboBox(self.toolpanel, -1,
pos=wxPoint(self.namedNameLabel.GetSize().width + 10,4), style=wxCB_READONLY)
EVT_COMBOBOX(self, self.namedTriggerCombo.GetId(),
self.OnNamedTriggerSelected)
+ # EventAware provided by ToolPanel
+ self.registerEventListeners({
+ 'ObjectSelected' : self.onSetCurrentObject,
+ 'ObjectCreated' : self.onCreateObject,
+ 'ObjectModified' : self.onModifyObject,
+ 'ObjectDeleted' : self.onDeleteObject,
+ })
+
self.rootObject.walk(self.inventoryObject)
***************
*** 98,104 ****
self.editor.SetSize(wxSize(w,h-32))
! def onSetCurrentObject (self, object, handler):
if object == None:
return
--- 106,114 ----
self.editor.SetSize(wxSize(w,h-32))
! def onSetCurrentObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
***************
*** 146,170 ****
if self.object != None and not self.__ignoreevent:
self.object._children[0]._content = self.editor.GetText()
! def onCreateObject (self, object, handler):
if object == None:
return
self.inventoryObject(object)
! def onModifyObject (self, object, handler, modifications):
if object == None:
return
if handler != __name__:
- for modification in modifications:
- attribute, value = modification
if isinstance(object, GTrigger.GTrigger):
if object.type == 'NAMED':
self.refillNamedTriggerCombo()
! def onDeleteObject (self, object, handler):
if object == None:
return
--- 156,185 ----
if self.object != None and not self.__ignoreevent:
self.object._children[0]._content = self.editor.GetText()
! def onCreateObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
self.inventoryObject(object)
! def onModifyObject (self, event):
! object = event.object
! handler = event.originator
!
if object == None:
return
if handler != __name__:
if isinstance(object, GTrigger.GTrigger):
if object.type == 'NAMED':
self.refillNamedTriggerCombo()
! def onDeleteObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
***************
*** 183,189 ****
if int(gConfig('ForceSimpleEditor',section="designer")):
raise ImportError
!
from wxPython.stc import *
USE_STC = 1
--- 198,204 ----
if int(gConfig('ForceSimpleEditor',section="designer")):
raise ImportError
!
from wxPython.stc import *
USE_STC = 1
Index: gnue/designer/src/forms/Incubator.py
diff -c gnue/designer/src/forms/Incubator.py:1.2
gnue/designer/src/forms/Incubator.py:1.3
*** gnue/designer/src/forms/Incubator.py:1.2 Thu Jul 4 14:45:08 2002
--- gnue/designer/src/forms/Incubator.py Mon Nov 25 00:41:42 2002
***************
*** 52,58 ****
except KeyError:
GDebug.printMesg(1, "Attempted to create a '%s', "
"but I don't know what to do!" % tag)
! return
if tag == 'trigger':
--- 52,58 ----
except KeyError:
GDebug.printMesg(1, "Attempted to create a '%s', "
"but I don't know what to do!" % tag)
! return 1
if tag == 'trigger':
***************
*** 100,107 ****
o.name = name
instance.nameMappings[o.name] = o
o._buildObject()
! instance.onCreateObject(o, __name__)
! instance.onSetCurrentObject(o, __name__)
return o
--- 100,107 ----
o.name = name
instance.nameMappings[o.name] = o
o._buildObject()
! instance.dispatchEvent('ObjectCreated',object=o, originator=__name__)
! instance.dispatchEvent('ObjectSelected',object=object, originator=__name__)
return o
***************
*** 116,128 ****
def deleteObject(instance, form, object, newCurrentObject=None, firstRun=1):
if firstRun:
! newCurrentObject = object._parent
! parent = object._parent
for child in object._children:
child.deleteObject(instance, form, child, firstRun=0)
! instance.onDeleteObject(object, __name__)
if firstRun:
o = parent
--- 116,127 ----
def deleteObject(instance, form, object, newCurrentObject=None, firstRun=1):
if firstRun:
! newCurrentObject = parent = object._parent
for child in object._children:
child.deleteObject(instance, form, child, firstRun=0)
! instance.dispatchEvent('ObjectDeleted',object=object, originator=__name__)
if firstRun:
o = parent
***************
*** 131,137 ****
o = o._parent
if newCurrentObject:
! instance.onSetCurrentObject(newCurrentObject, __name__)
--- 130,136 ----
o = o._parent
if newCurrentObject:
! instance.dispatchEvent('ObjectSelected',object=object,
originator=__name__)
Index: gnue/designer/src/forms/Instance.py
diff -c gnue/designer/src/forms/Instance.py:1.17
gnue/designer/src/forms/Instance.py:1.18
*** gnue/designer/src/forms/Instance.py:1.17 Fri Nov 22 20:48:02 2002
--- gnue/designer/src/forms/Instance.py Mon Nov 25 00:41:42 2002
***************
*** 72,77 ****
--- 72,80 ----
BaseInstance.__init__(self, app, *args, **params)
+ self.registerEventListeners({
+ 'ObjectModified' : self.onModifyObject,
+ })
def loadBuffer(self, buffer):
form = GFParser.loadFile (buffer, self, initialize=0)
***************
*** 93,117 ****
def inventoryObject(self, object):
! if isinstance(object, GFObjects.GFPage) and \
object._parent == self.rootObject:
self._pages.append(object)
object._popupMenu = ObjectMenu(self, object)
def createTools(self):
! self.addTool('visualEditor', _('Layout Editor'), LayoutEditor)
! self.addTool('propertyEditor', _('Property Inspector'), PropertyEditor)
! self.addTool('treeEditor', _('Object Navigator'), TreeView)
! self.addTool('schemaViewer', _('Schema Navigator'), SchemaViewer)
self.addToolSeparator()
! self.addTool('datasourceEditor', _('Data Source Editor'),
DataSourceEditor)
! #self.addTool('blockEditor', _('Block Editor'), BlockEditor)
! #self.addTool('fieldEditor', _('Field Editor'), FieldEditor)
self.addToolSeparator()
! self.addTool('eventEditor', _('Trigger Inspector'), EventEditor)
! self.addTool('triggerEditor', _('Code Editor'), TriggerEditor)
def createWizards(self):
self.loadWizards(wizards)
--- 96,130 ----
def inventoryObject(self, object):
! if object._type == 'GFForm':
! object._blockMap = {}
! elif object._type == 'GFBlock':
! if self.rootObject._blockMap.has_key(object.name):
! raise "Warning: Multiple blocks with name %s" % object.name
! self.rootObject._blockMap[object.name] = object
!
! elif isinstance(object, GFObjects.GFPage) and \
object._parent == self.rootObject:
self._pages.append(object)
object._popupMenu = ObjectMenu(self, object)
+ def onModifyObject(self, event):
+ object = event.object
+
def createTools(self):
! self.addTool('visualEditor', _('Layout Editor'), LayoutEditor, 'F11')
! self.addTool('propertyEditor', _('Property Inspector'), PropertyEditor,
'F10')
! self.addTool('treeEditor', _('Object Navigator'), TreeView, 'F8')
! self.addTool('schemaViewer', _('Schema Navigator'), SchemaViewer)
self.addToolSeparator()
! self.addTool('datasourceEditor',_('Data Source Editor'), DataSourceEditor)
! #self.addTool('blockEditor', _('Block Editor'), BlockEditor, 'F5')
! #self.addTool('fieldEditor', _('Field Editor'), FieldEditor, 'F6')
self.addToolSeparator()
! self.addTool('eventEditor', _('Trigger Inspector'), EventEditor, 'F7')
! self.addTool('triggerEditor', _('Code Editor'), TriggerEditor, 'F12')
def createWizards(self):
self.loadWizards(wizards)
Index: gnue/designer/src/forms/LayoutEditor/LayoutEditor.py
diff -c gnue/designer/src/forms/LayoutEditor/LayoutEditor.py:1.34
gnue/designer/src/forms/LayoutEditor/LayoutEditor.py:1.35
*** gnue/designer/src/forms/LayoutEditor/LayoutEditor.py:1.34 Fri Nov 22
20:48:02 2002
--- gnue/designer/src/forms/LayoutEditor/LayoutEditor.py Mon Nov 25
00:41:42 2002
***************
*** 50,55 ****
--- 50,56 ----
runtime_section = "FormsLayoutEditor"
default_dock = DOCK_TOP
+ uses_feedback_header = 1
def init(self):
***************
*** 59,70 ****
self._app = self.instance._app
self.widgets = {}
self.widgets.update(UIwxpython.WIDGETS)
! self.toolbar = LayoutEditorTools(self, self.frame)
del self.widgets['GFPage']
self.notebook = wxNotebook(self, -1, pos=wxPoint(4, 4),
size=wxSize(32,32))
self.backcolor = wxWHITE
! self.propBar = PropertyBar(self)
EVT_NOTEBOOK_PAGE_CHANGED(self,self.notebook.GetId(), self.OnPageSelected)
EVT_SIZE(self, self.OnSize)
--- 60,71 ----
self._app = self.instance._app
self.widgets = {}
self.widgets.update(UIwxpython.WIDGETS)
! ## self.toolbar = LayoutEditorTools(self, self.frame)
del self.widgets['GFPage']
self.notebook = wxNotebook(self, -1, pos=wxPoint(4, 4),
size=wxSize(32,32))
self.backcolor = wxWHITE
! ## self.propBar = PropertyBar(self)
EVT_NOTEBOOK_PAGE_CHANGED(self,self.notebook.GetId(), self.OnPageSelected)
EVT_SIZE(self, self.OnSize)
***************
*** 84,96 ****
self.__ox = 0
self.__oy = 0
self.instance.rootObject.walk (self.inventoryObject)
try:
self._setCurrentPage(self._notebookMap[0])
except KeyError:
pass
! self.frame.SetToolBar(self.toolbar)
def inventoryObject(self, object):
if object._type == 'GFPage':
--- 85,108 ----
self.__ox = 0
self.__oy = 0
+
+ # EventAware provided by ToolPanel
+ self.registerEventListeners({
+ 'ObjectSelected' : self.onSetCurrentObject,
+ 'ObjectCreated' : self.onCreateObject,
+ 'ObjectModified' : self.onModifyObject,
+ 'ObjectDeleted' : self.onDeleteObject,
+ })
+
self.instance.rootObject.walk (self.inventoryObject)
try:
self._setCurrentPage(self._notebookMap[0])
except KeyError:
pass
! ## TODO: Fix me
! ## self.frame.SetToolBar(self.toolbar)
! ##
def inventoryObject(self, object):
if object._type == 'GFPage':
***************
*** 115,131 ****
self.drawPage(object)
! def onSetCurrentObject (self, object, handler):
self._currentObject = object
if object == None:
for o in self._currentSelection.keys():
o.setSelected(0)
return
! if hasattr(object, '_widgetHandler'):
! self.propBar.setCurrentObject(object)
if handler != "Forms::LayoutEditor":
self._setCurrentPage(object)
def _setCurrentPage(self, object):
--- 127,152 ----
self.drawPage(object)
! def onSetCurrentObject (self, event):
! object = event.object
! handler = event.originator
self._currentObject = object
if object == None:
for o in self._currentSelection.keys():
o.setSelected(0)
return
! ## if hasattr(object, '_widgetHandler'):
! ## self.propBar.setCurrentObject(object)
if handler != "Forms::LayoutEditor":
self._setCurrentPage(object)
+ def _setCurrentBlock(self,object):
+ if not object:
+ return
+ block = self.findParentOfType('GFBlock')
+ if not block:
+ if object._type == 'GFField':
+ block = object._block
def _setCurrentPage(self, object):
***************
*** 164,171 ****
object._widgetHandler.setSelected(1)
! def onCreateObject (self, object, handler):
!
self._currentSelection = {}
if object == None:
return
--- 185,193 ----
object._widgetHandler.setSelected(1)
! def onCreateObject (self, event):
! object = event.object
! handler = event.originator
self._currentSelection = {}
if object == None:
return
***************
*** 183,206 ****
self._setCurrentPage(origpage)
! def onModifyObject (self, object, handler, modifications):
if object == None:
return
# TODO: adjust label width to match new length...this shouldn't be here
if object._type == 'GFLabel':
mods = []
! for field, value in modifications:
if field=='text':
#TODO: this will butcher align=center setups
if (not hasattr(object,'alignment')) or ( object.alignment ==
'left'):
! object.width=len(value)
! mods.append( ('width',len(value)) )
! else:
! mods = modifications
!
! self.propBar.onModifyObject(object, handler, mods)
if handler != "Forms::LayoutEditor":
if object._type == 'GFPage':
--- 205,230 ----
self._setCurrentPage(origpage)
! def onModifyObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
# TODO: adjust label width to match new length...this shouldn't be here
if object._type == 'GFLabel':
mods = []
! for field in event.new.keys():
! value = event.new[field]
if field=='text':
#TODO: this will butcher align=center setups
if (not hasattr(object,'alignment')) or ( object.alignment ==
'left'):
! if not hasattr(object,'width') or object.width != len(value):
! object.width=len(value)
! # TODO: This should probably trigger a new ObjectModified event
! event.new['width'] = object.width
+ ## self.propBar.onModifyObject(object, event)
if handler != "Forms::LayoutEditor":
if object._type == 'GFPage':
***************
*** 215,221 ****
self.refreshPage(self.page)
! def onDeleteObject (self, object, handler):
self._currentObject = None
--- 239,247 ----
self.refreshPage(self.page)
! def onDeleteObject (self, event):
! object = event.object
! handler = event.originator
self._currentObject = None
***************
*** 351,364 ****
self.widgetList.append(object)
def OnSize(self, event):
! self.propBar.SetSize(wxSize(self.GetClientSize().x,
self.propBar.GetSize().y))
! self.propBar.SetPosition(wxPoint(0, self.GetClientSize().y -
self.propBar.GetSize().y))
! self.notebook.SetSize(wxSize(self.GetClientSize().x-8,
self.GetClientSize().y - 8 - self.propBar.GetSize().y))
def OnPageSelected(self, event):
p = self._notebookMap[event.GetSelection()]
if p != self.page:
! self.instance.onSetCurrentObject(p, "Forms::LayoutEditor")
self._setCurrentPage(p)
--- 377,390 ----
self.widgetList.append(object)
def OnSize(self, event):
! ## self.propBar.SetSize(wxSize(self.GetClientSize().x,
self.propBar.GetSize().y))
! ## self.propBar.SetPosition(wxPoint(0, self.GetClientSize().y -
self.propBar.GetSize().y))
! self.notebook.SetSize(wxSize(self.GetClientSize().x-8,
self.GetClientSize().y - 8))# - self.propBar.GetSize().y))
def OnPageSelected(self, event):
p = self._notebookMap[event.GetSelection()]
if p != self.page:
! self.dispatchEvent('ObjectSelected', object=p,
originator="Forms::LayoutEditor")
self._setCurrentPage(p)
***************
*** 469,475 ****
def OnRightUp(self, event):
! self.toolbar.resetTool(self.mode)
self.mode = 'move'
x, y = event.GetPositionTuple()
--- 495,501 ----
def OnRightUp(self, event):
! ## self.toolbar.resetTool(self.mode)
self.mode = 'move'
x, y = event.GetPositionTuple()
Index: gnue/designer/src/forms/LayoutEditor/PropertyBar.py
diff -c gnue/designer/src/forms/LayoutEditor/PropertyBar.py:1.3
gnue/designer/src/forms/LayoutEditor/PropertyBar.py:1.4
*** gnue/designer/src/forms/LayoutEditor/PropertyBar.py:1.3 Sat May 4
12:45:08 2002
--- gnue/designer/src/forms/LayoutEditor/PropertyBar.py Mon Nov 25 00:41:42 2002
***************
*** 160,166 ****
self.nameEditor.SetValue(0)
self.nameEditor.SetEditable(0)
! def onModifyObject (self, object, handler, modifications):
if object == None:
return
if object == self.object:
--- 160,167 ----
self.nameEditor.SetValue(0)
self.nameEditor.SetEditable(0)
! def onModifyObject (self, event):
! raise "I have not been fixed yet!"
if object == None:
return
if object == self.object:
Index: gnue/designer/src/forms/LayoutEditor/WidgetHandler.py
diff -c gnue/designer/src/forms/LayoutEditor/WidgetHandler.py:1.4
gnue/designer/src/forms/LayoutEditor/WidgetHandler.py:1.5
*** gnue/designer/src/forms/LayoutEditor/WidgetHandler.py:1.4 Sat May 4
12:45:08 2002
--- gnue/designer/src/forms/LayoutEditor/WidgetHandler.py Mon Nov 25
00:41:42 2002
***************
*** 128,134 ****
if not self.instance._currentSelection.has_key(self):
self.instance._currentSelection[self] = 1
!
self.instance._instance.onSetCurrentObject(self.object,"Forms::LayoutEditor")
self.setSelected(1)
self._alreadySelected = 0
else:
--- 128,134 ----
if not self.instance._currentSelection.has_key(self):
self.instance._currentSelection[self] = 1
!
self.instance._instance.dispatchEvent('ObjectSelected',object=self.object,originator="Forms::LayoutEditor")
self.setSelected(1)
self._alreadySelected = 0
else:
***************
*** 199,205 ****
def OnRightUp(self, event):
pt = event.GetPositionTuple()
! self.instance._instance.onSetCurrentObject(self.object, None)
wxPyTypeCast(event.GetEventObject(),'wxWindow') \
.PopupMenu(self.object._popupMenu, pt)
event.Skip()
--- 199,205 ----
def OnRightUp(self, event):
pt = event.GetPositionTuple()
! self.instance.dispatchEvent('ObjectSelected',object=self.object,
originator=None)
wxPyTypeCast(event.GetEventObject(),'wxWindow') \
.PopupMenu(self.object._popupMenu, pt)
event.Skip()
***************
*** 207,215 ****
def _endPopupEditor(self, success, value=""):
if success:
! self.object.__dict__[self.__popupAttr] = value
! self.instance._instance.onModifyObject(self.object,
! "Forms::LayoutEditor", ((self.__popupAttr, value),))
self._popup_editor.Destroy()
self._popup_editor = None
self.widget.SetLabel(value or "<Unset>")
--- 207,224 ----
def _endPopupEditor(self, success, value=""):
if success:
!
! try:
! oldVals = {self.__popupAttr:self.object.__dict__[self.__popupAttr]}
! except KeyError:
! oldVals = {self.__popupAttr:None}
! newVals = {self.__popupAttr: value}
! self.object.__dict__.update(newVals)
! self.instance.dispatchEvent('ObjectModified', object=self.object,
! originator="Forms::LayoutEditor",
! old=oldVals,
! new=newVals)
!
self._popup_editor.Destroy()
self._popup_editor = None
self.widget.SetLabel(value or "<Unset>")
***************
*** 269,282 ****
for widget in self.mainWidget.widgets:
x,y = widget.GetSizeTuple()
widget.SetSize(wxSize(x + nx,y + ny))
! changes = []
if dx:
self.object.width = self.object.width + dx
! changes.append(['width',self.object.width])
if dy:
self.object.height = self.object.height + dy
! changes.append(['height',self.object.height])
! self.instance._instance.onModifyObject(self.object,
"Forms::LayoutEditor", changes)
self.recalcBoundaries()
--- 278,300 ----
for widget in self.mainWidget.widgets:
x,y = widget.GetSizeTuple()
widget.SetSize(wxSize(x + nx,y + ny))
!
! oldVals = {}
! newVals = {}
if dx:
+ oldVals['width'] = self.object.width
self.object.width = self.object.width + dx
! newVals['width'] = self.object.width
if dy:
+ oldVals['height'] = self.object.height
self.object.height = self.object.height + dy
! newVals['height'] = self.object.height
!
! self.instance.dispatchEvent('ObjectModified', object=self.object,
! originator="Forms::LayoutEditor",
! old=oldVals,
! new=newVals)
!
self.recalcBoundaries()
***************
*** 298,312 ****
for widget in self.mainWidget.widgets:
x,y = widget.GetPositionTuple()
widget.SetPosition(wxPoint(x + nx,y + ny))
! changes = []
if dx:
self.object.x = self.object.x + dx
! changes.append(['x',self.object.x])
if dy:
self.object.y = self.object.y + dy
! changes.append(['y',self.object.y])
! self.instance._instance.onModifyObject(self.object,
! "Forms::LayoutEditor", changes)
self.recalcBoundaries()
#
--- 316,337 ----
for widget in self.mainWidget.widgets:
x,y = widget.GetPositionTuple()
widget.SetPosition(wxPoint(x + nx,y + ny))
! oldVals = {}
! newVals = {}
if dx:
+ oldVals['x'] = self.object.x
self.object.x = self.object.x + dx
! newVals['x'] = self.object.x
if dy:
+ oldVals['y'] = self.object.y
self.object.y = self.object.y + dy
! newVals['y'] = self.object.y
!
! self.instance.dispatchEvent('ObjectModified', object=self.object,
! originator="Forms::LayoutEditor",
! old=oldVals,
! new=newVals)
!
self.recalcBoundaries()
#
Index: gnue/designer/src/forms/TreeView.py
diff -c gnue/designer/src/forms/TreeView.py:1.4
gnue/designer/src/forms/TreeView.py:1.5
*** gnue/designer/src/forms/TreeView.py:1.4 Fri Nov 22 20:48:02 2002
--- gnue/designer/src/forms/TreeView.py Mon Nov 25 00:41:42 2002
***************
*** 46,51 ****
--- 46,59 ----
BaseTreeView.init(self)
+ logic = None
+ layout = None
+ for child in self.rootObject._children:
+ if child._type == 'GFLogic':
+ logic = child
+ elif child._type == 'GFLayout':
+ layout = child
+
self.rootObject._treeItemFormProperties = \
self.AppendItem(self.rootObject._treeItem, _("Properties"))
self.tree.SetItemImage(self.rootObject._treeItemFormProperties,
treeIconMap['properties'])
***************
*** 58,64 ****
self.rootObject._treeItemNamedTriggers = \
self.AppendItem(self.rootObject._treeItem, _("Shared Triggers"))
self.tree.SetItemImage(self.rootObject._treeItemNamedTriggers,
treeIconMap['trigger'])
! self.rootObject._treeItemPageLayout = \
self.AppendItem(self.rootObject._treeItem, _("Page Layout"))
self.tree.SetItemImage(self.rootObject._treeItemPageLayout,
treeIconMap['page'])
--- 66,75 ----
self.rootObject._treeItemNamedTriggers = \
self.AppendItem(self.rootObject._treeItem, _("Shared Triggers"))
self.tree.SetItemImage(self.rootObject._treeItemNamedTriggers,
treeIconMap['trigger'])
! self.rootObject._treeItemLogic = logic._treeItem = \
! self.AppendItem(self.rootObject._treeItem, _("Field Logic"))
! self.tree.SetItemImage(self.rootObject._treeItemLogic,
treeIconMap['block'])
! self.rootObject._treeItemPageLayout = layout._treeItem = \
self.AppendItem(self.rootObject._treeItem, _("Page Layout"))
self.tree.SetItemImage(self.rootObject._treeItemPageLayout,
treeIconMap['page'])
***************
*** 66,72 ****
self.tree.SetPyData(self.rootObject._treeItemFormProperties,
ObjectMenu(self.instance,None))
self.tree.SetPyData(self.rootObject._treeItemDataSources,
ObjectMenu(self.instance,None))
self.tree.SetPyData(self.rootObject._treeItemNamedTriggers,
ObjectMenu(self.instance,None))
! self.tree.SetPyData(self.rootObject._treeItemPageLayout,
ObjectMenu(self.instance,None))
self.rootObject.walk(self.inventoryObject)
--- 77,84 ----
self.tree.SetPyData(self.rootObject._treeItemFormProperties,
ObjectMenu(self.instance,None))
self.tree.SetPyData(self.rootObject._treeItemDataSources,
ObjectMenu(self.instance,None))
self.tree.SetPyData(self.rootObject._treeItemNamedTriggers,
ObjectMenu(self.instance,None))
! self.tree.SetPyData(self.rootObject._treeItemLogic, logic)
! self.tree.SetPyData(self.rootObject._treeItemPageLayout, layout)
self.rootObject.walk(self.inventoryObject)
***************
*** 78,83 ****
--- 90,98 ----
object._parent == self.rootObject:
object._treeItem = self.rootObject._treeItemFormProperties
icon = 'properties'
+ elif object._type in ('GFLogic','GFLayout') and \
+ object._parent == self.rootObject:
+ pass
else:
parentTreeItem = object._parent._treeItem
if isinstance(object, GTrigger.GTrigger) and \
***************
*** 100,106 ****
icon = 'datasource'
elif isinstance(object, GFObjects.GFPage) and \
object._parent == self.rootObject:
- parentTreeItem = self.rootObject._treeItemPageLayout
icon = 'page'
elif object._type in ('GFBlock',):
icon = 'block'
--- 115,120 ----
Index: gnue/designer/src/navigator/LayoutEditor.py
diff -c gnue/designer/src/navigator/LayoutEditor.py:1.5
gnue/designer/src/navigator/LayoutEditor.py:1.6
*** gnue/designer/src/navigator/LayoutEditor.py:1.5 Sat May 4 12:45:08 2002
--- gnue/designer/src/navigator/LayoutEditor.py Mon Nov 25 00:41:42 2002
***************
*** 30,49 ****
from wxPython.wx import *
from gnue.common import GDebug
from gnue.common import RuntimeSettings
! class LayoutEditor (wxPanel):
! def __init__(self, instance, rootObject, parentWindow):
! wxPanel.__init__(self,parentWindow,-1)
! self.instance = instance
! self.rootObject = rootObject
! self.frame = parentWindow
!
!
! # Tell RuntimeSettings that we have information to save
! self.runtime_section = 'ProcessVisualEditor'
! RuntimeSettings.registerRuntimeSettingHandler(self.instance, self)
self.splitter = wxSplitterWindow(self, -1)
--- 30,42 ----
from wxPython.wx import *
from gnue.common import GDebug
from gnue.common import RuntimeSettings
+ from gnue.designer.ToolPanel import ToolPanel
+ class LayoutEditor (ToolPanel):
! runtime_section = 'ProcessVisualEditor'
! def init(self):
self.splitter = wxSplitterWindow(self, -1)
***************
*** 59,91 ****
self.tree.postInit()
def inventoryObject(self, object):
self.tree.inventoryObject(object)
!
! def onSetCurrentObject (self, object, handler):
if object == None:
return
if handler != __name__:
pass
! def onCreateObject (self, object, handler):
if object == None:
return
if handler != __name__:
pass
! def onModifyObject (self, object, handler, modifications):
if object == None:
return
if handler != __name__:
pass
! def onDeleteObject (self, object, handler):
if object == None:
return
if handler != __name__:
--- 52,99 ----
self.tree.postInit()
+ # EventAware provided by ToolPanel
+ self.registerEventListeners({
+ 'ObjectSelected' : self.onSetCurrentObject,
+ 'ObjectCreated' : self.onCreateObject,
+ 'ObjectModified' : self.onModifyObject,
+ 'ObjectDeleted' : self.onDeleteObject,
+ })
def inventoryObject(self, object):
self.tree.inventoryObject(object)
! def onSetCurrentObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
if handler != __name__:
pass
! def onCreateObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
if handler != __name__:
pass
! def onModifyObject (self, event):
! object = event.object
! handler = event.originator
! modifications = event.modifications
if object == None:
return
if handler != __name__:
pass
! def onDeleteObject (self, event):
! object = event.object
! handler = event.originator
if object == None:
return
if handler != __name__:
***************
*** 183,189 ****
def OnEndEdit(self, event):
object = self.GetPyData(event.GetItem())
object.description = event.GetLabel()
! self.editor.instance.onModifyObject(self, object, __name__)
self.SetItemText(object._treeItem, self.getName(object,1))
event.Veto()
--- 191,198 ----
def OnEndEdit(self, event):
object = self.GetPyData(event.GetItem())
object.description = event.GetLabel()
! # TODO: Change to new struct
! ## self.editor.instance.onModifyObject(self, object, __name__)
self.SetItemText(object._treeItem, self.getName(object,1))
event.Veto()
Index: gnue/designer/src/reports/Incubator.py
diff -c gnue/designer/src/reports/Incubator.py:1.2
gnue/designer/src/reports/Incubator.py:1.3
*** gnue/designer/src/reports/Incubator.py:1.2 Tue Jul 23 13:52:51 2002
--- gnue/designer/src/reports/Incubator.py Mon Nov 25 00:41:42 2002
***************
*** 73,80 ****
o.name = name
instance.nameMappings[o.name] = o
o._buildObject()
! instance.onCreateObject(o, __name__)
! instance.onSetCurrentObject(o, __name__)
return o
--- 73,80 ----
o.name = name
instance.nameMappings[o.name] = o
o._buildObject()
! instance.dispatchEvent(events.Event('ObjectCreated',object=o,
originator=__name__))
! instance.dispatchEvent(events.Event('ObjectSelected',object=object,
originator=__name__))
return o
***************
*** 95,101 ****
for child in object._children:
child.deleteObject(instance, report, child, firstRun=0)
! instance.onDeleteObject(object, __name__)
if firstRun:
o = parent
--- 95,101 ----
for child in object._children:
child.deleteObject(instance, report, child, firstRun=0)
! instance.dispatchEvent(events.Event('ObjectDeleted',object=object,
originator=__name__))
if firstRun:
o = parent
***************
*** 104,110 ****
o = o._parent
if newCurrentObject:
! instance.onSetCurrentObject(newCurrentObject, __name__)
--- 104,110 ----
o = o._parent
if newCurrentObject:
! instance.dispatchEvent(events.Event('ObjectSelected',object=object,
originator=__name__))
Index: gnue/designer/src/reports/LayoutEditor.py
diff -c gnue/designer/src/reports/LayoutEditor.py:1.1
gnue/designer/src/reports/LayoutEditor.py:1.2
*** gnue/designer/src/reports/LayoutEditor.py:1.1 Tue Jul 23 13:52:52 2002
--- gnue/designer/src/reports/LayoutEditor.py Mon Nov 25 00:41:42 2002
***************
*** 28,58 ****
#
from wxPython.wx import *
! class LayoutEditor (wxPanel):
! def __init__(self, instance, parentWindow):
! wxPanel.__init__(self,parentWindow,-1)
! self.frame = instance
self.panelColor = self.GetBackgroundColour()
! self._instance = instance
self.rootObject = instance.rootObject
self._app = instance._app
self.rootObject.walk(self.inventoryObject)
! def inventoryObject(self, object):
! pass
!
! def onSetCurrentObject (self, object, handler):
! pass
- def onCreateObject (self, object, handler):
- pass
! def onModifyObject (self, object, handler, modifications):
pass
! def onDeleteObject (self, object, handler):
! pass
--- 28,72 ----
#
from wxPython.wx import *
+ from gnue.designer.ToolPanel import ToolPanel
! class LayoutEditor (ToolPanel):
!
! def init(self):
self.panelColor = self.GetBackgroundColour()
! self._instance = self.instance
self.rootObject = instance.rootObject
self._app = instance._app
self.rootObject.walk(self.inventoryObject)
! # EventAware provided by ToolPanel
! self.registerEventListeners({
! 'ObjectSelected' : self.onSetCurrentObject,
! 'ObjectCreated' : self.onCreateObject,
! 'ObjectModified' : self.onModifyObject,
! 'ObjectDeleted' : self.onDeleteObject,
! })
! def inventoryObject(self, object):
pass
! def onSetCurrentObject (self, event):
! object = event.object
! handler = event.originator
!
! def onCreateObject (self, event):
! object = event.object
! handler = event.originator
!
! def onModifyObject (self, event):
! object = event.object
! handler = event.originator
! modifications = event.modifications
!
! def onDeleteObject (self, event):
! object = event.object
! handler = event.originator
Index: gnue/designer/src/schema/Incubator.py
diff -c gnue/designer/src/schema/Incubator.py:1.3
gnue/designer/src/schema/Incubator.py:1.4
*** gnue/designer/src/schema/Incubator.py:1.3 Mon Sep 16 19:26:10 2002
--- gnue/designer/src/schema/Incubator.py Mon Nov 25 00:41:42 2002
***************
*** 73,80 ****
o.name = name
instance.nameMappings[o.name] = o
o._buildObject()
! instance.onCreateObject(o, __name__)
! instance.onSetCurrentObject(o, __name__)
return o
--- 73,80 ----
o.name = name
instance.nameMappings[o.name] = o
o._buildObject()
! instance.dispatchEvent(events.Event('ObjectCreated',object=o,
originator=__name__))
! instance.dispatchEvent(events.Event('ObjectSelected',object=object,
originator=__name__))
return o
***************
*** 95,101 ****
for child in object._children:
deleteObject(instance, schema, child, firstRun=0)
! instance.onDeleteObject(object, __name__)
if firstRun:
o = parent
--- 95,101 ----
for child in object._children:
deleteObject(instance, schema, child, firstRun=0)
! instance.dispatchEvent(events.Event('ObjectDeleted',object=object,
originator=__name__))
if firstRun:
o = parent
***************
*** 104,110 ****
o = o._parent
if newCurrentObject:
! instance.onSetCurrentObject(newCurrentObject, __name__)
--- 104,110 ----
o = o._parent
if newCurrentObject:
! instance.dispatchEvent(events.Event('ObjectSelected',object=object,
originator=__name__))
Index: gnue/designer/src/schema/LayoutEditor.py
diff -c gnue/designer/src/schema/LayoutEditor.py:1.1
gnue/designer/src/schema/LayoutEditor.py:1.2
*** gnue/designer/src/schema/LayoutEditor.py:1.1 Fri Jun 28 11:19:32 2002
--- gnue/designer/src/schema/LayoutEditor.py Mon Nov 25 00:41:42 2002
***************
*** 28,58 ****
#
from wxPython.wx import *
! class LayoutEditor (wxPanel):
! def __init__(self, instance, parentWindow):
! wxPanel.__init__(self,parentWindow,-1)
! self.frame = instance
self.panelColor = self.GetBackgroundColour()
- self._instance = instance
- self.rootObject = instance.rootObject
self._app = instance._app
self.rootObject.walk(self.inventoryObject)
! def inventoryObject(self, object):
! pass
!
! def onSetCurrentObject (self, object, handler):
! pass
!
! def onCreateObject (self, object, handler):
! pass
!
! def onModifyObject (self, object, handler, modifications):
! pass
! def onDeleteObject (self, object, handler):
pass
!
--- 28,68 ----
#
from wxPython.wx import *
+ from gnue.designer.ToolPanel import ToolPanel
! class LayoutEditor (ToolPanel):
!
! runtime_section = 'SchemaLayoutEditor'
!
! def init(self):
self.panelColor = self.GetBackgroundColour()
self._app = instance._app
self.rootObject.walk(self.inventoryObject)
! # EventAware provided by ToolPanel
! self.registerEventListeners({
! 'ObjectSelected' : self.onSetCurrentObject,
! 'ObjectCreated' : self.onCreateObject,
! 'ObjectModified' : self.onModifyObject,
! 'ObjectDeleted' : self.onDeleteObject,
! })
! def inventoryObject(self, object):
pass
! def onSetCurrentObject (self, event):
! object = event.object
! handler = event.originator
!
! def onCreateObject (self, event):
! object = event.object
! handler = event.originator
!
! def onModifyObject (self, event):
! object = event.object
! handler = event.originator
!
! def onDeleteObject (self, event):
! object = event.object
! handler = event.originator
Index: gnue/designer/src/schema/VisualEditor.py
diff -c gnue/designer/src/schema/VisualEditor.py:1.4
gnue/designer/src/schema/VisualEditor.py:1.5
*** gnue/designer/src/schema/VisualEditor.py:1.4 Mon Sep 16 19:26:10 2002
--- gnue/designer/src/schema/VisualEditor.py Mon Nov 25 00:41:42 2002
***************
*** 32,40 ****
from gnue.common.schema.Objects import *
from Incubator import *
! class VisualEditor (wxPanel):
! def __init__(self, instance, root, parent):
! wxPanel.__init__(self,parent,-1)
self.frame = instance
self.panelColor = self.GetBackgroundColour()
self._instance = instance
--- 32,43 ----
from gnue.common.schema.Objects import *
from Incubator import *
!
! class VisualEditor (ToolPanel):
!
! runtime_section = 'SchemaDiaEditor'
!
! def init(self):
self.frame = instance
self.panelColor = self.GetBackgroundColour()
self._instance = instance
***************
*** 54,62 ****
self.redrawBackground()
#self.diagram.SetBackgroundColour(wxWHITE)
self.calculateTablePositions()
!
!
!
EVT_PAINT(self.diagram, self.onPaintEvent)
# EVT_LEFT_DOWN(self.diagram, self.onLeftClickEvent)
EVT_MOTION(self.diagram, self.onMouseEvent)
--- 57,74 ----
self.redrawBackground()
#self.diagram.SetBackgroundColour(wxWHITE)
self.calculateTablePositions()
!
! # EventAware provided by ToolPanel
! self.registerEventListeners({
! 'ObjectSelected' : self.onSetCurrentObject,
! 'ObjectCreated' : self.onCreateObject,
! 'ObjectModified' : self.onModifyObject,
! 'ObjectDeleted' : self.onDeleteObject,
! })
!
!
!
!
EVT_PAINT(self.diagram, self.onPaintEvent)
# EVT_LEFT_DOWN(self.diagram, self.onLeftClickEvent)
EVT_MOTION(self.diagram, self.onMouseEvent)
***************
*** 94,100 ****
dc.EndDrawing()
self.resizeCanvas(maxx,maxy)
!
# Rules for better positioning:
# tables with most connections in the middle
# ...
--- 106,112 ----
dc.EndDrawing()
self.resizeCanvas(maxx,maxy)
!
# Rules for better positioning:
# tables with most connections in the middle
# ...
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue common/src/events/EventController.py desig...,
Jason Cater <=