2 Copyright © 2009, The AROS Development Team. All rights reserved.
6 #include <proto/alib.h>
7 #include <proto/exec.h>
8 #include <proto/muimaster.h>
9 #include <libraries/mui.h>
10 #include <proto/intuition.h>
11 #include <proto/alib.h>
12 #include <proto/utility.h>
16 #include <aros/debug.h>
17 #include <zune/customclasses.h>
18 #include <fontconfig/fontconfig.h>
19 #include <libraries/asl.h>
21 #include "WebPreferencesZune.h"
22 #include "browserpreferences.h"
24 #include "preferencesmanager_private.h"
25 #include "preferencesmanager.h"
29 static STRPTR
* getFontFamilies()
36 FcPattern
*pat
= FcPatternCreate();
39 FcObjectSet
*os
= FcObjectSetBuild(FC_FAMILY
, NULL
);
42 FcFontSet
*fs
= FcFontList(NULL
, pat
, os
);
46 STRPTR
*families
= AllocVec(sizeof(STRPTR
) * (fs
->nfont
+ 1), MEMF_ANY
);
51 for (j
= 0; j
< fs
->nfont
; j
++)
54 if(FcPatternGetString(fs
->fonts
[j
], FC_FAMILY
, 0, &family
)==FcResultMatch
)
56 families
[f
++] = StrDup((STRPTR
) family
);
63 FcObjectSetDestroy(os
);
65 FcPatternDestroy(pat
);
71 static void freeFontFamilies(STRPTR
*families
)
73 STRPTR
*current
= families
;
82 IPTR
PreferencesManager__OM_NEW(struct IClass
*cl
, Object
*self
, struct opSet
*msg
)
84 Object
*bt_save
, *bt_use
, *bt_cancel
, *bt_zune
, *javaScriptEnabled
, *loadsImagesAutomatically
;
85 Object
*defaultFontSize
, *defaultFixedFontSize
, *minimumFontSize
;
86 Object
*allowsAnimatedImages
, *allowAnimatedImageLooping
;
87 Object
*standardFontFamily
, *fixedFontFamily
, *serifFontFamily
, *sansSerifFontFamily
, *cursiveFontFamily
, *fantasyFontFamily
;
88 Object
*decodesPNGWithDatatypes
, *decodesBMPWithDatatypes
, *decodesGIFWithDatatypes
, *decodesJPGWithDatatypes
;
89 Object
*downloadDestination
, *requestDownloadedFileName
, *httpProxy
, *useHttpProxy
;
90 Object
*preferences
= NULL
;
92 struct TagItem
*tag
, *tags
;
94 STRPTR titles
[] = { (STRPTR
) _(MSG_PreferencesManager_Main
), (STRPTR
) _(MSG_PreferencesManager_Content
), NULL
};
96 for (tags
= msg
->ops_AttrList
; (tag
= NextTagItem(&tags
)); )
100 case MUIA_PreferencesManager_Preferences
:
101 preferences
= (Object
*) tag
->ti_Data
;
104 continue; /* Don't supress non-processed tags */
106 tag
->ti_Tag
= TAG_IGNORE
;
112 fontFamilies
= getFontFamilies();
116 self
= (Object
*) DoSuperNewTags
120 MUIA_Window_Title
, (IPTR
)_(MSG_PreferencesManager_Title
),
121 WindowContents
, (IPTR
)(VGroup
,
126 Child
, (IPTR
)(RegisterObject
,
127 MUIA_Register_Titles
, (IPTR
)titles
,
128 Child
, (IPTR
)(VGroup
,
129 Child
, (IPTR
)(VGroup
, GroupFrameT(_(MSG_PreferencesManager_Downloads
)),
130 Child
, (IPTR
)(HGroup
,
131 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_SaveFilesTo
))),
132 Child
, (IPTR
)(PopaslObject
,
133 MUIA_Popasl_Type
, ASL_FileRequest
,
134 MUIA_Popstring_String
, (IPTR
)(downloadDestination
= StringObject
, MUIA_Frame
, MUIV_Frame_String
, End
),
135 MUIA_Popstring_Button
, (IPTR
)(PopButton(MUII_PopFile
)),
136 ASLFR_DrawersOnly
, TRUE
,
139 Child
, (IPTR
)(HGroup
,
140 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_RequestDownloadedFileNameLabel
))),
141 Child
, (IPTR
)(requestDownloadedFileName
= MUI_MakeObject(MUIO_Checkmark
, FALSE
)),
144 Child
, (IPTR
)(ColGroup(3), GroupFrameT(_(MSG_PreferencesManager_ProxySettings
)),
145 Child
, (IPTR
)(useHttpProxy
= MUI_MakeObject(MUIO_Checkmark
, FALSE
)),
146 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_HttpProxy
))),
147 Child
, (IPTR
)(httpProxy
= StringObject
, MUIA_Frame
, MUIV_Frame_String
, MUIA_Disabled
, TRUE
, End
),
149 Child
, (IPTR
)(VGroup
, GroupFrameT(_(MSG_PreferencesManager_ZuneSettings
)),
150 Child
, (IPTR
)(bt_zune
= SimpleButton(_(MSG_PreferencesManager_OpenZuneSettings
))),
153 Child
, (IPTR
)(HGroup
,
154 Child
, (IPTR
)(VGroup
,
155 Child
, (IPTR
)(ColGroup(2), GroupFrameT(_(MSG_PreferencesManager_JavaScript
)),
156 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_EnableJavaScript
))),
157 Child
, (IPTR
)(javaScriptEnabled
= MUI_MakeObject(MUIO_Checkmark
, FALSE
)),
159 Child
, (IPTR
)(ColGroup(2), GroupFrameT(_(MSG_PreferencesManager_Images
)),
160 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_LoadImagesAutomatically
))),
161 Child
, (IPTR
)(loadsImagesAutomatically
= MUI_MakeObject(MUIO_Checkmark
, FALSE
)),
162 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_AllowAnimatedImages
))),
163 Child
, (IPTR
)(allowsAnimatedImages
= MUI_MakeObject(MUIO_Checkmark
, FALSE
)),
164 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_AllowLoopedAnimation
))),
165 Child
, (IPTR
)(allowAnimatedImageLooping
= MUI_MakeObject(MUIO_Checkmark
, FALSE
)),
166 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_DecodeBMPWithDatatypes
))),
167 Child
, (IPTR
)(decodesBMPWithDatatypes
= MUI_MakeObject(MUIO_Checkmark
, FALSE
)),
168 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_DecodePNGWithDatatypes
))),
169 Child
, (IPTR
)(decodesPNGWithDatatypes
= MUI_MakeObject(MUIO_Checkmark
, FALSE
)),
170 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_DecodeGIFWithDatatypes
))),
171 Child
, (IPTR
)(decodesGIFWithDatatypes
= MUI_MakeObject(MUIO_Checkmark
, FALSE
)),
172 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_DecodeJPGWithDatatypes
))),
173 Child
, (IPTR
)(decodesJPGWithDatatypes
= MUI_MakeObject(MUIO_Checkmark
, FALSE
)),
176 Child
, (IPTR
)(ColGroup(2), GroupFrameT(_(MSG_PreferencesManager_Fonts
)),
177 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_DefaultFontSize
))),
178 Child
, (IPTR
)(defaultFontSize
= SliderObject
, End
),
179 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_MinimumFontSize
))),
180 Child
, (IPTR
)(minimumFontSize
= SliderObject
, End
),
181 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_StandardFontFamily
))),
182 Child
, (IPTR
)(PoplistObject
,
183 MUIA_FixWidth
, 100, /* To make lists wider */
184 MUIA_Poplist_Array
, (IPTR
)fontFamilies
,
185 MUIA_Popstring_String
, (IPTR
)(standardFontFamily
= StringObject
, MUIA_Frame
, MUIV_Frame_String
, MUIA_Disabled
, TRUE
, End
),
186 MUIA_Popstring_Button
, (IPTR
)(PopButton(MUII_PopUp
)),
188 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_DefaultFixedFontSize
))),
189 Child
, (IPTR
)(defaultFixedFontSize
= SliderObject
, End
),
190 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_FixedFontFamily
))),
191 Child
, (IPTR
)(PoplistObject
,
192 MUIA_Poplist_Array
, (IPTR
)fontFamilies
,
193 MUIA_Popstring_String
, (IPTR
)(fixedFontFamily
= StringObject
, MUIA_Frame
, MUIV_Frame_String
, End
),
194 MUIA_Popstring_Button
, (IPTR
)(PopButton(MUII_PopUp
)),
196 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_SerifFontFamily
))),
197 Child
, (IPTR
)(PoplistObject
,
198 MUIA_Poplist_Array
, (IPTR
)fontFamilies
,
199 MUIA_Popstring_String
, (IPTR
)(serifFontFamily
= StringObject
, MUIA_Frame
, MUIV_Frame_String
, End
),
200 MUIA_Popstring_Button
, (IPTR
)PopButton(MUII_PopUp
),
202 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_SansSerifFontFamily
))),
203 Child
, (IPTR
)(PoplistObject
,
204 MUIA_Poplist_Array
, (IPTR
)fontFamilies
,
205 MUIA_Popstring_String
, (IPTR
)(sansSerifFontFamily
= StringObject
, MUIA_Frame
, MUIV_Frame_String
, End
),
206 MUIA_Popstring_Button
, (IPTR
)(PopButton(MUII_PopUp
)),
208 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_CursiveFontFamily
))),
209 Child
, (IPTR
)(PoplistObject
,
210 MUIA_Poplist_Array
, (IPTR
)fontFamilies
,
211 MUIA_Popstring_String
, (IPTR
)(cursiveFontFamily
= StringObject
, MUIA_Frame
, MUIV_Frame_String
, End
),
212 MUIA_Popstring_Button
, (IPTR
)(PopButton(MUII_PopUp
)),
214 Child
, (IPTR
)(Label2(_(MSG_PreferencesManager_FantasyFontFamily
))),
215 Child
, (IPTR
)(PoplistObject
,
216 MUIA_Poplist_Array
, (IPTR
)fontFamilies
,
217 MUIA_Popstring_String
, (IPTR
)(fantasyFontFamily
= StringObject
, MUIA_Frame
, MUIV_Frame_String
, End
),
218 MUIA_Popstring_Button
, (IPTR
)(PopButton(MUII_PopUp
)),
223 Child
, (IPTR
)(HGroup
,
224 Child
, (IPTR
)(bt_save
= SimpleButton(_(MSG_PreferencesManager_Save
))),
225 Child
, (IPTR
)(bt_use
= SimpleButton(_(MSG_PreferencesManager_Use
))),
226 Child
, (IPTR
)(bt_cancel
= SimpleButton(_(MSG_PreferencesManager_Cancel
))),
229 TAG_MORE
, (IPTR
) msg
->ops_AttrList
234 freeFontFamilies(fontFamilies
);
238 struct PreferencesManager_DATA
*data
= (struct PreferencesManager_DATA
*) INST_DATA(cl
, self
);
240 data
->preferences
= preferences
;
241 data
->fontFamilies
= fontFamilies
;
243 /* Initialize default values and ObjectIDs */
244 set(javaScriptEnabled
, MUIA_Selected
, XGET(preferences
, MUIA_WebPreferences_JavaScriptEnabled
));
245 set(javaScriptEnabled
, MUIA_ObjectID
, 1);
246 data
->javaScriptEnabled
= javaScriptEnabled
;
248 set(loadsImagesAutomatically
, MUIA_Selected
, XGET(preferences
, MUIA_WebPreferences_LoadsImagesAutomatically
));
249 set(loadsImagesAutomatically
, MUIA_ObjectID
, 2);
250 data
->loadsImagesAutomatically
= loadsImagesAutomatically
;
252 set(defaultFontSize
, MUIA_Numeric_Value
, XGET(preferences
, MUIA_WebPreferences_DefaultFontSize
));
253 set(defaultFontSize
, MUIA_ObjectID
, 3);
254 data
->defaultFontSize
= defaultFontSize
;
256 set(defaultFixedFontSize
, MUIA_Numeric_Value
, XGET(preferences
, MUIA_WebPreferences_DefaultFixedFontSize
));
257 set(defaultFixedFontSize
, MUIA_ObjectID
, 4);
258 data
->defaultFixedFontSize
= defaultFixedFontSize
;
260 set(minimumFontSize
, MUIA_Numeric_Value
, XGET(preferences
, MUIA_WebPreferences_MinimumFontSize
));
261 set(minimumFontSize
, MUIA_ObjectID
, 5);
262 data
->minimumFontSize
= minimumFontSize
;
264 set(allowsAnimatedImages
, MUIA_Selected
, XGET(preferences
, MUIA_WebPreferences_AllowsAnimatedImages
));
265 set(allowsAnimatedImages
, MUIA_ObjectID
, 6);
266 data
->allowsAnimatedImages
= allowsAnimatedImages
;
268 set(allowAnimatedImageLooping
, MUIA_Selected
, XGET(preferences
, MUIA_WebPreferences_AllowAnimatedImageLooping
));
269 set(allowAnimatedImageLooping
, MUIA_ObjectID
, 7);
270 data
->allowAnimatedImageLooping
= allowAnimatedImageLooping
;
272 set(standardFontFamily
, MUIA_String_Contents
, XGET(preferences
, MUIA_WebPreferences_StandardFontFamily
));
273 set(standardFontFamily
, MUIA_ObjectID
, 8);
274 data
->standardFontFamily
= standardFontFamily
;
276 set(fixedFontFamily
, MUIA_String_Contents
, XGET(preferences
, MUIA_WebPreferences_FixedFontFamily
));
277 set(fixedFontFamily
, MUIA_ObjectID
, 9);
278 data
->fixedFontFamily
= fixedFontFamily
;
280 set(serifFontFamily
, MUIA_String_Contents
, XGET(preferences
, MUIA_WebPreferences_SerifFontFamily
));
281 set(serifFontFamily
, MUIA_ObjectID
, 10);
282 data
->serifFontFamily
= serifFontFamily
;
284 set(sansSerifFontFamily
, MUIA_String_Contents
, XGET(preferences
, MUIA_WebPreferences_SansSerifFontFamily
));
285 set(sansSerifFontFamily
, MUIA_ObjectID
, 11);
286 data
->sansSerifFontFamily
= sansSerifFontFamily
;
288 set(cursiveFontFamily
, MUIA_String_Contents
, XGET(preferences
, MUIA_WebPreferences_CursiveFontFamily
));
289 set(cursiveFontFamily
, MUIA_ObjectID
, 12);
290 data
->cursiveFontFamily
= cursiveFontFamily
;
292 set(fantasyFontFamily
, MUIA_String_Contents
, XGET(preferences
, MUIA_WebPreferences_FantasyFontFamily
));
293 set(fantasyFontFamily
, MUIA_ObjectID
, 13);
294 data
->fantasyFontFamily
= fantasyFontFamily
;
296 set(decodesBMPWithDatatypes
, MUIA_Selected
, XGET(preferences
, MUIA_WebPreferences_DecodesBMPWithDatatypes
));
297 set(decodesBMPWithDatatypes
, MUIA_ObjectID
, 14);
298 data
->decodesBMPWithDatatypes
= decodesBMPWithDatatypes
;
300 set(decodesJPGWithDatatypes
, MUIA_Selected
, XGET(preferences
, MUIA_WebPreferences_DecodesJPGWithDatatypes
));
301 set(decodesJPGWithDatatypes
, MUIA_ObjectID
, 15);
302 data
->decodesJPGWithDatatypes
= decodesJPGWithDatatypes
;
304 set(decodesGIFWithDatatypes
, MUIA_Selected
, XGET(preferences
, MUIA_WebPreferences_DecodesGIFWithDatatypes
));
305 set(decodesGIFWithDatatypes
, MUIA_ObjectID
, 16);
306 data
->decodesGIFWithDatatypes
= decodesGIFWithDatatypes
;
308 set(decodesPNGWithDatatypes
, MUIA_Selected
, XGET(preferences
, MUIA_WebPreferences_DecodesPNGWithDatatypes
));
309 set(decodesPNGWithDatatypes
, MUIA_ObjectID
, 17);
310 data
->decodesPNGWithDatatypes
= decodesPNGWithDatatypes
;
312 set(downloadDestination
, MUIA_String_Contents
, XGET(preferences
, MUIA_BrowserPreferences_DownloadDestination
));
313 set(downloadDestination
, MUIA_ObjectID
, 18);
314 data
->downloadDestination
= downloadDestination
;
316 set(useHttpProxy
, MUIA_ObjectID
, 19);
317 data
->useHttpProxy
= useHttpProxy
;
319 set(httpProxy
, MUIA_ObjectID
, 20);
320 data
->httpProxy
= httpProxy
;
322 set(requestDownloadedFileName
, MUIA_Selected
, XGET(preferences
, MUIA_BrowserPreferences_RequestDownloadedFileName
));
323 set(requestDownloadedFileName
, MUIA_ObjectID
, 21);
324 data
->requestDownloadedFileName
= requestDownloadedFileName
;
326 /* Close window with close gadget */
327 DoMethod(self
, MUIM_Notify
, MUIA_Window_CloseRequest
, (IPTR
) TRUE
,
328 (IPTR
) self
, (IPTR
) 3,
329 MUIM_Set
, MUIA_Window_Open
, (IPTR
) FALSE
);
331 DoMethod(bt_save
, MUIM_Notify
, MUIA_Pressed
, FALSE
,
333 MUIM_PreferencesManager_Save
);
335 DoMethod(bt_use
, MUIM_Notify
, MUIA_Pressed
, FALSE
,
337 MUIM_PreferencesManager_Use
);
339 DoMethod(bt_cancel
, MUIM_Notify
, MUIA_Pressed
, FALSE
,
341 MUIM_Set
, MUIA_Window_Open
, (IPTR
) FALSE
);
343 DoMethod(bt_zune
, MUIM_Notify
, MUIA_Pressed
, FALSE
,
344 (IPTR
) MUIV_Notify_Application
, 1,
345 MUIM_Application_OpenConfigWindow
);
347 DoMethod(useHttpProxy
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
,
349 MUIM_Set
, MUIA_Disabled
, MUIV_NotTriggerValue
);
354 IPTR
PreferencesManager__OM_DISPOSE(struct IClass
*cl
, Object
*obj
, Msg msg
)
356 struct PreferencesManager_DATA
*data
= (struct PreferencesManager_DATA
*) INST_DATA(cl
, obj
);
358 freeFontFamilies(data
->fontFamilies
);
360 return DoSuperMethodA(cl
,obj
,msg
);
363 IPTR
PreferencesManager__MUIM_PreferencesManager_Save(Class
*cl
, Object
*obj
, Msg message
)
365 DoMethod(obj
, MUIM_PreferencesManager_Use
);
366 DoMethod(_app(obj
), MUIM_Application_Save
, MUIV_Application_Save_ENVARC
);
370 static void SetPreferenceData(Class
*cl
, Object
*obj
)
372 struct PreferencesManager_DATA
*data
= (struct PreferencesManager_DATA
*) INST_DATA(cl
, obj
);
373 set(data
->preferences
, MUIA_WebPreferences_JavaScriptEnabled
, XGET(data
->javaScriptEnabled
, MUIA_Selected
));
374 set(data
->preferences
, MUIA_WebPreferences_LoadsImagesAutomatically
, XGET(data
->loadsImagesAutomatically
, MUIA_Selected
));
375 set(data
->preferences
, MUIA_WebPreferences_DefaultFontSize
, XGET(data
->defaultFontSize
, MUIA_Numeric_Value
));
376 set(data
->preferences
, MUIA_WebPreferences_DefaultFixedFontSize
, XGET(data
->defaultFixedFontSize
, MUIA_Numeric_Value
));
377 set(data
->preferences
, MUIA_WebPreferences_MinimumFontSize
, XGET(data
->minimumFontSize
, MUIA_Numeric_Value
));
378 set(data
->preferences
, MUIA_WebPreferences_AllowsAnimatedImages
, XGET(data
->allowsAnimatedImages
, MUIA_Selected
));
379 set(data
->preferences
, MUIA_WebPreferences_AllowAnimatedImageLooping
, XGET(data
->allowAnimatedImageLooping
, MUIA_Selected
));
380 set(data
->preferences
, MUIA_WebPreferences_StandardFontFamily
, XGET(data
->standardFontFamily
, MUIA_String_Contents
));
381 set(data
->preferences
, MUIA_WebPreferences_FixedFontFamily
, XGET(data
->fixedFontFamily
, MUIA_String_Contents
));
382 set(data
->preferences
, MUIA_WebPreferences_SerifFontFamily
, XGET(data
->serifFontFamily
, MUIA_String_Contents
));
383 set(data
->preferences
, MUIA_WebPreferences_SansSerifFontFamily
, XGET(data
->sansSerifFontFamily
, MUIA_String_Contents
));
384 set(data
->preferences
, MUIA_WebPreferences_CursiveFontFamily
, XGET(data
->cursiveFontFamily
, MUIA_String_Contents
));
385 set(data
->preferences
, MUIA_WebPreferences_FantasyFontFamily
, XGET(data
->fantasyFontFamily
, MUIA_String_Contents
));
386 set(data
->preferences
, MUIA_WebPreferences_DecodesPNGWithDatatypes
, XGET(data
->decodesPNGWithDatatypes
, MUIA_Selected
));
387 set(data
->preferences
, MUIA_WebPreferences_DecodesJPGWithDatatypes
, XGET(data
->decodesJPGWithDatatypes
, MUIA_Selected
));
388 set(data
->preferences
, MUIA_WebPreferences_DecodesGIFWithDatatypes
, XGET(data
->decodesGIFWithDatatypes
, MUIA_Selected
));
389 set(data
->preferences
, MUIA_WebPreferences_DecodesBMPWithDatatypes
, XGET(data
->decodesBMPWithDatatypes
, MUIA_Selected
));
390 set(data
->preferences
, MUIA_BrowserPreferences_DownloadDestination
, XGET(data
->downloadDestination
, MUIA_String_Contents
));
391 set(data
->preferences
, MUIA_BrowserPreferences_RequestDownloadedFileName
, XGET(data
->requestDownloadedFileName
, MUIA_Selected
));
392 set(data
->preferences
, MUIA_WebPreferences_CookieJarFileName
, "PROGDIR:cookies.db"); /* Hardcoded for now */
393 if(XGET(data
->useHttpProxy
, MUIA_Selected
))
394 setenv("http_proxy", (const char *)XGET(data
->httpProxy
, MUIA_String_Contents
), 1);
396 unsetenv("http_proxy");
399 IPTR
PreferencesManager__MUIM_PreferencesManager_Use(Class
*cl
, Object
*obj
, Msg message
)
401 SetPreferenceData(cl
, obj
);
402 DoMethod(_app(obj
), MUIM_Application_Save
, MUIV_Application_Save_ENV
);
403 set(obj
, MUIA_Window_Open
, FALSE
);
407 IPTR
PreferencesManager__MUIM_PreferencesManager_Load(Class
*cl
, Object
*obj
, Msg message
)
409 DoMethod(_app(obj
), MUIM_Application_Load
, MUIV_Application_Load_ENV
);
410 SetPreferenceData(cl
, obj
);
415 PreferencesManager
, NULL
, MUIC_Window
, NULL
,
416 OM_NEW
, struct opSet
*,
418 MUIM_PreferencesManager_Load
, Msg
,
419 MUIM_PreferencesManager_Use
, Msg
,
420 MUIM_PreferencesManager_Save
, Msg