EditTable Widget WebFAQ - Q1



/******************************************************************************
  XintEditTable Example:
 ******************************************************************************/
#include &ltstdio.h>
#include &ltXm/Xm.h>
#include &ltXm/Form.h>
#include &ltXm/PushBG.h>
#include &ltXm/Separator.h>
#include &ltXm/RowColumn.h>
#include &ltXint/Scroll.h>
#include &ltXint/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 &ltBtn1Down>:                    EditTableStartSelect(multiple)\n\
   Button1&ltMotion>:                     EditTableExtendSelect()\n\
   Shift &ltBtn2Down>:                    EditTableClearSelection()\n\
   Shift &ltBtn3Down>:                    EditTableClearAllSelections()\n\
   Ctrl &ltBtn1Down>:                     EditTableExtendSelect()";

static char annotation_translations[] =
  "~Ctrl ~Shift ~Meta ~Alt &ltBtn1Down>:  AnnotationStartSelect()\n\
   Shift &ltBtn1Down>:                    AnnotationStartSelect(multiple)\n\
   Button1&ltMotion>:                     AnnotationExtendSelect()\n\
   Ctrl &ltBtn1Down>:                     AnnotationExtendSelect()\n\
   &ltBtn1Up>:                            AnnotationEndSelect()\n\
   Shift &ltBtn2Down>:                    EditTableClearSelection()\n\
   Shift &ltBtn3Down>:                    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.