summaryrefslogtreecommitdiffstats
path: root/Mac/Tools/IDE/Wcontrols.py
diff options
context:
space:
mode:
authorJust van Rossum <just@lettererror.com>1999-01-30 22:39:17 (GMT)
committerJust van Rossum <just@lettererror.com>1999-01-30 22:39:17 (GMT)
commit40f9b7bd7cb54645a7c15668b683a8d830ba5219 (patch)
treebaea660d6ef599cd9c4ecc72d009fa75853de577 /Mac/Tools/IDE/Wcontrols.py
parentf59a89b5e34ac7db9e69b02a5b558c7cb49a4d9a (diff)
downloadcpython-40f9b7bd7cb54645a7c15668b683a8d830ba5219.zip
cpython-40f9b7bd7cb54645a7c15668b683a8d830ba5219.tar.gz
cpython-40f9b7bd7cb54645a7c15668b683a8d830ba5219.tar.bz2
First Checked In.
Diffstat (limited to 'Mac/Tools/IDE/Wcontrols.py')
-rw-r--r--Mac/Tools/IDE/Wcontrols.py396
1 files changed, 396 insertions, 0 deletions
diff --git a/Mac/Tools/IDE/Wcontrols.py b/Mac/Tools/IDE/Wcontrols.py
new file mode 100644
index 0000000..f619bb9
--- /dev/null
+++ b/Mac/Tools/IDE/Wcontrols.py
@@ -0,0 +1,396 @@
+import Ctl
+import Controls
+import Win
+import Wbase
+import Qd
+import Evt
+
+class ControlWidget(Wbase.ClickableWidget):
+
+ """Baseclass for all native controls."""
+
+ def __init__(self, possize, title = "Control", procID = 0, callback = None, value = 0, min = 0, max = 1):
+ Wbase.ClickableWidget.__init__(self, possize)
+ self._control = None
+ self._title = title
+ self._callback = callback
+ self._procID = procID
+ self._value = value
+ self._min = min
+ self._max = max
+ self._enabled = 1
+
+ def open(self):
+ self._calcbounds()
+ self._control = Ctl.NewControl(self._parentwindow.wid,
+ self._bounds,
+ self._title,
+ 1,
+ self._value,
+ self._min,
+ self._max,
+ self._procID,
+ 0)
+ self.SetPort()
+ #Win.ValidRect(self._bounds)
+ self.enable(self._enabled)
+
+ def adjust(self, oldbounds):
+ self.SetPort()
+ self._control.HideControl()
+ self._control.MoveControl(self._bounds[0], self._bounds[1])
+ self._control.SizeControl(self._bounds[2] - self._bounds[0], self._bounds[3] - self._bounds[1])
+ if self._visible:
+ Qd.EraseRect(self._bounds)
+ self._control.ShowControl()
+ Win.ValidRect(self._bounds)
+
+ def close(self):
+ self._control.HideControl()
+ self._control = None
+ Wbase.ClickableWidget.close(self)
+
+ def enable(self, onoff):
+ if self._control and self._enabled <> onoff:
+ self._control.HiliteControl((not onoff) and 255)
+ self._enabled = onoff
+
+ def show(self, onoff):
+ self._visible = onoff
+ for w in self._widgets:
+ w.show(onoff)
+ if onoff:
+ self._control.ShowControl()
+ else:
+ self._control.HideControl()
+
+ def activate(self, onoff):
+ self._activated = onoff
+ if self._enabled:
+ self._control.HiliteControl((not onoff) and 255)
+
+ def draw(self, visRgn = None):
+ if self._visible:
+ self._control.Draw1Control()
+
+ def test(self, point):
+ ctltype, control = Ctl.FindControl(point, self._parentwindow.wid)
+ if self._enabled and control == self._control:
+ return 1
+
+ def click(self, point, modifiers):
+ if not self._enabled:
+ return
+ part = self._control.TrackControl(point)
+ if part:
+ if self._callback:
+ Wbase.CallbackCall(self._callback, 0)
+
+ def settitle(self, title):
+ if self._control:
+ self._control.SetControlTitle(title)
+ self._title = title
+
+ def gettitle(self):
+ return self._title
+
+class Button(ControlWidget):
+
+ """Standard push button."""
+
+ def __init__(self, possize, title = "Button", callback = None):
+ procID = Controls.pushButProc | Controls.useWFont
+ ControlWidget.__init__(self, possize, title, procID, callback, 0, 0, 1)
+ self._isdefault = 0
+
+ def push(self):
+ if not self._enabled:
+ return
+ import time
+ self._control.HiliteControl(1)
+ time.sleep(0.1)
+ self._control.HiliteControl(0)
+ if self._callback:
+ Wbase.CallbackCall(self._callback, 0)
+
+ def enable(self, onoff):
+ if self._control and self._enabled <> onoff:
+ self._control.HiliteControl((not onoff) and 255)
+ self._enabled = onoff
+ if self._isdefault and self._visible:
+ self.SetPort()
+ self.drawfatframe(onoff)
+
+ def activate(self, onoff):
+ self._activated = onoff
+ if self._enabled:
+ self._control.HiliteControl((not onoff) and 255)
+ if self._isdefault and self._visible:
+ self.SetPort()
+ self.drawfatframe(onoff)
+
+ def show(self, onoff):
+ ControlWidget.show(self, onoff)
+ if self._isdefault:
+ self.drawfatframe(onoff and self._enabled)
+
+ def draw(self, visRgn = None):
+ if self._visible:
+ self._control.Draw1Control()
+ if self._isdefault and self._activated:
+ self.drawfatframe(self._enabled)
+
+ def drawfatframe(self, onoff):
+ state = Qd.GetPenState()
+ if onoff:
+ Qd.PenPat(Qd.qd.black)
+ else:
+ Qd.PenPat(Qd.qd.white)
+ fatrect = Qd.InsetRect(self._bounds, -4, -4)
+ Qd.PenSize(3, 3)
+ Qd.FrameRoundRect(fatrect, 16, 16)
+ Qd.SetPenState(state)
+
+ def _setdefault(self, onoff):
+ self._isdefault = onoff
+ if self._control and self._enabled:
+ self.SetPort()
+ self.drawfatframe(onoff)
+
+ def adjust(self, oldbounds):
+ if self._isdefault:
+ old = Qd.InsetRect(oldbounds, -4, -4)
+ new = Qd.InsetRect(self._bounds, -4, -4)
+ Qd.EraseRect(old)
+ Win.InvalRect(old)
+ Win.InvalRect(new)
+ ControlWidget.adjust(self, oldbounds)
+
+
+class CheckBox(ControlWidget):
+
+ """Standard checkbox."""
+
+ def __init__(self, possize, title = "Checkbox", callback = None, value = 0):
+ procID = Controls.checkBoxProc | Controls.useWFont
+ ControlWidget.__init__(self, possize, title, procID, callback, value, 0, 1)
+
+ def click(self, point, modifiers):
+ if not self._enabled:
+ return
+ part = self._control.TrackControl(point)
+ if part:
+ self.toggle()
+ if self._callback:
+ Wbase.CallbackCall(self._callback, 0, self.get())
+
+ def push(self):
+ if not self._enabled:
+ return
+ self.toggle()
+ if self._callback:
+ Wbase.CallbackCall(self._callback, 0, self.get())
+
+ def toggle(self):
+ self.set(not self.get())
+
+ def set(self, value):
+ if self._control:
+ self._control.SetControlValue(value)
+ else:
+ self._value = value
+
+ def get(self):
+ if self._control:
+ return self._control.GetControlValue()
+ else:
+ return self._value
+
+
+class RadioButton(ControlWidget):
+
+ """Standard radiobutton."""
+
+ # XXX We need a radiogroup widget; this is too kludgy.
+
+ def __init__(self, possize, title, thebuttons, callback = None, value = 0):
+ procID = Controls.radioButProc | Controls.useWFont
+ ControlWidget.__init__(self, possize, title, procID, callback, value, 0, 1)
+ self.thebuttons = thebuttons
+ thebuttons.append(self)
+
+ def close(self):
+ self.thebuttons = None
+ ControlWidget.close(self)
+
+ def click(self, point, modifiers):
+ if not self._enabled:
+ return
+ part = self._control.TrackControl(point)
+ if part:
+ self.set(1)
+ if self._callback:
+ Wbase.CallbackCall(self._callback, 0, 1)
+
+ def push(self):
+ if not self._enabled:
+ return
+ self.set(1)
+ if self._callback:
+ Wbase.CallbackCall(self._callback, 0, 1)
+
+ def set(self, value):
+ for button in self.thebuttons:
+ if button._control:
+ button._control.SetControlValue(button == self)
+ else:
+ button._value = (button == self)
+
+ def get(self):
+ if self._control:
+ return self._control.GetControlValue()
+ else:
+ return self._value
+
+
+class Scrollbar(ControlWidget):
+
+ """Standard scrollbar."""
+
+ def __init__(self, possize, callback = None, value = 0, min = 0, max = 0):
+ procID = Controls.scrollBarProc
+ ControlWidget.__init__(self, possize, "", procID, callback, value, min, max)
+
+ # interface
+ def set(self, value):
+ if self._callback:
+ Wbase.CallbackCall(self._callback, 1, value)
+
+ def up(self):
+ if self._callback:
+ Wbase.CallbackCall(self._callback, 1, '+')
+
+ def down(self):
+ if self._callback:
+ Wbase.CallbackCall(self._callback, 1, '-')
+
+ def pageup(self):
+ if self._callback:
+ Wbase.CallbackCall(self._callback, 1, '++')
+
+ def pagedown(self):
+ if self._callback:
+ Wbase.CallbackCall(self._callback, 1, '--')
+
+ def setmin(self, min):
+ self._control.SetControlMinimum(min)
+
+ def setmax(self, min):
+ self._control.SetControlMinimum(max)
+
+ def getmin(self):
+ return self._control.GetControlMinimum()
+
+ def getmax(self):
+ return self._control.GetControlMinimum()
+
+ # internals
+ def click(self, point, modifiers):
+ if not self._enabled:
+ return
+ # custom TrackControl. A mousedown in a scrollbar arrow or page area should
+ # generate _control hits as long as the mouse is a) down, b) still in the same part
+ part = self._control.TestControl(point)
+ if Controls.inUpButton <= part <= Controls.inPageDown:
+ self._control.HiliteControl(part)
+ self._hit(part)
+ oldpart = part
+ while Evt.StillDown():
+ part = self._control.TestControl(point)
+ if part == oldpart:
+ self._control.HiliteControl(part)
+ self._hit(part)
+ else:
+ self._control.HiliteControl(0)
+ self.SetPort()
+ point = Evt.GetMouse()
+ self._control.HiliteControl(0)
+ elif part == Controls.inThumb:
+ part = self._control.TrackControl(point)
+ if part:
+ self._hit(part)
+
+ def _hit(self, part):
+ if part == Controls.inThumb:
+ value = self._control.GetControlValue()
+ elif part == Controls.inUpButton:
+ value = "+"
+ elif part == Controls.inDownButton:
+ value = "-"
+ elif part == Controls.inPageUp:
+ value = "++"
+ elif part == Controls.inPageDown:
+ value = "--"
+ if self._callback:
+ Wbase.CallbackCall(self._callback, 1, value)
+
+ def draw(self, visRgn = None):
+ if self._visible:
+ self._control.Draw1Control()
+ Qd.FrameRect(self._bounds)
+
+ def adjust(self, oldbounds):
+ self.SetPort()
+ Win.InvalRect(oldbounds)
+ self._control.HideControl()
+ self._control.MoveControl(self._bounds[0], self._bounds[1])
+ self._control.SizeControl(self._bounds[2] - self._bounds[0], self._bounds[3] - self._bounds[1])
+ if self._visible:
+ Qd.EraseRect(self._bounds)
+ if self._activated:
+ self._control.ShowControl()
+ else:
+ Qd.FrameRect(self._bounds)
+ Win.ValidRect(self._bounds)
+
+ def activate(self, onoff):
+ self._activated = onoff
+ if self._visible:
+ if onoff:
+ self._control.ShowControl()
+ else:
+ self._control.HideControl()
+ self.draw(None)
+ Win.ValidRect(self._bounds)
+
+ def set(self, value):
+ if self._control:
+ self._control.SetControlValue(value)
+ else:
+ self._value = value
+
+ def get(self):
+ if self._control:
+ return self._control.GetControlValue()
+ else:
+ return self._value
+
+
+class __xxxx_PopupControl(ControlWidget):
+
+ def __init__(self, possize, title = "Button", callback = None):
+ procID = Controls.popupMenuProc # | Controls.useWFont
+ ControlWidget.__init__(self, possize, title, procID, callback, 0, 0, 1)
+ self._isdefault = 0
+
+
+def _scalebarvalue(absmin, absmax, curmin, curmax):
+ if curmin <= absmin and curmax >= absmax:
+ return None
+ if curmin <= absmin:
+ return 0
+ if curmax >= absmax:
+ return 32767
+ perc = float(curmin-absmin) / float((absmax - absmin) - (curmax - curmin))
+ return int(perc*32767)
+