Hi!

I used example program (downloaded from http://www.motifdeveloper.com/)
which creates XmList with colored XmStrings with different fonts.
But after running I saw simple strings. No colors and no different
fonts. The code is listed below. Please help me to find the error.

/*@ cc -g -c @I @F @L -o @R.o
*/

/*
** Variously:
**
** LIBS: -lXm -lXt -lX11 -lXp -lXext -lSM -lICE
*/

/*
** This file is provided as is, and may be used and
** distributed freely without liability.
*/

/*
** A.J.Fountain,
** Imperial Software Technology (IST),
** Berkshire House,
** 252 Kings Road,
** Reading,
** Berkshire,
** United Kingdom RG1 4HP.
**
** Telephone: +44 1189 587055
** Fax:       +44 1189 589005
** Email:     [EMAIL PROTECTED]
*/

#ifndef   lint
static char *sccsid[] = {"%Z%%Q%%M% %I%"} ; /* %E% */
#endif /* lint */

/* colored_list.c: illustrates the basic features of
** render tables and renditions by creating a
** multi-font, multi-color List widget.
*/

#include <Xm/Xm.h>
#include <Xm/List.h>
#include <Xm/RowColumn.h>

/* ConvertStringToPixel()
** A utility function to convert a color name to a Pixel
*/
Pixel ConvertStringToPixel (Widget widget, char *name)
{
 XrmValue from_value, to_value; /* For resource conversion */

 from_value.addr = name;
 from_value.size = strlen(name) + 1;
 to_value.addr = NULL;
 XtConvertAndStore (widget, XmRString, &from_value, XmRPixel,
&to_value);

 if (to_value.addr) {
  return (*((Pixel*) to_value.addr));
 }

 return XmUNSPECIFIED_PIXEL;
}

/*
** A convenient structure to hold the data
** for creating various renditions
*/
typedef struct RenditionData_s
{
 char *color;
 char *font;
} RenditionData_t;

#define   MAX_LINES   4

RenditionData_t rendition_data[MAX_LINES] =
{
 { "red",
"fixed"                                                      },
 { "green",
"-adobe-helvetica-bold-r-normal--10-100-75-75-*-*-iso8859-1" },
 { "blue",
"bembo-bold"                                                 },
 { "cyan", "-adobe-*-medium-i-normal--24-240-75-75-*-*-iso8859-1"
}
};

/*
** Arbitrary data to display in the List.
** Each line will appear in a different font/color.
*/
static char *poem[] =
{
 "Mary had a little lamb",
 "Its fleece was white as snow",
 "And everywhere that Mary went",
 "The lamb was sure to follow",
 (char *) 0
};

/*
** CreateListData(): routine to convert the
** poem into an array of compound strings
*/
XmStringTable CreateListData (int *count)
{
 XmStringTable table = (XmStringTable) 0;
 int           line = 0;

 table = (XmStringTable) XtMalloc ((unsigned) MAX_LINES * sizeof
(XmString)) ;

 while (poem[line] != (char *) 0) {
  /* create a compound string, using the rendition tag */
  table[line] = XmStringGenerate ((XtPointer) poem[line],
             NULL,
      XmCHARSET_TEXT,
      rendition_data[line].color);

  line++;
 }

 *count = line;

 return table;
}

main (int argc, char *argv[])
{
 Widget        toplevel, rowcol, list;
 XtAppContext  app;
 Arg           args[10];
 XmRendition   renditions[MAX_LINES];
 XmRenderTable rendertable;
 XmStringTable xmstring_table;
 int           xmstring_count;
 Pixel         pixels[MAX_LINES];
 int           n, i;

 XtSetLanguageProc (NULL, NULL, NULL);
 toplevel = XtVaOpenApplication (&app, "ColoredList", NULL, 0, &argc,
argv, NULL,
     sessionShellWidgetClass, NULL);

 rowcol = XmCreateRowColumn (toplevel, "rowcol", NULL, 0);

 /* Create some colors */
 for (i = 0; i < MAX_LINES; i++) {
  pixels[i] = ConvertStringToPixel (toplevel, rendition_data[i].color);
 }

 /* Create some Renditions: one per line */
 for (i = 0 ; i < MAX_LINES ; i++) {
  n = 0;
  XtSetArg (args[n], XmNrenditionForeground, pixels[i]); n++;
  XtSetArg (args[n], XmNfontName, rendition_data[i].font); n++;
  XtSetArg (args[n], XmNfontType, XmFONT_IS_FONT); n++;
  XtSetArg (args[n], XmNloadModel, XmLOAD_IMMEDIATE); n++;
  renditions[i] = XmRenditionCreate (toplevel, rendition_data[i].color,
args, n);
 }

 /* Create the Render Table */
 rendertable = XmRenderTableAddRenditions (NULL, renditions, XtNumber
(renditions), XmMERGE_NEW);

 /* Create the data for the list */
 xmstring_table = CreateListData (&xmstring_count);

 /* Create the List, using the render table */
 n = 0;
 XtSetArg (args[n], XmNrenderTable, rendertable); n++;
 XtSetArg (args[n], XmNitems, xmstring_table); n++;
 XtSetArg (args[n], XmNitemCount, xmstring_count); n++;
 XtSetArg (args[n], XmNwidth, 400); n++;
 XtSetArg (args[n], XmNvisibleItemCount, xmstring_count + 1); n++;
 list = XmCreateScrolledList (rowcol, "list", args, n);
 XtManageChild (list);

 /* Free the memory now the widget has copied the data */
 /* First, the compound strings */
 for (i = 0; i < xmstring_count; i++)
  XmStringFree (xmstring_table[i]);
 XtFree ((char *) xmstring_table);
#if 0
 /* Secondly, the XmRendition objects */
 for (i = 0; i < XtNumber (renditions); i++)
  XmRenditionFree (renditions[i]);

 /* Lastly, the XmRenderTable object */
 XmRenderTableFree (rendertable);
#endif
 XtManageChild (rowcol);
 XtRealizeWidget (toplevel);
 XtAppMainLoop (app);
}




Reply via email to