-------

Notebook page highlighting fix. Highlight resizes when the window
is resized. ParamUnit spin button detects event handler re-entry
(wxGTK probably has a bug in wxSpinButton with repeated events).


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44694 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Roman Rolinsky
2007-03-08 15:49:35 +00:00
parent f89919f5e9
commit 538a0c0de2
6 changed files with 45 additions and 41 deletions

View File

@@ -1,3 +1,10 @@
0.1.8-3
-------
Notebook page highlighting fix. Highlight resizes when the window
is resized. ParamUnit spin button detects event handler re-entry
(wxGTK probably has a bug in wxSpinButton with repeated events).
0.1.8-2 0.1.8-2
------- -------

View File

@@ -15,7 +15,7 @@ import sys
# Global constants # Global constants
progname = 'XRCed' progname = 'XRCed'
version = '0.1.8-2' version = '0.1.8-3'
# Minimal wxWidgets version # Minimal wxWidgets version
MinWxVersion = (2,6,0) MinWxVersion = (2,6,0)
if wx.VERSION[:3] < MinWxVersion: if wx.VERSION[:3] < MinWxVersion:

View File

@@ -237,6 +237,7 @@ class ParamPage(wx.Panel):
xxx.setSpecial(param, value) xxx.setSpecial(param, value)
else: else:
paramObj.update(value) paramObj.update(value)
# Save current state # Save current state
def SaveState(self): def SaveState(self):
self.origChecks = map(lambda i: (i[0], i[1].GetValue()), self.checks.items()) self.origChecks = map(lambda i: (i[0], i[1].GetValue()), self.checks.items())

View File

