(C) 1998 AROS - The Amiga Research OS


NAME

()

SYNOPSIS

FUNCTION

INPUTS
RESULT

EXAMPLE
SEE ALSO

NOTES

BUGS

INTERNALS

HISTORY
struct ButtonData { struct DrawInfo *dri; struct Image *frame;};Object *button_new(Class * cl, Object * obj, struct opSet *msg){ struct ButtonData *data; struct DrawInfo *dri; struct Image *frame; struct TagItem tags[] = { {IA_Width, 0UL}, {IA_Height, 0UL}, {IA_Resolution, 0UL}, {IA_FrameType, FRAME_BUTTON}, {TAG_DONE, 0UL} }; dri = (struct DrawInfo *) GetTagData(GA_DrawInfo, NULL, msg->ops_AttrList); if (!dri) return NULL; tags[0].ti_Data = GetTagData(GA_Width, 0, msg->ops_AttrList); tags[1].ti_Data = GetTagData(GA_Height, 0, msg->ops_AttrList); tags[2].ti_Data = (dri->dri_Resolution.X << 16) + dri->dri_Resolution.Y; frame = (struct Image *) NewObjectA(NULL, FRAMEICLASS, tags); if (!frame) return NULL; tags[0].ti_Tag = GA_Image; tags[0].ti_Data = (IPTR) frame; tags[1].ti_Tag = TAG_MORE; tags[1].ti_Data = (IPTR) msg->ops_AttrList; obj = (Object *) DoSuperMethod(cl, obj, OM_NEW, tags, msg->ops_GInfo); if (!obj) { DisposeObject(frame); return NULL; } data = INST_DATA(cl, obj); data->dri = dri; data->frame = frame; return obj;}IPTR button_set(Class * cl, Object * obj, struct opSet * msg){ IPTR retval = 0UL; struct TagItem *tag, tags[2]; struct RastPort *rport; /* Catch everything, but GA_Disabled. */ tag = FindTagItem(GA_Disabled, msg->ops_AttrList); if (tag) { tags[0].ti_Tag = GA_Disabled; tags[0].ti_Data = tag->ti_Data; tags[1].ti_Tag = TAG_DONE; DoSuperMethod(cl, obj, OM_SET, tags, msg->ops_GInfo); retval = TRUE; } /* Redraw the gadget, if an attribute was changed and if this is the objects' base-class. */ if ((retval) && (((Class *) (*(obj - sizeof(Class *)))) == cl)) { rport = ObtainGIRPort(msg->ops_GInfo); if (rport) { DoMethod(obj, GM_RENDER, msg->ops_GInfo, rport, GREDRAW_UPDATE); ReleaseGIRPort(rport); retval = FALSE; } } return retval;}IPTR button_render(Class * cl, Object * obj, struct gpRender * msg){ IPTR retval = 0UL; UWORD old_gadgetflags; struct IntuiText *old_gadgettext; /* Georg Steger: Hack, because IntuiTexts are not centered by button gadget class */ old_gadgetflags = G(obj)->Flags; old_gadgettext = G(obj)->GadgetText; G(obj)->Flags &= ~GFLG_LABELMASK; G(obj)->Flags |= GFLG_LABELITEXT; G(obj)->GadgetText = 0; retval = DoSuperMethodA(cl, obj, (Msg)msg); G(obj)->GadgetText = old_gadgettext; G(obj)->Flags = old_gadgetflags; renderlabel(GadToolsBase, (struct Gadget *)obj, msg->gpr_RPort, GV_LabelPlace_In); return retval;}AROS_UFH3S(IPTR, dispatch_buttonclass, AROS_UFHA(Class *, cl, A0), AROS_UFHA(Object *, obj, A2), AROS_UFHA(Msg, msg, A1)){ struct ButtonData *data; IPTR retval = 0UL; switch (msg->MethodID) { case OM_NEW: retval = (IPTR) button_new(cl, obj, (struct opSet *) msg); break; case OM_DISPOSE: data = INST_DATA(cl, obj); DisposeObject(data->frame); retval = DoSuperMethodA(cl, obj, msg); break; case OM_SET: retval = button_set(cl, obj, (struct opSet *) msg); break;#define OPG(x) ((struct opGet *)(x)) case OM_GET: data = INST_DATA(cl, obj); switch (OPG(msg)->opg_AttrID) { case GA_Disabled: retval = DoSuperMethodA(cl, obj, msg); break; case GTA_GadgetKind: case GTA_ChildGadgetKind: *(OPG(msg)->opg_Storage) = BUTTON_KIND; retval = 1UL; break; default: *(OPG(msg)->opg_Storage) = 0UL; retval = 0UL; break; } break; case GM_RENDER: retval = button_render(cl, obj, (struct gpRender *) msg); break; default: retval = DoSuperMethodA(cl, obj, msg); break; } return retval;}/*************************** TEXT_KIND and NUMERIC_KIND *****************************/#define TEXTF_CLIPPED (1 << 0)#define TEXTF_BORDER (1 << 1)#define TEXTF_COPYTEXT (1 << 2)struct TextData { STRPTR format; IPTR toprint; UBYTE frontpen; UBYTE backpen; UBYTE justification; UBYTE flags; struct TextFont *font; UWORD maxnumberlength; WORD gadgetkind; LONG (*dispfunc)(struct Gadget *, WORD); };