From f376ef0996974c30f608020427fead6edb66877d Mon Sep 17 00:00:00 2001 From: Just van Rossum Date: Sun, 18 Nov 2001 14:12:43 +0000 Subject: [PATCH] a whole bunch of OSX tweaks --- Mac/Tools/IDE/PyBrowser.py | 3 +- Mac/Tools/IDE/PyDebugger.py | 1 - Mac/Tools/IDE/PyEdit.py | 9 +++-- Mac/Tools/IDE/W.py | 3 +- Mac/Tools/IDE/Wapplication.py | 2 +- Mac/Tools/IDE/Wbase.py | 12 +----- Mac/Tools/IDE/Wcontrols.py | 59 +++++++++++++++++++++++------ Mac/Tools/IDE/Widgets.rsrc | Bin 5077 -> 6073 bytes Mac/Tools/IDE/Wlists.py | 17 ++++++--- Mac/Tools/IDE/Wtext.py | 68 +++++++++++++++++----------------- 10 files changed, 105 insertions(+), 69 deletions(-) diff --git a/Mac/Tools/IDE/PyBrowser.py b/Mac/Tools/IDE/PyBrowser.py index d59fb7efb6..67831c066a 100644 --- a/Mac/Tools/IDE/PyBrowser.py +++ b/Mac/Tools/IDE/PyBrowser.py @@ -143,6 +143,7 @@ class BrowserWidget(W.List): newcol = -1 #W.SetCursor('fist') while Evt.Button(): + Evt.WaitNextEvent(0, 1, None) # needed for OSX (x, y) = Evt.GetMouse() if (x, y) <> lastpoint: newcol = x + diff @@ -307,7 +308,7 @@ class Browser: title = title + ': ' + name self.w = w = W.Window((300, 400), title, minsize = (100, 100)) w.info = W.TextBox((18, 8, -70, 15)) - w.updatebutton = W.Button((-64, 4, 50, 16), 'Update', self.update) + w.updatebutton = W.BevelButton((-64, 4, 50, 16), 'Update', self.update) w.browser = BrowserWidget((-1, 24, 1, -14), None) w.bind('cmdu', w.updatebutton.push) w.open() diff --git a/Mac/Tools/IDE/PyDebugger.py b/Mac/Tools/IDE/PyDebugger.py index 56a0658c57..4bbac262ca 100644 --- a/Mac/Tools/IDE/PyDebugger.py +++ b/Mac/Tools/IDE/PyDebugger.py @@ -681,7 +681,6 @@ class BreakpointsViewer: def __init__(self, debugger): self.debugger = debugger - import Lists self.w = W.Window((300, 250), 'Breakpoints', minsize = (200, 200)) self.w.panes = W.HorizontalPanes((8, 8, -8, -32), (0.3, 0.7)) self.w.panes.files = W.List(None, callback = self.filehit) #, flags = Lists.lOnlyOne) diff --git a/Mac/Tools/IDE/PyEdit.py b/Mac/Tools/IDE/PyEdit.py index 1bebe6ee90..828b697176 100644 --- a/Mac/Tools/IDE/PyEdit.py +++ b/Mac/Tools/IDE/PyEdit.py @@ -174,7 +174,7 @@ class Editor(W.Window): return '<%s>' % self.title def setupwidgets(self, text): - topbarheight = 28 + topbarheight = 24 popfieldwidth = 80 self.lastlineno = None @@ -197,9 +197,9 @@ class Editor(W.Window): self.bevelbox = W.BevelBox((0, 0, 0, topbarheight)) self.hline = W.HorizontalLine((0, topbarheight, 0, 0)) - self.infotext = W.TextBox((175, 7, -4, 14), backgroundcolor = (0xe000, 0xe000, 0xe000)) - self.runbutton = W.Button((6, 5, 60, 16), runButtonLabels[0], self.run) - self.runselbutton = W.Button((78, 5, 90, 16), runSelButtonLabels[0], self.runselection) + self.infotext = W.TextBox((175, 6, -4, 14), backgroundcolor = (0xe000, 0xe000, 0xe000)) + self.runbutton = W.BevelButton((6, 4, 80, 16), runButtonLabels[0], self.run) + self.runselbutton = W.BevelButton((90, 4, 80, 16), runSelButtonLabels[0], self.runselection) # bind some keys editor.bind("cmdr", self.runbutton.push) @@ -801,6 +801,7 @@ def _makewholewordpattern(word): pattern = pattern + notwordcharspat return re.compile(pattern) + class SearchEngine: def __init__(self): diff --git a/Mac/Tools/IDE/W.py b/Mac/Tools/IDE/W.py index 22b1ea1dae..397b2117c1 100644 --- a/Mac/Tools/IDE/W.py +++ b/Mac/Tools/IDE/W.py @@ -31,7 +31,8 @@ def getdefaultfont(): return prefs.defaultfont def Message(text): - import EasyDialogs, Qd, string + import EasyDialogs, string + from Carbon import Qd Qd.InitCursor() text = string.replace(text, "\n", "\r") if not text: diff --git a/Mac/Tools/IDE/Wapplication.py b/Mac/Tools/IDE/Wapplication.py index 136d4ffe9f..8839c90a8b 100644 --- a/Mac/Tools/IDE/Wapplication.py +++ b/Mac/Tools/IDE/Wapplication.py @@ -9,7 +9,7 @@ from types import * from Carbon import Menu; MenuToolbox = Menu; del Menu -KILLUNKNOWNWINDOWS=1 # Set to 0 for debugging. +KILLUNKNOWNWINDOWS = 0 # Set to 0 for debugging. class Application(FrameWork.Application): diff --git a/Mac/Tools/IDE/Wbase.py b/Mac/Tools/IDE/Wbase.py index be75d8a2f2..8019d06996 100644 --- a/Mac/Tools/IDE/Wbase.py +++ b/Mac/Tools/IDE/Wbase.py @@ -1,4 +1,4 @@ -from Carbon import Evt, Qd, QuickDraw, Win +from Carbon import App, Evt, Qd, QuickDraw, Win import string from types import * import sys @@ -329,15 +329,7 @@ class SelectableWidget(ClickableWidget): def drawselframe(self, onoff): if not self._parentwindow._hasselframes: return - thickrect = Qd.InsetRect(self._bounds, -3, -3) - state = Qd.GetPenState() - Qd.PenSize(2, 2) - if onoff: - Qd.PenPat(Qd.qd.black) - else: - Qd.PenPat(Qd.qd.white) - Qd.FrameRect(thickrect) - Qd.SetPenState(state) + App.DrawThemeFocusRect(self._bounds, onoff) def adjust(self, oldbounds): self.SetPort() diff --git a/Mac/Tools/IDE/Wcontrols.py b/Mac/Tools/IDE/Wcontrols.py index 879dab5cda..25794497af 100644 --- a/Mac/Tools/IDE/Wcontrols.py +++ b/Mac/Tools/IDE/Wcontrols.py @@ -17,6 +17,7 @@ class ControlWidget(Wbase.ClickableWidget): self._min = min self._max = max self._enabled = 1 + self._viewsize = 0 def open(self): self._calcbounds() @@ -29,8 +30,8 @@ class ControlWidget(Wbase.ClickableWidget): self._max, self._procID, 0) - self.SetPort() - #self.GetWindow().ValidWindowRect(self._bounds) + if self._viewsize: + self._control.SetControlViewSize(self._viewsize) self.enable(self._enabled) def adjust(self, oldbounds): @@ -75,9 +76,11 @@ class ControlWidget(Wbase.ClickableWidget): self._control.Draw1Control() def test(self, point): - ctltype, control = Ctl.FindControl(point, self._parentwindow.wid) - if self._enabled and control == self._control: + if Qd.PtInRect(point, self._bounds) and self._enabled: return 1 + #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: @@ -112,16 +115,19 @@ class Button(ControlWidget): """Standard push button.""" + procID = Controls.pushButProc | Controls.useWFont + def __init__(self, possize, title = "Button", callback = None): - procID = Controls.pushButProc | Controls.useWFont - ControlWidget.__init__(self, possize, title, procID, callback, 0, 0, 1) + ControlWidget.__init__(self, possize, title, self.procID, callback, 0, 0, 1) self._isdefault = 0 def push(self): if not self._enabled: return + # emulate the pushing of the button import time self._control.HiliteControl(Controls.kControlButtonPart) + Qd.QDFlushPortBuffer(self._parentwindow.wid, None) # needed under OSX time.sleep(0.1) self._control.HiliteControl(0) if self._callback: @@ -139,7 +145,25 @@ class Button(ControlWidget): if self._visible: self._control.Draw1Control() + def open(self): + ControlWidget.open(self) + if self._isdefault: + self._setdefault(self._isdefault) + def _setdefault(self, onoff): + c = self._control + if c is not None: + if onoff: + data = "\xFF" + else: + data = "\0" + # hide before changing state, otherwise the button isn't always + # redrawn correctly, although it's quite different under Aqua + # and Classic... + c.HideControl() + c.SetControlData(Controls.kControlNoPart, + Controls.kControlPushButtonDefaultTag, data) + c.ShowControl() self._isdefault = onoff def adjust(self, oldbounds): @@ -152,6 +176,10 @@ class Button(ControlWidget): ControlWidget.adjust(self, oldbounds) +class BevelButton(Button): + procID = Controls.kControlBevelButtonNormalBevelProc | Controls.useWFont + + class CheckBox(ControlWidget): """Standard checkbox.""" @@ -250,13 +278,22 @@ class Scrollbar(ControlWidget): Wbase.CallbackCall(self._callback, 1, '--') def setmin(self, min): - self._control.SetControl32BitMinimum(min) + if self._control is not None: + self._control.SetControl32BitMinimum(min) + else: + self._min = min def setmax(self, max): - self._control.SetControl32BitMaximum(max) + if self._control is not None: + self._control.SetControl32BitMaximum(max) + else: + self._max = max - def setviewsize(self, view): - self._control.SetControlViewSize(view) + def setviewsize(self, viewsize): + if self._control is not None: + self._control.SetControlViewSize(viewsize) + else: + self._viewsize = viewsize def getmin(self): return self._control.GetControl32BitMinimum() @@ -312,7 +349,7 @@ class Scrollbar(ControlWidget): def draw(self, visRgn = None): if self._visible: self._control.Draw1Control() - Qd.FrameRect(self._bounds) + #Qd.FrameRect(self._bounds) def adjust(self, oldbounds): self.SetPort() diff --git a/Mac/Tools/IDE/Widgets.rsrc b/Mac/Tools/IDE/Widgets.rsrc index ea2d55c796ff70b4902353af813f23b7f484541d..ddeab7c3b5e97790cdad69eb883345c6806b830d 100644 GIT binary patch literal 6073 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 literal 5077 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 diff --git a/Mac/Tools/IDE/Wlists.py b/Mac/Tools/IDE/Wlists.py index 4cb3cf2a2a..a05b804962 100644 --- a/Mac/Tools/IDE/Wlists.py +++ b/Mac/Tools/IDE/Wlists.py @@ -5,6 +5,8 @@ from Carbon import Evt, Events, Fm, Lists, Qd, Scrap, Win from Carbon.List import LNew, CreateCustomList, GetListPort from Carbon.Lists import kListDefUserProcType, lInitMsg, lDrawMsg, lHiliteMsg, lCloseMsg from Carbon.QuickDraw import hilitetransfermode +from Carbon import App +from Carbon.Appearance import kThemeStateActive, kThemeStateInactive, kThemeStatePressed class List(Wbase.SelectableWidget): @@ -253,22 +255,24 @@ class List(Wbase.SelectableWidget): if not visRgn: visRgn = self._parentwindow.wid.GetWindowPort().visRgn self._list.LUpdate(visRgn) - Qd.FrameRect(self._bounds) - if self._selected and self._activated: - self.drawselframe(1) + App.DrawThemeListBoxFrame(self._bounds, kThemeStateActive) + #if self._selected and self._activated: + # self.drawselframe(1) def select(self, onoff, isclick = 0): if Wbase.SelectableWidget.select(self, onoff): return self.SetPort() - self.drawselframe(onoff) + state = [kThemeStateActive, kThemeStatePressed][onoff] + App.DrawThemeListBoxFrame(self._bounds, kThemeStateActive) + #self.drawselframe(onoff) def activate(self, onoff): self._activated = onoff if self._visible: self._list.LActivate(onoff) - if self._selected: - self.drawselframe(onoff) + #if self._selected: + # self.drawselframe(onoff) def get(self): return self.items @@ -449,6 +453,7 @@ class TwoLineList(CustomList): Qd.MoveTo(left + 4, top + ascent + linefeed) Qd.DrawText(line2, 0, len(line2)) Qd.PenPat("\x11\x11\x11\x11\x11\x11\x11\x11") + bottom = top + theList.cellSize[1] Qd.MoveTo(left, bottom - 1) Qd.LineTo(right, bottom - 1) if selected: diff --git a/Mac/Tools/IDE/Wtext.py b/Mac/Tools/IDE/Wtext.py index 0d9203da3d..183f4d847a 100644 --- a/Mac/Tools/IDE/Wtext.py +++ b/Mac/Tools/IDE/Wtext.py @@ -1,6 +1,8 @@ from Carbon import Evt, Events, Fm, Fonts from Carbon import Qd, Res, Scrap from Carbon import TE, TextEdit, Win +from Carbon import App +from Carbon.Appearance import kThemeStateActive, kThemeStateInactive import waste import WASTEconst import Wbase @@ -55,25 +57,29 @@ class TextBox(Wbase.Widget): class _ScrollWidget: # to be overridden - def getscrollbarvalues(self): + def getscrollrects(self): + """Return (destrect, viewrect).""" return None, None # internal method + def updatescrollbars(self): - vx, vy = self.getscrollbarvalues() + (dl, dt, dr, db), (vl, vt, vr, vb) = self.getscrollrects() if self._parent._barx: - if vx <> None: - self._parent._barx.enable(1) - self._parent._barx.set(vx) - else: - self._parent._barx.enable(0) + viewwidth = vr - vl + destwidth = dr - dl + bar = self._parent._barx + bar.setmax(destwidth - viewwidth) + bar.setviewsize(viewwidth) + bar.set(vl - dl) if self._parent._bary: - if vy <> None: - self._parent._bary.enable(1) - self._parent._bary.set(vy) - else: - self._parent._bary.enable(0) - + viewheight = vb - vt + destheight = db - dt + bar = self._parent._bary + bar.setmax(destheight - viewheight) + bar.setviewsize(viewheight) + bar.set(vt - dt) + UNDOLABELS = [ # Indexed by WEGetUndoInfo() value None, "", "typing", "Cut", "Paste", "Clear", "Drag", "Style", @@ -373,6 +379,7 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget): if self._selected and self._activated: self.drawselframe(1) Qd.FrameRect(self._bounds) + #App.DrawThemeEditTextFrame(self._bounds, kThemeStateActive) # scrolling def scrollpageup(self): @@ -385,13 +392,13 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget): def scrolltop(self): if self._parent._bary and self._parent._bary._enabled: - self.vscroll(0) + self.vscroll(self._parent._bary.getmin()) if self._parent._barx and self._parent._barx._enabled: - self.hscroll(0) + self.hscroll(self._parent._barx.getmin()) def scrollbottom(self): if self._parent._bary and self._parent._bary._enabled: - self.vscroll(32767) + self.vscroll(self._parent._bary.getmax()) # menu handlers def domenu_copy(self, *args): @@ -469,20 +476,15 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget): self.selectall() # private - def getscrollbarvalues(self): - dr = self.ted.WEGetDestRect() - vr = self.ted.WEGetViewRect() - vx = Wcontrols._scalebarvalue(dr[0], dr[2], vr[0], vr[2]) - vy = Wcontrols._scalebarvalue(dr[1], dr[3], vr[1], vr[3]) - return vx, vy + def getscrollrects(self): + return self.ted.WEGetDestRect(), self.ted.WEGetViewRect() def vscroll(self, value): lineheight = self.ted.WEGetHeight(0, 1) dr = self.ted.WEGetDestRect() vr = self.ted.WEGetViewRect() - destheight = dr[3] - dr[1] viewheight = vr[3] - vr[1] - viewoffset = maxdelta = vr[1] - dr[1] + maxdelta = vr[1] - dr[1] mindelta = vr[3] - dr[3] if value == "+": delta = lineheight @@ -493,11 +495,7 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget): elif value == "--": delta = lineheight - viewheight else: # in thumb - cur = (32767L * viewoffset) / (destheight - viewheight) - delta = (cur-value)*(destheight - viewheight)/32767 - if abs(delta - viewoffset) <=2: - # compensate for irritating rounding error - delta = viewoffset + delta = vr[1] - dr[1] - value delta = min(maxdelta, delta) delta = max(mindelta, delta) self.ted.WEScroll(0, delta) @@ -519,11 +517,12 @@ class EditText(Wbase.SelectableWidget, _ScrollWidget): elif value == "--": delta = 0.5 * (vr[0] - vr[2]) else: # in thumb - cur = (32767 * viewoffset) / (destwidth - viewwidth) - delta = (cur-value)*(destwidth - viewwidth)/32767 - if abs(delta - viewoffset) <=2: - # compensate for irritating rounding error - delta = viewoffset + delta = vr[0] - dr[0] - value + #cur = (32767 * viewoffset) / (destwidth - viewwidth) + #delta = (cur-value)*(destwidth - viewwidth)/32767 + #if abs(delta - viewoffset) <=2: + # # compensate for irritating rounding error + # delta = viewoffset delta = min(maxdelta, delta) delta = max(mindelta, delta) self.ted.WEScroll(delta, 0) @@ -923,6 +922,7 @@ class PyEditor(TextEditor): if autoscroll: self.ted.WEFeatureFlag(WASTEconst.weFAutoScroll, 0) self.ted.WESetSelection(count, count + 1) + Qd.QDFlushPortBuffer(self._parentwindow.wid, None) # needed under OSX time.sleep(0.2) self.ted.WESetSelection(selstart, selend) if autoscroll: -- 2.50.1