Control panel support

This commit is contained in:
Jens Hemprich 2006-11-28 21:06:40 +00:00
parent 4dae64c0fb
commit 82ac6a39f9
6 changed files with 54 additions and 16 deletions

View File

@ -45,10 +45,21 @@ GlideSettings::IOErr GlideSettingsFSp::makeSettingsFolderFileSpec(const char* pa
return err; return err;
} }
/**
* Find/Create settings folder
* @return fnfErr means the CLassic environment wasn't found
*/
GlideSettings::IOErr GlideSettingsFSp::init(const char* applicationname) 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 // 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) if (err == noErr)
{ {
FSSpec fsspec; FSSpec fsspec;
@ -62,13 +73,17 @@ GlideSettings::IOErr GlideSettingsFSp::init(const char* applicationname)
// Make references to various files // Make references to various files
if (err == noErr) if (err == noErr)
{ {
err = makeSettingsFolderFileSpec(&s_SettingsFolderName[1], applicationname, &m_fsSettingsFile); err = makeSettingsFolderFileSpec(&s_SettingsFolderName[1], s_LogFileName, &m_fsLogFile);
if (err == noErr) if (err == noErr)
{ {
err = makeSettingsFolderFileSpec(&s_SettingsFolderName[1], s_DefaultSettingsFileName, &m_fsDefaultSettingsFile); err = makeSettingsFolderFileSpec(&s_SettingsFolderName[1], s_DefaultSettingsFileName, &m_fsDefaultSettingsFile);
if (err == noErr) 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);
}
} }
} }
} }

View File

@ -26,6 +26,7 @@ protected:
IOErr create(); IOErr create();
IOErr read_defaults(); IOErr read_defaults();
IOErr read(); IOErr read();
inline bool isApplicationSpecific() {return m_fsSettingsFile.vRefNum != 0;};
IOErr put_raw(const char* string); IOErr put_raw(const char* string);
IOErr close(); IOErr close();
const unsigned char* PascalString(char* string); const unsigned char* PascalString(char* string);

View File

@ -292,12 +292,12 @@ GlideSettings::IOErr GlideSettings::load()
err = create_defaults(); err = create_defaults();
if (err == noErr) if (err == noErr)
{ {
err = save(); err = saveSettings();
} }
} }
if (err == noErr) if (err == noErr)
{ {
if (UseApplicationSpecificSettings) if (isApplicationSpecific() && UseApplicationSpecificSettings)
{ {
err = read(); err = read();
if (err == noErr) if (err == noErr)
@ -323,18 +323,17 @@ GlideSettings::IOErr GlideSettings::load()
err = create(); err = create();
if (err == noErr) if (err == noErr)
{ {
err = save(); err = saveSettings();
} }
} }
} }
} }
} }
// if (!success) err = fnfErr;
} }
return err; return err;
} }
GlideSettings::IOErr GlideSettings::save() GlideSettings::IOErr GlideSettings::saveSettings()
{ {
#ifdef OGL_DEBUG #ifdef OGL_DEBUG
GlideMsg("Saving...\n"); GlideMsg("Saving...\n");
@ -614,3 +613,22 @@ GlideSettings::IOErr GlideSettings::put(const char* setting, bool value)
{ {
return put(setting, value ? "1" : "0"); 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;
}

View File

@ -143,7 +143,9 @@ protected:
void defaults(); void defaults();
virtual IOErr read_defaults()=0; virtual IOErr read_defaults()=0;
virtual IOErr read()=0; virtual IOErr read()=0;
virtual bool isApplicationSpecific()=0;
IOErr read_settings(); IOErr read_settings();
IOErr saveSettings();
bool get(const char* setting, const char** value); bool get(const char* setting, const char** value);
bool get(const char* setting, unsigned long* value); bool get(const char* setting, unsigned long* value);
bool get(const char* setting, float* value); bool get(const char* setting, float* value);

View File

@ -26,6 +26,7 @@ protected:
IOErr create(); IOErr create();
IOErr read_defaults(); IOErr read_defaults();
IOErr read(); IOErr read();
inline bool isApplicationSpecific();
IOErr put_raw(const char* string); IOErr put_raw(const char* string);
IOErr close(); IOErr close();
}; };

View File

@ -12,20 +12,21 @@
#pragma once #pragma once
#if defined(__MWERKS__) #if defined(macintosh)
#if defined(macintosh) #if defined(__MWERKS__)
#define OPENGLIDE_HOST_MAC #define OPENGLIDE_HOST_MAC
// Codewarrior specific // Codewarrior specific
#define PP_Target_Carbon 0 #define PP_Target_Carbon 0
#define PP_Target_Classic (!PP_Target_Carbon) #define PP_Target_Classic (!PP_Target_Carbon)
#define TARGET_API_MAC_CARBON PP_Target_Carbon #define TARGET_API_MAC_CARBON PP_Target_Carbon
#define TARGET_API_MAC_OS8 PP_Target_Classic #define TARGET_API_MAC_OS8 PP_Target_Classic
// # else if /* Carbon or MachO version */ #else
// # define OPENGLIDE_HOST_MAC #define OPENGLIDE_HOST_MAC_OSX
// # endif /* !macintosh */ #endif /* __MWERKS__ */
#else /* !macintosh */ #else /* !macintosh */
#error "Unknown MetroWerks target platform" #error "Unsupported target platform"
#endif /* !macintosh */ // But it shouldn't be too complicated to
// be ported back to Windows ot Linux
#endif #endif
// Mac specific stuff // Mac specific stuff