mirror of
https://github.com/gryf/wmaker.git
synced 2026-01-06 13:54:12 +01:00
new menu editor code
This commit is contained in:
@@ -24,10 +24,8 @@ WPrefs_SOURCES = \
|
||||
Icons.c \
|
||||
KeyboardSettings.c \
|
||||
KeyboardShortcuts.c \
|
||||
Menu.c \
|
||||
MenuPreferences.c \
|
||||
MouseSettings.c \
|
||||
NoMenuAlert.c \
|
||||
Paths.c \
|
||||
Preferences.c \
|
||||
TexturePanel.c \
|
||||
@@ -40,7 +38,6 @@ WPrefs_SOURCES = \
|
||||
editmenu.c \
|
||||
editmenu.h \
|
||||
imagebrowser.c \
|
||||
MenuGuru.c \
|
||||
xmodifier.c
|
||||
|
||||
CPPFLAGS = @CPPFLAGS@ -DLOCALEDIR=\"$(NLSDIR)\"
|
||||
|
||||
2505
WPrefs.app/Menu.c
2505
WPrefs.app/Menu.c
File diff suppressed because it is too large
Load Diff
@@ -1,502 +0,0 @@
|
||||
/* MenuGuru.c- OPEN_MENU definition "guru" assistant
|
||||
*
|
||||
* WPrefs - Window Maker Preferences Program
|
||||
*
|
||||
* Copyright (c) 1998 Alfredo K. Kojima
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
* USA.
|
||||
*/
|
||||
|
||||
|
||||
#include "WPrefs.h"
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
|
||||
|
||||
typedef struct _MenuGuru {
|
||||
WMWindow *win;
|
||||
|
||||
WMButton *nextB;
|
||||
WMButton *backB;
|
||||
WMButton *cancelB;
|
||||
|
||||
WMLabel *typetopL;
|
||||
WMButton *typefB;
|
||||
WMButton *typepB;
|
||||
WMButton *typedB;
|
||||
|
||||
WMLabel *pathtopL;
|
||||
WMTextField *pathT;
|
||||
WMButton *pathB;
|
||||
WMLabel *pathbotL;
|
||||
|
||||
WMLabel *pipetopL;
|
||||
WMTextField *pipeT;
|
||||
WMLabel *pipebotL;
|
||||
|
||||
WMLabel *dirtopL;
|
||||
WMTextField *dirT;
|
||||
WMLabel *dirbotL;
|
||||
|
||||
WMLabel *progtopL;
|
||||
WMTextField *progT;
|
||||
WMLabel *progbotL;
|
||||
|
||||
|
||||
char ok;
|
||||
char end;
|
||||
int section;
|
||||
} MenuGuru;
|
||||
|
||||
|
||||
enum {
|
||||
GSelectType,
|
||||
GSelectFile,
|
||||
GSelectPaths,
|
||||
GSelectPipe,
|
||||
GSelectProgram,
|
||||
GDone
|
||||
};
|
||||
|
||||
|
||||
|
||||
static char*
|
||||
trimstr(char *str)
|
||||
{
|
||||
char *p = str;
|
||||
int i;
|
||||
|
||||
while (isspace(*p)) p++;
|
||||
p = wstrdup(p);
|
||||
i = strlen(p);
|
||||
while (isspace(p[i]) && i>0) {
|
||||
p[i] = 0;
|
||||
i--;
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
showPart(MenuGuru *panel, int part)
|
||||
{
|
||||
WMUnmapSubwidgets(panel->win);
|
||||
WMMapWidget(panel->nextB);
|
||||
WMMapWidget(panel->backB);
|
||||
WMMapWidget(panel->cancelB);
|
||||
|
||||
WMSetButtonEnabled(panel->backB, part!=GSelectType);
|
||||
|
||||
switch (part) {
|
||||
case GSelectType:
|
||||
WMSetWindowTitle(panel->win, _("Menu Guru - Select Type"));
|
||||
WMMapWidget(panel->typetopL);
|
||||
WMMapWidget(panel->typedB);
|
||||
WMMapWidget(panel->typepB);
|
||||
WMMapWidget(panel->typefB);
|
||||
WMSetButtonText(panel->nextB, _("Next"));
|
||||
break;
|
||||
case GSelectFile:
|
||||
WMSetWindowTitle(panel->win, _("Menu Guru - Select Menu File"));
|
||||
WMMapWidget(panel->pathtopL);
|
||||
WMMapWidget(panel->pathT);
|
||||
/* WMMapWidget(panel->pathB);*/
|
||||
WMMapWidget(panel->pathbotL);
|
||||
WMSetButtonText(panel->nextB, _("OK"));
|
||||
break;
|
||||
case GSelectPipe:
|
||||
WMSetWindowTitle(panel->win, _("Menu Guru - Select Pipe Command"));
|
||||
WMMapWidget(panel->pipetopL);
|
||||
WMMapWidget(panel->pipeT);
|
||||
WMMapWidget(panel->pipebotL);
|
||||
WMSetButtonText(panel->nextB, _("OK"));
|
||||
break;
|
||||
case GSelectPaths:
|
||||
WMSetWindowTitle(panel->win, _("Menu Guru - Select Directories"));
|
||||
WMMapWidget(panel->dirtopL);
|
||||
WMMapWidget(panel->dirT);
|
||||
WMMapWidget(panel->dirbotL);
|
||||
WMSetButtonText(panel->nextB, _("Next"));
|
||||
break;
|
||||
case GSelectProgram:
|
||||
WMSetWindowTitle(panel->win, _("Menu Guru - Select Command"));
|
||||
WMMapWidget(panel->progtopL);
|
||||
WMMapWidget(panel->progT);
|
||||
WMMapWidget(panel->progbotL);
|
||||
WMSetButtonText(panel->nextB, _("OK"));
|
||||
break;
|
||||
}
|
||||
panel->section = part;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
clickNext(WMWidget *w, void *data)
|
||||
{
|
||||
MenuGuru *panel = (MenuGuru*)data;
|
||||
char *tmp, *p;
|
||||
|
||||
switch (panel->section) {
|
||||
case GSelectType:
|
||||
if (WMGetButtonSelected(panel->typefB)) {
|
||||
showPart(panel, GSelectFile);
|
||||
} else if (WMGetButtonSelected(panel->typepB)) {
|
||||
showPart(panel, GSelectPipe);
|
||||
} else {
|
||||
showPart(panel, GSelectPaths);
|
||||
}
|
||||
break;
|
||||
case GSelectFile:
|
||||
tmp = WMGetTextFieldText(panel->pathT);
|
||||
p = trimstr(tmp); free(tmp);
|
||||
if (strlen(p)==0) {
|
||||
free(p);
|
||||
return;
|
||||
}
|
||||
free(p);
|
||||
panel->ok = 1;
|
||||
panel->end = 1;
|
||||
break;
|
||||
case GSelectPaths:
|
||||
tmp = WMGetTextFieldText(panel->dirT);
|
||||
p = trimstr(tmp); free(tmp);
|
||||
if (strlen(p)==0) {
|
||||
free(p);
|
||||
return;
|
||||
}
|
||||
free(p);
|
||||
showPart(panel, GSelectProgram);
|
||||
break;
|
||||
case GSelectPipe:
|
||||
tmp = WMGetTextFieldText(panel->pipeT);
|
||||
p = trimstr(tmp); free(tmp);
|
||||
if (strlen(p)==0) {
|
||||
free(p);
|
||||
return;
|
||||
}
|
||||
free(p);
|
||||
panel->ok = 1;
|
||||
panel->end = 1;
|
||||
break;
|
||||
case GSelectProgram:
|
||||
panel->ok = 1;
|
||||
panel->end = 1;
|
||||
break;
|
||||
default:
|
||||
panel->end = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
clickBack(WMWidget *w, void *data)
|
||||
{
|
||||
MenuGuru *panel = (MenuGuru*)data;
|
||||
int newSection;
|
||||
|
||||
switch (panel->section) {
|
||||
case GSelectFile:
|
||||
newSection = GSelectType;
|
||||
break;
|
||||
case GSelectPipe:
|
||||
newSection = GSelectType;
|
||||
break;
|
||||
case GSelectPaths:
|
||||
newSection = GSelectType;
|
||||
break;
|
||||
case GSelectProgram:
|
||||
newSection = GSelectPaths;
|
||||
break;
|
||||
default:
|
||||
newSection = panel->section;
|
||||
}
|
||||
showPart(panel, newSection);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
closeWindow(WMWidget *w, void *data)
|
||||
{
|
||||
MenuGuru *panel = (MenuGuru*)data;
|
||||
|
||||
panel->end = 1;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
createPanel(WMWindow *mainWindow, MenuGuru *panel)
|
||||
{
|
||||
panel->win = WMCreatePanelForWindow(mainWindow, "menuGuru");
|
||||
WMResizeWidget(panel->win, 370, 220);
|
||||
|
||||
panel->nextB = WMCreateCommandButton(panel->win);
|
||||
WMResizeWidget(panel->nextB, 80, 24);
|
||||
WMMoveWidget(panel->nextB, 280, 185);
|
||||
WMSetButtonText(panel->nextB, _("Next"));
|
||||
WMSetButtonAction(panel->nextB, clickNext, panel);
|
||||
|
||||
panel->backB = WMCreateCommandButton(panel->win);
|
||||
WMResizeWidget(panel->backB, 80, 24);
|
||||
WMMoveWidget(panel->backB, 195, 185);
|
||||
WMSetButtonText(panel->backB, _("Back"));
|
||||
WMSetButtonAction(panel->backB, clickBack, panel);
|
||||
|
||||
panel->cancelB = WMCreateCommandButton(panel->win);
|
||||
WMResizeWidget(panel->cancelB, 80, 24);
|
||||
WMMoveWidget(panel->cancelB, 110, 185);
|
||||
WMSetButtonText(panel->cancelB, _("Cancel"));
|
||||
WMSetButtonAction(panel->cancelB, closeWindow, panel);
|
||||
|
||||
/**/
|
||||
|
||||
panel->typetopL = WMCreateLabel(panel->win);
|
||||
WMResizeWidget(panel->typetopL, 350, 45);
|
||||
WMMoveWidget(panel->typetopL, 10, 10);
|
||||
WMSetLabelText(panel->typetopL, _("This process will help you create a "
|
||||
"submenu which definition is located in another file "
|
||||
"or is created dynamically.\nWhat do you want to use as the "
|
||||
"contents of the submenu?"));
|
||||
|
||||
panel->typefB = WMCreateRadioButton(panel->win);
|
||||
WMResizeWidget(panel->typefB, 330, 35);
|
||||
WMMoveWidget(panel->typefB, 20, 65);
|
||||
WMSetButtonText(panel->typefB, _("A file containing the menu definition "
|
||||
"in the plain text (non-property list) menu format."));
|
||||
|
||||
panel->typepB = WMCreateRadioButton(panel->win);
|
||||
WMResizeWidget(panel->typepB, 330, 35);
|
||||
WMMoveWidget(panel->typepB, 20, 105);
|
||||
WMSetButtonText(panel->typepB, _("The menu definition generated by a "
|
||||
"script/program read through a pipe."));
|
||||
|
||||
panel->typedB = WMCreateRadioButton(panel->win);
|
||||
WMResizeWidget(panel->typedB, 330, 35);
|
||||
WMMoveWidget(panel->typedB, 20, 140);
|
||||
WMSetButtonText(panel->typedB, _("The files in one or more directories."));
|
||||
|
||||
WMGroupButtons(panel->typefB, panel->typepB);
|
||||
WMGroupButtons(panel->typefB, panel->typedB);
|
||||
|
||||
WMPerformButtonClick(panel->typefB);
|
||||
|
||||
/**/
|
||||
|
||||
panel->pathtopL = WMCreateLabel(panel->win);
|
||||
WMResizeWidget(panel->pathtopL, 330, 20);
|
||||
WMMoveWidget(panel->pathtopL, 20, 25);
|
||||
WMSetLabelText(panel->pathtopL, _("Type the path for the menu file:"));
|
||||
|
||||
panel->pathT = WMCreateTextField(panel->win);
|
||||
WMResizeWidget(panel->pathT, 330, 20);
|
||||
WMMoveWidget(panel->pathT, 20, 50);
|
||||
/*
|
||||
panel->pathB = WMCreateCommandButton(panel->win);
|
||||
WMResizeWidget(panel->pathB, 70, 24);
|
||||
WMMoveWidget(panel->pathB, 275, 75);
|
||||
WMSetButtonText(panel->pathB, _("Browse"));
|
||||
*/
|
||||
|
||||
panel->pathbotL = WMCreateLabel(panel->win);
|
||||
WMResizeWidget(panel->pathbotL, 330, 80);
|
||||
WMMoveWidget(panel->pathbotL, 20, 100);
|
||||
WMSetLabelText(panel->pathbotL, _("The menu file must contain a menu "
|
||||
"in the plain text menu file format. This format is "
|
||||
"described in the menu files included with WindowMaker, "
|
||||
"probably at ~/GNUstep/Library/WindowMaker/menu"));
|
||||
|
||||
/**/
|
||||
|
||||
panel->pipetopL = WMCreateLabel(panel->win);
|
||||
WMResizeWidget(panel->pipetopL, 330, 32);
|
||||
WMMoveWidget(panel->pipetopL, 20, 20);
|
||||
WMSetLabelText(panel->pipetopL, _("Type the command that will generate "
|
||||
"the menu definition:"));
|
||||
|
||||
panel->pipeT = WMCreateTextField(panel->win);
|
||||
WMResizeWidget(panel->pipeT, 330, 20);
|
||||
WMMoveWidget(panel->pipeT, 20, 55);
|
||||
|
||||
panel->pipebotL = WMCreateLabel(panel->win);
|
||||
WMResizeWidget(panel->pipebotL, 330, 80);
|
||||
WMMoveWidget(panel->pipebotL, 20, 85);
|
||||
WMSetLabelText(panel->pipebotL, _("The command supplied must generate and "
|
||||
"output a valid menu definition to stdout. This definition "
|
||||
"should be in the plain text menu file format, described "
|
||||
"in the menu files included with WindowMaker, usually "
|
||||
"at ~/GNUstep/Library/WindowMaker/menu"));
|
||||
|
||||
|
||||
/**/
|
||||
|
||||
panel->dirtopL = WMCreateLabel(panel->win);
|
||||
WMResizeWidget(panel->dirtopL, 330, 32);
|
||||
WMMoveWidget(panel->dirtopL, 20, 20);
|
||||
WMSetLabelText(panel->dirtopL, _("Type the path for the directory. You "
|
||||
"can type more than one path by separating them with "
|
||||
"spaces."));
|
||||
|
||||
panel->dirT = WMCreateTextField(panel->win);
|
||||
WMResizeWidget(panel->dirT, 330, 20);
|
||||
WMMoveWidget(panel->dirT, 20, 55);
|
||||
|
||||
panel->dirbotL = WMCreateLabel(panel->win);
|
||||
WMResizeWidget(panel->dirbotL, 330, 80);
|
||||
WMMoveWidget(panel->dirbotL, 20, 85);
|
||||
WMSetLabelText(panel->dirbotL, _("The menu generated will have an item "
|
||||
"for each file in the directory. The directories can "
|
||||
"contain program executables or data files (such as "
|
||||
"jpeg images)."));
|
||||
|
||||
|
||||
/**/
|
||||
|
||||
panel->dirtopL = WMCreateLabel(panel->win);
|
||||
WMResizeWidget(panel->dirtopL, 330, 32);
|
||||
WMMoveWidget(panel->dirtopL, 20, 20);
|
||||
WMSetLabelText(panel->dirtopL, _("Type the path for the directory. You "
|
||||
"can type more than one path by separating them with "
|
||||
"spaces."));
|
||||
|
||||
panel->dirT = WMCreateTextField(panel->win);
|
||||
WMResizeWidget(panel->dirT, 330, 20);
|
||||
WMMoveWidget(panel->dirT, 20, 55);
|
||||
|
||||
panel->dirbotL = WMCreateLabel(panel->win);
|
||||
WMResizeWidget(panel->dirbotL, 330, 80);
|
||||
WMMoveWidget(panel->dirbotL, 20, 85);
|
||||
WMSetLabelText(panel->dirbotL, _("The menu generated will have an item "
|
||||
"for each file in the directory. The directories can "
|
||||
"contain program executables or data files (such as "
|
||||
"jpeg images)."));
|
||||
|
||||
|
||||
/**/
|
||||
|
||||
panel->dirtopL = WMCreateLabel(panel->win);
|
||||
WMResizeWidget(panel->dirtopL, 330, 32);
|
||||
WMMoveWidget(panel->dirtopL, 20, 20);
|
||||
WMSetLabelText(panel->dirtopL, _("Type the path for the directory. You "
|
||||
"can type more than one path by separating them with "
|
||||
"spaces."));
|
||||
|
||||
panel->dirT = WMCreateTextField(panel->win);
|
||||
WMResizeWidget(panel->dirT, 330, 20);
|
||||
WMMoveWidget(panel->dirT, 20, 60);
|
||||
|
||||
panel->dirbotL = WMCreateLabel(panel->win);
|
||||
WMResizeWidget(panel->dirbotL, 330, 80);
|
||||
WMMoveWidget(panel->dirbotL, 20, 85);
|
||||
WMSetLabelText(panel->dirbotL, _("The menu generated will have an item "
|
||||
"for each file in the directory. The directories can "
|
||||
"contain program executables or data files (such as "
|
||||
"jpeg images)."));
|
||||
|
||||
/**/
|
||||
|
||||
panel->progtopL = WMCreateLabel(panel->win);
|
||||
WMResizeWidget(panel->progtopL, 330, 48);
|
||||
WMMoveWidget(panel->progtopL, 20, 10);
|
||||
WMSetLabelText(panel->progtopL, _("If the directory contain data files, "
|
||||
"type the command used to open these files. Otherwise, "
|
||||
"leave it in blank."));
|
||||
|
||||
panel->progT = WMCreateTextField(panel->win);
|
||||
WMResizeWidget(panel->progT, 330, 20);
|
||||
WMMoveWidget(panel->progT, 20, 60);
|
||||
|
||||
panel->progbotL = WMCreateLabel(panel->win);
|
||||
WMResizeWidget(panel->progbotL, 330, 72);
|
||||
WMMoveWidget(panel->progbotL, 20, 90);
|
||||
WMSetLabelText(panel->progbotL, _("Each file in the directory will have "
|
||||
"an item and they will be opened with the supplied command."
|
||||
"For example, if the directory contains image files and "
|
||||
"the command is \"xv -root\", each file in the directory "
|
||||
"will have a menu item like \"xv -root imagefile\"."));
|
||||
|
||||
WMRealizeWidget(panel->win);
|
||||
}
|
||||
|
||||
|
||||
|
||||
char*
|
||||
OpenMenuGuru(WMWindow *mainWindow)
|
||||
{
|
||||
WMScreen *scr = WMWidgetScreen(mainWindow);
|
||||
MenuGuru panel;
|
||||
char *text, *p, *dirs;
|
||||
|
||||
createPanel(mainWindow, &panel);
|
||||
WMSetWindowCloseAction(panel.win, closeWindow, &panel);
|
||||
|
||||
showPart(&panel, GSelectType);
|
||||
|
||||
WMMapWidget(panel.win);
|
||||
|
||||
panel.ok = 0;
|
||||
panel.end = 0;
|
||||
while (!panel.end) {
|
||||
XEvent ev;
|
||||
WMNextEvent(WMScreenDisplay(scr), &ev);
|
||||
WMHandleEvent(&ev);
|
||||
}
|
||||
|
||||
text = NULL;
|
||||
if (panel.ok) {
|
||||
switch (panel.section) {
|
||||
case GSelectFile:
|
||||
text = WMGetTextFieldText(panel.pathT);
|
||||
break;
|
||||
case GSelectPipe:
|
||||
text = WMGetTextFieldText(panel.pipeT);
|
||||
p = trimstr(text); free(text);
|
||||
if (p[0]!='|') {
|
||||
text = wmalloc(strlen(p)+4);
|
||||
strcpy(text, "| ");
|
||||
strcat(text, p);
|
||||
free(p);
|
||||
} else {
|
||||
text = p;
|
||||
}
|
||||
break;
|
||||
case GSelectProgram:
|
||||
dirs = WMGetTextFieldText(panel.dirT);
|
||||
text = WMGetTextFieldText(panel.progT);
|
||||
p = trimstr(text); free(text);
|
||||
if (strlen(p)==0) {
|
||||
free(p);
|
||||
text = dirs;
|
||||
} else {
|
||||
text = wmalloc(strlen(dirs)+16+strlen(p));
|
||||
sprintf(text, "%s WITH %s", dirs, p);
|
||||
free(dirs);
|
||||
free(p);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
WMDestroyWidget(panel.win);
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,141 +0,0 @@
|
||||
/* NoMenuAlert.c - warn user that menu can't be edited with WPrefs
|
||||
*
|
||||
* WPrefs - Window Maker Preferences Program
|
||||
*
|
||||
* Copyright (c) 1999 Alfredo K. Kojima
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
* USA.
|
||||
*/
|
||||
|
||||
|
||||
#include "WPrefs.h"
|
||||
|
||||
|
||||
typedef struct NoMenuPanel {
|
||||
WMWindow *wwin;
|
||||
|
||||
WMLabel *text;
|
||||
|
||||
WMButton *copyBtn;
|
||||
WMButton *keepBtn;
|
||||
|
||||
int finished;
|
||||
int copy;
|
||||
} NoMenuPanel;
|
||||
|
||||
|
||||
#define MESSAGE_TEXT \
|
||||
" The menu that is being used now could not be opened. "\
|
||||
"This either means that there is a syntax error in it or that "\
|
||||
"the menu is in a format not supported by WPrefs (WPrefs only "\
|
||||
"supports property list menus).\n"\
|
||||
" If you want to keep using the current menu, please read "\
|
||||
"the '%s/%s' file, press 'Keep Current Menu' and edit it with a "\
|
||||
"text editor.\n"\
|
||||
" If you want to use this editor, press 'Copy Default Menu'. "\
|
||||
"It will copy the default menu and will instruct Window Maker "\
|
||||
"to use it instead of the current one.\n"\
|
||||
" If you want more flexibility, keep using the current one "\
|
||||
"as it allows you to use C preprocessor (cpp) macros, while being "\
|
||||
"easy to edit. Window Maker supports both formats."
|
||||
|
||||
|
||||
static void
|
||||
closeCallback(WMWidget *self, void *data)
|
||||
{
|
||||
NoMenuPanel *panel = (NoMenuPanel*)data;
|
||||
|
||||
panel->finished = True;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
buttonCallback(WMWidget *self, void *data)
|
||||
{
|
||||
NoMenuPanel *panel = (NoMenuPanel*)data;
|
||||
|
||||
panel->finished = True;
|
||||
if (self == panel->keepBtn)
|
||||
panel->copy = False;
|
||||
else
|
||||
panel->copy = True;
|
||||
}
|
||||
|
||||
|
||||
Bool
|
||||
AskMenuCopy(WMWindow *wwin)
|
||||
{
|
||||
NoMenuPanel panel;
|
||||
char buffer[2048];
|
||||
|
||||
panel.wwin = WMCreatePanelForWindow(wwin, "noMenuAlert");
|
||||
WMResizeWidget(panel.wwin, 430, 260);
|
||||
WMSetWindowTitle(panel.wwin, "Warning");
|
||||
WMSetWindowCloseAction(panel.wwin, closeCallback, &panel);
|
||||
|
||||
panel.text = WMCreateLabel(panel.wwin);
|
||||
WMResizeWidget(panel.text, 370, 200);
|
||||
WMMoveWidget(panel.text, 30, 20);
|
||||
|
||||
sprintf(buffer,
|
||||
_(" The menu that is being used now could not be opened. "
|
||||
"This either means that there is a syntax error in it or that "
|
||||
"the menu is in a format not supported by WPrefs (WPrefs only "
|
||||
"supports property list menus).\n"
|
||||
" If you want to keep using the current menu, please read "
|
||||
"the '%s/%s' file, press 'Keep Current Menu' and edit it with a "
|
||||
"text editor.\n"
|
||||
" If you want to use this editor, press 'Copy Default Menu'. "
|
||||
"It will copy the default menu and will instruct Window Maker "
|
||||
"to use it instead of the current one.\n"
|
||||
" If you want more flexibility, keep using the current one "
|
||||
"as it allows you to use C preprocessor (cpp) macros, while being "
|
||||
"easy to edit. Window Maker supports both formats."),
|
||||
wusergnusteppath(), "Library/WindowMaker/README");
|
||||
WMSetLabelText(panel.text, buffer);
|
||||
|
||||
panel.copyBtn = WMCreateCommandButton(panel.wwin);
|
||||
WMResizeWidget(panel.copyBtn, 180, 24);
|
||||
WMMoveWidget(panel.copyBtn, 30, 225);
|
||||
WMSetButtonText(panel.copyBtn, _("Copy Default Menu"));
|
||||
WMSetButtonAction(panel.copyBtn, buttonCallback, &panel);
|
||||
|
||||
panel.keepBtn = WMCreateCommandButton(panel.wwin);
|
||||
WMResizeWidget(panel.keepBtn, 180, 24);
|
||||
WMMoveWidget(panel.keepBtn, 225, 225);
|
||||
WMSetButtonText(panel.keepBtn, _("Keep Current Menu"));
|
||||
WMSetButtonAction(panel.keepBtn, buttonCallback, &panel);
|
||||
|
||||
WMMapSubwidgets(panel.wwin);
|
||||
WMRealizeWidget(panel.wwin);
|
||||
WMMapWidget(panel.wwin);
|
||||
|
||||
panel.finished = False;
|
||||
panel.copy = False;
|
||||
|
||||
while (!panel.finished) {
|
||||
XEvent event;
|
||||
|
||||
WMNextEvent(WMScreenDisplay(WMWidgetScreen(panel.wwin)), &event);
|
||||
WMHandleEvent(&event);
|
||||
}
|
||||
|
||||
WMDestroyWidget(panel.wwin);
|
||||
|
||||
return panel.copy;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user