📄 sewin.c
字号:
/* * This file is part of the Seyon, Copyright (c) 1992-1993 by Muhammad M. * Saggaf. All rights reserved. * * See the file COPYING (1-COPYING) or the manual page seyon(1) for a full * statement of rights and permissions for this program. *//* -*- Mode: C -*- * SeWin.c --- Windows/widgets routines * Author : Muhammad M. Saggaf * Created On : sometime in 1992 * Last Modified By: system admin * Last Modified On: Sat Jun 5 16:57:06 1993 * Update Count : 9 * Status : Mostly OK, needs some cleaning up */#include <X11/Intrinsic.h>#include <X11/StringDefs.h>#include <X11/Shell.h>#include <X11/Xmu/CharSet.h>#include <X11/Xaw/Command.h>#include <X11/Xaw/List.h>#include "MultiList.h"#include <X11/Xaw/Toggle.h>#include <X11/Xaw/AsciiText.h>#include <X11/Xaw/Box.h>#include <X11/Xaw/Dialog.h>#include <X11/Xaw/Form.h>#include <X11/Xaw/Paned.h>#include <setjmp.h>#include "seyon.h"#include "SeDecl.h"extern Widget topLevel;extern Widget statusMessage;extern Pixmap progIcon;void SePopupMsg(), EditSaveFile(), StopMainLoop();Boolean DoMainLoop;/* * does nothing */voidDoNothing(){ return;}/* * distroys a popup */voidDestroyShell(widget) Widget widget;{ Widget shell = GetShell(widget); XtPopdown(shell); XtDestroyWidget(shell);}voidDestroyShellCallBack(widget, child) Widget widget; XtPointer child;{ DestroyShell((Widget)child);}voidDestroyParentPopup(widget, child) Widget widget; XtPointer child;{ DestroyShellCallBack(widget, child);}voidDismissPopup(widget, upFlag) Widget widget; XtPointer upFlag;{ *((Boolean*)upFlag) = False; DestroyShell(widget);}voidResetFlag(widget, flag) Widget widget; XtPointer flag;{ *((Boolean*)flag) = False;}voidSetSensitiveOn(widget, callData) Widget widget; XtPointer callData;{ XtVaSetValues((Widget)callData, XtNsensitive, True, NULL);}/* * creates a button */WidgetSeAddButton(name, parent, call_back) String name; Widget parent; void (*call_back) ();{ Widget widget; widget = XtCreateManagedWidget(name, commandWidgetClass, parent, NULL, 0); XtAddCallback(widget, XtNcallback, call_back, (XtPointer) parent); return widget;}/* * similar to the above, but also passes client data to the call back * WCD = with client data */WidgetSeAddButtonWCD(name, parent, callBack, clientData) String name; Widget parent; void (*callBack) (); XtPointer clientData;{ return AddButton(name, parent, callBack, clientData);}WidgetAddButton(name, parent, callBack, clientData) String name; Widget parent; void (*callBack) (); XtPointer clientData;{ Widget widget; widget = XtCreateManagedWidget(name, commandWidgetClass, parent, NULL, 0); if (callBack) XtAddCallback(widget, XtNcallback, callBack, clientData); return widget;}WidgetSeAddButtonWithClientData(name, parent, call_back, client_data) String name; Widget parent; void (*call_back) (); XtPointer client_data;{ return SeAddButtonWCD(name, parent, call_back, client_data);}/* * creates a label */WidgetSeAddLabel(name, parent) String name; Widget parent;{ return XtCreateManagedWidget(name, labelWidgetClass, parent, NULL, 0);}/* * sets a widget's label */voidSeSetLabel(widget, label) Widget widget; String label;{ XtVaSetValues(widget, XtNlabel, label, NULL);}/* * creates a toggle */WidgetSeAddToggleWCD(name, parent, call_back, clientData) String name; Widget parent; void (*call_back) (); XtPointer clientData;{ Widget widget; widget = XtCreateManagedWidget(name, toggleWidgetClass, parent, NULL, 0); if (call_back) { if (clientData == NULL) clientData = (XtPointer) parent; XtAddCallback(widget, XtNcallback, call_back, clientData); } return widget;}WidgetSeAddToggle(name, parent, call_back) String name; Widget parent; void (*call_back) ();{ return SeAddToggleWCD(name, parent, call_back, NULL);}/* * sets or unsets a toggle */voidSeSetUnsetToggle(widget, state) Widget widget; Boolean state;{ XtVaSetValues(widget, XtNstate, state, NULL);}/* * gets a toggle's state */BooleanSeGetToggleState(widget) Widget widget;{ Boolean state; XtVaGetValues(widget, XtNstate, &state, NULL); return state;}WidgetSePopupRadio(popup_name, parent, name, active, call_back, clientData) String popup_name; Widget parent; String name[]; int active; void (*call_back) (); XtPointer clientData;{ Widget popup, mBox, uBox, lBox, toggle, widget; long i = 0; popup = AddSimplePopup(popup_name, parent); mBox = SeAddPaned("mBox", popup); uBox = SeAddBox("Radio", mBox); lBox = SeAddBox("lBox", mBox); toggle = XtVaCreateManagedWidget(name[i], toggleWidgetClass, uBox, XtNradioData, (XtPointer) (i + 1), NULL); SeSetUnsetToggle(toggle, (active == i + 1)); XtAddCallback(toggle, XtNcallback, call_back, clientData); for (i++; name[i]; i++) { widget = XtVaCreateManagedWidget(name[i], toggleWidgetClass, uBox, XtNradioGroup, toggle, XtNradioData, (XtPointer) (i + 1), NULL); SeSetUnsetToggle(widget, (active == i + 1)); XtAddCallback(widget, XtNcallback, call_back, clientData); } SeAddButtonWCD("dismiss", lBox, DestroyParentPopup, (XtPointer) mBox); PopupCentered(popup, parent); return toggle;}/* * AddBox: creates a box. */WidgetAddBox(name, parent) String name; Widget parent;{ return XtCreateManagedWidget(name, boxWidgetClass, parent, NULL, 0);}WidgetSeAddBox(name, parent) String name; Widget parent;{ return AddBox(name, parent);}/* * AddDialog: creates a dialog widget. */WidgetAddDialog(name, parent) String name; Widget parent;{ return XtCreateManagedWidget(name, dialogWidgetClass, parent, NULL, 0);}WidgetSeAddDialog(name, parent) String name; Widget parent;{ return AddDialog(name, parent);}/* * sets a dialog's label */voidSeSetDialogValue(dialog, value) Widget dialog; String value;{ Arg args; XtSetArg(args, XtNvalue, value); XtSetValues(dialog, &args, 1);}WidgetPopupDialogGetValue(name, parent, callBack, clientData, defVal) String name; Widget parent; void (*callBack)(); XtPointer clientData; String defVal;{ Widget popup, dialog; popup = AddSimplePopup(name, parent); dialog = AddDialog("dialog", popup); XtVaSetValues(dialog, XtNvalue, (defVal ? defVal : ""), NULL); if (clientData == NULL) clientData = (XtPointer)dialog; XawDialogAddButton(dialog, "ok", callBack, clientData); XawDialogAddButton(dialog, "cancel", DestroyShell, (XtPointer)dialog); return dialog;}char getValueDefValue[REG_BUF];void (*getValueExecProc)();voidGetValueDispatchProc(valueWidget) Widget valueWidget;{ Widget dialog = XtParent(valueWidget); strcpy(getValueDefValue, XawDialogGetValueString(dialog)); DestroyShell(dialog); (*getValueExecProc)(XtParent(GetShell(valueWidget)), getValueDefValue);}voidGetValueByPopupOKAction(widget) Widget widget;{ GetValueDispatchProc(widget);}voidGetValueByPopup(widget, name, callback) Widget widget; String name; XtCallbackProc callback;{ Widget popup, dialog; getValueExecProc = (void (*)())callback; popup = GetShell((dialog = PopupDialogGetValue(name, widget, GetValueDispatchProc, NULL, getValueDefValue))); PopupCentered(popup, widget);}WidgetSePopupDialogGetStringE(popup_name, parent, ok_callback, ok_client_data, def_val, UL) String popup_name; Widget parent; void (*ok_callback) (); XtPointer ok_client_data; String def_val; Boolean UL;{ Widget dialog; dialog = PopupDialogGetValue(popup_name, parent, ok_callback, ok_client_data, def_val); PopupCentered(GetShell(dialog), parent); return dialog;}WidgetSePopupDialogGetString(popup_name, parent, ok_callback, ok_client_data) String popup_name; Widget parent; void (*ok_callback) (); XtPointer ok_client_data;{ return SePopupDialogGetStringE(popup_name, parent, ok_callback, ok_client_data, NULL, False);}/* * creates a from */WidgetSeAddForm(name, parent) String name; Widget parent;{ return XtCreateManagedWidget(name, formWidgetClass, parent, NULL, 0);}WidgetAddPaned(name, parent) String name; Widget parent;{ return XtCreateManagedWidget(name, panedWidgetClass, parent, NULL, 0);}WidgetSeAddPaned(name, parent) String name; Widget parent;{ return AddPaned(name, parent);}/* * sets a viewport's dimensions */voidSeSetViewportDimensions(viewport, child, max_height) Widget viewport, child; Dimension max_height;{ SeSetWidgetWidth(viewport, SeWidgetWidth(child) + 14); if (SeWidgetHeight(child) > max_height) SeSetWidgetHeight(viewport, max_height);}/* * sets a viwport's dimensions according to a child list */voidSeSetViewportDimFromList(viewport, list, rows) Widget viewport, list; Cardinal rows;{ XFontStruct *font; Dimension height, internalHeight, rowSpacing, borderWidth; XtVaGetValues(list, XtNfont, &font, XtNinternalHeight, &internalHeight, XtNrowSpacing, &rowSpacing, XtNborderWidth, &borderWidth, NULL); height = font->ascent + font->descent; height = height * rows + rowSpacing * (rows - 1) + 2 * (internalHeight + borderWidth); SeSetViewportDimensions(viewport, list, height);}/* * sets a viwport's dimensions according to a child multi-list */voidSeSetViewportDimFromMultiList(viewport, list, rows) Widget viewport, list; Cardinal rows;{ Dimension rowHeight, borderWidth; XtVaGetValues(list, XtNrowHeight, &rowHeight, XtNborderWidth, &borderWidth, NULL); SeSetViewportDimensions(viewport, list, rowHeight * rows + 2 * borderWidth);}WidgetGetShell(widget) Widget widget;{ while ((widget != NULL) && !XtIsShell(widget)) widget = XtParent(widget); return (widget);}intIconifyShell(widget) Widget widget;{ widget = GetShell(widget); return (int)XIconifyWindow(XtDisplay(widget), XtWindow(widget), XScreenNumberOfScreen(XtScreen(widget)));}/* * Creates a popup with a bit more control on geometry. * WG = With Geometry */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -