THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 15/09/2007 at 18:26, xxxxxxxx wrote:
Unfortunately, there is no WriteContainer/ReadContainer. 
These methods do exist in the HyperFile but have not tried this approach. This may suffice for your requirements.
Otherwise, this is my entire plugin preferences load and save methods; a bit much, but it show everything needed. Note that the BaseFile* is passed in from the dialog so you'll want to either do similar or AutoAlloc the BaseFile and Filename::Select to get the file to open for read/write. Also note that this file tracks the version so as to ignore newer settings.
// CMD: Load Settings from Prefs file
//*---------------------------------------------------------------------------*
BOOL Settings::LoadSettings(BaseFile* baseFile, BOOL loadDefault)
//*---------------------------------------------------------------------------*
{
// Load either Default or User-Selected Preferences
Filename baseFilename;
if (!loadDefault)
{
baseFilename = GeGetPluginPath();
if (!baseFilename.FileSelect(0, 0, &GeLoadString;(IPPS_LOADPREFS_DLG))) return TRUE;
}
else baseFilename = prefs_Filename;
baseFile->Close();
// Open file
if (!baseFile->Open(baseFilename, GE_READ, FILE_NODIALOG)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_OPENFILE_TEXT), baseFilename.GetString());
Filename ppath;
LONG longv;
UCHAR version[3];
// Read interPoser Pro Preferences Version
baseFile->ReadBytes(&version;[0], 3);
// v0.4.3
// General
// - Read BOOL autoPrefs
if (!baseFile->ReadBool(&autoPrefs;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real objScaling
if (!baseFile->ReadReal(&objScaling;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Read Real infiniteLightRadius
if (!baseFile->ReadReal(&infiniteLightRadius;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Scene
// - Read BOOL includeCameras
if (!baseFile->ReadBool(&includeCameras;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read BOOL includeLights
if (!baseFile->ReadBool(&includeLights;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read BOOL includeGround
if (!baseFile->ReadBool(&includeGround;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Dials
// - Read BOOL overrideMorphEdit
if (!baseFile->ReadBool(&overrideMorphEdit;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real morphEditMin
if (!baseFile->ReadReal(&morphEditMin;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real morphEditMax
if (!baseFile->ReadReal(&morphEditMax;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real morphEditStep
if (!baseFile->ReadReal(&morphEditStep;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Materials
// - Read BOOL useTMin
if (!baseFile->ReadBool(&useTMin;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read BOOL useReflection
if (!baseFile->ReadBool(&useReflection;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read BOOL useSpecularMode
if (!baseFile->ReadBool(&useSpecularMode;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read BOOL useIllumModel
if (!baseFile->ReadBool(&useIllumModel;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read LONG specularMode
if (!baseFile->ReadLong(&specularMode;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read LONG illumModel
if (!baseFile->ReadLong(&illumModel;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read ChannelSampling Sampling[6]
for (INT i = 0; i < 6; ++i)
{
if (!baseFile->ReadBool(&(Sampling _.use))) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadLong(&(Sampling _.sampling))) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadReal(&(Sampling _.blurOffset))) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadReal(&(Sampling _.blurScale))) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
// Read BOOL useDisplacement
if (!baseFile->ReadBool(&useDisplacement;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Read BOOL heightAbsolute
if (!baseFile->ReadBool(&heightAbsolute;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Read LONG displacementType
if (!baseFile->ReadLong((LONG* )&displacementType;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Read LONG subdivisionLevel
if (!baseFile->ReadLong((LONG* )&subdivisionLevel;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Read BOOL roundGeometry
if (!baseFile->ReadBool(&roundGeometry;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Read BOOL roundContour
if (!baseFile->ReadBool(&roundContour;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Read BOOL mapRoundedGeometry
if (!baseFile->ReadBool(&mapRoundedGeometry;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Read BOOL mapResultingGeometry
if (!baseFile->ReadBool(&mapResultingGeometry;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Read BOOL keepOriginalEdges
if (!baseFile->ReadBool(&keepOriginalEdges;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Read BOOL bestDistribution
if (!baseFile->ReadBool(&bestDistribution;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Filename Project path and verify
if (!baseFile->ReadFilename(&ppath;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// v1.1.5: Consider migration from R9.6/PPC to R10UB
#ifdef C4D_R10UB
if (GeFExist(ppath, FALSE) || GeFExist(ppath, TRUE)) ProjectPath = ppath;
// Check for no '/' path separators
else if (!ppath.GetString().FindFirst('/', &longv;))
{
String p = ppath.GetString();
// MacOS C4D R10 - change ':' to '/'
while (p.FindFirst(':', &longv;)) p[longv] = '/';
if (p[0] == '/') ppath = Filename(String("/Volumes")+p);
else ppath = Filename(String("/Volumes/")+p);
if (GeFExist(ppath, FALSE) || GeFExist(ppath, TRUE)) ProjectPath = ppath;
//else MessageDialog("Project: "+ppath.GetString()+" was not found!");
}
//else if (ppath.Content()) MessageDialog("Project: "+ppath.GetString()+" was not found!");
#else
if (GeFExist(ppath, FALSE) || GeFExist(ppath, TRUE)) ProjectPath = ppath;
//else if (ppath.Content()) MessageDialog("Project: "+ppath.GetString()+" was not found!");
#endif
// RuntimeExplorer
// - Read Normal/Selected Color values
if (!baseFile->ReadVector(&colorsExplorer;[0])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadVector(&colorsExplorer;[1])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadVector(&colorsExplorer;[2])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadVector(&colorsExplorer;[3])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadVector(&colorsExplorer;[4])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadVector(&colorsExplorer;[5])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Get Runtimes
// -- Read LONG number of Runtimes
if (!baseFile->ReadLong(&longv;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (longv)
{
bDelete(firstIPPRuntime);
firstIPPRuntime = bNew IPPRuntime[longv];
if (!firstIPPRuntime) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_MEMORY_TEXT), "Settings.LoadSettings.firstIPPRuntime");
lastIPPRuntime = firstIPPRuntime + longv;
Bool boolean;
// -- Read Filename Runtime paths from file
for (IPPRuntime* rt = firstIPPRuntime; rt != lastIPPRuntime; ++rt)
{
if (!baseFile->ReadBool(&boolean;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadFilename(&ppath;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// v1.1.5: Consider migration from R9.6/PPC to R10UB
#ifdef C4D_R10UB
if (GeFExist(ppath, TRUE))
{
rt->enable = boolean;
rt->path = ppath;
GePrint("Runtime: "+ppath.GetString()+" Exists");
}
// Check for no '/' path separators
else if (!ppath.GetString().FindFirst('/', &longv;))
{
String p = ppath.GetString();
// MacOS C4D R10 - change ':' to '/'
while (p.FindFirst(':', &longv;)) p[longv] = '/';
if (p[0] == '/') ppath = Filename(String("/Volumes")+p);
else ppath = Filename(String("/Volumes/")+p);
if (GeFExist(ppath, TRUE))
{
rt->enable = boolean;
rt->path = ppath;
}
else MessageDialog("Runtime: "+ppath.GetString()+" not added!");
}
else MessageDialog("Runtime: "+ppath.GetString()+" not added!");
#else
// Verify existence
if (GeFExist(ppath, TRUE))
{
rt->enable = boolean;
rt->path = ppath;
}
else MessageDialog("Runtime: "+ppath.GetString()+" not added!");
#endif
}
}
// - Read String lastRTEFolder
if (!baseFile->ReadString(&lastRTI;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (CheckInterPoserVersion(&version;[0], 0, 4, 7) >= 0)
{
// Read BOOL imageSearch
if (!baseFile->ReadBool(&imageSearch;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Read BOOL useMasterSlaves
if (!baseFile->ReadBool(&useMasterSlaves;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 0, 4, 8) >= 0)
{
// Read BOOL clearSelection
if (!baseFile->ReadBool(&clearSelection;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Read BOOL storeUndoLoad
if (!baseFile->ReadBool(&storeUndoLoad;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 0, 4, 9) >= 0)
{
// Dials
// - Read BOOL overrideParmEdit
if (!baseFile->ReadBool(&overrideParmEdit;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real parmEditMin
if (!baseFile->ReadReal(&parmEditMin;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real parmEditMax
if (!baseFile->ReadReal(&parmEditMax;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real parmEditStep
if (!baseFile->ReadReal(&parmEditStep;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 0, 5, 8) >= 0)
{
// - Read BOOL logging
if (!baseFile->ReadBool(&logging;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 0, 6, 2) >= 0)
{
// Dials
// - Read BOOL overrideTransEdit
if (!baseFile->ReadBool(&overrideTransEdit;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real transEditMin
if (!baseFile->ReadReal(&transEditMin;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real transEditMax
if (!baseFile->ReadReal(&transEditMax;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real transEditStep
if (!baseFile->ReadReal(&transEditStep;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 0, 6, 3) >= 0)
{
// Scene
// - Read BOOL groupCameras
if (!baseFile->ReadBool(&groupCameras;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read BOOL groupLights
if (!baseFile->ReadBool(&groupLights;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 0, 6, 7) >= 0)
{
// Dialog
// - Read BOOL explorerFold
if (!baseFile->ReadBool(&explorerFold;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read BOOL actionsFold
if (!baseFile->ReadBool(&actionsFold;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read BOOL prefsGeneralFold
if (!baseFile->ReadBool(&prefsGeneralFold;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read BOOL prefsSceneFold
if (!baseFile->ReadBool(&prefsSceneFold;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read BOOL prefsDialsFold
if (!baseFile->ReadBool(&prefsDialsFold;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read BOOL prefsMatFold
if (!baseFile->ReadBool(&prefsMatFold;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Materials
// - Read BOOL useLuminance
if (!baseFile->ReadBool(&useLuminance;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real illumDiffuseFalloff
if (!baseFile->ReadReal(&illumDiffuseFalloff;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real illumDiffuseLevel
if (!baseFile->ReadReal(&illumDiffuseLevel;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real illumRoughness
if (!baseFile->ReadReal(&illumRoughness;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read LONG texturePreviewSize
if (!baseFile->ReadLong((LONG* )&texturePreviewSize;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Luminance ChannelSampling Sampling[CHANNELSAMPLING_LUMINANCE]
if (!baseFile->ReadBool(&(Sampling[CHANNELSAMPLING_LUMINANCE].use))) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadLong(&(Sampling[CHANNELSAMPLING_LUMINANCE].sampling))) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadReal(&(Sampling[CHANNELSAMPLING_LUMINANCE].blurOffset))) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadReal(&(Sampling[CHANNELSAMPLING_LUMINANCE].blurScale))) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 0, 6, 8) >= 0)
{
// - Read BOOL handSpreadLimits
if (!baseFile->ReadBool(&handSpreadLimits;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 0, 7, 2) >= 0)
{
// - Read Filename externalApp
if (!baseFile->ReadFilename(&externalApp;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 0, 7, 9) >= 0)
{
// - Read BOOL ignoreMatCase
if (!baseFile->ReadBool(&ignoreMatCase;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 1, 1, 3) >= 0)
{
// - Read BOOL hideBanner
if (!baseFile->ReadBool(&hideBanner;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 1, 3, 3) >= 0)
{
// - Read Vector ikColor
if (!baseFile->ReadVector(&ikColor;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read LONG ikDisplay
if (!baseFile->ReadLong(&ikDisplay;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read LONG ikOrient
if (!baseFile->ReadLong(&ikOrient;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real ikRadius
if (!baseFile->ReadReal(&ikRadius;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Real ikAspect
if (!baseFile->ReadReal(&ikAspect;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 1, 4, 0) >= 0)
{
// - Read BOOL newStyleApply
if (!baseFile->ReadBool(&new;StyleApply)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read BOOL autoSave
if (!baseFile->ReadBool(&autoSave;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read LONG numRecentContent
if (!baseFile->ReadLong(&numRecentContent;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read LONG numRecentScene
if (!baseFile->ReadLong(&numRecentScene;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// Dialog
// - Read BOOL recentFold
if (!baseFile->ReadBool(&recentFold;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read BOOL favoritesFold
if (!baseFile->ReadBool(&favoritesFold;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 1, 4, 3) >= 0)
{
// - Read BOOL autoThumbWidth
if (!baseFile->ReadBool(&autoThumbWidth;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 1, 4, 4) >= 0)
{
// - Read BOOL autoThumbWidthFave
if (!baseFile->ReadBool(&autoThumbWidthFave;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
// - Read Favorites Normal/Selected Color values
if (!baseFile->ReadVector(&colorsFavorites;[0])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadVector(&colorsFavorites;[1])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadVector(&colorsFavorites;[2])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
if (!baseFile->ReadVector(&colorsFavorites;[3])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
if (CheckInterPoserVersion(&version;[0], 1, 5, 5) >= 0)
{
// - Read BOOL pngMethod
if (!baseFile->ReadBool(&pngMethod;)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_READFILE_TEXT), baseFilename.GetString());
}
// add new version values here (skip if they don't exist)
baseFile->Close();
return TRUE;
}
// CMD: Save Settings to Prefs file
//*---------------------------------------------------------------------------*
BOOL Settings::SaveSettings(BaseFile* baseFile, const Filename& baseFilename, LONG rtCount, RuntimeItem* firstRTI, RuntimeItem* selected)
//*---------------------------------------------------------------------------*
{
baseFile->Close();
// Open prefs.txt and write out Settings and Runtimes
if (!baseFile->Open(baseFilename, GE_WRITE, FILE_NODIALOG)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_OPENFILE_TEXT), baseFilename.GetString());
// - Write UCHAR version[3]
if (!baseFile->WriteBytes(&INTERPOSERPRO;_VERSION[0], 3)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v0.4.3
// General
// - Write BOOL autoPrefs
if (!baseFile->WriteBool(autoPrefs)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real objScaling
if (!baseFile->WriteReal(objScaling)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real infiniteLightRadius
if (!baseFile->WriteReal(infiniteLightRadius)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// Scene
// - Write BOOL includeCameras
if (!baseFile->WriteBool(includeCameras)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL includeLights
if (!baseFile->WriteBool(includeLights)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL includeGround
if (!baseFile->WriteBool(includeGround)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// Dials
// - Write BOOL overrideMorphEdit
if (!baseFile->WriteBool(overrideMorphEdit)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real morphEditMin
if (!baseFile->WriteReal(morphEditMin)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real morphEditMax
if (!baseFile->WriteReal(morphEditMax)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real morphEditStep
if (!baseFile->WriteReal(morphEditStep)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// Materials
// - Write BOOL useTMin
if (!baseFile->WriteBool(useTMin)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL useReflection
if (!baseFile->WriteBool(useReflection)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL useSpecularMode
if (!baseFile->WriteBool(useSpecularMode)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL useIllumModel
if (!baseFile->WriteBool(useIllumModel)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write LONG specularMode
if (!baseFile->WriteLong(specularMode)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write LONG illumModel
if (!baseFile->WriteLong(illumModel)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write ChannelSampling Sampling[6]
for (INT i = 0; i < 6; ++i)
{
if (!baseFile->WriteBool(Sampling _.use)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteLong(Sampling _.sampling)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteReal(Sampling _.blurOffset)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteReal(Sampling _.blurScale)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
}
// Displacement
// - Write BOOL useDisplacement
if (!baseFile->WriteBool(useDisplacement)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL heightAbsolute
if (!baseFile->WriteBool(heightAbsolute)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write LONG displacementType
if (!baseFile->WriteLong(displacementType)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write LONG subdivisionLevel
if (!baseFile->WriteLong(subdivisionLevel)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL roundGeometry
if (!baseFile->WriteBool(roundGeometry)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL roundContour
if (!baseFile->WriteBool(roundContour)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL mapRoundedGeometry
if (!baseFile->WriteBool(mapRoundedGeometry)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL mapResultingGeometry
if (!baseFile->WriteBool(mapResultingGeometry)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL keepOriginalEdges
if (!baseFile->WriteBool(keepOriginalEdges)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL bestDistribution
if (!baseFile->WriteBool(bestDistribution)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Filename Project path
if (!baseFile->WriteFilename(ProjectPath)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// Runtime Explorer
// - Write Normal/Selected Color values
if (!baseFile->WriteVector(colorsExplorer[0])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteVector(colorsExplorer[1])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteVector(colorsExplorer[2])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteVector(colorsExplorer[3])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteVector(colorsExplorer[4])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteVector(colorsExplorer[5])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write LONG RuntimeExplorer Count
if (!baseFile->WriteLong(rtCount)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write RuntimeExplorer paths
for (RuntimeItem* rt = firstRTI; rt; rt = rt->GetNext())
{
// - Write BOOL rt->flag&checked;
if (!baseFile->WriteBool(rt->GetBit(RTFLAGS_CHECKED))) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteFilename(rt->GetFilename())) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), rt->GetFilename().GetString());
}
if (selected)
{
// - Write String lastRTEFolder
if (!baseFile->WriteString(selected->GetPathString())) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
}
else if (!baseFile->WriteString(String(""))) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v0.4.7
// - Write BOOL imageSearch
if (!baseFile->WriteBool(imageSearch)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteBool(useMasterSlaves)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v0.4.8
if (!baseFile->WriteBool(clearSelection)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteBool(storeUndoLoad)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v0.4.9
// Dials
// - Write BOOL overrideParmEdit
if (!baseFile->WriteBool(overrideParmEdit)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real parmEditMin
if (!baseFile->WriteReal(parmEditMin)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real parmEditMax
if (!baseFile->WriteReal(parmEditMax)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real parmEditStep
if (!baseFile->WriteReal(parmEditStep)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v0.5.8
// - Write BOOL logging
if (!baseFile->WriteBool(logging)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v0.6.1
// Dials
// - Write BOOL overrideTransEdit
if (!baseFile->WriteBool(overrideTransEdit)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real transEditMin
if (!baseFile->WriteReal(transEditMin)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real transEditMax
if (!baseFile->WriteReal(transEditMax)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real transEditStep
if (!baseFile->WriteReal(transEditStep)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v0.6.3
// - Write BOOL groupCameras
if (!baseFile->WriteBool(groupCameras)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL groupLights
if (!baseFile->WriteBool(groupLights)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v0.6.7
// Dialog
// - Write BOOL explorerFold
if (!baseFile->WriteBool(explorerFold)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL actionsFold
if (!baseFile->WriteBool(actionsFold)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL prefsGeneralFold
if (!baseFile->WriteBool(prefsGeneralFold)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL prefsSceneFold
if (!baseFile->WriteBool(prefsSceneFold)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL prefsDialsFold
if (!baseFile->WriteBool(prefsDialsFold)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL prefsMatFold
if (!baseFile->WriteBool(prefsMatFold)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// Materials
// - Write BOOL useLuminance
if (!baseFile->WriteBool(useLuminance)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real illumDiffuseFalloff
if (!baseFile->WriteReal(illumDiffuseFalloff)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real illumDiffuseLevel
if (!baseFile->WriteReal(illumDiffuseLevel)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real illumRoughness
if (!baseFile->WriteReal(illumRoughness)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write LONG texturePreviewSize
if (!baseFile->WriteLong(texturePreviewSize)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Luminance ChannelSampling Sampling[CHANNELSAMPLING_LUMINANCE]
if (!baseFile->WriteBool(Sampling[CHANNELSAMPLING_LUMINANCE].use)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteLong(Sampling[CHANNELSAMPLING_LUMINANCE].sampling)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteReal(Sampling[CHANNELSAMPLING_LUMINANCE].blurOffset)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteReal(Sampling[CHANNELSAMPLING_LUMINANCE].blurScale)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v0.6.8
// - Write BOOL handSpreadLimits
if (!baseFile->WriteBool(handSpreadLimits)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v0.7.2
// - Write Filename externalApp
if (!baseFile->WriteFilename(externalApp)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v0.7.9
// - Write BOOL ignoreMatCase
if (!baseFile->WriteBool(ignoreMatCase)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v1.1.3
// - Write BOOL hideBanner
if (!baseFile->WriteBool(hideBanner)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v1.3.3
// - Write Vector ikColor
if (!baseFile->WriteVector(ikColor)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write LONG ikDisplay
if (!baseFile->WriteLong(ikDisplay)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write LONG ikOrient
if (!baseFile->WriteLong(ikOrient)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real ikRadius
if (!baseFile->WriteReal(ikRadius)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Real ikAspect
if (!baseFile->WriteReal(ikAspect)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v1.4.0
// - Write BOOL newStyleApply
if (!baseFile->WriteBool(newStyleApply)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL autoSave
if (!baseFile->WriteBool(autoSave)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write LONG numRecentContent
if (!baseFile->WriteLong(numRecentContent)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write LONG numRecentScene
if (!baseFile->WriteLong(numRecentScene)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL recentFold
if (!baseFile->WriteBool(recentFold)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write BOOL favoritesFold
if (!baseFile->WriteBool(favoritesFold)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v1.4.3
// - Write BOOL autoThumbWidth
if (!baseFile->WriteBool(autoThumbWidth)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v1.4.4
// - Write BOOL autoThumbWidthFave
if (!baseFile->WriteBool(autoThumbWidthFave)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// - Write Favorites Normal/Selected Color values
if (!baseFile->WriteVector(colorsFavorites[0])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteVector(colorsFavorites[1])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteVector(colorsFavorites[2])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
if (!baseFile->WriteVector(colorsFavorites[3])) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
// v1.5.5
// - Write BOOL pngMethod
if (!baseFile->WriteBool(pngMethod)) return ErrorException::Throw(EE_DIALOG, GeLoadString(IPPERR_WRITEFILE_TEXT), baseFilename.GetString());
baseFile->Close();
return TRUE;
}