1 #   include	"appFrameConfig.h"
2 
3 #   include	<stdio.h>
4 
5 #   include	"guiWidgets.h"
6 
7 #   include	<appDebugon.h>
8 
9 #   ifdef USE_MOTIF
10 
11 #   include	<X11/Xatom.h>
12 #   include	<Xm/List.h>
13 
14 /************************************************************************/
15 /*									*/
16 /*  List specific functionality.					*/
17 /*									*/
18 /************************************************************************/
19 
appGuiMakeListInColumn(Widget * pList,Widget column,int visibleItems,APP_LIST_CALLBACK_T listCallback,APP_BUTTON_CALLBACK_T actionCallback,void * through)20 void appGuiMakeListInColumn(	Widget *		pList,
21 				Widget			column,
22 				int			visibleItems,
23 				APP_LIST_CALLBACK_T	listCallback,
24 				APP_BUTTON_CALLBACK_T	actionCallback,
25 				void *			through )
26     {
27     Widget		list;
28 
29     Arg			al[20];
30     int			ac= 0;
31 
32     ac= 0;
33     XtSetArg( al[ac], XmNskipAdjust,		False ); ac++;
34     XtSetArg( al[ac], XmNallowResize,		False ); ac++;
35     if  ( visibleItems > 0 )
36 	{
37 	XtSetArg( al[ac], XmNvisibleItemCount,	visibleItems ); ac++;
38 	}
39 
40     XtSetArg( al[ac], XmNwidth,			25 ); ac++;
41 
42     if  ( visibleItems >= 0 )
43 	{
44 	XtSetArg( al[ac], XmNscrollBarDisplayPolicy,	XmAS_NEEDED ); ac++;
45 	XtSetArg( al[ac], XmNlistSizePolicy,		XmCONSTANT ); ac++;
46 
47 	list= XmCreateScrolledList( column, WIDGET_NAME, al, ac );
48 	}
49     else{
50 	list= XmCreateList( column, WIDGET_NAME, al, ac );
51 	}
52 
53     XtManageChild( list );
54 
55     if  ( listCallback )
56 	{
57 	XtAddCallback( list, XmNbrowseSelectionCallback,
58 						listCallback, through );
59 	}
60 
61     if  ( actionCallback )
62 	{
63 	XtAddCallback( list, XmNdefaultActionCallback,
64 						actionCallback, through );
65 	}
66 
67     appMotifTurnOfSashTraversal( column );
68 
69     *pList= list; return;
70     }
71 
appGuiEmptyListWidget(Widget list)72 void appGuiEmptyListWidget(	Widget			list )
73     {
74     XmListDeselectAllItems( list );
75     XmListDeleteAllItems( list );
76 
77     return;
78     }
79 
appGuiDeletePositionFromListWidget(APP_WIDGET list,int pos)80 void appGuiDeletePositionFromListWidget(	APP_WIDGET	list,
81 						int		pos )
82     {
83     XmListDeletePos( list, pos+ 1 );
84     }
85 
appGuiReplaceValueInListWidget(APP_WIDGET list,int pos,const char * value)86 void appGuiReplaceValueInListWidget(	APP_WIDGET	list,
87 					int		pos,
88 					const char *	value )
89     {
90     int *	selected= (int *)0;
91     int		selectedCount= 0;
92     int		selectNew= 0;
93 
94     XmString	labelString;
95 
96     if  ( XmListGetSelectedPos( list, &selected, &selectedCount ) )
97 	{
98 	int		i;
99 
100 	for ( i= 0; i < selectedCount; i++ )
101 	    {
102 	    if  ( selected[i] == pos+ 1 )
103 		{ selectNew= 1; break;	}
104 	    }
105 	}
106 
107     labelString= XmStringCreateLocalized( (char *)value );
108 
109     if  ( selectNew )
110 	{
111 	XmListAddItem( list, labelString, pos+ 1 );
112 	XmListDeselectPos( list, pos+ 1 );
113 	}
114     else{ XmListAddItemUnselected( list, labelString, pos+ 1 );	}
115 
116     XmStringFree( labelString );
117 
118     XmListDeletePos( list, pos+ 2 );
119     }
120 
appGuiAddValueToListWidget(Widget list,int pos,const char * value)121 void appGuiAddValueToListWidget(	Widget		list,
122 					int		pos,
123 					const char *	value )
124     {
125     XmString	labelString;
126 
127     labelString= XmStringCreateLocalized( (char *)value );
128 
129     if  ( pos < 0 )
130 	{ XmListAddItemUnselected( list, labelString, 0 );	}
131     else{ XmListAddItemUnselected( list, labelString, pos+ 1 );	}
132 
133     XmStringFree( labelString );
134 
135     return;
136     }
137 
appGuiScrollListToPosMotif(APP_WIDGET list,int pp1)138 static void appGuiScrollListToPosMotif(		APP_WIDGET	list,
139 						int		pp1 )
140     {
141     int		firstVisible;
142     int		nVisible;
143 
144     /* If the selected item is not visible, scroll the list */
145     XtVaGetValues( list,
146 		XmNtopItemPosition,	&firstVisible,
147 		XmNvisibleItemCount,	&nVisible,
148 		NULL);
149 
150     if  ( pp1 < firstVisible )
151 	{ XmListSetPos( list, pp1 );			}
152     if  ( pp1 >= firstVisible+ nVisible )
153 	{ XmListSetPos( list, pp1- nVisible+ 1 );	}
154 
155     return;
156     }
157 
appGuiSelectPositionInListWidget(APP_WIDGET list,int position)158 void appGuiSelectPositionInListWidget(		APP_WIDGET	list,
159 						int		position )
160     {
161     int		pp1= position+ 1;	/*  Silly Motif counts from 1	*/
162 
163     XmListSelectPos( list, pp1, False );
164 
165     /* If the selected item is not visible, scroll the list */
166     appGuiScrollListToPosMotif( list, pp1 );
167 
168     return;
169     }
170 
appGuiSelectValueInListWidget(APP_WIDGET list,const char * value)171 void appGuiSelectValueInListWidget(		APP_WIDGET	list,
172 						const char *	value )
173     {
174     XmString	labelString;
175     int *	selected= (int *)0;
176     int		selectedCount= 0;
177 
178     labelString= XmStringCreateLocalized( (char *)value );
179 
180     XmListSelectItem( list, labelString, False );
181 
182     XmStringFree( labelString );
183 
184     if  ( XmListGetSelectedPos( list, &selected, &selectedCount ) )
185 	{
186 	appGuiScrollListToPosMotif( list, selected[0] );
187 	}
188 
189     return;
190     }
191 
appGuiRemoveSelectionFromListWidget(APP_WIDGET list)192 void appGuiRemoveSelectionFromListWidget(	APP_WIDGET	list )
193     {
194     XmListDeselectAllItems( list );
195 
196     return;
197     }
198 
appGuiGetPositionFromListCallback(APP_WIDGET list,void * voidlcs)199 int appGuiGetPositionFromListCallback(		APP_WIDGET	list,
200 						void *		voidlcs )
201     {
202     XmListCallbackStruct *	lcs= (XmListCallbackStruct *)voidlcs;
203 
204     return lcs->item_position- 1;
205     }
206 
appGuiGetStringFromListCallback(APP_WIDGET list,void * voidlcs)207 char * appGuiGetStringFromListCallback(		APP_WIDGET	list,
208 						void *		voidlcs )
209     {
210     XmListCallbackStruct *	lcs= (XmListCallbackStruct *)voidlcs;
211     char *			text= (char *)0;
212 
213     XmStringGetLtoR( lcs->item, XmFONTLIST_DEFAULT_TAG, &text );
214 
215     return text;
216     }
217 
appFreeStringFromListCallback(char * s)218 void appFreeStringFromListCallback(	char *		s )
219     { XtFree( s );	}
220 
221 #   endif
222