229 lines
4.6 KiB
C
229 lines
4.6 KiB
C
;/* Chooser Example
|
|
sc link chooserexample.c lib lib:classact.lib
|
|
quit
|
|
*/
|
|
|
|
/**
|
|
** ChoosserExample.c -- chooser class example.
|
|
**
|
|
** This is a simple example testing some of the capabilities of the
|
|
** chooser gadget class.
|
|
**
|
|
** This opens a window with chooser gadget. We will usse ClassAct.lib's
|
|
** ChooserLables() and FreeChooserLabels() utility functions to create the
|
|
** item labels.
|
|
**
|
|
**/
|
|
|
|
/* system includes
|
|
*/
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include <exec/types.h>
|
|
#include <exec/memory.h>
|
|
#include <intuition/intuition.h>
|
|
#include <intuition/gadgetclass.h>
|
|
#include <graphics/gfxbase.h>
|
|
#include <graphics/text.h>
|
|
#include <graphics/gfxmacros.h>
|
|
#include <utility/tagitem.h>
|
|
#include <workbench/startup.h>
|
|
#include <workbench/workbench.h>
|
|
|
|
#include <proto/intuition.h>
|
|
#include <proto/graphics.h>
|
|
#include <proto/exec.h>
|
|
#include <proto/dos.h>
|
|
#include <proto/utility.h>
|
|
#include <proto/wb.h>
|
|
#include <proto/icon.h>
|
|
|
|
/* ClassAct includes
|
|
*/
|
|
#include <classact.h>
|
|
|
|
/* button option texts
|
|
*/
|
|
UBYTE *chooser[] =
|
|
{
|
|
"1200",
|
|
"2400",
|
|
"4800",
|
|
"9600",
|
|
"19200",
|
|
"38400",
|
|
"57600",
|
|
"115200",
|
|
"230400",
|
|
NULL
|
|
};
|
|
|
|
enum
|
|
{
|
|
GID_MAIN=0,
|
|
GID_CHOOSER1,
|
|
GID_QUIT,
|
|
GID_LAST
|
|
};
|
|
|
|
enum
|
|
{
|
|
WID_MAIN=0,
|
|
WID_LAST
|
|
};
|
|
|
|
enum
|
|
{
|
|
OID_MAIN=0,
|
|
OID_LAST
|
|
};
|
|
|
|
int main(void)
|
|
{
|
|
struct MsgPort *AppPort;
|
|
|
|
struct Window *windows[WID_LAST];
|
|
|
|
struct Gadget *gadgets[GID_LAST];
|
|
|
|
Object *objects[OID_LAST];
|
|
|
|
struct List *chooserlist1;
|
|
|
|
/* make sure our classes opened... */
|
|
if (!ButtonBase || !ChooserBase || !WindowBase || !LayoutBase)
|
|
return(30);
|
|
else if ( AppPort = CreateMsgPort() )
|
|
{
|
|
/* Create chooser label list.
|
|
*/
|
|
chooserlist1 = ChooserLabels( "1200","2400","4800","9600","19200","38400","57600", NULL );
|
|
|
|
if (chooserlist1)
|
|
{
|
|
/* Create the window object.
|
|
*/
|
|
objects[OID_MAIN] = WindowObject,
|
|
WA_ScreenTitle, "ClassAct Release 2.0",
|
|
WA_Title, "ClassAct Chooser Example",
|
|
WA_Activate, TRUE,
|
|
WA_DepthGadget, TRUE,
|
|
WA_DragBar, TRUE,
|
|
WA_CloseGadget, TRUE,
|
|
WA_SizeGadget, TRUE,
|
|
WINDOW_IconifyGadget, TRUE,
|
|
WINDOW_IconTitle, "Chooser",
|
|
WINDOW_AppPort, AppPort,
|
|
WINDOW_Position, WPOS_CENTERMOUSE,
|
|
WINDOW_ParentGroup, gadgets[GID_MAIN] = VGroupObject,
|
|
LAYOUT_SpaceOuter, TRUE,
|
|
LAYOUT_DeferLayout, TRUE,
|
|
|
|
LAYOUT_AddChild, gadgets[GID_CHOOSER1] = ChooserObject,
|
|
GA_ID, GID_CHOOSER1,
|
|
GA_RelVerify, TRUE,
|
|
CHOOSER_Labels, chooserlist1,
|
|
CHOOSER_Selected, 0,
|
|
ChooserEnd,
|
|
CHILD_NominalSize, TRUE,
|
|
CHILD_Label, LabelObject, LABEL_Text, "_Baud Rate", LabelEnd,
|
|
|
|
LAYOUT_AddChild, ButtonObject,
|
|
GA_ID, GID_QUIT,
|
|
GA_RelVerify, TRUE,
|
|
GA_Text,"_Quit",
|
|
ButtonEnd,
|
|
CHILD_WeightedHeight, 0,
|
|
|
|
EndGroup,
|
|
EndWindow;
|
|
|
|
/* Object creation sucessful?
|
|
*/
|
|
if (objects[OID_MAIN])
|
|
{
|
|
/* Open the window.
|
|
*/
|
|
if (windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN]))
|
|
{
|
|
ULONG wait, signal, app = (1L << AppPort->mp_SigBit);
|
|
ULONG done = FALSE;
|
|
ULONG result;
|
|
UWORD code;
|
|
|
|
/* Obtain the window wait signal mask.
|
|
*/
|
|
GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal);
|
|
|
|
/* Input Event Loop
|
|
*/
|
|
while (!done)
|
|
{
|
|
wait = Wait( signal | SIGBREAKF_CTRL_C | app );
|
|
|
|
if ( wait & SIGBREAKF_CTRL_C )
|
|
{
|
|
done = TRUE;
|
|
}
|
|
else
|
|
{
|
|
while ( (result = CA_HandleInput(objects[OID_MAIN], &code) ) != WMHI_LASTMSG )
|
|
{
|
|
switch (result & WMHI_CLASSMASK)
|
|
{
|
|
case WMHI_CLOSEWINDOW:
|
|
windows[WID_MAIN] = NULL;
|
|
done = TRUE;
|
|
break;
|
|
|
|
case WMHI_GADGETUP:
|
|
switch (result & WMHI_GADGETMASK)
|
|
{
|
|
case GID_QUIT:
|
|
done = TRUE;
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WMHI_ICONIFY:
|
|
CA_Iconify(objects[OID_MAIN]);
|
|
windows[WID_MAIN] = NULL;
|
|
break;
|
|
|
|
case WMHI_UNICONIFY:
|
|
windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN]);
|
|
|
|
if (windows[WID_MAIN])
|
|
{
|
|
GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal);
|
|
}
|
|
else
|
|
{
|
|
done = TRUE; // error re-opening window!
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Disposing of the window object will also close the window if it is
|
|
* already opened, and it will dispose of the layout object attached to it.
|
|
*/
|
|
DisposeObject(objects[OID_MAIN]);
|
|
}
|
|
|
|
/* free the chooser list
|
|
*/
|
|
FreeChooserLabels(chooserlist1);
|
|
}
|
|
|
|
DeleteMsgPort(AppPort);
|
|
}
|
|
|
|
return(0);
|
|
}
|