Patch by Jason Harper to allow IDE to work again under MacOS 8.1. Plus appearance support for Wlist frames and focussing. Plus commented-out appearance support for the same for Wtext, which still needs some work.
diff --git a/Mac/Tools/IDE/Wcontrols.py b/Mac/Tools/IDE/Wcontrols.py
index 2579449..71d734c 100644
--- a/Mac/Tools/IDE/Wcontrols.py
+++ b/Mac/Tools/IDE/Wcontrols.py
@@ -7,7 +7,7 @@
"""Baseclass for all native controls."""
- def __init__(self, possize, title = "Control", procID = 0, callback = None, value = 0, min = 0, max = 1):
+ def __init__(self, possize, title = "Control", procID = 0, callback = None, value = 0, min = 0, max = 1, viewsize = 0):
Wbase.ClickableWidget.__init__(self, possize)
self._control = None
self._title = title
@@ -17,21 +17,54 @@
self._min = min
self._max = max
self._enabled = 1
- self._viewsize = 0
+ self._viewsize = viewsize
def open(self):
self._calcbounds()
+
+ # NewControl doesn't accept 32-bit value, min, or max, so for consistency
+ # with the new 32-bit set/get methods, out-of-range values are initially
+ # set as zero, followed by a 32-bit set of the actual value.
+ # Values not representable in 16 bits will fail on MacOS 8.1, however
+ # the vast majority of control usage should still be compatible.
+ _value, _min, _max = self._value, self._min, self._max
+ if -32768 <= _value <= 32767:
+ bigvalue = None
+ else:
+ bigvalue = _value
+ _value = 0
+ if -32768 <= _min <= 32767:
+ bigmin = None
+ else:
+ bigmin = _min
+ _min = 0
+ if -32768 <= _max <= 32767:
+ bigmax = None
+ else:
+ bigmax = _max
+ _max = 0
self._control = Ctl.NewControl(self._parentwindow.wid,
self._bounds,
self._title,
1,
- self._value,
- self._min,
- self._max,
+ _value,
+ _min,
+ _max,
self._procID,
0)
+ if bigvalue:
+ self._control.SetControl32BitValue(bigvalue)
+ if bigmin:
+ self._control.SetControl32BitMinimum(bigmin)
+ if bigmax:
+ self._control.SetControl32BitMaximum(bigmax)
if self._viewsize:
- self._control.SetControlViewSize(self._viewsize)
+ try:
+ self._control.SetControlViewSize(self._viewsize)
+ # Not available in MacOS 8.1, but that's OK since it only affects
+ # proportional scrollbars which weren't available in 8.1 either.
+ except NotImplementedError:
+ pass
self.enable(self._enabled)
def adjust(self, oldbounds):
@@ -100,13 +133,23 @@
def set(self, value):
if self._control:
- self._control.SetControl32BitValue(value)
+ if -32768 <= value <= 32767:
+ # No 32-bit control support in MacOS 8.1, so use
+ # the 16-bit interface when possible.
+ self._control.SetControlValue(value)
+ else:
+ self._control.SetControl32BitValue(value)
else:
self._value = value
def get(self):
if self._control:
- return self._control.GetControl32BitValue()
+ try:
+ return self._control.GetControl32BitValue()
+ # No 32-bit control support in MacOS 8.1, so fall
+ # back to the 16-bit interface when needed.
+ except NotImplementedError:
+ return self._control.GetControlValue()
else:
return self._value
@@ -279,27 +322,52 @@
def setmin(self, min):
if self._control is not None:
- self._control.SetControl32BitMinimum(min)
+ if -32768 <= min <= 32767:
+ # No 32-bit control support in MacOS 8.1, so use
+ # the 16-bit interface when possible.
+ self._control.SetControlMinimum(min)
+ else:
+ self._control.SetControl32BitMinimum(min)
else:
self._min = min
def setmax(self, max):
if self._control is not None:
- self._control.SetControl32BitMaximum(max)
+ if -32768 <= max <= 32767:
+ # No 32-bit control support in MacOS 8.1, so use
+ # the 16-bit interface when possible.
+ self._control.SetControlMaximum(max)
+ else:
+ self._control.SetControl32BitMaximum(max)
else:
self._max = max
def setviewsize(self, viewsize):
if self._control is not None:
- self._control.SetControlViewSize(viewsize)
+ try:
+ self._control.SetControlViewSize(viewsize)
+ # Not available in MacOS 8.1, but that's OK since it only affects
+ # proportional scrollbars which weren't available in 8.1 either.
+ except NotImplementedError:
+ pass
else:
self._viewsize = viewsize
def getmin(self):
- return self._control.GetControl32BitMinimum()
+ try:
+ return self._control.GetControl32BitMinimum()
+ # No 32-bit control support in MacOS 8.1, so fall
+ # back to the 16-bit interface when needed.
+ except NotImplementedError:
+ return self._control.GetControlMinimum()
def getmax(self):
- return self._control.GetControl32BitMaximum()
+ try:
+ return self._control.GetControl32BitMaximum()
+ # No 32-bit control support in MacOS 8.1, so fall
+ # back to the 16-bit interface when needed.
+ except NotImplementedError:
+ return self._control.GetControlMaximum()
# internals
def click(self, point, modifiers):
@@ -334,7 +402,12 @@
def _hit(self, part):
if part == Controls.inThumb:
- value = self._control.GetControl32BitValue()
+ try:
+ value = self._control.GetControl32BitValue()
+ # No 32-bit control support in MacOS 8.1, so fall
+ # back to the 16-bit interface when needed.
+ except NotImplementedError:
+ value = self._control.GetControlValue()
elif part == Controls.inUpButton:
value = "+"
elif part == Controls.inDownButton: