WidgetNode.h File Reference

#include <X11/Intrinsic.h>
#include <X11/Xfuncproto.h>

Include dependency graph for WidgetNode.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  _XmuWidgetNode

Defines

#define XmuWnClass(wn)   ((wn)->widget_class_ptr[0])
#define XmuWnClassname(wn)   (XmuWnClass(wn)->core_class.class_name)
#define XmuWnSuperclass(wn)   ((XmuWnClass(wn))->core_class.superclass)

Typedefs

typedef _XmuWidgetNode XmuWidgetNode

Functions

_XFUNCPROTOBEGIN void XmuWnInitializeNodes (XmuWidgetNode *nodearray, int nnodes)
void XmuWnFetchResources (XmuWidgetNode *node, Widget toplevel, XmuWidgetNode *topnode)
int XmuWnCountOwnedResources (XmuWidgetNode *node, XmuWidgetNode *ownernode, Bool constraints)
XmuWidgetNodeXmuWnNameToNode (XmuWidgetNode *nodelist, int nnodes, _Xconst char *name)


Define Documentation

#define XmuWnClass ( wn   )     ((wn)->widget_class_ptr[0])

Definition at line 61 of file WidgetNode.h.

Referenced by XmuWnFetchResources(), and XmuWnInitializeNodes().

#define XmuWnClassname ( wn   )     (XmuWnClass(wn)->core_class.class_name)

Definition at line 62 of file WidgetNode.h.

Referenced by XmuWnInitializeNodes().

#define XmuWnSuperclass ( wn   )     ((XmuWnClass(wn))->core_class.superclass)

Definition at line 63 of file WidgetNode.h.

Referenced by XmuWnInitializeNodes().


Typedef Documentation

typedef struct _XmuWidgetNode XmuWidgetNode


Function Documentation

int XmuWnCountOwnedResources ( XmuWidgetNode node,
XmuWidgetNode ownernode,
Bool  constraints 
)

Definition at line 279 of file WidgetNode.c.

References _XmuWidgetNode::constraintwn, i, _XmuWidgetNode::nconstraints, _XmuWidgetNode::nresources, and _XmuWidgetNode::resourcewn.

00281 {
00282     register int i;
00283     XmuWidgetNode **wn = (cons ? node->constraintwn : node->resourcewn);
00284     int nmatches = 0;
00285 
00286     for (i = (cons ? node->nconstraints : node->nresources); i > 0; i--, wn++)
00287       if (*wn == ownernode) nmatches++;
00288     return nmatches;
00289 }

void XmuWnFetchResources ( XmuWidgetNode node,
Widget  toplevel,
XmuWidgetNode topnode 
)

Definition at line 211 of file WidgetNode.c.

References compare_resource_entries(), dummy, _XmuWidgetNode::have_resources, _XmuWidgetNode::label, _XmuWidgetNode::nresources, NULL, _XmuWidgetNode::resourcewn, _XmuWidgetNode::superclass, and XmuWnClass.

00213 {
00214     Widget dummy;
00215     XmuWidgetNode *wn;
00216 
00217     if (node->have_resources) return;
00218 
00219     dummy = XtCreateWidget (node->label, XmuWnClass(node), toplevel,
00220                             NULL, 0);
00221     if (dummy) XtDestroyWidget (dummy);
00222 
00223 
00224     /*
00225      * walk up tree geting resources; since we've instantiated the widget,
00226      * we know that all of our superclasses have been initialized
00227      */
00228     for (wn = node; wn && !wn->have_resources; wn = wn->superclass) {
00229         XtGetResourceList (XmuWnClass(wn), &wn->resources, &wn->nresources);
00230         if (wn->resources) {
00231             qsort ((char *) wn->resources, wn->nresources,
00232                    sizeof(XtResource), compare_resource_entries);
00233         }
00234         wn->resourcewn = (XmuWidgetNode **) XtCalloc (wn->nresources,
00235                                                   sizeof (XmuWidgetNode *));
00236         if (!wn->resourcewn) {
00237             fprintf (stderr,
00238                      "%s:  unable to calloc %d %ld byte widget node ptrs\n",
00239                      "XmuWnFetchResources", wn->nresources,
00240                      (unsigned long)sizeof (XmuWidgetNode *));
00241             exit (1);
00242         }
00243 
00244         XtGetConstraintResourceList (XmuWnClass(wn), &wn->constraints,
00245                                      &wn->nconstraints);
00246         if (wn->constraints) {
00247             qsort ((char *) wn->constraints, wn->nconstraints,
00248                    sizeof(XtResource), compare_resource_entries);
00249         }
00250         wn->constraintwn = (XmuWidgetNode **)
00251           XtCalloc (wn->nconstraints, sizeof (XmuWidgetNode *));
00252         if (!wn->constraintwn) {
00253             fprintf (stderr,
00254                      "%s:  unable to calloc %d %ld byte widget node ptrs\n",
00255                      "XmuWnFetchResources", wn->nconstraints,
00256                      (unsigned long)sizeof (XmuWidgetNode *));
00257             exit (1);
00258         }
00259 
00260         wn->have_resources = True;
00261         if (wn == topnode) break;
00262     }
00263 
00264 
00265     /*
00266      * Walk up tree removing all resources that appear in superclass; we can
00267      * mash the resource list in place since it was copied out of widget.
00268      */
00269     for (wn = node; wn; wn = wn->superclass) {
00270         mark_resource_owner (wn);
00271         if (wn == topnode) break;
00272     }
00273 
00274     return;
00275 }

