/** ** PaletteExample.c -- Palette class example. ** ** This is a simple example testing some of the capabilities of the ** Palette gadget class. ** ** This code opens a simple window and then creates a Palette gadget. ** ** Note that we are not using window or layout class here, we are ** using the gadget in a fairly direct form, but that's perfectly legal. ** **/ #include #include #include #include #include #include #include #include #include #include #include #include #include /* Function prototypes. */ struct ClassLibrary * OpenClass(STRPTR, ULONG); /* Global variables. */ struct ClassLibrary *PaletteBase; struct Gadget *palette_gad; /* This is the start of our programme. */ main() { struct Screen *screen = NULL; /* We'll just open up on the Workbench screen, and use its screen font. */ if (screen = LockPubScreen("Workbench")) { struct Window *win = NULL; /* Open the window, note how we size the window to perfectly fit * all the gadgets. */ if (win = OpenWindowTags(NULL, WA_Left, 0, WA_Top, screen->Font->ta_YSize + 3, WA_Width, 200, WA_Height, (screen->WBorTop) + 5 + screen->Font->ta_YSize + 100, WA_IDCMP, IDCMP_GADGETUP | IDCMP_REFRESHWINDOW | IDCMP_CLOSEWINDOW | IDCMP_GADGETDOWN, WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | WFLG_SIZEGADGET | WFLG_ACTIVATE | WFLG_SMART_REFRESH, WA_Title, "Palette Demo", WA_MinWidth, 60, WA_MinHeight, (screen->WBorTop) + 5 + screen->Font->ta_YSize + 60, WA_MaxWidth, -1, WA_MaxHeight, -1, TAG_DONE)) { PutStr("Creating Palette class\n"); if (PaletteBase = OpenClass("gadgets/palette.gadget", 0)) { PutStr("Creating Palette gadget 1\n"); if (palette_gad = (struct Gadget *)NewObject(PALETTE_GetClass(), NULL, GA_ID, 2, GA_Top, (win->BorderTop) + 5, GA_Left, 10, GA_RelWidth, -36, GA_RelHeight, -(win->BorderTop + win->BorderBottom + 10), GA_RelVerify, TRUE, PALETTE_NumColours, 1 << screen->RastPort.BitMap->Depth, TAG_END)) { struct IntuiMessage *imsg; BOOL ok = TRUE; AddGList(win, palette_gad, -1, -1, NULL); RefreshGList(palette_gad, win, NULL, -1); /* Just wait around until the close gadget is pressed. */ while (ok) { struct Gadget *gadget; WaitPort(win->UserPort); while (imsg = (struct IntuiMessage *)GetMsg(win->UserPort)) { switch(imsg->Class) { case IDCMP_CLOSEWINDOW: ok = FALSE; break; case IDCMP_GADGETUP: gadget = (struct Gadget *)imsg->IAddress; Printf("Gadget: %ld Code: %ld\n", (LONG)gadget->GadgetID, (LONG)imsg->Code ); break; default: break; } ReplyMsg((struct Message *)imsg); } } RemoveGList(win, palette_gad, -1); DisposeObject(palette_gad); } else PutStr("ERROR: Couldn't create Palette gadget\n"); /* Free the class. */ PutStr("Freeing Palette class\n"); CloseLibrary((struct Library *)PaletteBase); } else PutStr("ERROR: Couldn't create Palette class\n"); CloseWindow(win); } else PutStr("ERROR: Couldn't open window\n"); UnlockPubScreen(0, screen); } else PutStr("ERROR: Couldn't lock public screen\n"); } /* Open a class library. */ struct ClassLibrary * OpenClass(STRPTR name, ULONG version) { struct Library *retval; UBYTE buffer[256]; if ((retval = OpenLibrary(name, version)) == NULL) { sprintf (buffer, ":classes/%s", name); if ((retval = OpenLibrary(buffer, version)) == NULL) { sprintf(buffer, "classes/%s", name); retval = OpenLibrary(buffer, version); } } return((struct ClassLibrary *)retval); }