1: #include <X/mit-copyright.h>
   2: 
   3: /* $Header: XMenuInsPane.c,v 10.9 86/02/01 16:15:04 tony Rel $ */
   4: /* Copyright    Massachusetts Institute of Technology    1985	*/
   5: 
   6: /*
   7:  * XMenu:	MIT Project Athena, X Window system menu package
   8:  *
   9:  * 	XMenuInsertPane - Inserts a pane into an XMenu object in
  10:  *			  a particular position.
  11:  *
  12:  *	Author:		Tony Della Fera, DEC
  13:  *			20-Nov-85
  14:  *
  15:  */
  16: 
  17: #include "XMenuInternal.h"
  18: 
  19: int
  20: XMenuInsertPane(menu, p_num, label, active)
  21:     register XMenu *menu;   /* Menu object to be modified. */
  22:     register int p_num;     /* Pane number of new pane. */
  23:     char *label;        /* Selection label. */
  24:     int active;         /* Make selection active? */
  25: {
  26:     register int i;     /* Loop counter. */
  27:     register XMPane *p_ptr; /* XMPane pointer. */
  28:     register XMPane *pane;  /* Newly created pane. */
  29:     register XMSelect *select;  /* Initial selection for the new pane. */
  30: 
  31:     int label_length;       /* Label lenght in characters. */
  32:     int label_width;        /* Label width in pixels. */
  33: 
  34:     /*
  35:      * Check for NULL pointers!
  36:      */
  37:     if (label == NULL) {
  38:     _XMErrorCode = XME_ARG_BOUNDS;
  39:     return(XM_FAILURE);
  40:     }
  41: 
  42:     /*
  43:      * Find the pane number one less than the one specified since that
  44:      * is the pane after which the insertion will occur.
  45:      */
  46:     p_ptr = _XMGetPanePtr(menu, (p_num - 1));
  47:     if (p_ptr == NULL) return(XM_FAILURE);
  48: 
  49:     /*
  50:      * Calloc the XMPane structure and the initial XMSelect.
  51:      */
  52:     pane = (XMPane *)calloc(1, sizeof(XMPane));
  53:     if (pane == NULL) {
  54:     _XMErrorCode = XME_CALLOC;
  55:     return(XM_FAILURE);
  56:     }
  57:     select = (XMSelect *)calloc(1, sizeof(XMSelect));
  58:     if (select == NULL) {
  59:     _XMErrorCode = XME_CALLOC;
  60:     return(XM_FAILURE);
  61:     }
  62: 
  63:     /*
  64:      * Determine label size.
  65:      */
  66:     label_width = XQueryWidth(label, menu->p_fnt_info->id);
  67:     label_length = strlen(label);
  68: 
  69:     /*
  70:      * Set up the initial selection.
  71:      * Values not explicitly set are zeroed by calloc.
  72:      */
  73:     select->next = select;
  74:     select->prev = select;
  75:     select->type = SL_HEADER;
  76:     select->serial = -1;
  77:     select->parent_p = pane;
  78: 
  79:     /*
  80:      * Fill the XMPane structure.
  81:      */
  82:     pane->type = PANE;
  83:     pane->active = active;
  84:     pane->serial = -1;
  85:     pane->label = label;
  86:     pane->label_width = label_width;
  87:     pane->label_length = label_length;
  88:     pane->s_list = select;
  89: 
  90:     /*
  91:      * Insert the pane after the pane with the pane
  92:      * number one less than the desired number for the
  93:      * new pane.
  94:      */
  95:     insque(pane, p_ptr);
  96: 
  97:     /*
  98:      * Update the pane count.
  99:      */
 100:     menu->p_count++;
 101: 
 102:     /*
 103:      * Schedule a recompute.
 104:      */
 105:     menu->recompute = 1;
 106: 
 107:     /*
 108:      * Return the number of the pane just added.
 109:      */
 110:     _XMErrorCode = XME_NO_ERROR;
 111:     return(p_num);
 112: }

Defined functions

Last modified: 1986-02-01
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1016
Valid CSS Valid XHTML 1.0 Strict