diff options
author | Guido van Rossum <guido@python.org> | 1990-11-05 19:44:36 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1990-11-05 19:44:36 (GMT) |
commit | 2e4496710494391b12a8553f652494c035bae340 (patch) | |
tree | 45d17cfebddc961fb1316c7a4514d10e62e05e1d /Lib/stdwin/Split.py | |
parent | 0c89ec778d684a13a656b6b3462ae7dfd2837148 (diff) | |
download | cpython-2e4496710494391b12a8553f652494c035bae340.zip cpython-2e4496710494391b12a8553f652494c035bae340.tar.gz cpython-2e4496710494391b12a8553f652494c035bae340.tar.bz2 |
Initial revision
Diffstat (limited to 'Lib/stdwin/Split.py')
-rwxr-xr-x | Lib/stdwin/Split.py | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/Lib/stdwin/Split.py b/Lib/stdwin/Split.py new file mode 100755 index 0000000..c442fe3 --- /dev/null +++ b/Lib/stdwin/Split.py @@ -0,0 +1,113 @@ +# Generic Split implementation. +# Use as a base class for other splits. + +Error = 'Split.Error' # Exception + +import rect +from util import remove + +class Split(): + # + # Calls from creator + # NB derived classes may add parameters to create() + # + def create(self, parent): + parent.addchild(self) + self.parent = parent + self.children = [] + self.mouse_interest = [] + self.timer_interest = [] + self.mouse_focus = 0 + return self + # + # Downcalls from parent to child + # + def destroy(self): + self.parent = 0 + for child in self.children: + child.destroy() + self.children[:] = [] + self.mouse_interest[:] = [] + self.timer_interest[:] = [] + self.mouse_focus = 0 + # + def minsize(self, m): return unimpl() + def getbounds(self): return unimpl() + def setbounds(self, bounds): unimpl() + def draw(self, args): + # (Could avoid calls to children outside the area) + for child in self.children: + child.draw(args) + # + # Downcalls only made after certain upcalls + # + def mouse_down(self, detail): + if self.mouse_focus: + self.mouse_focus.mouse_down(detail) + p = detail[0] + for child in self.mouse_interest: + if rect.pointinrect(p, child.getbounds()): + self.mouse_focus = child + child.mouse_down(detail) + def mouse_move(self, detail): + if self.mouse_focus: + self.mouse_focus.mouse_move(detail) + def mouse_up(self, detail): + if self.mouse_focus: + self.mouse_focus.mouse_up(detail) + self.mouse_focus = 0 + # + def timer(self): + for child in self.timer_interest: + child.timer() + # + # Upcalls from child to parent + # + def addchild(self, child): + if child in self.children: + raise Error, 'addchild: child already inlist' + self.children.append(child) + def delchild(self, child): + if child not in self.children: + raise Error, 'delchild: child not in list' + remove(child, self.children) + if child in self.mouse_interest: + remove(child, self.mouse_interest) + if child in self.timer_interest: + remove(child, self.timer_interest) + if child = self.mouse_focus: + self.mouse_focus = 0 + # + def need_mouse(self, child): + if child not in self.mouse_interest: + self.mouse_interest.append(child) + self.parent.need_mouse(self) + def no_mouse(self, child): + if child in self.mouse_interest: + remove(child, self.mouse_interest) + if not self.mouse_interest: + self.parent.no_mouse(self) + # + def need_timer(self, child): + if child not in self.timer_interest: + self.timer_interest.append(child) + self.parent.need_timer(self) + def no_timer(self, child): + if child in self.timer_interest: + remove(child, self.timer_interest) + if not self.timer_interest: + self.parent.no_timer(self) + # + # The rest are transparent: + # + def begindrawing(self): + return self.parent.begindrawing() + def beginmeasuring(self): + return self.parent.beginmeasuring() + # + def change(self, area): + self.parent.change(area) + def scroll(self, args): + self.parent.scroll(args) + def settimer(self, itimer): + self.parent.settimer(itimer) |