|
Packit |
b099d7 |
/* $TOG: UTMlist.c /main/7 1999/11/17 12:49:08 jff $ */
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <Xm/XmP.h>
|
|
Packit |
b099d7 |
#include <Xm/TransferP.h>
|
|
Packit |
b099d7 |
#include "UTMtransfer.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
extern TransferDataRec datums[];
|
|
Packit |
b099d7 |
extern unsigned int num_datums;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Atom type = None;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
SetTypeCB(Widget w, XtPointer client_data, XtPointer call_data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char *in;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
in = (char *) client_data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (strlen(in) == 0)
|
|
Packit |
b099d7 |
type = XmeGetEncodingAtom(w);
|
|
Packit |
b099d7 |
else if (strcmp(in, "NONE") == 0)
|
|
Packit |
b099d7 |
type = None;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
type = XInternAtom(XtDisplay(w), in, False);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*******************************************************************
|
|
Packit |
b099d7 |
* FindRightButton
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* picks the correct button for the type option menu to display
|
|
Packit |
b099d7 |
* note that the names are ATOMNAMEbutton, so it prepends a
|
|
Packit |
b099d7 |
* '*' in front and 'button' after the name before looking up
|
|
Packit |
b099d7 |
* the button.
|
|
Packit |
b099d7 |
******************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Widget
|
|
Packit |
b099d7 |
FindRightButton(char* atom_string)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char buffer[80];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
strcpy(buffer, "*");
|
|
Packit |
b099d7 |
strcat(buffer, atom_string);
|
|
Packit |
b099d7 |
strcat(buffer, "button");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(XtNameToWidget(MainW, buffer));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Put a 32bit or larger value into the Label widget */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Display32bit(XtPointer value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char temp[80];
|
|
Packit |
b099d7 |
XmString strtmp;
|
|
Packit |
b099d7 |
unsigned long data;
|
|
Packit |
b099d7 |
int n;
|
|
Packit |
b099d7 |
Arg args[2];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
data = * (unsigned long *) value;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sprintf(temp, "0x%lx", data);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
strtmp = XmStringCreateLocalized(temp);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString, strtmp); n++;
|
|
Packit |
b099d7 |
XtSetValues(labelV, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmStringFree(strtmp);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*********************************************************************
|
|
Packit |
b099d7 |
* ListSelectItem
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* this is called when the user selects an item in the list. It takes
|
|
Packit |
b099d7 |
* the type of the item and decides how to display it in the Label
|
|
Packit |
b099d7 |
* widget
|
|
Packit |
b099d7 |
*********************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
ListSelectItemCB(Widget w, XtPointer ignore, XtPointer call_data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmListCallbackStruct *listcb;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
int index;
|
|
Packit |
b099d7 |
Atom XA_COMPOUND_TEXT = XInternAtom(XtDisplay(w), XmSCOMPOUND_TEXT, False),
|
|
Packit |
b099d7 |
XA_PIXEL = XInternAtom(XtDisplay(w), "PIXEL", False),
|
|
Packit |
b099d7 |
XA_LOCALE_TEXT = XmeGetEncodingAtom(w),
|
|
Packit |
b099d7 |
XA_MOTIF_CS = XInternAtom(XtDisplay(w),
|
|
Packit |
b099d7 |
XmS_MOTIF_COMPOUND_STRING, False),
|
|
Packit |
b099d7 |
XA_MOTIF_RT = XInternAtom(XtDisplay(w),
|
|
Packit |
b099d7 |
XmS_MOTIF_RENDER_TABLE, False);
|
|
Packit |
b099d7 |
Widget mem = (Widget) NULL;
|
|
Packit |
b099d7 |
char *targetname;
|
|
Packit |
b099d7 |
XmString tmp;
|
|
Packit |
b099d7 |
int n;
|
|
Packit |
b099d7 |
Arg args[2];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
listcb = (XmListCallbackStruct *) call_data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
index = listcb -> item_position;
|
|
Packit |
b099d7 |
if (index < 1) return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
index --;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Put name of target into display field */
|
|
Packit |
b099d7 |
targetname = GetSafeAtom(XtDisplay(w), datums[index].target);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (targetname == NULL) targetname = XtNewString("Unknown");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
tmp = XmStringCreateLocalized(targetname);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString, tmp); n++;
|
|
Packit |
b099d7 |
XtSetValues(labelN, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmStringFree(tmp);
|
|
Packit |
b099d7 |
tmp = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree(targetname);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Put type of target into display field */
|
|
Packit |
b099d7 |
type = datums[index].type;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (type == XA_ATOM ||
|
|
Packit |
b099d7 |
type == XInternAtom(XtDisplay(w), "ATOM_PAIR", False)) {
|
|
Packit |
b099d7 |
char str[80];
|
|
Packit |
b099d7 |
Atom *alist = (Atom *) datums[index].value;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
mem = FindRightButton("ATOM");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (type == XA_ATOM) {
|
|
Packit |
b099d7 |
sprintf(str, "%s", GetSafeAtom(XtDisplay(w), alist[0]));
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
sprintf(str, "%s %s",
|
|
Packit |
b099d7 |
GetSafeAtom(XtDisplay(w), alist[0]),
|
|
Packit |
b099d7 |
GetSafeAtom(XtDisplay(w), alist[1]));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
tmp = XmStringCreateLocalized(str);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} else if (type == XA_INTEGER || type == XA_PIXEL) {
|
|
Packit |
b099d7 |
if (type == XA_INTEGER)
|
|
Packit |
b099d7 |
mem = FindRightButton("INTEGER");
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
mem = FindRightButton("PIXEL");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Display32bit(datums[index].value );
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} else if (type == XInternAtom(XtDisplay(w), "SPAN", False)) {
|
|
Packit |
b099d7 |
unsigned long *data = (unsigned long *) datums[index].value;
|
|
Packit |
b099d7 |
char str[80];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sprintf(str, "%ld %ld", data[0], data[1]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
tmp = XmStringCreateLocalized(str);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} else if (type == XA_STRING) {
|
|
Packit |
b099d7 |
mem = FindRightButton("STRING");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
tmp = XmStringCreateLocalized(datums[index].value);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} else if (type == XA_COMPOUND_TEXT) {
|
|
Packit |
b099d7 |
char *str;
|
|
Packit |
b099d7 |
mem = FindRightButton("COMPOUND_TEXT");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
str = XtMalloc(datums[index].length + 1);
|
|
Packit |
b099d7 |
strncpy(str, datums[index].value, datums[index].length);
|
|
Packit |
b099d7 |
str[datums[index].length] = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
tmp = XmCvtCTToXmString(str);
|
|
Packit |
b099d7 |
XtFree((XtPointer) str);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} else if (type == XA_LOCALE_TEXT) {
|
|
Packit |
b099d7 |
mem = FindRightButton("LOCALE_TEXT");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
tmp = XmStringCreateLocalized(datums[index].value);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} else if (type == XA_DRAWABLE || type == XA_WINDOW ||
|
|
Packit |
b099d7 |
type == XA_COLORMAP) {
|
|
Packit |
b099d7 |
if (type == XA_DRAWABLE)
|
|
Packit |
b099d7 |
mem = FindRightButton("DRAWABLE");
|
|
Packit |
b099d7 |
else if (type == XA_COLORMAP)
|
|
Packit |
b099d7 |
mem = FindRightButton("COLORMAP");
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
mem = FindRightButton("WINDOW");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (type != XA_COLORMAP)
|
|
Packit |
b099d7 |
Display32bit(&(datums[index].value));
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
Display32bit(datums[index].value);
|
|
Packit |
b099d7 |
} else if (type == XA_MOTIF_CS) {
|
|
Packit |
b099d7 |
mem = FindRightButton("_MOTIF_COMPOUND_STRING");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
tmp = XmCvtByteStreamToXmString(datums[index].value);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
char *typestring;
|
|
Packit |
b099d7 |
char buffer[80];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
mem = FindRightButton("unknown");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
typestring = GetSafeAtom(XtDisplay(w), type);
|
|
Packit |
b099d7 |
sprintf(buffer, "Unknown type %s (%d) found", typestring, type);
|
|
Packit |
b099d7 |
XFree(typestring);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
tmp = XmStringCreateLocalized(buffer);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (NULL != tmp) {
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString, tmp); n++;
|
|
Packit |
b099d7 |
XtSetValues(labelV, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmStringFree(tmp);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (mem != (Widget) NULL)
|
|
Packit |
b099d7 |
XtVaSetValues(typeOM, XmNmenuHistory, mem, NULL);
|
|
Packit |
b099d7 |
}
|