The FrameWork module contains classes that together provide a
framework for an interactive Macintosh application. The programmer
builds an application by creating subclasses that override various
methods of the bases classes, thereby implementing the functionality
wanted. Overriding functionality can often be done on various
different levels, i.e. to handle clicks in a single dialog window in a
non-standard way it is not necessary to override the complete event
The FrameWork is still very much work-in-progress, and the
documentation describes only the most important functionality, and not
in the most logical manner at that. Examine the source or the examples
for more details. The following are some comments posted on the
MacPython newsgroup about the strengths and limitations of
The strong point of FrameWork is that it allows you to break
into the control-flow at many different places. W, for
instance, uses a different way to enable/disable menus and that plugs
right in leaving the rest intact. The weak points of
FrameWork are that it has no abstract command interface (but
that shouldn't be difficult), that it's dialog support is minimal and
that it's control/toolbar support is non-existent.
The FrameWork module defines the following functions:
Create a menu item object. The arguments are the menu to create, the
item item title string and optionally the keyboard shortcut
and a callback routine. The callback is called with the arguments
menu-id, item number within menu (1-based), current front window and
the event record.
Instead of a callable object the callback can also be a string. In
this case menu selection causes the lookup of a method in the topmost
window and the application. The method name is the callback string
with 'domenu_' prepended.
Calling the MenuBarfixmenudimstate() method sets the
correct dimming for all menu items based on the current front window.
Return a (left, top, right, bottom)
tuple suitable for creation of a window of given width and height. The
window will be staggered with respect to previous windows, and an
attempt is made to keep the whole window on-screen. However, the window will
however always be the exact size given, so parts may be offscreen.