00001
00002 #ifndef INCLUDED_ConfigurationEditor_h
00003 #define INCLUDED_ConfigurationEditor_h
00004
00005 #include "Behaviors/Controls/ControlBase.h"
00006 #include "Behaviors/Controls/FileInputControl.h"
00007 #include "Behaviors/Controls/StringInputControl.h"
00008
00009
00010 class ConfigurationEditor : public ControlBase {
00011
00012
00013
00014
00015 public:
00016
00017 ConfigurationEditor(plist::Collection * rootCollection=NULL)
00018 : ControlBase("ConfigurationEditor","Provides interactive editing and loading/saving of a plist::Collection"),
00019 root(rootCollection), path(), load(rootCollection), save(rootCollection)
00020 {init();}
00021
00022 ConfigurationEditor(const std::string& n, plist::Collection * rootCollection=NULL)
00023 : ControlBase(n,"Provides interactive editing and loading/saving of a plist::Collection"),
00024 root(rootCollection), path(), load(rootCollection), save(rootCollection)
00025 {init();}
00026
00027 ConfigurationEditor(const std::string& n, const std::string& d, plist::Collection * rootCollection=NULL)
00028 : ControlBase(n,d), root(rootCollection), path(), load(rootCollection), save(rootCollection)
00029 {init();}
00030
00031
00032 virtual ~ConfigurationEditor() { clearSlots(); }
00033
00034 protected:
00035
00036 virtual void init();
00037
00038
00039
00040
00041
00042
00043 public:
00044
00045 virtual void refresh();
00046
00047
00048 virtual void clearSlots();
00049
00050
00051 virtual void setRootCollection(plist::Collection* rootCollection);
00052
00053
00054 virtual void setPath(const std::string& p);
00055
00056
00057 static plist::Dictionary& getObjectTemplates();
00058
00059
00060
00061
00062
00063 protected:
00064 plist::Collection * root;
00065 std::string path;
00066
00067
00068 class LoadSettings : public FileInputControl {
00069 public:
00070
00071 LoadSettings(plist::Collection * rootCollection) : FileInputControl("Load...","Load settings from disk","config"), rootcol(rootCollection) {}
00072
00073 virtual void setRootCollection(plist::Collection* rootCollection) { rootcol=rootCollection; }
00074 protected:
00075 virtual ControlBase* selectedFile(const std::string& f);
00076 plist::Collection * rootcol;
00077 private:
00078 LoadSettings(const LoadSettings&);
00079 LoadSettings& operator=(const LoadSettings&);
00080 };
00081 LoadSettings load;
00082
00083
00084 class SaveSettings : public FileInputControl {
00085 public:
00086
00087 SaveSettings(plist::Collection * rootCollection) : FileInputControl("Save...","Save settings to disk","config"), rootcol(rootCollection) { setAcceptNonExistant(true); }
00088
00089 virtual void setRootCollection(plist::Collection* rootCollection) { rootcol=rootCollection; }
00090 protected:
00091 virtual ControlBase* selectedFile(const std::string& f);
00092 plist::Collection * rootcol;
00093 private:
00094 SaveSettings(const SaveSettings&);
00095 SaveSettings& operator=(const SaveSettings&);
00096 };
00097 SaveSettings save;
00098
00099
00100 class AddCollectionEntry : public ControlBase {
00101 public:
00102 AddCollectionEntry(plist::Collection& target) : ControlBase("Add New Entry"), tgt(&target) {}
00103 virtual void refresh();
00104 virtual void deactivate() { clearSlots(); ControlBase::deactivate(); }
00105 protected:
00106 plist::Collection * tgt;
00107 private:
00108 AddCollectionEntry(const AddCollectionEntry&);
00109 AddCollectionEntry& operator=(const AddCollectionEntry&);
00110 };
00111
00112
00113 class NewCollectionEntry : public ControlBase {
00114 public:
00115 NewCollectionEntry(const std::string& n, plist::Collection& target, plist::ObjectBase& templ) : ControlBase(n), tgt(&target), obj(&templ) {}
00116 virtual void refresh();
00117 virtual void deactivate() { clearSlots(); ControlBase::deactivate(); }
00118 virtual ControlBase * doSelect();
00119 protected:
00120 plist::Collection * tgt;
00121 plist::ObjectBase * obj;
00122 private:
00123 NewCollectionEntry(const NewCollectionEntry&);
00124 NewCollectionEntry& operator=(const NewCollectionEntry&);
00125 };
00126
00127
00128
00129 class NamedEnumerationEditor : public StringInputControl {
00130 public:
00131
00132 NamedEnumerationEditor(const std::string& n, const std::string& prompt, plist::NamedEnumerationBase& target) : StringInputControl(n,prompt), tgt(&target) {}
00133 virtual void refresh();
00134
00135 virtual void deactivate() { clearSlots(); StringInputControl::deactivate(); }
00136
00137 virtual ControlBase * doSelect();
00138
00139 virtual void setHilights(const std::vector<unsigned int>& hi) {
00140 if(hi.empty())
00141 StringInputControl::setHilights(hi);
00142 else
00143 ControlBase::setHilights(std::vector<unsigned int>(1,hi.front()));
00144 }
00145 protected:
00146 plist::NamedEnumerationBase * tgt;
00147 private:
00148 NamedEnumerationEditor(const NamedEnumerationEditor&);
00149 NamedEnumerationEditor& operator=(const NamedEnumerationEditor&);
00150 };
00151
00152
00153
00154
00155
00156 private:
00157 ConfigurationEditor(const ConfigurationEditor&);
00158 ConfigurationEditor& operator=(const ConfigurationEditor&);
00159 };
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171 #endif