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:
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
defined in line
19; used 2 times