320 lines
8.3 KiB
C
320 lines
8.3 KiB
C
#include <exec/types.h>
|
|
#include <exec/memory.h>
|
|
#include <dos/dos.h>
|
|
#include <intuition/intuition.h>
|
|
#include <intuition/gadgetclass.h>
|
|
#include <intuition/imageclass.h>
|
|
#include <intuition/icclass.h>
|
|
#include <gadgets/listbrowser.h>
|
|
#include <images/label.h>
|
|
#include <libraries/asl.h>
|
|
#include <libraries/gadtools.h>
|
|
#include <utility/tagitem.h>
|
|
#include <proto/asl.h>
|
|
#include <proto/dos.h>
|
|
#include <proto/diskfont.h>
|
|
#include <proto/exec.h>
|
|
#include <proto/gadtools.h>
|
|
#include <proto/graphics.h>
|
|
#include <proto/icon.h>
|
|
#include <proto/intuition.h>
|
|
#include <proto/utility.h>
|
|
#include <proto/wb.h>
|
|
#include <classact.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
|
|
/* Here's where it all starts.
|
|
*/
|
|
main()
|
|
{
|
|
struct Screen *screen = NULL;
|
|
|
|
if (!ButtonBase) return(20);
|
|
|
|
/* We'll just open up on the default public screen, and use its screen font.
|
|
*/
|
|
if (screen = LockPubScreen(NULL))
|
|
{
|
|
struct DrawInfo *drinfo = GetScreenDrawInfo(screen);
|
|
Object *layout;
|
|
|
|
if (layout = LayoutObject,
|
|
GA_DrawInfo, drinfo,
|
|
LAYOUT_DeferLayout, TRUE, /* Layout refreshes done on
|
|
* task's context (by the
|
|
* window class) */
|
|
LAYOUT_SpaceOuter, TRUE,
|
|
LAYOUT_AddChild, LayoutObject,
|
|
LAYOUT_VertAlignment, LAYOUT_ALIGN_TOP,
|
|
LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ,
|
|
LAYOUT_BevelStyle, BVS_GROUP,
|
|
LAYOUT_Label, "Available Glyphs",
|
|
|
|
LAYOUT_AddChild, LayoutObject,
|
|
LAYOUT_Orientation, LAYOUT_ORIENT_VERT,
|
|
LAYOUT_HorizAlignment, LAYOUT_ALIGN_RIGHT,
|
|
LAYOUT_SpaceOuter, TRUE,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_DOWNARROW,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Down Arrow:",
|
|
LabelEnd,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_UPARROW,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Up Arrow:",
|
|
LabelEnd,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_LEFTARROW,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Left Arrow:",
|
|
LabelEnd,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_RIGHTARROW,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Right Arrow:",
|
|
LabelEnd,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_DROPDOWN,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Drop Down:",
|
|
LabelEnd,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_CHECKMARK,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Check Mark:",
|
|
LabelEnd,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_RADIOBUTTON,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Radio Button:",
|
|
LabelEnd,
|
|
LayoutEnd,
|
|
|
|
LAYOUT_AddChild, LayoutObject,
|
|
LAYOUT_SpaceOuter, TRUE,
|
|
LAYOUT_AddImage, BevelObject,
|
|
GA_DrawInfo, drinfo,
|
|
BEVEL_Style, BVS_SBAR_HORIZ,
|
|
BevelEnd,
|
|
LayoutEnd,
|
|
CHILD_MinWidth, 4,
|
|
CHILD_WeightedWidth, 0,
|
|
|
|
LAYOUT_AddChild, LayoutObject,
|
|
LAYOUT_Orientation, LAYOUT_ORIENT_VERT,
|
|
LAYOUT_VertAlignment, LAYOUT_ALIGN_CENTER,
|
|
LAYOUT_SpaceOuter, TRUE,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_POPUP,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Pop Up:",
|
|
LabelEnd,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_POPFONT,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Pop Font:",
|
|
LabelEnd,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_POPFILE,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Pop File:",
|
|
LabelEnd,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_POPDRAWER,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Pop Drawer:",
|
|
LabelEnd,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_POPSCREENMODE,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Pop Screen Mode:",
|
|
LabelEnd,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_POPTIME,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Pop Time:",
|
|
LabelEnd,
|
|
|
|
LAYOUT_AddImage, GlyphObject,
|
|
GLYPH_Glyph, GLYPH_RETURNARROW,
|
|
GlyphEnd,
|
|
CHILD_MinWidth, 12,
|
|
CHILD_MinHeight, 12,
|
|
CHILD_Label, LabelObject,
|
|
LABEL_Text, "Return Arrow:",
|
|
LabelEnd,
|
|
LayoutEnd,
|
|
LayoutEnd,
|
|
LayoutEnd)
|
|
{
|
|
struct MsgPort *app_port;
|
|
Object *window_obj;
|
|
|
|
/* Create a message port for App* messages. This is needed for
|
|
* iconification. We're being a touch naughty by not checking
|
|
* the return code, but that just means that iconification won't
|
|
* work, nothing really bad will happen.
|
|
*/
|
|
app_port = CreateMsgPort();
|
|
|
|
/* Create the window object.
|
|
*/
|
|
if (window_obj = WindowObject,
|
|
WA_Left, 0,
|
|
WA_Top, screen->Font->ta_YSize + 3,
|
|
WA_CustomScreen, screen,
|
|
WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW,
|
|
WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET |
|
|
WFLG_SIZEGADGET | WFLG_ACTIVATE | WFLG_SMART_REFRESH,
|
|
WA_Title, "Glyph class example",
|
|
WA_NewLookMenus, TRUE,
|
|
WINDOW_ParentGroup, layout,
|
|
WINDOW_IconifyGadget, TRUE,
|
|
WINDOW_Icon, GetDiskObject("PROGDIR:GlyphExample"),
|
|
WINDOW_IconTitle, "GlyphExample",
|
|
WINDOW_AppPort, app_port,
|
|
TAG_DONE))
|
|
{
|
|
struct Window *win;
|
|
|
|
/* Open the window.
|
|
*/
|
|
if (win = (struct Window *)CA_OpenWindow(window_obj))
|
|
{
|
|
ULONG signal;
|
|
BOOL ok = TRUE;
|
|
|
|
/* Obtain the window wait signal mask.
|
|
*/
|
|
GetAttr(WINDOW_SigMask, window_obj, &signal);
|
|
|
|
/* Input Event Loop
|
|
*/
|
|
while (ok)
|
|
{
|
|
ULONG result;
|
|
|
|
Wait(signal | (1L << app_port->mp_SigBit));
|
|
|
|
/* CA_HandleInput() returns the gadget ID of a clicked
|
|
* gadget, or one of several pre-defined values. For
|
|
* this demo, we're only actually interested in a
|
|
* close window and a couple of gadget clicks.
|
|
*/
|
|
while ((result = CA_HandleInput(window_obj, NULL)) != WMHI_LASTMSG)
|
|
{
|
|
switch(result & WMHI_CLASSMASK)
|
|
{
|
|
case WMHI_CLOSEWINDOW:
|
|
ok = FALSE;
|
|
break;
|
|
|
|
case WMHI_GADGETUP:
|
|
switch (result & WMHI_GADGETMASK)
|
|
{
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WMHI_ICONIFY:
|
|
if (CA_Iconify(window_obj))
|
|
win = NULL;
|
|
break;
|
|
|
|
case WMHI_UNICONIFY:
|
|
win = CA_OpenWindow(window_obj);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
PutStr("ERROR: failed to start. Couldn't open window\n");
|
|
|
|
/* Disposing of the window object will also close the
|
|
* window if it is already opened and it will dispose of
|
|
* all objects attached to it.
|
|
*/
|
|
DisposeObject(window_obj);
|
|
}
|
|
else
|
|
PutStr("ERROR: failed to start. Couldn't create window\n");
|
|
|
|
/* Lose the App* message port.
|
|
*/
|
|
if (app_port)
|
|
DeleteMsgPort(app_port);
|
|
}
|
|
else
|
|
PutStr("ERROR: failed to start. Couldn't create layout\n");
|
|
|
|
if (drinfo)
|
|
FreeScreenDrawInfo(screen, drinfo);
|
|
|
|
UnlockPubScreen(0, screen);
|
|
}
|
|
else
|
|
PutStr("ERROR: failed to start. Couldn't lock destination screen\n");
|
|
|
|
exit(0);
|
|
}
|