static ULONG MUIPC_LButton__OM_SET(struct IClass *CLASS,Object *self,struct opSet *message) { struct MiamiPanelLButtonClass_DATA *data = INST_DATA(CLASS,self); struct TagItem *tag; if (tag = FindTagItem(MPA_LButton_State,message->ops_AttrList)) { UBYTE *text; ULONG color, dis; switch (tag->ti_Data) { case MIAMIPANELV_AddInterface_State_GoingOnline: color = MUIV_Lamp_Color_Error; text = offs; dis = FALSE; break; case MIAMIPANELV_AddInterface_State_GoingOffline: color = MUIV_Lamp_Color_Warning; text = ons; dis = TRUE; break; case MIAMIPANELV_AddInterface_State_Suspending: color = MUIV_Lamp_Color_FatalError; text = NULL; dis = TRUE; break; case MIAMIPANELV_AddInterface_State_Online: color = MUIV_Lamp_Color_Ok; text = offs; dis = FALSE; break; case MIAMIPANELV_AddInterface_State_Suspended: color = MUIV_Lamp_Color_Processing; text = NULL; dis = TRUE; break; default: color = MUIV_Lamp_Color_Off; text = ons; dis = FALSE; break; } if (data->lamp) set(data->lamp,MUIA_Lamp_Color,color); if (text) set(data->text,MUIA_Text_Contents,text); SetSuperAttrs(CLASS,self,MUIA_Disabled,dis,TAG_DONE); } return DoSuperMethodA(CLASS,self,(Msg)message); }
static void scaleBitMap(struct data *data,UWORD w,UWORD h) { register UWORD x, y; if (w==data->picWidth && h==data->picHeight) return; if (w==0 || w>16383 || h==0 || h>16383) return; x = ScalerDiv(w,FACTOR,data->picWidth); y = ScalerDiv(h,FACTOR,data->picHeight); if (x==0 || x>16383 || y==0 || y>16383) return; w = ScalerDiv(x,data->picWidth,FACTOR); h = ScalerDiv(y,data->picHeight,FACTOR); if (w==0 || w>16383 || h==0 || h>16383) return; if (data->scaledBitMap = AllocBitMap(w,h,data->bmh->bmh_Depth,((data->flags & FLG_Cyber) ? BMF_MINPLANES : 0)|BMF_CLEAR,data->screen->RastPort.BitMap)) { struct BitScaleArgs scale; memset(&scale,0,sizeof(struct BitScaleArgs)); scale.bsa_SrcBitMap = data->bitMap; scale.bsa_DestBitMap = data->scaledBitMap; scale.bsa_SrcWidth = data->picWidth; scale.bsa_SrcHeight = data->picHeight; scale.bsa_XSrcFactor = FACTOR; scale.bsa_XDestFactor = x; scale.bsa_YSrcFactor = FACTOR; scale.bsa_YDestFactor = y; BitMapScale(&scale); data->scaledWidth = w; data->scaledHeight = h; scaleMask(data,data->picWidth,data->picHeight,scale.bsa_DestWidth,scale.bsa_DestHeight,x,y); SetSuperAttrs(data->cl,data->obj,MUIA_Pic_Width,w,MUIA_Pic_Height,h,TAG_DONE); } }
__asm ULONG ObjStringDispatcher(a0 struct IClass *cl, a2 Object *o, a1 Msg msg) { TagItem *ti; struct ObjStringData *idata = INST_DATA(cl, o); putreg(REG_A6, (long)cl->cl_UserData); geta4(); switch (msg->MethodID) { case OM_NEW: { Object *obj = (Object*)DoSuperMethodA(cl, o, msg); if (obj) { idata = INST_DATA(cl, obj); if (ti = FindTagItem(SWA_ObjString_StrAttr, ((opSet *)msg)->ops_AttrList)) idata->StrAttr = ti->ti_Data; SetAttrs(obj, MUIA_Draggable, TRUE, MUIA_CycleChain, 1, MUIA_String_AdvanceOnCR, TRUE, TAG_DONE); } return (ULONG)obj; } case OM_GET: { if (((struct opGet *)msg)->opg_AttrID == SWA_ObjString_NumVal) { ULONG *Store = ((struct opGet *)msg)->opg_Storage; if (Store) *Store = SWGetUL(o, MUIA_String_Integer); return 1; } break; } case OM_SET: case OM_UPDATE: { ULONG rc; if (ti=FindTagItem(MUIA_String_Contents,((opSet *)msg)->ops_AttrList)) { rc = DoSuperMethodA(cl, o, msg); set(o, SWA_ObjString_NumVal, SWGetUL(o, MUIA_String_Integer)); return rc; } if (ti=FindTagItem(SWA_ObjString_NumVal,((opSet *)msg)->ops_AttrList)) { if (idata->LastVal == ti->ti_Data) { ti->ti_Tag = TAG_IGNORE; rc = DoSuperMethodA(cl, o, msg); ti->ti_Tag = SWA_ObjString_NumVal; return rc; } SetSuperAttrs(cl, o, MUIA_NoNotify, TRUE, MUIA_String_Integer, idata->LastVal = ti->ti_Data, TAG_DONE); } } break; case MUIM_DragQuery: { Object *drag_o = ((struct MUIP_DragQuery *)msg)->obj; if (drag_o == o) return MUIV_DragQuery_Refuse; if (OCLASS(drag_o) == OCLASS(o)) { UBYTE *s1, *s2; get(drag_o, MUIA_String_Accept, &s1); get(o, MUIA_String_Accept, &s2); if (!s1 && !s2) return MUIV_DragQuery_Accept; if (!s1 || !s2) return MUIV_DragQuery_Refuse; return (ULONG)(!strcmp(s1, s2) ? MUIV_DragQuery_Accept : MUIV_DragQuery_Refuse); } if (OCLASS(drag_o) == SWObjListClass()) SWDB_RET(MUIV_DragQuery_Accept); if (!idata->StrAttr) return MUIV_DragQuery_Refuse; if (!(drag_o = (Object *)DoMethod(drag_o, SWM_Root_GetDragObj))) return MUIV_DragQuery_Refuse; return (ULONG)(get(drag_o, idata->StrAttr, NULL) ? MUIV_DragQuery_Accept : MUIV_DragQuery_Refuse); } case MUIM_DragDrop: { Object *drag_o = ((struct MUIP_DragQuery *)msg)->obj; if (OCLASS(drag_o) == OCLASS(o)) { set(o, MUIA_String_Contents, SWGetUL(drag_o, MUIA_String_Contents)); set(o, SWA_ObjString_NumVal, SWGetUL(o, MUIA_String_Integer)); return 0; } // -- if objlist, append its primary attribute ----------------------- if (OCLASS(drag_o) == SWObjListClass()) { UBYTE *c, *val; get(o, MUIA_String_Contents, &c); val = (UBYTE *)DoMethod((Object *)muiUserData(drag_o), SWM_E_Listmgr_StrCopy, c); if (val && c) { set(o, MUIA_String_Contents, val); FreeVec(val); return 0; } } if (!(drag_o = (Object *)DoMethod(drag_o, SWM_Root_GetDragObj))) return MUIV_DragQuery_Refuse; set(o, MUIA_String_Contents, SWGetStr(drag_o, idata->StrAttr)); return 0; } case SWM_ObjString_AppMsg: { UBYTE FSpec[FMSIZE]; struct AppMessage *AMsg = ((struct SWP_AppMsg *)msg)->AMsg; if (AMsg->am_NumArgs > 0) { NameFromLock(AMsg->am_ArgList[0].wa_Lock, FSpec, FMSIZE); AddPart(FSpec, AMsg->am_ArgList[0].wa_Name, FMSIZE); set(o, MUIA_String_Contents, FSpec); } return 0; } } return DoSuperMethodA(cl, o, msg); }