#define USE_BUILTIN_MATH #define USE_SYSBASE #include #include #include #define INTUI_V36_NAMES_ONLY #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct ClassLibrary *WindowBase; struct ClassLibrary *LayoutBase; struct ClassLibrary *ClickTabBase; #define ID_CLICKTAB 1 struct List listitems; UBYTE *names[] = { "Tab_1", "Tab_2", "Tab_3", "Tab_4", NULL }; BOOL ClickTabNodes(struct List *list, UBYTE **labels) { struct Node *node; WORD i = 0; NewList(list); while (*labels) { if (node = (struct Node *)AllocClickTabNode( TNA_Text, *labels, TNA_Number, i, TNA_Enabled, TRUE, TNA_Spacing, 6, TAG_DONE)) { AddTail(list, node); } labels++; i++; } return(TRUE); } VOID FreeClickTabNodes(struct List *list) { struct Node *node, *nextnode; node = list->lh_Head; while (nextnode = node->ln_Succ) { FreeClickTabNode(node); node = nextnode; } NewList(list); } int main( int argc, char *argv[] ) { struct Window *window; Object *Tab_Object; Object *Win_Object; /* Open the classes - typically not required to be done manually. * SAS/C or DICE AutoInit can do this for you if linked with the * supplied classact.lib */ WindowBase = (struct ClassLibrary *)OpenLibrary("window.class",0L); LayoutBase = (struct ClassLibrary *)OpenLibrary("gadgets/layout.gadget",0L); ClickTabBase = (struct ClassLibrary *)OpenLibrary("gadgets/clicktab.gadget",0L); if(WindowBase && LayoutBase && ClickTabBase) { ClickTabNodes(&listitems, names); /* Create the window object. */ Win_Object = WindowObject, WA_ScreenTitle, "ClassAct Copyright 1995, Phantom Development LLC.", WA_Title, "ClassAct clicktab.gadget Example", WA_SizeGadget, TRUE, WA_Left, 40, WA_Top, 30, WA_DepthGadget, TRUE, WA_DragBar, TRUE, WA_CloseGadget, TRUE, WA_Activate, TRUE, WA_SmartRefresh, TRUE, WINDOW_ParentGroup, VLayoutObject, LAYOUT_SpaceOuter, TRUE, LAYOUT_DeferLayout, TRUE, StartMember, Tab_Object = ClickTabObject, GA_ID, ID_CLICKTAB, CLICKTAB_Labels, &listitems, CLICKTAB_Current, 0L, EndMember, EndMember, EndWindow; /* Object creation sucessful? */ if( Win_Object ) { /* Open the window. */ if( window = (struct Window *) CA_OpenWindow(Win_Object) ) { ULONG wait, signal, result, done = FALSE; WORD Code; /* Obtain the window wait signal mask. */ GetAttr( WINDOW_SigMask, Win_Object, &signal ); /* Input Event Loop */ while( !done ) { wait = Wait(signal|SIGBREAKF_CTRL_C); if (wait & SIGBREAKF_CTRL_C) done = TRUE; else while ((result = CA_HandleInput(Win_Object,&Code)) != WMHI_LASTMSG) { switch (result & WMHI_CLASSMASK) { case WMHI_CLOSEWINDOW: done = TRUE; break; case WMHI_GADGETUP: switch(result & WMHI_GADGETMASK) { case ID_CLICKTAB: break; } break; } } } } /* 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( Win_Object ); } } FreeClickTabNodes(&listitems); /* Close the classes. */ if (ClickTabBase) CloseLibrary( (struct Library *)ClickTabBase ); if (LayoutBase) CloseLibrary( (struct Library *)LayoutBase ); if (WindowBase) CloseLibrary( (struct Library *)WindowBase ); } #ifdef _DCC int wbmain( struct WBStartup *wbs ) { return( main( 0, NULL )); } #endif