1 /************************************************************************/
2 /* Shortcuts for the most commun menu building actions. */
3 /************************************************************************/
4
5 # include "appFrameConfig.h"
6
7 # include <stddef.h>
8 # include <stdio.h>
9 # include <stdlib.h>
10
11 # include "appFrame.h"
12 # include <appDebugon.h>
13
appMakeMenu(APP_WIDGET * pButton,AppToplevel * at,EditApplication * ea,APP_WIDGET menuBar,const char * itemText,int isHelp,AppMenuItem * ami,int itemCount,void * target)14 APP_WIDGET appMakeMenu( APP_WIDGET * pButton,
15 AppToplevel * at,
16 EditApplication * ea,
17 APP_WIDGET menuBar,
18 const char * itemText,
19 int isHelp,
20 AppMenuItem * ami,
21 int itemCount,
22 void * target )
23
24 {
25 AppConfigurableResource * acr;
26 AppConfigurableResource * acri;
27 APP_WIDGET menu;
28 APP_WIDGET button;
29
30 int ignored= 0;
31
32 int i;
33
34 acr= (AppConfigurableResource *)malloc(
35 3* itemCount* sizeof(AppConfigurableResource) );
36 if ( ! acr )
37 { XDEB(acr); return (APP_WIDGET)0; }
38
39 acri= acr;
40 for ( i= 0; i < itemCount; i++ )
41 {
42 if ( ami[i].amiItemType == ITEMtySEPARATOR )
43 { continue; }
44
45 APP_SET_RESOURCE( acri, ami[i].amiTextResName,
46 i* sizeof(AppMenuItem)+
47 offsetof(AppMenuItem,amiItemText),
48 ami[i].amiItemText );
49
50 acri++;
51
52 APP_SET_RESOURCE( acri, ami[i].amiKeyResName,
53 i* sizeof(AppMenuItem)+
54 offsetof(AppMenuItem,amiKey),
55 ami[i].amiKey );
56
57 acri++;
58
59 APP_SET_RESOURCE( acri, ami[i].amiKeyTextResName,
60 i* sizeof(AppMenuItem)+
61 offsetof(AppMenuItem,amiKeyText),
62 ami[i].amiKeyText );
63
64 acri++;
65 }
66
67 appGuiGetResourceValues( &ignored, ea, ami, acr, acri- acr );
68
69 free( acr );
70
71 menu= appMakeMenuInParent( &button, at, menuBar, itemText, isHelp );
72
73 for ( i= 0; i < itemCount; i++, ami++ )
74 {
75 switch( ami->amiItemType )
76 {
77 case ITEMtyOPTION:
78 ami->amiOptionWidget=
79 appSetMenuItem( menu, at, ami, target );
80 break;
81
82 case ITEMtyTOGGLE_OFF:
83 case ITEMtyTOGGLE_ON:
84 ami->amiOptionWidget=
85 appSetToggleMenuItem( menu, at, ami, target );
86 break;
87
88 case ITEMtySEPARATOR:
89 ami->amiOptionWidget=
90 appSetMenuSeparator( menu, at, ami, target );
91 break;
92 default:
93 LDEB(ami->amiItemType);
94 break;
95 }
96 }
97
98 *pButton= button; return menu;
99 }
100