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