1
0
mirror of https://github.com/deadw00d/AROS.git synced 2025-10-26 21:18:42 +00:00

muimaster.library: be able to internally distinguish menu, menustrip and menuitem

git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@50862 fb15a70f-31f2-0310-bbcc-cdcc74a49acc
This commit is contained in:
deadwood
2015-06-24 19:43:42 +00:00
parent d358b70cab
commit 7a2da7cdd9

View File

@ -27,6 +27,16 @@ extern struct Library *MUIMasterBase;
#define MENUF_ENABLED (1<<3) #define MENUF_ENABLED (1<<3)
#define MENUF_TOGGLE (1<<4) #define MENUF_TOGGLE (1<<4)
#define MENUF_MENUSTRIP (1<<15)
#define MENUF_MENU (1<<16)
#define MENUF_MENUITEM (1<<17)
#define MUIA_Menuitem_Type (MUIB_Menuitem | 0x00000001)
#define MUIV_Menuitem_Type_Menustrip (-1)
#define MUIV_Menuitem_Type_Menu (-2)
#define MUIV_Menuitem_Type_Menuitem (-3)
struct MUI_MenuitemData struct MUI_MenuitemData
{ {
ULONG flags; ULONG flags;
@ -145,7 +155,7 @@ static struct NewMenu *Menuitem_BuildNewMenu(struct MUI_MenuitemData *data,
/************************************************************************** /**************************************************************************
OM_NEW OM_NEW
**************************************************************************/ **************************************************************************/
IPTR Menuitem__OM_NEW(struct IClass *cl, Object *obj, struct opSet *msg) IPTR Common__OM_NEW(struct IClass *cl, Object *obj, struct opSet *msg)
{ {
struct MUI_MenuitemData *data; struct MUI_MenuitemData *data;
struct TagItem *tags, *tag; struct TagItem *tags, *tag;
@ -172,8 +182,7 @@ IPTR Menuitem__OM_NEW(struct IClass *cl, Object *obj, struct opSet *msg)
break; break;
case MUIA_Menuitem_CommandString: case MUIA_Menuitem_CommandString:
_handle_bool_tag(data->flags, tag->ti_Data, _handle_bool_tag(data->flags, tag->ti_Data, MENUF_COMMANDSTRING);
MENUF_COMMANDSTRING);
break; break;
case MUIA_Menu_Enabled: case MUIA_Menu_Enabled:
@ -203,6 +212,39 @@ IPTR Menuitem__OM_NEW(struct IClass *cl, Object *obj, struct opSet *msg)
return (IPTR) obj; return (IPTR) obj;
} }
IPTR Menuitem__OM_NEW(struct IClass *cl, Object *obj, struct opSet *msg)
{
struct MUI_MenuitemData *data;
obj = (Object *) Common__OM_NEW(cl, obj, msg);
data = INST_DATA(cl, obj);
data->flags |= MENUF_MENUITEM;
return (IPTR) obj;
}
IPTR Menu__OM_NEW(struct IClass *cl, Object *obj, struct opSet *msg)
{
struct MUI_MenuitemData *data;
obj = (Object *) Common__OM_NEW(cl, obj, msg);
data = INST_DATA(cl, obj);
data->flags |= MENUF_MENU;
return (IPTR) obj;
}
IPTR Menustrip__OM_NEW(struct IClass *cl, Object *obj, struct opSet *msg)
{
struct MUI_MenuitemData *data;
obj = (Object *) Common__OM_NEW(cl, obj, msg);
data = INST_DATA(cl, obj);
data->flags |= MENUF_MENUSTRIP;
return (IPTR) obj;
}
/************************************************************************** /**************************************************************************
OM_SET OM_SET
**************************************************************************/ **************************************************************************/
@ -370,6 +412,16 @@ IPTR Menuitem__OM_GET(struct IClass *cl, Object *obj, struct opGet *msg)
case MUIA_Menuitem_Trigger: case MUIA_Menuitem_Trigger:
STORE = (IPTR) data->trigger; STORE = (IPTR) data->trigger;
return 1; return 1;
case MUIA_Menuitem_Type:
if (data->flags & MENUF_MENUSTRIP)
STORE = (IPTR) MUIV_Menuitem_Type_Menustrip;
else if(data->flags & MENUF_MENU)
STORE = (IPTR) MUIV_Menuitem_Type_Menu;
else
STORE = (IPTR) MUIV_Menuitem_Type_Menuitem;
return 1;
} }
return DoSuperMethodA(cl, obj, (Msg) msg); return DoSuperMethodA(cl, obj, (Msg) msg);
@ -457,13 +509,10 @@ IPTR Menuitem__MUIM_Update(struct IClass *cl, Object *obj, Msg msg)
return retval; return retval;
} }
IPTR Common_Dispatcher(Class *cl, Object *obj, Msg msg)
BOOPSI_DISPATCHER(IPTR, Menuitem_Dispatcher, cl, obj, msg)
{ {
switch (msg->MethodID) switch (msg->MethodID)
{ {
case OM_NEW:
return Menuitem__OM_NEW(cl, obj, (struct opSet *)msg);
case OM_DISPOSE: case OM_DISPOSE:
return Menuitem__OM_DISPOSE(cl, obj, msg); return Menuitem__OM_DISPOSE(cl, obj, msg);
case OM_SET: case OM_SET:
@ -489,8 +538,42 @@ BOOPSI_DISPATCHER(IPTR, Menuitem_Dispatcher, cl, obj, msg)
} }
return DoSuperMethodA(cl, obj, msg); return DoSuperMethodA(cl, obj, msg);
} }
BOOPSI_DISPATCHER(IPTR, Menuitem_Dispatcher, cl, obj, msg)
{
switch (msg->MethodID)
{
case OM_NEW:
return Menuitem__OM_NEW(cl, obj, (struct opSet *)msg);
}
return Common_Dispatcher(cl, obj, msg);
}
BOOPSI_DISPATCHER_END BOOPSI_DISPATCHER_END
BOOPSI_DISPATCHER(IPTR, Menu_Dispatcher, cl, obj, msg)
{
switch (msg->MethodID)
{
case OM_NEW:
return Menu__OM_NEW(cl, obj, (struct opSet *)msg);
}
return Common_Dispatcher(cl, obj, msg);
}
BOOPSI_DISPATCHER_END
BOOPSI_DISPATCHER(IPTR, Menustrip_Dispatcher, cl, obj, msg)
{
switch (msg->MethodID)
{
case OM_NEW:
return Menustrip__OM_NEW(cl, obj, (struct opSet *)msg);
}
return Common_Dispatcher(cl, obj, msg);
}
BOOPSI_DISPATCHER_END
/* /*
* Class descriptor. * Class descriptor.
*/ */
@ -510,7 +593,7 @@ const struct __MUIBuiltinClass _MUI_Menu_desc =
MUIC_Menu, MUIC_Menu,
MUIC_Family, MUIC_Family,
sizeof(struct MUI_MenuitemData), sizeof(struct MUI_MenuitemData),
(void *) Menuitem_Dispatcher (void *) Menu_Dispatcher
}; };
/* /*
@ -521,5 +604,5 @@ const struct __MUIBuiltinClass _MUI_Menustrip_desc =
MUIC_Menustrip, MUIC_Menustrip,
MUIC_Family, MUIC_Family,
sizeof(struct MUI_MenuitemData), sizeof(struct MUI_MenuitemData),
(void *) Menuitem_Dispatcher (void *) Menustrip_Dispatcher
}; };