The GenGlyph object allows you to easily display single lines of text without using a more complex GenText object. A GenGlyph can be thought of as a label in which you can display text but which offers no other functionality.
1 GenGlyph Features
2 GenGlyph Basics
3 Modifying a GenGlyph
Applications often display simple lines of text. Text might request the user to make a selection. Text can alert the user to a certain application condition. The GenGlyph offers a simple, easy to use text display object.
One other generic object, GenText, provides a powerful means to display text with functions such as word-wrapping, font scalability, and an arbitrarily large buffer size. If you do not need such a versatile and powerful text display capability, however, it is wiser and easier to use a GenGlyph. This object only displays text in the default font and style for your application.
The GenGlyph object does not, by itself, offer any instance fields or messages. The functionality of a GenGlyph object is included entirely within the instance fields and messages of its superclass,
GenClass
.
Unlike text within a GenText, the text of a GenGlyph is taken solely from the object's
GI_visMoniker
. Therefore, the primary use of a GenGlyph lies in its visual moniker. Any
GenClass
messages dealing with an object's visual moniker will modify the appearance of a GenGlyph.
A GenGlyph does not allow word-wrapping; if your text may be longer than the object's horizontal constraints, either break up the lines of text into smaller, single-line GenGlyphs or use a GenText object.
Code Display 6-1 Using Hints to Manage GenGlyphs
/* This code will duplicate the display shown above */
@object GenInteractionClass DiskCopyBox = {
GI_comp = @DiskCopyHeader, @SourceSelection, @DestinationSelection;
GII_visibility = GIV_DIALOG;
HINT_ORIENT_CHILDREN_VERTICALLY;
}
/* The DiskCopyHeader will be the line of instructional text. */
@object GenGlyphClass DiskCopyHeader = {
GI_visMoniker = "Select source and destination for disk copy:";
HINT_CENTER_MONIKER; /* Centers the moniker horizontally. */
}
/* These objects will form the "Source" line. */
@object GenInteractionClass SourceSelection = {
GI_comp = @SourceText, @SourceList;
HINT_ORIENT_CHILDREN_HORIZONTALLY;
HINT_CENTER_MONIKER;
}
/* This group of objects will form the "Destination" line. */
@object GenInteractionClass DestinationSelection = {
GI_comp = @DestinationText, @DestinationList;
HINT_ORIENT_CHILDREN_HORIZONTALLY;
HINT_CENTER_MONIKER;
}
/* For simplicity, the List objects are not shown. */
@object GenGlyphClass SourceText = {
GI_visMoniker = "Source:";
}
@object GenGlyphClass DestinationText = {
GI_visMoniker = "Destination:";
}
You may wish at some point to change the text in a GenGlyph. Because a GenGlyph's text is entirely within its visual moniker, it is a simple matter to use
GenClass
messages to change the moniker dynamically. Use
MSG_GEN_GET_VIS_MONIKER
to return a GenGlyph's current moniker; use
MSG_GEN_USE_VIS_MONIKER
(or
MSG_GEN_REPLACE_VIS_MONIKER
) to set a new moniker for a GenGlyph. Doing so will ensure that the object is visually rebuilt with the new moniker.
Code Display 6-2 A Toggle On/Off Switch Dialog Box
@object GenInteractionClass MyDialogBox = {
GI_comp = @DialogText, @DialogButton;
GII_visibility = GIV_DIALOG;
}
/* Monikers for the Instructions (the GenGlyphs). */
@visMoniker OnTextMoniker = "Click the `ON' button"; @visMoniker OffTextMoniker = "Click the `OFF' button";
/* Monikers for the triggers. */
@visMoniker OnButtonMoniker = "ON"; @visMoniker OffButtonMoniker = "OFF";
/* The object begins in the "On" state. */
@object GenGlyphClass DialogText = {
GI_vismoniker = @OnTextMoniker;
}
/* Whenever the button is pressed, MSG_FLIP_THE_SWITCH will change both the glyph * and the trigger monikers. */
@object GenTriggerClass DialogButton = {
GI_visMoniker = @OnButtonMoniker;
GTI_actionMsg = MSG_FLIP_THE_SWITCH;
GTI_destination = process;
}
@method MyProcessClass, MSG_FLIP_THE_SWITCH {
ChunkHandle testMoniker; /* Stores the temporary moniker. */
testMoniker = @call DialogButton::MSG_GEN_GET_VIS_MONIKER;
/* If the moniker is "ON", turn both it and the glyph to the Off monikers. * Otherwise (the moniker is "OFF"), turn both it and the glyph to the On * monikers. Both visual updates are delayed via the UI queue (and will therefore * be updated at the same time rather than separately) to avoid flashing. */
if (testMoniker == "ON") {
@call DialogButton::MSG_GEN_USE_VIS_MONIKER(OptrToChunk(@OffButtonMoniker),
VUM_DELAYED_VIA_UI_QUEUE);
@call DialogText::MSG_GEN_USE_VIS_MONIKER(OptrToChunk(@OffTextMoniker),
VUM_DELAYED_VIA_UI_QUEUE);
}
else {
@call DialogButton::MSG_GEN_USE_VIS_MONIKER(OptrToChunk(@OnButtonMoniker),
VUM_DELAYED_VIA_UI_QUEUE);
@call DialogText::MSG_GEN_USE_VIS_MONIKER(OptrToChunk(@OnTextMoniker),
VUM_DELAYED_VIA_UI_QUEUE);
}
}