# 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 (create the parent, # then add the children). # # Also note that the creation methods are not standardized -- # these have extra parameters dependent on the widget type. # For historical reasons, button creation methods are called # define() while split creation methods are called create(). 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 getwindow(self): return unimpl() # Only for very special cases # 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 realize(self): return unimpl() def getminsize(self, m, (width, height)): 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