/* ** PrefsWin.c ** ** Copyright (C) 1994,95,96,97 by Bernardo Innocenti ** ** Preferences panel handling routines. */ #include #include #include #include #include #include #include #include #include #include "XModulePriv.h" #include "Gui.h" #include "CustomClasses.h" /* Gadgets IDs */ enum { GD_PrefsGroup0, GD_PrefsGroup1, GD_PrefsGroup2, GD_PubScreen, GD_GetPubScreen, GD_PrefsGroup3, GD_DisplayMode, GD_GetDisplayMode, GD_PrefsGroup4, GD_WindowFont, GD_GetWindowFont, GD_PrefsGroup5, GD_ListViewFont, GD_GetListViewFont, GD_PrefsGroup6, GD_PrefsGroup7, GD_Requesters, GD_Refresh, GD_PrefsGroup8, GD_UseDataTypes, GD_AppIcon, GD_PrefsGroup9, GD_LogLevel, GD_PrefsGroup10, GD_LogToFile, GD_LogFile, GD_PrefsGroup11, GD_PrefsGroup12, GD_AutosaveTime, GD_AskAutosave, GD_PrefsGroup13, GD_DoBackups, GD_BackupVersions, GD_BackupTemplate, GD_PrefsGroup14, GD_PrefsUse, GD_PrefsCancel, Prefs_CNT }; /* Local functions prototypes */ static void PrefsPostOpen (struct WinUserData *wud); static void PrefsPostClose (void); static void PubScreenClicked (struct WinUserData *wud); static void GetPubScreenClicked (struct WinUserData *wud); static void GetDisplayModeClicked (struct WinUserData *wud); static void GetWindowFontClicked (struct WinUserData *wud); static void GetListViewFontClicked (struct WinUserData *wud); static void RequestersClicked (struct WinUserData *wud); static void RefreshClicked (struct WinUserData *wud); static void LogLevelClicked (struct WinUserData *wud); static void LogFileClicked (struct WinUserData *wud); static void BackupTemplateClicked (struct WinUserData *wud); static void BackupVersionsClicked (struct WinUserData *wud); static void AutosaveTimeClicked (struct WinUserData *wud); static void PrefsUseClicked (struct WinUserData *wud); static void PrefsCancelClicked (struct WinUserData *wud); /* Local data */ static struct ScrInfo NewScrInfo; static struct GuiSwitches NewGuiSwitches; static struct TextAttr NewWindowAttr; static struct TextAttr NewListAttr; static UBYTE *RequestersLabels[] = { (UBYTE *)MSG_ASL_GAD, (UBYTE *)MSG_REQTOOLS_GAD, NULL }; static UBYTE *RefreshLabels[] = { (UBYTE *)MSG_SIMPLE_GAD, (UBYTE *)MSG_SMART_GAD, NULL }; static ULONG PrefsArgs[] = { VGROUP_KIND, BBFT_RIDGE, HGROUP_KIND, 0, STRING_KIND, (ULONG)PubScreenClicked, MSG_PUBLIC_SCREEN_GAD, 32, TAG_DONE, IMAGEBUTTON_KIND, (ULONG)GetPubScreenClicked, IM_PICK, TAG_DONE, ENDGROUP_KIND, HGROUP_KIND, 0, TEXT_KIND, MSG_DISPLAY_MODE_GAD, 0, GTTX_Border, TRUE, TAG_DONE, IMAGEBUTTON_KIND, (ULONG)GetDisplayModeClicked, IM_PICK, TAG_DONE, ENDGROUP_KIND, HGROUP_KIND, 0, TEXT_KIND, MSG_WINDOW_FONT_GAD, 0, GTTX_Border, TRUE, TAG_DONE, IMAGEBUTTON_KIND, (ULONG)GetWindowFontClicked, IM_PICK, TAG_DONE, ENDGROUP_KIND, HGROUP_KIND, 0, TEXT_KIND, MSG_LISTVIEW_FONT_GAD, 0, GTTX_Border, TRUE, TAG_DONE, IMAGEBUTTON_KIND, (ULONG)GetListViewFontClicked, IM_PICK, TAG_DONE, ENDGROUP_KIND, ENDGROUP_KIND, HGROUP_KIND, BBFT_RIDGE, VGROUP_KIND, 0, CYCLE_KIND, (ULONG)RequestersClicked, MSG_REQUESTERS_GAD, (ULONG)RequestersLabels, TAG_DONE, CYCLE_KIND, (ULONG)RefreshClicked, MSG_REFRESH_GAD, (ULONG)RefreshLabels, TAG_DONE, ENDGROUP_KIND, VGROUP_KIND, 0, CHECKBOX_KIND, NULL, MSG_USE_DATATYPES_GAD, (ULONG)&NewGuiSwitches.UseDataTypes, TAG_DONE, CHECKBOX_KIND, NULL, MSG_APPICON_GAD, (ULONG)&NewGuiSwitches.ShowAppIcon, TAG_DONE, ENDGROUP_KIND, ENDGROUP_KIND, VGROUP_KIND, BBFT_RIDGE, SLIDER_KIND, (ULONG)LogLevelClicked, MSG_LOG_LEVEL_GAD, 0, 8, (ULONG)"%lu", 2, GA_Immediate, TRUE, TAG_DONE, HGROUP_KIND, 0, CHECKBOX_KIND, NULL, MSG_LOG_TO_FILE_GAD, (ULONG)&NewGuiSwitches.LogToFile, TAG_DONE, STRING_KIND, (ULONG)LogFileClicked, 0, 128, TAG_DONE, ENDGROUP_KIND, ENDGROUP_KIND, VGROUP_KIND, BBFT_RIDGE, HGROUP_KIND, 0, CHECKBOX_KIND, NULL, MSG_ASK_AUTOSAVE_GAD, (ULONG)&NewGuiSwitches.AskAutosave, TAG_DONE, SLIDER_KIND, (ULONG)AutosaveTimeClicked, MSG_AUTOSAVE_TIME_GAD, 0, 99, (ULONG)"%lu", 3, TAG_DONE, ENDGROUP_KIND, HGROUP_KIND, 0, CHECKBOX_KIND, NULL, MSG_DO_BACKUPS_GAD, (ULONG)&NewGuiSwitches.DoBackups, TAG_DONE, SLIDER_KIND, (ULONG)BackupVersionsClicked, MSG_BACKUP_VERSIONS_GAD, 1, 99, (ULONG)"%lu", 3, TAG_DONE, ENDGROUP_KIND, STRING_KIND, (ULONG)BackupTemplateClicked, MSG_BACKUP_TEMPLATE_GAD, 64, TAG_DONE, ENDGROUP_KIND, HGROUP_KIND, 0, BUTTON_KIND, (ULONG)PrefsUseClicked, MSG_UNDERSCORE_USE_GAD, TAG_DONE, BUTTON_KIND, (ULONG)PrefsCancelClicked, MSG_UNDERSCORE_CANCEL_GAD, TAG_DONE, ENDGROUP_KIND, ENDGROUP_KIND }; XDEF LONG PrefsWinTags[] = { XMWIN_LayoutArgs, (LONG)PrefsArgs, XMWIN_GCount, Prefs_CNT, XMWIN_Title, MSG_PREFS_TITLE, XMWIN_WindowFlags, WFLG_CLOSEGADGET, XMWIN_IDCMPFlags, TEXTIDCMP|STRINGIDCMP|CHECKBOXIDCMP|BUTTONIDCMP|CYCLEIDCMP|SLIDERIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW, XMWIN_PostOpenFunc, (LONG)PrefsPostOpen, XMWIN_PostCloseFunc,(LONG)PrefsPostClose, XMWIN_HelpNode, (LONG)"Prefs", TAG_DONE }; static void PrefsPostOpen (struct WinUserData *wud) { memcpy (&NewScrInfo, &ScrInfo, sizeof (struct ScrInfo)); memcpy (&NewGuiSwitches, &GuiSwitches, sizeof (struct GuiSwitches)); CopyTextAttrPooled (Pool, &WindowAttr, &NewWindowAttr); CopyTextAttrPooled (Pool, &ListAttr, &NewListAttr); UpdatePrefsWindow(); } static void PrefsPostClose (void) { FreeVecPooled (Pool, NewWindowAttr.ta_Name); NewWindowAttr.ta_Name = NULL; FreeVecPooled (Pool, NewListAttr.ta_Name); NewListAttr.ta_Name = NULL; } /********************/ /* Prefs Functions */ /********************/ GLOBALCALL void UpdatePrefsWindow() { /* These variables are declared static because gadtools text * gadgets do not buffer their texts and require them to be * accessible whenever a refresh is needed :-(. */ static UBYTE windowfont[40], listfont[40]; static struct NameInfo nameinfo; struct WinUserData *wud = WDescr[WID_PREFS].Wud; if (wud && wud->Win) { if (NewScrInfo.DisplayID) GetDisplayInfoData (NULL, (void *)&nameinfo, sizeof (nameinfo), DTAG_NAME, NewScrInfo.DisplayID); else strcpy (nameinfo.Name, STR(MSG_CLONE_DEF_SCREEN)); SPrintf (windowfont, "%s/%ld", NewWindowAttr.ta_Name, NewWindowAttr.ta_YSize); SPrintf (listfont, "%s/%ld", NewListAttr.ta_Name, NewListAttr.ta_YSize); SetGadgets (wud, GD_Requesters, NewGuiSwitches.UseReqTools, GD_UseDataTypes, NewGuiSwitches.UseDataTypes, GD_Refresh, NewGuiSwitches.SmartRefresh, GD_AppIcon, NewGuiSwitches.ShowAppIcon, GD_DisplayMode, nameinfo.Name, GD_PubScreen, NewScrInfo.PubScreenName, GD_WindowFont, windowfont, GD_ListViewFont, listfont, GD_LogLevel, NewGuiSwitches.LogLevel, GD_LogToFile, NewGuiSwitches.LogToFile, GD_LogFile, NewGuiSwitches.LogFile, GD_AskAutosave, NewGuiSwitches.AskAutosave, GD_AutosaveTime, NewGuiSwitches.AutosaveTime, GD_DoBackups, NewGuiSwitches.DoBackups, GD_BackupTemplate, NewGuiSwitches.BackupTemplate, GD_BackupVersions, NewGuiSwitches.BackupVersions, -1); } } /******************/ /* Prefs Gadgets */ /******************/ static void PubScreenClicked (struct WinUserData *wud) { strcpy (NewScrInfo.PubScreenName, GetString (wud->Gadgets[GD_PubScreen])); } static void GetPubScreenClicked (struct WinUserData *wud) { /**/ } static void GetDisplayModeClicked (struct WinUserData *wud) { ScrModeRequest (&NewScrInfo); UpdatePrefsWindow(); } static void GetWindowFontClicked (struct WinUserData *wud) { FontRequest (&NewWindowAttr, 0); UpdatePrefsWindow(); } static void GetListViewFontClicked (struct WinUserData *wud) { FontRequest (&NewListAttr, 0); UpdatePrefsWindow(); } static void RequestersClicked (struct WinUserData *wud) { NewGuiSwitches.UseReqTools ^= 1; } static void RefreshClicked (struct WinUserData *wud) { NewGuiSwitches.SmartRefresh ^= 1; } static void LogLevelClicked (struct WinUserData *wud) { NewGuiSwitches.LogLevel = IntuiMsg.Code; } static void LogFileClicked (struct WinUserData *wud) { strcpy (NewGuiSwitches.LogFile, GetString (wud->Gadgets[GD_LogFile])); } static void AutosaveTimeClicked (struct WinUserData *wud) { NewGuiSwitches.AutosaveTime = IntuiMsg.Code; } static void BackupTemplateClicked (struct WinUserData *wud) { strcpy (NewGuiSwitches.BackupTemplate, GetString (wud->Gadgets[GD_BackupTemplate])); } static void BackupVersionsClicked (struct WinUserData *wud) { NewGuiSwitches.BackupVersions = IntuiMsg.Code; } static void PrefsUseClicked (struct WinUserData *wud) { BOOL change_screen = FALSE, change_reqs = FALSE; if (memcmp (&ScrInfo, &NewScrInfo, sizeof (struct ScrInfo))) { change_screen = TRUE; memcpy (&ScrInfo, &NewScrInfo, sizeof (struct ScrInfo)); } if (memcmp (&GuiSwitches, &NewGuiSwitches, sizeof (struct GuiSwitches))) { if (GuiSwitches.UseReqTools != NewGuiSwitches.UseReqTools) change_reqs = TRUE; if (GuiSwitches.SmartRefresh != NewGuiSwitches.SmartRefresh) change_screen = TRUE; memcpy (&GuiSwitches, &NewGuiSwitches, sizeof (struct GuiSwitches)); } if (CmpTextAttr (&NewWindowAttr, &WindowAttr)) { CopyTextAttrPooled (Pool, &NewWindowAttr, &WindowAttr); change_screen = TRUE; } if (CmpTextAttr (&NewListAttr, &ListAttr)) { CopyTextAttrPooled (Pool, &NewListAttr, &ListAttr); change_screen = TRUE; } MyCloseWindow (wud); if (change_reqs) SetupRequesters(); if (GuiSwitches.ShowAppIcon) CreateAppIcon (ToolBoxDropIcon); else DeleteAppIcon (); if (change_screen) { CloseDownScreen(); if (SetupScreen()) { /* For some reason we have lost the screen: exit immediatly! */ Quit = TRUE; ShowRequesters = FALSE; } } } static void PrefsCancelClicked (struct WinUserData *wud) { MyCloseWindow (wud); }