mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-28 17:32:29 +01:00
new menu editor code
This commit is contained in:
@@ -24,10 +24,8 @@ WPrefs_SOURCES = \
|
|||||||
Icons.c \
|
Icons.c \
|
||||||
KeyboardSettings.c \
|
KeyboardSettings.c \
|
||||||
KeyboardShortcuts.c \
|
KeyboardShortcuts.c \
|
||||||
Menu.c \
|
|
||||||
MenuPreferences.c \
|
MenuPreferences.c \
|
||||||
MouseSettings.c \
|
MouseSettings.c \
|
||||||
NoMenuAlert.c \
|
|
||||||
Paths.c \
|
Paths.c \
|
||||||
Preferences.c \
|
Preferences.c \
|
||||||
TexturePanel.c \
|
TexturePanel.c \
|
||||||
@@ -40,7 +38,6 @@ WPrefs_SOURCES = \
|
|||||||
editmenu.c \
|
editmenu.c \
|
||||||
editmenu.h \
|
editmenu.h \
|
||||||
imagebrowser.c \
|
imagebrowser.c \
|
||||||
MenuGuru.c \
|
|
||||||
xmodifier.c
|
xmodifier.c
|
||||||
|
|
||||||
CPPFLAGS = @CPPFLAGS@ -DLOCALEDIR=\"$(NLSDIR)\"
|
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