This document is a single-page version of a a multi-page document, suitable for easy printing.

GenGlyph

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.


GenGlyph: 1 GenGlyph Features

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.


GenGlyph: 2 GenGlyph Basics

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:";
}

GenGlyph: 3 Modifying a GenGlyph

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);
	}
    } 

This document is a single-page version of a a multi-page document, suitable for easy printing.