]> granicus.if.org Git - graphviz/commitdiff
Update with new lefty, fixing many bugs and supporting new features
authorerg <devnull@localhost>
Fri, 8 Apr 2005 20:45:34 +0000 (20:45 +0000)
committererg <devnull@localhost>
Fri, 8 Apr 2005 20:45:34 +0000 (20:45 +0000)
cmd/lefty/ws/mswin32/garray.c

index 1b797e35a614b4bc766ebd3160c413ac37c34638..0abcec71f2b760265ad9bc7c1e7011bbd5a6e2b3 100644 (file)
@@ -14,7 +14,7 @@
 *              AT&T Research, Florham Park NJ             *
 **********************************************************/
 
-/* Lefteris Koutsofios - AT&T Bell Laboratories */
+/* Lefteris Koutsofios - AT&T Labs Research */
 
 #include "common.h"
 #include "g.h"
 
 #define WAU widget->u.a
 
-int GAcreatewidget(Gwidget_t * parent, Gwidget_t * widget,
-                  int attrn, Gwattr_t * attrp)
-{
+int GAcreatewidget (
+    Gwidget_t *parent, Gwidget_t *widget, int attrn, Gwattr_t *attrp
+{
     PIXsize_t ps;
     DWORD wflags;
     int mode, ai;
 
     if (!parent) {
-       Gerr(POS, G_ERRNOPARENTWIDGET);
-       return -1;
+        Gerr (POS, G_ERRNOPARENTWIDGET);
+        return -1;
     }
     wflags = WS_CHILDWINDOW;
     mode = G_AWVARRAY;
     WAU->func = NULL;
     ps.x = ps.y = MINAWSIZE;
     for (ai = 0; ai < attrn; ai++) {
-       switch (attrp[ai].id) {
-       case G_ATTRSIZE:
-           GETSIZE(attrp[ai].u.s, ps, MINAWSIZE);
-           break;
-       case G_ATTRBORDERWIDTH:
-           wflags |= WS_BORDER;
-           break;
-       case G_ATTRMODE:
-           if (Strcmp("horizontal", attrp[ai].u.t) == 0)
-               mode = G_AWHARRAY;
-           else if (Strcmp("vertical", attrp[ai].u.t) == 0)
-               mode = G_AWVARRAY;
-           else {
-               Gerr(POS, G_ERRBADATTRVALUE, attrp[ai].u.t);
-               return -1;
-           }
-           break;
-       case G_ATTRLAYOUT:
-           if (Strcmp("on", attrp[ai].u.t) == 0) {
-               Gawsetmode(widget, FALSE);
-               WAU->mode = G_AWHARRAY;
-           } else if (Strcmp("off", attrp[ai].u.t) == 0) {
-               Gawsetmode(widget, TRUE);
-               WAU->mode = G_AWHARRAY;
-           } else {
-               Gerr(POS, G_ERRBADATTRVALUE, attrp[ai].u.t);
-               return -1;
-           }
-           break;
-       case G_ATTRWINDOWID:
-           Gerr(POS, G_ERRCANNOTSETATTR1, "windowid");
-           return -1;
-       case G_ATTRRESIZECB:
-           WAU->func = attrp[ai].u.func;
-           break;
-       case G_ATTRUSERDATA:
-           widget->udata = attrp[ai].u.u;
-           break;
-       default:
-           Gerr(POS, G_ERRBADATTRID, attrp[ai].id);
-           return -1;
-       }
+        switch (attrp[ai].id) {
+        case G_ATTRSIZE:
+            GETSIZE (attrp[ai].u.s, ps, MINAWSIZE);
+            break;
+        case G_ATTRBORDERWIDTH:
+            wflags |= WS_BORDER;
+            break;
+        case G_ATTRMODE:
+            if (strcmp ("horizontal", attrp[ai].u.t) == 0)
+                mode = G_AWHARRAY;
+            else if (strcmp ("vertical", attrp[ai].u.t) == 0)
+                mode = G_AWVARRAY;
+            else {
+                Gerr (POS, G_ERRBADATTRVALUE, attrp[ai].u.t);
+                return -1;
+            }
+            break;
+        case G_ATTRLAYOUT:
+            if (strcmp ("on", attrp[ai].u.t) == 0) {
+                Gawsetmode (widget, FALSE);
+                WAU->mode = G_AWHARRAY;
+            } else if (strcmp ("off", attrp[ai].u.t) == 0) {
+                Gawsetmode (widget, TRUE);
+                WAU->mode = G_AWHARRAY;
+            } else {
+                Gerr (POS, G_ERRBADATTRVALUE, attrp[ai].u.t);
+                return -1;
+            }
+            break;
+        case G_ATTRWINDOWID:
+            Gerr (POS, G_ERRCANNOTSETATTR1, "windowid");
+            return -1;
+        case G_ATTRRESIZECB:
+            WAU->func = attrp[ai].u.func;
+            break;
+        case G_ATTRUSERDATA:
+            widget->udata = attrp[ai].u.u;
+            break;
+        default:
+            Gerr (POS, G_ERRBADATTRID, attrp[ai].id);
+            return -1;
+        }
     }
-    Gawinitialize(widget, mode);
-    Gadjustwrect(parent, &ps);
-    if (!
-       (widget->w =
-        CreateWindow("ArrayClass", "array", wflags, 0, 0, ps.x, ps.y,
-                     parent->w, (HMENU) (widget - &Gwidgets[0]),
-                     hinstance, NULL))) {
-       Gerr(POS, G_ERRCANNOTCREATEWIDGET);
-       return -1;
+    Gawinitialize (widget, mode);
+    Gadjustwrect (parent, &ps);
+    if (!(widget->w = CreateWindow (
+        "ArrayClass", "array", wflags, 0, 0, ps.x,
+        ps.y, parent->w, (HMENU) (widget - &Gwidgets[0]),
+        hinstance, NULL
+    ))) {
+        Gerr (POS, G_ERRCANNOTCREATEWIDGET);
+        return -1;
     }
-    ShowWindow(widget->w, SW_SHOW);
-    UpdateWindow(widget->w);
+    ShowWindow (widget->w, SW_SHOW);
+    UpdateWindow (widget->w);
     if (parent && parent->type == G_ARRAYWIDGET)
-       Gawinsertchild(parent, widget);
+        Gawinsertchild (parent, widget);
     return 0;
 }
 
-int GAsetwidgetattr(Gwidget_t * widget, int attrn, Gwattr_t * attrp)
-{
+int GAsetwidgetattr (Gwidget_t *widget, int attrn, Gwattr_t *attrp) {
     Gwidget_t *parent;
     PIXsize_t ps;
     DWORD wflags1;
@@ -109,242 +108,228 @@ int GAsetwidgetattr(Gwidget_t * widget, int attrn, Gwattr_t * attrp)
     parent = (widget->pwi == -1) ? NULL : &Gwidgets[widget->pwi];
     wflags1 = SWP_NOMOVE | SWP_NOZORDER;
     for (ai = 0; ai < attrn; ai++) {
-       switch (attrp[ai].id) {
-       case G_ATTRSIZE:
-           GETSIZE(attrp[ai].u.s, ps, MINAWSIZE);
+        switch (attrp[ai].id) {
+        case G_ATTRSIZE:
+            GETSIZE (attrp[ai].u.s, ps, MINAWSIZE);
 /*            Gadjustwrect (parent, &ps);*/
-           SetWindowPos(widget->w, (HWND) NULL, 0, 0, ps.x, ps.y,
-                        wflags1);
-           break;
-       case G_ATTRBORDERWIDTH:
-           Gerr(POS, G_ERRCANNOTSETATTR2, "borderwidth");
-           return -1;
-       case G_ATTRMODE:
-           Gerr(POS, G_ERRCANNOTSETATTR2, "mode");
-           return -1;
-       case G_ATTRLAYOUT:
-           if (Strcmp("on", attrp[ai].u.t) == 0)
-               Gawsetmode(widget, FALSE);
-           else if (Strcmp("off", attrp[ai].u.t) == 0)
-               Gawsetmode(widget, TRUE);
-           else {
-               Gerr(POS, G_ERRBADATTRVALUE, attrp[ai].u.t);
-               return -1;
-           }
-           break;
-       case G_ATTRWINDOWID:
-           Gerr(POS, G_ERRCANNOTSETATTR2, "windowid");
-           return -1;
-       case G_ATTRRESIZECB:
-           WAU->func = attrp[ai].u.func;
-           break;
-       case G_ATTRUSERDATA:
-           widget->udata = attrp[ai].u.u;
-           break;
-       default:
-           Gerr(POS, G_ERRBADATTRID, attrp[ai].id);
-           return -1;
-       }
+            SetWindowPos (widget->w, (HWND) NULL, 0, 0, ps.x, ps.y, wflags1);
+            break;
+        case G_ATTRBORDERWIDTH:
+            Gerr (POS, G_ERRCANNOTSETATTR2, "borderwidth");
+            return -1;
+        case G_ATTRMODE:
+            Gerr (POS, G_ERRCANNOTSETATTR2, "mode");
+            return -1;
+        case G_ATTRLAYOUT:
+            if (strcmp ("on", attrp[ai].u.t) == 0)
+                Gawsetmode (widget, FALSE);
+            else if (strcmp ("off", attrp[ai].u.t) == 0)
+                Gawsetmode (widget, TRUE);
+            else {
+                Gerr (POS, G_ERRBADATTRVALUE, attrp[ai].u.t);
+                return -1;
+            }
+            break;
+        case G_ATTRWINDOWID:
+            Gerr (POS, G_ERRCANNOTSETATTR2, "windowid");
+            return -1;
+        case G_ATTRRESIZECB:
+            WAU->func = attrp[ai].u.func;
+            break;
+        case G_ATTRUSERDATA:
+            widget->udata = attrp[ai].u.u;
+            break;
+        default:
+            Gerr (POS, G_ERRBADATTRID, attrp[ai].id);
+            return -1;
+        }
     }
     return 0;
 }
 
-int GAgetwidgetattr(Gwidget_t * widget, int attrn, Gwattr_t * attrp)
-{
+int GAgetwidgetattr (Gwidget_t *widget, int attrn, Gwattr_t *attrp) {
     RECT r;
     int ai;
 
     for (ai = 0; ai < attrn; ai++) {
-       switch (attrp[ai].id) {
-       case G_ATTRSIZE:
-           GetWindowRect(widget->w, &r);
-           attrp[ai].u.s.x = r.right - r.left;
-           attrp[ai].u.s.y = r.bottom - r.top;
-           break;
-       case G_ATTRBORDERWIDTH:
-           Gerr(POS, G_ERRCANNOTGETATTR, "borderwidth");
-           return -1;
-       case G_ATTRMODE:
-           attrp[ai].u.t = (WAU->mode == G_AWHARRAY) ?
-               "horizontal" : "vertical";
-           break;
-       case G_ATTRLAYOUT:
-           attrp[ai].u.t = (Gawgetmode(widget)) ? "off" : "on";
-           break;
-       case G_ATTRWINDOWID:
-           sprintf(&Gbufp[0], "0x%lx", widget->w);
-           attrp[ai].u.t = &Gbufp[0];
-           break;
-       case G_ATTRRESIZECB:
-           attrp[ai].u.func = WAU->func;
-           break;
-       case G_ATTRUSERDATA:
-           attrp[ai].u.u = widget->udata;
-           break;
-       default:
-           Gerr(POS, G_ERRBADATTRID, attrp[ai].id);
-           return -1;
-       }
+        switch (attrp[ai].id) {
+        case G_ATTRSIZE:
+            GetWindowRect (widget->w, &r);
+            attrp[ai].u.s.x = r.right - r.left;
+            attrp[ai].u.s.y = r.bottom - r.top;
+            break;
+        case G_ATTRBORDERWIDTH:
+            Gerr (POS, G_ERRCANNOTGETATTR, "borderwidth");
+            return -1;
+        case G_ATTRMODE:
+            attrp[ai].u.t = (
+                WAU->mode == G_AWHARRAY
+            ) ? "horizontal" : "vertical";
+            break;
+        case G_ATTRLAYOUT:
+            attrp[ai].u.t = (Gawgetmode (widget)) ? "off" : "on";
+            break;
+        case G_ATTRWINDOWID:
+            sprintf (&Gbufp[0], "0x%lx", widget->w);
+            attrp[ai].u.t = &Gbufp[0];
+            break;
+        case G_ATTRRESIZECB:
+            attrp[ai].u.func = WAU->func;
+            break;
+        case G_ATTRUSERDATA:
+            attrp[ai].u.u = widget->udata;
+            break;
+        default:
+            Gerr (POS, G_ERRBADATTRID, attrp[ai].id);
+            return -1;
+        }
     }
     return 0;
 }
 
-int GAdestroywidget(Gwidget_t * widget)
-{
+int GAdestroywidget (Gwidget_t *widget) {
     Gwidget_t *parent;
 
     parent = (widget->pwi == -1) ? NULL : &Gwidgets[widget->pwi];
     if (parent && parent->type == G_ARRAYWIDGET)
-       Gawdeletechild(parent, widget);
-    Gawdestroy(widget);
-    DestroyWindow(widget->w);
+        Gawdeletechild (parent, widget);
+    Gawdestroy (widget);
+    DestroyWindow (widget->w);
     return 0;
 }
 
 /* the rest of this file contains the implementation of the array widget */
 
-static void dolayout(Gwidget_t *, int);
+static void dolayout (Gwidget_t *, int);
 
-int Gaworder(Gwidget_t * widget, void *data, Gawordercb func)
-{
+int Gaworder (Gwidget_t *widget, void *data, Gawordercb func) {
     (*func) (data, &WAU->data);
-    dolayout(widget, TRUE);
+    dolayout (widget, TRUE);
     return 0;
 }
 
-int Gawsetmode(Gwidget_t * widget, int mode)
-{
+int Gawsetmode (Gwidget_t *widget, int mode) {
     WAU->data.batchmode = mode;
-    dolayout(widget, TRUE);
+    dolayout (widget, TRUE);
     return 0;
 }
 
-int Gawgetmode(Gwidget_t * widget)
-{
+int Gawgetmode (Gwidget_t *widget) {
     return WAU->data.batchmode;
 }
 
-void Gawdefcoordscb(int wi, Gawdata_t * dp)
-{
+void Gawdefcoordscb (int wi, Gawdata_t *dp) {
     Gawcarray_t *cp;
     int sx, sy, csx, csy, ci;
 
     sx = dp->sx, sy = dp->sy;
     csx = csy = 0;
     for (ci = 0; ci < dp->cj; ci++) {
-       cp = &dp->carray[ci];
-       if (!cp->flag)
-           continue;
-       cp->ox = csx, cp->oy = csy;
-       if (dp->type == G_AWVARRAY)
-           cp->sx = sx - 2 * cp->bs, csy += cp->sy + 2 * cp->bs;
-       else
-           cp->sy = sy - 2 * cp->bs, csx += cp->sx + 2 * cp->bs;
+        cp = &dp->carray[ci];
+        if (!cp->flag)
+            continue;
+        cp->ox = csx, cp->oy = csy;
+        if (dp->type == G_AWVARRAY)
+            cp->sx = sx - 2 * cp->bs, csy += cp->sy + 2 * cp->bs;
+        else
+            cp->sy = sy - 2 * cp->bs, csx += cp->sx + 2 * cp->bs;
     }
     if (dp->type == G_AWVARRAY)
-       dp->sy = csy;
+        dp->sy = csy;
     else
-       dp->sx = csx;
+        dp->sx = csx;
 }
 
-void Gawinitialize(Gwidget_t * widget, int mode)
-{
+void Gawinitialize (Gwidget_t *widget, int mode) {
     WAU->data.type = mode;
-    if (!
-       (WAU->data.carray =
-        Marrayalloc((long) AWCARRAYINCR * AWCARRAYSIZE)))
-       panic(POS, "Gawinitialize", "cannot allocate carray");
+    if (!(WAU->data.carray = Marrayalloc ((long) AWCARRAYINCR * AWCARRAYSIZE)))
+        panic (POS, "Gawinitialize", "cannot allocate carray");
     WAU->data.cn = AWCARRAYINCR;
     WAU->data.cj = 0;
     WAU->data.batchmode = FALSE;
     WAU->data.working = FALSE;
 }
 
-void Gawdestroy(Gwidget_t * widget)
-{
-    Marrayfree(WAU->data.carray);
+void Gawdestroy (Gwidget_t *widget) {
+    Marrayfree (WAU->data.carray);
     WAU->data.cn = WAU->data.cj = 0;
 }
 
-void Gawresize(Gwidget_t * widget)
-{
-    dolayout(widget, FALSE);
+void Gawresize (Gwidget_t *widget) {
+    dolayout (widget, FALSE);
 }
 
-void Gawinsertchild(Gwidget_t * parent, Gwidget_t * child)
-{
+void Gawinsertchild (Gwidget_t *parent, Gwidget_t *child) {
     if (parent->u.a->data.cj == parent->u.a->data.cn) {
-       parent->u.a->data.carray = Marraygrow(parent->u.a->data.carray,
-                                             (long) (parent->u.a->data.
-                                                     cn +
-                                                     AWCARRAYINCR) *
-                                             AWCARRAYSIZE);
-       parent->u.a->data.cn += AWCARRAYINCR;
+        parent->u.a->data.carray = Marraygrow (
+            parent->u.a->data.carray,
+            (long) (parent->u.a->data.cn + AWCARRAYINCR) * AWCARRAYSIZE
+        );
+        parent->u.a->data.cn += AWCARRAYINCR;
     }
     parent->u.a->data.carray[parent->u.a->data.cj++].w = child->w;
-    dolayout(parent, TRUE);
+    dolayout (parent, TRUE);
 }
 
-void Gawdeletechild(Gwidget_t * parent, Gwidget_t * child)
-{
+void Gawdeletechild (Gwidget_t *parent, Gwidget_t *child) {
     int ci;
 
     for (ci = 0; ci < parent->u.a->data.cj; ci++)
-       if (parent->u.a->data.carray[ci].w == child->w)
-           break;
+        if (parent->u.a->data.carray[ci].w == child->w)
+            break;
     if (ci < parent->u.a->data.cj) {
-       for (; ci + 1 < parent->u.a->data.cj; ci++)
-           parent->u.a->data.carray[ci].w =
-               parent->u.a->data.carray[ci + 1].w;
-       parent->u.a->data.cj--;
-       dolayout(parent, TRUE);
+        for (; ci + 1 < parent->u.a->data.cj; ci++)
+            parent->u.a->data.carray[ci].w = parent->u.a->data.carray[ci + 1].w;
+        parent->u.a->data.cj--;
+        dolayout (parent, TRUE);
     }
 }
 
-static void dolayout(Gwidget_t * widget, int flag)
-{
+static void dolayout (Gwidget_t *widget, int flag) {
     Gawdata_t *dp;
     Gawcarray_t *cp;
     RECT r;
     int sx, sy, ci;
 
     if (WAU->data.batchmode || WAU->data.working)
-       return;
+        return;
     WAU->data.working = TRUE;
     dp = &WAU->data;
     for (ci = 0; ci < dp->cj; ci++) {
-       cp = &dp->carray[ci];
-       GetWindowRect(cp->w, &r);
-       cp->flag = 1;
-       cp->ox = 0;
-       cp->oy = 0;
-       cp->sx = r.right - r.left;
-       cp->sy = r.bottom - r.top;
-       cp->bs = 0;
+        cp = &dp->carray[ci];
+        GetWindowRect (cp->w, &r);
+        cp->flag = 1;
+        cp->ox = 0;
+        cp->oy = 0;
+        cp->sx = r.right - r.left;
+        cp->sy = r.bottom - r.top;
+        cp->bs = 0;
     }
-    GetClientRect(widget->w, &r);
+    GetClientRect (widget->w, &r);
     dp->sx = r.right - r.left, dp->sy = r.bottom - r.top;
     if (WAU->func)
-       (*WAU->func) (widget - &Gwidgets[0], dp);
+        (*WAU->func) (widget - &Gwidgets[0], dp);
     else
-       Gawdefcoordscb(widget - &Gwidgets[0], dp);
+        Gawdefcoordscb (widget - &Gwidgets[0], dp);
     if ((sx = dp->sx) < MINAWSIZE)
-       sx = MINAWSIZE;
+        sx = MINAWSIZE;
     if ((sy = dp->sy) < MINAWSIZE)
-       sy = MINAWSIZE;
+        sy = MINAWSIZE;
     if (flag && (r.right - r.left != sx || r.bottom - r.top != sy)) {
-       sx -= (r.right - r.left);
-       sy -= (r.bottom - r.top);
-       GetWindowRect(widget->w, &r);
-       sx += (r.right - r.left);
-       sy += (r.bottom - r.top);
-       SetWindowPos(widget->w, (HWND) NULL, 0, 0, sx, sy,
-                    SWP_NOMOVE | SWP_NOZORDER);
+        sx -= (r.right - r.left);
+        sy -= (r.bottom - r.top);
+        GetWindowRect (widget->w, &r);
+        sx += (r.right - r.left);
+        sy += (r.bottom - r.top);
+        SetWindowPos (
+            widget->w, (HWND) NULL, 0, 0, sx, sy, SWP_NOMOVE | SWP_NOZORDER
+        );
     }
     for (ci = 0; ci < dp->cj; ci++) {
-       cp = &dp->carray[ci];
-       SetWindowPos(cp->w, (HWND) NULL, cp->ox, cp->oy, cp->sx, cp->sy,
-                    SWP_NOZORDER);
+        cp = &dp->carray[ci];
+        SetWindowPos (
+            cp->w, (HWND) NULL, cp->ox, cp->oy, cp->sx, cp->sy, SWP_NOZORDER
+        );
     }
     WAU->data.working = FALSE;
 }