/* 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 MemberCaller1 ImportStringCaller; void exportString(StringImportCallback& importer) { importer(m_string.c_str()); } typedef MemberCaller1 ExportStringCaller; }; inline void int_export(int i, StringImportCallback& 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 MemberCaller1 ImportStringCaller; void exportString(StringImportCallback& importer) { int_export(m_int, importer); } typedef MemberCaller1 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