mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 12:28:22 +01:00
297 lines
4.0 KiB
C
297 lines
4.0 KiB
C
|
|
|
|
|
|
|
|
#include "WINGsP.h"
|
|
|
|
|
|
|
|
typedef struct W_MenuItem {
|
|
char *title;
|
|
|
|
WMPixmap *image;
|
|
|
|
char *shortcutKey;
|
|
int shortcutModifierMask;
|
|
|
|
WMAction *action;
|
|
void *data;
|
|
|
|
struct W_Menu *submenu;
|
|
|
|
void *object;
|
|
|
|
WMPixmap *onStateImage;
|
|
WMPixmap *offStateImage;
|
|
WMPixmap *mixedStateImage;
|
|
|
|
struct {
|
|
unsigned enabled:1;
|
|
unsigned state:2;
|
|
} flags;
|
|
} MenuItem;
|
|
|
|
|
|
|
|
|
|
|
|
WMMenuItem*
|
|
WMGetSeparatorMenuItem(void)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
|
|
Bool
|
|
WMMenuItemIsSeparator(WMMenuItem *item)
|
|
{
|
|
return False;
|
|
}
|
|
|
|
|
|
WMMenuItem*
|
|
WMCreateMenuItem(void)
|
|
{
|
|
WMMenuItem *item;
|
|
|
|
item = wmalloc(sizeof(WMMenuItem));
|
|
memset(item, 0, sizeof(WMMenuItem));
|
|
|
|
item->flags.enabled = 1;
|
|
|
|
return item;
|
|
}
|
|
|
|
|
|
void
|
|
WMDestroyMenuItem(WMMenuItem *item)
|
|
{
|
|
if (item->title)
|
|
wfree(item->title);
|
|
|
|
if (item->image)
|
|
WMReleasePixmap(item->image);
|
|
|
|
if (item->shortcutKey)
|
|
wfree(item->shortcutKey);
|
|
|
|
if (item->onStateImage)
|
|
WMReleasePixmap(item->onStateImage);
|
|
|
|
if (item->offStateImage)
|
|
WMReleasePixmap(item->offStateImage);
|
|
|
|
if (item->mixedStateImage)
|
|
WMReleasePixmap(item->mixedStateImage);
|
|
}
|
|
|
|
|
|
Bool
|
|
WMGetMenuItemEnabled(WMMenuItem *item)
|
|
{
|
|
return item->flags.enabled;
|
|
}
|
|
|
|
|
|
void
|
|
WMSetMenuItemEnabled(WMMenuItem *item, Bool flag)
|
|
{
|
|
item->flags.enabled = ((flag==0) ? 0 : 1);
|
|
}
|
|
|
|
|
|
char*
|
|
WMGetMenuItemShortcut(WMMenuItem *item)
|
|
{
|
|
return item->shortcutKey;
|
|
}
|
|
|
|
|
|
unsigned
|
|
WMGetMenuItemShortcutModifierMask(WMMenuItem *item)
|
|
{
|
|
return item->shortcutModifierMask;
|
|
}
|
|
|
|
|
|
|
|
void
|
|
WMSetMenuItemShortcut(WMMenuItem *item, char *shortcut)
|
|
{
|
|
if (item->shortcutKey)
|
|
wfree(item->shortcutKey);
|
|
|
|
item->shortcutKey = wstrdup(shortcut);
|
|
}
|
|
|
|
|
|
void
|
|
WMSetMenuItemShortcutModifierMask(WMMenuItem *item, unsigned mask)
|
|
{
|
|
item->shortcutModifierMask = mask;
|
|
}
|
|
|
|
|
|
void*
|
|
WMGetMenuItemRepresentedObject(WMMenuItem *item)
|
|
{
|
|
return item->object;
|
|
}
|
|
|
|
|
|
void
|
|
WMSetMenuItemRepresentedObject(WMMenuItem *item, void *object)
|
|
{
|
|
item->object = object;
|
|
}
|
|
|
|
|
|
void
|
|
WMSetMenuItemAction(WMMenuItem *item, WMAction *action, void *data)
|
|
{
|
|
item->action = action;
|
|
item->data = data;
|
|
}
|
|
|
|
|
|
WMAction*
|
|
WMGetMenuItemAction(WMMenuItem *item)
|
|
{
|
|
return item->action;
|
|
}
|
|
|
|
|
|
void*
|
|
WMGetMenuItemData(WMMenuItem *item)
|
|
{
|
|
return item->data;
|
|
}
|
|
|
|
|
|
void
|
|
WMSetMenuItemTitle(WMMenuItem *item, char *title)
|
|
{
|
|
if (item->title)
|
|
wfree(item->title);
|
|
|
|
if (title)
|
|
item->title = wstrdup(title);
|
|
else
|
|
item->title = NULL;
|
|
}
|
|
|
|
|
|
char*
|
|
WMGetMenuItemTitle(WMMenuItem *item)
|
|
{
|
|
return item->title;
|
|
}
|
|
|
|
|
|
void
|
|
WMSetMenuItemState(WMMenuItem *item, int state)
|
|
{
|
|
item->flags.state = state;
|
|
}
|
|
|
|
|
|
int
|
|
WMGetMenuItemState(WMMenuItem *item)
|
|
{
|
|
return item->flags.state;
|
|
}
|
|
|
|
|
|
void
|
|
WMSetMenuItemPixmap(WMMenuItem *item, WMPixmap *pixmap)
|
|
{
|
|
if (item->image)
|
|
WMReleasePixmap(item->image);
|
|
|
|
item->image = WMRetainPixmap(pixmap);
|
|
}
|
|
|
|
|
|
WMPixmap*
|
|
WMGetMenuItemPixmap(WMMenuItem *item)
|
|
{
|
|
return item->image;
|
|
}
|
|
|
|
|
|
void
|
|
WMSetMenuItemOnStatePixmap(WMMenuItem *item, WMPixmap *pixmap)
|
|
{
|
|
if (item->onStateImage)
|
|
WMReleasePixmap(item->onStateImage);
|
|
|
|
item->onStateImage = WMRetainPixmap(pixmap);
|
|
}
|
|
|
|
|
|
WMPixmap*
|
|
WMGetMenuItemOnStatePixmap(WMMenuItem *item)
|
|
{
|
|
return item->onStateImage;
|
|
}
|
|
|
|
|
|
void
|
|
WMSetMenuItemOffStatePixmap(WMMenuItem *item, WMPixmap *pixmap)
|
|
{
|
|
if (item->offStateImage)
|
|
WMReleasePixmap(item->offStateImage);
|
|
|
|
item->offStateImage = WMRetainPixmap(pixmap);
|
|
}
|
|
|
|
|
|
WMPixmap*
|
|
WMGetMenuItemOffStatePixmap(WMMenuItem *item)
|
|
{
|
|
return item->offStateImage;
|
|
}
|
|
|
|
|
|
|
|
void
|
|
WMSetMenuItemMixedStatePixmap(WMMenuItem *item, WMPixmap *pixmap)
|
|
{
|
|
if (item->mixedStateImage)
|
|
WMReleasePixmap(item->mixedStateImage);
|
|
|
|
item->mixedStateImage = WMRetainPixmap(pixmap);
|
|
}
|
|
|
|
|
|
WMPixmap*
|
|
WMGetMenuItemMixedStatePixmap(WMMenuItem *item)
|
|
{
|
|
return item->mixedStateImage;
|
|
}
|
|
|
|
|
|
/*
|
|
void
|
|
WMSetMenuItemSubmenu(WMMenuItem *item, WMMenu *submenu)
|
|
{
|
|
item->submenu = submenu;
|
|
}
|
|
|
|
|
|
WMMenu*
|
|
WMGetMenuItemSubmenu(WMMenuItem *item)
|
|
{
|
|
return item->submenu;
|
|
}
|
|
|
|
|
|
|
|
Bool
|
|
WMGetMenuItemHasSubmenu(WMMenuItem *item)
|
|
{
|
|
return item->submenu != NULL;
|
|
}
|
|
|
|
*/
|