/* */ /*----------------------------------------------------------------------------*/ /* System Includes */ /*----------------------------------------------------------------------------*/ #include #include #include #define __NOLIBBASE__ #define ALL_REACTION_CLASSES #include #include #include /*----------------------------------------------------------------------------*/ /* Konstanten und Makros */ /*----------------------------------------------------------------------------*/ #define GID_OK 1001 #define GID_CANCEL 1002 /*----------------------------------------------------------------------------*/ /* Type definitions */ /*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/ /* Global variables */ /*----------------------------------------------------------------------------*/ struct ClassLibrary *WindowBase; Class *WindowClass; struct ClassLibrary *LabelBase; Class *LabelClass; struct ClassLibrary *LayoutBase; Class *LayoutClass; struct ClassLibrary *ButtonBase; Class *ButtonClass; struct ClassLibrary *CheckBoxBase; Class *CheckBoxClass; /*----------------------------------------------------------------------------*/ /* OS4 functionality for OS3: open a class library */ /*----------------------------------------------------------------------------*/ #ifndef __amigaos4__ struct ClassLibrary *OpenClass (STRPTR name, ULONG version, Class **cl_ptr) { struct Library *LayoutBase; if (LayoutBase = OpenLibrary (name, version)) { *cl_ptr = LAYOUT_GetClass(); } return ((struct ClassLibrary *)LayoutBase); } /*----------------------------------------------------------------------------*/ /* OS4 functionality for OS3: close a class library */ /*----------------------------------------------------------------------------*/ VOID CloseClass (struct ClassLibrary *cl) { CloseLibrary (&cl->cl_Lib); } #endif /*----------------------------------------------------------------------------*/ /* Open all required class libraries */ /*----------------------------------------------------------------------------*/ BOOL open_libs (void) { WindowBase = OpenClass ("window.class", 0, &WindowClass); LabelBase = OpenClass ("images/label.image", 0, &LabelClass); LayoutBase = OpenClass ("gadgets/layout.gadget", 0, &LayoutClass); ButtonBase = OpenClass ("gadgets/button.gadget", 0, &ButtonClass); CheckBoxBase = OpenClass ("gadgets/checkbox.gadget", 0, &CheckBoxClass); return ( WindowClass && LabelClass && LayoutClass && ButtonClass && CheckBoxClass); } /*----------------------------------------------------------------------------*/ /* Close all opened class libraries */ /*----------------------------------------------------------------------------*/ void close_libs (void) { if (CheckBoxBase) CloseClass (CheckBoxBase); if (ButtonBase) CloseClass (ButtonBase); if (LayoutBase) CloseClass (LayoutBase); if (LabelBase) CloseClass (LabelBase); if (WindowBase) CloseClass (WindowBase); } /*----------------------------------------------------------------------------*/ /* Hauptprogramm */ /*----------------------------------------------------------------------------*/ int main (void) { struct Screen *scr; if (!open_libs()) { Printf ("cannot open required BOOPSI classes\n"); close_libs(); return (20); } if (scr = LockPubScreen (NULL)) { Object *cb1,*cb2,*cb3,*cb4,*cball; Object *winobj = NewObject (WindowClass, NULL, WA_PubScreen,scr, WA_Title,"Model Class Demo", WA_Flags,WFLG_CLOSEGADGET | WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_SIZEBBOTTOM | WFLG_SIZEGADGET | WFLG_ACTIVATE, WA_IDCMP,IDCMP_VANILLAKEY, WINDOW_Position, WPOS_CENTERSCREEN, WINDOW_ParentGroup, NewObject (LayoutClass, NULL, LAYOUT_Orientation, LAYOUT_ORIENT_VERT, LAYOUT_SpaceOuter,TRUE, LAYOUT_AddChild, (cb1 = NewObject (CheckBoxClass, NULL, TAG_END)), CHILD_Label, NewObject (LabelClass, NULL, LABEL_Text, "One", TAG_END), LAYOUT_AddChild, (cb2 = NewObject (CheckBoxClass, NULL, TAG_END)), CHILD_Label, NewObject (LabelClass, NULL, LABEL_Text, "Two", TAG_END), LAYOUT_AddChild, (cb3 = NewObject (CheckBoxClass, NULL, TAG_END)), CHILD_Label, NewObject (LabelClass, NULL, LABEL_Text, "Three", TAG_END), LAYOUT_AddChild, (cb4 = NewObject (CheckBoxClass, NULL, TAG_END)), CHILD_Label, NewObject (LabelClass, NULL, LABEL_Text, "Four", TAG_END), LAYOUT_AddChild, (cball = NewObject (CheckBoxClass, NULL, TAG_END)), CHILD_Label, NewObject (LabelClass, NULL, LABEL_Text, "All/None", TAG_END), LAYOUT_AddChild, NewObject (LayoutClass, NULL, LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ, LAYOUT_EvenSize,TRUE, LAYOUT_FixedVert,FALSE, LAYOUT_AddChild, NewObject (ButtonClass, NULL, GA_Text, "Ok", GA_ID, GID_OK, GA_RelVerify, TRUE, TAG_END), LAYOUT_AddChild, NewObject (ButtonClass, NULL, GA_Text, "Cancel", GA_ID, GID_CANCEL, GA_RelVerify, TRUE, TAG_END), TAG_END), TAG_END), TAG_END); if (winobj) { Object *model = NewObject (NULL, "modelclass", TAG_END); if (model) { DoMethod (model,OM_ADDMEMBER,cb1); DoMethod (model,OM_ADDMEMBER,cb2); DoMethod (model,OM_ADDMEMBER,cb3); DoMethod (model,OM_ADDMEMBER,cb4); SetAttrs (cball,ICA_TARGET,model,TAG_END); } else Printf ("could not create model\n"); if (DoMethod (winobj, WM_OPEN)) { ULONG winsig; ULONG result; BOOL cont = TRUE; GetAttr (WINDOW_SigMask, winobj, &winsig); do { if (Wait (winsig | SIGBREAKF_CTRL_C) & SIGBREAKF_CTRL_C) cont = FALSE; while ((result = DoMethod (winobj, WM_HANDLEINPUT, NULL)) != WMHI_LASTMSG) { switch (result & WMHI_CLASSMASK) { case WMHI_GADGETUP: switch (result & WMHI_GADGETMASK) { case GID_CANCEL: case GID_OK: cont = FALSE; break; } break; case WMHI_VANILLAKEY: if ((result & WMHI_KEYMASK) == 0x1b) cont = FALSE; break; case WMHI_CLOSEWINDOW: cont = FALSE; break; default: break; } } } while (cont); } if (model) { /* modelclass disposes of all its members and LayoutClass does so, too. So we have to remove the members from one of the groups so that they don't get disposed twice. */ DoMethod (model,OM_REMMEMBER,cb1); DoMethod (model,OM_REMMEMBER,cb2); DoMethod (model,OM_REMMEMBER,cb3); DoMethod (model,OM_REMMEMBER,cb4); DisposeObject (model); } DisposeObject (winobj); } UnlockPubScreen (NULL,scr); } close_libs(); return (RETURN_OK); } /*----------------------------------------------------------------------------*/ /* Ende des Quelltextes */ /*----------------------------------------------------------------------------*/