home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.3)
-
- from wxPython.wx import *
- import types
- import string
- from sys import maxint
- MAXINT = maxint
- MININT = -maxint - 1
- wxEVT_COMMAND_INT_UPDATED = wxNewEventType()
- WXK_CTRL_X = ord('X') + 1 - ord('A')
- WXK_CTRL_V = ord('V') + 1 - ord('A')
-
- def EVT_INT(win, id, func):
- win.Connect(id, -1, wxEVT_COMMAND_INT_UPDATED, func)
-
-
- class wxIntUpdatedEvent(wxPyCommandEvent):
-
- def __init__(self, id, value = 0, object = None):
- wxPyCommandEvent.__init__(self, wxEVT_COMMAND_INT_UPDATED, id)
- self._wxIntUpdatedEvent__value = value
- self.SetEventObject(object)
-
-
- def GetValue(self):
- return self._wxIntUpdatedEvent__value
-
-
-
- class wxIntValidator(wxPyValidator):
-
- def __init__(self):
- wxPyValidator.__init__(self)
- EVT_CHAR(self, self.OnChar)
-
-
- def Clone(self):
- return self.__class__()
-
-
- def Validate(self, window):
- return 1
-
-
- def OnChar(self, event):
- key = event.KeyCode()
- ctrl = event.GetEventObject()
- value = ctrl.GetValue()
- textval = wxTextCtrl.GetValue(ctrl)
- allow_none = ctrl.IsNoneAllowed()
- pos = ctrl.GetInsertionPoint()
- (sel_start, sel_to) = ctrl.GetSelection()
- select_len = sel_to - sel_start
- allow_event = 1
- set_to_none = 0
- set_to_zero = 0
- set_to_minus_one = 0
- paste = 0
- internally_set = 0
- new_value = value
- new_text = textval
- new_pos = pos
- if key in (WXK_DELETE, WXK_BACK, WXK_CTRL_X):
- if select_len:
- new_text = textval[:sel_start] + textval[sel_to:]
- elif key == WXK_DELETE and pos < len(textval):
- new_text = textval[:pos] + textval[pos + 1:]
- elif key == WXK_BACK and pos > 0:
- new_text = textval[:pos - 1] + textval[pos:]
-
- None if new_text in ('', '-') else None<EXCEPTION MATCH>ValueError
- if key == WXK_CTRL_V:
- paste_text = ctrl._getClipboardContents()
- new_text = textval[:sel_start] + paste_text + textval[sel_to:]
- None if new_text == '' and allow_none else None<EXCEPTION MATCH>ValueError
- if key < WXK_SPACE or key > 255:
- pass
- elif chr(key) == '-':
- if not value is None:
- if value == 0 and pos == 0 or select_len >= len(str(abs(value))):
- new_value = -1
- set_to_minus_one = 1
- elif pos != 0 and value is not None and value < 0:
- allow_event = 0
- else:
- new_text = '-' + textval
- new_pos = 1
-
- try:
- new_value = ctrl._fromGUI(new_text)
- except ValueError:
- allow_event = 0
- except:
- None<EXCEPTION MATCH>ValueError
-
-
- None<EXCEPTION MATCH>ValueError
- if chr(key) in string.digits:
- if chr(key) == '0' and select_len == 0 and value is not None:
- if value >= 0 and pos == 0 and value < 0 and pos in [
- 0,
- 1]:
- allow_event = 0
- elif value is not None and value < 0 and pos == 0:
- allow_event = 0
- else:
- new_text = textval[:sel_start] + chr(key) + textval[sel_to:]
-
- try:
- new_value = ctrl._fromGUI(new_text)
- except ValueError:
- allow_event = 0
- except:
- None<EXCEPTION MATCH>ValueError
-
-
- None<EXCEPTION MATCH>ValueError
- allow_event = 0
- if allow_event:
- if ctrl.IsLimited() and not ctrl.IsInBounds(new_value):
- allow_event = 0
- elif new_value is not None:
- if not set_to_zero and not set_to_minus_one:
- if not new_value > 0 and new_text[0] == '0':
- if new_value < 0 and new_text[1] == '0' and new_value == 0 and select_len > 1:
- if key == WXK_BACK and paste and paste_value == 0 and new_pos > 0:
- new_pos = new_pos - 1
-
- wxCallAfter(ctrl.SetValue, new_value)
- wxCallAfter(ctrl.SetInsertionPoint, new_pos)
- internally_set = 1
- elif paste:
- wxCallAfter(ctrl.SetValue, new_value)
- wxCallAfter(ctrl.SetInsertionPoint, new_pos)
- internally_set = 1
- elif new_value == 0 and len(new_text) > 1:
- allow_event = 0
-
-
- if allow_event:
- ctrl._colorValue(new_value)
-
-
-
- if allow_event:
- if set_to_none:
- wxCallAfter(ctrl.SetValue, new_value)
- elif set_to_zero:
- wxCallAfter(ctrl.SetValue, new_value)
- wxCallAfter(ctrl.SetInsertionPoint, 0)
- wxCallAfter(ctrl.SetSelection, 0, 1)
- elif set_to_minus_one:
- wxCallAfter(ctrl.SetValue, new_value)
- wxCallAfter(ctrl.SetInsertionPoint, 1)
- wxCallAfter(ctrl.SetSelection, 1, 2)
- elif not internally_set:
- event.Skip()
-
- elif not wxValidator_IsSilent():
- wxBell()
-
-
-
- def TransferToWindow(self):
- return True
-
-
- def TransferFromWindow(self):
- return True
-
-
-
- class wxIntCtrl(wxTextCtrl):
-
- def __init__(self, parent, id = -1, value = 0, pos = wxDefaultPosition, size = wxDefaultSize, style = 0, validator = wxDefaultValidator, name = 'integer', min = None, max = None, limited = 0, allow_none = 0, allow_long = 0, default_color = wxBLACK, oob_color = wxRED):
- self._wxIntCtrl__min = None
- self._wxIntCtrl__max = None
- self._wxIntCtrl__limited = 0
- self._wxIntCtrl__default_color = wxBLACK
- self._wxIntCtrl__oob_color = wxRED
- self._wxIntCtrl__allow_none = 0
- self._wxIntCtrl__allow_long = 0
- self._wxIntCtrl__oldvalue = None
- if validator == wxDefaultValidator:
- validator = wxIntValidator()
-
- wxTextCtrl.__init__(self, parent, id, self._toGUI(0), pos, size, style, validator, name)
- EVT_TEXT(self, self.GetId(), self.OnText)
- self.SetBounds(min, max)
- self.SetLimited(limited)
- self.SetColors(default_color, oob_color)
- self.SetNoneAllowed(allow_none)
- self.SetLongAllowed(allow_long)
- self.SetValue(value)
- self._wxIntCtrl__oldvalue = 0
-
-
- def OnText(self, event):
- value = self.GetValue()
- if value != self._wxIntCtrl__oldvalue:
-
- try:
- self.GetEventHandler().ProcessEvent(wxIntUpdatedEvent(self.GetId(), self.GetValue(), self))
- except ValueError:
- return None
-
- event.Skip()
-
- self._wxIntCtrl__oldvalue = value
-
-
- def GetValue(self):
- return self._fromGUI(wxTextCtrl.GetValue(self))
-
-
- def SetValue(self, value):
- wxTextCtrl.SetValue(self, self._toGUI(value))
- self._colorValue()
-
-
- def SetMin(self, min = None):
- if self._wxIntCtrl__max is None and min is None and self._wxIntCtrl__max is not None and self._wxIntCtrl__max >= min:
- self._wxIntCtrl__min = min
- if self.IsLimited() and min is not None and self.GetValue() < min:
- self.SetValue(min)
- else:
- self._colorValue()
- return 1
- else:
- return 0
-
-
- def GetMin(self):
- return self._wxIntCtrl__min
-
-
- def SetMax(self, max = None):
- if self._wxIntCtrl__min is None and max is None and self._wxIntCtrl__min is not None and self._wxIntCtrl__min <= max:
- self._wxIntCtrl__max = max
- if self.IsLimited() and max is not None and self.GetValue() > max:
- self.SetValue(max)
- else:
- self._colorValue()
- return 1
- else:
- return 0
-
-
- def GetMax(self):
- return self._wxIntCtrl__max
-
-
- def SetBounds(self, min = None, max = None):
- ret = self.SetMin(min)
- if ret:
- pass
- return self.SetMax(max)
-
-
- def GetBounds(self):
- return (self._wxIntCtrl__min, self._wxIntCtrl__max)
-
-
- def SetLimited(self, limited):
- self._wxIntCtrl__limited = limited
- if limited:
- min = self.GetMin()
- max = self.GetMax()
- if not (min is None) and self.GetValue() < min:
- self.SetValue(min)
- elif not (max is None) and self.GetValue() > max:
- self.SetValue(max)
-
- else:
- self._colorValue()
-
-
- def IsLimited(self):
- return self._wxIntCtrl__limited
-
-
- def IsInBounds(self, value = None):
- if value is None:
- value = self.GetValue()
-
- if value is None:
- pass
- if not self.IsNoneAllowed() and type(value) not in (types.IntType, types.LongType):
- raise ValueError('wxIntCtrl requires integer values, passed %s' % repr(value))
-
- min = self.GetMin()
- max = self.GetMax()
- if min is None:
- min = value
-
- if max is None:
- max = value
-
- if value == None and min is not None or max is not None:
- return 0
- elif value <= value:
- pass
-
- return value <= max
-
-
- def SetNoneAllowed(self, allow_none):
- self._wxIntCtrl__allow_none = allow_none
- if not allow_none and self.GetValue() is None:
- min = self.GetMin()
- if min is not None:
- self.SetValue(min)
- else:
- self.SetValue(0)
-
-
-
- def IsNoneAllowed(self):
- return self._wxIntCtrl__allow_none
-
-
- def SetLongAllowed(self, allow_long):
- current_value = self.GetValue()
- if not allow_long and type(current_value) is types.LongType:
- if current_value > 0:
- self.SetValue(MAXINT)
- else:
- self.SetValue(MININT)
-
- self._wxIntCtrl__allow_long = allow_long
-
-
- def IsLongAllowed(self):
- return self._wxIntCtrl__allow_long
-
-
- def SetColors(self, default_color = wxBLACK, oob_color = wxRED):
- self._wxIntCtrl__default_color = default_color
- self._wxIntCtrl__oob_color = oob_color
- self._colorValue()
-
-
- def GetColors(self):
- return (self._wxIntCtrl__default_color, self._wxIntCtrl__oob_color)
-
-
- def _colorValue(self, value = None):
- if not self.IsInBounds(value):
- self.SetForegroundColour(self._wxIntCtrl__oob_color)
- else:
- self.SetForegroundColour(self._wxIntCtrl__default_color)
- self.Refresh()
-
-
- def _toGUI(self, value):
- if value is None and self.IsNoneAllowed():
- return ''
- elif type(value) == types.LongType and not self.IsLongAllowed():
- raise ValueError('wxIntCtrl requires integer value, passed long')
- elif type(value) not in (types.IntType, types.LongType):
- raise ValueError('wxIntCtrl requires integer value, passed %s' % repr(value))
- elif self.IsLimited():
- min = self.GetMin()
- max = self.GetMax()
- if not (min is None) and value < min:
- raise ValueError('value is below minimum value of control %d' % value)
-
- if not (max is None) and value > max:
- raise ValueError('value exceeds value of control %d' % value)
-
-
- return str(value)
-
-
- def _fromGUI(self, value):
- if value == '':
- if not self.IsNoneAllowed():
- return 0
- else:
- return None
- else:
-
- try:
- return int(value)
- except ValueError:
- if self.IsLongAllowed():
- return long(value)
- else:
- raise
- except:
- self.IsLongAllowed()
-
-
-
- def Cut(self):
- (sel_start, sel_to) = self.GetSelection()
- select_len = sel_to - sel_start
- textval = wxTextCtrl.GetValue(self)
- do = wxTextDataObject()
- do.SetText(textval[sel_start:sel_to])
- wxTheClipboard.Open()
- wxTheClipboard.SetData(do)
- wxTheClipboard.Close()
- if select_len == len(wxTextCtrl.GetValue(self)):
- if not self.IsNoneAllowed():
- self.SetValue(0)
- self.SetInsertionPoint(0)
- self.SetSelection(0, 1)
- else:
- self.SetValue(None)
- else:
- new_value = self._fromGUI(textval[:sel_start] + textval[sel_to:])
- self.SetValue(new_value)
-
-
- def _getClipboardContents(self):
- do = wxTextDataObject()
- wxTheClipboard.Open()
- success = wxTheClipboard.GetData(do)
- wxTheClipboard.Close()
- if not success:
- return None
- else:
- return do.GetText().strip()
-
-
- def Paste(self):
- paste_text = self._getClipboardContents()
- if paste_text:
- (sel_start, sel_to) = self.GetSelection()
- text = wxTextCtrl.GetValue(self)
- new_text = text[:sel_start] + paste_text + text[sel_to:]
- if new_text == '' and self.IsNoneAllowed():
- self.SetValue(None)
- else:
- value = self._fromGUI(new_text)
- self.SetValue(value)
- new_pos = sel_start + len(paste_text)
- wxCallAfter(self.SetInsertionPoint, new_pos)
-
-
-
- if __name__ == '__main__':
- import traceback
-
- class myDialog(wxDialog):
-
- def __init__(self, parent, id, title, pos = wxPyDefaultPosition, size = wxPyDefaultSize, style = wxDEFAULT_DIALOG_STYLE):
- wxDialog.__init__(self, parent, id, title, pos, size, style)
- self.int_ctrl = wxIntCtrl(self, wxNewId(), size = (55, 20))
- self.OK = wxButton(self, wxID_OK, 'OK')
- self.Cancel = wxButton(self, wxID_CANCEL, 'Cancel')
- vs = wxBoxSizer(wxVERTICAL)
- vs.AddWindow(self.int_ctrl, 0, wxALIGN_CENTRE | wxALL, 5)
- hs = wxBoxSizer(wxHORIZONTAL)
- hs.AddWindow(self.OK, 0, wxALIGN_CENTRE | wxALL, 5)
- hs.AddWindow(self.Cancel, 0, wxALIGN_CENTRE | wxALL, 5)
- vs.AddSizer(hs, 0, wxALIGN_CENTRE | wxALL, 5)
- self.SetAutoLayout(True)
- self.SetSizer(vs)
- vs.Fit(self)
- vs.SetSizeHints(self)
- EVT_INT(self, self.int_ctrl.GetId(), self.OnInt)
-
-
- def OnInt(self, event):
- print 'int now', event.GetValue()
-
-
-
- class TestApp(wxApp):
-
- def OnInit(self):
-
- try:
- self.frame = wxFrame(NULL, -1, 'Test', wxPoint(20, 20), wxSize(120, 100))
- self.panel = wxPanel(self.frame, -1)
- button = wxButton(self.panel, 10, 'Push Me', wxPoint(20, 20))
- EVT_BUTTON(self, 10, self.OnClick)
- except:
- traceback.print_exc()
- return False
-
- return True
-
-
- def OnClick(self, event):
- dlg = myDialog(self.panel, -1, 'test wxIntCtrl')
- dlg.int_ctrl.SetValue(501)
- dlg.int_ctrl.SetInsertionPoint(1)
- dlg.int_ctrl.SetSelection(1, 2)
- rc = dlg.ShowModal()
- print 'final value', dlg.int_ctrl.GetValue()
- del dlg
- self.frame.Destroy()
-
-
- def Show(self):
- self.frame.Show(True)
-
-
-
- try:
- app = TestApp(0)
- app.Show()
- app.MainLoop()
- traceback.print_exc()
-
-
-