This is Gauge.c in view mode; [Download] [Up]
#if ( !defined(lint) && !defined(SABER)) static char PCN_rcsid[] = "$Header: /ufs/comp/mei/PROJ_PCN/onprofile/IFModel/Model/Gauge/RCS/Gauge.c,v 1.4 1992/04/17 18:14:44 mei Exp $"; #endif /* AERO_MESG */ #include <Xsw/Xsw.h> #include <X11/Xaw/Box.h> #include <X11/Xaw/Paned.h> #include <X11/Xaw/Command.h> #include <X11/Xaw/Toggle.h> #include <X11/Shell.h> #include <Xsw/MyList.h> #include "Viewer.h" #include "Gauge.h" #include "gauge_icon.h" #include "Select.h" typedef struct { int items; double maximum; double minimum; double total; double (*function)(); } StatsStruct; /* Helper funtions to simplify interface */ ListElement * RowList(w) Widget w; { Arg arg[2]; ListElement *hlist; XtSetArg(arg[0], XtNhlist, &hlist); XtGetValues(w, arg, 1); return hlist; } ListElement * ColumnList(w) Widget w; { Arg arg[2]; ListElement *vlist; XtSetArg(arg[0], XtNvlist, &vlist); XtGetValues(w, arg, 1); return vlist; } void show_pos(y, x, name, d) void * y, * x; String name; StatsStruct * d; { double data; d->items++; data = (*(d->function))(y, x, name); d->total += data; if (data > d->maximum) d->maximum = data; if (data < d->minimum) d->minimum = data; } /* ARGSUSED */ void Quit(w, client_data, call_data) Widget w; XtPointer call_data, client_data; { XtDestroyWidget((Widget)client_data); } /* ARGSUSED */ static void Tweak(w, client_data, call_data) Widget w; XtPointer call_data, client_data; { StatsStruct data; StatsStruct * d = &data; char text[500]; Widget view = *((Widget *)client_data); Arg args[2]; double (*function)(); XtSetArg(args[0], XtNgetValueFunction, &function); XtGetValues(view, args, 1); data.function = function; data.total = 0.0; data.items = 0; data.maximum = 0; data.minimum = 100000000; XswViewerMapSelections(view, show_pos, (void *)d); (void)sprintf(text,"\nStatistics\n\nTotal: %g\nItems: %d\nMean: %g\nMaximum: %g\nMinimum: %g\n\n ", data.total, data.items, data.total/(double)data.items, data.maximum, data.minimum); XswPopupBox(view, "Statistics", (char *)text); } /* ARGSUSED */ static void Clear(w, client_data, call_data) Widget w; XtPointer call_data, client_data; { Widget view = *((Widget *)client_data); XswViewerClearSelections(view); } /* ARGSUSED */ static void Scale(w, client_data, call_data) Widget w; XtPointer call_data, client_data; { Widget view = *((Widget *)client_data); XswViewerPopupScale(view); } /* ARGSUSED */ static void SwitchView(w, client_data, call_data) Widget w; XtPointer call_data, client_data; { int d; Widget view = *((Widget *)client_data); VTypeList root_type; VType core_type; d = (int)XawToggleGetCurrent(w); if ((d < 1) || (d > 3)) return; XtVaGetValues(view, XtNrootType, &root_type, NULL); XtVaSetValues(view, XtNradioView, w, NULL); core_type = *root_type; root_type++; while (*root_type != -1) { if (*root_type != ThreeD) { core_type = *root_type; } root_type++; } if (core_type == ThreeD) { XtSetSensitive(XtParent(w), True); switch (d) { case 1: XtVaSetValues(view, XtNshowType, ThreeD, NULL); break; case 2: XtVaSetValues(view, XtNshowType, ByProcedures, NULL); break; case 3: XtVaSetValues(view, XtNshowType, ByNodes, NULL); break; } } else { if ((core_type == ByNodes) ? (d != 3) : (d != 2)) { XawToggleUnsetCurrent(w); XawToggleSetCurrent(w, (XtPointer) (core_type == ByNodes ? 3 : 2)); } XtSetSensitive(XtParent(w), False); } } /* ARGSUSED */ static void ToggleBucket(w, client_data, call_data) Widget w; XtPointer call_data, client_data; { int d; Widget view = *((Widget *)client_data); d = (int)XawToggleGetCurrent(w); if (d == 1) { XtVaSetValues(view, XtNbucket, True, NULL); } else { if (d == 2) { XtVaSetValues(view, XtNbucket, False, NULL); } } } /* ARGSUSED */ static void ToggleZoom(w, client_data, call_data) Widget w; XtPointer call_data, client_data; { int d; Widget view = *((Widget *)client_data); d = (int)XawToggleGetCurrent(w); if (d == 1) { XtVaSetValues(view, XtNzoom, True, NULL); } else { if (d == 2) { XtVaSetValues(view, XtNzoom, False, NULL); } } } /* ARGSUSED */ static void ToggleLog(w, client_data, call_data) Widget w; XtPointer call_data, client_data; { int d; Widget view = *((Widget *)client_data); d = (int)XawToggleGetCurrent(w); if (d == 1) { XtVaSetValues(view, XtNlog, True, NULL); } else { if (d == 2) { XtVaSetValues(view, XtNlog, False, NULL); } } } /* Note: gauge is not used, it should probably be removed at some time */ /* ARGSUSED */ Widget CreateGauge(vPtr,toplevel,gauge,hlist,vlist,get_value_function,currview) Widget * vPtr; Widget toplevel; void *gauge; ListElement * hlist, * vlist; double (*get_value_function)(); ViewerWidget currview; { Widget root, view, cset_w, rset_w, sset_w; Widget toggles; Widget *viewPtr = (Widget *)XtMalloc(sizeof(Widget *)); Arg arg[20]; StringList data; Pixmap icon_pixmap = (Pixmap) 0; int i; XswRegisterCallback("Quit", Quit, (XtPointer)toplevel); XswRegisterCallback("Clear", Clear, (XtPointer)viewPtr); XswRegisterCallback("Scale", Scale, (XtPointer)viewPtr); XswRegisterCallback("Tweak", Tweak, (XtPointer)viewPtr); XswRegisterCallback("SwitchView", SwitchView, (XtPointer)viewPtr); XswRegisterCallback("ToggleZoom", ToggleZoom, (XtPointer)viewPtr); XswRegisterCallback("ToggleBucket", ToggleBucket, (XtPointer)viewPtr); XswRegisterCallback("ToggleLog", ToggleLog, (XtPointer)viewPtr); XtSetArg(arg[0], XtNiconPixmap, &icon_pixmap); XtGetValues(toplevel, arg, 1); if (icon_pixmap == (Pixmap) 0) { XtSetArg(arg[0], XtNiconPixmap, XCreateBitmapFromData(XtDisplay(toplevel), XtScreen(toplevel)->root, gauge_bits, gauge_width, gauge_height)); XtSetValues(toplevel, arg, 1); } root = XtVaCreateManagedWidget( "gauge", panedWidgetClass, toplevel, NULL); cset_w = XtVaCreateManagedWidget( "commandBox", boxWidgetClass, root, NULL); rset_w = XtVaCreateManagedWidget( "radioBox", boxWidgetClass, root, NULL); sset_w= XtVaCreateManagedWidget( "snapBox", selectWidgetClass, root, XtNdataPtr, (XtPointer *) gauge, XtNsnapWidth, 380, NULL); /* We only want to create a chart once */ XswViewerDisableViewUpdate(); view = XtVaCreateManagedWidget( "view", viewerWidgetClass, root, XtNhlist, hlist, XtNvlist, vlist, XtNgetValueFunction, get_value_function, NULL); data = NULL; if (currview != (ViewerWidget) NULL) { Arg oldarg[1]; /* hui 4/22 fix subset bug XtSetArg(oldarg[1], XtNdata, &data); */ XtSetArg(oldarg[0], XtNdata, &data); XtGetValues((Widget) currview, oldarg, 1); } CreateViewMenu(view, "viewMenu", data); *viewPtr = view; *vPtr = view; (void)XswMakeCommandButtons(cset_w); if (currview != (ViewerWidget) NULL) toggles = XtNameToWidget(XtParent((Widget) currview),"radioBox"); else toggles = NULL; (void)XswMakeRadioButtons(rset_w, toggles); /* Ok, now make the chart */ XswViewerEnableViewUpdate(); XswViewerUpdateView(view); return view; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.