diff options
Diffstat (limited to 'nx-X11/programs/Xserver/hw/dmx/config/xdmxconfig.c')
-rw-r--r-- | nx-X11/programs/Xserver/hw/dmx/config/xdmxconfig.c | 1192 |
1 files changed, 0 insertions, 1192 deletions
diff --git a/nx-X11/programs/Xserver/hw/dmx/config/xdmxconfig.c b/nx-X11/programs/Xserver/hw/dmx/config/xdmxconfig.c deleted file mode 100644 index 4ba9ee5f8..000000000 --- a/nx-X11/programs/Xserver/hw/dmx/config/xdmxconfig.c +++ /dev/null @@ -1,1192 +0,0 @@ -/* $XFree86$ */ -/* - * Copyright 2002 Red Hat Inc., Durham, North Carolina. - * - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation on the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial - * portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -/* - * Authors: - * Rickard E. (Rik) Faith <faith@redhat.com> - * - */ - -#ifdef HAVE_DMX_CONFIG_H -#include <dmx-config.h> -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <X11/Intrinsic.h> -#include <X11/StringDefs.h> -#include <X11/Xaw/Form.h> -#include <X11/Xaw/Box.h> -/* #include <X11/Xaw/Paned.h> */ -#include <X11/Xaw/Command.h> -#include <X11/Xaw/SimpleMenu.h> -#include <X11/Xaw/SmeBSB.h> -#include <X11/Xaw/MenuButton.h> -#include <X11/Xaw/Viewport.h> -#include <X11/Xaw/Dialog.h> -#include <X11/keysym.h> -#include <X11/Xmu/SysUtil.h> -#include "Canvas.h" - -#include "dmxparse.h" -#include "dmxprint.h" -#include "dmxlog.h" - -extern int yyparse(void); -extern FILE *yyin; - -#define DMX_INFO "xdmxconfig v0.9\nCopyright 2002 Red Hat Inc.\n$Id: xdmxconfig.c,v 1.3 2005/10/06 02:40:41 kem Exp $" - -#define DMX_MAIN_WIDTH 800 -#define DMX_MAIN_HEIGHT 600 -#define DMX_DATA_WIDTH 200 -#define DMX_DATA_HEIGHT 200 -#define DMX_CANVAS_WIDTH 400 -#define DMX_CANVAS_HEIGHT 500 - -DMXConfigEntryPtr dmxConfigEntry; -static DMXConfigVirtualPtr dmxConfigCurrent, dmxConfigNewVirtual; -static DMXConfigDisplayPtr dmxConfigCurrentDisplay, dmxConfigNewDisplay; -static int dmxConfigGrabbed, dmxConfigGrabbedFine; -static int dmxConfigGrabbedX, dmxConfigGrabbedY; -static char *dmxConfigFilename; -static GC dmxConfigGC, dmxConfigGCRev, dmxConfigGCHL; -static int dmxConfigGCInit = 0; -static Dimension dmxConfigWidgetWidth, dmxConfigWidgetHeight; -static Dimension dmxConfigWallWidth, dmxConfigWallHeight; -static double dmxConfigScaleX, dmxConfigScaleY; -static int dmxConfigNotSaved; -static enum { - dmxConfigStateOpen, - dmxConfigStateSave -} dmxConfigState; - -/* Global widgets */ -static Widget canvas; -static Widget cnamebox, cdimbox; -static Widget openpopup, opendialog; -static Widget namebox, dimbox, rtbox, origbox; -static Widget okbutton, buttonpopup; -static Widget ecbutton, dcbutton; -static Widget ndbutton0, ndbutton1, edbutton, ddbutton; -static Widget ecpopup, ecdialog0, ecdialog1; -static Widget edpopup, eddialog0, eddialog1, eddialog2; -static Widget aboutpopup, quitpopup; - -static void dmxConfigCanvasGCs(void) -{ - Display *dpy = XtDisplay(canvas); - Window win = XtWindow(canvas); - XGCValues gcvals; - unsigned long mask; - Colormap colormap; - XColor fg, bg, hl, tmp; - - if (dmxConfigGCInit++) return; - - XtVaGetValues(canvas, XtNcolormap, &colormap, NULL); - XAllocNamedColor(XtDisplay(canvas), colormap, "black", &bg, &tmp); - XAllocNamedColor(XtDisplay(canvas), colormap, "white", &fg, &tmp); - XAllocNamedColor(XtDisplay(canvas), colormap, "red", &hl, &tmp); - - mask = (GCFunction | GCPlaneMask | GCClipMask | GCForeground | - GCBackground | GCLineWidth | GCLineStyle | GCCapStyle | - GCFillStyle); - - /* FIXME: copy this from widget */ - gcvals.function = GXcopy; - gcvals.plane_mask = AllPlanes; - gcvals.clip_mask = None; - gcvals.foreground = fg.pixel; - gcvals.background = bg.pixel; - gcvals.line_width = 0; - gcvals.line_style = LineSolid; - gcvals.cap_style = CapNotLast; - gcvals.fill_style = FillSolid; - - dmxConfigGC = XCreateGC(dpy, win, mask, &gcvals); - gcvals.foreground = hl.pixel; - dmxConfigGCHL = XCreateGC(dpy, win, mask, &gcvals); - gcvals.foreground = bg.pixel; - gcvals.background = fg.pixel; - dmxConfigGCRev = XCreateGC(dpy, win, mask, &gcvals); -} - -static void dmxConfigGetDims(int *maxWidth, int *maxHeight) -{ - DMXConfigSubPtr pt; - DMXConfigEntryPtr e; - - *maxWidth = dmxConfigWallWidth = 0; - *maxWidth = dmxConfigWallHeight = 0; - if (!dmxConfigCurrent) return; - - dmxConfigWallWidth = dmxConfigCurrent->width; - dmxConfigWallHeight = dmxConfigCurrent->height; - if (!dmxConfigWallWidth || !dmxConfigWallHeight) { - for (pt = dmxConfigCurrent->subentry; pt; pt = pt->next) { - if (pt->type == dmxConfigDisplay) { - int x = pt->display->scrnWidth + pt->display->rootXOrigin; - int y = pt->display->scrnHeight + pt->display->rootYOrigin; - if (x > dmxConfigWallWidth) dmxConfigWallWidth = x; - if (y > dmxConfigWallHeight) dmxConfigWallHeight = y; - } - } - } - /* Compute maximums */ - *maxWidth = *maxHeight = 0; - for (e = dmxConfigEntry; e; e = e->next) { - if (e->type != dmxConfigVirtual) continue; - for (pt = e->virtual->subentry; pt; pt = pt->next) { - if (pt->type == dmxConfigDisplay) { - int x = pt->display->scrnWidth + pt->display->rootXOrigin; - int y = pt->display->scrnHeight + pt->display->rootYOrigin; - if (x > *maxWidth) *maxWidth = x; - if (y > *maxHeight) *maxHeight = y; - } - } - } - if (dmxConfigWallWidth > *maxWidth) *maxWidth = dmxConfigWallWidth; - if (dmxConfigWallHeight > *maxHeight) *maxHeight = dmxConfigWallHeight; -} - -static int scalex(int x) { return (int)((x * dmxConfigScaleX) + .5); } -static int scaley(int y) { return (int)((y * dmxConfigScaleY) + .5); } -static int unscalex(int x) { return (int)((x / dmxConfigScaleX) + .5); } -static int unscaley(int y) { return (int)((y / dmxConfigScaleY) + .5); } - -static void dmxConfigDataUpdate(void) -{ - /* FIXME: could result in buffer overflows */ - char cnambuf[512]; - char cdimbuf[128]; - char nambuf[512]; - char dimbuf[128]; - char rtbuf[128]; - char offbuf[128]; - const char *name; - - if (!dmxConfigCurrent) { - XtVaSetValues(cnamebox, XtNlabel, "", XtNsensitive, False, NULL); - XtVaSetValues(cdimbox, XtNlabel, "", XtNsensitive, False, NULL); - XtVaSetValues(ecbutton, XtNsensitive, False, NULL); - XtVaSetValues(dcbutton, XtNsensitive, False, NULL); - XtVaSetValues(ndbutton0, XtNsensitive, False, NULL); - XtVaSetValues(ndbutton1, XtNsensitive, False, NULL); - } else { - name = dmxConfigCurrent->name; - XmuSnprintf(cnambuf, sizeof(cnambuf), "%s", name ? name : ""); - XmuSnprintf(cdimbuf, sizeof(cdimbuf), "%dx%d", - dmxConfigWallWidth, dmxConfigWallHeight); - XtVaSetValues(cnamebox, XtNlabel, cnambuf, XtNsensitive, True, NULL); - XtVaSetValues(cdimbox, XtNlabel, cdimbuf, XtNsensitive, True, NULL); - XtVaSetValues(ecbutton, XtNsensitive, True, NULL); - XtVaSetValues(dcbutton, XtNsensitive, True, NULL); - XtVaSetValues(ndbutton0, XtNsensitive, True, NULL); - XtVaSetValues(ndbutton1, XtNsensitive, True, NULL); - } - - if (!dmxConfigCurrentDisplay) { - XtVaSetValues(namebox, XtNlabel, "", XtNsensitive, False, NULL); - XtVaSetValues(dimbox, XtNlabel, "", XtNsensitive, False, NULL); - XtVaSetValues(rtbox, XtNlabel, "", XtNsensitive, False, NULL); - XtVaSetValues(origbox, XtNlabel, "", XtNsensitive, False, NULL); - XtVaSetValues(edbutton, XtNsensitive, False, NULL); - XtVaSetValues(ddbutton, XtNsensitive, False, NULL); - } else { - name = dmxConfigCurrentDisplay->name; - XmuSnprintf(nambuf, sizeof(nambuf), "%s", name ? name : ""); - XmuSnprintf(dimbuf, sizeof(dimbuf), "%dx%d%c%d%c%d", - dmxConfigCurrentDisplay->scrnWidth, - dmxConfigCurrentDisplay->scrnHeight, - dmxConfigCurrentDisplay->scrnXSign < 0 ? '-' : '+', - dmxConfigCurrentDisplay->scrnX, - dmxConfigCurrentDisplay->scrnYSign < 0 ? '-' : '+', - dmxConfigCurrentDisplay->scrnY); - XmuSnprintf(rtbuf, sizeof(dimbuf), "%dx%d%c%d%c%d", - dmxConfigCurrentDisplay->rootWidth, - dmxConfigCurrentDisplay->rootHeight, - dmxConfigCurrentDisplay->rootXSign < 0 ? '-' : '+', - dmxConfigCurrentDisplay->rootX, - dmxConfigCurrentDisplay->rootYSign < 0 ? '-' : '+', - dmxConfigCurrentDisplay->rootY); - XmuSnprintf(offbuf, sizeof(offbuf), "@%dx%d", - dmxConfigCurrentDisplay->rootXOrigin, - dmxConfigCurrentDisplay->rootYOrigin); - XtVaSetValues(namebox, XtNlabel, nambuf, XtNsensitive, True, NULL); - XtVaSetValues(dimbox, XtNlabel, dimbuf, XtNsensitive, True, NULL); - XtVaSetValues(rtbox, XtNlabel, rtbuf, XtNsensitive, True, NULL); - XtVaSetValues(origbox, XtNlabel, offbuf, XtNsensitive, True, NULL); - XtVaSetValues(edbutton, XtNsensitive, True, NULL); - XtVaSetValues(ddbutton, XtNsensitive, True, NULL); - } -} - -static void dmxConfigCanvasUpdate(void) -{ - DMXConfigSubPtr pt; - Display *dpy = XtDisplay(canvas); - Window win = XtWindow(canvas); - GContext gcontext = XGContextFromGC(dmxConfigGC); - XFontStruct *fs; - int w, h; - - XFillRectangle(dpy, win, dmxConfigGCRev, - 0, 0, dmxConfigWidgetWidth, dmxConfigWidgetHeight); - dmxConfigDataUpdate(); - if (!dmxConfigCurrent) return; - - w = scalex(dmxConfigWallWidth); - h = scaley(dmxConfigWallHeight); - if (w > dmxConfigWidgetWidth - 1) w = dmxConfigWidgetWidth - 1; - if (h > dmxConfigWidgetHeight - 1) h = dmxConfigWidgetHeight - 1; - XDrawRectangle(dpy, win, dmxConfigGC, 0, 0, w, h); - fs = XQueryFont(dpy, gcontext); - for (pt = dmxConfigCurrent->subentry; pt; pt = pt->next) { - int x, y, len; - int xo = 3, yo = fs->ascent + fs->descent + 2; - GC gc; - - if (pt->type != dmxConfigDisplay) continue; - gc = (pt->display == dmxConfigCurrentDisplay - ? dmxConfigGCHL - : dmxConfigGC); - x = scalex(pt->display->rootXOrigin); - y = scaley(pt->display->rootYOrigin); - w = scalex(pt->display->scrnWidth); - h = scaley(pt->display->scrnHeight); - len = pt->display->name ? strlen(pt->display->name) : 0; - if (x > dmxConfigWidgetWidth - 1) x = dmxConfigWidgetWidth - 1; - if (y > dmxConfigWidgetHeight - 1) y = dmxConfigWidgetHeight - 1; - XDrawRectangle(dpy, win, gc, x, y, w, h); - if (fs && len) { - while (len && XTextWidth(fs, pt->display->name, len) >= w - 2 * xo) - --len; - if (len) - XDrawString(dpy, win, gc, x+xo, y+yo, pt->display->name, len); - } - } - if (fs) XFreeFontInfo(NULL, fs, 0); -} - -static void dmxConfigCanvasDraw(Region region) -{ - Display *dpy = XtDisplay(canvas); - int maxWidth, maxHeight; - - dmxConfigCanvasGCs(); - if (region) { - XSetRegion(dpy, dmxConfigGC, region); - XSetRegion(dpy, dmxConfigGCRev, region); - XSetRegion(dpy, dmxConfigGCHL, region); - } - XtVaGetValues(canvas, - XtNwidth, &dmxConfigWidgetWidth, - XtNheight, &dmxConfigWidgetHeight, - NULL); - dmxConfigGetDims(&maxWidth, &maxHeight); - dmxConfigScaleX = (double)dmxConfigWidgetWidth / maxWidth; - dmxConfigScaleY = (double)dmxConfigWidgetHeight / maxHeight; - if (dmxConfigScaleX > dmxConfigScaleY) dmxConfigScaleX = dmxConfigScaleY; - if (dmxConfigScaleY > dmxConfigScaleX) dmxConfigScaleY = dmxConfigScaleX; - dmxConfigCanvasUpdate(); - if (region) { - XSetClipMask(dpy, dmxConfigGC, None); - XSetClipMask(dpy, dmxConfigGCRev, None); - XSetClipMask(dpy, dmxConfigGCHL, None); - } -} - -static void dmxConfigSelectCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - dmxConfigCurrent = closure; - dmxConfigVirtualPrint(stdout, dmxConfigCurrent); - dmxConfigCanvasDraw(NULL); -} - -static void dmxConfigCopystrings(void) -{ - DMXConfigEntryPtr pt; - DMXConfigSubPtr sub; - - if (!dmxConfigCurrent) return; - - /* FIXME: this is all a per-config file - * memory leak */ - for (pt = dmxConfigEntry; pt; pt = pt->next) { - if (pt->type == dmxConfigVirtual) { - pt->virtual->name = XtNewString(pt->virtual->name - ? pt->virtual->name - : ""); - - for (sub = pt->virtual->subentry; sub; sub = sub->next) { - if (sub->type != dmxConfigDisplay) continue; - sub->display->name = XtNewString(sub->display->name - ? sub->display->name - : ""); - } - } - } -} - -static void dmxConfigGetValueString(char **d, Widget w) -{ - const char *tmp = XawDialogGetValueString(w); - if (*d) XtFree(*d); - *d = XtNewString(tmp); -} - -static void dmxConfigSetupCnamemenu(void) -{ - static Widget cnamemenu = NULL; - Widget w; - DMXConfigEntryPtr pt; - - if (cnamemenu) XtDestroyWidget(cnamemenu); - cnamemenu = NULL; - - if (!dmxConfigCurrent) return; - cnamemenu = XtVaCreatePopupShell("cnamemenu", simpleMenuWidgetClass, - cnamebox, - NULL); - - for (pt = dmxConfigEntry; pt; pt = pt->next) { - if (pt->type == dmxConfigVirtual) { - w = XtVaCreateManagedWidget(pt->virtual->name - ? pt->virtual->name - : "", - smeBSBObjectClass, cnamemenu, - NULL); - XtAddCallback(w, XtNcallback, - dmxConfigSelectCallback, pt->virtual); - } - } -} - -static void dmxConfigReadFile(void) -{ - FILE *str; - DMXConfigEntryPtr pt; - - if (!(str = fopen(dmxConfigFilename, "r"))) { - dmxLog(dmxWarning, "Unable to read configuration file %s\n", - dmxConfigFilename); - return; - } - yyin = str; - yydebug = 0; - yyparse(); - fclose(str); - dmxLog(dmxInfo, "Read configuration file %s\n", dmxConfigFilename); - - for (pt = dmxConfigEntry; pt; pt = pt->next) { - if (pt->type == dmxConfigVirtual) { - dmxConfigCurrent = pt->virtual; - break; - } - } - - - - if (XtIsRealized(canvas)) { - dmxConfigCopystrings(); - dmxConfigSetupCnamemenu(); - dmxConfigCanvasDraw(NULL); - } - dmxConfigVirtualPrint(stdout, dmxConfigCurrent); -} - -static void dmxConfigWriteFile(void) -{ - FILE *str; - - if (!(str = fopen(dmxConfigFilename, "w"))) { - dmxLog(dmxWarning, "Unable to write configuration file %s\n", - dmxConfigFilename); - return; - } - dmxConfigPrint(str, dmxConfigEntry); - fclose(str); -} - -static DMXConfigDisplayPtr dmxConfigFindDisplay(int x, int y) -{ - DMXConfigSubPtr pt; - - if (!dmxConfigCurrent) return NULL; - for (pt = dmxConfigCurrent->subentry; pt; pt = pt->next) { - DMXConfigDisplayPtr d = pt->display; - if (pt->type != dmxConfigDisplay) continue; - if (x >= scalex(d->rootXOrigin) - && x <= scalex(d->rootXOrigin + d->scrnWidth) - && y >= scaley(d->rootYOrigin) - && y <= scaley(d->rootYOrigin + d->scrnHeight)) return d; - } - return NULL; -} - -static void dmxConfigSetPopupPosition(Widget popup) -{ - Position x, y; - Window t1, t2; - int root_x, root_y; - int temp_x, temp_y; - unsigned int temp; - - - XtRealizeWidget(popup); - if (!XQueryPointer(XtDisplay(popup), XtWindow(popup), &t1, &t2, - &root_x, &root_y, &temp_x, &temp_y, &temp)) - root_x = root_y = 0; - - x = root_x - 5; - y = root_y - 5; - XtVaSetValues(popup, XtNx, x, XtNy, y, NULL); -} - -static void dmxConfigPlaceMenu(Widget w, XEvent *event, - String *params, Cardinal *num_params) -{ - dmxConfigSetPopupPosition(buttonpopup); -} - -static void dmxConfigMove(int deltaX, int deltaY) -{ - dmxConfigCurrentDisplay->rootXOrigin += deltaX; - dmxConfigCurrentDisplay->rootYOrigin += deltaY; - if (dmxConfigCurrentDisplay->rootXOrigin < 0) - dmxConfigCurrentDisplay->rootXOrigin = 0; - if (dmxConfigCurrentDisplay->rootYOrigin < 0) - dmxConfigCurrentDisplay->rootYOrigin = 0; - if (dmxConfigWallWidth && dmxConfigWallHeight) { - if (dmxConfigCurrentDisplay->rootXOrigin >= dmxConfigWallWidth) - dmxConfigCurrentDisplay->rootXOrigin = dmxConfigWallWidth - 1; - if (dmxConfigCurrentDisplay->rootYOrigin >= dmxConfigWallHeight) - dmxConfigCurrentDisplay->rootYOrigin = dmxConfigWallHeight - 1; - } - dmxConfigCanvasUpdate(); - dmxConfigNotSaved = 1; -} - -static void dmxConfigCanvasInput(Widget w, XtPointer closure, - XtPointer callData) -{ - XEvent *e = (XEvent *)callData; - DMXConfigDisplayPtr display = NULL; - - switch (e->type) { - case ButtonPress: - if (e->xbutton.button == Button1) { - dmxConfigGrabbed = 1; - dmxConfigGrabbedFine = 0; - dmxConfigGrabbedX = e->xbutton.x; - dmxConfigGrabbedY = e->xbutton.y; - } - if (e->xbutton.button == Button2) { - dmxConfigGrabbed = 1; - dmxConfigGrabbedFine = 1; - dmxConfigGrabbedX = e->xbutton.x; - dmxConfigGrabbedY = e->xbutton.y; - } - break; - case ButtonRelease: - if (e->xbutton.button == Button1) dmxConfigGrabbed = 0; - if (e->xbutton.button == Button2) dmxConfigGrabbed = 0; - break; - case MotionNotify: - if (dmxConfigGrabbed && dmxConfigCurrentDisplay) { - int deltaX = e->xmotion.x - dmxConfigGrabbedX; - int deltaY = e->xmotion.y - dmxConfigGrabbedY; - dmxConfigMove(dmxConfigGrabbedFine ? deltaX : unscalex(deltaX), - dmxConfigGrabbedFine ? deltaY : unscaley(deltaY)); - dmxConfigGrabbedX = e->xmotion.x; - dmxConfigGrabbedY = e->xmotion.y; - } else { - display = dmxConfigFindDisplay(e->xmotion.x, e->xmotion.y); - if (display != dmxConfigCurrentDisplay) { - dmxConfigCurrentDisplay = display; - dmxConfigCanvasUpdate(); - } - } - break; - case KeyPress: - switch (XLookupKeysym(&e->xkey, 0)) { - case XK_Right: dmxConfigMove(1,0); break; - case XK_Left: dmxConfigMove(-1,0); break; - case XK_Down: dmxConfigMove(0,1); break; - case XK_Up: dmxConfigMove(0,-1); break; - } - break; - } -} - -static void dmxConfigCanvasResize(Widget w, XtPointer closure, - XtPointer callData) -{ - dmxConfigCanvasDraw(NULL); -} - -static void dmxConfigCanvasExpose(Widget w, XtPointer closure, - XtPointer callData) -{ - CanvasExposeDataPtr data = (CanvasExposeDataPtr)callData; - - dmxConfigCanvasDraw(data->region); -} - -static void dmxConfigOpenCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - dmxConfigState = dmxConfigStateOpen; - XtVaSetValues(okbutton, XtNlabel, "Open", NULL); - dmxConfigSetPopupPosition(openpopup); - XtPopup(openpopup, XtGrabExclusive); -} - -static void dmxConfigSaveCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - dmxConfigState = dmxConfigStateSave; - XtVaSetValues(okbutton, XtNlabel, "Save", NULL); - dmxConfigSetPopupPosition(openpopup); - XtPopup(openpopup, XtGrabExclusive); -} - -static void dmxConfigOkCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - dmxConfigGetValueString(&dmxConfigFilename, opendialog); - XtPopdown(openpopup); - if (dmxConfigState == dmxConfigStateOpen) dmxConfigReadFile(); - else dmxConfigWriteFile(); - dmxConfigNotSaved = 0; -} - -static void dmxConfigCanCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - XtPopdown(openpopup); -} - -static void dmxConfigECCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - char buf[256]; /* RATS: Only used in XmuSnprintf */ - - if (!dmxConfigCurrent) return; - dmxConfigSetPopupPosition(ecpopup); - XtVaSetValues(ecdialog0, XtNvalue, - dmxConfigCurrent->name ? dmxConfigCurrent->name : "", - NULL); - XmuSnprintf(buf, sizeof(buf), "%dx%d", - dmxConfigCurrent->width, dmxConfigCurrent->height); - XtVaSetValues(ecdialog1, XtNvalue, buf, NULL); - XtPopup(ecpopup, XtGrabExclusive); -} - -static void dmxConfigNCCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - int width = 1280*2, height = 1024*2; - - if (dmxConfigCurrent) { - width = dmxConfigCurrent->width; - height = dmxConfigCurrent->height; - } - - dmxConfigCurrent = dmxConfigCreateVirtual(NULL, NULL, NULL, - NULL, NULL, NULL); - dmxConfigNewVirtual = dmxConfigCurrent; - dmxConfigCurrent->width = width; - dmxConfigCurrent->height = height; - dmxConfigEntry = dmxConfigAddEntry(dmxConfigEntry, dmxConfigVirtual, NULL, - dmxConfigCurrent); - dmxConfigECCallback(w, closure, callData); -} - -static void dmxConfigDCCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - DMXConfigEntryPtr pt; - - if (!dmxConfigEntry) return; - if (dmxConfigEntry - && dmxConfigEntry->type == dmxConfigVirtual - && dmxConfigEntry->virtual == dmxConfigCurrent) { - dmxConfigEntry = dmxConfigEntry->next; - } else { - for (pt = dmxConfigEntry; pt && pt->next; pt = pt->next) - if (pt->next->type == dmxConfigVirtual - && pt->next->virtual == dmxConfigCurrent) { - pt->next = pt->next->next; - break; - } - } - dmxConfigFreeVirtual(dmxConfigCurrent); - dmxConfigCurrent = NULL; - dmxConfigCurrentDisplay = NULL; - - /* Make the first entry current */ - for (pt = dmxConfigEntry; pt; pt = pt->next) { - if (pt->type == dmxConfigVirtual) { - dmxConfigCurrent = pt->virtual; - break; - } - } - - dmxConfigSetupCnamemenu(); - dmxConfigCanvasDraw(NULL); -} - -static void dmxConfigECOkCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - const char *value; - char *endpt; - - dmxConfigGetValueString((char **)&dmxConfigCurrent->name, ecdialog0); - value = XawDialogGetValueString(ecdialog1); - dmxConfigCurrent->width = strtol(value, &endpt, 10); - dmxConfigCurrent->height = strtol(endpt+1, NULL, 10); - XtPopdown(ecpopup); - dmxConfigCurrentDisplay = NULL; - dmxConfigNewVirtual = NULL; - dmxConfigSetupCnamemenu(); - dmxConfigCanvasDraw(NULL); - dmxConfigNotSaved = 1; -} - -static void dmxConfigECCanCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - if (dmxConfigNewVirtual) dmxConfigDCCallback(w, closure, callData); - dmxConfigNewVirtual = NULL; - XtPopdown(ecpopup); -} - -static void dmxConfigEDCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - char buf[256]; /* RATS: Only used in XmuSnprintf */ - - if (!dmxConfigCurrent || !dmxConfigCurrentDisplay) return; - dmxConfigSetPopupPosition(edpopup); - XtVaSetValues(eddialog0, XtNvalue, - dmxConfigCurrentDisplay->name - ? dmxConfigCurrentDisplay->name - : "", - NULL); - XmuSnprintf(buf, sizeof(buf), "%dx%d%c%d%c%d", - dmxConfigCurrentDisplay->scrnWidth, - dmxConfigCurrentDisplay->scrnHeight, - dmxConfigCurrentDisplay->scrnXSign < 0 ? '-' : '+', - dmxConfigCurrentDisplay->scrnY, - dmxConfigCurrentDisplay->scrnYSign < 0 ? '-' : '+', - dmxConfigCurrentDisplay->scrnY); - XtVaSetValues(eddialog1, XtNvalue, buf, NULL); - XmuSnprintf(buf, sizeof(buf), "@%dx%d", - dmxConfigCurrentDisplay->rootXOrigin, - dmxConfigCurrentDisplay->rootYOrigin); - XtVaSetValues(eddialog2, XtNvalue, buf, NULL); - XtPopup(edpopup, XtGrabExclusive); -} - -static void dmxConfigNDCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - int width = 1280, height = 1024; - - if (!dmxConfigCurrent) return; - if (dmxConfigCurrentDisplay) { - width = dmxConfigCurrentDisplay->scrnWidth; - height = dmxConfigCurrentDisplay->scrnHeight; - } - dmxConfigCurrentDisplay = dmxConfigCreateDisplay(NULL, NULL, NULL, - NULL, NULL); - dmxConfigNewDisplay = dmxConfigCurrentDisplay; - dmxConfigCurrentDisplay->scrnWidth = width; - dmxConfigCurrentDisplay->scrnHeight = height; - - dmxConfigCurrent->subentry - = dmxConfigAddSub(dmxConfigCurrent->subentry, - dmxConfigSubDisplay(dmxConfigCurrentDisplay)); - dmxConfigEDCallback(w, closure, callData); -} - -static void dmxConfigDDCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - DMXConfigSubPtr pt; - - if (!dmxConfigCurrent || !dmxConfigCurrentDisplay) return; - /* First */ - if (dmxConfigCurrent->subentry - && dmxConfigCurrent->subentry->type == dmxConfigDisplay - && dmxConfigCurrent->subentry->display == dmxConfigCurrentDisplay) { - dmxConfigCurrent->subentry = dmxConfigCurrent->subentry->next; - } else { - for (pt = dmxConfigCurrent->subentry; pt && pt->next; pt = pt->next) - if (pt->next->type == dmxConfigDisplay - && pt->next->display == dmxConfigCurrentDisplay) { - pt->next = pt->next->next; - break; - } - } - dmxConfigFreeDisplay(dmxConfigCurrentDisplay); - dmxConfigCurrentDisplay = NULL; - dmxConfigSetupCnamemenu(); - dmxConfigCanvasDraw(NULL); -} - -static void dmxConfigAboutCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - dmxConfigSetPopupPosition(aboutpopup); - XtPopup(aboutpopup, XtGrabExclusive); -} - -static void dmxConfigAboutOkCallback(Widget w, XtPointer closure, - XtPointer CallData) -{ - XtPopdown(aboutpopup); -} - -static void dmxConfigQuitCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - if (dmxConfigNotSaved) { - dmxConfigSetPopupPosition(quitpopup); - XtPopup(quitpopup, XtGrabExclusive); - return; - } - exit(0); -} - -static void dmxConfigQuitOkCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - XtPopdown(quitpopup); - exit(0); -} - -static void dmxConfigQuitCanCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - XtPopdown(quitpopup); -} - -static void dmxConfigEDOkCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - char *value; - char *endpt; - - dmxConfigNewDisplay = NULL; - dmxConfigGetValueString((char **)&dmxConfigCurrentDisplay->name, - eddialog0); - value = XawDialogGetValueString(eddialog1); - if (*value == '-' || *value == '+') { - dmxConfigCurrentDisplay->scrnWidth = 0; - dmxConfigCurrentDisplay->scrnHeight = 0; - endpt = value; - } else { - dmxConfigCurrentDisplay->scrnWidth = strtol(value, &endpt, 10); - dmxConfigCurrentDisplay->scrnHeight = strtol(endpt+1, &endpt, 10); - } - if (*endpt) { - dmxConfigCurrentDisplay->scrnXSign = (*endpt == '-') ? -1 : 1; - dmxConfigCurrentDisplay->scrnX = strtol(endpt+1, &endpt, 10); - dmxConfigCurrentDisplay->scrnYSign = (*endpt == '-') ? -1 : 1; - dmxConfigCurrentDisplay->scrnY = strtol(endpt+1, NULL, 10); - } - if (dmxConfigCurrentDisplay->scrnX < 0) - dmxConfigCurrentDisplay->scrnX = -dmxConfigCurrentDisplay->scrnX; - if (dmxConfigCurrentDisplay->scrnY < 0) - dmxConfigCurrentDisplay->scrnY = -dmxConfigCurrentDisplay->scrnY; - value = XawDialogGetValueString(eddialog2); - dmxConfigCurrentDisplay->rootXOrigin = strtol(value+1, &endpt, 10); - dmxConfigCurrentDisplay->rootYOrigin = strtol(endpt+1, NULL, 10); - XtPopdown(edpopup); - dmxConfigSetupCnamemenu(); - dmxConfigCanvasDraw(NULL); - dmxConfigNotSaved = 1; -} - -static void dmxConfigEDCanCallback(Widget w, XtPointer closure, - XtPointer callData) -{ - if (dmxConfigNewDisplay) dmxConfigDDCallback(w, closure, callData); - dmxConfigNewDisplay = NULL; - XtPopdown(edpopup); -} - -static void dmxConfigOkAction(Widget w, XEvent *event, - String *params, Cardinal *num_params) -{ - Widget p = XtParent(w); - Widget t; - - if (p == opendialog) dmxConfigOkCallback(w, NULL, NULL); - - if (p == ecdialog0) { - t = XtNameToWidget(ecdialog1, "value"); - XWarpPointer(XtDisplay(t), None, XtWindow(t), 0, 0, 0, 0, 0, 10); - } - if (p == ecdialog1) dmxConfigECOkCallback(w, NULL, NULL); - - if (p == eddialog0) { - t = XtNameToWidget(eddialog1, "value"); - XWarpPointer(XtDisplay(t), None, XtWindow(t), 0, 0, 0, 0, 0, 10); - } - if (p == eddialog1) { - t = XtNameToWidget(eddialog2, "value"); - XWarpPointer(XtDisplay(t), None, XtWindow(t), 0, 0, 0, 0, 0, 10); - } - if (p == eddialog2) dmxConfigEDOkCallback(w, NULL, NULL); -} - -int main(int argc, char **argv) -{ - XtAppContext appContext; - Widget toplevel; - Widget parent, menubox, bottombox, databox, canvasbox; - Widget filebutton, helpbutton; - Widget filemenu, openbutton, savebutton, quitbutton; - Widget helpmenu, aboutbutton, aboutbox, abouttext, aboutok; - Widget quitbox, quittext, quitok, quitcan; - Widget ncbutton; - Widget canbutton; - Widget ecbox, ecokbutton, eccanbutton; - Widget edbox, edokbutton; - Widget edcanbutton; - /* FIXME: add meta-i, ctrl,meta-z,v? */ - const char *opentrans = "<Key>Return: openOk()\n\ - <Key>Linefeed: openOk()\n\ - Ctrl<Key>M: openOk()\n\ - Ctrl<Key>J: openOk()\n\ - Ctrl<Key>O: noop()\n\ - Ctrl<Key>N: noop()\n\ - Ctrl<Key>P: noop()"; - const char *canvastrans = - "<Btn3Down>: placeMenu() XtMenuPopup(buttonpopup)"; - XtActionsRec actiontable[] = { - { "openOk", dmxConfigOkAction }, - { "placeMenu", dmxConfigPlaceMenu }, - { "noop", NULL } - }; - - dmxConfigFilename = XtNewString((argc >= 2) ? argv[1] : ""); - - toplevel = XtVaAppInitialize(&appContext, "XDmxconfig", - NULL, 0, - &argc, argv, - NULL, - NULL); - - /* Main boxes */ - parent = XtVaCreateManagedWidget("parent", formWidgetClass, toplevel, - XtNorientation, XtorientVertical, - XtNwidth, DMX_MAIN_WIDTH, - XtNheight, DMX_MAIN_HEIGHT, - NULL); - menubox = XtVaCreateManagedWidget("menubox", boxWidgetClass, parent, - XtNborderWidth, 0, - XtNorientation, XtorientHorizontal, - XtNtop, XtChainTop, - NULL); - bottombox = XtVaCreateManagedWidget("bottombox", formWidgetClass, parent, - XtNborderWidth, 0, - XtNfromVert, menubox, - XtNorientation, XtorientHorizontal, - NULL); - databox = XtVaCreateManagedWidget("databox", formWidgetClass, - bottombox, - XtNborderWidth, 0, - XtNhorizDistance, 0, - XtNwidth, DMX_DATA_WIDTH, - XtNheight, DMX_DATA_HEIGHT, - XtNleft, XtChainLeft, - XtNorientation, XtorientVertical, - NULL); - - /* Data */ - cnamebox = XtVaCreateManagedWidget("cnamebox", menuButtonWidgetClass, - databox, - XtNtop, XtChainTop, - XtNjustify, XtJustifyLeft, - XtNwidth, DMX_DATA_WIDTH, - XtNlabel, "", - XtNmenuName, "cnamemenu", - NULL); - cdimbox = XtVaCreateManagedWidget("cdimbox", labelWidgetClass, - databox, - XtNfromVert, cnamebox, - XtNjustify, XtJustifyLeft, - XtNwidth, DMX_DATA_WIDTH, - XtNlabel, "", - NULL); - namebox = XtVaCreateManagedWidget("namebox", labelWidgetClass, databox, - XtNfromVert, cdimbox, - XtNjustify, XtJustifyLeft, - XtNwidth, DMX_DATA_WIDTH, - XtNlabel, "", - NULL); - dimbox = XtVaCreateManagedWidget("dimbox", labelWidgetClass, - databox, - XtNfromVert, namebox, - XtNjustify, XtJustifyLeft, - XtNwidth, DMX_DATA_WIDTH, - XtNlabel, "", - NULL); - rtbox = XtVaCreateManagedWidget("rtbox", labelWidgetClass, - databox, - XtNfromVert, dimbox, - XtNjustify, XtJustifyLeft, - XtNwidth, DMX_DATA_WIDTH, - XtNlabel, "", - NULL); - origbox = XtVaCreateManagedWidget("origbox", labelWidgetClass, - databox, - XtNfromVert, rtbox, - XtNjustify, XtJustifyLeft, - XtNwidth, DMX_DATA_WIDTH, - XtNlabel, "", - NULL); - - /* Canvas */ - canvasbox = XtVaCreateManagedWidget("canvasbox", boxWidgetClass, - bottombox, - XtNborderWidth, 0, - XtNwidth, DMX_CANVAS_WIDTH, - XtNheight, DMX_CANVAS_HEIGHT, - XtNfromHoriz, databox, - NULL); - - canvas = XtVaCreateManagedWidget("canvas", canvasWidgetClass, - canvasbox, - XtNwidth, DMX_CANVAS_WIDTH, - XtNheight, DMX_CANVAS_HEIGHT, - NULL); - - - /* Main menu buttons */ - filebutton = XtVaCreateManagedWidget("File", menuButtonWidgetClass, - menubox, - XtNmenuName, "filemenu", - NULL); - helpbutton = XtVaCreateManagedWidget("Help", menuButtonWidgetClass, - menubox, - XtNmenuName, "helpmenu", - NULL); - - - /* File submenu buttons */ - filemenu = XtVaCreatePopupShell("filemenu", simpleMenuWidgetClass, - filebutton, NULL); - openbutton = XtVaCreateManagedWidget("Open File", smeBSBObjectClass, - filemenu, NULL); - savebutton = XtVaCreateManagedWidget("Save File", smeBSBObjectClass, - filemenu, - NULL); - ncbutton = XtVaCreateManagedWidget("New Global", smeBSBObjectClass, - filemenu, NULL); - ecbutton = XtVaCreateManagedWidget("Edit Global", smeBSBObjectClass, - filemenu, - NULL); - dcbutton = XtVaCreateManagedWidget("Delete Global", smeBSBObjectClass, - filemenu, - NULL); - ndbutton0 = XtVaCreateManagedWidget("New Display", smeBSBObjectClass, - filemenu, - NULL); - quitbutton = XtVaCreateManagedWidget("Quit", smeBSBObjectClass, - filemenu, NULL); - - /* Help submenu button */ - helpmenu = XtVaCreatePopupShell("helpmenu", simpleMenuWidgetClass, - helpbutton, NULL); - aboutbutton = XtVaCreateManagedWidget("About", smeBSBObjectClass, - helpmenu, NULL); - - /* Open popup */ - openpopup = XtVaCreatePopupShell("openpopup", transientShellWidgetClass, - toplevel, NULL); - opendialog = XtVaCreateManagedWidget("opendialog", dialogWidgetClass, - openpopup, - XtNlabel, "Filename: ", - XtNvalue, dmxConfigFilename, - NULL); - okbutton = XtVaCreateManagedWidget("Open", commandWidgetClass, - opendialog, NULL); - canbutton = XtVaCreateManagedWidget("Cancel", commandWidgetClass, - opendialog, NULL); - - /* EC popup */ - ecpopup = XtVaCreatePopupShell("ecpopup", transientShellWidgetClass, - toplevel, NULL); - ecbox = XtVaCreateManagedWidget("ecbox", boxWidgetClass, - ecpopup, NULL); - ecdialog0 = XtVaCreateManagedWidget("ecdialog0", dialogWidgetClass, - ecbox, - XtNlabel, "Name: ", - XtNvalue, "", - NULL); - ecdialog1 = XtVaCreateManagedWidget("ecdialog1", dialogWidgetClass, - ecbox, - XtNlabel, "Dimension: ", - XtNvalue, "", - NULL); - ecokbutton = XtVaCreateManagedWidget("OK", commandWidgetClass, - ecbox, NULL); - eccanbutton = XtVaCreateManagedWidget("Cancel", commandWidgetClass, - ecbox, NULL); - - /* ED popup */ - edpopup = XtVaCreatePopupShell("edpopup", transientShellWidgetClass, - toplevel, NULL); - edbox = XtVaCreateManagedWidget("edbox", boxWidgetClass, - edpopup, NULL); - eddialog0 = XtVaCreateManagedWidget("eddialog0", dialogWidgetClass, - edbox, - XtNlabel, "Display Name: ", - XtNvalue, "", - NULL); - eddialog1 = XtVaCreateManagedWidget("eddialog1", dialogWidgetClass, - edbox, - XtNlabel, "Geometry: ", - XtNvalue, "", - NULL); - eddialog2 = XtVaCreateManagedWidget("eddialog2", dialogWidgetClass, - edbox, - XtNlabel, "Offset: ", - XtNvalue, "", - NULL); - edokbutton = XtVaCreateManagedWidget("OK", commandWidgetClass, - edbox, NULL); - edcanbutton = XtVaCreateManagedWidget("Cancel", commandWidgetClass, - edbox, NULL); - - /* About popup */ - aboutpopup = XtVaCreatePopupShell("aboutpopup",transientShellWidgetClass, - toplevel, NULL); - aboutbox = XtVaCreateManagedWidget("aboutbox", boxWidgetClass, - aboutpopup, NULL); - abouttext = XtVaCreateManagedWidget("abouttext", labelWidgetClass, - aboutbox, - XtNlabel, DMX_INFO, - NULL); - aboutok = XtVaCreateManagedWidget("OK", commandWidgetClass, - aboutbox, NULL); - - /* Quit popup */ - quitpopup = XtVaCreatePopupShell("quitpopup",transientShellWidgetClass, - toplevel, NULL); - quitbox = XtVaCreateManagedWidget("quitbox", boxWidgetClass, - quitpopup, NULL); - quittext = XtVaCreateManagedWidget("quittext", labelWidgetClass, - quitbox, - XtNlabel, - "Changes to the configuration\n" - "been made that have not yet\n" - "been saved. Do you want to\n" - "quit without saving?", - NULL); - quitok = XtVaCreateManagedWidget("Quit WITHOUT Saving", - commandWidgetClass, - quitbox, NULL); - quitcan = XtVaCreateManagedWidget("Continue Editing", - commandWidgetClass, - quitbox, NULL); - - /* Button popup */ - buttonpopup = XtVaCreatePopupShell("buttonpopup", simpleMenuWidgetClass, - toplevel, NULL); - ndbutton1 = XtVaCreateManagedWidget("New Display", smeBSBObjectClass, - buttonpopup, - NULL); - edbutton = XtVaCreateManagedWidget("Edit Display", smeBSBObjectClass, - buttonpopup, - NULL); - ddbutton = XtVaCreateManagedWidget("Delete Display", smeBSBObjectClass, - buttonpopup, - NULL); - - /* Callbacks */ - XtAddCallback(openbutton, XtNcallback, dmxConfigOpenCallback, NULL); - XtAddCallback(savebutton, XtNcallback, dmxConfigSaveCallback, NULL); - XtAddCallback(okbutton, XtNcallback, dmxConfigOkCallback, NULL); - XtAddCallback(canbutton, XtNcallback, dmxConfigCanCallback, NULL); - - XtAppAddActions(appContext, actiontable, XtNumber(actiontable)); - XtOverrideTranslations(canvas, XtParseTranslationTable(canvastrans)); - XtOverrideTranslations(XtNameToWidget(opendialog, "value"), - XtParseTranslationTable(opentrans)); - XtOverrideTranslations(XtNameToWidget(ecdialog0, "value"), - XtParseTranslationTable(opentrans)); - XtOverrideTranslations(XtNameToWidget(ecdialog1, "value"), - XtParseTranslationTable(opentrans)); - XtOverrideTranslations(XtNameToWidget(eddialog0, "value"), - XtParseTranslationTable(opentrans)); - XtOverrideTranslations(XtNameToWidget(eddialog1, "value"), - XtParseTranslationTable(opentrans)); - XtOverrideTranslations(XtNameToWidget(eddialog2, "value"), - XtParseTranslationTable(opentrans)); - - XtAddCallback(ncbutton, XtNcallback, dmxConfigNCCallback, NULL); - XtAddCallback(ecbutton, XtNcallback, dmxConfigECCallback, NULL); - XtAddCallback(ecokbutton, XtNcallback, dmxConfigECOkCallback, NULL); - XtAddCallback(eccanbutton, XtNcallback, dmxConfigECCanCallback, NULL); - XtAddCallback(dcbutton, XtNcallback, dmxConfigDCCallback, NULL); - - XtAddCallback(ndbutton0, XtNcallback, dmxConfigNDCallback, NULL); - XtAddCallback(ndbutton1, XtNcallback, dmxConfigNDCallback, NULL); - XtAddCallback(edbutton, XtNcallback, dmxConfigEDCallback, NULL); - XtAddCallback(ddbutton, XtNcallback, dmxConfigDDCallback, NULL); - XtAddCallback(edokbutton, XtNcallback, dmxConfigEDOkCallback, NULL); - XtAddCallback(edcanbutton, XtNcallback, dmxConfigEDCanCallback, NULL); - - XtAddCallback(aboutbutton, XtNcallback, dmxConfigAboutCallback, NULL); - XtAddCallback(aboutok, XtNcallback, dmxConfigAboutOkCallback, NULL); - XtAddCallback(quitok, XtNcallback, dmxConfigQuitOkCallback, NULL); - XtAddCallback(quitcan, XtNcallback, dmxConfigQuitCanCallback, NULL); - - XtAddCallback(quitbutton, XtNcallback, dmxConfigQuitCallback, NULL); - - XtAddCallback(canvas, XtNcallback, dmxConfigCanvasInput, NULL); - XtAddCallback(canvas, XtNcanvasExposeCallback, dmxConfigCanvasExpose,NULL); - XtAddCallback(canvas, XtNcanvasResizeCallback, dmxConfigCanvasResize,NULL); - - if (dmxConfigFilename) dmxConfigReadFile(); - - XtRealizeWidget(toplevel); - dmxConfigCopystrings(); - dmxConfigSetupCnamemenu(); - XtAppMainLoop(appContext); - return 0; -} |