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:
@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user