6 /* for: scr->normalFont */
7 #include <WINGs/WINGsP.h>
11 #define LABEL_HEIGHT 16
12 #define LABEL_WIDTH 48
14 typedef struct _Panel
{
18 CallbackRec callbacks
;
22 WMLabel
*defaultLabel
;
25 WMTextField
*execField
;
36 displayDefault(_Panel
*panel
)
41 exec
= FSGetStringForNameKey(panel
->fileInfo
->extn
, "editor");
45 WMSetLabelText(panel
->defaultLabel
, exec
);
46 WMSetTextFieldText(panel
->execField
, exec
);
50 WMSetLabelText(panel
->defaultLabel
, "");
51 WMSetTextFieldText(panel
->execField
, "");
54 WMSetButtonImagePosition(panel
->appBtn
, WIPNoImage
);
55 WMSelectListItem(panel
->appList
, -1);
65 showData(_Panel
*panel
)
67 WMPropList
* array
= NULL
;
69 WMClearList(panel
->appList
);
71 array
= FSGetUDObjectForKey(defaultsDB
, "EXE");
72 if(array
&& WMIsPLArray(array
))
76 numElem
= WMGetPropListItemCount(array
);
77 for(i
= 0; i
< numElem
; i
++)
78 WMAddListItem(panel
->appList
,
79 WMGetPropListDescription(WMGetFromPLArray(array
, i
), False
));
81 WMSortListItems(panel
->appList
);
83 displayDefault(panel
);
88 storeData(_Panel
*panel
)
92 exec
= WMGetTextFieldText(panel
->execField
);
96 WMPropList
* array
= NULL
;
98 FSSetStringForNameKey(panel
->fileInfo
->extn
, "editor", exec
);
99 array
= FSGetUDObjectForKey(defaultsDB
, "EXTN");
100 if(array
&& WMIsPLArray(array
))
101 InsertArrayElement(array
, WMCreatePLString(panel
->fileInfo
->extn
));
107 handleAppBtnEvents(XEvent
*event
, void *data
)
109 /* if(WMIsDoubleClick(event)) */
110 /* printf("Double Click\n"); */
114 appListClick(WMWidget
*self
, void *data
)
119 char *selected
= NULL
;
120 Panel
*panel
= (Panel
*) data
;
122 selected
= ((WMListItem
*)WMGetListSelectedItem(panel
->appList
))->text
;
124 tmp
= FSGetStringForNameKey(selected
, "icon");
125 icon
= LocateImage(tmp
);
126 exec
= FSGetStringForNameKey(selected
, "exec");
138 pixmap
= WMCreateBlendedPixmapFromFile(WMWidgetScreen(panel
->win
),
142 WMSetButtonImagePosition(panel
->appBtn
, WIPImageOnly
);
143 WMSetButtonImage(panel
->appBtn
, pixmap
);
146 WMSetButtonImagePosition(panel
->appBtn
, WIPNoImage
);
149 WMSetButtonImagePosition(panel
->appBtn
, WIPNoImage
);
152 WMSetTextFieldText(panel
->execField
, exec
);
163 buttonClick(WMWidget
*self
, void *data
)
165 Panel
*panel
= (Panel
*)data
;
167 if ((WMButton
*)self
== panel
->okBtn
)
171 WMSetButtonEnabled(panel
->revertBtn
, True
);
173 else if ((WMButton
*)self
== panel
->revertBtn
)
175 displayDefault(panel
);
176 WMSetButtonEnabled(panel
->revertBtn
, False
);
178 else if ((WMButton
*)self
== panel
->appBtn
)
181 WMListItem
*item
= NULL
;
183 item
= WMGetListSelectedItem(panel
->appList
);
184 exeStr
= WMGetTextFieldText(panel
->execField
);
186 if( item
&& strcmp("", exeStr
) )
191 path
= GetPathnameFromPathName(panel
->fileInfo
->path
,
192 panel
->fileInfo
->name
);
194 exec
= FSParseExecString(path
, exeStr
);
206 createAppList(Panel
*panel
)
208 panel
->appList
= WMCreateList(panel
->frame
);
210 WMMoveWidget(panel
->appList
, 8, 36);
211 WMResizeWidget(panel
->appList
, 180, 115);
212 WMSetListAction(panel
->appList
, appListClick
, panel
);
216 createClickLabel(Panel
*panel
)
220 l
= WMCreateLabel(panel
->frame
);
221 WMSetLabelWraps(l
, True
);
222 WMResizeWidget(l
, WIDTH
-8, LABEL_HEIGHT
*2);
223 WMMoveWidget(l
, 4, 0);
224 WMSetLabelText(l
, _("Click button to edit selected document"));
225 /* WMSetLabelTextAlignment(l, WACenter); */
226 WMSetLabelRelief(l
, WRFlat
);
227 WMSetLabelTextColor(l
, WMDarkGrayColor(WMWidgetScreen(panel
->win
)));
232 createDefaultLabels(Panel
*panel
)
238 l
= WMCreateLabel(panel
->frame
);
239 WMSetLabelText(l
, _("Default:"));
240 scr
= WMWidgetScreen(panel
->win
);
241 tw
= WMWidthOfString(scr
->normalFont
, WMGetLabelText(l
),
242 strlen(WMGetLabelText(l
)));
243 WMResizeWidget(l
, tw
+4, LABEL_HEIGHT
);
244 WMMoveWidget(l
, 4, 182);
245 WMSetLabelRelief(l
, WRFlat
);
246 WMSetLabelTextColor(l
, WMDarkGrayColor(WMWidgetScreen(panel
->win
)));
248 panel
->defaultLabel
= WMCreateLabel(panel
->frame
);
249 WMResizeWidget(panel
->defaultLabel
, WIDTH
, LABEL_HEIGHT
);
250 /* x-Position should be: 4 + width("Default:") + 4 */
251 WMMoveWidget(panel
->defaultLabel
, 8+tw
, 182);
252 WMSetLabelRelief(panel
->defaultLabel
, WRFlat
);
257 createSetDefaultLabels(Panel
*panel
)
261 l
= WMCreateLabel(panel
->frame
);
262 WMSetLabelWraps(l
, True
);
263 WMResizeWidget(l
, WIDTH
-8, LABEL_HEIGHT
*2);
264 WMMoveWidget(l
, 4, 206);
265 WMSetLabelText(l
, _("Click \"Set Default\" to set default "\
266 "application for all documents with this extension."));
267 WMSetLabelTextAlignment(l
, WALeft
);
268 WMSetLabelRelief(l
, WRFlat
);
269 WMSetLabelTextColor(l
, WMDarkGrayColor(WMWidgetScreen(panel
->win
)));
274 createExecField(Panel
*panel
)
276 panel
->execField
= WMCreateTextField(panel
->frame
);
277 WMMoveWidget(panel
->execField
, 8, 159);
278 WMResizeWidget(panel
->execField
, 256, 18);
282 createButtons(Panel
*panel
)
285 panel
->revertBtn
= WMCreateCommandButton(panel
->frame
);
286 WMMoveWidget(panel
->revertBtn
, 16, HEIGHT
-24);
287 WMResizeWidget(panel
->revertBtn
, 115, 24);
288 WMSetButtonText(panel
->revertBtn
, _("Revert"));
289 WMSetButtonAction(panel
->revertBtn
, buttonClick
, panel
);
290 WMSetButtonEnabled(panel
->revertBtn
, False
);
292 panel
->okBtn
= WMCreateCommandButton(panel
->frame
);
293 WMMoveWidget(panel
->okBtn
, 140, HEIGHT
-24);
294 WMResizeWidget(panel
->okBtn
, 115, 24);
295 WMSetButtonText(panel
->okBtn
, _("Set Default"));
296 WMSetButtonImage(panel
->okBtn
,
297 WMGetSystemPixmap(WMWidgetScreen(panel
->win
),
299 WMSetButtonAltImage(panel
->okBtn
,
300 WMGetSystemPixmap(WMWidgetScreen(panel
->win
),
301 WSIHighlightedReturnArrow
));
302 WMSetButtonImagePosition(panel
->okBtn
, WIPRight
);
303 WMSetButtonEnabled(panel
->okBtn
, True
);
304 WMSetButtonAction(panel
->okBtn
, buttonClick
, panel
);
306 panel
->appBtn
= WMCreateCommandButton(panel
->frame
);
307 WMMoveWidget(panel
->appBtn
, 196, 59); /* 36 + (115/2) - 68/2 = 59 */
308 WMResizeWidget(panel
->appBtn
, 68, 68);
309 WMSetButtonEnabled(panel
->appBtn
, True
);
310 WMSetButtonAction(panel
->appBtn
, buttonClick
, panel
);
311 WMSetButtonImagePosition(panel
->appBtn
, WIPImageOnly
);
312 WMCreateEventHandler(WMWidgetView(panel
->appBtn
), ButtonPressMask
,
313 handleAppBtnEvents
, panel
);
317 createPanel(Panel
*p
)
319 _Panel
*panel
= (_Panel
*)p
;
320 panel
->frame
= WMCreateFrame(panel
->win
);
322 WMResizeWidget(panel
->frame
, WIDTH
, HEIGHT
);
323 WMMoveWidget(panel
->frame
, 0, 138);
324 WMSetFrameRelief(panel
->frame
, WRFlat
);
326 createSetDefaultLabels(panel
);
327 createAppList(panel
);
328 createDefaultLabels(panel
);
329 createClickLabel(panel
);
330 createExecField(panel
);
331 createButtons(panel
);
333 WMRealizeWidget(panel
->frame
);
334 WMMapSubwidgets(panel
->frame
);
339 InitEditor(WMWindow
*win
, FileInfo
*fileInfo
)
343 panel
= wmalloc(sizeof(_Panel
));
344 memset(panel
, 0, sizeof(_Panel
));
346 panel
->sectionName
= (char *) wmalloc(strlen(_("Editor Inspector"))+1);
347 strcpy(panel
->sectionName
, _("Editor Inspector"));
351 panel
->callbacks
.createWidgets
= createPanel
;
352 panel
->callbacks
.updateDomain
= storeData
;
353 panel
->callbacks
.updateDisplay
= showData
;
355 panel
->fileInfo
= fileInfo
;