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 d59fb7efb649..67831c066a3e 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 56a0658c5770..4bbac262ca21 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 1bebe6ee90e8..828b697176e4 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 22b1ea1daed5..397b2117c1f7 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 136d4ffe9f44..8839c90a8b90 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 be75d8a2f218..8019d06996f7 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 879dab5cdaa2..25794497af23 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 zc-nyn~M5`F^SVY0Xh$c6$MxW8;rR765WI&A%ec!@@vU9CNPdHl^R?3tc9d-ilh zThuLYm6iErwKnh7KfYb6kMp_dFPv8Ds{r3JXsQxxR|L2?c zmyRL*6@Zn|ySea}9nAyTm05S3wE$9Z8Q`BfGjNGg;wQ`9l$z~mcwL68<#Mch(ouGC zOzSM7)qOkG&3Ux8TeMNpCYw;7EGI2{7p*&GfJ~;nYcYLUUZZp88eImZp=i=_oK-Tk z%wx3b^!(F61y|w79a3h!!b(jugFya^M|J({uP^1c!0-P8) zC>1!OPa-)rsUfwA!&58|z8>dQnEH#zzqSirwYUUM1v8>5j5HHe@i0?bi06=fA)0}_ z`A*b&8d>`M5G|P#&oKg4L90N*)B;+QJ&zIz_uMD3xv+=S7$gQO6{dSm{*P96ILsoj~H}bCs@-;}WL;T&#Ww=8QMLUL3SX^IUmJ
  • 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 Hf0h0VH!PJM literal 5077 zc-p-f4Qx}#`FqcfAUMMpM)#JQF*P@xVk542l?WNNmSoo?Y81 z4XqY$K!jRU(oLGEMBA*LwpS)0gtiKys*1D<(Fj!@%0fVhMhK}>D`gR?P=+$UeRuCU zc2b~>iQVbmeSi1eefOR3`_52S3&6tniw+xuZIgzxD!lwK_7&Lw1$$l2ky@yJCIOa3(FJ(y885@1T$z92`t{4W`2>eqC64 zn+3uMcC~vLP_TS|S$|@C0xGopaN@PJ5rLQ#No2yWWzq&j+6FS2gp?+$PYpUybo^q6>H~!qV9sE{zErB9OYO7RMzNj7 zHjM2ZBpeH={jf$K)#Q}_pB+O-|4Tbc%Gt9rtnq}PqACllSF?dH5g>N_6stD6iYZy@ zh&IPk?X)+71uDS`)~t058^RW(J+(S*HPb_5V%CPr^b4!of|V2#n2PEUDX23QNyVOn z6|f5G!G^USp%qAZYGvBm#)h&YDzg+;#*T+70k(SDz4Sz2+5AA63A_?`1Y&=nm}TyOCBC$Q?V>6O(W~WDS9Rfq^%-4U%PUkzyH2RX+25 zZF6oCpc>a_S|dSio1|QQ1MoZUlazTm!v`I9Fv{t+Kgv^$Hbx9lSyv+_q?FoOmTNcn_SA5s|DqDhP(T_rp?N=+_Bs*k#?E)k3Q#@pe71% zvAH}{%?J5@=;S*sPFUuIs3qveU8>1-oOeriow|{ZR+na|LAfd)_j?m-lKLEx0q63ZCnqUaL@1FHlyT7@AIG(S z<~ss!$Pog`?};bC}Q@HDbAg_{5CfFrv5G zh&LPp?p+#pYY^KFx?AsV{mL>|;sZ~r2g5-%w{A%xUirph)^;B~!gm%u(9n%Legx+; z6@4JKzCkhlAZpYNRa_Xg9 zLwQ9R%D;4LPI$e%7 zGw`q?&T*WP*Q3o3;s3DJCB>>JV>%C7{5Q0CgJ$ug<;SVj>|?BEXnh90ejH!T3kz01 z@wjJX&6E1@G5m*G^Z0RPUxrL-v}CU14fLSQ8yLVl?=p!*7=es0VwBs6H!4OX&f)5t4GNpM%w~k!zjO9xrrEU3w#YDd=0yc zSaB@D^b0c)%s{cb*k%^S&0xE?Fb*N8RUs9#qg1n?e7AG^<_GYquTwthv~2>vThhM@ zA-`t7j@X~;XaN;>>S#Qpv=_;)ST43p#*6Kdx}ZB$`>7|vcDXeT#!H^~1*D#9KAL0- zaqO)OX8*nEOe!Wtfn~lxALe~uuX2)1rx|^SzO3BX2!_)KfW*Vi8_+U{Cn097)LEp-eJa-3rb!-{t3z?3}TD&g?tpfTSh!f zvL0&Laa`3#vZ|9LuI|7WjXNBVt2xd&apxfZ=(!o2IgUsA3`_q@Cv zt-f})p6_lj`j1BayqoGXD0BEVDf76NIg+i2%Vn9s=ueFOBM6b1*V}>nwadv&`(}K( z&3A~Osgy%^)`tG9x2%T>Cq!ymbU`=o&;3;}I`t!N%(d=^3_JTcU@3>_|bm?cTxch&w%B zI%k&)t$h$A-#nok?c^~YH5vuH(f$>!#N8T4J;V50ii9j0_9npyEWg(lmCukJl|Q6s z#1t{moN#q<#}-?qWoc%bqg}=vjhwVW`n^HV+QaihyC{mlMIugTX#;LC9*NLwj{N%S z@OHpbS>i*CPW5+&hC^IObQqv0e$2f=OngnA0(T$LA}+6$($n zYW$8+_&WRqzh6;!3feH#3lzQq+Yo-8!V~1V&tB2wdjKl#YxG?_l>N5C+G9lhdl9}} zVGYeOljI*HLj%I|%yj}=ub@l~Go>hc;J6BF_j%?9g?A(TIdhZ3qX=i22|89%*G%B@ zK6T9mHttc^K;Q~HefRG;oY)$Z!ekH3z2qIz*ON*m4p$_SVTnRq2{oOF$NDN4SQIr; jFhw3V6%_1C9G3LH9;r|7jioc@HX;~KkqLh2PqP02Ptyox diff --git a/Mac/Tools/IDE/Wlists.py b/Mac/Tools/IDE/Wlists.py index 4cb3cf2a2abc..a05b8049623c 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 0d9203da3d28..183f4d847adb 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.47.3