From 82ac6a39f98c119bf7be4c6d73c25a2ab195f7fc Mon Sep 17 00:00:00 2001 From: Jens Hemprich <31758696+jenshemprich@users.noreply.github.com> Date: Tue, 28 Nov 2006 21:06:40 +0000 Subject: [PATCH] Control panel support --- MacGLide/Mac/GlideSettings_FSp.cpp | 21 +++++++++++++--- MacGLide/Mac/GlideSettings_FSp.h | 1 + MacGLide/OpenGLide/GlideSettings.cpp | 28 +++++++++++++++++---- MacGLide/OpenGLide/GlideSettings.h | 2 ++ MacGLide/OpenGLide/GlideSettings_iostream.h | 1 + MacGLide/OpenGLide/System.h | 17 +++++++------ 6 files changed, 54 insertions(+), 16 deletions(-) diff --git a/MacGLide/Mac/GlideSettings_FSp.cpp b/MacGLide/Mac/GlideSettings_FSp.cpp index 581a484..b6a2266 100644 --- a/MacGLide/Mac/GlideSettings_FSp.cpp +++ b/MacGLide/Mac/GlideSettings_FSp.cpp @@ -45,10 +45,21 @@ GlideSettings::IOErr GlideSettingsFSp::makeSettingsFolderFileSpec(const char* pa return err; } +/** + * Find/Create settings folder + * @return fnfErr means the CLassic environment wasn't found + */ GlideSettings::IOErr GlideSettingsFSp::init(const char* applicationname) { + // Select the domain +#ifdef OPENGLIDE_HOST_MAC // defined in system.h + short vRefNum = kOnSystemDisk; +#else // OPENGLIDE_HOST_MAC_OSX + // else is ok since this is Mac specific code anyway + short vRefNum = kClassicDomain; +#endif // Make the settings folder - GlideSettings::IOErr err = FindFolder(kOnSystemDisk, kPreferencesFolderType, kCreateFolder, &m_vRefNumPrefsFolder, &m_dirIDPrefsFolder); + GlideSettings::IOErr err = FindFolder(vRefNum, kPreferencesFolderType, kCreateFolder, &m_vRefNumPrefsFolder, &m_dirIDPrefsFolder); if (err == noErr) { FSSpec fsspec; @@ -62,13 +73,17 @@ GlideSettings::IOErr GlideSettingsFSp::init(const char* applicationname) // Make references to various files if (err == noErr) { - err = makeSettingsFolderFileSpec(&s_SettingsFolderName[1], applicationname, &m_fsSettingsFile); + err = makeSettingsFolderFileSpec(&s_SettingsFolderName[1], s_LogFileName, &m_fsLogFile); if (err == noErr) { err = makeSettingsFolderFileSpec(&s_SettingsFolderName[1], s_DefaultSettingsFileName, &m_fsDefaultSettingsFile); if (err == noErr) { - err = makeSettingsFolderFileSpec(&s_SettingsFolderName[1], s_LogFileName, &m_fsLogFile); + m_fsSettingsFile.vRefNum = 0; + if (applicationname) + { + err = makeSettingsFolderFileSpec(&s_SettingsFolderName[1], applicationname, &m_fsSettingsFile); + } } } } diff --git a/MacGLide/Mac/GlideSettings_FSp.h b/MacGLide/Mac/GlideSettings_FSp.h index c6e1acd..669c573 100755 --- a/MacGLide/Mac/GlideSettings_FSp.h +++ b/MacGLide/Mac/GlideSettings_FSp.h @@ -26,6 +26,7 @@ protected: IOErr create(); IOErr read_defaults(); IOErr read(); + inline bool isApplicationSpecific() {return m_fsSettingsFile.vRefNum != 0;}; IOErr put_raw(const char* string); IOErr close(); const unsigned char* PascalString(char* string); diff --git a/MacGLide/OpenGLide/GlideSettings.cpp b/MacGLide/OpenGLide/GlideSettings.cpp index 0362a4c..0b6e784 100644 --- a/MacGLide/OpenGLide/GlideSettings.cpp +++ b/MacGLide/OpenGLide/GlideSettings.cpp @@ -292,12 +292,12 @@ GlideSettings::IOErr GlideSettings::load() err = create_defaults(); if (err == noErr) { - err = save(); + err = saveSettings(); } } if (err == noErr) { - if (UseApplicationSpecificSettings) + if (isApplicationSpecific() && UseApplicationSpecificSettings) { err = read(); if (err == noErr) @@ -323,18 +323,17 @@ GlideSettings::IOErr GlideSettings::load() err = create(); if (err == noErr) { - err = save(); + err = saveSettings(); } } } } } -// if (!success) err = fnfErr; } return err; } -GlideSettings::IOErr GlideSettings::save() +GlideSettings::IOErr GlideSettings::saveSettings() { #ifdef OGL_DEBUG GlideMsg("Saving...\n"); @@ -614,3 +613,22 @@ GlideSettings::IOErr GlideSettings::put(const char* setting, bool value) { return put(setting, value ? "1" : "0"); } + +GlideSettings::IOErr GlideSettings::save() +{ + IOErr err = noErr; + if (isApplicationSpecific()) + { + err = create(); + } + else + { + err = create_defaults(); + } + if (err == noErr) + { + err = saveSettings(); + } + close(); + return noErr; +} \ No newline at end of file diff --git a/MacGLide/OpenGLide/GlideSettings.h b/MacGLide/OpenGLide/GlideSettings.h index 943d805..dd2b9c4 100644 --- a/MacGLide/OpenGLide/GlideSettings.h +++ b/MacGLide/OpenGLide/GlideSettings.h @@ -143,7 +143,9 @@ protected: void defaults(); virtual IOErr read_defaults()=0; virtual IOErr read()=0; + virtual bool isApplicationSpecific()=0; IOErr read_settings(); + IOErr saveSettings(); bool get(const char* setting, const char** value); bool get(const char* setting, unsigned long* value); bool get(const char* setting, float* value); diff --git a/MacGLide/OpenGLide/GlideSettings_iostream.h b/MacGLide/OpenGLide/GlideSettings_iostream.h index 62dc672..7c091f0 100755 --- a/MacGLide/OpenGLide/GlideSettings_iostream.h +++ b/MacGLide/OpenGLide/GlideSettings_iostream.h @@ -26,6 +26,7 @@ protected: IOErr create(); IOErr read_defaults(); IOErr read(); + inline bool isApplicationSpecific(); IOErr put_raw(const char* string); IOErr close(); }; diff --git a/MacGLide/OpenGLide/System.h b/MacGLide/OpenGLide/System.h index 2e759b1..5d14fb9 100644 --- a/MacGLide/OpenGLide/System.h +++ b/MacGLide/OpenGLide/System.h @@ -12,20 +12,21 @@ #pragma once -#if defined(__MWERKS__) - #if defined(macintosh) +#if defined(macintosh) + #if defined(__MWERKS__) #define OPENGLIDE_HOST_MAC // Codewarrior specific #define PP_Target_Carbon 0 #define PP_Target_Classic (!PP_Target_Carbon) #define TARGET_API_MAC_CARBON PP_Target_Carbon #define TARGET_API_MAC_OS8 PP_Target_Classic -// # else if /* Carbon or MachO version */ -// # define OPENGLIDE_HOST_MAC -// # endif /* !macintosh */ - #else /* !macintosh */ - #error "Unknown MetroWerks target platform" - #endif /* !macintosh */ + #else + #define OPENGLIDE_HOST_MAC_OSX + #endif /* __MWERKS__ */ +#else /* !macintosh */ + #error "Unsupported target platform" + // But it shouldn't be too complicated to + // be ported back to Windows ot Linux #endif // Mac specific stuff