@@ -57,8 +57,7 @@ class ParamBinaryOr(PPanel):
self.button = wx.Button(self, self.ID_BUTTON_CHOICES, 'Edit...', size=buttonSize) self.button = wx.Button(self, self.ID_BUTTON_CHOICES, 'Edit...', size=buttonSize)
sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL) sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL)
self.SetAutoLayout(True) self.SetAutoLayout(True)
self.SetSizer(sizer) self.SetSizerAndFit(sizer)
sizer.Fit(self)
wx.EVT_BUTTON(self, self.ID_BUTTON_CHOICES, self.OnButtonChoices) wx.EVT_BUTTON(self, self.ID_BUTTON_CHOICES, self.OnButtonChoices)
wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange)
def GetValue(self): def GetValue(self):
@@ -192,8 +191,7 @@ class ParamColour(PPanel):
self.button = wx.Panel(self, self.ID_BUTTON, wx.DefaultPosition, wx.Size(20, 20)) self.button = wx.Panel(self, self.ID_BUTTON, wx.DefaultPosition, wx.Size(20, 20))
sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT, 5) sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT, 5)
self.SetAutoLayout(True) self.SetAutoLayout(True)
self.SetSizer(sizer) self.SetSizerAndFit(sizer)
sizer.Fit(self)
self.textModified = False self.textModified = False
wx.EVT_PAINT(self.button, self.OnPaintButton) wx.EVT_PAINT(self.button, self.OnPaintButton)
wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange)
@@ -254,8 +252,7 @@ class ParamFont(PPanel):
self.button = wx.Button(self, self.ID_BUTTON_SELECT, 'Select...', size=buttonSize) self.button = wx.Button(self, self.ID_BUTTON_SELECT, 'Select...', size=buttonSize)
sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL) sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL)
self.SetAutoLayout(True) self.SetAutoLayout(True)
self.SetSizer(sizer) self.SetSizerAndFit(sizer)
sizer.Fit(self)
self.textModified = False self.textModified = False
wx.EVT_BUTTON(self, self.ID_BUTTON_SELECT, self.OnButtonSelect) wx.EVT_BUTTON(self, self.ID_BUTTON_SELECT, self.OnButtonSelect)
wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange)
@@ -348,8 +345,7 @@ class ParamInt(PPanel):
self.spin.SetRange(-2147483648, 2147483647) # min/max integers self.spin.SetRange(-2147483648, 2147483647) # min/max integers
sizer.Add(self.spin) sizer.Add(self.spin)
self.SetAutoLayout(True) self.SetAutoLayout(True)
self.SetSizer(sizer) self.SetSizerAndFit(sizer)
sizer.Fit(self)
wx.EVT_SPINCTRL(self, self.ID_SPIN_CTRL, self.OnChange) wx.EVT_SPINCTRL(self, self.ID_SPIN_CTRL, self.OnChange)
def GetValue(self): def GetValue(self):
return str(self.spin.GetValue()) return str(self.spin.GetValue())
@@ -369,8 +365,7 @@ class ParamIntNN(PPanel):
self.spin.SetRange(0, 10000) # min/max integers self.spin.SetRange(0, 10000) # min/max integers
sizer.Add(self.spin) sizer.Add(self.spin)
self.SetAutoLayout(True) self.SetAutoLayout(True)
self.SetSizer(sizer) self.SetSizerAndFit(sizer)
sizer.Fit(self)
wx.EVT_SPINCTRL(self, self.ID_SPIN_CTRL, self.OnChange) wx.EVT_SPINCTRL(self, self.ID_SPIN_CTRL, self.OnChange)
def GetValue(self): def GetValue(self):
return str(self.spin.GetValue()) return str(self.spin.GetValue())
@@ -387,26 +382,24 @@ class ParamUnit(PPanel):
self.ID_TEXT_CTRL = wx.NewId() self.ID_TEXT_CTRL = wx.NewId()
self.ID_SPIN_BUTTON = wx.NewId() self.ID_SPIN_BUTTON = wx.NewId()
sizer = wx.BoxSizer(wx.HORIZONTAL) sizer = wx.BoxSizer(wx.HORIZONTAL)
self.spin = wx.SpinButton(self, self.ID_SPIN_BUTTON, style = wx.SP_VERTICAL, size=(-1,1)) self.spin = wx.SpinButton(self, self.ID_SPIN_BUTTON, style = wx.SP_VERTICAL)
textW = 60 - self.spin.GetSize()[0] textW = 60 - self.spin.GetSize()[0]
self.text = wx.TextCtrl(self, self.ID_TEXT_CTRL, size=(textW,-1)) self.text = wx.TextCtrl(self, self.ID_TEXT_CTRL, size=(textW,-1))
self.spin.SetRange(-10000, 10000) self.spin.SetRange(-10000, 10000)
sizer.Add(self.text, 0, wx.EXPAND) sizer.Add(self.text, 0, wx.EXPAND)
sizer.Add(self.spin, 0, wx.EXPAND) sizer.Add(self.spin, 0, wx.EXPAND)
#sizer.SetMinSize((50,-1))
self.SetAutoLayout(True) self.SetAutoLayout(True)
self.SetSizer(sizer) self.SetSizerAndFit(sizer)
sizer.Fit(self) self.spin.Bind(wx.EVT_SPIN_UP, self.OnSpinUp)
wx.EVT_SPIN_UP(self, self.ID_SPIN_BUTTON, self.OnSpinUp) self.spin.Bind(wx.EVT_SPIN_DOWN, self.OnSpinDown)
wx.EVT_SPIN_DOWN(self, self.ID_SPIN_BUTTON, self.OnSpinDown)
def GetValue(self): def GetValue(self):
return self.text.GetValue() return self.text.GetValue()
def SetValue(self, value): def SetValue(self, value):
self.freeze = True if not value: value = '0'
if not value: value = '0'
self.text.SetValue(value) self.text.SetValue(value)
self.freeze = False self.Change(0)
def Change(self, x): def Change(self, x):
self.freeze = True
# Check if we are working with dialog units # Check if we are working with dialog units
value = self.text.GetValue() value = self.text.GetValue()
units = '' units = ''
@@ -416,14 +409,19 @@ class ParamUnit(PPanel):
try: try:
intValue = int(value) + x intValue = int(value) + x
self.spin.SetValue(intValue) self.spin.SetValue(intValue)
self.text.SetValue(str(intValue) + units) if x: # 0 can be passed to update spin value only
self.SetModified() self.text.SetValue(str(intValue) + units)
self.SetModified()
except: except:
# !!! Strange, if I use wx.LogWarning, event is re-generated # !!! Strange, if I use wx.LogWarning, event is re-generated
print 'ERROR: incorrect unit format' print 'ERROR: incorrect unit format'
self.freeze = False
def OnSpinUp(self, evt): def OnSpinUp(self, evt):
self.freeze = True
self.Change(1) self.Change(1)
def OnSpinDown(self, evt): def OnSpinDown(self, evt):
if self.freeze: return
self.freeze = True
self.Change(-1) self.Change(-1)
class ParamMultilineText(PPanel): class ParamMultilineText(PPanel):
@@ -437,8 +435,7 @@ class ParamMultilineText(PPanel):
self.button = wx.Button(self, self.ID_BUTTON_EDIT, 'Edit...', size=buttonSize) self.button = wx.Button(self, self.ID_BUTTON_EDIT, 'Edit...', size=buttonSize)
sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL) sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL)
self.SetAutoLayout(True) self.SetAutoLayout(True)
self.SetSizer(sizer) self.SetSizerAndFit(sizer)
sizer.Fit(self)
wx.EVT_BUTTON(self, self.ID_BUTTON_EDIT, self.OnButtonEdit) wx.EVT_BUTTON(self, self.ID_BUTTON_EDIT, self.OnButtonEdit)
wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange)
def GetValue(self): def GetValue(self):
@@ -467,8 +464,7 @@ class ParamText(PPanel):
else: option = 0 else: option = 0
sizer.Add(self.text, option, wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.BOTTOM, 2) sizer.Add(self.text, option, wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.BOTTOM, 2)
self.SetAutoLayout(True) self.SetAutoLayout(True)
self.SetSizer(sizer) self.SetSizerAndFit(sizer)
sizer.Fit(self)
wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange)
def GetValue(self): def GetValue(self):
return self.text.GetValue() return self.text.GetValue()
@@ -612,8 +608,7 @@ class ParamContent(PPanel):
self.button = wx.Button(self, self.ID_BUTTON_EDIT, 'Edit...', size=buttonSize) self.button = wx.Button(self, self.ID_BUTTON_EDIT, 'Edit...', size=buttonSize)
sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL) sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL)
self.SetAutoLayout(True) self.SetAutoLayout(True)
self.SetSizer(sizer) self.SetSizerAndFit(sizer)
sizer.Fit(self)
self.textModified = False self.textModified = False
wx.EVT_BUTTON(self, self.ID_BUTTON_EDIT, self.OnButtonEdit) wx.EVT_BUTTON(self, self.ID_BUTTON_EDIT, self.OnButtonEdit)
wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange)
@@ -753,8 +748,7 @@ class RadioBox(PPanel):
topSizer.Add(button, 0, wx.RIGHT, 5) topSizer.Add(button, 0, wx.RIGHT, 5)
wx.EVT_RADIOBUTTON(self, button.GetId(), self.OnRadioChoice) wx.EVT_RADIOBUTTON(self, button.GetId(), self.OnRadioChoice)
self.SetAutoLayout(True) self.SetAutoLayout(True)
self.SetSizer(topSizer) self.SetSizerAndFit(topSizer)
topSizer.Fit(self)
def SetStringSelection(self, value): def SetStringSelection(self, value):
self.freeze = True self.freeze = True
for i in self.choices: for i in self.choices:
@@ -813,8 +807,7 @@ class ParamFile(PPanel):
self.button = wx.Button(self, self.ID_BUTTON_BROWSE, 'Browse...',size=buttonSize) self.button = wx.Button(self, self.ID_BUTTON_BROWSE, 'Browse...',size=buttonSize)
sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL) sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL)
self.SetAutoLayout(True) self.SetAutoLayout(True)
self.SetSizer(sizer) self.SetSizerAndFit(sizer)
sizer.Fit(self)
self.textModified = False self.textModified = False
wx.EVT_BUTTON(self, self.ID_BUTTON_BROWSE, self.OnButtonBrowse) wx.EVT_BUTTON(self, self.ID_BUTTON_BROWSE, self.OnButtonBrowse)
wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange)

