[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/gnuef/designer/src Instance.py LayoutHandl...
From: |
Jason Cater |
Subject: |
gnue/gnuef/designer/src Instance.py LayoutHandl... |
Date: |
Thu, 14 Jun 2001 16:00:08 -0700 |
CVSROOT: /home/cvs
Module name: gnue
Changes by: Jason Cater <address@hidden> 01/06/14 16:00:08
Modified files:
gnuef/designer/src: Instance.py LayoutHandler.py
Log message:
Modified designer so multi-record fields are displayed and behave as
such. \nAlso, selecting with a mouse works (including pressing shift to select
multiple items). \The arrow keys still move the items and Alt+arrow keys resize
the items. \nBorders are drawn around currently selected items.\nCurrently,
Labels are being displayed behind the border box (not sure why, as the other
widgets display correctly???)\nSelecting items with mouse has been reworked so,
for example, the cursor does not change over text fields and clicking dropdown
boxes in wrong place does not actually drop down a box :)
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/designer/src/Instance.py.diff?cvsroot=OldCVS&tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/designer/src/LayoutHandler.py.diff?cvsroot=OldCVS&tr1=1.1&tr2=1.2&r1=text&r2=text
Patches:
Index: gnue/gnuef/designer/src/Instance.py
diff -u gnue/gnuef/designer/src/Instance.py:1.1
gnue/gnuef/designer/src/Instance.py:1.2
--- gnue/gnuef/designer/src/Instance.py:1.1 Tue Jun 12 10:18:26 2001
+++ gnue/gnuef/designer/src/Instance.py Thu Jun 14 16:00:08 2001
@@ -47,8 +47,6 @@
self._pages = []
- self.widgets = UIwxpython.WIDGETS
-
if location == None:
self._path = ""
self._form = GFForm.GFForm()
@@ -106,8 +104,6 @@
self.tree.AppendItem(self._form._treeItem, "Page Layout")
self._form.walk(self.inventoryLoadedItems)
-
- self._pageList = []
self._currentPage = self._pages[0]
hsplitter.SplitHorizontally (self.tree, self.editor)
Index: gnue/gnuef/designer/src/LayoutHandler.py
diff -u gnue/gnuef/designer/src/LayoutHandler.py:1.1
gnue/gnuef/designer/src/LayoutHandler.py:1.2
--- gnue/gnuef/designer/src/LayoutHandler.py:1.1 Tue Jun 12 10:18:26 2001
+++ gnue/gnuef/designer/src/LayoutHandler.py Thu Jun 14 16:00:08 2001
@@ -41,10 +41,12 @@
self._form = instance._form
self._app = instance._app
self.widgets = UIwxpython.WIDGETS
+ del self.widgets['GFPage']
self.pageNameLabel = wxStaticText(self, -1, "Page: ", pos=wxPoint(10,20))
self._pageList = [] # Needed by UIwxpython
def drawPage(self, page):
+ self._currentSelection = {}
self.panel = GridPane(self, self, wxPoint(10,60))
self.panelColor = self.panel.GetBackgroundColour()
@@ -72,6 +74,7 @@
self.borderPercentage = (int(GConfig.get('borderPercentage')) / 100.0)
self.textPercentage = (int(GConfig.get('textPercentage')) / 100.0)
+ self.positionMappings = {}
width = int(self._form.getOption('width'))
height = int(self._form.getOption('height'))
@@ -84,13 +87,14 @@
self.gridWidth = self.widgetWidth
self.gridHeight = self.widgetHeight
- self.menu_sb_space=0 # the extra spaces needed by the menu, toolbar and
statusbar
+ self.menu_sb_space=2 # the extra spaces needed by the menu, toolbar and
statusbar
- self.panel.SetSize(wxSize(int(width)*int(self.widgetWidth),
+ self.panel.SetClientSize(wxSize(int(width)*int(self.widgetWidth),
int(height)*int(self.widgetHeight)))
page.walk(self.__drawItem)
+ EVT_CHAR(self.panel, self.keyTrap)
EVT_LEFT_UP(self.panel, self.OnLeftUp)
EVT_LEFT_DOWN(self.panel, self.OnLeftDown)
EVT_RIGHT_UP(self.panel, self.OnRightUp)
@@ -99,22 +103,45 @@
def __drawItem(self, object):
if self.widgets.has_key(object.getObjectType()):
-# object._widgetContainer = WidgetContainer(self, self.panel)
+ object._widgetHandler = WidgetHandler(self, object)
object._widget = self.widgets[object.getObjectType()]\
(object,self.panel, self.textWidth, self.textHeight, \
self.widgetWidth, self.widgetHeight, self,initialize=0)
- object._widgetHandler = WidgetHandler(self, object, object._widget)
-# object._widgetContainer.set(object._widget)
object._widget._object = object
+ object._widgetHandler.initialize(object._widget)
+ if not len(self._currentSelection.keys()):
+ self._currentSelection = {object._widgetHandler:1}
+ object._widgetHandler.setSelected(0)
-
def OnLeftDown(self, event):
- print "Left down"
-# self.curLine = []
- self.x, self.y = event.GetPositionTuple()
- self.__mouseObject = self.panel.Get
+ x,y = event.GetPositionTuple()
+ if wxPyTypeCast(event.GetEventObject(),'wxWindow').GetId() !=
self.panel.GetId():
+ xa, ya =
wxPyTypeCast(event.GetEventObject(),'wxWindow').GetPositionTuple()
+ x = x + xa
+ y = y + ya
+ print "Left down (%s,%s)" % (x,y)
+ self.x = x
+ self.y = y
self.panel.CaptureMouse()
+ if not event.ShiftDown():
+ for selection in self._currentSelection.keys():
+ selection.setSelected(0)
+ self._currentSelection = {}
+ selection = None
+ for t in self.positionMappings.values():
+ if x >= t[0] and x <= t[2] and y >= t[1] and y <= t[3]:
+ selection = t[4]
+ break
+ if selection != None:
+ if self._currentSelection.has_key(selection):
+ print ("Deselected")
+ del self._currentSelection[selection]
+ selection.setSelected(0)
+ else:
+ print ("Selected")
+ self._currentSelection[selection] = 1
+ selection.setSelected(1)
def OnLeftUp(self, event):
@@ -144,31 +171,105 @@
# self.x, self.y = pos
# dc.EndDrawing()
+ def keyTrap(self, event):
+ if event.KeyCode() in (WXK_LEFT, WXK_RIGHT, WXK_UP, WXK_DOWN):
+ print "Got key code"
+ if event.KeyCode() in (WXK_LEFT, WXK_RIGHT, WXK_UP, WXK_DOWN) and \
+ len(self._currentSelection.keys()):
+ print "%s" % self._currentSelection
+ if event.AltDown() or event.MetaDown():
+ if event.KeyCode() == WXK_LEFT:
+ for widget in self._currentSelection.keys():
+ widget.relativeResize(-1,0)
+ if event.KeyCode() == WXK_RIGHT:
+ for widget in self._currentSelection.keys():
+ widget.relativeResize(1,0)
+ if event.KeyCode() == WXK_UP:
+ for widget in self._currentSelection.keys():
+ widget.relativeResize(0,-1)
+ if event.KeyCode() == WXK_DOWN:
+ for widget in self._currentSelection.keys():
+ widget.relativeResize(0,1)
+ else:
+ if event.KeyCode() == WXK_LEFT:
+ for widget in self._currentSelection.keys():
+ widget.relativeMove(-1,0)
+ if event.KeyCode() == WXK_RIGHT:
+ for widget in self._currentSelection.keys():
+ widget.relativeMove(1,0)
+ if event.KeyCode() == WXK_UP:
+ for widget in self._currentSelection.keys():
+ widget.relativeMove(0,-1)
+ if event.KeyCode() == WXK_DOWN:
+ for widget in self._currentSelection.keys():
+ widget.relativeMove(0,1)
#
#
#
class WidgetHandler:
- def __init__(self, instance, object, widget):
- print widget
+ def __init__(self, instance, object):
self.instance = instance
self.object = object
- self.widget = widget.widgets[0]
- self.mainWidget = widget
self.hasFocus = 0
self.menu = None
+ self.highlightBox = WidgetHighlighter(self.instance.panel)
+
+ def initialize(self, widget):
+ self.widget = widget.widgets[0]
+ self.mainWidget = widget
+ self.recalcBoundaries()
+
for widget in self.mainWidget.widgets:
- self.setAllChildren(EVT_KEY_UP, widget, self.keyTrap)
- self.setAllChildren(EVT_PAINT, widget, self.paintTrap)
+ widget.SetCursor (wxNullCursor)
+ self.setAllChildren(EVT_KEY_UP, widget, self.instance.keyTrap)
self.setAllChildren(EVT_SET_FOCUS, widget, self.focusGainedTrap)
self.setAllChildren(EVT_KILL_FOCUS, widget, self.focusLostTrap)
self.setAllChildren(EVT_LEFT_UP, widget, self.instance.OnLeftUp)
self.setAllChildren(EVT_LEFT_DOWN, widget, self.instance.OnLeftDown)
self.setAllChildren(EVT_RIGHT_UP, widget, self.OnRightUp)
self.setAllChildren(EVT_MOTION, widget, self.instance.OnMotion)
- self.widget.Refresh()
+ self.setAllChildren(EVT_KEY_UP, self.highlightBox, self.instance.keyTrap)
+ self.setAllChildren(EVT_SET_FOCUS, self.highlightBox, self.focusGainedTrap)
+ self.setAllChildren(EVT_KILL_FOCUS, self.highlightBox, self.focusLostTrap)
+ self.setAllChildren(EVT_LEFT_UP, self.highlightBox, self.instance.OnLeftUp)
+ self.setAllChildren(EVT_LEFT_DOWN, self.highlightBox,
self.instance.OnLeftDown)
+ self.setAllChildren(EVT_RIGHT_UP, self.highlightBox, self.OnRightUp)
+ self.setAllChildren(EVT_MOTION, self.highlightBox, self.instance.OnMotion)
+
+ self.widget.Refresh()
+
+ def recalcBoundaries(self):
+ x1,y1,x2,y2 = (9999999,9999999,0,0)
+
+ for widget in self.mainWidget.widgets:
+ tx, ty = widget.GetPositionTuple()
+ tw, th = widget.GetSizeTuple()
+ self.instance.positionMappings[widget] = [tx,ty,tx+tw-1,ty+tw-1,self]
+ print "%s (%s,%s) (%s,%s)" %
(self.object.getObjectType(),tx,ty,tx+tw-1,ty+tw-1)
+ if tx < x1:
+ x1 = tx
+ if ty < y1:
+ y1 = ty
+ if tw + tx > x2:
+ x2 = tw + tx
+ if th + ty > y2:
+ y2 = th + ty
+
+
+ self.highlightBox.SetPosition(wxPoint(x1-2,y1-2))
+# self.highlightBox.SetClientSize(wxSize(1,1))
+ self.highlightBox.SetClientSize(wxSize(x2-x1+6,y2-y1+6))
+# self.instance.panel.Refresh()
+ for widget in self.mainWidget.widgets:
+ widget.Refresh()
+
+ def setSelected(self, selected):
+ self.highlightBox.setSelected(selected)
+
+
def setAllChildren(self, event, widget, trap):
# print "Setting event on %s (%s)" % (widget,self.mainWidget.widgets)
event(widget, trap)
@@ -184,16 +285,6 @@
self.hasFocus = 0
self.widget.Refresh()
- def paintTrap(self, event):
- print "PaintTrap"
- dc = wxPaintDC(self.instance.panel)
- x,y = self.widget.GetPositionTuple()
- h,w = self.widget.GetSizeTuple()
- dc.SetPen(wxPen(wxBLUE))
- dc.DrawRectangle(x-1,y-1,h+2,w+2)
- event.Skip()
-
-
def OnLeftDown(self, event):
# self.curLine = []
# self.x, self.y = event.GetPositionTuple()
@@ -224,112 +315,119 @@
# coords = (self.x, self.y) + pos
# self.curLine.append(coords)
- dc.DrawLine(self.x, self.y, pos[0], pos[1])
+# dc.DrawLine(self.x, self.y, pos[0], pos[1])
self.x, self.y = pos
# dc.EndDrawing()
- def keyTrap(self, event):
- if event.KeyCode() in (WXK_LEFT, WXK_RIGHT, WXK_UP, WXK_DOWN):
- if event.AltDown() or event.MetaDown():
- if event.KeyCode() == WXK_LEFT and \
- hasattr(self.object, 'width'):
- self.object.width = self.object.width - 1
- for widget in self.mainWidget.widgets:
- w,h = widget.GetSizeTuple()
- widget.SetSize(wxSize(w-self.instance.gridWidth,h))
- if event.KeyCode() == WXK_RIGHT and \
- hasattr(self.object, 'width'):
- self.object.width = self.object.width + 1
- for widget in self.mainWidget.widgets:
- w,h = widget.GetSizeTuple()
- widget.SetSize(wxSize(w+self.instance.gridWidth,h))
- if event.KeyCode() == WXK_UP and \
- hasattr(self.object, 'height') and \
- self.object.height > 1:
- self.object.height = self.object.height - 1
- for widget in self.mainWidget.widgets:
- w,h = widget.GetSizeTuple()
- widget.SetSize(wxSize(w,h-self.instance.gridHeight))
- if event.KeyCode() == WXK_DOWN and \
- hasattr(self.object, 'height'):
- self.object.height = self.object.height + 1
- for widget in self.mainWidget.widgets:
- w,h = widget.GetSizeTuple()
- widget.SetSize(wxSize(w,h+self.instance.gridHeight))
- else:
- if event.KeyCode() == WXK_LEFT and \
- self.object.x > 0:
- self.object.x = self.object.x - 1
- for widget in self.mainWidget.widgets:
- x,y = widget.GetPositionTuple()
- widget.SetPosition(wxPoint(x-self.instance.gridWidth,y))
- if event.KeyCode() == WXK_RIGHT:
- self.object.x = self.object.x + 1
- for widget in self.mainWidget.widgets:
- x,y = widget.GetPositionTuple()
- widget.SetPosition(wxPoint(x+self.instance.gridWidth,y))
- if event.KeyCode() == WXK_UP and \
- self.object.x > 0:
- self.object.y = self.object.y - 1
- for widget in self.mainWidget.widgets:
- x,y = widget.GetPositionTuple()
- widget.SetPosition(wxPoint(x,y-self.instance.gridHeight))
- if event.KeyCode() == WXK_DOWN:
- self.object.y = self.object.y + 1
- for widget in self.mainWidget.widgets:
- x,y = widget.GetPositionTuple()
- widget.SetPosition(wxPoint(x,y+self.instance.gridHeight))
+ def relativeResize(self, dx, dy):
+ if dx == -1 and \
+ hasattr(self.object, 'width'):
+ self.object.width = self.object.width - 1
+ for widget in self.mainWidget.widgets:
+ w,h = widget.GetSizeTuple()
+ widget.SetSize(wxSize(w-self.instance.gridWidth,h))
+ if dx == 1 and \
+ hasattr(self.object, 'width'):
+ self.object.width = self.object.width + 1
+ for widget in self.mainWidget.widgets:
+ w,h = widget.GetSizeTuple()
+ widget.SetSize(wxSize(w+self.instance.gridWidth,h))
+ if dy == -1 and \
+ hasattr(self.object, 'height') and \
+ self.object.height > 1:
+ self.object.height = self.object.height - 1
+ for widget in self.mainWidget.widgets:
+ w,h = widget.GetSizeTuple()
+ widget.SetSize(wxSize(w,h-self.instance.gridHeight))
+ if dy == 1 and \
+ hasattr(self.object, 'height'):
+ self.object.height = self.object.height + 1
+ for widget in self.mainWidget.widgets:
+ w,h = widget.GetSizeTuple()
+ widget.SetSize(wxSize(w,h+self.instance.gridHeight))
+ self.recalcBoundaries()
+
+
+ def relativeMove(self, dx, dy):
+ print "Moving %s (%s,%s)" % (self.object.getObjectType(), dx,dy)
+ if dx == -1 and \
+ self.object.x > 0:
+ self.object.x = self.object.x - 1
+ for widget in self.mainWidget.widgets:
+ x,y = widget.GetPositionTuple()
+ widget.SetPosition(wxPoint(x-self.instance.gridWidth,y))
+ if dx == 1:
+ self.object.x = self.object.x + 1
+ for widget in self.mainWidget.widgets:
+ x,y = widget.GetPositionTuple()
+ widget.SetPosition(wxPoint(x+self.instance.gridWidth,y))
+ if dy == -1 and \
+ self.object.y > 0:
+ self.object.y = self.object.y - 1
+ print self.object.y
+ print self.mainWidget.widgets
+ for widget in self.mainWidget.widgets:
+ x,y = widget.GetPositionTuple()
+ widget.SetPosition(wxPoint(x,y-self.instance.gridHeight))
+ if dy == 1:
+ self.object.y = self.object.y + 1
+ for widget in self.mainWidget.widgets:
+ x,y = widget.GetPositionTuple()
+ widget.SetPosition(wxPoint(x,y+self.instance.gridHeight))
+ self.recalcBoundaries()
-
+
#
#
#
-class WidgetContainer(wxPanel):
- def __init__(self, instance, parent):
- wxPanel.__init__(self,parent, -1)
- self.__instance = instance
- self.__hasFocus = 1
-
- def set(self, object):
- self.__object = object
- w,h = self.__object.widgets[0].GetSizeTuple()
- x,y = self.__object.widgets[0].GetPositionTuple()
- self.SetSize(wxSize(w+8, h+8))
- self.SetPosition(wxPoint(x-3, y-3))
-
- EVT_SIZE(object.widgets[0], self.resize)
-# EVT_PAINT(self, self.OnPaint)
-
- def gainFocus(self, event):
- self.__hasFocus = 1
-
- def loseFocus(self, event):
- self.__hasFocus = 0
-
- def resize(self, event):
- w,h = self.__object.widget[0].GetSizeTuple()
- self.SetSize(wxSize(w+8, h+8))
+class WidgetHighlighter(wxWindow):
+
+ def __init__(self, parent):
+ wxWindow.__init__(self, parent, -1)
+ self.selected = 0
+ self.parent = parent
+# self.SetBackgroundMode(wxTRANSPARENT)
+ EVT_PAINT(self, self.OnPaint)
+ EVT_SIZE(self, self.reconfigure)
+ EVT_MOVE(self, self.reconfigure)
+ panelColor = parent.GetBackgroundColour()
+ self.inactiveBorderColor = wxColour(panelColor.Red()-16,
+ panelColor.Green()-16,
+ panelColor.Blue()-16)
+ self.activeBorderColor = wxBLUE
+
+ def setSelected (self, selected):
+ if self.selected != selected:
+ self.selected = selected
+ self.Refresh()
+
+ def reconfigure(self, event):
+ self.Refresh()
def OnPaint(self, event):
dc = wxPaintDC(self)
- w, h = self.GetSizeTuple()
- dc.SetPen(wxPen(wxBLUE))
- dc.DrawRect(0,0,1,1)
- dc.DrawRect(w-2,0,w-1,1)
- dc.DrawRect(0,h-2,1,h-1)
- dc.DrawRect(w-2,h-2,w-1,h-1)
- dc.SetBrush(wxBrush(self.__instance.panelColor))
- dc.DrawRect(2,2,w-3,h-3)
- event.Skip()
-
+ dc.BeginDrawing()
+ dc.SetBackgroundMode(wxTRANSPARENT)
+ dc.SetBrush (wxTRANSPARENT_BRUSH)
+ dc.SetBackground(wxBrush(self.parent.GetBackgroundColour(),wxTRANSPARENT))
+ dc.Clear()
+ if self.selected:
+ dc.SetPen(wxPen(self.activeBorderColor))
+ else:
+ dc.SetPen(wxPen(self.inactiveBorderColor))
+ x1,y1 = self.GetSizeTuple()
+ dc.SetBrush(wxTRANSPARENT_BRUSH)
+ dc.DrawRectangle(0,0,x1,y1)
+ dc.EndDrawing()
+
#
#
#
-class GridPane(wxPanel):
+class GridPane(wxSashWindow):
def __init__(self, instance, parent, pos):
- wxPanel.__init__(self, parent, -1, pos=pos,
style=wxWANTS_CHARS|wxSUNKEN_BORDER)
+ wxSashWindow.__init__(self, parent, -1, pos=pos,
style=wxWANTS_CHARS|wxSIMPLE_BORDER)
self.__showGrids = 1
self.__instance = instance
EVT_PAINT(self, self.OnPaint)
@@ -337,6 +435,7 @@
def OnPaint(self, event):
if self.__showGrids:
dc = wxPaintDC(self)
+ dc.BeginDrawing()
w, h = self.GetSizeTuple()
dc.SetPen(wxPen(self.__instance.panelGridColor))
for x in range(self.__instance.widgetWidth,w-2,
self.__instance.widgetWidth):
@@ -344,5 +443,6 @@
for y in
range(self.__instance.widgetHeight,h-2,self.__instance.widgetHeight):
dc.DrawLine(0,y,w-1,y)
+ dc.EndDrawing()
event.Skip()
- gnue/gnuef/designer/src Instance.py LayoutHandl...,
Jason Cater <=