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