EditTable Widget WebFAQ - Q1
/******************************************************************************
XintEditTable Example:
******************************************************************************/
#include <stdio.h>
#include <Xm/Xm.h>
#include <Xm/Form.h>
#include <Xm/PushBG.h>
#include <Xm/Separator.h>
#include <Xm/RowColumn.h>
#include <Xint/Scroll.h>
#include <Xint/EditTable.h>
static char *control_names[] = { "Help", "Exit" };
/*
* Forward Declarations
*/
static Widget CreateTargetWidgets();
static Widget CreateControls();
/*
* Global Variables
*/
static Widget Toplevel, Scroll, Table;
/*
* Translations
*/
static char table_translations[] =
"Shift <Btn1Down>: EditTableStartSelect(multiple)\n\
Button1<Motion>: EditTableExtendSelect()\n\
Shift <Btn2Down>: EditTableClearSelection()\n\
Shift <Btn3Down>: EditTableClearAllSelections()\n\
Ctrl <Btn1Down>: EditTableExtendSelect()";
static char annotation_translations[] =
"~Ctrl ~Shift ~Meta ~Alt <Btn1Down>: AnnotationStartSelect()\n\
Shift <Btn1Down>: AnnotationStartSelect(multiple)\n\
Button1<Motion>: AnnotationExtendSelect()\n\
Ctrl <Btn1Down>: AnnotationExtendSelect()\n\
<Btn1Up>: AnnotationEndSelect()\n\
Shift <Btn2Down>: EditTableClearSelection()\n\
Shift <Btn3Down>: EditTableClearAllSelections()";
main(argc, argv)
int argc;
char *argv[];
{
XtAppContext app_context;
Widget container, control_panel, target, sep;
Arg arg[64];
int n;
Toplevel = XtVaAppInitialize(&app_context, "INT Example", NULL, 0, &argc,
argv, NULL, XmNallowShellResize, True, NULL);
/*
* Form as a container
*/
n = 0;
container = XtCreateManagedWidget("container", xmFormWidgetClass,
Toplevel, arg, n);
/*
* Target Widgets
*/
n = 0;
XtSetArg(arg[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(arg[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(arg[n], XmNleftAttachment, XmATTACH_FORM); n++;
target = CreateTargetWidgets(container, arg, n);
/*
* Separator
*/
n = 0;
/* constraint resources */
XtSetArg(arg[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(arg[n], XmNleftAttachment, XmATTACH_FORM); n++;
sep = XtCreateManagedWidget("sep", xmSeparatorWidgetClass, container, arg, n);
/*
* Control Panel
*/
n = 0;
/* constraint resources */
XtSetArg(arg[n], XmNorientation, XmHORIZONTAL); n++;
XtSetArg(arg[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(arg[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(arg[n], XmNbottomAttachment, XmATTACH_FORM); n++;
control_panel = CreateControls(container, arg, n);
/*
* Fine tuning on layout
*/
XtVaSetValues(sep, XmNbottomAttachment, XmATTACH_WIDGET,
XmNbottomWidget, control_panel,
NULL);
XtVaSetValues(target, XmNbottomAttachment, XmATTACH_WIDGET,
XmNbottomWidget, sep,
NULL);
XtRealizeWidget(Toplevel);
XtAppMainLoop(app_context);
}
static Widget
CreateTargetWidgets(parent, arg, n)
Widget parent;
ArgList arg;
int n;
{
XtTranslations translations;
XtSetArg(arg[n], XmNwidth, 500); n++;
XtSetArg(arg[n], XmNheight, 500); n++;
Scroll = XtCreateWidget("Scroll", xintScrollWidgetClass, parent, arg, n);
translations = XtParseTranslationTable(annotation_translations);
Table = XtVaCreateWidget("Table", xintEditTableWidgetClass, Scroll,
XmNtitleBackground, XintLoadColor(XtDisplay(parent), "cyan"),
XmNtitleString, "XintEditTable Example",
XmNtitleShadowType, XintSHADOW_IN,
XmNgridLineStyle, XintGRID_LINE_SHADOW_OUT,
XmNtableForeground, XintLoadColor(XtDisplay(parent), "blue"),
XmNcolumnAnnotationTranslations, translations,
XmNrowAnnotationTranslations, translations,
NULL);
XtOverrideTranslations(Table, XtParseTranslationTable(table_translations));
XtManageChild(Scroll);
XtManageChild(Table);
return Scroll;
}
static void
Help()
{
static Widget message_box = NULL;
if (message_box == NULL) {
static char help_text[] = "Place Help Text Here \nPlace Help Text Here\nPlace Help Text Here\nPlace Help Text Here\nPlace Help Text Here\nPlace Help Text Here";
XmString message;
XFontStruct *font;
XmFontList font_list = NULL;
Arg arg[2];
int n = 0;
message = XmStringCreateLtoR(help_text, XmSTRING_DEFAULT_CHARSET);
if ((font = XLoadQueryFont(XtDisplay(Toplevel), "*helvetica*14*")) == NULL)
font = XLoadQueryFont(XtDisplay(Toplevel), "fixed");
font_list = XmFontListCreate(font, XmSTRING_DEFAULT_CHARSET);
XtSetArg(arg[n], XmNlabelFontList, font_list); n++;
XtSetArg(arg[n], XmNmessageString, message); n++;
message_box = (Widget) XmCreateMessageDialog(Toplevel, "message", arg, n);
XtUnmanageChild((XtPointer)XmMessageBoxGetChild(message_box,
XmDIALOG_CANCEL_BUTTON));
XtUnmanageChild((XtPointer)XmMessageBoxGetChild(message_box,
XmDIALOG_HELP_BUTTON));
XmStringFree(message);
XmFontListFree(font_list);
}
XtManageChild(message_box);
XBell(XtDisplay(message_box), 0);
}
static void
ControlCallback(widget, id, unused)
Widget widget;
int id;
XtPointer unused;
{
switch (id) {
case XtNumber(control_names) - 2: Help(); break;
case XtNumber(control_names) - 1: exit (0); break;
default: XtError("Bad control code passed to ControlsProc");
}
}
static Widget
CreateControls(parent, arg, n)
Widget parent;
ArgList arg;
int n;
{
XmString name;
Widget panel, button;
int i;
panel = XtCreateManagedWidget("control_panel", xmRowColumnWidgetClass,
parent, arg, n);
/*
* PushButtons as controls
*/
n = 0;
XtSetArg(arg[n], XmNpushButtonEnabled, True); n++;
XtSetArg(arg[n], XmNmarginWidth, 4); n++;
XtSetArg(arg[n], XmNmarginHeight, 4); n++;
for (i = 0; i < XtNumber(control_names); i++) {
name = XmStringCreateLtoR(control_names[i], XmSTRING_DEFAULT_CHARSET);
XtSetArg(arg[n], XmNlabelString, name);
button = XtCreateManagedWidget("control_button", xmPushButtonGadgetClass,
panel, arg, n + 1);
XtAddCallback(button, XmNactivateCallback, ControlCallback, (XtPointer)i);
XmStringFree(name);
}
return panel;
}
Click here for the Image
Back to EditTable FAQ
© INT 1996.