make the window layout a little tidier.
[AROS.git] / workbench / prefs / reqtools / reqtoolseditor.c
blob7869521b3d2746d373abe2e55f8e79789dcca77f
1 /*
2 Copyright © 2013, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc:
6 Lang: English
7 */
9 #define DEBUG 1
10 #include <aros/debug.h>
12 #include <devices/rawkeycodes.h>
13 #include <mui/HotkeyString_mcc.h>
14 #include <zune/prefseditor.h>
15 #include <zune/customclasses.h>
17 #include <proto/alib.h>
18 #include <proto/commodities.h>
19 #include <proto/intuition.h>
20 #include <proto/muimaster.h>
21 #include <proto/alib.h>
23 #include <string.h>
24 #include <stdio.h>
26 #include "reqtoolseditor.h"
27 #include "reqtoolsstringify.h"
28 #include "prefs.h"
29 #include "locale.h"
31 /*********************************************************************************************/
33 struct ReqToolsEditor_DATA
35 Object *poptofrontobj;
36 Object *usesysfontobj;
37 Object *usefunckeysobj;
38 Object *colorwheelstyleobj;
40 Object *immediatesortobj;
41 Object *drawersfirstobj;
42 Object *drawersmixedobj;
43 Object *diskactivityobj;
44 Object *mmbobj;
46 Object *defaultsforobj;
47 Object *sizepercentobj;
48 Object *minvisobj;
49 Object *maxvisobj;
50 Object *positionobj;
51 Object *offsetxobj;
52 Object *offsetyobj;
55 /*********************************************************************************************/
57 #define SETUP_INST_DATA struct ReqToolsEditor_DATA *data = INST_DATA(CLASS, self)
59 /*********************************************************************************************/
61 static struct Hook selectdefaultshook, updatedefaultshook;
62 static CONST_STRPTR colorwheelstyle_labels[4], defaultsfor_labels[7], position_labels[6];
64 /*********************************************************************************************/
66 static void SelectDefaultsHook(struct Hook *hook, Object *self, struct ReqToolsEditor_DATA **data)
68 struct ReqToolsPrefs *prefs = &reqtoolsprefs;
69 IPTR active = 0;
71 D(bug("[ReqToolsEditor.class] %s()\n", __PRETTY_FUNCTION__));
73 GET(self, MUIA_Cycle_Active, &active);
75 NNSET((*data)->positionobj, MUIA_Cycle_Active, prefs->ReqDefaults[active].ReqPos);
76 NNSET((*data)->sizepercentobj, MUIA_Numeric_Value, prefs->ReqDefaults[active].Size);
77 NNSET((*data)->offsetxobj, MUIA_String_Integer, prefs->ReqDefaults[active].LeftOffset);
78 NNSET((*data)->offsetyobj, MUIA_String_Integer, prefs->ReqDefaults[active].TopOffset);
79 NNSET((*data)->minvisobj, MUIA_String_Integer, prefs->ReqDefaults[active].MinEntries);
80 NNSET((*data)->maxvisobj, MUIA_String_Integer, prefs->ReqDefaults[active].MaxEntries);
83 static void UpdateDefaultsHook(struct Hook *hook, Object *self, struct ReqToolsEditor_DATA **data)
85 struct ReqToolsPrefs *prefs = &reqtoolsprefs;
86 IPTR active = 0, tmpval;
87 BOOL changed = FALSE;
89 D(bug("[ReqToolsEditor.class] %s()\n", __PRETTY_FUNCTION__));
91 GET((*data)->defaultsforobj, MUIA_Cycle_Active, &active);
93 tmpval = prefs->ReqDefaults[active].ReqPos;
94 if ((prefs->ReqDefaults[active].ReqPos = XGET((*data)->positionobj, MUIA_Cycle_Active)) != tmpval)
95 changed = TRUE;
96 tmpval = prefs->ReqDefaults[active].Size;
97 if ((prefs->ReqDefaults[active].Size = XGET((*data)->sizepercentobj, MUIA_Numeric_Value)) != tmpval)
98 changed = TRUE;
99 tmpval = prefs->ReqDefaults[active].LeftOffset;
100 if ((prefs->ReqDefaults[active].LeftOffset = XGET((*data)->offsetxobj, MUIA_String_Integer)) != tmpval)
101 changed = TRUE;
102 tmpval = prefs->ReqDefaults[active].TopOffset;
103 if ((prefs->ReqDefaults[active].TopOffset = XGET((*data)->offsetyobj, MUIA_String_Integer)) != tmpval)
104 changed = TRUE;
105 tmpval = prefs->ReqDefaults[active].MinEntries;
106 if ((prefs->ReqDefaults[active].MinEntries = XGET((*data)->minvisobj, MUIA_String_Integer)) != tmpval)
107 changed = TRUE;
108 tmpval = prefs->ReqDefaults[active].MaxEntries;
109 if ((prefs->ReqDefaults[active].MaxEntries = XGET((*data)->maxvisobj, MUIA_String_Integer)) != tmpval)
110 changed = TRUE;
112 if (changed)
114 SET( _parent(self), MUIA_PrefsEditor_Changed, TRUE);
118 /*********************************************************************************************/
120 BOOL Gadgets2ReqToolsPrefs(struct ReqToolsEditor_DATA *data)
122 struct ReqToolsPrefs *prefs = &reqtoolsprefs;
123 IPTR active = 0;
125 D(bug("[ReqToolsEditor.class] %s()\n", __PRETTY_FUNCTION__));
127 // Clear options we are about to set..
128 prefs->Flags &= ~(RTPRF_NOSCRTOFRONT | RTPRF_DEFAULTFONT | RTPRF_FKEYS | RTPRB_DOWHEEL | RTPRB_FANCYWHEEL | RTPRF_IMMSORT | RTPRF_DIRSFIRST | RTPRF_DIRSMIXED | RTPRF_NOLED | RTPRF_MMBPARENT);
130 GET(data->poptofrontobj, MUIA_Selected, &active);
131 if (active == 0)
132 prefs->Flags |= RTPRF_NOSCRTOFRONT;
133 GET(data->usesysfontobj, MUIA_Selected, &active);
134 if (active != 0)
135 prefs->Flags |= RTPRF_DEFAULTFONT;
136 GET(data->usefunckeysobj, MUIA_Selected, &active);
137 if (active != 0)
138 prefs->Flags |= RTPRF_FKEYS;
139 GET(data->colorwheelstyleobj, MUIA_Cycle_Active, &active);
140 if (active > 0)
141 prefs->Flags |= RTPRB_DOWHEEL;
142 if (active > 1)
143 prefs->Flags |= RTPRB_FANCYWHEEL;
144 GET(data->immediatesortobj, MUIA_Selected, &active);
145 if (active != 0)
146 prefs->Flags |= RTPRF_IMMSORT;
147 GET(data->drawersfirstobj, MUIA_Selected, &active);
148 if (active != 0)
149 prefs->Flags |= RTPRF_DIRSFIRST;
150 GET(data->drawersmixedobj, MUIA_Selected, &active);
151 if (active != 0)
152 prefs->Flags |= RTPRF_DIRSMIXED;
153 GET(data->diskactivityobj, MUIA_Selected, &active);
154 if (active == 0)
155 prefs->Flags |= RTPRF_NOLED;
156 GET(data->mmbobj, MUIA_Selected, &active);
157 if (active != 0)
158 prefs->Flags |= RTPRF_MMBPARENT;
160 return TRUE;
163 /*********************************************************************************************/
165 BOOL ReqToolsPrefs2Gadgets(struct ReqToolsEditor_DATA *data)
167 struct ReqToolsPrefs *prefs = &reqtoolsprefs;
168 IPTR active = 0;
170 D(bug("[ReqToolsEditor.class] %s()\n", __PRETTY_FUNCTION__));
172 NNSET(data->poptofrontobj, MUIA_Selected, (prefs->Flags & RTPRF_NOSCRTOFRONT) ? 0 : 1);
173 NNSET(data->usesysfontobj, MUIA_Selected, (prefs->Flags & RTPRF_DEFAULTFONT) ? 1 : 0);
174 NNSET(data->usefunckeysobj, MUIA_Selected, (prefs->Flags & RTPRF_FKEYS) ? 1 : 0);
175 if ((prefs->Flags & (RTPRB_DOWHEEL | RTPRB_FANCYWHEEL)) == 0)
176 active = 0;
177 else if ((prefs->Flags & (RTPRB_DOWHEEL | RTPRB_FANCYWHEEL)) == RTPRB_DOWHEEL)
178 active = 1;
179 else
180 active = 2;
181 NNSET(data->colorwheelstyleobj, MUIA_Cycle_Active, active);
182 NNSET(data->immediatesortobj, MUIA_Selected, (prefs->Flags & RTPRF_IMMSORT) ? 1 : 0);
183 NNSET(data->drawersfirstobj, MUIA_Selected, (prefs->Flags & RTPRF_DIRSFIRST) ? 1 : 0);
184 NNSET(data->drawersmixedobj, MUIA_Selected, (prefs->Flags & RTPRF_DIRSMIXED) ? 1 : 0);
185 NNSET(data->diskactivityobj, MUIA_Selected, (prefs->Flags & RTPRF_NOLED) ? 0 : 1);
186 NNSET(data->mmbobj, MUIA_Selected, (prefs->Flags & RTPRF_MMBPARENT) ? 1 : 0);
188 SelectDefaultsHook(NULL, data->defaultsforobj, &data);
190 return TRUE;
193 /*********************************************************************************************/
195 Object *ReqToolsEditor__Checkmark()
197 Object *obj = MUI_MakeObject(MUIO_Checkmark, (IPTR)NULL);
199 if (obj)
201 SET(obj, MUIA_CycleChain, 1);
203 return obj;
206 Object *ReqToolsEditor__Cycle(const UBYTE **labels)
208 Object *obj = MUI_MakeObject(MUIO_Cycle, (IPTR)NULL, labels);
210 if (obj)
212 SET(obj, MUIA_CycleChain, 1);
214 return obj;
217 /*********************************************************************************************/
219 IPTR ReqToolsEditor__OM_NEW
221 Class *CLASS, Object *self, struct opSet *message
224 struct ReqToolsEditor_DATA *data = NULL;
226 struct TagItem ReqToolsStringifyTags[] = {
227 { MUIA_Numeric_Value, 0 },
228 { MUIA_Numeric_Min, 0 },
229 { MUIA_Numeric_Max, 100 },
230 { TAG_DONE, (IPTR)NULL }
234 Object *poptofrontobj;
235 Object *usesysfontobj;
236 Object *usefunckeysobj;
237 Object *colorwheelstyleobj;
239 Object *immediatesortobj;
240 Object *drawersfirstobj;
241 Object *drawersmixedobj;
242 Object *diskactivityobj;
243 Object *mmbobj;
245 Object *defaultsforobj;
246 Object *positionobj;
247 Object *sizepercentobj;
248 Object *offsetxobj;
249 Object *offsetyobj;
250 Object *minvisobj;
251 Object *maxvisobj;
253 D(bug("[ReqToolsEditor.class] %s()\n", __PRETTY_FUNCTION__));
255 selectdefaultshook.h_Entry = HookEntry;
256 selectdefaultshook.h_SubEntry = (HOOKFUNC)SelectDefaultsHook;
257 updatedefaultshook.h_Entry = HookEntry;
258 updatedefaultshook.h_SubEntry = (HOOKFUNC)UpdateDefaultsHook;
260 colorwheelstyle_labels[0] = _(MSG_WHEEL_NONE);
261 colorwheelstyle_labels[1] = _(MSG_WHEEL_SIMPLE);
262 colorwheelstyle_labels[2] = _(MSG_WHEEL_FANCY);
264 defaultsfor_labels[0] = _(MSG_FILEREQ);
265 defaultsfor_labels[1] = _(MSG_FONTREQ);
266 defaultsfor_labels[2] = _(MSG_PALETTEREQ);
267 defaultsfor_labels[3] = _(MSG_SCRMODEREQ);
268 defaultsfor_labels[4] = _(MSG_VOLUMEREQ);
269 defaultsfor_labels[5] = _(MSG_OTHERREQ);
271 position_labels[0] = _(MSG_POINTER);
272 position_labels[1] = _(MSG_CENTERWIN);
273 position_labels[2] = _(MSG_CENTERSCR);
274 position_labels[3] = _(MSG_TOPLEFTWIN);
275 position_labels[4] = _(MSG_TOPLEFTSCR);
277 sizepercentobj = (Object *)NewObjectA(ReqToolsStringify_CLASS->mcc_Class, NULL, ReqToolsStringifyTags);
279 self = (Object *) DoSuperNewTags
281 CLASS, self, NULL,
283 MUIA_PrefsEditor_Name, __(MSG_WINDOW_TITLE),
284 MUIA_PrefsEditor_Path, (IPTR) "ReqTools.prefs",
285 MUIA_PrefsEditor_IconTool, (IPTR) "SYS:Prefs/ReqTools",
287 Child, HGroup,
288 Child, (IPTR)VGroup,
289 MUIA_Weight, 0,
290 Child, VGroup,
291 GroupFrameT(__(MSG_GENERAL)),
292 Child, HGroup,
293 Child, HVSpace,
294 Child, ColGroup(2),
295 Child, Label1(__(MSG_POPSCREEN)),
296 Child, (poptofrontobj = ReqToolsEditor__Checkmark()),
297 Child, Label1(__(MSG_DEFAULTFONT)),
298 Child, (usesysfontobj = ReqToolsEditor__Checkmark()),
299 Child, Label1(__(MSG_FKEYS)),
300 Child, (usefunckeysobj = ReqToolsEditor__Checkmark()),
301 End,
302 End,
303 Child, (colorwheelstyleobj = ReqToolsEditor__Cycle(colorwheelstyle_labels)),
304 Child, HVSpace,
305 End,
306 Child, VGroup,
307 GroupFrameT(__(MSG_FILEREQUESTER)),
308 Child, HGroup,
309 Child, HVSpace,
310 Child, ColGroup(2),
311 Child, Label1(__(MSG_IMMEDIATESORT)),
312 Child, (immediatesortobj = ReqToolsEditor__Checkmark()),
313 Child, Label1(__(MSG_DRAWERSFIRST)),
314 Child, (drawersfirstobj = ReqToolsEditor__Checkmark()),
315 Child, Label1(__(MSG_DRAWERSMIXED)),
316 Child, (drawersmixedobj = ReqToolsEditor__Checkmark()),
317 Child, Label1(__(MSG_LED)),
318 Child, (diskactivityobj = ReqToolsEditor__Checkmark()),
319 Child, Label1(__(MSG_MMB_PARENT)),
320 Child, (mmbobj = ReqToolsEditor__Checkmark()),
321 End,
322 End,
323 Child, HVSpace,
324 End,
325 End,
326 Child, VGroup,
327 MUIA_Frame, MUIV_Frame_Group,
328 Child, ColGroup(2),
329 Child, Label1(__(MSG_REQUESTER)),
330 Child, (defaultsforobj = ReqToolsEditor__Cycle(defaultsfor_labels)),
331 Child, HVSpace,
332 Child, RectangleObject,
333 MUIA_Background, MUII_FILL,
334 MUIA_FixHeight, 2,
335 End,
336 Child, Label1(__(MSG_POSITION)),
337 Child, (positionobj = ReqToolsEditor__Cycle(position_labels)),
338 Child, Label1(__(MSG_SIZE)),
339 Child, sizepercentobj,
340 Child, VGroup,
341 Child, TextObject,
342 StringFrame,
343 MUIA_FramePhantomHoriz, TRUE,
344 MUIA_Text_Contents, __(MSG_OFFSET),
345 End,
346 Child, TextObject,
347 StringFrame,
348 MUIA_FramePhantomHoriz, TRUE,
349 MUIA_Text_Contents, " ",
350 End,
351 Child, TextObject,
352 StringFrame,
353 MUIA_FramePhantomHoriz, TRUE,
354 MUIA_Text_Contents, __(MSG_NR_OF_ENTRIES),
355 End,
356 Child, TextObject,
357 StringFrame,
358 MUIA_FramePhantomHoriz, TRUE,
359 MUIA_Text_Contents, " ",
360 End,
361 End,
362 Child, VGroup,
363 Child, ColGroup(2),
364 Child, Label1("X"),
365 Child, (IPTR)(offsetxobj = StringObject,
366 StringFrame,
367 MUIA_Weight, 0,
368 MUIA_CycleChain, TRUE,
369 MUIA_String_Accept, (IPTR)"0123456789",
370 MUIA_FixWidthTxt, (IPTR)"55555",
371 End),
372 Child, Label1("Y"),
373 Child, (IPTR)(offsetyobj = StringObject,
374 StringFrame,
375 MUIA_Weight, 0,
376 MUIA_CycleChain, TRUE,
377 MUIA_String_Accept, (IPTR)"0123456789",
378 MUIA_FixWidthTxt, (IPTR)"55555",
379 End),
380 Child, Label1(__(MSG_MIN)),
381 Child, (IPTR)(minvisobj = StringObject,
382 StringFrame,
383 MUIA_Weight, 0,
384 MUIA_CycleChain, TRUE,
385 MUIA_String_Accept, (IPTR)"0123456789",
386 MUIA_FixWidthTxt, (IPTR)"55555",
387 End),
388 Child, Label1(__(MSG_MAX)),
389 Child, (IPTR)(maxvisobj = StringObject,
390 StringFrame,
391 MUIA_Weight, 0,
392 MUIA_CycleChain, TRUE,
393 MUIA_String_Accept, (IPTR)"0123456789",
394 MUIA_FixWidthTxt, (IPTR)"55555",
395 End),
396 End,
397 End,
398 End,
399 Child, HVSpace,
400 End,
401 End,
402 TAG_DONE
405 if (self != NULL)
407 data = INST_DATA(CLASS, self);
409 D(bug("[ReqToolsEditor.class] %s: Self @ 0x%p, Data @ 0x%p\n", __PRETTY_FUNCTION__, self, data));
411 data->colorwheelstyleobj = colorwheelstyleobj;
412 data->poptofrontobj = poptofrontobj;
413 data->usesysfontobj = usesysfontobj;
414 data->usefunckeysobj = usefunckeysobj;
416 data->immediatesortobj = immediatesortobj;
417 data->drawersfirstobj = drawersfirstobj;
418 data->drawersmixedobj = drawersmixedobj;
419 data->diskactivityobj = diskactivityobj;
420 data->mmbobj = mmbobj;
422 data->defaultsforobj = defaultsforobj;
423 data->positionobj = positionobj;
424 data->sizepercentobj = sizepercentobj;
425 data->offsetxobj = offsetxobj;
426 data->offsetyobj = offsetyobj;
427 data->minvisobj = minvisobj;
428 data->maxvisobj = maxvisobj;
430 DoMethod
432 poptofrontobj, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
433 (IPTR) self, 3, MUIM_Set, MUIA_PrefsEditor_Changed, TRUE
436 DoMethod
438 usesysfontobj, MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime,
439 (IPTR) self, 3, MUIM_Set, MUIA_PrefsEditor_Changed, TRUE
442 DoMethod
444 usefunckeysobj, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
445 (IPTR) self, 3, MUIM_Set, MUIA_PrefsEditor_Changed, TRUE
448 DoMethod
450 colorwheelstyleobj, MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime,
451 (IPTR) self, 3, MUIM_Set, MUIA_PrefsEditor_Changed, TRUE
454 DoMethod
456 immediatesortobj, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
457 (IPTR) self, 3, MUIM_Set, MUIA_PrefsEditor_Changed, TRUE
460 DoMethod
462 drawersfirstobj, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
463 (IPTR) self, 3, MUIM_Set, MUIA_PrefsEditor_Changed, TRUE
466 DoMethod
468 drawersmixedobj, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
469 (IPTR) self, 3, MUIM_Set, MUIA_PrefsEditor_Changed, TRUE
472 DoMethod
474 diskactivityobj, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
475 (IPTR) self, 3, MUIM_Set, MUIA_PrefsEditor_Changed, TRUE
478 DoMethod
480 mmbobj, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
481 (IPTR) self, 3, MUIM_Set, MUIA_PrefsEditor_Changed, TRUE
484 DoMethod
486 defaultsforobj, MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime,
487 (IPTR)defaultsforobj, 3, MUIM_CallHook, (IPTR)&selectdefaultshook, (IPTR)data
490 DoMethod
492 positionobj, MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime,
493 (IPTR) self, 3, MUIM_CallHook, (IPTR)&updatedefaultshook, (IPTR)data
496 DoMethod
498 sizepercentobj, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
499 (IPTR) self, 3, MUIM_CallHook, (IPTR)&updatedefaultshook, (IPTR)data
502 DoMethod
504 offsetxobj, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
505 (IPTR) self, 3, MUIM_CallHook, (IPTR)&updatedefaultshook, (IPTR)data
508 DoMethod
510 offsetyobj, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
511 (IPTR) self, 3, MUIM_CallHook, (IPTR)&updatedefaultshook, (IPTR)data
514 DoMethod
516 minvisobj, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
517 (IPTR) self, 3, MUIM_CallHook, (IPTR)&updatedefaultshook, (IPTR)data
520 DoMethod
522 maxvisobj, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
523 (IPTR) self, 3, MUIM_CallHook, (IPTR)&updatedefaultshook, (IPTR)data
526 ReqToolsPrefs2Gadgets(data);
528 return (IPTR) self;
532 /*********************************************************************************************/
534 IPTR ReqToolsEditor__MUIM_PrefsEditor_ImportFH (
535 Class *CLASS, Object *self,
536 struct MUIP_PrefsEditor_ImportFH *message
539 SETUP_INST_DATA;
540 BOOL success = TRUE;
542 D(bug("[ReqToolsEditor.class] %s()\n", __PRETTY_FUNCTION__));
544 success = Prefs_ImportFH(message->fh);
545 if (success) ReqToolsPrefs2Gadgets(data);
547 return success;
550 /*********************************************************************************************/
552 IPTR ReqToolsEditor__MUIM_PrefsEditor_ExportFH
554 Class *CLASS, Object *self,
555 struct MUIP_PrefsEditor_ExportFH *message
558 SETUP_INST_DATA;
559 BOOL success = TRUE;
561 D(bug("[ReqToolsEditor.class] %s()\n", __PRETTY_FUNCTION__));
563 Gadgets2ReqToolsPrefs(data);
564 success = Prefs_ExportFH(message->fh);
566 return success;
569 /*********************************************************************************************/
571 IPTR ReqToolsEditor__MUIM_PrefsEditor_SetDefaults
573 Class *CLASS, Object *self, Msg message
576 SETUP_INST_DATA;
577 BOOL success = TRUE;
579 D(bug("[ReqToolsEditor.class] %s()\n", __PRETTY_FUNCTION__));
581 success = Prefs_Default();
582 if (success) ReqToolsPrefs2Gadgets(data);
584 return success;
587 /*** Setup ******************************************************************/
588 ZUNE_CUSTOMCLASS_4
590 ReqToolsEditor, NULL, MUIC_PrefsEditor, NULL,
591 OM_NEW, struct opSet *,
592 MUIM_PrefsEditor_ImportFH, struct MUIP_PrefsEditor_ImportFH *,
593 MUIM_PrefsEditor_ExportFH, struct MUIP_PrefsEditor_ExportFH *,
594 MUIM_PrefsEditor_SetDefaults, Msg