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