View File

@@ -612,6 +612,7 @@ class XML_Tree(wx.TreeCtrl):
# Reset selection object # Reset selection object
self.selection = None self.selection = None
return node return node
# Find position relative to the top-level window # Find position relative to the top-level window
def FindNodePos(self, item, obj=None): def FindNodePos(self, item, obj=None):
# Root at (0,0) # Root at (0,0)
@@ -631,15 +632,12 @@ class XML_Tree(wx.TreeCtrl):
if g.testWin.highLight: if g.testWin.highLight:
g.testWin.highLight.Remove() g.testWin.highLight.Remove()
break break
# Find first ancestor which is a wxWindow (not a sizer) # For sizers and notebooks we must select the first window-like parent
winParent = itemParent winParent = itemParent
while self.GetPyData(winParent).isSizer: while self.GetPyData(winParent).isSizer or \
self.GetPyData(winParent).treeObject().__class__ == xxxNotebook:
winParent = self.GetItemParent(winParent) winParent = self.GetItemParent(winParent)
# Notebook children are layed out in a little strange way parentPos = self.FindNodePos(winParent)
if self.GetPyData(itemParent).treeObject().__class__ == xxxNotebook:
parentPos = wx.Point(0,0)
else:
parentPos = self.FindNodePos(winParent)
# Position (-1,-1) is really (0,0) # Position (-1,-1) is really (0,0)
pos = obj.GetPosition() pos = obj.GetPosition()
if pos == (-1,-1): pos = (0,0) if pos == (-1,-1): pos = (0,0)
@@ -700,7 +698,6 @@ class XML_Tree(wx.TreeCtrl):
# If some data was modified, apply changes # If some data was modified, apply changes
if g.panel.IsModified(): if g.panel.IsModified():
self.Apply(xxx, oldItem) self.Apply(xxx, oldItem)
#if conf.autoRefresh:
if g.testWin: if g.testWin:
if g.testWin.highLight: if g.testWin.highLight:
g.testWin.highLight.Remove() g.testWin.highLight.Remove()
@@ -959,9 +956,11 @@ class XML_Tree(wx.TreeCtrl):
testWin.toolBar = res.LoadToolBar(testWin, STD_NAME) testWin.toolBar = res.LoadToolBar(testWin, STD_NAME)
testWin.SetToolBar(testWin.toolBar) testWin.SetToolBar(testWin.toolBar)
testWin.Show(True) testWin.Show(True)
# Catch some events, set highlight
if testWin: if testWin:
testWin.item = item testWin.item = item
wx.EVT_CLOSE(testWin, self.OnCloseTestWin) wx.EVT_CLOSE(testWin, self.OnCloseTestWin)
wx.EVT_SIZE(testWin, self.OnSizeTestWin)
testWin.highLight = None testWin.highLight = None
if highLight and not self.pendingHighLight: if highLight and not self.pendingHighLight:
self.HighLight(highLight) self.HighLight(highLight)
@@ -987,6 +986,11 @@ class XML_Tree(wx.TreeCtrl):
def OnCloseTestWin(self, evt): def OnCloseTestWin(self, evt):
self.CloseTestWindow() self.CloseTestWindow()
def OnSizeTestWin(self, evt):
if g.testWin.highLight:
self.HighLight(g.testWin.highLight.item)
evt.Skip()
# Return index in parent, for real window children # Return index in parent, for real window children
def WindowIndex(self, item): def WindowIndex(self, item):
n = 0 # index of sibling n = 0 # index of sibling

View File

@@ -317,7 +317,6 @@ class xxxObject:
# Special processing for growablecols-like parameters # Special processing for growablecols-like parameters
# represented by several nodes # represented by several nodes
def special(self, tag, node): def special(self, tag, node):
print 'special',tag
if not self.params.has_key(tag): if not self.params.has_key(tag):
# Create new multi-group # Create new multi-group
self.params[tag] = xxxParamMulti(node) self.params[tag] = xxxParamMulti(node)