IPTR Register__MUIM_Draw(struct IClass *cl, Object *obj, struct MUIP_Draw *msg) { struct Register_DATA *data = INST_DATA(cl, obj); /* Before all the current page is drawn erase the part of the area covered * by tabs which is not erased (between _left(obj) and _mleft(obj) and so on */ if (data->oldactive != data->active && (msg->flags & MADF_DRAWUPDATE) && (data->active/data->columns != data->oldactive/data->columns)) { int left,top,width,height; left = _mright(obj)+1; top = _mtop(obj); width = _right(obj) - left; /* +1 - 1*/ height = _mheight(obj); DoMethod(obj, MUIM_DrawBackground, left, top, width, height, left, top, 0); left = _left(obj)+1; /* +1 because the register frame shouldn't be ereased */ width = _mleft(obj) - left; /* + 1 - 1 */ DoMethod(obj, MUIM_DrawBackground, left, top, width, height, left, top, 0); top = _top(obj) + data->tab_height; height = _mtop(obj) - top; /* + 1 - 1 */ width = _width(obj)-2; if (height > 0 && width > 0) DoMethod(obj, MUIM_DrawBackground, left, top, width, height, left, top, 0); top = _mbottom(obj); height = _bottom(obj) - top; /* + 1 - 1 */ if (height > 0 && width > 0) DoMethod(obj, MUIM_DrawBackground, left, top, width, height, left, top, 0); } DoSuperMethodA(cl,obj,(Msg)msg); /* D(bug("Register_Draw : flags = %d\n", msg->flags)); */ if (!(msg->flags & (MADF_DRAWOBJECT | MADF_DRAWUPDATE))) return(0); RenderRegisterTab(cl, obj, msg->flags); data->oldactive = data->active; return TRUE; }
/************************************************************************** MUIM_HandleEvent **************************************************************************/ IPTR Numericbutton__MUIM_HandleEvent(struct IClass *cl, Object *obj, struct MUIP_HandleEvent *msg) { struct Numericbutton_DATA *data = INST_DATA(cl, obj); if (!msg->imsg) { return 0; } switch(msg->imsg->Class) { case IDCMP_MOUSEBUTTONS: switch(msg->imsg->Code) { case SELECTDOWN: if (_between(_left(obj), msg->imsg->MouseX, _right(obj)) && _between(_top(obj), msg->imsg->MouseY, _bottom(obj)) && (muiAreaData(obj)->mad_Flags & MADF_CANDRAW) && !data->popwin) { data->knob_clickoffset_x = msg->imsg->MouseX - _mleft(obj); if (MakePopupWin(obj, data)) { DoMethod(_win(obj), MUIM_Window_RemEventHandler, (IPTR)&data->ehn); data->ehn.ehn_Events |= IDCMP_MOUSEMOVE; DoMethod(_win(obj), MUIM_Window_AddEventHandler, (IPTR)&data->ehn); return 0; } } break; case SELECTUP: case MENUUP: case MIDDLEUP: default: if (data->popwin) { KillPopupWin(obj, data); if ((msg->imsg->Code == SELECTUP)) { set(obj, MUIA_Numeric_Value, data->knob_val); } return 0; } break; } /* switch(msg->imsg->Code) */ break; case IDCMP_MOUSEMOVE: if (data->popwin) { DrawKnob(obj, data, FALSE); return 0; } break; } /* switch(msg->imsg->Class) */ return 0; }
/************************************************************************** Render tab bar **************************************************************************/ static void RenderRegisterTab(struct IClass *cl, Object *obj, ULONG flags) { struct Register_DATA *data = INST_DATA(cl, obj); WORD tabx; /* * Erase / prepare for drawing */ if (flags & MADF_DRAWOBJECT) { DoMethod(obj, MUIM_DrawParentBackground, data->left, data->top, data->framewidth, data->tab_height - 1, data->left, data->top, 0); } else { /* draw parent bg over oldactive */ IPTR method; WORD old_left, old_top, old_width, old_height; struct RegisterTabItem *ri = &data->items[data->oldactive]; if (data->oldactive >= data->columns) method = MUIM_DrawBackground; else method = MUIM_DrawParentBackground; old_left = _left(obj) + ri->x1 - 2; old_top = _top(obj) + ri->y1; old_width = ri->x2 - ri->x1 + 5; old_height = data->tab_height - 1; DoMethod(obj, method, old_left, old_top, old_width, old_height, old_left, old_top, 0); SetDrMd(_rp(obj), JAM1); SetAPen(_rp(obj), _pens(obj)[MPEN_SHINE]); RectFill(_rp(obj), old_left, old_top + old_height, old_left + old_width, old_top + old_height); } SetDrMd(_rp(obj), JAM1); SetAPen(_rp(obj), _pens(obj)[MPEN_SHINE]); SetFont(_rp(obj), _font(obj)); SetSoftStyle(_rp(obj), FS_NORMAL, AskSoftStyle(_rp(obj))); /* * Draw new graphics */ /* register frame */ if (flags & MADF_DRAWOBJECT || (data->active / data->columns != data->oldactive / data->columns)) { int i,y,tabs_on_bottom = 0; SetAPen(_rp(obj), _pens(obj)[MPEN_SHINE]); RectFill(_rp(obj), data->left, data->top + data->tab_height - 1, data->left, data->top + data->tab_height + data->frameheight - 1); y = data->top + data->tab_height - 1; for (i=0; i<data->rows; i++) { if (!tabs_on_bottom && (i > data->active/data->columns)) { y = _bottom(obj) - muiAreaData(obj)->mad_InnerBottom + data->tab_height; tabs_on_bottom = 1; } RectFill(_rp(obj), data->left + 1, y, data->left + data->framewidth - 2, y); y += data->tab_height; } SetAPen(_rp(obj), _pens(obj)[MPEN_SHADOW]); RectFill(_rp(obj), data->left + data->framewidth - 1, data->top + data->tab_height - 1, data->left + data->framewidth - 1, data->top + data->tab_height + data->frameheight - 1); RectFill(_rp(obj), data->left + 1, data->top + data->tab_height + data->frameheight - 1, data->left + data->framewidth - 2, data->top + data->tab_height + data->frameheight - 1); for(i = 0, tabx = 0; i < data->numitems; i++) { RenderRegisterTabItem(cl, obj, i); } } else { /* If active register has been changed and is on same row we simply draw both registers only */ RenderRegisterTabItem(cl, obj, data->active); RenderRegisterTabItem(cl, obj, data->oldactive); } }
IPTR Popimage__MUIM_Popimage_OpenWindow(struct IClass *cl, Object *obj, Msg msg) { struct Popimage_DATA *data = INST_DATA(cl, obj); if (!data->wnd) { Object *ok_button, *cancel_button; char *img_spec; ULONG x = 0, y = 0; get(_win(obj), MUIA_Window_LeftEdge, &x); get(_win(obj), MUIA_Window_TopEdge, &y); get(obj,MUIA_Imagedisplay_Spec, &img_spec); data->wnd = (Object *)WindowObject, MUIA_Window_Title, (IPTR) data->wintitle, MUIA_Window_Activate, TRUE, MUIA_Window_IsSubWindow, TRUE, MUIA_Window_LeftEdge, _left(obj) + x, MUIA_Window_TopEdge, _bottom(obj) + y + 1, WindowContents, (IPTR) VGroup, Child, (IPTR) (data->imageadjust = MUI_NewObject ( MUIC_Imageadjust, MUIA_CycleChain, 1, MUIA_Imageadjust_Spec, (IPTR) img_spec, MUIA_Imageadjust_Type, data->adjust_type, MUIA_Imageadjust_Originator, (IPTR) obj, TAG_DONE )), Child, (IPTR) HGroup, MUIA_Group_SameWidth, TRUE, Child, (IPTR) (ok_button = MUI_MakeObject ( MUIO_Button, (IPTR) "_Ok" )), Child, (IPTR) HVSpace, Child, (IPTR) HVSpace, Child, (IPTR) (cancel_button = MUI_MakeObject ( MUIO_Button, (IPTR) "_Cancel" )), End, End, End; if (data->wnd) { set(ok_button, MUIA_CycleChain, 1); set(cancel_button, MUIA_CycleChain, 1); DoMethod(_app(obj),OM_ADDMEMBER,(IPTR)data->wnd); DoMethod ( ok_button, MUIM_Notify, MUIA_Pressed, FALSE, (IPTR) _app(obj), 5, MUIM_Application_PushMethod, (IPTR) obj, 2, MUIM_Popimage_CloseWindow, TRUE ); DoMethod ( cancel_button, MUIM_Notify, MUIA_Pressed, FALSE, (IPTR) _app(obj), 5, MUIM_Application_PushMethod, (IPTR) obj, 2, MUIM_Popimage_CloseWindow, FALSE ); DoMethod ( data->wnd, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, (IPTR) _app(obj), 5, MUIM_Application_PushMethod, (IPTR) obj, 2, MUIM_Popimage_CloseWindow, FALSE ); } } if (data->wnd) { ULONG opened; set(data->wnd, MUIA_Window_Open,TRUE); get(data->wnd, MUIA_Window_Open, &opened); if (!opened) { DoMethod(obj, MUIM_Popimage_CloseWindow, FALSE); } } return 1; }