This is QuerySet.c in view mode; [Download] [Up]
#if ( !defined(lint) && !defined(SABER)) static char PCN_rcsid[] = "$Header: /ufs/comp/carl/PCN/IF/Xsw/RCS/QuerySet.c,v 1.3 1992/01/23 03:14:00 carl Exp $"; #endif /****************************************************************************** * * * Copyright (C) The Aerospace Corporation 1991 * * * * This software was developed by The Aerospace Corporation as a * * research endeavor for the United States Air Force * * Space Systems Division. The current version of the Gauge * * computer program is available for release to you for * * educational and research purposes only. It is not * * to be used for commercial purposes. * * * * In addition, the following conditions shall apply. * * * * 1) The computer software and documentation were designed to * * satisfy internal Aerospace requirements only. * * The software is provided ``as is,'' and The Aerospace Corporation * * makes no warranty, expressed or implied, as to it accuracy, * * functioning, or fitness for a particular purpose. * * * * 2) The Aerospace Corporation and its personnel are not * * responsible for providing technical support or general assistance * * with respect to the software. * * * * 3) Neither The Aerospace Corporation nor its personnel shall be * * liable for claims, losses, or damages arising out of or connected * * with the use of this software. * * Your sole and exclusive remedy shall be to request a replacement * * copy of the program. * * * ******************************************************************************/ #define QUERYSET #include <X11/IntrinsicP.h> #include "Xsw.h" #include <X11/Shell.h> #include <X11/Xaw/Paned.h> #include <X11/Xaw/Box.h> #include "Query.h" #include "Dir.h" #include "QuerySetP.h" #define NOT_IN_LIST -1 #define NONE -1 /****************************************************************** * * Query Set Resources * ******************************************************************/ static XtResource resources[] = { #define offset(field) XtOffset(QuerySet, querySet.field) { XtNfileTags, XtCFileTags, XtRStringList, sizeof(StringList), offset(file_tags), XtRString, "file"}, { XtNnames, XtCNames, XtRSCPairList, sizeof(SCPairList), offset(names), XtRString, "Query Popup"}, { XtNdirectory, XtCDirectory, XtRWidget, sizeof(Widget), offset(dir_w), XtRString, ""}, { XtNhelp, XtCHelp, XtRWidget, sizeof(Widget), offset(help_w), XtRString, ""}, }; static void Initialize(); externaldef(querysetclassrec) QuerySetClassRec querySetClassRec = { { /* superclass */ (WidgetClass)&objectClassRec, /* class_name */ "QuerySet", /* widget_size */ sizeof(QuerySetRec), /* class_initialize */ NULL, /* class_part_initialize*/ NULL, /* class_inited */ FALSE, /* initialize */ Initialize, /* initialize_hook */ NULL, /* realize */ NULL, /* actions */ NULL, /* num_actions */ 0, /* resources */ resources, /* num_resources */ XtNumber(resources), /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ FALSE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ NULL, /* resize */ NULL, /* expose */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* set_values_almost */ NULL, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* version */ XtVersion, /* callback_offsets */ NULL, /* tm_table */ NULL, /* query_geometry */ NULL, /* display_accelerator */ NULL, /* extension */ NULL } }; externaldef(querySetClass) WidgetClass querySetClass = (WidgetClass)&querySetClassRec; static int NameToIndex(qs, name) QuerySet qs; String name; { int i; i = 0; while (qs->querySet.names[i].string != NULL) { if (XswStrCmp(name, qs->querySet.names[i].string)) break; i++; } if (qs->querySet.names[i].string != NULL) return i; else return NOT_IN_LIST; } static void PopupQuery(w,qs,call) Widget w; QuerySet qs; caddr_t call; { String name; XtVaGetValues(w, XtNlabel, &name, NULL); XswQuerySetPopup(qs, name); } static void Done(w,qs,call) Widget w; QuerySet qs; caddr_t call; { XswQueryReturnStruct * query_ret; if (qs->querySet.current != NONE) { query_ret = XswQueryGetAll(qs->querySet.query_w[qs->querySet.current]); XswSCPairListCall(qs->querySet.names, qs->querySet.names[qs->querySet.current].string, qs, query_ret); } } static void Cancel(w,qs,call) Widget w; QuerySet qs; caddr_t call; { XswQuerySetPopdownCurrent(qs); } static void Clear(w,qs,call) Widget w; QuerySet qs; caddr_t call; { if (qs->querySet.current != NONE) XswQueryClear(qs->querySet.query_w[qs->querySet.current]); } static void Help(w,qs,call) Widget w; QuerySet qs; caddr_t call; { if (qs->querySet.help_w != NULL) { if (qs->querySet.current != NONE) { XswHelpShow(qs->querySet.help_w, qs->querySet.names[qs->querySet.current].string, XswGetShell(w), XswRight); XtAddGrab(qs->querySet.help_w, False, False); } } } /* * Start of query set methods */ static void Initialize(request, new) QuerySet request, new; { int i, n; Widget popup, paned, box; new->querySet.current = NONE; new->querySet.tags = (StringList)XtMalloc(1*sizeof(String)); new->querySet.tags[0] = NULL; new->querySet.strings = NULL; XswRegisterCallback("XswPopupQuery", PopupQuery, new); XswRegisterCallback("XswQueryDone", Done, new); XswRegisterCallback("XswQueryCancel", Cancel, new); XswRegisterCallback("XswQueryClear", Clear, new); XswRegisterCallback("XswQueryHelp", Help, new); n = 0; while (new->querySet.names[n].string != NULL) n++; new->querySet.query_w = (Widget *)XtMalloc(sizeof(Widget)*n); i = 0; while (new->querySet.names[i].string != NULL) { popup = XtCreatePopupShell(new->querySet.names[i].string, transientShellWidgetClass, XswTopWidget(), NULL, 0); paned = XtCreateManagedWidget("Query Shell", panedWidgetClass, popup, NULL, 0); box = XtCreateManagedWidget("queryBox", boxWidgetClass, paned, NULL, 0); XswMakeCommandButtons(box); new->querySet.query_w[i] = XtCreateManagedWidget("Query", queryWidgetClass, paned, NULL, 0); i++; } } void XswQuerySetSaveValues(qs, ret_struct) QuerySet qs; XswQueryReturnStruct * ret_struct; { int i, j, k; StringList temp, stemp; if (qs->querySet.current != NONE) { j = 0; while (ret_struct->flag[j] != NULL) { i = 0; while(qs->querySet.tags[i] != NULL) { if (XswStrCmp(qs->querySet.tags[i], ret_struct->flag[j])) break; i++; } if (qs->querySet.tags[i] == NULL) { temp = (StringList)XtMalloc(sizeof(String)*(i+2)); stemp = (StringList)XtMalloc(sizeof(String)*(i+2)); for(k=0; k < i; k++) { temp[k] = qs->querySet.tags[k]; stemp[k] = qs->querySet.strings[k]; } temp[i] = XtNewString(ret_struct->flag[j]); temp[i+1] = NULL; stemp[i] = NULL; stemp[i+1] = NULL; XtFree((char *) qs->querySet.tags); qs->querySet.tags = temp; XtFree((char *) qs->querySet.strings); qs->querySet.strings = stemp; } XtFree((char *) qs->querySet.strings[i]); qs->querySet.strings[i] = XtNewString(ret_struct->entry[j]); j++; } } } void XswQuerySetPopdownCurrent(qs) QuerySet qs; { if (qs->querySet.current != NONE) { XtPopdown(XtParent(XtParent(qs->querySet.query_w[qs->querySet.current]))); qs->querySet.current = NONE; } } Boolean XswQuerySetValue(qs, queryname, tag, value) QuerySet qs; String queryname; String tag; String value; { int i; i = NameToIndex(qs, queryname); if (i != NOT_IN_LIST) { XswQuerySetEntry(qs->querySet.query_w[i], tag, value); return True; } else { return False; } } void XswQuerySetPopup(qs, name) QuerySet qs; String name; { int i, j; StringList lPtr; i = NameToIndex(qs, name); if (i != NOT_IN_LIST) { XswQuerySetPopdownCurrent(qs); qs->querySet.current = i; j = 0; while (qs->querySet.tags[j] != NULL) { XswQuerySetEntry(qs->querySet.query_w[i], qs->querySet.tags[j], qs->querySet.strings[j]); j++; } if (qs->querySet.dir_w != NULL) { lPtr = XswDirGetEntriesAndClear(qs->querySet.dir_w); if (*lPtr != NULL) { j = 0; while (qs->querySet.file_tags[j] != NULL) { XswQuerySetEntry(qs->querySet.query_w[i], qs->querySet.file_tags[j], *lPtr); j++; } } } XswPopup(XtParent(qs->querySet.query_w[i]), XtGrabNonexclusive, XswTopWidget(), XswRight); } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.