Sample Program Using Motif and Views
The following sample program is a full example of how to integrate Views code into a Motif application (samples/foundation/xlib/src/ilvmotif.cpp):
// -------------------------------------------------------------- -*- C++ -*-
// Views samples source file
// File: samples/foundation/xlib/src/ilvmotif.cpp
// --------------------------------------------------------------------------
// Using the grapher in a Motif widget
// --------------------------------------------------------------------------
#include <ilviews/contain/contain.h>
#include <ilviews/graphics/all.h>
#include <stdio.h>
#include <stdlib.h>
// --------------------------------------------------------------------------
// Integration Part with Motif
// --------------------------------------------------------------------------
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xlib.h>
#include <X11/Shell.h>
#include <Xm/Xm.h>
#include <Xm/DrawingA.h>
#include <Xm/PushB.h>
// --------------------------------------------------------------------------
static void
Quit(Widget, XtPointer display, XtPointer)
{
delete (IlvDisplay*)display;
exit(0);
}
#define INPUT_MASK (unsigned long)(ButtonPressMask | ButtonReleaseMask |\
KeyPressMask | KeyReleaseMask |\
ButtonMotionMask | EnterWindowMask |\
LeaveWindowMask | PointerMotionMask | \
ExposureMask | StructureNotifyMask)
extern "C" void IlvDispatchEvent(XEvent* xevent);
static void
ManageInput(Widget, XtPointer, XEvent* xevent, Boolean*)
{
IlvDispatchEvent(xevent);
}
// --------------------------------------------------------------------------
IlvDisplay*
IlvGetDisplay(Display* xdisplay)
{
static IlvDisplay* ilv_display = 0;
if (!ilv_display)
ilv_display = new IlvDisplay(xdisplay, "IlvMotif");
return ilv_display;
}
// --------------------------------------------------------------------------
IlvContainer*
CreateContainer(Widget widget)
{
IlvContainer* c = new IlvContainer(IlvGetDisplay(XtDisplay(widget)),
(IlvSystemView)XtWindow(widget));
XtAddEventHandler(widget, INPUT_MASK, False,
ManageInput, (XtPointer)c);
return c;
}
// --------------------------------------------------------------------------
int
main(int argc, char* argv[])
{
Widget toplevel = XtInitialize("", "IlvMotif", NULL, 0,
&argc, argv);
if (!toplevel)
exit(1);
Widget drawArea = XtVaCreateManagedWidget("ilvview",
xmDrawingAreaWidgetClass,
(Widget)toplevel,
XtNwidth, 400,
XtNheight, 400,
(IlAny) 0);
Widget pushb = XtVaCreateManagedWidget("Quit",
xmPushButtonWidgetClass,
drawArea,
(IlAny) 0);
XtRealizeWidget(toplevel);
IlvContainer* container = CreateContainer(drawArea);
XtAddCallback(pushb, XmNactivateCallback, Quit, container->getDisplay());
container->readFile("demo2d.ilv");
XtMainLoop();
return 0;
}