[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/designer/src base/Instance.py base/MenuBar...
From: |
Jason Cater |
Subject: |
gnue/designer/src base/Instance.py base/MenuBar... |
Date: |
Fri, 23 May 2003 23:19:50 -0400 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Changes by: Jason Cater <address@hidden> 03/05/23 23:19:49
Modified files:
designer/src/base: Instance.py MenuBar.py ToolDock.py
ToolPanel.py
designer/src/forms/LayoutEditor: LayoutEditor.py
Log message:
committing my splitter logic before I completely rip it out... I don't
like it.
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/designer/src/base/Instance.py.diff?tr1=1.93&tr2=1.94&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/designer/src/base/MenuBar.py.diff?tr1=1.43&tr2=1.44&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/designer/src/base/ToolDock.py.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/designer/src/base/ToolPanel.py.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/designer/src/forms/LayoutEditor/LayoutEditor.py.diff?tr1=1.75&tr2=1.76&r1=text&r2=text
Patches:
Index: gnue/designer/src/base/Instance.py
diff -c gnue/designer/src/base/Instance.py:1.93
gnue/designer/src/base/Instance.py:1.94
*** gnue/designer/src/base/Instance.py:1.93 Fri May 23 20:02:31 2003
--- gnue/designer/src/base/Instance.py Fri May 23 23:19:49 2003
***************
*** 225,233 ****
def _initTools(self):
! self.horizSplitter = wxSplitterWindow(self, -1, style=wxSP_3D)
! leftWin = ToolDock(self.horizSplitter, self, 'left')
! rightWin = ToolDock(self.horizSplitter, self,'right')
# Add each tool
for id, title, baseclass, hotkey in self._toolCache:
--- 225,233 ----
def _initTools(self):
! self.__horizSplitter = wxSplitterWindow(self, -1, style=wxSP_3D)
! self.__leftDock = leftWin = ToolDock(self.__horizSplitter, self, 'left')
! self.__rightDock = rightWin = ToolDock(self.__horizSplitter, self,'right')
# Add each tool
for id, title, baseclass, hotkey in self._toolCache:
***************
*** 258,264 ****
enableMenu = 1
else:
# Docked type
! pane = SingleTooledPane(self.horizSplitter, self)
control = pane.AddTool(title, baseclass, self.rootObject, self)
if pos == 'left':
window = leftWin
--- 258,264 ----
enableMenu = 1
else:
# Docked type
! pane = SingleTooledPane(self.__horizSplitter, self)
control = pane.AddTool(title, baseclass, self.rootObject, self)
if pos == 'left':
window = leftWin
***************
*** 277,284 ****
leftWin.refresh()
rightWin.refresh()
! self.horizSplitter.SplitVertically(leftWin, rightWin,
RuntimeSettings.getint(self.runtime_section,
'DockSplitter-TopBottom',500))
def addTool(self, id, title, baseclass, hotkey=None):
--- 277,285 ----
leftWin.refresh()
rightWin.refresh()
! self.__horizSplitter.SplitVertically(leftWin, rightWin,
RuntimeSettings.getint(self.runtime_section,
'DockSplitter-TopBottom',500))
+ leftWin.restoreSettings(self.runtime_section)
def addTool(self, id, title, baseclass, hotkey=None):
***************
*** 325,332 ****
'height': height,
'width': width }
! if self.horizSplitter:
! settings['docksplitter-topbottom'] =
self.horizSplitter.GetSashPosition()
return ( self.runtime_section, settings )
--- 326,336 ----
'height': height,
'width': width }
! if self.__horizSplitter:
! settings['docksplitter-topbottom'] =
self.__horizSplitter.GetSashPosition()
!
! settings.update(self.__leftDock.saveSettings())
! settings.update(self.__rightDock.saveSettings())
return ( self.runtime_section, settings )
Index: gnue/designer/src/base/MenuBar.py
diff -c gnue/designer/src/base/MenuBar.py:1.43
gnue/designer/src/base/MenuBar.py:1.44
*** gnue/designer/src/base/MenuBar.py:1.43 Fri May 23 20:02:31 2003
--- gnue/designer/src/base/MenuBar.py Fri May 23 23:19:49 2003
***************
*** 331,338 ****
class ToolRunner:
def __init__(self, toolFrame, title, hotkey, enabled):
self.toolFrame = toolFrame
-
-
self.hotkey = hotkey
self.wxId = wxNewId()
self.title = title + (hotkey and '\t%s'% hotkey or '')
--- 331,336 ----
Index: gnue/designer/src/base/ToolDock.py
diff -c gnue/designer/src/base/ToolDock.py:1.6
gnue/designer/src/base/ToolDock.py:1.7
*** gnue/designer/src/base/ToolDock.py:1.6 Fri May 23 20:02:31 2003
--- gnue/designer/src/base/ToolDock.py Fri May 23 23:19:49 2003
***************
*** 29,36 ****
#
from wxPython.wx import *
! SPLITTER_STYLE = wxSP_LIVE_UPDATE | wxSP_NOBORDER | wxSP_3DSASH
class ToolDock(wxPanel):
def __init__(self, parent, instance, name):
--- 29,37 ----
#
from wxPython.wx import *
+ from gnue.common.apps import RuntimeSettings
! SPLITTER_STYLE = wxSP_NOBORDER | wxSP_3DSASH # | wxSP_LIVE_UPDATE
class ToolDock(wxPanel):
def __init__(self, parent, instance, name):
***************
*** 41,47 ****
self.panels = []
self.splitters = []
self.child = None
! EVT_SIZE(self, self.OnSize)
#
# Rebuild our dock
--- 42,49 ----
self.panels = []
self.splitters = []
self.child = None
! self.sashSize = 0
! EVT_SIZE(self, self.__OnSize)
#
# Rebuild our dock
***************
*** 99,105 ****
index = 0
for nothing, panel in self.panels:
# Reparent...
- print index, neededSplitters
if index >= neededSplitters:
# The last two tools share the same splitter as parents
panel.Reparent(self.splitters[-1])
--- 101,106 ----
***************
*** 119,128 ****
# ... and split the needed splitters
for index in range(neededSplitters-1):
! self.splitters[index].SplitHorizontally(self.panels[index][1],
self.splitters[index+1], 200)
# The last two are a special case...
! self.splitters[-1].SplitHorizontally(self.panels[-2][1],
self.panels[-1][1], 100)
# We will need to resize the top-most splitter
# manually, so make a note of it:
--- 120,135 ----
# ... and split the needed splitters
for index in range(neededSplitters-1):
! splitter = self.splitters[index]
! splitter.SplitHorizontally(self.panels[index][1],
! self.splitters[index+1], 200)
!
# The last two are a special case...
! splitter = self.splitters[-1]
! splitter.SplitHorizontally(self.panels[-2][1],
! self.panels[-1][1], 100)
! splitter.SetMinimumPaneSize(self.panels[-1][1].minimumVerticalSize)
# We will need to resize the top-most splitter
# manually, so make a note of it:
***************
*** 131,136 ****
--- 138,154 ----
# Redraw screen
self.Refresh()
+ self.sashSize = self.GetClientSizeTuple()[1] - \
+ self.splitters[0].GetWindow1().GetClientSizeTuple()[1] - \
+ self.splitters[0].GetWindow2().GetClientSizeTuple()[1]
+
+
+ self.titlebarSize = self.panels[0][1].minimumVerticalSize -2
+ self.minimumPaneSize = self.titlebarSize + self.sashSize
+
+ for splitter in self.splitters:
+ splitter.SetMinimumPaneSize(self.minimumPaneSize)
+
#
# Add a tool panel to our control
***************
*** 147,152 ****
--- 165,193 ----
# Save state information on the tool panel
panel._dock_ = self
panel._dock_index = indx
+ panel.SetManager(self)
+
+ #
+ # Restore sizes.. used by RuntimeSettings
+ #
+ def restoreSettings(self, section):
+ baseName = 'Docker%s-' % self.name
+ index = 0
+ for splitter in self.splitters:
+ splitter.SetSashPosition(RuntimeSettings.getint(section, baseName +
str(index), 100))
+ index += 1
+
+ #
+ # Save sizes.. used by RuntimeSettings
+ #
+ def saveSettings(self):
+ baseName = 'Docker%s-' % self.name
+ rs = {}
+ index = 0
+ for splitter in self.splitters:
+ rs[baseName + str(index)] = splitter.GetSashPosition()
+ index += 1
+ return rs
#
***************
*** 154,160 ****
#
def remove(self, panel):
self.panels.remove((panel._dock_index, panel))
!
#
# Redock a tool panel
--- 195,201 ----
#
def remove(self, panel):
self.panels.remove((panel._dock_index, panel))
! panel.SetManager(None)
#
# Redock a tool panel
***************
*** 166,180 ****
# Minimize a tool, so only title bar is showing
#
def minimize(self, panel):
! pass
#
# Restore a minimized tool
#
def restore(self, panel):
! pass
! def OnSize(self, event):
! print "Setting size"
self.child.SetSize(self.GetClientSize())
--- 207,306 ----
# Minimize a tool, so only title bar is showing
#
def minimize(self, panel):
! # No splitters in use? Nothing to do.
! # Already minimized? Ditto.
! if not self.splitters or panel.minimized:
! return
!
! # One splitter? Treat as special case...
! # Only one of the tools can be minimized.
! if len(self.splitters) == 1:
! other = self.panels[0][1] != panel and self.panels[0][1] or
self.panels[1][1]
! other.minimized = 0
! else:
!
! # Find out how many are already minimized.
! # One must remain visible at all times.
! numMinimized = 0
! for foo, p in self.panels:
! if p.minimized:
! numMinimized += 1
! if numMinimized == len(self.splitters):
! return
!
!
! # Save the current size so
! # tool can be restored later
! panel.lastSize = panel.GetSizeTuple()[1]
! panel.minimized = 1
!
! # Use the handy-dandy resize function
! self.resize(panel, self.minimumPaneSize)
!
#
# Restore a minimized tool
#
def restore(self, panel):
! # No splitters in use? Nothing to do.
! # Already minimized? Ditto.
! if not self.splitters or not panel.minimized:
! return
!
! # Restore to the last known size
! self.resize(panel, panel.lastSize or 100)
!
! panel.minimized = 0
!
!
! #
! # Resize a tool
! #
! def resize(self, panel, size):
+ # This is used several times...
+ numSplitters = len(self.splitters)
! # No splitters in use? Nothing to do.
! if not numSplitters:
! return
!
! # Current size of panel
! currSize = panel.GetSizeTuple()[1]
! delta = currSize - size
!
! # Determine number of panels minimized
! numMinimized = 0
! for foo, p in self.panels:
! if p.minimized:
! numMinimized += 1
!
! parent = panel.GetParent()
!
! direction = parent.GetWindow2() == panel or -1
! parent.SetSashPosition(parent.GetSashPosition() + delta * direction)
!
! workableArea = self.GetClientSizeTuple()[1] \
! - numMinimized * self.titlebarSize \
! - numSplitters * self.sashSize \
! - (not panel.minimized) and delta
!
!
! #
! # Change the "minimized" state of a tool.
! # i.e., if it is minimized, restore it;
! # if it is not minimized, minimize it.
! def toggleMinimized(self, panel):
! if panel.minimized:
! self.restore(panel)
! else:
! self.minimize(panel)
!
!
! #
! # Resize our child window (the
! # wxSplitterWindow will take care
! # of the rest)
! #
! def __OnSize(self, event):
self.child.SetSize(self.GetClientSize())
Index: gnue/designer/src/base/ToolPanel.py
diff -c gnue/designer/src/base/ToolPanel.py:1.9
gnue/designer/src/base/ToolPanel.py:1.10
*** gnue/designer/src/base/ToolPanel.py:1.9 Fri May 23 20:02:31 2003
--- gnue/designer/src/base/ToolPanel.py Fri May 23 23:19:49 2003
***************
*** 39,44 ****
--- 39,49 ----
self.parent = parent
self.instance = instance
+ # These are used exclusively by ToolDock
+ self.minimumVerticalSize = 0
+ self.lastSize = 0
+ self.minimized = 0
+
def GetWindow(self):
return self
***************
*** 63,115 ****
print "WARNING: ToolPanel.setFeedback called directly"
pass
! def finalize(self):
pass
- class MultiTooledPane(wxNotebook, ToolPanel):
- def __init__(self, parent, instance):
- wxNotebook.__init__(self, parent, -1, style=wxCLIP_CHILDREN)
- self.SetPadding(wxSize(4,4))
- ToolPanel.__init__(self, parent, instance)
- font = self.GetFont()
- font.SetWeight(wxBOLD)
- ## font.SetPointSize(font.GetPointSize()-2)
- self.SetFont(font)
-
- def AddTool(self, title, baseclass, rootObject, instance):
- if baseclass.uses_feedback_bar:
- page = _MultiFeedBackHandler(self)
- control = baseclass(instance, rootObject, page)
- page.setControl(control)
- else:
- page = control = baseclass(instance, rootObject, self)
-
-
- self.AddPage(page, title)
- return control
-
- class _MultiFeedBackHandler(wxPanel):
- def __init__(self, parent):
- wxPanel.__init__(self, parent, -1)
- self.statusText = wxStaticText(self,-1, "Feedback", wxPoint(6,3))
- font = self.statusText.GetFont()
- font.SetWeight(wxBOLD)
- self.statusText.SetFont(font)
- w,h = self.statusText.GetSizeTuple()
- self.y = h + 3
-
- def setControl(self, control):
- self.control = control
- control.setFeedback = self.setFeedback
- control.Move((0,self.y))
- EVT_SIZE(self, self.OnSize)
-
- def setFeedback(self, text):
- self.statusText.SetLabel(text)
-
- def OnSize(self, event):
- w,h = self.GetClientSizeTuple()
- self.control.SetSize((w, h - self.y - 4))
#
#
--- 68,76 ----
print "WARNING: ToolPanel.setFeedback called directly"
pass
! def finalize(self):
pass
#
#
***************
*** 118,130 ****
def __init__(self, parent, menutool):
wxPanel.__init__(self, parent, -1)
ToolPanel.__init__(self, parent, menutool)
def AddTool(self, title, baseclass, rootObject, instance):
self.control = control = baseclass(instance, rootObject, self)
sizer = wxBoxSizer(wxVERTICAL)
! tp = self.__titlePanel = wxPanel(self,-1, wxPoint(2,2))#,
style=wxSIMPLE_BORDER)
tp.SetBackgroundColour(TITLEBAR_ACTIVE)
sizer.Add(tp,0, wxALL|wxEXPAND, border=2)
--- 79,95 ----
def __init__(self, parent, menutool):
wxPanel.__init__(self, parent, -1)
ToolPanel.__init__(self, parent, menutool)
+ self.manager = None
+
+ def SetManager(self, manager):
+ self.manager = manager
def AddTool(self, title, baseclass, rootObject, instance):
self.control = control = baseclass(instance, rootObject, self)
sizer = wxBoxSizer(wxVERTICAL)
! tp = self.__titlePanel = wxPanel(self,-1, wxPoint(0,0))#,
style=wxSIMPLE_BORDER)
tp.SetBackgroundColour(TITLEBAR_ACTIVE)
sizer.Add(tp,0, wxALL|wxEXPAND, border=2)
***************
*** 135,140 ****
--- 100,114 ----
tt.SetFont(font)
x, y = tt.GetSizeTuple()
+ tp.SetClientSize((tp.GetClientSizeTuple()[0], y+3))
+ self.minimumVerticalSize = y + 3
+
+ EVT_LEFT_DCLICK(tp, self.__LeftDClick)
+ EVT_LEFT_DCLICK(tt, self.__LeftDClick)
+
+ EVT_RIGHT_UP(tp, self.__RightClick)
+ EVT_RIGHT_UP(tt, self.__RightClick)
+
if control.uses_toolbar:
sizer.Add(control.createToolbar(self), 0, wxEXPAND)
***************
*** 149,155 ****
return control
-
def setFeedback(self, text):
self.statusText.SetLabel(text)
--- 123,166 ----
return control
def setFeedback(self, text):
self.statusText.SetLabel(text)
+
+ def __LeftDClick(self, event):
+ if self.manager:
+ self.manager.toggleMinimized(self)
+
+ def __RightClick(self, event):
+ # Display a menu
+ menu = wxMenu()
+
+ nid = wxNewId()
+ menu.Append(nid, _("Hide Tool"))
+ EVT_MENU(self, nid, self.__Hide)
+ if self.minimized:
+ menu.Enable(nid, 0)
+
+ nid = wxNewId()
+ menu.Append(nid, _("Show Tool"))
+ EVT_MENU(self, nid, self.__Restore)
+ if not self.minimized:
+ menu.Enable(nid, 0)
+
+ menu.AppendSeparator()
+
+ nid = wxNewId()
+ menu.Append(nid, _("Release to Frame"))
+ EVT_MENU(self, nid, self.__BreakAway)
+ menu.Enable(nid, 0) # TODO
+
+ self.PopupMenu(menu, event.GetPosition())
+
+ def __Hide(self, event):
+ self.manager.minimize(self)
+
+ def __Restore(self, event):
+ self.manager.restore(self)
+
+ def __BreakAway(self, event):
+ print _("This function not yet supported!") # TODO
Index: gnue/designer/src/forms/LayoutEditor/LayoutEditor.py
diff -c gnue/designer/src/forms/LayoutEditor/LayoutEditor.py:1.75
gnue/designer/src/forms/LayoutEditor/LayoutEditor.py:1.76
*** gnue/designer/src/forms/LayoutEditor/LayoutEditor.py:1.75 Fri May 23
20:02:31 2003
--- gnue/designer/src/forms/LayoutEditor/LayoutEditor.py Fri May 23
23:19:49 2003
***************
*** 217,234 ****
try: ft += 'Name: % (%s)' % (object.name, object._type[2:])
except: pass
! try: ft += ' x: %s' % object.Char__x
except: pass
! try: ft += ' y: %s' % object.Char__y
except: pass
! try: ft += ' w: %s' % object.Char__width
except: pass
try:
if object.Char__height > 1:
! ft += ' h: %s' % object.Char__height
except:
pass
--- 217,234 ----
try: ft += 'Name: % (%s)' % (object.name, object._type[2:])
except: pass
! try: ft += ' Row: %s' % object.Char__x
except: pass
! try: ft += ' Col: %s' % object.Char__y
except: pass
! try: ft += ' Width: %s' % object.Char__width
except: pass
try:
if object.Char__height > 1:
! ft += ' Height: %s' % object.Char__height
except:
pass
***************
*** 493,499 ****
self.__cx = cx = int(x / self.gridWidth) + 1
self.__cy = cy = int(y / self.gridHeight) + 1
! self.setFeedback ('x: %s; y: %s' % (cx, cy))
self.__brush = wxBrush(wxWHITE, style=wxTRANSPARENT)
--- 493,499 ----
self.__cx = cx = int(x / self.gridWidth) + 1
self.__cy = cy = int(y / self.gridHeight) + 1
! self.setFeedback ('Col: %s Row: %s' % (cx, cy))
self.__brush = wxBrush(wxWHITE, style=wxTRANSPARENT)
***************
*** 532,538 ****
cx1, cx2 = order(self.__cx, cx)
cy1, cy2 = order(self.__cy, cy)
! self.setFeedback('x: %s; y: %s, w=%s, h=%s'% (cx1, cy1, cx2 - cx1 + 1,
cy2 - cy1 + 1))
--- 532,538 ----
cx1, cx2 = order(self.__cx, cx)
cy1, cy2 = order(self.__cy, cy)
! self.setFeedback('Col: %s Row: %s Width: %s Height: %s'% (cx1,
cy1, cx2 - cx1 + 1, cy2 - cy1 + 1))