1/* Copyright    Massachusetts Institute of Technology    1985	*/
2
3#include "copyright.h"
4
5
6/*
7 * XMenu:	MIT Project Athena, X Window system menu package
8 *
9 * 	XMenuAddSelection - Adds a selection to an XMenu object.
10 *
11 *	Author:		Tony Della Fera, DEC
12 *			August, 1985
13 *
14 */
15
16#include <config.h>
17#include "XMenuInt.h"
18
19int
20XMenuAddSelection(display, menu, p_num, data, label, active, help)
21    Display *display;
22    register XMenu *menu;	/* Menu object to be modified. */
23    register int p_num;		/* Pane number to be modified. */
24    char *data;			/* Data value. */
25    char *label;		/* Selection label. */
26    int active;			/* Make selection active? */
27    char *help;			/* Help string */
28{
29    register XMPane *pane;	/* Pane containing the new selection. */
30    register XMSelect *select;	/* Newly created selection. */
31
32
33    int label_length;		/* Label lenght in characters. */
34    int label_width;		/* Label width in pixels. */
35
36    /*
37     * Check for NULL pointers!
38     */
39    if (label == NULL) {
40	_XMErrorCode = XME_ARG_BOUNDS;
41	return(XM_FAILURE);
42    }
43    /*
44     * Find the right pane.
45     */
46    pane = _XMGetPanePtr(menu, p_num);
47    if (pane == NULL) return(XM_FAILURE);
48
49    /*
50     * Calloc the XMSelect structure.
51     */
52    select = (XMSelect *)calloc(1, sizeof(XMSelect));
53    if (select == NULL) {
54	_XMErrorCode = XME_CALLOC;
55	return(XM_FAILURE);
56    }
57    /*
58     * Determine label size.
59     */
60    label_length = strlen(label);
61    label_width = XTextWidth(menu->s_fnt_info, label, label_length);
62
63    /*
64     * Fill the XMSelect structure.
65     */
66    if (!strcmp (label, "--") || !strcmp (label, "---"))
67      {
68	select->type = SEPARATOR;
69	select->active = 0;
70      }
71    else
72      {
73	select->type = SELECTION;
74	select->active = active;
75      }
76
77    select->serial = -1;
78    select->label = label;
79    select->label_width = label_width;
80    select->label_length = label_length;
81    select->data = data;
82    select->parent_p = pane;
83    select->help_string = help;
84
85    /*
86     * Insert the selection at the end of the selection list.
87     */
88    emacs_insque(select, pane->s_list->prev);
89
90    /*
91     * Update the selection count.
92     */
93    pane->s_count++;
94
95    /*
96     * Schedule a recompute.
97     */
98    menu->recompute = 1;
99
100    /*
101     * Return the selection number just added.
102     */
103    _XMErrorCode = XME_NO_ERROR;
104    return((pane->s_count - 1));
105}
106
107/* arch-tag: 0161f024-c739-440d-9498-050280c6c355
108   (do not change this comment) */
109