workbench/classes/zune: WIP - Unsorted -Wall fixes
[AROS.git] / workbench / classes / zune / systemprefswindow / systemprefswindow.c
bloba3caca17f35989858f0b8def9cefcc38cee6a1ac
1 /*
2 Copyright © 2004-2009, The AROS Development Team. All rights reserved.
3 This file is part of the SystemPrefsWindow class, which is distributed under
4 the terms of version 2.1 of the GNU Lesser General Public License.
6 $Id$
7 */
9 #define MUIMASTER_YES_INLINE_STDARG
11 #include <proto/muimaster.h>
12 #include <proto/intuition.h>
13 #include <proto/utility.h>
14 #include <proto/locale.h>
15 #include <proto/asl.h>
16 #include <proto/dos.h>
17 #include <proto/icon.h>
19 #include <utility/tagitem.h>
20 #include <libraries/gadtools.h>
21 #include <libraries/mui.h>
22 #include <zune/prefseditor.h>
23 #include <zune/prefswindow.h>
25 #include "systemprefswindow.h"
26 #include "systemprefswindow_private.h"
28 #define CATALOG_VERSION (2)
29 #define CATCOMP_ARRAY
30 #include "strings.h"
32 #define DEBUG 1
33 #include <aros/debug.h>
35 /*** Macros *****************************************************************/
36 #define SETUP_INST_DATA struct SystemPrefsWindow_DATA *data = INST_DATA(CLASS, self)
38 /*** Locale functions *******************************************************/
39 CONST_STRPTR MSG(struct Catalog *catalog, ULONG id)
41 if (catalog != NULL)
43 return GetCatalogStr(catalog, id, CatCompArray[id].cca_Str);
45 else
47 return CatCompArray[id].cca_Str;
51 #define _(id) MSG(catalog, (id))
52 #define __(id) (IPTR) MSG(catalog, (id))
54 /*** Utility functions ******************************************************/
55 Object *MakeMenuitem(CONST_STRPTR text)
57 CONST_STRPTR title = NULL,
58 shortcut = NULL;
60 if (text != NM_BARLABEL && text[1] == '\0')
62 title = text + 2;
63 shortcut = text;
65 else
67 title = text;
68 shortcut = NULL;
71 return (Object *)MenuitemObject,
72 MUIA_Menuitem_Title, (IPTR) title,
73 shortcut != NULL ?
74 MUIA_Menuitem_Shortcut :
75 TAG_IGNORE, (IPTR) shortcut,
76 End;
79 /*** Methods ****************************************************************/
80 Object *SystemPrefsWindow__OM_NEW
82 Class *CLASS, Object *self, struct opSet *message
85 struct SystemPrefsWindow_DATA *data = NULL;
86 struct TagItem *tag = NULL;
87 struct Catalog *catalog = NULL;
88 Object *editor = NULL, *importMI, *exportMI, *exportIconMI, *defaultsMI,
89 *testMI, *revertMI, *saveMI, *useMI, *cancelMI;
91 tag = FindTagItem(WindowContents, message->ops_AttrList);
92 if (tag != NULL) editor = (Object *) tag->ti_Data;
93 if (editor == NULL) return NULL;
95 /*--- Initialize locale ------------------------------------------------*/
96 catalog = OpenCatalog
98 NULL,
99 "System/Classes/Zune/SystemPrefsWindow.catalog",
100 OC_Version, CATALOG_VERSION,
101 TAG_DONE
104 /*--- Create object ----------------------------------------------------*/
105 self = (Object *) DoSuperNewTags
107 CLASS, self, NULL,
109 MUIA_Window_Title, XGET(editor, MUIA_PrefsEditor_Name),
111 MUIA_Window_Menustrip, (IPTR) MenustripObject,
112 Child, (IPTR) MenuObject,
113 MUIA_Menu_Title, __(MSG_MENU_PREFS),
114 Child, (IPTR)(importMI = MakeMenuitem(_(MSG_MENU_PREFS_IMPORT))),
115 Child, (IPTR)(exportMI = MakeMenuitem(_(MSG_MENU_PREFS_EXPORT))),
116 Child, (IPTR)(exportIconMI = MakeMenuitem(_(MSG_MENU_PREFS_EXPORT_WITH_ICON))),
117 Child, (IPTR)(defaultsMI = MakeMenuitem(_(MSG_MENU_RESET_TO_DEFAULTS))),
118 Child, (IPTR)MakeMenuitem(NM_BARLABEL),
119 Child, (IPTR)(testMI = MakeMenuitem(_(MSG_MENU_PREFS_TEST))),
120 Child, (IPTR)(revertMI = MakeMenuitem(_(MSG_MENU_PREFS_REVERT))),
121 Child, (IPTR)MakeMenuitem(NM_BARLABEL),
122 Child, (IPTR)(saveMI = MakeMenuitem(_(MSG_MENU_PREFS_SAVE))),
123 Child, (IPTR)(useMI = MakeMenuitem(_(MSG_MENU_PREFS_USE))),
124 Child, (IPTR)(cancelMI = MakeMenuitem(_(MSG_MENU_PREFS_CANCEL))),
125 End,
126 End,
128 TAG_MORE, (IPTR) message->ops_AttrList
132 if (self != NULL)
134 data = INST_DATA(CLASS, self);
135 data->spwd_Catalog = catalog;
136 data->spwd_Editor = editor;
138 data->spwd_FileRequester = MUI_AllocAslRequestTags
140 ASL_FileRequest,
141 ASLFR_RejectIcons, TRUE,
142 ASLFR_InitialDrawer, "SYS:Prefs/Presets",
143 ASLFR_DoPatterns, TRUE,
144 TAG_DONE
147 /*-- Handle initial attribute values -------------------------------*/
148 SetAttrsA(self, message->ops_AttrList);
150 /*-- Setup initial button states -----------------------------------*/
151 SET(self, MUIA_PrefsWindow_Test_Disabled, TRUE);
152 SET(self, MUIA_PrefsWindow_Revert_Disabled, TRUE);
153 SET(self, MUIA_PrefsWindow_Save_Disabled, TRUE);
154 SET(self, MUIA_PrefsWindow_Use_Disabled, TRUE);
156 /*-- Setup notifications -------------------------------------------*/
157 DoMethod
159 editor, MUIM_Notify, MUIA_PrefsEditor_Changed, MUIV_EveryTime,
160 (IPTR) self, 1, MUIM_SystemPrefsWindow_UpdateButtons
162 DoMethod
164 editor, MUIM_Notify, MUIA_PrefsEditor_Testing, MUIV_EveryTime,
165 (IPTR) self, 1, MUIM_SystemPrefsWindow_UpdateButtons
168 DoMethod
170 testMI, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime,
171 (IPTR) self, 1, MUIM_PrefsWindow_Test
173 DoMethod
175 revertMI, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime,
176 (IPTR) self, 1, MUIM_PrefsWindow_Revert
178 DoMethod
180 saveMI, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime,
181 (IPTR) self, 1, MUIM_PrefsWindow_Save
183 DoMethod
185 useMI, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime,
186 (IPTR) self, 1, MUIM_PrefsWindow_Use
188 DoMethod
190 cancelMI, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime,
191 (IPTR) self, 1, MUIM_PrefsWindow_Cancel
193 DoMethod
195 importMI, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime,
196 (IPTR) self, 1, MUIM_PrefsWindow_Import
198 DoMethod
200 exportMI, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime,
201 (IPTR) self, 2, MUIM_PrefsWindow_Export, FALSE
203 DoMethod
205 exportIconMI, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime,
206 (IPTR) self, 2, MUIM_PrefsWindow_Export, TRUE
208 DoMethod
210 defaultsMI, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime,
211 (IPTR) self, 1, MUIM_PrefsWindow_SetDefaults
214 else
216 if (catalog != NULL) CloseCatalog(catalog);
219 return self;
222 IPTR SystemPrefsWindow__OM_DISPOSE
224 Class *CLASS, Object *self, Msg message
227 SETUP_INST_DATA;
229 if (data->spwd_Catalog != NULL) CloseCatalog(data->spwd_Catalog);
230 FreeAslRequest(data->spwd_FileRequester);
232 return DoSuperMethodA(CLASS, self, message);
235 IPTR SystemPrefsWindow__MUIM_SystemPrefsWindow_UpdateButtons
237 Class *CLASS, Object *self, Msg message
240 SETUP_INST_DATA;
242 BOOL changed = XGET(data->spwd_Editor, MUIA_PrefsEditor_Changed);
243 BOOL testing = XGET(data->spwd_Editor, MUIA_PrefsEditor_Testing);
245 SET(self, MUIA_PrefsWindow_Test_Disabled, !changed);
246 SET(self, MUIA_PrefsWindow_Revert_Disabled, !testing);
248 SET(self, MUIA_PrefsWindow_Save_Disabled, !(changed || testing));
249 SET(self, MUIA_PrefsWindow_Use_Disabled, !(changed || testing));
251 return 0;
254 IPTR SystemPrefsWindow__OM_SET
256 Class *CLASS, Object *self, struct opSet *message
259 SETUP_INST_DATA;
260 const struct TagItem *tstate = message->ops_AttrList;
261 struct TagItem *tag;
263 while ((tag = NextTagItem(&tstate)) != NULL)
265 switch (tag->ti_Tag)
267 case MUIA_PrefsWindow_Save_Disabled:
268 if (!XGET(data->spwd_Editor, MUIA_PrefsEditor_CanSave))
270 tag->ti_Tag = TAG_IGNORE;
272 break;
274 case MUIA_PrefsWindow_Test_Disabled:
275 case MUIA_PrefsWindow_Revert_Disabled:
276 if (!XGET(data->spwd_Editor, MUIA_PrefsEditor_CanTest))
278 tag->ti_Tag = TAG_IGNORE;
280 break;
284 return DoSuperMethodA(CLASS, self, (Msg) message);
287 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Test
289 Class *CLASS, Object *self, Msg message
292 SETUP_INST_DATA;
294 if (!DoMethod(data->spwd_Editor, MUIM_PrefsEditor_Test))
296 // FIXME: error reporting
297 return FALSE;
300 return TRUE;
303 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Revert
305 Class *CLASS, Object *self, Msg message
308 SETUP_INST_DATA;
310 if (!DoMethod(data->spwd_Editor, MUIM_PrefsEditor_Revert))
312 // FIXME: error reporting
313 return FALSE;
316 return TRUE;
319 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Save
321 Class *CLASS, Object *self, Msg message
324 SETUP_INST_DATA;
326 if (!DoMethod(data->spwd_Editor, MUIM_PrefsEditor_Save))
328 // FIXME: error reporting
329 return FALSE;
332 DoMethod
334 _app(self), MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit
337 return TRUE;
340 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Use
342 Class *CLASS, Object *self, Msg message
345 SETUP_INST_DATA;
347 if (!DoMethod(data->spwd_Editor, MUIM_PrefsEditor_Use))
349 // FIXME: error reporting
350 return FALSE;
353 DoMethod
355 _app(self), MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit
358 return TRUE;
361 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Cancel
363 Class *CLASS, Object *self, Msg message
366 SETUP_INST_DATA;
368 if (!DoMethod(data->spwd_Editor, MUIM_PrefsEditor_Cancel))
370 // FIXME: error reporting
371 return FALSE;
374 DoMethod
376 _app(self), MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit
379 return TRUE;
382 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Import
384 Class *CLASS, Object *self, Msg message
387 SETUP_INST_DATA;
389 IPTR result = FALSE;
390 struct Catalog *catalog = data->spwd_Catalog;
392 if (data->spwd_FileRequester)
394 BOOL reqOK = MUI_AslRequestTags
396 data->spwd_FileRequester,
397 ASLFR_TitleText, _(MSG_FILEREQ_IMPORT_TITLE),
398 TAG_DONE
400 if (reqOK)
402 LONG buflen = strlen(data->spwd_FileRequester->rf_Dir) +
403 strlen(data->spwd_FileRequester->rf_File) + 5;
404 STRPTR prefname = AllocVec(buflen, MEMF_ANY);
405 if (prefname)
407 strcpy(prefname, data->spwd_FileRequester->rf_Dir);
408 if (AddPart(prefname, data->spwd_FileRequester->rf_File, buflen))
410 result = DoMethod
412 data->spwd_Editor,
413 MUIM_PrefsEditor_Import,
414 prefname
416 SET(data->spwd_Editor, MUIA_PrefsEditor_Changed, TRUE);
418 FreeVec(prefname);
421 // FIXME: error reporting
424 return result;
427 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Export
429 Class *CLASS, Object *self, struct MUIP_PrefsWindow_Export *message
432 SETUP_INST_DATA;
434 IPTR result = FALSE;
435 STRPTR prefname = NULL;
436 struct Catalog *catalog = data->spwd_Catalog;
438 if (data->spwd_FileRequester)
440 BOOL reqOK = MUI_AslRequestTags
442 data->spwd_FileRequester,
443 ASLFR_TitleText, _(MSG_FILEREQ_EXPORT_TITLE),
444 ASLFR_DoSaveMode, TRUE,
445 TAG_DONE
447 if (reqOK)
449 LONG buflen = strlen(data->spwd_FileRequester->rf_Dir) +
450 strlen(data->spwd_FileRequester->rf_File) + 5;
451 prefname = AllocVec(buflen, MEMF_ANY);
452 if (prefname)
454 strcpy(prefname, data->spwd_FileRequester->rf_Dir);
455 if (AddPart(prefname, data->spwd_FileRequester->rf_File, buflen))
457 result = DoMethod
459 data->spwd_Editor,
460 MUIM_PrefsEditor_Export,
461 prefname
466 // FIXME: error reporting
469 if (result && message->withIcon)
471 struct DiskObject *dobj = GetDiskObject("ENVARC:sys/def_Pref");
472 if (dobj)
474 STRPTR oldDefTool = dobj->do_DefaultTool;
475 STRPTR *oldToolType = dobj->do_ToolTypes;
476 STRPTR newToolType[] = {"ACTION=USE", NULL};
477 dobj->do_DefaultTool = (STRPTR)XGET(data->spwd_Editor, MUIA_PrefsEditor_IconTool);
478 dobj->do_ToolTypes = newToolType;
479 PutDiskObject(prefname, dobj);
480 dobj->do_DefaultTool = oldDefTool;
481 dobj->do_ToolTypes = oldToolType;
482 FreeDiskObject(dobj);
486 FreeVec(prefname);
488 return result;
491 IPTR SystemPrefsWindow__MUIM_PrefsWindow_SetDefaults
493 Class *CLASS, Object *self, Msg message
496 SETUP_INST_DATA;
498 if (!DoMethod(data->spwd_Editor, MUIM_PrefsEditor_SetDefaults))
500 // FIXME: error reporting
501 return FALSE;
503 SET(data->spwd_Editor, MUIA_PrefsEditor_Changed, TRUE);
505 return TRUE;