4 ** Copyright (C) 1994,95,96,97 by Bernardo Innocenti
6 ** Preferences panel handling routines.
9 #include <intuition/intuition.h>
10 #include <intuition/gadgetclass.h>
11 #include <libraries/gadtools.h>
12 #include <libraries/asl.h>
13 #include <graphics/displayinfo.h>
15 #include <proto/exec.h>
16 #include <proto/intuition.h>
17 #include <proto/graphics.h>
18 #include <proto/gadtools.h>
20 #include "XModulePriv.h"
22 #include "CustomClasses.h"
72 /* Local functions prototypes */
74 static void PrefsPostOpen (struct WinUserData *wud);
75 static void PrefsPostClose (void);
77 static void PubScreenClicked (struct WinUserData *wud);
78 static void GetPubScreenClicked (struct WinUserData *wud);
79 static void GetDisplayModeClicked (struct WinUserData *wud);
80 static void GetWindowFontClicked (struct WinUserData *wud);
81 static void GetListViewFontClicked (struct WinUserData *wud);
82 static void RequestersClicked (struct WinUserData *wud);
83 static void RefreshClicked (struct WinUserData *wud);
84 static void LogLevelClicked (struct WinUserData *wud);
85 static void LogFileClicked (struct WinUserData *wud);
86 static void BackupTemplateClicked (struct WinUserData *wud);
87 static void BackupVersionsClicked (struct WinUserData *wud);
88 static void AutosaveTimeClicked (struct WinUserData *wud);
89 static void PrefsUseClicked (struct WinUserData *wud);
90 static void PrefsCancelClicked (struct WinUserData *wud);
96 static struct ScrInfo NewScrInfo;
97 static struct GuiSwitches NewGuiSwitches;
98 static struct TextAttr NewWindowAttr;
99 static struct TextAttr NewListAttr;
103 static UBYTE *RequestersLabels[] = {
104 (UBYTE *)MSG_ASL_GAD,
105 (UBYTE *)MSG_REQTOOLS_GAD,
110 static UBYTE *RefreshLabels[] = {
111 (UBYTE *)MSG_SIMPLE_GAD,
112 (UBYTE *)MSG_SMART_GAD,
118 static ULONG PrefsArgs[] =
120 VGROUP_KIND, BBFT_RIDGE,
122 STRING_KIND, (ULONG)PubScreenClicked, MSG_PUBLIC_SCREEN_GAD, 32, TAG_DONE,
123 IMAGEBUTTON_KIND, (ULONG)GetPubScreenClicked, IM_PICK, TAG_DONE,
126 TEXT_KIND, MSG_DISPLAY_MODE_GAD, 0, GTTX_Border, TRUE, TAG_DONE,
127 IMAGEBUTTON_KIND, (ULONG)GetDisplayModeClicked, IM_PICK, TAG_DONE,
130 TEXT_KIND, MSG_WINDOW_FONT_GAD, 0, GTTX_Border, TRUE, TAG_DONE,
131 IMAGEBUTTON_KIND, (ULONG)GetWindowFontClicked, IM_PICK, TAG_DONE,
134 TEXT_KIND, MSG_LISTVIEW_FONT_GAD, 0, GTTX_Border, TRUE, TAG_DONE,
135 IMAGEBUTTON_KIND, (ULONG)GetListViewFontClicked, IM_PICK, TAG_DONE,
138 HGROUP_KIND, BBFT_RIDGE,
140 CYCLE_KIND, (ULONG)RequestersClicked, MSG_REQUESTERS_GAD, (ULONG)RequestersLabels, TAG_DONE,
141 CYCLE_KIND, (ULONG)RefreshClicked, MSG_REFRESH_GAD, (ULONG)RefreshLabels, TAG_DONE,
144 CHECKBOX_KIND, NULL, MSG_USE_DATATYPES_GAD, (ULONG)&NewGuiSwitches.UseDataTypes, TAG_DONE,
145 CHECKBOX_KIND, NULL, MSG_APPICON_GAD, (ULONG)&NewGuiSwitches.ShowAppIcon, TAG_DONE,
148 VGROUP_KIND, BBFT_RIDGE,
149 SLIDER_KIND, (ULONG)LogLevelClicked, MSG_LOG_LEVEL_GAD, 0, 8, (ULONG)"%lu", 2, GA_Immediate, TRUE, TAG_DONE,
151 CHECKBOX_KIND, NULL, MSG_LOG_TO_FILE_GAD, (ULONG)&NewGuiSwitches.LogToFile, TAG_DONE,
152 STRING_KIND, (ULONG)LogFileClicked, 0, 128, TAG_DONE,
155 VGROUP_KIND, BBFT_RIDGE,
157 CHECKBOX_KIND, NULL, MSG_ASK_AUTOSAVE_GAD, (ULONG)&NewGuiSwitches.AskAutosave, TAG_DONE,
158 SLIDER_KIND, (ULONG)AutosaveTimeClicked, MSG_AUTOSAVE_TIME_GAD, 0, 99, (ULONG)"%lu", 3, TAG_DONE,
161 CHECKBOX_KIND, NULL, MSG_DO_BACKUPS_GAD, (ULONG)&NewGuiSwitches.DoBackups, TAG_DONE,
162 SLIDER_KIND, (ULONG)BackupVersionsClicked, MSG_BACKUP_VERSIONS_GAD, 1, 99, (ULONG)"%lu", 3, TAG_DONE,
164 STRING_KIND, (ULONG)BackupTemplateClicked, MSG_BACKUP_TEMPLATE_GAD, 64, TAG_DONE,
167 BUTTON_KIND, (ULONG)PrefsUseClicked, MSG_UNDERSCORE_USE_GAD, TAG_DONE,
168 BUTTON_KIND, (ULONG)PrefsCancelClicked, MSG_UNDERSCORE_CANCEL_GAD, TAG_DONE,
175 XDEF LONG PrefsWinTags[] =
177 XMWIN_LayoutArgs, (LONG)PrefsArgs,
178 XMWIN_GCount, Prefs_CNT,
179 XMWIN_Title, MSG_PREFS_TITLE,
180 XMWIN_WindowFlags, WFLG_CLOSEGADGET,
181 XMWIN_IDCMPFlags, TEXTIDCMP|STRINGIDCMP|CHECKBOXIDCMP|BUTTONIDCMP|CYCLEIDCMP|SLIDERIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
182 XMWIN_PostOpenFunc, (LONG)PrefsPostOpen,
183 XMWIN_PostCloseFunc,(LONG)PrefsPostClose,
184 XMWIN_HelpNode, (LONG)"Prefs",
190 static void PrefsPostOpen (struct WinUserData *wud)
192 memcpy (&NewScrInfo, &ScrInfo, sizeof (struct ScrInfo));
193 memcpy (&NewGuiSwitches, &GuiSwitches, sizeof (struct GuiSwitches));
194 CopyTextAttrPooled (Pool, &WindowAttr, &NewWindowAttr);
195 CopyTextAttrPooled (Pool, &ListAttr, &NewListAttr);
202 static void PrefsPostClose (void)
204 FreeVecPooled (Pool, NewWindowAttr.ta_Name); NewWindowAttr.ta_Name = NULL;
205 FreeVecPooled (Pool, NewListAttr.ta_Name); NewListAttr.ta_Name = NULL;
210 /********************/
211 /* Prefs Functions */
212 /********************/
214 GLOBALCALL void UpdatePrefsWindow()
216 /* These variables are declared static because gadtools text
217 * gadgets do not buffer their texts and require them to be
218 * accessible whenever a refresh is needed :-(.
220 static UBYTE windowfont[40], listfont[40];
221 static struct NameInfo nameinfo;
223 struct WinUserData *wud = WDescr[WID_PREFS].Wud;
228 if (NewScrInfo.DisplayID)
229 GetDisplayInfoData (NULL, (void *)&nameinfo, sizeof (nameinfo), DTAG_NAME, NewScrInfo.DisplayID);
231 strcpy (nameinfo.Name, STR(MSG_CLONE_DEF_SCREEN));
233 SPrintf (windowfont, "%s/%ld", NewWindowAttr.ta_Name, NewWindowAttr.ta_YSize);
234 SPrintf (listfont, "%s/%ld", NewListAttr.ta_Name, NewListAttr.ta_YSize);
237 GD_Requesters, NewGuiSwitches.UseReqTools,
238 GD_UseDataTypes, NewGuiSwitches.UseDataTypes,
239 GD_Refresh, NewGuiSwitches.SmartRefresh,
240 GD_AppIcon, NewGuiSwitches.ShowAppIcon,
241 GD_DisplayMode, nameinfo.Name,
242 GD_PubScreen, NewScrInfo.PubScreenName,
243 GD_WindowFont, windowfont,
244 GD_ListViewFont, listfont,
245 GD_LogLevel, NewGuiSwitches.LogLevel,
246 GD_LogToFile, NewGuiSwitches.LogToFile,
247 GD_LogFile, NewGuiSwitches.LogFile,
248 GD_AskAutosave, NewGuiSwitches.AskAutosave,
249 GD_AutosaveTime, NewGuiSwitches.AutosaveTime,
250 GD_DoBackups, NewGuiSwitches.DoBackups,
251 GD_BackupTemplate, NewGuiSwitches.BackupTemplate,
252 GD_BackupVersions, NewGuiSwitches.BackupVersions,
263 static void PubScreenClicked (struct WinUserData *wud)
265 strcpy (NewScrInfo.PubScreenName, GetString (wud->Gadgets[GD_PubScreen]));
270 static void GetPubScreenClicked (struct WinUserData *wud)
277 static void GetDisplayModeClicked (struct WinUserData *wud)
279 ScrModeRequest (&NewScrInfo);
283 static void GetWindowFontClicked (struct WinUserData *wud)
285 FontRequest (&NewWindowAttr, 0);
289 static void GetListViewFontClicked (struct WinUserData *wud)
291 FontRequest (&NewListAttr, 0);
297 static void RequestersClicked (struct WinUserData *wud)
299 NewGuiSwitches.UseReqTools ^= 1;
304 static void RefreshClicked (struct WinUserData *wud)
306 NewGuiSwitches.SmartRefresh ^= 1;
311 static void LogLevelClicked (struct WinUserData *wud)
313 NewGuiSwitches.LogLevel = IntuiMsg.Code;
318 static void LogFileClicked (struct WinUserData *wud)
320 strcpy (NewGuiSwitches.LogFile, GetString (wud->Gadgets[GD_LogFile]));
325 static void AutosaveTimeClicked (struct WinUserData *wud)
327 NewGuiSwitches.AutosaveTime = IntuiMsg.Code;
332 static void BackupTemplateClicked (struct WinUserData *wud)
334 strcpy (NewGuiSwitches.BackupTemplate, GetString (wud->Gadgets[GD_BackupTemplate]));
339 static void BackupVersionsClicked (struct WinUserData *wud)
341 NewGuiSwitches.BackupVersions = IntuiMsg.Code;
346 static void PrefsUseClicked (struct WinUserData *wud)
348 BOOL change_screen = FALSE,
351 if (memcmp (&ScrInfo, &NewScrInfo, sizeof (struct ScrInfo)))
353 change_screen = TRUE;
354 memcpy (&ScrInfo, &NewScrInfo, sizeof (struct ScrInfo));
357 if (memcmp (&GuiSwitches, &NewGuiSwitches, sizeof (struct GuiSwitches)))
359 if (GuiSwitches.UseReqTools != NewGuiSwitches.UseReqTools)
361 if (GuiSwitches.SmartRefresh != NewGuiSwitches.SmartRefresh)
362 change_screen = TRUE;
364 memcpy (&GuiSwitches, &NewGuiSwitches, sizeof (struct GuiSwitches));
367 if (CmpTextAttr (&NewWindowAttr, &WindowAttr))
369 CopyTextAttrPooled (Pool, &NewWindowAttr, &WindowAttr);
370 change_screen = TRUE;
373 if (CmpTextAttr (&NewListAttr, &ListAttr))
375 CopyTextAttrPooled (Pool, &NewListAttr, &ListAttr);
376 change_screen = TRUE;
384 if (GuiSwitches.ShowAppIcon)
385 CreateAppIcon (ToolBoxDropIcon);
394 /* For some reason we have lost the screen: exit immediatly! */
396 ShowRequesters = FALSE;
403 static void PrefsCancelClicked (struct WinUserData *wud)