]> granicus.if.org Git - python/commitdiff
Added ScrolledWindow (a window with one or two scrollbars)
authorJack Jansen <jack.jansen@cwi.nl>
Fri, 12 Apr 1996 16:24:44 +0000 (16:24 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Fri, 12 Apr 1996 16:24:44 +0000 (16:24 +0000)
Mac/Lib/FrameWork.py
Mac/Lib/test/tscrollwin.py [new file with mode: 0644]

index 36e951af4267a6dc25267fcd6ec01f0507f23d69..613f263b706017eef472c1e7342839bf03656347 100644 (file)
@@ -27,6 +27,7 @@ from Windows import *
 import EasyDialogs
 
 kHighLevelEvent = 23   # Don't know what header file this should come from
+SCROLLBARWIDTH = 16            # Again, not a clue...
 
 
 # Map event 'what' field to strings
@@ -358,14 +359,14 @@ class MenuBar:
        
        def addmenu(self, title, after = 0):
                id = self.getnextid()
-               print 'Newmenu', title, id # XXXX
+               if DEBUG: print 'Newmenu', title, id # XXXX
                m = NewMenu(id, title)
                m.InsertMenu(after)
                DrawMenuBar()
                return id, m
                
        def delmenu(self, id):
-               print 'Delmenu', id # XXXX
+               if DEBUG: print 'Delmenu', id # XXXX
                DeleteMenu(id)
        
        def addpopup(self, title = ''):
@@ -611,6 +612,89 @@ class ControlsWindow(Window):
                else:
                        if DEBUG: print "FindControl(%s, %s) -> (%s, %s)" % \
                                (local, window, ctltype, control)
+                       self.do_contentclick(local, modifiers, event)
+                       
+class ScrolledWindow(ControlsWindow):
+       def __init__(self, parent):
+               self.barx = self.bary = None
+               ControlsWindow.__init__(self, parent)
+
+       def scrollbars(self, wantx=1, wanty=1):
+               SetPort(self.wid)
+               self.barx = self.bary = None
+               x0, y0, x1, y1 = self.wid.GetWindowPort().portRect
+               vx, vy = self.getscrollbarvalues()
+               if wantx:
+                       rect = x0-1, y1-(SCROLLBARWIDTH-1), x1-(SCROLLBARWIDTH-2), y1+1
+                       self.barx = NewControl(self.wid, rect, "", 1, vx, 0, 32767, 16, 0)
+               if wanty:
+                       rect = x1-(SCROLLBARWIDTH-1), y0-1, x1+1, y1-(SCROLLBARWIDTH-2)
+                       self.bary = NewControl(self.wid, rect, "", 1, vy, 0, 32767, 16, 0)
+                       
+       def do_postclose(self):
+               self.barx = self.bary = None
+               ControlsWindow.do_postclose(self)
+               
+       def do_activate(self, onoff, event):
+               if onoff:
+                       onoff = 0
+               else:
+                       onoff = 255
+               if self.barx:
+                       self.barx.HiliteControl(onoff)
+               if self.bary:
+                       self.bary.HiliteControl(onoff)
+                       
+       def do_postresize(self, width, height, window):
+               l, t, r, b = self.wid.GetWindowPort().portRect
+               if self.barx:
+                       self.barx.MoveControl(l-1, b-(SCROLLBARWIDTH-1))
+                       self.barx.SizeControl((r-l)-(SCROLLBARWIDTH-2), SCROLLBARWIDTH)
+               if self.bary:
+                       self.bary.MoveControl(r-(SCROLLBARWIDTH-1), t-1)
+                       self.bary.SizeControl(SCROLLBARWIDTH, (b-t)-(SCROLLBARWIDTH-2))
+               InvalRect((l, t, r, b))
+
+       def do_controlhit(self, window, control, pcode, event):
+               if control == self.barx:
+                       bar = self.barx
+                       which = 'x'
+               elif control == self.bary:
+                       bar = self.bary
+                       which = 'y'
+               else:
+                       return 0
+               value = None
+               if pcode == inUpButton:
+                       what = '-'
+               elif pcode == inDownButton:
+                       what = '+'
+               elif pcode == inPageUp:
+                       what = '--'
+               elif pcode == inPageDown:
+                       what = '++'
+               else:
+                       what = 'set'
+                       value = bar.GetControlValue()
+               self.scrollbar_callback(which, what, value)
+               self.updatescrollbars()
+               return 1
+               
+       def updatescrollbars(self):
+               SetPort(self.wid)
+               vx, vy = self.getscrollbarvalues()
+               if self.barx:
+                       self.barx.SetControlValue(vx)
+               if self.bary:
+                       self.bary.SetControlValue(vy)
+                       
+       # To be overridden:
+       
+       def getscrollbarvalues(self):
+               return 0, 0
+               
+       def scrollbar_callback(self, which, what, value):
+               print 'scroll', which, what, value
        
 class DialogWindow(Window):
        """A modeless dialog window"""
diff --git a/Mac/Lib/test/tscrollwin.py b/Mac/Lib/test/tscrollwin.py
new file mode 100644 (file)
index 0000000..40e9d67
--- /dev/null
@@ -0,0 +1,86 @@
+# Test FrameWork scrollbars
+# Draw a window in which the user can type.
+#
+# This test expects Win, Evt and FrameWork (and anything used by those)
+# to work.
+#
+# Actually, it is more a test of FrameWork by now....
+
+from FrameWork import *
+import Win
+import Qd
+import TE
+import os
+
+class MyWindow(ScrolledWindow):
+       def open(self, name):
+               r = (40, 40, 400, 300)
+               w = Win.NewWindow(r, name, 1, 0, -1, 1, 0x55555555)
+               self.ourrect = 0, 0, 360-SCROLLBARWIDTH-1, 260-SCROLLBARWIDTH-1
+               Qd.SetPort(w)
+               w.DrawGrowIcon()
+               self.wid = w
+               self.do_postopen()
+               self.vx = self.vy = 0
+               self.scrollbars()
+               
+       def getscrollbarvalues(self):
+               return self.vx, self.vy
+               
+       def scrollbar_callback(self, which, what, value):
+               if what == '-':
+                       delta = -1
+               elif what == '--':
+                       delta = -100
+               elif what == '+':
+                       delta = 1
+               elif what == '++':
+                       delta = 100
+                       
+               if which == 'x':
+                       if value:
+                               self.vx = value
+                       else:
+                               self.vx = self.vx + delta
+               else:
+                       if value:
+                               self.vy = value
+                       else:
+                               self.vy = self.vy + delta
+               Win.InvalRect(self.ourrect)
+
+       def do_update(self, wid, event):
+               Qd.EraseRect(self.ourrect)
+               Qd.MoveTo(40, 40)
+               Qd.DrawString("x=%d, y=%d"%(self.vx, self.vy))
+
+class TestSW(Application):
+       def __init__(self):
+               Application.__init__(self)
+               self.num = 0
+               self.listoflists = []
+               
+       def makeusermenus(self):
+               self.filemenu = m = Menu(self.menubar, "File")
+               self.newitem = MenuItem(m, "New window...", "O", self.open)
+               self.quititem = MenuItem(m, "Quit", "Q", self.quit)
+       
+       def open(self, *args):
+               w = MyWindow(self)
+               w.open('Window %d'%self.num)
+               self.num = self.num + 1
+               self.listoflists.append(w)
+               
+       def quit(self, *args):
+               raise self
+
+       def do_about(self, id, item, window, event):
+               EasyDialogs.Message("""Test scrolling FrameWork windows""")
+
+def main():
+       App = TestSW()
+       App.mainloop()
+       
+if __name__ == '__main__':
+       main()
+