update patch to work with build system changes
[AROS-Contrib.git] / Networking / Apps / OWB / preferencesmanager.c
blob7cb4436189ef706219ccc623fb23598d4bde0c21
1 /*
2 Copyright © 2009, The AROS Development Team. All rights reserved.
3 $Id$
4 */
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>
13 #include <string.h>
14 #include <stdio.h>
15 #include <stdlib.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"
27 #include "locale.h"
29 static STRPTR* getFontFamilies()
31 STRPTR *ret = NULL;
33 if(!FcInit())
34 return NULL;
36 FcPattern *pat = FcPatternCreate();
37 if(pat)
39 FcObjectSet *os = FcObjectSetBuild(FC_FAMILY, NULL);
40 if(os)
42 FcFontSet *fs = FcFontList(NULL, pat, os);
44 if(fs)
46 STRPTR *families = AllocVec(sizeof(STRPTR) * (fs->nfont + 1), MEMF_ANY);
47 if(families)
49 int j;
50 int f = 0;
51 for (j = 0; j < fs->nfont; j++)
53 FcChar8 *family;
54 if(FcPatternGetString(fs->fonts[j], FC_FAMILY, 0, &family)==FcResultMatch)
56 families[f++] = StrDup((STRPTR) family);
59 families[f] = NULL;
60 ret = families;
63 FcObjectSetDestroy(os);
65 FcPatternDestroy(pat);
68 return ret;
71 static void freeFontFamilies(STRPTR *families)
73 STRPTR *current = families;
74 while(*current)
76 FreeVec(*current);
77 current++;
79 FreeVec(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;
91 STRPTR *fontFamilies;
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)); )
98 switch (tag->ti_Tag)
100 case MUIA_PreferencesManager_Preferences:
101 preferences = (Object*) tag->ti_Data;
102 break;
103 default:
104 continue; /* Don't supress non-processed tags */
106 tag->ti_Tag = TAG_IGNORE;
109 if(!preferences)
110 return (IPTR) NULL;
112 fontFamilies = getFontFamilies();
113 if(!fontFamilies)
114 return (IPTR) NULL;
116 self = (Object *) DoSuperNewTags
118 cl, self, NULL,
120 MUIA_Window_Title, (IPTR)_(MSG_PreferencesManager_Title),
121 WindowContents, (IPTR)(VGroup,
122 MUIA_InnerLeft, 5,
123 MUIA_InnerRight, 5,
124 MUIA_InnerTop, 5,
125 MUIA_InnerBottom, 5,
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,
137 End),
138 End),
139 Child, (IPTR)(HGroup,
140 Child, (IPTR)(Label2(_(MSG_PreferencesManager_RequestDownloadedFileNameLabel))),
141 Child, (IPTR)(requestDownloadedFileName = MUI_MakeObject(MUIO_Checkmark, FALSE)),
142 End),
143 End),
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),
148 End),
149 Child, (IPTR)(VGroup, GroupFrameT(_(MSG_PreferencesManager_ZuneSettings)),
150 Child, (IPTR)(bt_zune = SimpleButton(_(MSG_PreferencesManager_OpenZuneSettings))),
151 End),
152 End),
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)),
158 End),
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)),
174 End),
175 End),
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)),
187 End),
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)),
195 End),
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),
201 End),
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)),
207 End),
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)),
213 End),
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)),
219 End),
220 End),
221 End),
222 End),
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))),
227 End),
228 End),
229 TAG_MORE, (IPTR) msg->ops_AttrList
232 if(!self)
234 freeFontFamilies(fontFamilies);
235 return (IPTR) NULL;
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,
332 (IPTR) self, 1,
333 MUIM_PreferencesManager_Save);
335 DoMethod(bt_use, MUIM_Notify, MUIA_Pressed, FALSE,
336 (IPTR) self, 1,
337 MUIM_PreferencesManager_Use);
339 DoMethod(bt_cancel, MUIM_Notify, MUIA_Pressed, FALSE,
340 (IPTR) self, 3,
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,
348 (IPTR) httpProxy, 3,
349 MUIM_Set, MUIA_Disabled, MUIV_NotTriggerValue);
351 return (IPTR) self;
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);
367 return TRUE;
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);
395 else
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);
404 return TRUE;
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);
411 return TRUE;
414 ZUNE_CUSTOMCLASS_5(
415 PreferencesManager, NULL, MUIC_Window, NULL,
416 OM_NEW, struct opSet*,
417 OM_DISPOSE, Msg,
418 MUIM_PreferencesManager_Load, Msg,
419 MUIM_PreferencesManager_Use, Msg,
420 MUIM_PreferencesManager_Save, Msg