1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-29 09:52:29 +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;
char *label;
WMPixmap *pixmap; /* pixmap to show at left */
void *data;
WMCallback *destroyData;
@@ -167,7 +168,6 @@ char *WGetEditMenuItemTitle(WEditMenuItem *item)
return item->label;
}
void *WGetEditMenuItemData(WEditMenuItem *item)
{
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
@@ -196,7 +202,7 @@ paintEditMenuItem(WEditMenuItem *iPtr)
if (!iPtr->view->flags.realized)
return;
color = scr->black;
if (iPtr->flags.isTitle && !iPtr->flags.isHighlighted) {
color = scr->white;
@@ -210,7 +216,12 @@ paintEditMenuItem(WEditMenuItem *iPtr)
WMDrawString(scr, win, WMColorGC(color), font, 5, 3, 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 */
XDrawLine(scr->display,win,WMColorGC(scr->darkGray),
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 unmapMenu(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*
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
WSetEditMenuAcceptsDrop(WEditMenu *mPtr, Bool flag)
{
@@ -650,7 +683,7 @@ closeMenuAction(WMWidget *w, void *data)
WMAddIdleHandler(WMDestroyWidget, menu->closeB);
menu->closeB = NULL;
WMUnmapWidget(menu);
unmapMenu(menu);
}
@@ -728,6 +761,9 @@ updateMenuContents(WEditMenu *mPtr)
W_ResizeView(mPtr->view, newW, newH+1);
if (mPtr->closeB)
WMMoveWidget(mPtr->closeB, newW - 20, 3);
newW -= 2*offs;
i = 0;
@@ -869,6 +905,12 @@ stopEditItem(WEditMenu *menu, Bool apply)
menu->selectedItem->label = wstrdup(text);
updateMenuContents(menu);
if (menu->delegate && menu->delegate->itemEdited) {
(*menu->delegate->itemEdited)(menu->delegate, menu,
menu->selectedItem);
}
}
WMUnmapWidget(menu->tfield);
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
dragItem(WEditMenu *menu, WEditMenuItem *item)
{
@@ -1237,7 +1293,7 @@ dragItem(WEditMenu *menu, WEditMenuItem *item)
W_RealizeView(dview);
if (menu->flags.isFactory) {
dritem = WCreateEditMenuItem(menu, item->label, False);
dritem = duplicateItem(item);
W_ReparentView(dritem->view, dview, 0, 0);
WMResizeWidget(dritem, oldSize.width, oldSize.height);
@@ -1298,12 +1354,12 @@ dragItem(WEditMenu *menu, WEditMenuItem *item)
Bool rem = True;
if (!menu->flags.isFactory) {
WMUnmapWidget(dritem);
W_UnmapView(dview);
if (menu->delegate && menu->delegate->shouldRemoveItem) {
rem = (*menu->delegate->shouldRemoveItem)(menu->delegate,
menu, item);
}
WMMapWidget(dritem);
W_MapView(dview);
}
if (!rem || menu->flags.isFactory) {
@@ -1319,7 +1375,8 @@ dragItem(WEditMenu *menu, WEditMenuItem *item)
} else {
WRemoveEditMenuItem(menu, dritem);
if (menu->delegate && menu->delegate->itemCloned) {
if (menu->delegate && menu->delegate->itemCloned
&& menu->flags.isFactory) {
(*menu->delegate->itemCloned)(menu->delegate, menu,
item, dritem);
}