#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include <X11/IntrinsicP.h>
#include <X11/StringDefs.h>
#include <X11/Xaw/AsciiTextP.h>
#include <X11/Xaw/AsciiSrcP.h>
#include <X11/Xaw/AsciiSink.h>
#include <X11/Xaw/Cardinals.h>
#include <X11/Xaw/MultiSinkP.h>
#include <X11/Xaw/MultiSrc.h>
#include <X11/Xaw/XawImP.h>
#include <X11/Xaw/XawInit.h>
#include "Private.h"
#define TAB_COUNT 32
static void XawAsciiInitialize(Widget, Widget, ArgList, Cardinal*);
static void XawAsciiDestroy(Widget);
void _XawSourceAddText(Widget, Widget);
void _XawSourceRemoveText(Widget, Widget, Bool);
#define Superclass (&textClassRec)
AsciiTextClassRec asciiTextClassRec = {
{
(WidgetClass)Superclass,
"Text",
sizeof(AsciiRec),
XawInitializeWidgetSet,
NULL,
False,
XawAsciiInitialize,
NULL,
XtInheritRealize,
NULL,
0,
NULL,
0,
NULLQUARK,
True,
XtExposeGraphicsExpose |
XtExposeNoExpose,
True,
False,
XawAsciiDestroy,
XtInheritResize,
XtInheritExpose,
NULL,
NULL,
XtInheritSetValuesAlmost,
NULL,
XtInheritAcceptFocus,
XtVersion,
NULL,
XtInheritTranslations,
XtInheritQueryGeometry,
},
{
XtInheritChangeSensitive,
},
{
NULL,
},
{
NULL,
},
};
WidgetClass asciiTextWidgetClass = (WidgetClass)&asciiTextClassRec;
#ifdef ASCII_STRING
AsciiStringClassRec asciiStringClassRec = {
{
(WidgetClass)&asciiTextClassRec,
"Text",
sizeof(AsciiStringRec),
NULL,
NULL,
False,
NULL,
NULL,
XtInheritRealize,
NULL,
0,
NULL,
0,
NULLQUARK,
True,
XtExposeGraphicsExpose |
XtExposeNoExpose,
True,
False,
NULL,
XtInheritResize,
XtInheritExpose,
NULL,
NULL,
XtInheritSetValuesAlmost,
NULL,
XtInheritAcceptFocus,
XtVersion,
NULL,
XtInheritTranslations,
XtInheritQueryGeometry,
},
{
XtInheritChangeSensitive,
},
{
NULL,
},
{
NULL,
},
{
NULL,
},
};
WidgetClass asciiStringWidgetClass = (WidgetClass)&asciiStringClassRec;
#endif
#ifdef ASCII_DISK
AsciiDiskClassRec asciiDiskClassRec = {
{
(WidgetClass)&asciiTextClassRec,
"Text",
sizeof(AsciiDiskRec),
NULL,
NULL,
False,
NULL,
NULL,
XtInheritRealize,
NULL,
0,
NULL,
0,
NULLQUARK,
True,
True,
XtExposeGraphicsExpose |
XtExposeNoExpose,
False,
NULL,
XtInheritResize,
XtInheritExpose,
NULL,
NULL,
XtInheritSetValuesAlmost,
NULL,
XtInheritAcceptFocus,
XtVersion,
NULL,
XtInheritTranslations,
XtInheritQueryGeometry,
},
{
XtInheritChangeSensitive,
},
{
NULL,
},
{
NULL,
},
{
NULL,
},
};
WidgetClass asciiDiskWidgetClass = (WidgetClass)&asciiDiskClassRec;
#endif
static void
XawAsciiInitialize(Widget request, Widget cnew,
ArgList args, Cardinal *num_args)
{
AsciiWidget w = (AsciiWidget)cnew;
int i;
int tabs[TAB_COUNT], tab;
MultiSinkObject sink;
if (XtHeight(request) == DEFAULT_TEXT_HEIGHT)
XtHeight(cnew) = DEFAULT_TEXT_HEIGHT;
if (w->simple.international == True) {
if (w->text.sink == NULL)
w->text.sink = XtCreateWidget("textSink", multiSinkObjectClass,
cnew, args, *num_args);
else if (!XtIsSubclass(w->text.sink, multiSinkObjectClass))
XtError("Sink object is not a subclass of multiSink");
if (w->text.source == NULL)
w->text.source = XtCreateWidget("textSource", multiSrcObjectClass,
cnew, args, *num_args);
else if (!XtIsSubclass(w->text.source, multiSrcObjectClass))
XtError("Source object is not a subclass of multiSrc");
#ifndef OLDXAW
else
_XawSourceAddText(w->text.source, cnew);
#endif
}
else {
if (w->text.sink == NULL)
w->text.sink = XtCreateWidget("textSink", asciiSinkObjectClass,
cnew, args, *num_args);
else if (!XtIsSubclass(w->text.source, asciiSinkObjectClass))
XtError("Sink object is not a subclass of asciiSink");
if (w->text.source == NULL)
w->text.source = XtCreateWidget("textSource", asciiSrcObjectClass,
cnew, args, *num_args);
else if (!XtIsSubclass(w->text.source, asciiSrcObjectClass))
XtError("Source object is not a subclass of asciiSrc");
#ifndef OLDXAW
else
_XawSourceAddText(w->text.source, cnew);
#endif
}
if (XtHeight(w) == DEFAULT_TEXT_HEIGHT)
XtHeight(w) = VMargins(w) + XawTextSinkMaxHeight(w->text.sink, 1);
for (i = 0, tab = 0; i < TAB_COUNT; i++)
tabs[i] = (tab += 8);
XawTextSinkSetTabs(w->text.sink, TAB_COUNT, tabs);
XawTextDisableRedisplay(cnew);
XawTextEnableRedisplay(cnew);
_XawImRegister(cnew);
if (w->simple.international == True) {
Arg list[4];
Cardinal ac = 0;
sink = (MultiSinkObject)w->text.sink;
XtSetArg(list[ac], XtNfontSet, sink->multi_sink.fontset); ac++;
XtSetArg(list[ac], XtNinsertPosition, w->text.insertPos); ac++;
XtSetArg(list[ac], XtNforeground, sink->text_sink.foreground); ac++;
XtSetArg(list[ac], XtNbackground, sink->text_sink.background); ac++;
_XawImSetValues(cnew, list, ac);
}
}
static void
XawAsciiDestroy(Widget w)
{
AsciiWidget ascii = (AsciiWidget)w;
_XawImUnregister(w);
if (w == XtParent(ascii->text.sink))
XtDestroyWidget(ascii->text.sink);
#ifdef OLDXAW
if (w == XtParent(ascii->text.source))
XtDestroyWidget(ascii->text.source);
#else
_XawSourceRemoveText(ascii->text.source, w,
ascii->text.source &&
w == XtParent(ascii->text.source));
#endif
}