English Amiga Board

English Amiga Board (http://eab.abime.net/index.php)
-   Coders. C/C++ (http://eab.abime.net/forumdisplay.php?f=118)
-   -   gadtools (http://eab.abime.net/showthread.php?t=70107)

zharn 20 July 2013 07:30

gadtools
 
Hi,

Im playing around with gadtools.h, my array of gadgets is displaying correctly.

i having trouble getting GA_Disabled/GT_Disabled to work for an INTERGER_KIND, yet i can read and write to the gadget fine.

example is

GT_SetGadgetAttrs(myGadgets[1], myWindow, NULL,
GA_Disabled, TRUE);

i get unidentified identifier "GA_Disabled"

RKM says...
INTEGER_KIND:

GA_Disabled (BOOL) - Set to TRUE to disable gadget, FALSE otherwise (V36) GTIN_Number (ULONG) - New value of the integer gadget (V36)



any clues please..

thomas 20 July 2013 09:44

GT_Disabled is defined in intuition/gadgetclass.h. However, you shouldn't need to include it explicitely because it is automatically included if you include proto/gadtools.h which you need to use GadTools.

Furthermore you have to finish each call to GT_SetGadgetAttrs with TAG_DONE or TAG_END, otherwise you will crash.

zharn 21 July 2013 00:27

Thanks Thomas i just found your gadtools.c, cant read the comments but it helped with how to process returned strings properly.. I was almost there, just missed a &.

thomas 21 July 2013 00:29

Here is an example for GA_Disabled:

Code:


#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/intuition.h>
#include <proto/gadtools.h>

#define GID_ACTIVE      1001
#define GID_NUMBER      1002

int main (void)

{
struct Screen *scr;

if (scr = LockPubScreen (NULL))
        {
        long x,y,w,h;
        struct NewGadget ng = {0};
        struct Gadget *glist = NULL;
        struct Gadget *gad = CreateContext (&glist);
        struct Window *win;
        struct Gadget *numgad;

        ng.ng_VisualInfo = GetVisualInfo (scr,TAG_END);
        ng.ng_TextAttr  = scr->Font;
        ng.ng_Flags      = 0;

        w = scr->RastPort.TxWidth;;
        h = scr->RastPort.TxHeight;

        x = scr->WBorLeft + 8 + 8 * w;
        y = scr->WBorTop + h + 9;

        ng.ng_LeftEdge  = x;
        ng.ng_TopEdge    = y;
        ng.ng_Height    = h + 6;
        ng.ng_Width      = ng.ng_Height;
        ng.ng_GadgetText = "Active";
        ng.ng_GadgetID  = GID_ACTIVE;
        gad = CreateGadget (CHECKBOX_KIND,gad,&ng,GTCB_Scaled,TRUE,GTCB_Checked,TRUE,TAG_END);

        ng.ng_TopEdge  += ng.ng_Height + 4;
        ng.ng_Width      = 10 * w + 20;
        ng.ng_GadgetText = "Number";
        ng.ng_GadgetID  = GID_NUMBER;
        gad = CreateGadget (INTEGER_KIND,gad,&ng,GTIN_Number,123,TAG_END);
        numgad = gad;

        w = ng.ng_LeftEdge + ng.ng_Width + 8 + scr->WBorRight;
        h = ng.ng_TopEdge + ng.ng_Height + 8 + scr->WBorBottom;

        if (gad)
        if (win = OpenWindowTags (NULL,
                        WA_Width,w,
                        WA_Height,h,
                        WA_Left,(scr->Width - w) / 2,
                        WA_Top,(scr->Height - h) / 2,
                        WA_PubScreen,scr,
                        WA_Title,"Demo",
                        WA_Flags,WFLG_CLOSEGADGET | WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_ACTIVATE,
                        WA_IDCMP,IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW | IDCMP_VANILLAKEY | CHECKBOXIDCMP | INTEGERIDCMP,
                        WA_Gadgets,glist,
                        TAG_END))
                {
                BOOL cont = TRUE;

                GT_RefreshWindow (win,NULL);

                do        {
                        struct IntuiMessage *imsg;

                        if (Wait ((1L << win->UserPort->mp_SigBit) | SIGBREAKF_CTRL_C) & SIGBREAKF_CTRL_C)
                                cont = FALSE;

                        while (imsg = GT_GetIMsg (win->UserPort))
                                {
                                switch (imsg->Class)
                                        {
                                case IDCMP_REFRESHWINDOW:
                                        GT_BeginRefresh (win);
                                        GT_EndRefresh (win,TRUE);
                                        break;
                                case IDCMP_GADGETUP:
                                        {
                                        struct Gadget *gad = (struct Gadget *) imsg->IAddress;
                                        ULONG sel;
                                        switch (gad->GadgetID)
                                                {
                                        case GID_ACTIVE:
                                                GT_GetGadgetAttrs (gad,win,NULL,GTCB_Checked,&sel,TAG_END);
                                                GT_SetGadgetAttrs (numgad,win,NULL,GA_Disabled,(sel == 0),TAG_END);
                                                break;
                                        case GID_NUMBER:
                                                GT_GetGadgetAttrs (gad,win,NULL,GTIN_Number,&sel,TAG_END);
                                                Printf ("number = %ld\n",sel);
                                                break;
                                                }
                                        break;
                                        }
                                case IDCMP_VANILLAKEY:
                                        if (imsg->Code == 0x1b)
                                                cont = FALSE;
                                        break;
                                case IDCMP_CLOSEWINDOW:
                                        cont = FALSE;
                                        break;
                                        }

                                GT_ReplyIMsg (imsg);
                                }
                        }
                while (cont);

                CloseWindow (win);
                }

        FreeGadgets (glist);
        FreeVisualInfo (ng.ng_VisualInfo);

        UnlockPubScreen (NULL,scr);
        }

return (RETURN_OK);
}


bubbob42 21 July 2013 09:38

Nice example, especially the calculations for font-sensitivity. Thanks!

thomas 21 July 2013 11:48

Quote:

Originally Posted by bubbob42 (Post 901028)
Nice example, especially the calculations for font-sensitivity. Thanks!

Well, text width is approximated by average character width times number of characters. If a string contains many wide characters, this might fail. But it's easier than to get TextLength from every string and search the maximum.

bubbob42 21 February 2014 20:26

I'm reviving this, because I just starting with GadTools again - after a very long time.

However, to compile the above example, one has to explicitly include intuition/gadgetclass.h, when using original 3.1 or SAS/C includes.

If you're using the includes from the NDK 3.5, you'll be fine without any changes.


All times are GMT +2. The time now is 21:39.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2020, vBulletin Solutions Inc.

Page generated in 0.04720 seconds with 11 queries