Files
wmaker/WINGs/wmenuitem.c
T

227 lines
3.9 KiB
C
Raw Normal View History

1999-10-20 03:33:19 +00:00
#include "WINGsP.h"
typedef struct W_MenuItem {
2009-08-20 00:59:40 +02:00
char *title;
1999-10-20 03:33:19 +00:00
2009-08-20 00:59:40 +02:00
WMPixmap *image;
1999-10-20 03:33:19 +00:00
2009-08-20 00:59:40 +02:00
char *shortcutKey;
int shortcutModifierMask;
1999-10-20 03:33:19 +00:00
2009-08-20 00:59:40 +02:00
WMAction *action;
void *data;
1999-10-20 03:33:19 +00:00
2009-08-20 00:59:40 +02:00
struct W_Menu *submenu;
1999-10-20 03:33:19 +00:00
2009-08-20 00:59:40 +02:00
void *object;
2004-10-12 21:28:27 +00:00
2009-08-20 00:59:40 +02:00
WMPixmap *onStateImage;
WMPixmap *offStateImage;
WMPixmap *mixedStateImage;
1999-10-20 03:33:19 +00:00
2009-08-20 00:59:40 +02:00
struct {
unsigned enabled:1;
unsigned state:2;
} flags;
1999-10-20 03:33:19 +00:00
} MenuItem;
2009-08-20 00:59:40 +02:00
WMMenuItem *WMGetSeparatorMenuItem(void)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return NULL;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
Bool WMMenuItemIsSeparator(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
/* Parameter not used, but tell the compiler that it is ok */
(void) item;
2009-08-20 00:59:40 +02:00
return False;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
WMMenuItem *WMCreateMenuItem(void)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
WMMenuItem *item;
2004-10-12 21:28:27 +00:00
2009-08-20 00:59:40 +02:00
item = wmalloc(sizeof(MenuItem));
1999-10-20 03:33:19 +00:00
2009-08-20 00:59:40 +02:00
item->flags.enabled = 1;
2004-10-12 21:28:27 +00:00
2009-08-20 00:59:40 +02:00
return item;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
void WMDestroyMenuItem(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
if (item->title)
wfree(item->title);
1999-10-20 03:33:19 +00:00
2009-08-20 00:59:40 +02:00
if (item->image)
WMReleasePixmap(item->image);
1999-10-20 03:33:19 +00:00
2009-08-20 00:59:40 +02:00
if (item->shortcutKey)
wfree(item->shortcutKey);
2004-10-12 21:28:27 +00:00
2009-08-20 00:59:40 +02:00
if (item->onStateImage)
WMReleasePixmap(item->onStateImage);
2004-10-12 21:28:27 +00:00
2009-08-20 00:59:40 +02:00
if (item->offStateImage)
WMReleasePixmap(item->offStateImage);
2004-10-12 21:28:27 +00:00
2009-08-20 00:59:40 +02:00
if (item->mixedStateImage)
WMReleasePixmap(item->mixedStateImage);
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
Bool WMGetMenuItemEnabled(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->flags.enabled;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
void WMSetMenuItemEnabled(WMMenuItem * item, Bool flag)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
item->flags.enabled = ((flag == 0) ? 0 : 1);
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
char *WMGetMenuItemShortcut(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->shortcutKey;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
unsigned WMGetMenuItemShortcutModifierMask(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->shortcutModifierMask;
1999-10-20 03:33:19 +00:00
}
void WMSetMenuItemShortcut(WMMenuItem * item, const char *shortcut)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
if (item->shortcutKey)
wfree(item->shortcutKey);
1999-10-20 03:33:19 +00:00
2009-08-20 00:59:40 +02:00
item->shortcutKey = wstrdup(shortcut);
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
void WMSetMenuItemShortcutModifierMask(WMMenuItem * item, unsigned mask)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
item->shortcutModifierMask = mask;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
void *WMGetMenuItemRepresentedObject(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->object;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
void WMSetMenuItemRepresentedObject(WMMenuItem * item, void *object)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
item->object = object;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
void WMSetMenuItemAction(WMMenuItem * item, WMAction * action, void *data)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
item->action = action;
item->data = data;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
WMAction *WMGetMenuItemAction(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->action;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
void *WMGetMenuItemData(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->data;
1999-10-20 03:33:19 +00:00
}
void WMSetMenuItemTitle(WMMenuItem * item, const char *title)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
if (item->title)
wfree(item->title);
2004-10-12 21:28:27 +00:00
2009-08-20 00:59:40 +02:00
if (title)
item->title = wstrdup(title);
else
item->title = NULL;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
char *WMGetMenuItemTitle(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->title;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
void WMSetMenuItemState(WMMenuItem * item, int state)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
item->flags.state = state;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
int WMGetMenuItemState(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->flags.state;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
void WMSetMenuItemPixmap(WMMenuItem * item, WMPixmap * pixmap)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
if (item->image)
WMReleasePixmap(item->image);
1999-10-20 03:33:19 +00:00
2009-08-20 00:59:40 +02:00
item->image = WMRetainPixmap(pixmap);
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
WMPixmap *WMGetMenuItemPixmap(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->image;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
void WMSetMenuItemOnStatePixmap(WMMenuItem * item, WMPixmap * pixmap)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
if (item->onStateImage)
WMReleasePixmap(item->onStateImage);
2004-10-12 21:28:27 +00:00
2009-08-20 00:59:40 +02:00
item->onStateImage = WMRetainPixmap(pixmap);
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
WMPixmap *WMGetMenuItemOnStatePixmap(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->onStateImage;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
void WMSetMenuItemOffStatePixmap(WMMenuItem * item, WMPixmap * pixmap)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
if (item->offStateImage)
WMReleasePixmap(item->offStateImage);
2004-10-12 21:28:27 +00:00
2009-08-20 00:59:40 +02:00
item->offStateImage = WMRetainPixmap(pixmap);
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
WMPixmap *WMGetMenuItemOffStatePixmap(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->offStateImage;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
void WMSetMenuItemMixedStatePixmap(WMMenuItem * item, WMPixmap * pixmap)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
if (item->mixedStateImage)
WMReleasePixmap(item->mixedStateImage);
2004-10-12 21:28:27 +00:00
2009-08-20 00:59:40 +02:00
item->mixedStateImage = WMRetainPixmap(pixmap);
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
WMPixmap *WMGetMenuItemMixedStatePixmap(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->mixedStateImage;
1999-10-20 03:33:19 +00:00
}
2004-10-12 21:28:27 +00:00
#if 0
2009-08-20 00:59:40 +02:00
void WMSetMenuItemSubmenu(WMMenuItem * item, WMMenu * submenu)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
item->submenu = submenu;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
WMMenu *WMGetMenuItemSubmenu(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->submenu;
1999-10-20 03:33:19 +00:00
}
2009-08-20 00:59:40 +02:00
Bool WMGetMenuItemHasSubmenu(WMMenuItem * item)
1999-10-20 03:33:19 +00:00
{
2009-08-20 00:59:40 +02:00
return item->submenu != NULL;
1999-10-20 03:33:19 +00:00
}
2004-10-12 21:28:27 +00:00
#endif