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.
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)
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
)
43 return GetCatalogStr(catalog
, id
, CatCompArray
[id
].cca_Str
);
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
,
60 if (text
!= NM_BARLABEL
&& text
[1] == '\0')
71 return (Object
*)MenuitemObject
,
72 MUIA_Menuitem_Title
, (IPTR
) title
,
74 MUIA_Menuitem_Shortcut
:
75 TAG_IGNORE
, (IPTR
) shortcut
,
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 ------------------------------------------------*/
99 "System/Classes/Zune/SystemPrefsWindow.catalog",
100 OC_Version
, CATALOG_VERSION
,
104 /*--- Create object ----------------------------------------------------*/
105 self
= (Object
*) DoSuperNewTags
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
))),
128 TAG_MORE
, (IPTR
) message
->ops_AttrList
134 data
= INST_DATA(CLASS
, self
);
135 data
->spwd_Catalog
= catalog
;
136 data
->spwd_Editor
= editor
;
138 data
->spwd_FileRequester
= MUI_AllocAslRequestTags
141 ASLFR_RejectIcons
, TRUE
,
142 ASLFR_InitialDrawer
, "SYS:Prefs/Presets",
143 ASLFR_DoPatterns
, TRUE
,
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 -------------------------------------------*/
159 editor
, MUIM_Notify
, MUIA_PrefsEditor_Changed
, MUIV_EveryTime
,
160 (IPTR
) self
, 1, MUIM_SystemPrefsWindow_UpdateButtons
164 editor
, MUIM_Notify
, MUIA_PrefsEditor_Testing
, MUIV_EveryTime
,
165 (IPTR
) self
, 1, MUIM_SystemPrefsWindow_UpdateButtons
170 testMI
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
171 (IPTR
) self
, 1, MUIM_PrefsWindow_Test
175 revertMI
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
176 (IPTR
) self
, 1, MUIM_PrefsWindow_Revert
180 saveMI
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
181 (IPTR
) self
, 1, MUIM_PrefsWindow_Save
185 useMI
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
186 (IPTR
) self
, 1, MUIM_PrefsWindow_Use
190 cancelMI
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
191 (IPTR
) self
, 1, MUIM_PrefsWindow_Cancel
195 importMI
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
196 (IPTR
) self
, 1, MUIM_PrefsWindow_Import
200 exportMI
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
201 (IPTR
) self
, 2, MUIM_PrefsWindow_Export
, FALSE
205 exportIconMI
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
206 (IPTR
) self
, 2, MUIM_PrefsWindow_Export
, TRUE
210 defaultsMI
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
211 (IPTR
) self
, 1, MUIM_PrefsWindow_SetDefaults
216 if (catalog
!= NULL
) CloseCatalog(catalog
);
222 IPTR SystemPrefsWindow__OM_DISPOSE
224 Class
*CLASS
, Object
*self
, Msg message
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
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
));
254 IPTR SystemPrefsWindow__OM_SET
256 Class
*CLASS
, Object
*self
, struct opSet
*message
260 const struct TagItem
*tstate
= message
->ops_AttrList
;
263 while ((tag
= NextTagItem(&tstate
)) != NULL
)
267 case MUIA_PrefsWindow_Save_Disabled
:
268 if (!XGET(data
->spwd_Editor
, MUIA_PrefsEditor_CanSave
))
270 tag
->ti_Tag
= TAG_IGNORE
;
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
;
284 return DoSuperMethodA(CLASS
, self
, (Msg
) message
);
287 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Test
289 Class
*CLASS
, Object
*self
, Msg message
294 if (!DoMethod(data
->spwd_Editor
, MUIM_PrefsEditor_Test
))
296 // FIXME: error reporting
303 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Revert
305 Class
*CLASS
, Object
*self
, Msg message
310 if (!DoMethod(data
->spwd_Editor
, MUIM_PrefsEditor_Revert
))
312 // FIXME: error reporting
319 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Save
321 Class
*CLASS
, Object
*self
, Msg message
326 if (!DoMethod(data
->spwd_Editor
, MUIM_PrefsEditor_Save
))
328 // FIXME: error reporting
334 _app(self
), MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
340 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Use
342 Class
*CLASS
, Object
*self
, Msg message
347 if (!DoMethod(data
->spwd_Editor
, MUIM_PrefsEditor_Use
))
349 // FIXME: error reporting
355 _app(self
), MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
361 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Cancel
363 Class
*CLASS
, Object
*self
, Msg message
368 if (!DoMethod(data
->spwd_Editor
, MUIM_PrefsEditor_Cancel
))
370 // FIXME: error reporting
376 _app(self
), MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
382 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Import
384 Class
*CLASS
, Object
*self
, Msg message
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
),
402 LONG buflen
= strlen(data
->spwd_FileRequester
->rf_Dir
) +
403 strlen(data
->spwd_FileRequester
->rf_File
) + 5;
404 STRPTR prefname
= AllocVec(buflen
, MEMF_ANY
);
407 strcpy(prefname
, data
->spwd_FileRequester
->rf_Dir
);
408 if (AddPart(prefname
, data
->spwd_FileRequester
->rf_File
, buflen
))
413 MUIM_PrefsEditor_Import
,
416 SET(data
->spwd_Editor
, MUIA_PrefsEditor_Changed
, TRUE
);
421 // FIXME: error reporting
427 IPTR SystemPrefsWindow__MUIM_PrefsWindow_Export
429 Class
*CLASS
, Object
*self
, struct MUIP_PrefsWindow_Export
*message
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
,
449 LONG buflen
= strlen(data
->spwd_FileRequester
->rf_Dir
) +
450 strlen(data
->spwd_FileRequester
->rf_File
) + 5;
451 prefname
= AllocVec(buflen
, MEMF_ANY
);
454 strcpy(prefname
, data
->spwd_FileRequester
->rf_Dir
);
455 if (AddPart(prefname
, data
->spwd_FileRequester
->rf_File
, buflen
))
460 MUIM_PrefsEditor_Export
,
466 // FIXME: error reporting
469 if (result
&& message
->withIcon
)
471 struct DiskObject
*dobj
= GetDiskObject("ENVARC:sys/def_Pref");
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
);
491 IPTR SystemPrefsWindow__MUIM_PrefsWindow_SetDefaults
493 Class
*CLASS
, Object
*self
, Msg message
498 if (!DoMethod(data
->spwd_Editor
, MUIM_PrefsEditor_SetDefaults
))
500 // FIXME: error reporting
503 SET(data
->spwd_Editor
, MUIA_PrefsEditor_Changed
, TRUE
);