XEmacs 21.2-b1
[chise/xemacs-chise.git.1] / etc / tests / external-widget / test-ew-motif.c
diff --git a/etc/tests/external-widget/test-ew-motif.c b/etc/tests/external-widget/test-ew-motif.c
new file mode 100644 (file)
index 0000000..7cbc064
--- /dev/null
@@ -0,0 +1,145 @@
+#include <Xm/Xm.h>
+#include <Xm/RowColumn.h>
+#include <Xm/Scale.h>
+#include <Xm/PushB.h>
+#include <Xm/Label.h>
+#include <Xm/Text.h>
+#include <Xm/PanedW.h>
+#include "ExternalClient.h"
+
+#ifdef TOOLTALK
+#include <desktop/tt_c.h>
+char *HxProcID;
+#endif
+
+XtAppContext xt_app_con;
+
+void ScaleValueChangedCB(Widget scale, XtPointer app_data, XtPointer widget_data)
+{
+    XmScaleCallbackStruct *xms = (XmScaleCallbackStruct *) widget_data;
+    Widget label = (Widget) app_data;
+    char labelarr[10];
+    XmString labelstr;
+#if 0
+    sprintf(labelarr, "%d", xms->value);
+    labelstr = XmStringCreateLocalized(labelarr);
+    XtVaSetValues(label, XmNlabelString, labelstr, NULL);
+    XmStringFree(labelstr);
+#endif
+}
+
+#ifdef TOOLTALK
+static void
+handle_tt_input(XtPointer client_data, int *source, XtInputId *id)
+{
+  Tt_message m = tt_message_receive();
+
+  if (m && !(tt_ptr_error(m))) {
+    tt_message_destroy(m);
+  }
+}
+
+Tt_status
+HxInitializeToolTalk()
+{
+  static Boolean initialized = FALSE;
+
+  if (!initialized) {
+    int fd;
+    Tt_status status;
+
+    HxProcID = tt_open();
+    fd = tt_fd();
+    if (TT_OK != (status = tt_session_join( tt_default_session() )))
+      return status;
+    (void)XtAppAddInput(xt_app_con, fd, (void *)XtInputReadMask, handle_tt_input, NULL);
+    initialized = TRUE;
+  }
+
+  return TT_OK;
+}
+#endif
+
+main(int argc, char **argv)
+{
+    Widget shell, rowcolumn, scale, pushbutton, label1, label2, text;
+    Widget paned, text2;
+    int n, i;
+    Widget widlist[100];
+    Widget emacscli[100];
+    Arg args[100];
+    int no_ews = 1;
+    char buf[100];
+
+    if (argc > 1)
+      no_ews = atoi (argv[1]);
+
+    shell = XtAppInitialize(&xt_app_con, "Testmotif", NULL, 0,
+       &argc, argv, NULL, NULL, 0);
+
+#ifdef TOOLTALK
+    HxInitializeToolTalk();
+#endif
+
+    rowcolumn = XmCreateRowColumn(shell, "rowcolumn", NULL, 0);
+    XtManageChild(rowcolumn);
+
+    n = 0;
+    XtSetArg(args[n], XmNtraversalOn, TRUE); n++;
+#if 0
+    label1 = XmCreateLabel(rowcolumn, "label1", args, n);
+#endif
+    label1 = XtVaCreateWidget("label1", xmLabelWidgetClass, rowcolumn,
+                             XmNwidth, 50, XmNheight, 30,
+                             XmNtraversalOn, TRUE, NULL);
+    label2 = XmCreateLabel(rowcolumn, "label2", NULL, 0);
+    scale = XmCreateScale(rowcolumn, "scale", NULL, 0);
+    XtAddCallback(scale, XmNvalueChangedCallback, ScaleValueChangedCB, label1);
+    paned = XmCreatePanedWindow(rowcolumn, "paned", NULL, 0);
+    n = 0;
+    widlist[n++] = label1;
+    widlist[n++] = label2;
+    widlist[n++] = scale;
+    widlist[n++] = paned;
+    XtManageChildren(widlist, n);
+
+    pushbutton = XmCreatePushButton(paned, "pushbutton", NULL, 0);
+    text = XmCreateText(paned, "text", NULL, 0);
+    for (i=0; i<no_ews; i++) {
+      sprintf (buf, "extcli%d", i);
+      emacscli[i] = XtVaCreateWidget(buf, externalClientWidgetClass, paned,
+                                    XmNwidth, 500, XmNheight, 200,
+                                    XmNtraversalOn, TRUE,
+#ifdef TOOLTALK
+                                    XtNuseToolTalk, TRUE,
+#endif
+                                    NULL);
+    }
+    text2 = XmCreateText(paned, "text2", NULL, 0);
+    n = 0;
+    widlist[n++] = pushbutton;
+    widlist[n++] = text;
+    for (i=0; i<no_ews; i++)
+      widlist[n++] = emacscli[i];
+    widlist[n++] = text2;
+    XtManageChildren(widlist, n);
+
+    XtRealizeWidget(shell);
+
+    {
+      XmString lab;
+      char labarr[1000];
+      char tmpbuf[50];
+      
+      strcpy (labarr, "window:");
+      for (i=0; i<no_ews; i++) {
+       sprintf (tmpbuf, " %d", XtWindow(emacscli[i]));
+       strcat (labarr, tmpbuf);
+      }
+      lab = XmStringCreateLocalized(labarr);
+      XtVaSetValues(label2, XmNlabelString, lab, NULL);
+      XmStringFree(lab);
+    }
+    
+    XtAppMainLoop(xt_app_con);
+}