43 |
# My support files |
# My support files |
44 |
from Utils import * |
from Utils import * |
45 |
from LayoutEditorTools import LayoutEditorTools |
from LayoutEditorTools import LayoutEditorTools |
|
from WidgetHandler import WidgetHandler |
|
46 |
from PropertyBar import PropertyBar |
from PropertyBar import PropertyBar |
47 |
from DisplayDropTarget import DisplayDropTarget |
from DisplayDropTarget import DisplayDropTarget |
48 |
from ReorderFocus import ReorderFocus |
from ReorderFocus import ReorderFocus |
49 |
|
|
50 |
|
from renderers.native.WidgetHandler import WidgetHandler |
51 |
from renderers.Base.GridPane import GridPane |
from renderers.Base.GridPane import GridPane |
52 |
|
from renderers.native.Driver import Renderer |
53 |
|
|
54 |
|
from Workspace import Workspace |
55 |
|
|
56 |
class LayoutEditor (ToolBase): |
class LayoutEditor (ToolBase): |
57 |
|
|
63 |
|
|
64 |
def init(self): |
def init(self): |
65 |
|
|
66 |
|
self.renderer = Renderer(self.instance) |
67 |
|
|
68 |
# TODO: blah.... historical reasons |
# TODO: blah.... historical reasons |
69 |
self._instance = self.instance |
self._instance = self.instance |
70 |
|
|
159 |
self._notebookMap[object] = index |
self._notebookMap[object] = index |
160 |
self._notebookMap[index] = object |
self._notebookMap[index] = object |
161 |
|
|
162 |
self.workspacescroll = wxScrolledWindow(self.notebook, -1, |
self.workspace = Workspace(self.notebook, self, object) |
|
pos=wxPoint(0,0), |
|
|
style=wxCLIP_CHILDREN|wxHSCROLL|wxVSCROLL|wxSUNKEN_BORDER) |
|
|
|
|
|
EVT_SIZE(self.workspacescroll, self.__OnGridSize) |
|
|
self.workspace = wxPanel(self.workspacescroll,-1) |
|
|
self.workspace.SetBackgroundColour(self.backcolor) |
|
163 |
|
|
164 |
self.notebook.AddPage(self.workspacescroll,object.name) |
self.notebook.AddPage(self.workspace.scroller, object.name) |
165 |
object.__workspace = self.workspace |
object.__workspace = self.workspace |
166 |
self.drawPage(object) |
|
167 |
if object._type == 'GFBlock': |
elif object._type == 'GFBlock': |
168 |
self.blockMap[object.name.lower()] = object |
self.blockMap[object.name.lower()] = object |
169 |
if not self.block: |
if not self.block: |
170 |
self._setCurrentBlock(object) |
self._setCurrentBlock(object) |
171 |
|
|
172 |
|
|
173 |
def onSetCurrentObject (self, event): |
def onSetCurrentObject (self, event): |
174 |
object = event.object |
object = event.object |
175 |
handler = event.originator |
handler = event.originator |
261 |
|
|
262 |
if page != None and page != self.page: |
if page != None and page != self.page: |
263 |
self.page = page |
self.page = page |
264 |
|
self.workspace = page.__workspace |
265 |
self.notebook.SetSelection(self._notebookMap[page]) |
self.notebook.SetSelection(self._notebookMap[page]) |
|
try: |
|
|
self.workspace = page.__workspace |
|
|
self.panel = self.page.__panel |
|
|
UIwxpython.setPointSize(self.page.__pointSize) |
|
|
self.calcGridSpacing() |
|
|
except AttributeError: |
|
|
# This simply means we are setting up |
|
|
# our notebook for the first time. |
|
|
pass |
|
266 |
|
|
267 |
|
|
268 |
def _setSelection(self, focus, objects): |
def _setSelection(self, focus, objects): |
336 |
self._setCurrentPage(page) |
self._setCurrentPage(page) |
337 |
|
|
338 |
if object in (self.rootObject, self.page, self.rootObject._layout) or object in self.widgetList: |
if object in (self.rootObject, self.page, self.rootObject._layout) or object in self.widgetList: |
339 |
self.refreshPage(self.page) |
self.workspace.refreshPage(self.page) |
340 |
|
|
341 |
if object._type == 'GFBlock' and event.old.has_key('name'): |
if object._type == 'GFBlock' and event.old.has_key('name'): |
342 |
del self.blockMap[event.old['name'].lower()] |
del self.blockMap[event.old['name'].lower()] |
380 |
object._widgetHandler = None |
object._widgetHandler = None |
381 |
|
|
382 |
|
|
|
def refreshPage(self, page): |
|
|
try: |
|
|
page.__panel.Destroy() |
|
|
del page.__panel |
|
|
except AttributeError: |
|
|
pass |
|
|
|
|
|
self.drawPage(page) |
|
|
|
|
383 |
def calcGridSpacing(self): |
def calcGridSpacing(self): |
384 |
UIwxpython.initFont(self.panel) |
UIwxpython.initFont(self.panel) |
385 |
|
|
444 |
page.walk(self.__drawItem) |
page.walk(self.__drawItem) |
445 |
|
|
446 |
|
|
|
### coverPanel = TransparentPanel(self, self.panel) |
|
|
|
|
447 |
EVT_CHAR(self.panel, self.keyTrap) |
EVT_CHAR(self.panel, self.keyTrap) |
448 |
EVT_LEFT_DOWN(self.panel, self.OnLeftDown) |
EVT_LEFT_DOWN(self.panel, self.OnLeftDown) |
449 |
EVT_MOTION(self.panel, self.OnMotion) |
EVT_MOTION(self.panel, self.OnMotion) |
820 |
self.dispatchEvent('Cancel:LayoutEditor:Prepositioning') |
self.dispatchEvent('Cancel:LayoutEditor:Prepositioning') |
821 |
self.dispatchEvent('LayoutEditor:Select') |
self.dispatchEvent('LayoutEditor:Select') |
822 |
|
|
|
class PrepositioningTimer(wxTimer): |
|
|
def __init__(self, method, *args, **params): |
|
|
self.__method = method |
|
|
self.__args = args |
|
|
self.__params = params |
|
|
wxTimer.__init__(self) |
|
|
|
|
|
def Notify(self): |
|
|
self.__method(*self.__args, **self.__params) |
|
|
|
|
|
|
|
|
|
|
|
class TransparentPanel: |
|
|
def __init__(self, layoutEditor, parent): |
|
|
self.parent = parent |
|
|
self.editor = layoutEditor |
|
|
self.bitmap = wxEmptyBitmap(*self.parent.GetClientSizeTuple()) |
|
|
|
|
|
class TransparentPanelXXXX(wxWindow): |
|
|
def __init__(self, layoutEditor, parent): |
|
|
wxWindow.__init__(self, parent, -1, pos=wxPoint(0,0), size=parent.GetClientSize()) |
|
|
# EVT_PAINT(self, self.OnPaint) |
|
|
EVT_ERASE_BACKGROUND(self, self.OnEraseBackground) |
|
|
# parent.Refresh() |
|
|
|
|
|
def OnEraseBackground(self, event): |
|
|
print "Painting" |
|
|
pass |
|
|
|
|
|
|
|
|
def OnPaint(self, event): |
|
|
object = wxPyTypeCast(event.GetEventObject(),'wxWindow') |
|
|
dc = wxPaintDC(object) |
|
|
dc.BeginDrawing() |
|
|
dc.SetBackgroundMode(wxTRANSPARENT) |
|
|
dc.SetClippingRegion(5,5,10,50) |
|
|
## dc.SetBackground(wxBrush(self.parent.GetBackgroundColour(),wxTRANSPARENT)) |
|
|
## dc.SetBackground(wxBrush(wxBLACK,wxTRANSPARENT)) |
|
|
|
|
|
## dc.Clear() |
|
|
## if self.focused: |
|
|
## dc.SetPen(wxPen(activeBorderColor)) |
|
|
## else: |
|
|
## dc.SetPen(wxPen(inactiveBorderColor)) |
|
|
## x1,y1 = object.GetSizeTuple() |
|
|
## dc.DrawRectangle(0,0,x1,y1) |
|
|
## if self.focused: |
|
|
## dc.DrawRectangle(1,1,x1-2,y1-2) |
|
|
|
|
|
dc.EndDrawing() |
|
823 |
|
|
824 |
|
class PrepositioningTimer(wxTimer): |
825 |
|
def __init__(self, method, *args, **params): |
826 |
|
self.__method = method |
827 |
|
self.__args = args |
828 |
|
self.__params = params |
829 |
|
wxTimer.__init__(self) |
830 |
|
|
831 |
|
def Notify(self): |
832 |
|
self.__method(*self.__args, **self.__params) |
833 |
|
|