static void _StrokeInitialize(Widget W) { StrokeStatePtr NewState; if (StrokeStateList == NULL) { NewState = XtNew(StrokeState_t); NewState->next = StrokeStateList; StrokeStateList = NewState; NewState->widget = W; NewState->InStroke = False; NewState->points = NULL; NewState->box = NULL; NewState->Map = NULL; NewState->npoints = 0; NewState->maxpoints = 0; NewState->gc = (GC)NULL; XtGetApplicationResources(W, NewState, resources, XtNumber(resources), NULL, 0); if (NewState->slop < 3) { XtWarning("Stroke slop cannot be less than 3"); NewState->slop = 3; } } XtAppAddActions(XtWidgetToApplicationContext(W), Actions, XtNumber(Actions)); }
/*ARGSUSED*/ Boolean XmuCvtLongToString(Display *dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *data) { static char buffer[32]; size_t size; if (*num_args != 0) XtWarning("Long to String conversion needs no extra arguments"); XmuSnprintf(buffer, sizeof(buffer), "%ld", *(long *)fromVal->addr); size = strlen(buffer) + 1; if (toVal->addr != NULL) { if (toVal->size < size) { toVal->size = size; return (False); } strcpy((char *)toVal->addr, buffer); } else toVal->addr = (XPointer)buffer; toVal->size = sizeof(String); return (True); }
void _XmToolTipLeave (Widget w, XEvent * event, String * params, Cardinal * num_params) { XmToolTipConfigTrait ttp = ToolTipGetData (w); if (!ttp) { XtWarning ("_XmToolTipLeave() - ttp == NULL."); return; } if (ttp->timer) { XtRemoveTimeOut (ttp->timer); ttp->timer = (XtIntervalId) NULL; } else { if (event && (ttp->duration_timer || ttp->post_duration == 0)) { ttp->leave_time = event->xcrossing.time; } ToolTipUnpost (ttp, NULL); } }
void main (int argc, char **argv) { XtAppContext context; Display *display; /* ** Initialize toolkit and open display. */ XtToolkitInitialize (); context = XtCreateApplicationContext(); /* ** Keep the same application name, so I don't have to muck around the ** Xdefaults file */ display = XtOpenDisplay (context, NULL, "phase", "Space", NULL, 0, &argc, argv); if (!display) { XtWarning("Space: Can't open display"); exit(0); } /* ** Create an event display panel */ DisplayEventFileSp(display, exit); /* ** Process events. */ XtAppMainLoop (context); }
/*ARGSUSED*/ void XmuCvtStringToBackingStore(XrmValue *args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal) { XrmQuark q; char name[11]; static int backingStoreType; if (*num_args != 0) XtWarning("String to BackingStore conversion needs no extra arguments"); InitializeQuarks(); XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name)); q = XrmStringToQuark (name); if (q == QnotUseful) backingStoreType = NotUseful; else if (q == QwhenMapped) backingStoreType = WhenMapped; else if (q == Qalways) backingStoreType = Always; else if (q == Qdefault) backingStoreType = Always + WhenMapped + NotUseful; else { XtStringConversionWarning((char *)fromVal->addr, XtRBackingStore); return; } toVal->size = sizeof(int); toVal->addr = (XPointer)&backingStoreType; }
/* ARGSUSED */ static void SelectionCallback(Widget w, XtPointer cldat, Atom *selection, Atom *type, XtPointer val, unsigned long *length, int *format) { XPointer value = (XPointer)val; BitmapWidget BW = (BitmapWidget) w; Pixmap *pixmap; switch (*type) { case XA_BITMAP: case XA_PIXMAP: DestroyBitmapImage(&BW->bitmap.storage); pixmap = (Pixmap *) value; BW->bitmap.storage = GetImage(BW, *pixmap); XFree((char *)pixmap); break; default: XtWarning(" selection request failed. BitmapWidget"); break; } BW->bitmap.selection.limbo = FALSE; }
/* * Cloase & Query file-dialog [callback] */ XtCallbackProc FileDialogQuery(Widget w,int ans,caddr_t caller) { String fname; Boolean stat; XtPopdown(dbase); if (ans == FALSE) return; XtVaGetValues(dlText,XtNstring,&fname,NULL); stat = FALSE; switch(dlog_mode) { case Fsave: stat = SaveFile(current_win->text,fname); break; case Fload: stat = LoadFile(current_win->text,fname); break; } if (stat == FALSE) { XtWarning("Can't Open textfile."); } }
static void doSave (Widget w, XtPointer client_data, XtPointer callData __attribute__((unused))) { String saveName; int err; char msg[256]; ViewData *view = client_data; saveName = XawDialogGetValueString(XtParent(w)); strcpy(view->fileName, saveName); WriteGridToFile((Grid *)view->grid, view->fileName, &err); if (err) { sprintf(msg, "Unable to save file %s: C error code %d", saveName, err); setMessageLine(msg); XtWarning(msg); } else { XtVaSetValues(XtShell(w), XtNtitle, view->fileName, NULL); gridHasChanged = False; XtPopdown(saveChangesPopup); XtDestroyWidget(saveChangesPopup); /* MUST do this, otherwise save dialog loops forever */ saveChangesPopup = NULL; } }
/*ARGSUSED*/ static String _XtDefaultLanguageProc( Display *dpy, /* unused */ String xnl, XtPointer closure) /* unused */ { if (! setlocale(LC_ALL, xnl)) XtWarning("locale not supported by C library, locale unchanged"); if (! XSupportsLocale()) { XtWarning("locale not supported by Xlib, locale set to C"); setlocale(LC_ALL, "C"); } if (! XSetLocaleModifiers("")) XtWarning("X locale modifiers not supported, using default"); return setlocale(LC_ALL, NULL); /* re-query in case overwritten */ }
/*@ -usedef -compdef -mustfreefresh @*/ static void set_color(String color) { Display *dpy = XtDisplay(draww); Colormap cmap = DefaultColormapOfScreen(XtScreen(draww)); XColor col, unused; if (XAllocNamedColor(dpy, cmap, color, &col, &unused)==0) { char buf[32]; (void)snprintf(buf, sizeof(buf), "Can't alloc %s", color); XtWarning(buf); return; } (void)XSetForeground(dpy, drawGC, col.pixel); }
void XmuCvtStringToLong(XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal) { static long l; if (*num_args != 0) XtWarning("String to Long conversion needs no extra arguments"); if (sscanf((char *)fromVal->addr, "%ld", &l) == 1) { toVal->size = sizeof(long); toVal->addr = (XPointer)&l; } else XtStringConversionWarning((char *)fromVal->addr, XtRLong); }
static void GetRectangleBuffer(ScaleWidget sw, Cardinal buffer_size) /* * This procedure will realloc a new rectangles buffer. * If the new buffer size is less than nrectangles, some * information will be lost. */ { if (buffer_size == 0) { buffer_size = DefaultBufferSize; XtWarning("buffer size has to be a positive number greater than zero"); } sw->scale.rectangles = (XRectangle *) XtRealloc((char *) sw->scale.rectangles, buffer_size * sizeof(XRectangle)); sw->scale.buffer_size = buffer_size; }
void DtkshCvtStringToNamedValue( XrmValue *args, Cardinal *nargs, XrmValuePtr fval, XrmValuePtr toval ) { /* * same buffer will get used each time */ static int ret; struct named_integer *table; int numtable; char *value; register int i; char * errbuf; char * errmsg; value = (String)fval->addr; if (*nargs != 1) { toval->addr = NULL; toval->size = 0; return; } table = (struct named_integer *)args[0].addr; numtable = args[0].size/sizeof(struct named_integer); for (i = 0; i < numtable; i++) { if (DtCompareISOLatin1(value, (char *)(table[i].name))) { toval->addr = (caddr_t)&table[i].value; toval->size = sizeof(table[i].value); return; } } errmsg =strdup(GETMESSAGE(16,2, "DtkshCvtStringToNamedValue: Unable to convert the string '%s'")); errbuf = XtMalloc(strlen(errmsg) + strlen(value) + 10); sprintf(errbuf, errmsg, value); XtWarning(errbuf); free(errmsg); XtFree(errbuf); toval->addr = NULL; toval->size = 0; return; }
/*ARGSUSED*/ Boolean XmuCvtBackingStoreToString(Display *dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *data) { static String buffer; Cardinal size; switch (*(int *)fromVal->addr) { case NotUseful: buffer = (String)XtEnotUseful; break; case WhenMapped: buffer = (String)XtEwhenMapped; break; case Always: buffer = (String)XtEalways; break; case (Always + WhenMapped + NotUseful): buffer = (String)XtEdefault; break; default: XtWarning("Cannot convert BackingStore to String"); toVal->addr = NULL; toVal->size = 0; return (False); } size = strlen(buffer) + 1; if (toVal->addr != NULL) { if (toVal->size < size) { toVal->size = size; return (False); } strcpy((char *)toVal->addr, buffer); } else toVal->addr = (XPointer)buffer; toVal->size = sizeof(String); return (True); }
/*ARGSUSED*/ Cardinal Urm__UT_Error (char *module, char *error, IDBFile file_id, /* unused */ URMResourceContextPtr context_id, /* unused */ Cardinal status) { /* * Local variables */ char msg[300] ; /* error message */ /* * construct error message */ /* Old form * sprintf (msg, "%s detected error %s - %s", module, error, * Urm__UT_UrmCodeString(status)) ; */ sprintf (msg, "%s: %s - %s", module, error, Urm__UT_UrmCodeString(status)) ; /* * Print or save the message depending on the reporting style */ urm__latest_error_code = status ; switch ( urm__err_out ) { case URMErrOutMemory: if ( urm__latest_error_msg != NULL ) XtFree (urm__latest_error_msg) ; urm__latest_error_msg = (String) XtMalloc (strlen(msg)+1) ; strcpy (urm__latest_error_msg, msg) ; return status ; case URMErrOutStdout: default: XtWarning (msg) ; return status ; } }
/* * Load a font */ static XFontStruct *getFont(AngbandWidget widget, String font, Boolean fallback) { Display *dpy = XtDisplay((Widget) widget); char buf[256]; XFontStruct *fnt = NULL; if (!(fnt = XLoadQueryFont(dpy, font)) && fallback) { sprintf(buf, "Can't find the font \"%s\", trying fixed\n", font); XtWarning(buf); if (!(fnt = XLoadQueryFont(dpy, "fixed"))) { XtError("Can't fint the font \"fixed\"!, bailing out\n"); } } return fnt; }
static void XtcwpStringToAxesStyle (XrmValue *args, int *nargs, XrmValue *fromVal, XrmValue *toVal) { static int result; char *string=fromVal->addr; args += 0*(*nargs); /* keep compiler happy */ /* convert axes style string in fromVal to int in toVal */ if (strcmp(string,"normal")==0) result = XtcwpNORMAL; else if (strcmp(string,"seismic")==0) result = XtcwpSEISMIC; else { result = XtcwpNORMAL; XtWarning("Invalid AxesStyle specification!"); } toVal->size = sizeof(int); toVal->addr = (char *)&result; }
/*ARGSUSED*/ Boolean XmuCvtJustifyToString(Display *dpy, XrmValue* args, Cardinal *num_args, XrmValue *fromVal, XrmValue *toVal, XtPointer *data) { static String buffer; Cardinal size; switch (*(XtJustify *)fromVal->addr) { case XtJustifyLeft: buffer = XtEleft; break; case XtJustifyCenter: buffer = XtEcenter; break; case XtJustifyRight: buffer = XtEright; break; default: XtWarning("Cannot convert Justify to String"); toVal->addr = NULL; toVal->size = 0; return (False); } size = strlen(buffer) + 1; if (toVal->addr != NULL) { if (toVal->size < size) { toVal->size = size; return (False); } strcpy((char *)toVal->addr, buffer); } else toVal->addr = (XPointer)buffer; toVal->size = sizeof(String); return (True); }
void _XmToolTipEnter (Widget wid, XEvent * event, String * params, Cardinal * num_params) { XmToolTipConfigTrait ttp; /* ToolTip pointer */ ttp = ToolTipGetData (wid); if (ttp == NULL) { XtWarning ("ToolTipGetData() returned NULL in _XmToolTipEnter()"); return; } if ((XmIsPrimitive (wid) || XmIsGadget(wid)) && XmGetToolTipString(wid)) { if (ttp->enable && !ttp->timer) { unsigned long delay; if (event && (event->xcrossing.time - ttp->leave_time < ttp->post_delay)) { delay = 0; } else { delay = (unsigned long) ttp->post_delay; } if (ttp->duration_timer) { XtRemoveTimeOut (ttp->duration_timer); ttp->duration_timer = (XtIntervalId) NULL; } ttp->timer = XtAppAddTimeOut (XtWidgetToApplicationContext (wid), delay, (XtTimerCallbackProc) ToolTipPost, wid); } } }
static void XawSimpleClassPartInitialize(WidgetClass cclass) { SimpleWidgetClass c = (SimpleWidgetClass)cclass; SimpleWidgetClass super = (SimpleWidgetClass)c->core_class.superclass; if (c->simple_class.change_sensitive == NULL) { char buf[BUFSIZ]; (void)XmuSnprintf(buf, sizeof(buf), "%s Widget: The Simple Widget class method " "'change_sensitive' is undefined.\nA function " "must be defined or inherited.", c->core_class.class_name); XtWarning(buf); c->simple_class.change_sensitive = ChangeSensitive; } if (c->simple_class.change_sensitive == XtInheritChangeSensitive) c->simple_class.change_sensitive = super->simple_class.change_sensitive; }
/*ARGSUSED*/ Boolean XmuCvtOrientationToString(Display *dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *data) { static String buffer; Cardinal size; switch (*(XtOrientation *)fromVal->addr) { case XtorientVertical: buffer = XtEvertical; break; case XtorientHorizontal: buffer = XtEhorizontal; break; default: XtWarning("Cannot convert Orientation to String"); toVal->addr = NULL; toVal->size = 0; return (False); } size = strlen(buffer) + 1; if (toVal->addr != NULL) { if (toVal->size < size) { toVal->size = size; return (False); } strcpy((char *)toVal->addr, buffer); } else toVal->addr = (XPointer)buffer; toVal->size = sizeof(String); return (True); }
/* resource type converters */ static void XtcwpStringToAxesGrid (XrmValue *args, int *nargs, XrmValue *fromVal, XrmValue *toVal) { static int result; char *string=fromVal->addr; args += 0*(*nargs); /* keep compiler happy */ /* convert axes grid string in fromVal to int in toVal */ if (strcmp(string,"none")==0) result = XtcwpNONE; else if (strcmp(string,"dot")==0) result = XtcwpDOT; else if (strcmp(string,"dash")==0) result = XtcwpDASH; else if (strcmp(string,"solid")==0) result = XtcwpSOLID; else { result = XtcwpNONE; XtWarning("Invalid AxesGrid specification!"); } toVal->size = sizeof(int); toVal->addr = (char *)&result; }
/*ARGSUSED*/ static void Highlight(Widget w, XEvent *event, String *params, Cardinal *num_params) { CommandWidget cbw = (CommandWidget)w; if (*num_params == (Cardinal)0) cbw->command.highlighted = HighlightWhenUnset; else { if (*num_params != (Cardinal)1) XtWarning("Too many parameters passed to highlight action table."); switch (params[0][0]) { case 'A': case 'a': cbw->command.highlighted = HighlightAlways; break; default: cbw->command.highlighted = HighlightWhenUnset; break; } } if (XtIsRealized(w)) PaintCommandWidget(w, event, HighlightRegion(cbw), True); }
static void ToolTipPostFinish (Widget slide, XtPointer client_data, XtPointer call_data) { XmToolTipConfigTrait ttp; ttp = (XmToolTipConfigTrait) client_data; if (ttp == NULL) { XtWarning ("ToolTipPostFinish() - ttp==NULL"); return; } ttp->slider = NULL; if (ttp->post_duration > 0) { ttp->duration_timer = XtAppAddTimeOut (XtWidgetToApplicationContext (ttp->label), (unsigned long) ttp->post_duration, (XtTimerCallbackProc) ToolTipUnpost, client_data); } }
/* * Main Program */ int main(int argc, char **argv) { Display *display; Arg args[256]; Cardinal ac; /*SUPPRESS 591*/ Boolean argok; XtAppContext context; Widget w; Widget parent; /* Begin user code block <declarations> */ /* End user code block <declarations> */ /* * Hierarchy variable declarations * Set "*newMrmStyle:False" in ~/.bxrc for bx25 style declarations */ MrmHierarchy HierarchyID; MrmType MrmWClass; static char *UidFile [] = { BX_UID_FILE_NAME }; MRMRegisterArg NamesList[49]; Cardinal Nlac; Nlac = 0; NamesList[Nlac].name = "CloseTree"; NamesList[Nlac++].value = (XtPointer) CloseTree; NamesList[Nlac].name = "CommandEntered"; NamesList[Nlac++].value = (XtPointer) CommandEntered; NamesList[Nlac].name = "CreateTree"; NamesList[Nlac++].value = (XtPointer) CreateTree; NamesList[Nlac].name = "MDisplayData"; NamesList[Nlac++].value = (XtPointer) MDisplayData; NamesList[Nlac].name = "MDoAction"; NamesList[Nlac++].value = (XtPointer) MDoAction; NamesList[Nlac].name = "MessageClear"; NamesList[Nlac++].value = (XtPointer) MessageClear; NamesList[Nlac].name = "MessageDismiss"; NamesList[Nlac++].value = (XtPointer) MessageDismiss; NamesList[Nlac].name = "ModifyData"; NamesList[Nlac++].value = (XtPointer) ModifyData; NamesList[Nlac].name = "MenuUnmap"; NamesList[Nlac++].value = (XtPointer) MenuUnmap; NamesList[Nlac].name = "BxManageCB"; NamesList[Nlac++].value = (XtPointer) BxManageCB; NamesList[Nlac].name = "MSetupDevice"; NamesList[Nlac++].value = (XtPointer) MSetupDevice; NamesList[Nlac].name = "SetDefault"; NamesList[Nlac++].value = (XtPointer) SetDefault; NamesList[Nlac].name = "MModifyData"; NamesList[Nlac++].value = (XtPointer) MModifyData; NamesList[Nlac].name = "DisplayNci"; NamesList[Nlac++].value = (XtPointer) DisplayNci; NamesList[Nlac].name = "BxExitCB"; NamesList[Nlac++].value = (XtPointer) BxExitCB; NamesList[Nlac].name = "MTurnOnOff"; NamesList[Nlac++].value = (XtPointer) MTurnOnOff; NamesList[Nlac].name = "DisplayData"; NamesList[Nlac++].value = (XtPointer) DisplayData; NamesList[Nlac].name = "MSetDefault"; NamesList[Nlac++].value = (XtPointer) MSetDefault; NamesList[Nlac].name = "MDisplayNci"; NamesList[Nlac++].value = (XtPointer) MDisplayNci; NamesList[Nlac].name = "TurnOnOff"; NamesList[Nlac++].value = (XtPointer) TurnOnOff; NamesList[Nlac].name = "DoAction"; NamesList[Nlac++].value = (XtPointer) DoAction; NamesList[Nlac].name = "OpenTree"; NamesList[Nlac++].value = (XtPointer) OpenTree; NamesList[Nlac].name = "AddListTree"; NamesList[Nlac++].value = (XtPointer) AddListTree; NamesList[Nlac].name = "SetupDevice"; NamesList[Nlac++].value = (XtPointer) SetupDevice; NamesList[Nlac].name = "AddNode"; NamesList[Nlac++].value = (XtPointer) AddNode; #ifdef __hpux NamesList[Nlac].name = "AddListTree"; NamesList[Nlac++].value = (XtPointer) AddListTree; #endif NamesList[Nlac].name = "AddNodeApply"; NamesList[Nlac++].value = (XtPointer) AddNodeApply; NamesList[Nlac].name = "AddNodeDismiss"; NamesList[Nlac++].value = (XtPointer) AddNodeDismiss; NamesList[Nlac].name = "SetUsage"; NamesList[Nlac++].value = (XtPointer) SetUsage; NamesList[Nlac].name = "AddDeviceDismiss"; NamesList[Nlac++].value = (XtPointer) AddDeviceDismiss; NamesList[Nlac].name = "CreateAddDevice"; NamesList[Nlac++].value = (XtPointer) CreateAddDevice; NamesList[Nlac].name = "AddDevice"; NamesList[Nlac++].value = (XtPointer) AddDevice; NamesList[Nlac].name = "WriteTree"; NamesList[Nlac++].value = (XtPointer) WriteTree; NamesList[Nlac].name = "ModifyTags"; NamesList[Nlac++].value = (XtPointer) ModifyTags; NamesList[Nlac].name = "tag_button_proc"; NamesList[Nlac++].value = (XtPointer) tag_button_proc; NamesList[Nlac].name = "tag_selection_proc"; NamesList[Nlac++].value = (XtPointer) tag_selection_proc; #ifdef __hpux NamesList[Nlac].name = "WriteTree"; NamesList[Nlac++].value = (XtPointer) WriteTree; #endif NamesList[Nlac].name = "DeleteNode"; NamesList[Nlac++].value = (XtPointer) DeleteNode; NamesList[Nlac].name = "DeleteNodeNow"; NamesList[Nlac++].value = (XtPointer) DeleteNodeNow; NamesList[Nlac].name = "RenameNode"; NamesList[Nlac++].value = (XtPointer) RenameNode; NamesList[Nlac].name = "AddNodeStart"; NamesList[Nlac++].value = (XtPointer) AddNodeStart; NamesList[Nlac].name = NULL; NamesList[Nlac].value = NULL; MrmInitialize(); XtToolkitInitialize(); context = XtCreateApplicationContext(); display = XtOpenDisplay(context, 0, BX_APP_NAME, BX_APP_CLASS, #ifndef XtSpecificationRelease options, XtNumber(options), (Cardinal*)&argc, argv); #else #if XtSpecificationRelease == 4 options, XtNumber(options), (Cardinal*)&argc, argv); #else options, XtNumber(options), &argc, argv); #endif #endif if(display == NULL) { XtWarning("cannot open display"); exit(1); } /* * So converters work. */ XtInitializeWidgetClass(applicationShellWidgetClass); /* * Install the tearOffModel resource converter */ #if (XmVersion >= 1002) XmRepTypeInstallTearOffModelConverter(); #endif /* * Register special BuilderXcessory converters */ RegisterBxConverters(context); /* Begin user code block <create_shells> */ XmdsInitialize(); /* End user code block <create_shells> */ /* * The applicationShell is created as an unrealized * parent for multiple topLevelShells. The topLevelShells * are created as popup children of the applicationShell. * This is a recommendation of Paul Asente & Ralph Swick in * _X_Window_System_Toolkit_ p. 677. */ ac = 0; AppShell = parent = XtAppCreateShell( BX_APP_NAME, BX_APP_CLASS, applicationShellWidgetClass, display, args, ac); MrmRegisterNames(NamesList, Nlac); HierarchyID = 0; MrmOpenHierarchy((MrmCount)(1), UidFile, 0, &HierarchyID); XtInitializeWidgetClass(topLevelShellWidgetClass); ac = 0; XtSetArg(args[ac], XmNtitle, "Traverser"); ac++; XtSetArg(args[ac], XmNiconName, "Traverser"); ac++; XtSetArg(args[ac], XmNx, 947); ac++; XtSetArg(args[ac], XmNy, 349); ac++; XtSetArg(args[ac], XmNwidth, 509); ac++; XtSetArg(args[ac], XmNheight, 672); ac++; TopLevelShell = XtCreatePopupShell( "topLevelShell", topLevelShellWidgetClass, AppShell, args, ac); MainWindow = NULL; MrmFetchWidget(HierarchyID, "mainWindow", TopLevelShell, &MainWindow, &MrmWClass); WriteDialog = NULL; MrmFetchWidget(HierarchyID, "writeDialog", MainWindow, &WriteDialog, &MrmWClass); AddDialog = NULL; MrmFetchWidget(HierarchyID, "addDialog", MainWindow, &AddDialog, &MrmWClass); AddDeviceDialog = NULL; MrmFetchWidget(HierarchyID, "addDeviceDialog", MainWindow, &AddDeviceDialog, &MrmWClass); OpenDialog = NULL; MrmFetchWidget(HierarchyID, "openDialog", MainWindow, &OpenDialog, &MrmWClass); MrmCloseHierarchy(HierarchyID); XtManageChild(MainWindow); XtPopup(XtParent(MainWindow), XtGrabNone); /* Begin user code block <app_procedures> */ /* End user code block <app_procedures> */ /* Begin user code block <main_loop> */ /* End user code block <main_loop> */ XtVaSetValues(TopLevelShell,XmNdeleteResponse, XmDO_NOTHING, NULL); XmAddWMProtocolCallback(TopLevelShell,XmInternAtom(XtDisplay(TopLevelShell),"WM_DELETE_WINDOW",True),(XtCallbackProc)CloseWindow,NULL); XtAppMainLoop(context); /* * A return value even though XtAppMainLoop never ends. */ return(0); }
/* * Font and internal_border can be changed on the fly. * * The entire widget is redrawn if any of those parameters change (all * can potentially have effects that spans the whole widget). * * Color changes are handled elsewhere. * * This function is very underspecified, in terms of how these changes can * occur, and what is true about the various AngbandWidget's passed in. It * is very likely that this code no longer works. */ static Boolean SetValues(AngbandWidget current, AngbandWidget request, AngbandWidget wnew, ArgList args, Cardinal *num_args) { Display *dpy = XtDisplay(wnew); Boolean font_changed = FALSE; Boolean border_changed = FALSE; int height, width; int i; /* Handle font change */ if (wnew->angband.font != current->angband.font) { /* Check if the font exists */ wnew->angband.fnt = getFont(wnew, wnew->angband.font, FALSE); /* The font didn't exist */ if (wnew->angband.fnt == NULL) { wnew->angband.fnt = current->angband.fnt; wnew->angband.font = current->angband.font; XtWarning("Couldn't find the requested font!"); } else { font_changed = TRUE; /* Free the old font */ XFreeFont(XtDisplay((Widget)wnew), current->angband.fnt); /* Update font information */ wnew->angband.fontheight = wnew->angband.fnt->ascent + wnew->angband.fnt->descent; wnew->angband.fontwidth = wnew->angband.fnt->max_bounds.width; wnew->angband.fontascent = wnew->angband.fnt->ascent; } } /* Handle font change */ if (font_changed) { /* Update all GC's */ for (i = 0; i < NUM_COLORS; i++) { /* Steal the old GC */ wnew->angband.gc[i] = current->angband.gc[i]; current->angband.gc[i] = NULL; /* Be sure the correct font is ready */ XSetFont(dpy, wnew->angband.gc[i], wnew->angband.fnt->fid); } /* Steal the old GC */ wnew->angband.gc[NUM_COLORS] = current->angband.gc[NUM_COLORS]; current->angband.gc[NUM_COLORS] = NULL; } /* Check if internal border width has changed, used later */ if (current->angband.internal_border != wnew->angband.internal_border) { border_changed = TRUE; } /* If the font or the internal border has changed, all geometry */ /* has to be recalculated */ if (font_changed || border_changed) { /* Change window size */ height = ((current->core.height - 2 * current->angband.internal_border) / current->angband.fontheight * wnew->angband.fontheight + 2 * current->angband.internal_border); width = ((current->core.width - 2 * current->angband.internal_border) / current->angband.fontwidth * wnew->angband.fontwidth + 2 * wnew->angband.internal_border); /* Get the new width */ if (XtMakeResizeRequest((Widget)wnew, width, height, NULL, NULL) == XtGeometryNo) { /* Not allowed */ XtWarning("Size change denied!"); } else { /* Recalculate size hints */ calculateSizeHints(wnew); } } /* Tell it to redraw the widget if anything has changed */ return (font_changed || border_changed); }
Widget XNavMotif::build_menu( Widget Parent, int MenuType, const char *MenuTitle, void *MenuUserData, void (*Callback)( Widget, XNav *, XmAnyCallbackStruct *), void *CallbackData, xmenu_sMenuItem *Items, int *idx) { Widget Menu, Cascade, W; int i; unsigned int Level; XmString Str; WidgetClass Class; Arg ArgList[5]; XmFontList fontlist; XFontStruct *font; XmFontListEntry fontentry; // Set default fontlist font = XLoadQueryFont( flow_Display(Parent), "-*-Helvetica-Bold-R-Normal--12-*-*-*-P-*-ISO8859-1"); fontentry = XmFontListEntryCreate( (char*) "tag1", XmFONT_IS_FONT, font); fontlist = XmFontListAppendEntry( NULL, fontentry); XtFree( (char *)fontentry); i = 0; XtSetArg(ArgList[i], XmNuserData, MenuUserData); i++; XtSetArg(ArgList[i], XmNbuttonFontList, fontlist); i++; XtSetArg(ArgList[i], XmNlabelFontList, fontlist); i++; if (MenuType == MENU_PULLDOWN || MenuType == MENU_OPTION) Menu = XmCreatePulldownMenu(Parent, (char*) "_pulldown", ArgList, i); else if (MenuType == MENU_POPUP) Menu = XmCreatePopupMenu(Parent, (char*) "_popup", ArgList, i); else { XtWarning("Invalid menu type passed to BuildMenu()."); return NULL; } if (MenuType == MENU_PULLDOWN) { Str = XmStringCreateSimple((char*) MenuTitle); Cascade = XtVaCreateManagedWidget(MenuTitle, xmCascadeButtonGadgetClass, Parent, XmNsubMenuId, Menu, XmNlabelString, Str, NULL); XmStringFree(Str); } else if (MenuType == MENU_OPTION) { Str = XmStringCreateSimple((char*) MenuTitle); XtSetArg(ArgList[0], XmNsubMenuId, Menu); XtSetArg(ArgList[1], XmNlabelString, Str); Cascade = XmCreateOptionMenu(Parent, (char*) MenuTitle, ArgList, 2); XmStringFree(Str); } XmFontListFree( fontlist); Level = Items[*idx].Level; for (; Items[*idx].Level != 0 && Items[*idx].Level >= Level; (*idx)++) { if (Items[*idx].Item == xmenu_eMenuItem_Cascade || Items[*idx].Item == xmenu_eMenuItem_Ref) { if (MenuType == MENU_OPTION) { XtWarning("You can't have submenus from option menu items."); return NULL; } else { i = *idx; (*idx)++; build_menu(Menu, MENU_PULLDOWN, Lng::translate( Items[i].Name), MenuUserData, Callback, CallbackData, Items, idx); (*idx)--; } } else { if (Items[*idx].Item == xmenu_eMenuItem_Separator) Class = xmSeparatorGadgetClass; else Class = xmPushButtonGadgetClass; W = XtVaCreateManagedWidget(Lng::translate( Items[*idx].Name), Class, Menu, XmNuserData, *idx, XmNsensitive, (Boolean)(Items[*idx].Flags.f.Sensitive == 1), NULL); if (Callback && Class == xmPushButtonGadgetClass) XtAddCallback(W, XmNactivateCallback, (XtCallbackProc) Callback, (XtPointer) CallbackData); } } return MenuType == MENU_POPUP ? Menu : Cascade; }
/* * Initialize a term_data */ static errr term_data_init(term_data *td, Widget topLevel, int key_buf, String name, ArgList widget_arg, Cardinal widget_arg_no, int i) { Widget parent; term *t = &td->t; int cols = 80; int rows = 24; char buf[80]; cptr str; int val; /* Create the shell widget */ parent = XtCreatePopupShell(name, topLevelShellWidgetClass, topLevel, NULL, 0); /* Window specific cols */ sprintf(buf, "ANGBAND_X11_COLS_%d", i); str = getenv(buf); val = (str != NULL) ? atoi(str) : -1; if (val > 0) cols = val; /* Window specific rows */ sprintf(buf, "ANGBAND_X11_ROWS_%d", i); str = getenv(buf); val = (str != NULL) ? atoi(str) : -1; if (val > 0) rows = val; /* Hack the main window must be at least 80x24 */ if (i == 0) { if (cols < 80) cols = 80; if (rows < 24) rows = 24; } /* Reset the initial size */ widget_arg[0].value = rows; widget_arg[1].value = cols; /* Hack ox==oy in xaw port */ /* Window specific inner border offset (ox) */ sprintf(buf, "ANGBAND_X11_IBOX_%d", i); str = getenv(buf); val = (str != NULL) ? atoi(str) : -1; if (val > 0) widget_arg[6].value = val; /* Window specific inner border offset (oy) */ sprintf(buf, "ANGBAND_X11_IBOY_%d", i); str = getenv(buf); val = (str != NULL) ? atoi(str) : -1; if (val > 0) widget_arg[6].value = val; /* Create the interior widget */ td->widget = (AngbandWidget) XtCreateManagedWidget(name, angbandWidgetClass, parent, widget_arg, widget_arg_no); /* Initialize the term (full size) */ term_init(t, cols, rows, key_buf); /* Use a "soft" cursor */ t->soft_cursor = TRUE; /* Erase with "white space" */ t->attr_blank = TERM_WHITE; t->char_blank = ' '; /* Hooks */ t->xtra_hook = Term_xtra_xaw; t->curs_hook = Term_curs_xaw; t->wipe_hook = Term_wipe_xaw; t->text_hook = Term_text_xaw; /* Save the data */ t->data = td; /* Register the keypress event handler */ XtAddEventHandler((Widget)td->widget, KeyPressMask, False, (XtEventHandler) handle_event, td); /* Redraw callback */ XtAddCallback((Widget)td->widget, XtNredrawCallback, react_redraw, td); /* Realize the widget */ XtRealizeWidget(parent); /* Have we redefined the font? */ if (streq(td->widget->angband.font, DEFAULT_X11_FONT)) { XFontStruct *fnt; /* Check if the font exists */ fnt = getFont(td->widget, (String) get_default_font(i), FALSE); /* The font didn't exist */ if (fnt == NULL) { XtWarning("Couldn't find the requested font!"); } else { int height, width; /* Free the old font */ XFreeFont(XtDisplay((Widget)td->widget), td->widget->angband.fnt); /* Update font information */ td->widget->angband.fontheight = fnt->ascent + fnt->descent; td->widget->angband.fontwidth = fnt->max_bounds.width; td->widget->angband.fontascent = fnt->ascent; for (i = 0; i < NUM_COLORS; i++) { /* Be sure the correct font is ready */ XSetFont(XtDisplay((Widget)td->widget), td->widget->angband.gc[i], fnt->fid); } /* Get the window shape */ height = (td->widget->angband.start_rows * td->widget->angband.fontheight + 2 * td->widget->angband.internal_border); width = (td->widget->angband.start_columns * td->widget->angband.fontwidth + 2 * td->widget->angband.internal_border); /* Request a change to the new shape */ if (XtMakeResizeRequest((Widget)td->widget, width, height, NULL, NULL) == XtGeometryNo) { /* Not allowed */ XtWarning("Size change denied!"); } else { /* Recalculate size hints */ calculateSizeHints(td->widget); } } } /* Make it visible */ XtPopup(parent, XtGrabNone); /* Activate (important) */ Term_activate(t); Resize_term(td->widget); return 0; }
static Widget TraverseInside(Widget w , int where , Time *time) { MwBaseConstWidget cw = (MwBaseConstWidget) w; int gravitation,fgrav; int i; switch (where) { case MW_TRAVERSE_FIRST: cw->baseConst.current_focused = NULL; for(i = 0 ; i < cw->composite.num_children ; i++) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (gravitation == XtCleft) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } if (!cw->baseConst.current_focused) { for(i = cw->composite.num_children - 1 ; i >= 0 ; i--) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (gravitation == XtCright) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } } break; case MW_TRAVERSE_LAST: cw->baseConst.current_focused = NULL; for(i = 0 ; i < cw->composite.num_children ; i++) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (gravitation == XtCright) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } if (!cw->baseConst.current_focused) { for(i = cw->composite.num_children - 1; i >= 0 ; i--) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (gravitation == XtCleft) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } } break; case MW_TRAVERSE_NEXT: if (cw->composite.num_children) { for(i = 0 ; i < cw->composite.num_children && cw->baseConst.current_focused != cw->composite.children[i] ; i++); if (i < cw->composite.num_children && cw->baseConst.current_focused) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &fgrav , NULL); cw->baseConst.current_focused = NULL; if (fgrav == XtCleft) { for ( i = i + 1 ; i < cw->composite.num_children ; i++) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (gravitation == fgrav) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } } else { for ( i = i - 1 ; i >= 0 ; i--) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (gravitation == fgrav) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } } if (!cw->baseConst.current_focused && fgrav == XtCleft) { for(i = cw->composite.num_children - 1 ; i >= 0 ; i--) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (gravitation != fgrav) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } } } else { cw->baseConst.current_focused = NULL; for(i = 0 ; i < cw->composite.num_children ; i++) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (gravitation == XtCleft) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } if (!cw->baseConst.current_focused) { for(i = cw->composite.num_children - 1 ; i >= 0 ; i--) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (gravitation == XtCright) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } } } } break; case MW_TRAVERSE_PREV: if (cw->composite.num_children) { for(i = 0 ; i < cw->composite.num_children && cw->baseConst.current_focused != cw->composite.children[i] ; i++); if (i < cw->composite.num_children && cw->baseConst.current_focused) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &fgrav , NULL); cw->baseConst.current_focused = NULL; if (fgrav == XtCleft) { cw->baseConst.current_focused = NULL; for( i = i - 1 ; i >= 0 ; i--) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (fgrav == gravitation) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } } else { cw->baseConst.current_focused = NULL; for( i = i + 1 ; i < cw->composite.num_children ; i++) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (fgrav == gravitation) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } } if (!cw->baseConst.current_focused && fgrav == XtCright) { for(i = cw->composite.num_children - 1 ; i >= 0 ; i--) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (gravitation != fgrav) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } } } else { for(i = 0 ; i < cw->composite.num_children ; i++) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (gravitation == XtCright) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } if (!cw->baseConst.current_focused) { for(i = cw->composite.num_children - 1 ; i >= 0 ; i--) { XtVaGetValues(cw->composite.children[i] , XtNgravitation , &gravitation , NULL); if (gravitation == XtCleft) { MwSetTraverseDirection(cw->composite.children[i] , where); if (XtCallAcceptFocus(cw->composite.children[i] , time)) { cw->baseConst.current_focused = cw->composite.children[i]; break; } } } } } } break; case MW_TRAVERSE_ACTUAL: if (cw->composite.num_children) { for(i = 0 ; i < cw->composite.num_children && cw->baseConst.current_focused != cw->composite.children[i] ; i++); if (i < cw->composite.num_children && cw->baseConst.current_focused) { MwSetTraverseDirection(cw->composite.children[i] , where); XtCallAcceptFocus(cw->composite.children[i] , time); } } else { cw->baseConst.current_focused = NULL; } break; default: XtWarning("Unknown direction"); } return cw->baseConst.current_focused; }
static void ToolTipPost (XtPointer client_data, XtIntervalId * id) { Widget w = (Widget) client_data; int rx, ry, x, y; unsigned int key; Window root, child; XtWidgetGeometry geo; Position destX, destY; XmToolTipConfigTrait ttp; /* ToolTip pointer */ ttp = ToolTipGetData (w); if (ttp == NULL) { XtWarning ("ToolTipGetData() returned NULL in ToolTipPost()"); return; } ttp->timer = (XtIntervalId) NULL; XQueryPointer (XtDisplay (w), XtWindow (w), &root, &child, &rx, &ry, &x, &y, &key); if (ttp->duration_timer != (XtIntervalId) NULL) { XtRemoveTimeOut (ttp->duration_timer); ttp->duration_timer = (XtIntervalId) NULL; } if (XmIsPrimitive(w) || XmIsGadget(w)) { XtVaSetValues (ttp->label, XmNlabelString, XmGetToolTipString(w), NULL); } else { XmString string; string = XmStringCreateLocalized (XtName (w)); XtVaSetValues (ttp->label, XmNlabelString, string, NULL); XmStringFree (string); } XtQueryGeometry (ttp->label, NULL, &geo); /* rws 25 Feb 2001 Fix for Bug #1153 Don't let the tip be off the right/bottom of the screen */ destX = rx + (XmIsGadget (w) ? XtX (w) : 0) - x + XtWidth (w) / 2; if (destX + geo.width > WidthOfScreen (XtScreen (w))) { destX = WidthOfScreen (XtScreen (w)) - geo.width; } destY = ry + (XmIsGadget (w) ? XtY (w) : 0) - y + XtHeight (w); if (destY + geo.height > HeightOfScreen (XtScreen (w))) { destY = ry + (XmIsGadget (w) ? XtY (w) : 0) - y - geo.height; } XtVaSetValues (XtParent (ttp->label), XmNx, rx + 1, XmNy, ry + 1, XmNwidth, 1, XmNheight, 1, NULL); ttp->slider = XtVaCreateWidget ("ToolTipSlider", xmSlideContextWidgetClass, XmGetXmDisplay (XtDisplay (w)), XmNslideWidget, XtParent (ttp->label), XmNslideDestX, destX, XmNslideDestY, destY, XmNslideDestWidth, geo.width, XmNslideDestHeight, geo.height, NULL); XtAddCallback (ttp->slider, XmNslideFinishCallback, (XtCallbackProc) ToolTipPostFinish, ttp); XtPopup (XtParent (ttp->label), XtGrabNone); }