1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-29 18:02:34 +01:00

more updates to editable menu

This commit is contained in:
kojima
2000-07-15 22:00:41 +00:00
parent 2dd7218dfa
commit dcd44b17b1
2 changed files with 73 additions and 8 deletions

View File

@@ -36,6 +36,7 @@ typedef struct W_EditMenuItem {
struct W_EditMenu *parent; struct W_EditMenu *parent;
char *label; char *label;
WMPixmap *pixmap; /* pixmap to show at left */
void *data; void *data;
WMCallback *destroyData; WMCallback *destroyData;
@@ -167,7 +168,6 @@ char *WGetEditMenuItemTitle(WEditMenuItem *item)
return item->label; return item->label;
} }
void *WGetEditMenuItemData(WEditMenuItem *item) void *WGetEditMenuItemData(WEditMenuItem *item)
{ {
return item->data; return item->data;
@@ -182,6 +182,12 @@ void WSetEditMenuItemData(WEditMenuItem *item, void *data,
} }
void WSetEditMenuItemImage(WEditMenuItem *item, WMPixmap *pixmap)
{
if (item->pixmap)
WMReleasePixmap(item->pixmap);
item->pixmap = WMRetainPixmap(pixmap);
}
static void static void
@@ -210,7 +216,12 @@ paintEditMenuItem(WEditMenuItem *iPtr)
WMDrawString(scr, win, WMColorGC(color), font, 5, 3, iPtr->label, WMDrawString(scr, win, WMColorGC(color), font, 5, 3, iPtr->label,
strlen(iPtr->label)); strlen(iPtr->label));
if (iPtr->submenu) { if (iPtr->pixmap) {
WMSize size = WMGetPixmapSize(iPtr->pixmap);
WMDrawPixmap(iPtr->pixmap, win, w - size.width - 5,
(h - size.height)/2);
} else if (iPtr->submenu) {
/* draw the cascade indicator */ /* draw the cascade indicator */
XDrawLine(scr->display,win,WMColorGC(scr->darkGray), XDrawLine(scr->display,win,WMColorGC(scr->darkGray),
w-11, 6, w-6, h/2-1); w-11, 6, w-6, h/2-1);
@@ -304,6 +315,7 @@ static void editItemLabel(WEditMenuItem *item);
static void stopEditItem(WEditMenu *menu, Bool apply); static void stopEditItem(WEditMenu *menu, Bool apply);
static void unmapMenu(WEditMenu *menu);
static void deselectItem(WEditMenu *menu); static void deselectItem(WEditMenu *menu);
@@ -505,6 +517,15 @@ WInsertMenuItemWithTitle(WEditMenu *mPtr, int index, char *title)
} }
WEditMenuItem*
WGetEditMenuItem(WEditMenu *mPtr, int index)
{
if (index >= WMGetBagItemCount(mPtr->items))
return NULL;
else
return WMGetFromBag(mPtr->items, index + (mPtr->flags.isTitled ? 1 : 0));
}
WEditMenuItem* WEditMenuItem*
WAddMenuItemWithTitle(WEditMenu *mPtr, char *title) WAddMenuItemWithTitle(WEditMenu *mPtr, char *title)
@@ -528,6 +549,18 @@ WSetEditMenuTitle(WEditMenu *mPtr, char *title)
} }
char*
WGetEditMenuTitle(WEditMenu *mPtr)
{
WEditMenuItem *item;
item = WMGetFromBag(mPtr->items, 0);
return item->label;
}
void void
WSetEditMenuAcceptsDrop(WEditMenu *mPtr, Bool flag) WSetEditMenuAcceptsDrop(WEditMenu *mPtr, Bool flag)
{ {
@@ -650,7 +683,7 @@ closeMenuAction(WMWidget *w, void *data)
WMAddIdleHandler(WMDestroyWidget, menu->closeB); WMAddIdleHandler(WMDestroyWidget, menu->closeB);
menu->closeB = NULL; menu->closeB = NULL;
WMUnmapWidget(menu); unmapMenu(menu);
} }
@@ -728,6 +761,9 @@ updateMenuContents(WEditMenu *mPtr)
W_ResizeView(mPtr->view, newW, newH+1); W_ResizeView(mPtr->view, newW, newH+1);
if (mPtr->closeB)
WMMoveWidget(mPtr->closeB, newW - 20, 3);
newW -= 2*offs; newW -= 2*offs;
i = 0; i = 0;
@@ -869,6 +905,12 @@ stopEditItem(WEditMenu *menu, Bool apply)
menu->selectedItem->label = wstrdup(text); menu->selectedItem->label = wstrdup(text);
updateMenuContents(menu); updateMenuContents(menu);
if (menu->delegate && menu->delegate->itemEdited) {
(*menu->delegate->itemEdited)(menu->delegate, menu,
menu->selectedItem);
}
} }
WMUnmapWidget(menu->tfield); WMUnmapWidget(menu->tfield);
menu->flags.isEditing = 0; menu->flags.isEditing = 0;
@@ -1194,6 +1236,20 @@ duplicateMenu(WEditMenu *menu)
} }
static WEditMenuItem*
duplicateItem(WEditMenuItem *item)
{
WEditMenuItem *nitem;
nitem = WCreateEditMenuItem(item->parent, item->label, False);
if (item->pixmap)
nitem->pixmap = WMRetainPixmap(item->pixmap);
return nitem;
}
static void static void
dragItem(WEditMenu *menu, WEditMenuItem *item) dragItem(WEditMenu *menu, WEditMenuItem *item)
{ {
@@ -1237,7 +1293,7 @@ dragItem(WEditMenu *menu, WEditMenuItem *item)
W_RealizeView(dview); W_RealizeView(dview);
if (menu->flags.isFactory) { if (menu->flags.isFactory) {
dritem = WCreateEditMenuItem(menu, item->label, False); dritem = duplicateItem(item);
W_ReparentView(dritem->view, dview, 0, 0); W_ReparentView(dritem->view, dview, 0, 0);
WMResizeWidget(dritem, oldSize.width, oldSize.height); WMResizeWidget(dritem, oldSize.width, oldSize.height);
@@ -1298,12 +1354,12 @@ dragItem(WEditMenu *menu, WEditMenuItem *item)
Bool rem = True; Bool rem = True;
if (!menu->flags.isFactory) { if (!menu->flags.isFactory) {
WMUnmapWidget(dritem); W_UnmapView(dview);
if (menu->delegate && menu->delegate->shouldRemoveItem) { if (menu->delegate && menu->delegate->shouldRemoveItem) {
rem = (*menu->delegate->shouldRemoveItem)(menu->delegate, rem = (*menu->delegate->shouldRemoveItem)(menu->delegate,
menu, item); menu, item);
} }
WMMapWidget(dritem); W_MapView(dview);
} }
if (!rem || menu->flags.isFactory) { if (!rem || menu->flags.isFactory) {
@@ -1319,7 +1375,8 @@ dragItem(WEditMenu *menu, WEditMenuItem *item)
} else { } else {
WRemoveEditMenuItem(menu, dritem); WRemoveEditMenuItem(menu, dritem);
if (menu->delegate && menu->delegate->itemCloned) { if (menu->delegate && menu->delegate->itemCloned
&& menu->flags.isFactory) {
(*menu->delegate->itemCloned)(menu->delegate, menu, (*menu->delegate->itemCloned)(menu->delegate, menu,
item, dritem); item, dritem);
} }

View File

@@ -30,6 +30,8 @@ typedef struct WEditMenuDelegate {
void (*itemCloned)(struct WEditMenuDelegate*, WEditMenu*, void (*itemCloned)(struct WEditMenuDelegate*, WEditMenu*,
WEditMenuItem*, WEditMenuItem *); WEditMenuItem*, WEditMenuItem *);
void (*itemEdited)(struct WEditMenuDelegate*, WEditMenu*,
WEditMenuItem*);
void (*itemSelected)(struct WEditMenuDelegate*, WEditMenu*, void (*itemSelected)(struct WEditMenuDelegate*, WEditMenu*,
WEditMenuItem*); WEditMenuItem*);
void (*itemDeselected)(struct WEditMenuDelegate*, WEditMenu*, void (*itemDeselected)(struct WEditMenuDelegate*, WEditMenu*,
@@ -52,6 +54,8 @@ void *WGetEditMenuItemData(WEditMenuItem *item);
void WSetEditMenuItemData(WEditMenuItem *item, void *data, void WSetEditMenuItemData(WEditMenuItem *item, void *data,
WMCallback *destroyer); WMCallback *destroyer);
void WSetEditMenuItemImage(WEditMenuItem *item, WMPixmap *pixmap);
WEditMenu *WCreateEditMenu(WMScreen *scr, char *title); WEditMenu *WCreateEditMenu(WMScreen *scr, char *title);
WEditMenu *WCreateEditMenuPad(WMWidget *parent); WEditMenu *WCreateEditMenuPad(WMWidget *parent);
@@ -63,8 +67,12 @@ WEditMenuItem *WInsertMenuItemWithTitle(WEditMenu *mPtr, int index,
WEditMenuItem *WAddMenuItemWithTitle(WEditMenu *mPtr, char *title); WEditMenuItem *WAddMenuItemWithTitle(WEditMenu *mPtr, char *title);
WEditMenuItem *WGetEditMenuItem(WEditMenu *mPtr, int index);
void WSetEditMenuTitle(WEditMenu *mPtr, char *title); void WSetEditMenuTitle(WEditMenu *mPtr, char *title);
char *WGetEditMenuTitle(WEditMenu *mPtr);
void WSetEditMenuAcceptsDrop(WEditMenu *mPtr, Bool flag); void WSetEditMenuAcceptsDrop(WEditMenu *mPtr, Bool flag);
void WSetEditMenuSubmenu(WEditMenu *mPtr, WEditMenuItem *item, void WSetEditMenuSubmenu(WEditMenu *mPtr, WEditMenuItem *item,