X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/75aa19469b8b31ae58d6e8956b0e4c7200e30578..52cd0643658c92b11c85e977b8cefd059df509b0:/wxPython/wx/tools/XRCed/params.py diff --git a/wxPython/wx/tools/XRCed/params.py b/wxPython/wx/tools/XRCed/params.py index 23bcf21524..7142449f84 100644 --- a/wxPython/wx/tools/XRCed/params.py +++ b/wxPython/wx/tools/XRCed/params.py @@ -25,7 +25,10 @@ genericExStyles = [ 'wxWS_EX_PROCESS_UI_UPDATES' ] -buttonSize = (35,-1) # in dialog units, transformed to pixels in panel ctor +# Global var initialized in Panel.__init__ for button size in screen pixels +buttonSize = None +# Button size in dialog units +buttonSizeD = (35,-1) # Class that can properly disable children class PPanel(wx.Panel): @@ -33,13 +36,14 @@ class PPanel(wx.Panel): wx.Panel.__init__(self, parent, -1, name=name) self.modified = self.freeze = False def Enable(self, value): + self.enabled = value # Something strange is going on with enable so we make sure... for w in self.GetChildren(): w.Enable(value) #wx.Panel.Enable(self, value) - def SetModified(self): - self.modified = True - g.panel.SetModified(True) + def SetModified(self, state=True): + self.modified = state + if state: g.panel.SetModified(True) # Common method to set modified state def OnChange(self, evt): if self.freeze: return @@ -56,9 +60,7 @@ class ParamBinaryOr(PPanel): sizer.Add(self.text, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 5) self.button = wx.Button(self, self.ID_BUTTON_CHOICES, 'Edit...', size=buttonSize) sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL) - self.SetAutoLayout(True) self.SetSizer(sizer) - sizer.Fit(self) wx.EVT_BUTTON(self, self.ID_BUTTON_CHOICES, self.OnButtonChoices) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) def GetValue(self): @@ -94,10 +96,7 @@ class ParamBinaryOr(PPanel): value.append(self.values[i]) # Add ignored flags value.extend(ignored) - if value: - self.SetValue(reduce(lambda a,b: a+'|'+b, value)) - else: - self.SetValue('') + self.SetValue('|'.join(value)) self.SetModified() dlg.Destroy() @@ -172,10 +171,7 @@ class ParamStyle(ParamBinaryOr): [self.valuesGeneric[i] for i in range(listBoxGeneric.GetCount()) if listBoxGeneric.IsChecked(i)] + ignored - if value: - self.SetValue(reduce(lambda a,b: a+'|'+b, value)) - else: - self.SetValue('') + self.SetValue('|'.join(value)) self.SetModified() dlg.Destroy() @@ -197,9 +193,7 @@ class ParamColour(PPanel): sizer.Add(self.text, 0, wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.BOTTOM, 2) 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) - self.SetAutoLayout(True) self.SetSizer(sizer) - sizer.Fit(self) self.textModified = False wx.EVT_PAINT(self.button, self.OnPaintButton) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) @@ -259,9 +253,7 @@ class ParamFont(PPanel): sizer.Add(self.text, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 5) self.button = wx.Button(self, self.ID_BUTTON_SELECT, 'Select...', size=buttonSize) sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL) - self.SetAutoLayout(True) self.SetSizer(sizer) - sizer.Fit(self) self.textModified = False wx.EVT_BUTTON(self, self.ID_BUTTON_SELECT, self.OnButtonSelect) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) @@ -326,7 +318,6 @@ class ParamFont(PPanel): dlg = wx.FontDialog(self, data) if dlg.ShowModal() == wx.ID_OK: font = dlg.GetFontData().GetChosenFont() - print font.GetEncoding() if font.GetEncoding() == wx.FONTENCODING_SYSTEM: encName = '' else: @@ -354,9 +345,7 @@ class ParamInt(PPanel): self.spin = wx.SpinCtrl(self, self.ID_SPIN_CTRL, size=(60,-1)) self.spin.SetRange(-2147483648, 2147483647) # min/max integers sizer.Add(self.spin) - self.SetAutoLayout(True) self.SetSizer(sizer) - sizer.Fit(self) wx.EVT_SPINCTRL(self, self.ID_SPIN_CTRL, self.OnChange) def GetValue(self): return str(self.spin.GetValue()) @@ -375,9 +364,7 @@ class ParamIntNN(PPanel): self.spin = wx.SpinCtrl(self, self.ID_SPIN_CTRL, size=(60,-1)) self.spin.SetRange(0, 10000) # min/max integers sizer.Add(self.spin) - self.SetAutoLayout(True) self.SetSizer(sizer) - sizer.Fit(self) wx.EVT_SPINCTRL(self, self.ID_SPIN_CTRL, self.OnChange) def GetValue(self): return str(self.spin.GetValue()) @@ -394,26 +381,23 @@ class ParamUnit(PPanel): self.ID_TEXT_CTRL = wx.NewId() self.ID_SPIN_BUTTON = wx.NewId() 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, size=(-1,0)) textW = 60 - self.spin.GetSize()[0] self.text = wx.TextCtrl(self, self.ID_TEXT_CTRL, size=(textW,-1)) self.spin.SetRange(-10000, 10000) sizer.Add(self.text, 0, wx.EXPAND) sizer.Add(self.spin, 0, wx.EXPAND) - #sizer.SetMinSize((50,-1)) - self.SetAutoLayout(True) self.SetSizer(sizer) - sizer.Fit(self) - wx.EVT_SPIN_UP(self, self.ID_SPIN_BUTTON, self.OnSpinUp) - wx.EVT_SPIN_DOWN(self, self.ID_SPIN_BUTTON, self.OnSpinDown) + self.spin.Bind(wx.EVT_SPIN_UP, self.OnSpinUp) + self.spin.Bind(wx.EVT_SPIN_DOWN, self.OnSpinDown) def GetValue(self): return self.text.GetValue() def SetValue(self, value): - self.freeze = True - if not value: value = '0' + if not value: value = '0' self.text.SetValue(value) - self.freeze = False + self.Change(0) def Change(self, x): + self.freeze = True # Check if we are working with dialog units value = self.text.GetValue() units = '' @@ -423,14 +407,19 @@ class ParamUnit(PPanel): try: intValue = int(value) + x self.spin.SetValue(intValue) - self.text.SetValue(str(intValue) + units) - self.SetModified() + if x: # 0 can be passed to update spin value only + self.text.SetValue(str(intValue) + units) + self.SetModified() except: # !!! Strange, if I use wx.LogWarning, event is re-generated - print 'incorrect unit format' + print 'ERROR: incorrect unit format' + self.freeze = False def OnSpinUp(self, evt): + self.freeze = True self.Change(1) def OnSpinDown(self, evt): + if self.freeze: return + self.freeze = True self.Change(-1) class ParamMultilineText(PPanel): @@ -443,9 +432,7 @@ class ParamMultilineText(PPanel): sizer.Add(self.text, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 5) self.button = wx.Button(self, self.ID_BUTTON_EDIT, 'Edit...', size=buttonSize) sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL) - self.SetAutoLayout(True) - self.SetSizer(sizer) - sizer.Fit(self) + self.SetSizerAndFit(sizer) wx.EVT_BUTTON(self, self.ID_BUTTON_EDIT, self.OnButtonEdit) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) def GetValue(self): @@ -464,18 +451,16 @@ class ParamMultilineText(PPanel): dlg.Destroy() class ParamText(PPanel): - def __init__(self, parent, name, textWidth=-1): + def __init__(self, parent, name, textWidth=-1, style=0): PPanel.__init__(self, parent, name) self.ID_TEXT_CTRL = wx.NewId() # We use sizer even here to have the same size of text control sizer = wx.BoxSizer() - self.text = wx.TextCtrl(self, self.ID_TEXT_CTRL, size=wx.Size(textWidth,-1)) + self.text = wx.TextCtrl(self, self.ID_TEXT_CTRL, size=wx.Size(textWidth,-1), style=style) if textWidth == -1: option = 1 else: option = 0 sizer.Add(self.text, option, wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.BOTTOM, 2) - self.SetAutoLayout(True) self.SetSizer(sizer) - sizer.Fit(self) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) def GetValue(self): return self.text.GetValue() @@ -500,6 +485,11 @@ class ParamEncoding(ParamText): def __init__(self, parent, name): ParamText.__init__(self, parent, name, 100) +class ParamComment(ParamText): + def __init__(self, parent, name): + ParamText.__init__(self, parent, name, 330 + buttonSize[0], + style=wx.TE_PROCESS_ENTER) + class ContentDialog(wx.Dialog): def __init__(self, parent, value): # Load from resource @@ -618,9 +608,7 @@ class ParamContent(PPanel): sizer.Add(self.text, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 5) self.button = wx.Button(self, self.ID_BUTTON_EDIT, 'Edit...', size=buttonSize) sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL) - self.SetAutoLayout(True) self.SetSizer(sizer) - sizer.Fit(self) self.textModified = False wx.EVT_BUTTON(self, self.ID_BUTTON_EDIT, self.OnButtonEdit) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) @@ -631,18 +619,14 @@ class ParamContent(PPanel): if self.textModified: # text has newer value try: return self.text.GetValue().split('|') - except SyntaxError: - wx.LogError('Syntax error in parameter value: ' + self.GetName()) + except ValueError: return [] return self.value def SetValue(self, value): self.freeze = True if not value: value = [] self.value = value - if value: - repr_ = reduce(lambda a,b: '%s|%s' % (a,b), value) - else: - repr_ = '' + repr_ = '|'.join(map(str, value)) self.text.SetValue(repr_) # update text ctrl self.freeze = False def OnButtonEdit(self, evt): @@ -657,6 +641,9 @@ class ParamContent(PPanel): self.SetModified() self.textModified = False dlg.Destroy() + def SetModified(self, state=True): + PPanel.SetModified(self, state) + self.textModified = False # CheckList content class ParamContentCheckList(ParamContent): @@ -678,11 +665,7 @@ class ParamContentCheckList(ParamContent): self.freeze = True if not value: value = [] self.value = value - if value: - if len(value) == 1: repr_ = str(value) - else: repr_ = reduce(lambda a,b: '%s|%s' % (a,b), value) - else: - repr_ = '' + repr_ = '|'.join(map(str,value)) self.text.SetValue(repr_) # update text ctrl self.freeze = False @@ -740,9 +723,8 @@ class ParamIntList(ParamContent): def OnButtonEdit(self, evt): if self.textModified: # text has newer value try: - self.value = eval(self.text.GetValue()) - except SyntaxError: - wx.LogError('Syntax error in parameter value: ' + self.GetName()) + self.value = map(int, self.text.GetValue().split('|')) + except ValueError: self.value = [] dlg = IntListDialog(self, self.value) if dlg.ShowModal() == wx.ID_OK: @@ -765,9 +747,7 @@ class RadioBox(PPanel): button = wx.RadioButton(self, -1, i, size=(-1,buttonSize[1]), name=i) topSizer.Add(button, 0, wx.RIGHT, 5) wx.EVT_RADIOBUTTON(self, button.GetId(), self.OnRadioChoice) - self.SetAutoLayout(True) self.SetSizer(topSizer) - topSizer.Fit(self) def SetStringSelection(self, value): self.freeze = True for i in self.choices: @@ -825,9 +805,7 @@ class ParamFile(PPanel): sizer.Add(self.text, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 5) self.button = wx.Button(self, self.ID_BUTTON_BROWSE, 'Browse...',size=buttonSize) sizer.Add(self.button, 0, wx.ALIGN_CENTER_VERTICAL) - self.SetAutoLayout(True) self.SetSizer(sizer) - sizer.Fit(self) self.textModified = False wx.EVT_BUTTON(self, self.ID_BUTTON_BROWSE, self.OnButtonBrowse) wx.EVT_TEXT(self, self.ID_TEXT_CTRL, self.OnChange) @@ -954,5 +932,6 @@ paramDict = { 'fg': ParamColour, 'bg': ParamColour, 'font': ParamFont, 'enabled': ParamBool, 'focused': ParamBool, 'hidden': ParamBool, 'tooltip': ParamText, 'bitmap': ParamBitmap, 'icon': ParamBitmap, - 'encoding': ParamEncoding, 'borders': ParamUnit + 'encoding': ParamEncoding, 'borders': ParamUnit, + 'comment': ParamComment }