settings_set.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:10k
- /*
- * ===========================================================================
- * PRODUCTION $Log: settings_set.hpp,v $
- * PRODUCTION Revision 1000.2 2004/04/12 18:11:56 gouriano
- * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.9
- * PRODUCTION
- * ===========================================================================
- */
- #ifndef GUI_CONFIG____SETTINGSSET_HPP
- #define GUI_CONFIG____SETTINGSSET_HPP
- /* $Id: settings_set.hpp,v 1000.2 2004/04/12 18:11:56 gouriano Exp $
- * ===========================================================================
- *
- * PUBLIC DOMAIN NOTICE
- * National Center for Biotechnology Information
- *
- * This software/database is a "United States Government Work" under the
- * terms of the United States Copyright Act. It was written as part of
- * the author's official duties as a United States Government employee and
- * thus cannot be copyrighted. This software/database is freely available
- * to the public for use. The National Library of Medicine and the U.S.
- * Government have not placed any restriction on its use or reproduction.
- *
- * Although all reasonable efforts have been taken to ensure the accuracy
- * and reliability of the software and data, the NLM and the U.S.
- * Government do not and cannot warrant the performance or results that
- * may be obtained by using this software or data. The NLM and the U.S.
- * Government disclaim all warranties, express or implied, including
- * warranties of performance, merchantability or fitness for any particular
- * purpose.
- *
- * Please cite the author in any work or product based on this material.
- *
- * ===========================================================================
- *
- * Author: Robert G. Smith
- *
- */
-
- /**
- * File Description:
- * CSettingsSet is an adapter of the PluginConfigCache. It is meant to be
- * used as a base class for individual plugins' configuration classes.
- * It constrains our access to the ConfigCache to a particular type.
- *
- * Preference/Settings classes that inherit from this need to provide:
- * 1) a map of default key/value pairs,
- * 2) a type name
- * 3) methods LoadCurrentSettings and SaveCurrentSettings
- * which convert between the derived class's data and key/value
- * pairs. They would call this classes Set/Get methods.
- *
- * It seems that modifications of the global ConfigCache would only happen
- * from a user interface event. Hence we shouldn't have to worry about
- * locking. But if this is not true, perhaps there should be a mutex
- * in this class to keep multiple threads from colliding data.
- *
- */
- #include <gui/config/PluginConfigCache.hpp>
- #include <corelib/ncbiobj.hpp>
- #include <corelib/ncbistr.hpp>
- #include <string>
- #include <map>
- BEGIN_NCBI_SCOPE
- /// IFactoryDefaultSettings
- /// abstract base class for all Factory Default Settings classes that provide
- /// key/value string pair defaults for descedants of CSettingsSet.
- class NCBI_GUICONFIG_EXPORT IFactoryDefaultSettings
- {
- public:
- virtual ~IFactoryDefaultSettings() {}
- virtual string Get(const string& key) const = 0;
- };
- /// Exceptions thrown by CSettings Set and Factory default classes should derive from this.
- class CConfigException : public CException
- {
- public:
- /// Error types that subsystem can generate.
- enum EErrCode {
- eNoDefaultValue, ///< the Factory Default class does not recognize this key.
- eConfigPanel, ///< a problem with a configuration panel.
- eThemeUnknownSet ///< a ThemeSet was asked for a CSettingSet it doesn own.
- };
- /// Translate from the error code value to its string representation.
- virtual const char* GetErrCodeString(void) const
- {
- switch (GetErrCode()) {
- case eNoDefaultValue: return "No default value.";
- case eConfigPanel: return "configuration panel error.";
- case eThemeUnknownSet: return "theme does not handle this type.";
- default: return CException::GetErrCodeString();
- }
- }
-
- // Standard exception boilerplate code.
- NCBI_EXCEPTION_DEFAULT(CConfigException, CException);
- };
- /// CFactoryDefaultSettings: simple class to provide
- /// a fixed set of default settings.
- class NCBI_GUICONFIG_EXPORT CFactoryDefaultSettings
- : public IFactoryDefaultSettings
- {
- public:
- typedef map<string, string> TFDInput;
- CFactoryDefaultSettings() {}
- CFactoryDefaultSettings(const TFDInput& kvs) : m_vals(kvs)
- { }
- virtual ~CFactoryDefaultSettings() {}
-
- string Get(const string& key) const;
- private:
- TFDInput m_vals;
- };
- /// this is a pure virtual class
- class NCBI_GUICONFIG_EXPORT CSettingsSet : public CObject
- {
- public:
- // constructor
- CSettingsSet(objects::CPluginConfigCache* config_cache,
- const string& type,
- const AutoPtr<IFactoryDefaultSettings>& fds,
- const string& typedesc = "",
- const string& delim = "|");
- virtual ~CSettingsSet();
- enum ELoadValueSource {
- eLoad_Current, ///< Get values from the current PCV (current style),
- ///< if not there look in Factory Defaults.
- eLoad_FactDefs ///< Only get values from the Factory Defaults.
- };
-
- /// convert between current settings and the PluginConfigCache.
- virtual bool LoadCurrentSettings(ELoadValueSource src) = 0;
- virtual bool SaveCurrentSettings(void) = 0;
-
- const string& GetType(void) const;
- const string& GetCurrentStyleName(void) const;
- void SetCurrentStyleName(const string& new_style);
- bool CurrentSettingsModified(void) const;
- void CurrentSettingsModified(bool modified);
-
- const string& GetTypeDescription(void) const;
- void SetTypeDescription(const string&);
-
- /**
- Methods to edit our list of valid styles.
- These do not change the current style, except DeleteStyle().
-
- */
-
- /// use to set up menu to chose between saved sets/styles.
- list<string> GetStyleNames(void) const;
- /// these all return the name of the style just added.
- /// on failure they will return empty strings.
- string AddStyle(void);
- string DuplicateStyle(const string& style);
- string RenameStyle(const string& old_style, const string& new_style);
- bool CanRenameStyle(const string& style);
- // returns true on success, false on failure.
- bool DeleteStyle(const string& style);
- objects::CPluginConfigCache& SetConfigCache(void);
-
- protected:
- /// what is the delimiter character between parts of a multi-part key?
- const string& GetKeyDelimiter() const;
-
- /// Access values in the current settings PCV and Factory defaults.
- string Get(const string& key, ELoadValueSource src) const;
- /// Set values in the current settings PCV.
- void Set(const string& key, const string& value);
- /// Set values in the current settings, include-type PCV.
- void Set(const string& typekey, const string& key, const string& value);
- /// Delete a key/value in the current settings.
- /// returns true if the key was found and deleted, false if not.
- bool Delete(const string& key);
-
- unsigned int GetArraySize(const string& array_key, ELoadValueSource src) const;
- string GetArrayItem(const string& array_key, unsigned int i, const string& item_key, ELoadValueSource src) const;
- void SetArraySize(const string& array_key, unsigned int i);
- void SetArrayItem(const string& array_key, unsigned int i, const string& item_key, const string& value);
- string ArrayHeaderKey(const string& array_key) const;
- string ArrayItemKey(const string& array_key, unsigned int i, const string& item_key) const;
-
- objects::CPluginConfigValues& SetCurrentSavedSet(void);
- static const string sm_StartupStyleName;
-
- private:
-
- AutoPtr<IFactoryDefaultSettings> m_FactoryDefault;
- CRef<objects::CPluginConfigCache> m_ConfigCache; // CAN be null
- const string m_Type; ///> key used in PCC.
- string m_TypeDescription; ///> used for display and menus.
- const string m_KeyDelim;
- bool m_CurrentSetModified;
- string m_CurrentStyleName;
- CRef<objects::CPluginConfigValues> m_CurrentSavedSet; // CAN be null
- };
- END_NCBI_SCOPE
- /*
- * ===========================================================================
- *
- * $Log: settings_set.hpp,v $
- * Revision 1000.2 2004/04/12 18:11:56 gouriano
- * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.9
- *
- * Revision 1.9 2004/02/04 16:48:59 rsmith
- * add theme_set exception type.
- *
- * Revision 1.8 2004/02/02 18:43:26 rsmith
- * add description to CSettingsSet, constructor and descendants.
- *
- * Revision 1.7 2003/12/29 14:32:15 rsmith
- * Get always returns string not string&. Get always throws exceptions.
- * Add Config exception class.
- * Add Array methods.
- *
- * Revision 1.6 2003/11/21 12:48:32 rsmith
- * Add ability to delete entries by key.
- *
- * Revision 1.5 2003/10/28 19:02:55 dicuccio
- * Added export specifiers. Changed ctor param from CRef<> to raw pointer
- *
- * Revision 1.4 2003/10/24 16:09:25 rsmith
- * add doxygen comments and GetKeyDelimiter
- *
- * Revision 1.3 2003/10/17 19:42:55 rsmith
- * make an abstract interface for factory defaults, and hence store them as a pointer in CSettingsSet.
- *
- * Revision 1.2 2003/10/10 19:35:31 dicuccio
- * Added export specifiers
- *
- * Revision 1.1 2003/10/10 17:41:43 rsmith
- * moved from gui/core to gui/config
- *
- * Revision 1.1 2003/09/26 18:13:16 rsmith
- * plugin configuration data and dialogs.
- *
- *
- * ===========================================================================
- */
- #endif // GUI_CONFIG____SETTINGSSET_HPP