# Abstract classes for parents and children. # Do not use as base class -- this is for documentation only. # Note that the tree must be built top down. class AbstractParent(): # # Upcalls from child to parent # def addchild(self, child): unimpl() def delchild(self, child): unimpl() # def need_mouse(self, child): unimpl() def no_mouse(self, child): unimpl() # def need_timer(self, child): unimpl() def no_timer(self, child): unimpl() # # XXX need_kbd, no_kbd; focus??? # def begindrawing(self): return unimpl() def beginmeasuring(self): return unimpl() # def change(self, area): unimpl() def scroll(self, (area, (dh, dv))): unimpl() def settimer(self, itimer): unimpl() class AbstractChild(): # # Downcalls from parent to child # def destroy(self): unimpl() # def minsize(self, m): return unimpl() def getbounds(self): return unimpl() def setbounds(self, bounds): unimpl() def draw(self, (d, area)): unimpl() # # Downcalls only made after certain upcalls # def mouse_down(self, detail): unimpl() def mouse_move(self, detail): unimpl() def mouse_up(self, detail): unimpl() # def timer(self): unimpl() # A "Split" is a child that manages one or more children. # (This terminology is due to DEC SRC, except for CSplits.) # A child of a split may be another split, a button, a slider, etc. # Certain upcalls and downcalls can be handled transparently, but # for others (e.g., all geometry related calls) this is not possible. class AbstractSplit() = AbstractChild(), AbstractParent(): pass