IPTR GTSlider__OM_NEW(Class * cl, Object * o, struct opSet *msg) { struct DrawInfo *dri; struct TagItem fitags[] = { {IA_Width , 0UL }, {IA_Height , 0UL }, {IA_Resolution , 0UL }, {IA_FrameType , FRAME_BUTTON }, {IA_EdgesOnly , TRUE }, {TAG_DONE } }; EnterFunc(bug("Slider::New()\n")); o = (Object *)DoSuperMethodA(cl, o, (Msg)msg); if (o) { struct SliderData *data = INST_DATA(cl, o); dri = (struct DrawInfo *)GetTagData(GA_DrawInfo, (IPTR) NULL, msg->ops_AttrList); fitags[0].ti_Data = GetTagData(GA_Width, 0, msg->ops_AttrList) + BORDERPROPSPACINGX * 2; fitags[1].ti_Data = GetTagData(GA_Height, 0, msg->ops_AttrList) + BORDERPROPSPACINGY * 2; fitags[2].ti_Data = (dri->dri_Resolution.X << 16) + dri->dri_Resolution.Y; data->frame = NewObjectA(NULL, FRAMEICLASS, fitags); if (data->frame) { data->freedom=GetTagData(PGA_Freedom,FREEHORIZ,msg->ops_AttrList); data->min = 0; data->max = 15; data->level = data->freedom==FREEHORIZ?data->min:data->max; GTSlider__OM_SET(cl, o, msg); data->labelplace = GetTagData(GA_LabelPlace, GV_LabelPlace_Left, msg->ops_AttrList); } else { CoerceMethod(cl, o, OM_DISPOSE); o = NULL; } } ReturnPtr("Slider::New", IPTR, (IPTR)o); }
STATIC IPTR _OM_SET(Class *cl, Object *o,struct opSet *msg) { IPTR retval = (IPTR)0; const struct TagItem *tag, *tstate; struct LVData *data; EnterFunc(bug("ListView::OM_SET\n")); data = INST_DATA(cl, o); tstate = msg->ops_AttrList; /* Set to 1 to signal visual changes */ while ((tag = NextTagItem(&tstate)) != NULL) { switch (tag->ti_Tag) { case AROSA_Listview_DisplayHook: data->lvd_DisplayHook = (struct Hook *)tag->ti_Data; retval = 1UL; break; case AROSA_Listview_FrontPen: data->lvd_FrontPen = (UBYTE)tag->ti_Data; retval = 1UL; break; case AROSA_Listview_BackPen: data->lvd_BackPen = (UBYTE)tag->ti_Data; retval = 1UL; break; case AROSA_Listview_Visible: case AROSA_Listview_Total: { struct TagItem tags[] = { {tag->ti_Tag, tag->ti_Data}, {TAG_END} }; NotifyAttrs(cl, o, msg, tags); } break; case AROSA_Listview_List: { ULONG numentries; struct TagItem tags[] = { {AROSA_Listview_First, 0}, {AROSA_Listview_Total, 0}, {TAG_END} }; data->lvd_List = (Object *)tag->ti_Data; GetAttr(AROSA_List_Entries, data->lvd_List, (IPTR *)&numentries); SetAttrs(data->lvd_List, AROSA_List_Active, AROSV_List_Active_None, TAG_END); tags[1].ti_Data = numentries; DoMethod(o, OM_SET, (IPTR) tags, (IPTR) msg->ops_GInfo); retval = 1UL; } break; case AROSA_Listview_HorSpacing: data->lvd_HorSpacing = (UBYTE)tag->ti_Data; retval = 1UL; break; case AROSA_Listview_VertSpacing: data->lvd_VertSpacing = (UBYTE)tag->ti_Data; ReCalcEntryHeight(data); retval = 1UL; break; case AROSA_Listview_Format: { struct ColumnAttrs *colattrs = data->lvd_ColAttrs; ULONG colattrsz = UB(&colattrs[data->lvd_MaxColumns]) - UB(&colattrs[0]); memset(colattrs, 0, colattrsz); ParseFormatString((STRPTR)tag->ti_Data, data); retval = 1UL; } break; case AROSA_Listview_First: { struct TagItem tags[] = { {AROSA_Listview_First, tag->ti_Data}, {TAG_END} }; LONG old = data->lvd_First; #if DEBUG if (msg->MethodID == OM_SET) { D(bug("_First OM_SET\n")); } else { D(bug("_First OM_UPDATEd, lvd_NC=%d\n", data->lvd_NotifyCount)); } #endif retval = 1UL; data->lvd_First = (LONG)tag->ti_Data; if ( ( msg->MethodID == OM_UPDATE ) && ( old != data->lvd_First )) { struct RastPort *rp; WORD steps; UWORD visible, abs_steps; struct IBox box; steps = tag->ti_Data - old; abs_steps = steps < 0 ? -steps : steps; GetGadgetIBox(o, msg->ops_GInfo, &box); visible = NumVisible(&box, data->lvd_EntryHeight); if (abs_steps < visible >> 1) { if ((rp = ObtainGIRPort(msg->ops_GInfo)) != NULL) { LONG dy; /* We make the assumption that the listview ** is alvays 'full'. If it isn't, the ** Scroll gadget won't be scrollable, and ** we won't receive any OM_UPDATEs. */ dy = steps * data->lvd_EntryHeight; ScrollRaster(rp, 0, dy, box.Left + LV_BORDERWIDTH_X, box.Top + LV_BORDERWIDTH_Y, box.Left + box.Width - 1 - LV_BORDERWIDTH_X, box.Top + LV_BORDERWIDTH_Y + visible * data->lvd_EntryHeight); data->lvd_DamageOffset = ((steps > 0) ? visible - abs_steps : 0); data->lvd_NumDamaged = abs_steps; DoMethod(o, GM_RENDER, (IPTR) msg->ops_GInfo, (IPTR) rp, GREDRAW_UPDATE); ReleaseGIRPort(rp); retval = 0UL; } /* if (ObtainGIRPort succeed) */ } /* if (at most half the visible entries scrolled out) */ } /* if (msg is of type OM_UPDATE) */ /* Notify change */ NotifyAttrs(cl, o, msg, tags); } break; case AROSA_Listview_RenderHook: data->lvd_RenderHook = (struct Hook *)data->lvd_RenderHook; retval = 1UL; break; case AROSA_Listview_MultiSelect: SETFLAG(data->lvd_Flags, tag->ti_Data, LVFLG_MULTISELECT); break; case GA_TextAttr: { struct TextFont *tf; tf = OpenFont((struct TextAttr *)tag->ti_Data); if (tf) { if (data->lvd_Font) { CloseFont(data->lvd_Font); } data->lvd_Font = tf; } ReCalcEntryHeight(data); } break; default: break; } /* switch (tag->ti_Tag) */ } /* while (more tags to iterate) */ ReturnPtr("ListView::OM_SET", IPTR, retval); }
const ICodecInfo* CodecMng::Find(const std::string &name, bool throwOnNull) { return ReturnPtr(List().Find(name), throwOnNull, "Name " + name); }
const ICodecInfo* CodecMng::Find(iRtp::RtpPayload payload, bool throwOnNull) { std::string info = "Payload " + Utils::IntToString(payload); return ReturnPtr(List().Find(payload), throwOnNull, info); }
IPTR GTText__OM_NEW(Class * cl, Object * o, struct opSet *msg) { EnterFunc(bug("Text::New()\n")); o = (Object *) DoSuperMethodA(cl, o, (Msg)msg); if (o) { struct TextData *data = INST_DATA(cl, o); struct TextAttr *tattr, def_tattr; /* Set some defaults */ data->format = "%ld"; data->flags = 0; data->frontpen = TEXTPEN; data->backpen = BACKGROUNDPEN; data->toprint = (IPTR) NULL; data->font = NULL; data->maxnumberlength = 0; /* This means "no limit" */ data->dispfunc = (APTR)GetTagData(GTA_Text_DispFunc, (IPTR) NULL, msg->ops_AttrList); data->labelplace = GetTagData(GA_LabelPlace, GV_LabelPlace_Left, msg->ops_AttrList); /* Open font to use for gadget */ /* We will *ALWAYS* have a valid DrawInfo struct */ data->dri = (struct DrawInfo *)GetTagData(GA_DrawInfo, (IPTR) NULL, msg->ops_AttrList); def_tattr.ta_Name = data->dri->dri_Font->tf_Message.mn_Node.ln_Name; def_tattr.ta_YSize = data->dri->dri_Font->tf_YSize; def_tattr.ta_Style = 0; def_tattr.ta_Flags = 0; tattr = (struct TextAttr *)GetTagData(GA_TextAttr, (IPTR)&def_tattr, msg->ops_AttrList); data->font = OpenFont(tattr); if (!data->font) goto error; if (GetTagData(GTTX_CopyText, (IPTR)FALSE, msg->ops_AttrList)) { STRPTR text; D(bug("Got GTTX_CopyText\n")); text = (STRPTR)GetTagData(GTTX_Text, (IPTR)"Text MUST be passed with OM_NEW", msg->ops_AttrList); if (text) { D(bug("Text: %s\n", text)); /* Allocate copy buffer for the text */ data->toprint = (IPTR)AllocVec(strlen(text) + 1, MEMF_ANY); if (data->toprint) { data->flags |= TEXTF_COPYTEXT; D(bug("Copying text\n")); strcpy((STRPTR)data->toprint, text); } else { goto error; } } else { /* If text==NULL we have nothing to copy */ data->toprint = 0; } } else { STRPTR text; if ((text = (STRPTR)GetTagData(GTTX_Text, (IPTR) NULL, msg->ops_AttrList))) { data->toprint = (IPTR)text; } } D(bug("calling text_set\n")); text_set(cl, o, msg); if (data->flags & TEXTF_BORDER) { struct TagItem frame_tags[] = { {IA_Width , GetTagData(GA_Width, 0, msg->ops_AttrList) }, {IA_Height , GetTagData(GA_Height, 0, msg->ops_AttrList) }, {IA_Resolution , (data->dri->dri_Resolution.X << 16) + data->dri->dri_Resolution.Y }, {IA_FrameType , FRAME_BUTTON }, {IA_Recessed , TRUE }, {TAG_DONE , 0UL } }; data->frame = NewObjectA(NULL, FRAMEICLASS, frame_tags); } } ReturnPtr ("Text::New", IPTR, (IPTR)o); error: CoerceMethod(cl, o, OM_DISPOSE); ReturnPtr ("Text::New", IPTR, (IPTR) NULL); }