[GUI] Are windows just ordinary widgets?
Glynn Clements
glynn.clements@virgin.net
Thu, 1 May 2003 03:11:28 +0100
Axel Simon wrote:
> IMHO the classes should just reflect the object hierarchy. If we have e.g.
>
> class Button b where...
> class ToggleButton b where...
> instance Button ToggleButton where...
Different toolkits have different hierarchies; e.g.:
Motif:
Core
XmPrimitive
XmLabel
XmPushButton
XmToggleButton
XmArrowButton
Athena:
Core
Simple
Label
Command (push-button)
Repeater
Toggle
Qt:
QWidget
QFrame
QLabel
QButton
QPushButton
QRadioButton
QCheckBox
QToolButton
Neither Motif nor Athena have separate classes for toggle buttons and
radio buttons.
Also, the situation for shell widgets (top-level windows) is a bit
messy for Motif. Motif's shell classes are all subclasses of Xt's
Shell class, which is a subclass of Xt's Composite class (containers).
However, all of Motif's normal (non-shell) containers are subclasses
of XmManager, while the shells aren't.
For Xt (Motif/Athena), the class hierachy doesn't matter much to
applications.
Widgets are mostly accessed through generic Xt functions which operate
upon any type of widget; e.g. setting/getting attribute values is done
with XtSetValues/XtGetValues, which work on any widget (accessing an
attribute which the widget doesn't possess is a run-time error).
Widget classes may provide functions which only operate upon a
specific type of widget (or a subclass), but such functions mostly
exist only for the more complex widget classes (lists, text fields)
which tend not to have subclasses.
The class hierarchy is most relevant when implementing new widget
classes; but that is likely to be well beyond the scope of the CGA.
OTOH, the class hierarchy may be more of an issue for Qt (or MFC, if
that is to be supported), but I'm not sufficiently familiar with Qt to
be able to comment on that.
Anyhow, to get back to the original issue, the key problem isn't the
relative positions of push-buttons etc, but the fact that top-level
windows are effectively subclasses of "widget" on some toolkits but
not on others. If you're assuming that "widget" is the topmost level
of the object hierarchy, this is likely to be a problem.
--
Glynn Clements <glynn.clements@virgin.net>