| # 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 |