1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
/*
* Motif Tools Library, Version 3.1
* $Id$
*
* Written by David Flanagan.
* Copyright (c) 1992-2001 by David Flanagan.
* All Rights Reserved. See the file COPYRIGHT for details.
* This is open source software. See the file LICENSE for details.
* There is no warranty for this software. See NO_WARRANTY for details.
*
* $Log$
* Revision 1.1.1.1 2001/07/18 11:06:03 root
* Initial checkin.
*
* Revision 1.2 2001/06/12 16:25:28 andre
* *** empty log message ***
*
*
*/
/*
* This file courtesy of Tony Hefner.
*/
#include <stdlib.h>
#include <Xmt/Xmt.h>
#if XmVersion == 2000
#include <Xmt/WidgetType.h>
#include <Xmt/QuarksP.h>
#include <Xm/CSText.h>
/* ARGSUSED */
#if NeedFunctionPrototypes
static void setvalue(Widget w, XtPointer address, XrmQuark type, Cardinal size)
#else
static void setvalue(w, address, type, size)
Widget w;
XtPointer address;
XrmQuark type;
Cardinal size;
#endif
{
XmString xmString = NULL;
if (type == XmtQString) {
/* Convert the value to an XmString. */
xmString = XmtCreateLocalizedXmString(w, *(String *)address);
XmCSTextSetString(w, xmString);
}
else if (type == XmtQBuffer) {
/* Convert the value to an XmString. */
xmString = XmtCreateLocalizedXmString(w, (char *)address);
XmCSTextSetString(w, xmString);
}
else
XmtWarningMsg("XmtDialogSetDialogValues", "xmcstext",
"Type mismatch:\n\tCan't set value from resource of type '%s'. String or Buffer expected.",
XrmQuarkToString(type));
if (xmString) XmStringFree(xmString);
}
#if NeedFunctionPrototypes
static void getvalue(Widget w, XtPointer address, XrmQuark type, Cardinal size)
#else
static void getvalue(w, address, type, size)
Widget w;
XtPointer address;
XrmQuark type;
Cardinal size;
#endif
{
int nChars;
int bufferSize;
if (type == XmtQString) {
String buffer;
/* Find out how many characters are in the widget buffer. */
nChars = XmCSTextGetLastPosition(w);
/* Calculate the buffer size for the entire contents. */
bufferSize = (nChars * MB_CUR_MAX) + 1;
buffer = XtMalloc(bufferSize);
/* Now read out the contents. */
XmCSTextGetSubstring(w, 0, nChars, bufferSize, buffer);
*(String *)address = buffer;
}
else if (type == XmtQBuffer) {
/* Find out how many characters are in the widget buffer. */
nChars = XmCSTextGetLastPosition(w);
/* Calculate the buffer size for the entire contents. */
bufferSize = (nChars * MB_CUR_MAX) + 1;
if (size >= nChars)
XmCSTextGetSubstring(w, 0, nChars, size, (char *)address);
else {
XmCSTextGetSubstring(w, 0, size, size, (char *)address);
XmtWarningMsg("XmtDialogGetDialogValues", "xmcstextTrunc",
"The input value is %d characters long\n\tand does not fit into a buffer %d characters long.\n\tThe trailing characters have been truncated.",
nChars, size);
}
}
else
XmtWarningMsg("XmtDialogGetDialogValues", "xmtextType",
"Type mismatch:\n\tCan't set input value on a resource of type '%s'. String or Buffer expected.",
XrmQuarkToString(type));
}
static XmtWidgetType cstext = {
"XmCSText",
NULL,
(XmtWidgetConstructor) XmCreateCSText,
setvalue,
getvalue,
};
static XmtWidgetType scstext = {
"XmScrolledCSText",
NULL,
(XmtWidgetConstructor) XmCreateScrolledCSText,
setvalue,
getvalue,
};
#if NeedFunctionPrototypes
void XmtRegisterXmCSText(void)
#else
void XmtRegisterXmCSText()
#endif
{
_XmtInitQuarks();
XmtRegisterWidgetTypes(&cstext, 1);
}
#if NeedFunctionPrototypes
void XmtRegisterXmScrolledCSText(void)
#else
void XmtRegisterXmScrolledCSText()
#endif
{
_XmtInitQuarks();
XmtRegisterWidgetTypes(&scstext, 1);
}
#else /* if XmVersion = 2000 */
/* just so the compiler doesn't complain about an empty file. */
static char XmtDummy;
#endif
|