blob: 5c72984cc0237e2114f960b95b05ceb32adfd849 [file] [log] [blame]
Guido van Rossum2e449671990-11-05 19:44:36 +00001# A 'WindowParent' is the only module that uses real stdwin functionality.
2# It is the root of the tree.
3# It should have exactly one child when realized.
4
5import stdwin
6from stdwinevents import *
7
8from TransParent import ManageOneChild
9
10Error = 'WindowParent.Error' # Exception
11
12class WindowParent() = ManageOneChild():
13 #
14 def create(self, (title, size)):
15 self.title = title
16 self.size = size # (width, height)
Guido van Rossum52cea431991-01-23 13:43:16 +000017 self._reset()
18 return self
19 #
20 def _reset(self):
21 self.child = 0
22 self.win = 0
Guido van Rossum2e449671990-11-05 19:44:36 +000023 self.itimer = 0
24 self.do_mouse = 0
25 self.do_timer = 0
Guido van Rossum52cea431991-01-23 13:43:16 +000026 #
27 def destroy(self):
28 if self.child: self.child.destroy()
29 self._reset()
Guido van Rossum2e449671990-11-05 19:44:36 +000030 #
31 def need_mouse(self, child): self.do_mouse = 1
32 def no_mouse(self, child): self.do_mouse = 0
33 #
34 def need_timer(self, child): self.do_timer = 1
35 def no_timer(self, child): self.do_timer = 0
36 #
37 def realize(self):
38 if self.win:
39 raise Error, 'realize(): called twice'
40 if not self.child:
41 raise Error, 'realize(): no child'
42 size = self.child.minsize(self.beginmeasuring())
43 self.size = max(self.size[0], size[0]), \
44 max(self.size[1], size[1])
Guido van Rossumfc8e0d91990-12-26 15:34:48 +000045 #stdwin.setdefwinsize(self.size)
46 # XXX Compensate stdwin bug:
47 stdwin.setdefwinsize(self.size[0]+4, self.size[1]+2)
Guido van Rossum2e449671990-11-05 19:44:36 +000048 self.win = stdwin.open(self.title)
49 if self.itimer:
50 self.win.settimer(self.itimer)
51 bounds = (0, 0), self.win.getwinsize()
52 self.child.setbounds(bounds)
53 #
54 def beginmeasuring(self):
55 # Return something with which a child can measure text
56 if self.win:
57 return self.win.begindrawing()
58 else:
59 return stdwin
60 #
61 def begindrawing(self):
62 if self.win:
63 return self.win.begindrawing()
64 else:
65 raise Error, 'begindrawing(): not realized yet'
66 #
67 def change(self, area):
68 if self.win:
69 self.win.change(area)
70 #
71 def scroll(self, args):
72 if self.win:
73 self.win.scroll(args)
74 #
75 def settimer(self, itimer):
76 if self.win:
77 self.win.settimer(itimer)
78 else:
79 self.itimer = itimer
80 #
81 # Only call dispatch if we have a child
82 #
83 def dispatch(self, (type, win, detail)):
84 if win <> self.win:
85 return
86 elif type = WE_DRAW:
87 d = self.win.begindrawing()
88 self.child.draw(d, detail)
89 elif type = WE_MOUSE_DOWN:
90 if self.do_mouse: self.child.mouse_down(detail)
91 elif type = WE_MOUSE_MOVE:
92 if self.do_mouse: self.child.mouse_move(detail)
93 elif type = WE_MOUSE_UP:
94 if self.do_mouse: self.child.mouse_up(detail)
95 elif type = WE_TIMER:
96 if self.do_timer: self.child.timer()
97 elif type = WE_SIZE:
98 self.win.change((0, 0), (10000, 10000)) # XXX
99 bounds = (0, 0), self.win.getwinsize()
100 self.child.setbounds(bounds)
101 #