home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / emacs-18.59-src.tgz / emacs-18.59-src.tar / fsf / emacs18 / oldXMenu / ChgSel.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  2KB  |  89 lines

  1. #include "copyright.h"
  2.  
  3. /* $Header: ChgSel.c,v 1.4 88/02/02 19:08:57 jim Exp $ */
  4. /* Copyright    Massachusetts Institute of Technology    1985    */
  5.  
  6. /*
  7.  * XMenu:    MIT Project Athena, X Window system menu package
  8.  *
  9.  *    XMenuChangeSelection - Change a menu selection.
  10.  *
  11.  *    Author:        Tony Della Fera, DEC
  12.  *            December 19, 1985
  13.  *
  14.  */
  15.  
  16. #include "XMenuInt.h"
  17.  
  18. int
  19. XMenuChangeSelection(display, menu, p_num, s_num, data, data_sw, label, label_sw)
  20.     Display *display;        /* previously opened display. */
  21.     register XMenu *menu;    /* Menu object to be modified. */
  22.     register int p_num;        /* Pane number to be modified. */
  23.     register int s_num;        /* Selection number to modified. */
  24.     char *data;            /* Data value. */
  25.     int data_sw;        /* Change to new data value? */
  26.     char *label;        /* Selection label. */
  27.     int label_sw;        /* Change to new label? */
  28. {
  29.     register XMPane *p_ptr;    /* XMPane pointer. */
  30.     register XMSelect *s_ptr;    /* XMSelect pointer. */
  31.     
  32.     int label_length;        /* Label lenght in characters. */
  33.     int label_width;        /* Label width in pixels. */
  34.  
  35.     /*
  36.      * Check for NULL pointers!
  37.      */
  38.     if (label == NULL) {
  39.     _XMErrorCode = XME_ARG_BOUNDS;
  40.     return(XM_FAILURE);
  41.     }
  42.  
  43.     /*
  44.      * Find the right pane.
  45.      */
  46.     p_ptr = _XMGetPanePtr(menu, p_num);
  47.     if (p_ptr == NULL) return(XM_FAILURE);
  48.  
  49.     /*
  50.      * Find the right selection.
  51.      */
  52.     s_ptr = _XMGetSelectionPtr(p_ptr, s_num);
  53.     if (s_ptr == NULL) return(XM_FAILURE);
  54.  
  55.     /*
  56.      * Reset the label?
  57.      */
  58.     if (label_sw) {
  59.     /*
  60.      * Determine label size.
  61.      */
  62.     label_length = strlen(label);
  63.     label_width = XTextWidth(menu->s_fnt_info, label, label_length);
  64.  
  65.     /*
  66.      * Change the selection data.
  67.      */
  68.     s_ptr->label = label;
  69.     s_ptr->label_width = label_width;
  70.     s_ptr->label_length = label_length;
  71.  
  72.     /*
  73.      * Schedule a recompute.
  74.      */
  75.     menu->recompute = 1;
  76.     }
  77.  
  78.     /*
  79.      * Reset the data?
  80.      */
  81.     if (data_sw) s_ptr->data = data;
  82.  
  83.     /*
  84.      * Return successfully.
  85.      */
  86.     _XMErrorCode = XME_NO_ERROR;
  87.     return(s_num);
  88. }
  89.