Blame tests/UTM/UTMlist.c

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
}