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.