Here is the call graph for this function:

_XFUNCPROTOBEGIN void XmuWnInitializeNodes ( XmuWidgetNode nodearray,
int  nnodes 
)

Definition at line 144 of file WidgetNode.c.

References _XmuWidgetNode::children, _XmuWidgetNode::constraints, _XmuWidgetNode::constraintwn, _XmuWidgetNode::data, done, _XmuWidgetNode::have_resources, i, j, _XmuWidgetNode::label, _XmuWidgetNode::lowered_classname, _XmuWidgetNode::lowered_label, namelen, _XmuWidgetNode::nconstraints, _XmuWidgetNode::nresources, NULL, _XmuWidgetNode::resources, _XmuWidgetNode::resourcewn, _XmuWidgetNode::siblings, _XmuWidgetNode::superclass, superclass, XmuCopyISOLatin1Lowered(), XmuWnClass, XmuWnClassname, and XmuWnSuperclass.

00145 {
00146     int i;
00147     XmuWidgetNode *wn;
00148 
00149     /*
00150      * Assume that the node array is in alphabetic order, so we need to
00151      * search backwards to make sure that the children are listed forward.
00152      */
00153     for (i = nnodes - 1, wn = nodearray + (nnodes - 1); i >= 0; i--, wn--) {
00154         WidgetClass superclass = XmuWnSuperclass(wn);
00155         int j;
00156         XmuWidgetNode *swn;
00157         int lablen = strlen (wn->label);
00158         int namelen = strlen (XmuWnClassname(wn));
00159 
00160         wn->lowered_label = XtMalloc (lablen + namelen + 2);
00161 #if 0
00162         /* XtMalloc exits if failed */
00163         if (!wn->lowered_label) {
00164             fprintf (stderr,
00165                      "%s:  unable to allocate %d bytes for widget name\n",
00166                      "XmuWnInitializeNodes", lablen + namelen + 2);
00167             exit (1);
00168         }
00169 #endif
00170         wn->lowered_classname = wn->lowered_label + (lablen + 1);
00171         XmuCopyISOLatin1Lowered (wn->lowered_label, wn->label);
00172         XmuCopyISOLatin1Lowered (wn->lowered_classname, XmuWnClassname(wn));
00173         wn->superclass = NULL;
00174         wn->have_resources = False;
00175         wn->resources = NULL;
00176         wn->resourcewn = NULL;
00177         wn->nresources = 0;
00178         wn->constraints = NULL;
00179         wn->constraintwn = NULL;
00180         wn->nconstraints = 0;
00181         wn->data = (XtPointer) NULL;
00182 
00183         /*
00184          * walk up the superclass chain
00185          */
00186         while (superclass) {
00187             for (j = 0, swn = nodearray; j < nnodes; j++, swn++) {
00188                 if (superclass == XmuWnClass(swn)) {
00189                     wn->superclass = swn;
00190                     goto done;          /* stupid C language */
00191                 }
00192             }
00193             /*
00194              * Hmm, we have a hidden superclass (such as in core in R4); just
00195              * ignore it and keep on walking
00196              */
00197             superclass = superclass->core_class.superclass;
00198         }
00199       done: 
00200         if (wn->superclass) {
00201             wn->siblings = wn->superclass->children;
00202             wn->superclass->children = wn;
00203         }
00204     }
00205 
00206     return;
00207 }

Here is the call graph for this function:

XmuWidgetNode* XmuWnNameToNode ( XmuWidgetNode nodelist,
int  nnodes,
_Xconst char *  name 
)

Definition at line 293 of file WidgetNode.c.

References i, _XmuWidgetNode::lowered_classname, _XmuWidgetNode::lowered_label, and XmuNCopyISOLatin1Lowered().

00294 {
00295     int i;
00296     XmuWidgetNode *wn;
00297     char tmp[1024];
00298 
00299     XmuNCopyISOLatin1Lowered(tmp, name, sizeof(tmp));
00300     for (i = 0, wn = nodelist; i < nnodes; i++, wn++) {
00301         if (strcmp (tmp, wn->lowered_label) == 0 ||
00302             strcmp (tmp, wn->lowered_classname) == 0) {
00303           return wn;
00304         }
00305     }
00306     return NULL;
00307 }

Here is the call graph for this function:


Generated on Sun Mar 4 16:04:28 2007 for Scilab [trunk] by  doxygen 1.5.1