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.