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