ChartObject WebFAQ - Q10
:
:
/***
*** EditLegendCallback: we parse the panel and apply the resources to the object
***/
static void EditLegendCallback(widget, legend_widget_list, cb)
Widget widget;
Widget *legend_widget_list;
XmAnyCallbackStruct *cb;
{
char *legend_label;
Object *list;
Object object;
int i, count;
int code;
if (cb->reason == IntOK || cb->reason == IntAPPLY) {
legend_label = XmTextGetString(legend_widget_list[0]);
/*
* get the list of selected object, and apply SetValues to the
* Legend object(s)
*/
list = XintEditObjectSelectList(legend_widget_list[1], &count);
for (i=0; i < count; i++) {
if (XintIsChart(list[i])) {
object = XintChartGetSelectedComponent(list[i], &code);
if (XintIsLegend(object))
XtVaSetValues((Widget) object, XmNlegendTitle, legend_label, NULL);
}
}
/*
* Cleanup
*/
if (list) XtFree((char *) list);
if (legend_label) XtFree(legend_label);
}
}
/***
*** BuildLegendPanel
***/
static Widget BuildLegendPanel(widget, legend_widget_list)
Widget widget;
Widget *legend_widget_list;
{
Widget panel, vbox;
panel = (Widget) IntCreateDialogPanel(XtParent(widget), "My Legend Editor",
IntOK | IntAPPLY | IntCANCEL,
IntOK, EditLegendCallback,
(XtPointer)legend_widget_list,
XintVERTICAL, 5, 5, &vbox, NULL);
/*
* Create text to edit legend label
*/
legend_widget_list[0] = XtVaCreateManagedWidget("legend_label",
xmTextWidgetClass, vbox,
XmNcolumns, 20,
XmNeditMode, XmSINGLE_LINE_EDIT,
NULL);
/*
* Save also edit object ID we will need it in EditLegendCallback
*/
legend_widget_list[1] = widget;
return panel;
}
/***
*** LoadLegendPanel
*** retrieve resoures from object and load them into panel
***/
static void LoadLegendPanel(legend_widget_list, object)
Widget *legend_widget_list;
Object object;
{
char *label_string;
XtVaGetValues((Widget) object, XmNlegendTitle, &label_string, NULL);
XmTextSetString(legend_widget_list[0], label_string);
}
/***
*** ResourceDialogCallback
*** We use this callback to redefine a new
*** resource editor for the Legend object class.
***/
static void ResourceDialogCallback(widget, data, cb)
Widget widget;
XtPointer data;
XintEditObjectResourceDialogCallbackStruct *cb;
{
static Widget my_legend_panel = NULL;
static Widget legend_widgets[2];
Object selected_object;
int code;
if (XintIsChart(cb->object))
selected_object = XintChartGetSelectedComponent(cb->object, &code);
else
selected_object = cb->object;
if (XintIsLegend(selected_object)) {
/*
* Create my own panel if first time
*/
if (!my_legend_panel)
my_legend_panel = BuildLegendPanel(widget, legend_widgets);
/*
* load legend panel to contain current legend state
*/
LoadLegendPanel(legend_widgets, selected_object);
/*
* Display my panel
*/
XtManageChild(my_legend_panel);
/*
* Turn off built-in panel
*/
cb->doit = False;
}
}
:
:
main(argc, argv)
int argc;
char *argv[];
{
:
:
XtAddCallback(edit, XmNresourceDialogCallback,
(XtCallbackProc) ResourceDialogCallback, NULL);
:
:
Click here for the Image
Back to ChartObject FAQ
© INT 1996.