This is gui_build.c in view mode; [Download] [Up]
/* $Id: gui_build.c,v 2.7 1993/06/04 14:46:52 klute Exp klute $ */
/*
* Copyright 1993 Rainer Klute <klute@irb.informatik.uni-dortmund.de>
*
* Permission to use, copy, modify, distribute, and sell this software and
* its documentation for any purpose is hereby granted without fee, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation. The author makes no representations about the suitability
* of this software for any purpose. It is provided "as is" without express
* or implied warranty.
*
*/
#include <string.h>
#include <Xm/Xm.h>
#include <Xm/CascadeB.h>
#include <Xm/DialogS.h>
#include <Xm/Form.h>
#include <Xm/Frame.h>
#include <Xm/Label.h>
#include <Xm/List.h>
#include <Xm/MainW.h>
#include <Xm/PanedW.h>
#include <Xm/PushB.h>
#include <Xm/RowColumn.h>
#include <Xm/Separator.h>
#include <Xm/Text.h>
#include "Posthorn64.xbm"
#include "Posthorn48.xbm"
#include "batch.h"
#include "patchlevel.h"
#include "gui.h"
#include "ui.h"
#include "gui_batch.h"
#include "gui_utils.h"
#include "message.h"
static XtCallbackProc PositionDialog (Widget widget, XtPointer clientData,
XtPointer callData);
/*
* "CreateMainWindow" erstellt das Hauptfenster des Postleitzahlenprogramms.
*/
Widget CreateMainWindow (Display *display, ConversionData *cd)
{
Widget applicationShell, mainWindow;
Widget menubar, commandPulldown, batchPulldown, commands, batch;
Widget mainForm, inputForm, plzForm, listForm, messageForm;
Widget fieldForm;
Widget widget;
Screen *s;
Pixmap p;
char title[200];
unsigned long posthornForeground, posthornBackground;
s = DefaultScreenOfDisplay (display);
strcpy (title, "Das Postleitzahlenbuch (Version ");
strcat (title, RELEASE);
strcat (title, ")");
applicationShell =
XtVaAppCreateShell ("xplz", "XPlz", applicationShellWidgetClass,
display,
XmNtitle, title,
NULL);
/* Main window: */
mainWindow =
XtVaCreateManagedWidget ("mainWindow", xmMainWindowWidgetClass,
applicationShell, NULL);
/* Menu bar: */
menubar =
XmCreateMenuBar (mainWindow, "menuBar", (ArgList) 0, (Cardinal) 0);
XtManageChild (menubar);
/* Menu: */
commandPulldown =
XmCreatePulldownMenu (menubar, "commandPulldown", (ArgList) 0,
(Cardinal) 0);
widget =
XtVaCreateManagedWidget ("menuSearch", xmPushButtonWidgetClass,
commandPulldown, NULL);
XtAddCallback (widget, XmNactivateCallback,
(XtCallbackProc) ConvertCallback, cd);
cd->gc->menuStrassenverzeichnis =
XtVaCreateManagedWidget ("menuStreetList", xmPushButtonWidgetClass,
commandPulldown,
XmNsensitive, False,
NULL);
XtAddCallback (cd->gc->menuStrassenverzeichnis, XmNactivateCallback,
(XtCallbackProc) StrassenverzeichnisCallback, cd);
widget =
XtVaCreateManagedWidget ("sep", xmSeparatorWidgetClass, commandPulldown,
NULL);
widget =
XtVaCreateManagedWidget ("menuQuit", xmPushButtonWidgetClass,
commandPulldown, NULL);
XtAddCallback (widget, XmNactivateCallback, (XtCallbackProc) QuitCallback,
NULL);
commands = XtVaCreateManagedWidget ("menuCommands",
xmCascadeButtonWidgetClass,
menubar,
XmNsubMenuId, commandPulldown,
NULL);
batchPulldown =
XmCreatePulldownMenu (menubar, "batchPulldown", (ArgList) 0, (Cardinal) 0);
cd->gc->menuBatchStart =
XtVaCreateManagedWidget ("menuBatchStart", xmPushButtonWidgetClass,
batchPulldown,
XmNsensitive, True,
NULL);
XtAddCallback (cd->gc->menuBatchStart, XmNactivateCallback,
(XtCallbackProc) BatchStart, cd);
cd->gc->menuBatchContinue =
XtVaCreateManagedWidget ("menuBatchContinue", xmPushButtonWidgetClass,
batchPulldown,
XmNsensitive, False,
NULL);
XtAddCallback (cd->gc->menuBatchContinue, XmNactivateCallback,
(XtCallbackProc) BatchContinue, (XtPointer) cd);
XtVaCreateManagedWidget ("separator", xmSeparatorWidgetClass,
batchPulldown, NULL);
cd->gc->menuBatchAbort =
XtVaCreateManagedWidget ("menuBatchAbort", xmPushButtonWidgetClass,
batchPulldown,
XmNsensitive, False,
NULL);
XtAddCallback (cd->gc->menuBatchAbort, XmNactivateCallback,
(XtCallbackProc) BatchAbort, cd);
batch = XtVaCreateManagedWidget ("menuBatch",
xmCascadeButtonWidgetClass,
menubar,
XmNsubMenuId, batchPulldown,
NULL);
/* Alles weitere steckt in einem Form-Widget, ... */
mainForm =
XtVaCreateManagedWidget ("mainForm", xmFormWidgetClass, mainWindow, NULL);
/* ... das sich wiederum in vier weitere Form-Widgets unterteilt. */
inputForm =
XtVaCreateManagedWidget ("inputForm", xmFormWidgetClass, mainForm, NULL);
plzForm =
XtVaCreateManagedWidget ("plzForm", xmFormWidgetClass, mainForm, NULL);
listForm =
XtVaCreateManagedWidget ("listForm", xmFormWidgetClass, mainForm, NULL);
messageForm =
XtVaCreateManagedWidget ("messageForm", xmFormWidgetClass, mainForm, NULL);
/* Posthorn und Überschrift: */
widget =
XtVaCreateManagedWidget ("titleForm", xmFormWidgetClass, inputForm, NULL);
widget =
XtVaCreateManagedWidget ("posthorn", xmLabelWidgetClass, widget,
XmNlabelType, XmPIXMAP,
NULL);
XtVaGetValues (widget, XmNforeground, &posthornForeground,
XmNbackground, &posthornBackground, NULL);
p = XCreatePixmapFromBitmapData (display, RootWindowOfScreen (s),
Posthorn64_bits, Posthorn64_width,
Posthorn64_height, posthornForeground,
posthornBackground, PlanesOfScreen (s));
XtVaSetValues (widget, XmNlabelPixmap, p, NULL);
{
XmString s1;
s1 = XmStringCreate ("Das", "gross");
s1 = StringCat (s1, XmStringSeparatorCreate ());
s1 = StringCat (s1, XmStringCreate ("Postleitzahlenbuch", "gross"));
s1 = StringCat (s1, XmStringSeparatorCreate ());
s1 =
StringCat (s1, XmStringCreate ("© 1993 Rainer Klute, ", "klein"));
s1 =
StringCat (s1, XmStringCreate ("Universität Dortmund, IRB", "klein"));
XtVaCreateManagedWidget ("plzbuch", xmLabelWidgetClass,
XtParent (widget),
XmNlabelString, s1,
NULL);
XmStringFree (s1);
}
/* Eingabebereich für Straße und Ort: */
widget = XtVaCreateManagedWidget ("inputFrame", xmFrameWidgetClass,
inputForm, NULL);
fieldForm =
XtVaCreateManagedWidget ("fieldForm", xmFormWidgetClass,
widget, NULL);
XtVaCreateManagedWidget ("lstrasse", xmLabelWidgetClass, fieldForm, NULL);
XtVaCreateManagedWidget ("lort", xmLabelWidgetClass, fieldForm, NULL);
cd->gc->strasse =
XtVaCreateManagedWidget ("strasse", xmTextWidgetClass, fieldForm, NULL);
XtAddCallback (cd->gc->strasse, XmNactivateCallback,
(XtCallbackProc) ConvertCallback, cd);
cd->gc->ort =
XtVaCreateManagedWidget ("ort", xmTextWidgetClass, fieldForm, NULL);
XtAddCallback (cd->gc->ort, XmNactivateCallback,
(XtCallbackProc) ConvertCallback, cd);
/* Ausgabefeld für die neue Postleitzahl: */
widget =
XtVaCreateManagedWidget ("plzFrame", xmFrameWidgetClass, plzForm,
NULL);
cd->gc->plz_neu =
XtVaCreateManagedWidget ("plzneu", xmLabelWidgetClass, widget, NULL);
/* Auswahlliste: */
widget =
XtVaCreateManagedWidget ("listFrame", xmFrameWidgetClass, listForm,
NULL);
cd->gc->list = XmCreateScrolledList (widget, "list", NULL, 0);
XtAddCallback (cd->gc->list, XmNdefaultActionCallback,
(XtCallbackProc) ListActivated, cd);
XtManageChild (cd->gc->list);
/* Hinweistexte: */
widget =
XtVaCreateManagedWidget ("messageFrame", xmFrameWidgetClass, messageForm,
NULL);
cd->gc->messages =
XmCreateScrolledText (widget, "messages", (ArgList) 0, (Cardinal) 0);
XtVaSetValues (cd->gc->messages, XmNtraversalOn, False, NULL);
XtManageChild (cd->gc->messages);
XtRealizeWidget (applicationShell);
{
XWMHints *wmHints = XAllocWMHints ();
if (wmHints == (XWMHints *) 0)
{
Message ("Speichermangel in \"main\"\n");
exit (-1);
}
p = XCreateBitmapFromData (display, RootWindowOfScreen (s),
Posthorn48_bits, Posthorn48_width,
Posthorn48_height);
wmHints->flags = IconPixmapHint;
wmHints->icon_pixmap = p;
XSetWMHints (display, XtWindow (applicationShell), wmHints);
XtFree ((void *) wmHints);
}
return applicationShell;
}
/*
* "CreateBatchDialog" baut den Dialog für die Stapelverarbeitung auf.
*/
Widget CreateBatchDialog (Widget widget, ConversionData *cd)
{
Widget dialog, pane, form;
Widget control;
Widget w;
char help[100];
Widget pulldown;
Widget fehlerMenu, ausgabeFormatMenu, verkehrsgebietMenu;
Arg args[10];
Cardinal argcount;
/* DialogShell */
dialog =
XtVaCreatePopupShell ("batch_dialog", xmDialogShellWidgetClass,
TopLevelShell (cd->gc->ort),
XmNdeleteResponse, XmDESTROY,
NULL);
XtAddCallback (dialog, XmNpopupCallback, (XtCallbackProc) PositionDialog,
(XtPointer) widget);
pane =
XtVaCreateWidget ("pane", xmPanedWindowWidgetClass, dialog,
NULL);
control =
XtVaCreateManagedWidget ("control", xmFormWidgetClass, pane, NULL);
XtVaCreateManagedWidget ("labelInputFile", xmLabelWidgetClass, control,
NULL);
XtVaCreateManagedWidget ("labelOutputFile", xmLabelWidgetClass, control,
NULL);
XtVaCreateManagedWidget ("labelErrorFile", xmLabelWidgetClass, control,
NULL);
cd->gc->inputFile =
XtVaCreateManagedWidget ("inputFile", xmTextWidgetClass, control,
XmNvalue, cd->batch->inputFile,
XmNmaxLength, 256,
NULL);
cd->gc->outputFile =
XtVaCreateManagedWidget ("outputFile", xmTextWidgetClass, control,
XmNvalue, cd->batch->outputFile,
XmNmaxLength, 256,
NULL);
cd->gc->errorFile =
XtVaCreateManagedWidget ("errorFile", xmTextWidgetClass, control,
XmNvalue, cd->batch->errorFile,
XmNmaxLength, 256,
NULL);
XtVaCreateManagedWidget ("labelSeparator", xmLabelWidgetClass, control,
NULL);
if (cd->batch->separator != '\0')
{
help[0] = cd->batch->separator;
help[1] = '\0';
}
else
help[0] = '\0';
cd->gc->separator =
XtVaCreateManagedWidget ("separator", xmTextWidgetClass, control,
XmNmaxLength, 1,
XmNvalue, help,
XmNwidth, (Dimension) 40,
NULL);
XtVaCreateManagedWidget ("labelColumnStreet", xmLabelWidgetClass, control,
NULL);
if (cd->batch->columnStreet > 0)
sprintf (help, "%d", cd->batch->columnStreet);
else
help[0] = '\0';
cd->gc->columnStreet =
XtVaCreateManagedWidget ("columnStreet", xmTextWidgetClass, control,
XmNmaxLength, 3,
XmNvalue, help,
XmNwidth, (Dimension) 40,
NULL);
XtVaCreateManagedWidget ("labelColumnPlz", xmLabelWidgetClass, control,
NULL);
if (cd->batch->columnPlz > 0)
sprintf (help, "%d", cd->batch->columnPlz);
else
help[0] = '\0';
cd->gc->columnPlz =
XtVaCreateManagedWidget ("columnPlz", xmTextWidgetClass, control,
XmNmaxLength, 3,
XmNvalue, help,
XmNwidth, (Dimension) 40,
NULL);
XtVaCreateManagedWidget ("labelColumnPlace", xmLabelWidgetClass, control,
NULL);
if (cd->batch->columnPlace > 0)
sprintf (help, "%d", cd->batch->columnPlace);
else
help[0] = '\0';
cd->gc->columnPlace =
XtVaCreateManagedWidget ("columnPlace", xmTextWidgetClass, control,
XmNmaxLength, 3,
XmNvalue, help,
XmNwidth, (Dimension) 40,
NULL);
/* Anhalten bei Fehlern? */
pulldown = XmCreatePulldownMenu (control, "fehlerPulldown", (Arg *) 0,
(Cardinal) 0);
w =
XtVaCreateManagedWidget ("fehlerAnhalten", xmPushButtonWidgetClass,
pulldown, NULL);
XtAddCallback (w, XmNactivateCallback,
(XtCallbackProc) SetFehlerAnhalten,
(XtPointer) cd);
w =
XtVaCreateManagedWidget ("fehlerWeiter", xmPushButtonWidgetClass,
pulldown, NULL);
XtAddCallback (w, XmNactivateCallback,
(XtCallbackProc) SetFehlerWeiter,
(XtPointer) cd);
argcount = 0;
XtSetArg (args[argcount], XmNsubMenuId, pulldown);
argcount++;
fehlerMenu = XmCreateOptionMenu (control, "fehlerMenu", args, argcount);
XtManageChild (fehlerMenu);
/* Ausgabezeichensatz */
pulldown = XmCreatePulldownMenu (control, "ausgabeFormatPulldown",
(Arg *) 0, (Cardinal) 0);
w =
XtVaCreateManagedWidget ("ausgabeFormatIso", xmPushButtonWidgetClass,
pulldown, NULL);
XtAddCallback (w, XmNactivateCallback,
(XtCallbackProc) SetAusgabeFormatIso,
(XtPointer) cd);
w =
XtVaCreateManagedWidget ("ausgabeFormatIbm", xmPushButtonWidgetClass,
pulldown, NULL);
XtAddCallback (w, XmNactivateCallback,
(XtCallbackProc) SetAusgabeFormatIbm,
(XtPointer) cd);
w =
XtVaCreateManagedWidget ("ausgabeFormatAtari", xmPushButtonWidgetClass,
pulldown, NULL);
XtAddCallback (w, XmNactivateCallback,
(XtCallbackProc) SetAusgabeFormatAtari,
(XtPointer) cd);
argcount = 0;
XtSetArg (args[argcount], XmNsubMenuId, pulldown);
argcount++;
ausgabeFormatMenu = XmCreateOptionMenu (control, "ausgabeFormatMenu", args,
argcount);
XtManageChild (ausgabeFormatMenu);
/* Voreinstellung für Verkehrsgebiet: */
pulldown = XmCreatePulldownMenu (control, "verkehrsgebietPulldown",
(Arg *) 0, (Cardinal) 0);
w =
XtVaCreateManagedWidget ("verkehrsgebietWest", xmPushButtonWidgetClass,
pulldown, NULL);
XtAddCallback (w, XmNactivateCallback,
(XtCallbackProc) SetVerkehrsgebietWest,
(XtPointer) cd);
w =
XtVaCreateManagedWidget ("verkehrsgebietOst", xmPushButtonWidgetClass,
pulldown, NULL);
XtAddCallback (w, XmNactivateCallback,
(XtCallbackProc) SetVerkehrsgebietOst,
(XtPointer) cd);
argcount = 0;
XtSetArg (args[argcount], XmNsubMenuId, pulldown);
argcount++;
verkehrsgebietMenu = XmCreateOptionMenu (control, "verkehrsgebietMenu",
args, argcount);
XtManageChild (verkehrsgebietMenu);
form = XtVaCreateManagedWidget ("action", xmFormWidgetClass, pane, NULL);
w = XtVaCreateManagedWidget ("ok", xmPushButtonWidgetClass, form, NULL);
XtAddCallback (w, XmNactivateCallback, (XtCallbackProc) BatchOk,
(XtPointer) cd);
w = XtVaCreateManagedWidget ("cancel", xmPushButtonWidgetClass, form, NULL);
XtAddCallback (w, XmNactivateCallback, (XtCallbackProc) BatchCancel, NULL);
XtManageChild (pane);
return dialog;
}
static XtCallbackProc PositionDialog (Widget widget, XtPointer clientData,
XtPointer callData)
{
int x, y;
unsigned int width, height;
unsigned int borderWidth, depth;
Widget menu = (Widget) clientData;
Window rootWindow;
Window child;
Position widgetX, widgetY;
Dimension widgetWidth, widgetHeight;
XGetGeometry (XtDisplay (menu), XtWindow (menu), &rootWindow, &x, &y,
&width, &height, &borderWidth, &depth);
XTranslateCoordinates (XtDisplay (menu), XtWindow (menu), rootWindow, x, y,
&x, &y, &child);
x += width / 2;
y += height / 2;
XtVaGetValues (widget, XmNwidth, &widgetWidth, XmNheight, &widgetHeight,
NULL);
x -= widgetWidth / 2;
y -= widgetHeight / 2;
if (x < 0)
x = 0;
if (y < 0)
y = 0;
widgetX = x;
widgetY = y;
XtVaSetValues (widget, XmNx, widgetX, XmNy, widgetY, NULL);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.