fixes for wxMSW, more efficient code for enabling/disabling groups

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@19644 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Roman Rolinsky
2003-03-21 00:24:37 +00:00
parent 844b310037
commit 63c691437e

View File

@@ -10,20 +10,30 @@ from tree import ID_NEW
# Icons
import images
# Groups of controls
GROUPNUM = 4
GROUP_WINDOWS, GROUP_MENUS, GROUP_SIZERS, GROUP_CONTROLS = range(GROUPNUM)
# States depending on current selection and Control/Shift keys
STATE_ROOT, STATE_MENUBAR, STATE_TOOLBAR, STATE_MENU, STATE_ELSE = range(5)
# Left toolbar for GUI elements
class Tools(wxPanel):
TOOL_SIZE = (30, 30)
def __init__(self, parent):
wxPanel.__init__(self, parent, -1, style=wxRAISED_BORDER | wxWANTS_CHARS)
if wxPlatform == '__WXGTK__':
wxPanel.__init__(self, parent, -1,
style=wxRAISED_BORDER|wxWANTS_CHARS)
else:
wxPanel.__init__(self, parent, -1, style=wxWANTS_CHARS)
# Create sizer for groups
self.sizer = wxBoxSizer(wxVERTICAL)
# Data to create buttons
pullDownMenu = g.pullDownMenu
self.groups = []
self.ctrl = self.shift = false
# Current state (what to enable/disable)
self.state = None
groups = [
["Windows",
(ID_NEW.FRAME, images.getToolFrameBitmap()),
@@ -88,15 +98,16 @@ class Tools(wxPanel):
wxEVT_COMMAND_BUTTON_CLICKED, g.frame.OnCreate)
EVT_KEY_DOWN(self, self.OnKeyDown)
EVT_KEY_UP(self, self.OnKeyUp)
def AddButton(self, id, image, text):
button = wxBitmapButton(self, id, image,
size=self.TOOL_SIZE,
style=wxNO_BORDER | wxWANTS_CHARS)
button = wxBitmapButton(self, id, image, size=self.TOOL_SIZE,
style=wxBU_AUTODRAW|wxNO_BORDER|wxWANTS_CHARS)
EVT_KEY_DOWN(button, self.OnKeyDown)
EVT_KEY_UP(button, self.OnKeyUp)
button.SetToolTipString(text)
self.curSizer.Add(button)
self.groups[-1][1][id] = button
def AddGroup(self, name):
# Each group is inside box
box = wxStaticBox(self, -1, name, style=wxWANTS_CHARS)
@@ -107,20 +118,24 @@ class Tools(wxPanel):
boxSizer.Add(self.curSizer)
self.sizer.Add(boxSizer, 0, wxTOP | wxLEFT | wxRIGHT, 4)
self.groups.append((box,{}))
# Enable/disable group
def EnableGroup(self, gnum, enable = true):
grp = self.groups[gnum]
grp[0].Enable(enable)
for b in grp[1].values(): b.Enable(enable)
# Enable/disable group item
def EnableGroupItem(self, gnum, id, enable = true):
grp = self.groups[gnum]
grp[1][id].Enable(enable)
# Enable/disable group items
def EnableGroupItems(self, gnum, ids, enable = true):
grp = self.groups[gnum]
for id in ids:
grp[1][id].Enable(enable)
# Process key events
def OnKeyDown(self, evt):
if evt.GetKeyCode() == WXK_CONTROL:
@@ -129,6 +144,7 @@ class Tools(wxPanel):
g.tree.shift = true
self.UpdateIfNeeded()
evt.Skip()
def OnKeyUp(self, evt):
if evt.GetKeyCode() == WXK_CONTROL:
g.tree.ctrl = false
@@ -136,12 +152,14 @@ class Tools(wxPanel):
g.tree.shift = false
self.UpdateIfNeeded()
evt.Skip()
def OnMouse(self, evt):
# Update control and shift states
g.tree.ctrl = evt.ControlDown()
g.tree.shift = evt.ShiftDown()
self.UpdateIfNeeded()
evt.Skip()
# Update UI after key presses, if necessary
def UpdateIfNeeded(self):
tree = g.tree
@@ -157,42 +175,62 @@ class Tools(wxPanel):
else:
status = ''
g.frame.SetStatusText(status, 1)
# Update interface
def UpdateUI(self):
# Update status bar
pullDownMenu = g.pullDownMenu
tree = g.tree
item = tree.selection
# Disable everything
for grp in range(GROUPNUM):
self.EnableGroup(grp, false)
# If nothing selected, return
if not item: return
# If nothing selected, disable everything and return
if not item:
# Disable everything
for grp in range(GROUPNUM):
self.EnableGroup(grp, false)
self.state = None
return
if tree.ctrl: needInsert = true
else: needInsert = tree.NeedInsert(item)
# Enable depending on selection
if item == tree.root or needInsert and tree.GetItemParent(item) == tree.root:
self.EnableGroup(GROUP_WINDOWS, true)
self.EnableGroup(GROUP_MENUS, true)
# But disable items
self.EnableGroupItems(GROUP_MENUS,
[ ID_NEW.TOOL,
ID_NEW.MENU_ITEM,
ID_NEW.SEPARATOR ],
false)
state = STATE_ROOT
else:
xxx = tree.GetPyData(item).treeObject()
# Check parent for possible child nodes if inserting sibling
if needInsert: xxx = xxx.parent
if xxx.__class__ == xxxMenuBar:
state = STATE_MENUBAR
elif xxx.__class__ in [xxxToolBar, xxxTool] or \
xxx.__class__ == xxxSeparator and xxx.parent.__class__ == xxxToolBar:
state = STATE_TOOLBAR
elif xxx.__class__ in [xxxMenu, xxxMenuItem]:
state = STATE_MENU
else:
state = STATE_ELSE
# Enable depending on selection
if state != self.state:
# Disable everything
for grp in range(GROUPNUM):
self.EnableGroup(grp, false)
# Enable some
if state == STATE_ROOT:
self.EnableGroup(GROUP_WINDOWS, true)
self.EnableGroup(GROUP_MENUS, true)
# But disable items
self.EnableGroupItems(GROUP_MENUS,
[ ID_NEW.TOOL,
ID_NEW.MENU_ITEM,
ID_NEW.SEPARATOR ],
false)
elif state == STATE_MENUBAR:
self.EnableGroup(GROUP_MENUS)
self.EnableGroupItems(GROUP_MENUS,
[ ID_NEW.TOOL_BAR,
ID_NEW.MENU_BAR,
ID_NEW.TOOL ],
false)
elif xxx.__class__ in [xxxToolBar, xxxTool] or \
xxx.__class__ == xxxSeparator and xxx.parent.__class__ == xxxToolBar:
elif state == STATE_TOOLBAR:
self.EnableGroup(GROUP_MENUS)
self.EnableGroupItems(GROUP_MENUS,
[ ID_NEW.TOOL_BAR,
@@ -205,7 +243,7 @@ class Tools(wxPanel):
[ ID_NEW.TREE_CTRL,
ID_NEW.NOTEBOOK ],
false)
elif xxx.__class__ in [xxxMenu, xxxMenuItem]:
elif state == STATE_MENU:
self.EnableGroup(GROUP_MENUS)
self.EnableGroupItems(GROUP_MENUS,
[ ID_NEW.TOOL_BAR,
@@ -229,8 +267,13 @@ class Tools(wxPanel):
false)
self.EnableGroup(GROUP_SIZERS)
self.EnableGroup(GROUP_CONTROLS)
if xxx.__class__ == xxxNotebook:
self.EnableGroup(GROUP_SIZERS, false)
elif not (xxx.isSizer or xxx.parent and xxx.parent.isSizer):
# Special case for notebook (always executed)
if state == STATE_ELSE:
if xxx.__class__ == xxxNotebook:
self.EnableGroup(GROUP_SIZERS, false)
else:
self.EnableGroup(GROUP_SIZERS)
if not (xxx.isSizer or xxx.parent and xxx.parent.isSizer):
self.EnableGroupItem(GROUP_SIZERS, ID_NEW.SPACER, false)
# Save state
self.state = state