worldspawn/include/preferencesystem.cpp

188 lines
4.4 KiB
C++

/*
Copyright (C) 2001-2006, William Joseph.
All Rights Reserved.
This file is part of GtkRadiant.
GtkRadiant is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
GtkRadiant is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GtkRadiant; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#if 0
#include "preferencesystem.h"
#include "preferencedictionary.h"
#include "xml/xmlparser.h"
#include "xml/xmlwriter.h"
void LoadPrefs( PreferenceDictionary& preferences, const char* filename ){
TextFileInputStream file( filename );
if ( !file.failed() ) {
XMLStreamParser parser( file );
XMLPreferenceDictionaryImporter importer( preferences );
parser.exportXML( importer );
}
else
{
// error
}
}
void SavePrefs( PreferenceDictionary& preferences, const char* filename ){
TextFileOutputStream file( filename );
if ( !file.failed() ) {
XMLStreamWriter writer( file );
XMLPreferenceDictionaryExporter exporter( preferences, "1" );
exporter.exportXML( writer );
}
else
{
// error
}
}
class StringPreference
{
public:
class Observer
{
public:
virtual void onChanged() = 0;
};
private:
CopiedString m_string;
Observer& m_observer;
public:
StringPreference( Observer& observer )
: m_observer( observer ){
}
void importString( const char* value ){
m_string = value;
m_observer.onChanged();
}
typedef MemberCaller<StringPreference, void(const char*), &StringPreference::importString> ImportStringCaller;
void exportString( Callback<void(const char *)>& importer ){
importer( m_string.c_str() );
}
typedef MemberCaller<StringPreference, void(Callback<void(const char *)>&), &StringPreference::exportString> ExportStringCaller;
};
inline void int_export( int i, Callback<void(const char *)>& importer ){
char buffer[16];
sprintf( buffer, "%d", i );
importer( buffer );
}
inline int int_import( const char* value ){
return atoi( value );
}
class IntPreference
{
public:
class Observer
{
public:
virtual void onChanged() = 0;
};
private:
int m_int;
Observer& m_observer;
public:
IntPreference( Observer& observer )
: m_observer( observer ){
}
void importString( const char* value ){
m_int = int_import( value );
m_observer.onChanged();
}
typedef MemberCaller<IntPreference, void(const char*), &IntPreference::importString> ImportStringCaller;
void exportString( Callback<void(const char *)>& importer ){
int_export( m_int, importer );
}
typedef MemberCaller<IntPreference, void(Callback<void(const char *)>&), &IntPreference::exportString> ExportStringCaller;
};
class IntPreferenceImporter
{
int& m_i;
public:
IntPreferenceImporter( int& i )
: m_i( i ){
}
void importString( const char* value ){
m_i = int_import( value );
}
};
class TestPrefs
{
public:
TestPrefs(){
PreferenceDictionary preferences;
class StringObserver : public StringPreference::Observer
{
public:
void onChanged(){
int bleh = 0;
}
} string_observer;
StringPreference string1( string_observer );
string1.importString( "twenty-three" );
class IntObserver : public IntPreference::Observer
{
public:
void onChanged(){
int bleh = 0;
}
} int_observer;
IntPreference int1( int_observer );
int1.importString( "23" );
preferences.registerPreference( "string1", StringPreference::ImportStringCaller( string1 ), StringPreference::ExportStringCaller( string1 ) );
preferences.registerPreference( "int1", IntPreference::ImportStringCaller( int1 ), IntPreference::ExportStringCaller( int1 ) );
LoadPrefs( preferences, "test.pref" );
SavePrefs( preferences, "test.pref" );
}
};
#if 0
TestPrefs g_TestPrefs;
#endif
void readpref( PreferenceDictionary& preferences, int& int_variable ){
PreferenceDictionary::iterator i = preferences.find( "int_variable" );
IntPreferenceImporter importer( int_variable );
( *i ).second.exporter().exportString( importer );
}
void writepref( PreferenceDictionary& preferences, int& int_variable ){
PreferenceDictionary::iterator i = preferences.find( "int_variable" );
int_export( int_variable, ( *i ).second.importer() );
}
#endif