settings_set.cpp
来自「ncbi源码」· C++ 代码 · 共 383 行
CPP
383 行
/* * =========================================================================== * PRODUCTION $Log: settings_set.cpp,v $ * PRODUCTION Revision 1000.3 2004/06/01 20:43:24 gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9 * PRODUCTION * =========================================================================== *//* $Id: settings_set.cpp,v 1000.3 2004/06/01 20:43:24 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, and * provides an interface to the PluginConfigCache for plugins. * It constrains our access to the PluginConfigCache to a particular type. * */#include <ncbi_pch.hpp>#include <gui/config/settings_set.hpp>BEGIN_NCBI_SCOPEconst string CSettingsSet::sm_StartupStyleName("default");CSettingsSet::CSettingsSet(objects::CPluginConfigCache* config_cache, const string& type, const AutoPtr<IFactoryDefaultSettings>& fds, const string& typedesc, const string& delim ) : m_FactoryDefault(fds), m_ConfigCache(config_cache), m_Type(type), m_TypeDescription(typedesc), m_KeyDelim(delim){ if (m_TypeDescription.empty()) { m_TypeDescription = m_Type; } SetCurrentStyleName(sm_StartupStyleName);}CSettingsSet::~CSettingsSet(){}const string& CSettingsSet::GetKeyDelimiter() const{ return m_KeyDelim;}const string& CSettingsSet::GetType(void) const{ return m_Type;}const string& CSettingsSet::GetCurrentStyleName(void) const{ return m_CurrentStyleName;}void CSettingsSet::SetCurrentStyleName(const string& new_style){ if ( m_CurrentStyleName != new_style) { m_CurrentStyleName = new_style; if (m_ConfigCache.NotEmpty() && m_ConfigCache->HasPCV(m_Type, m_CurrentStyleName) ) { m_CurrentSavedSet.Reset(& m_ConfigCache->SetPCV(m_Type, m_CurrentStyleName)); } else { m_CurrentSavedSet.Reset(); } CurrentSettingsModified(false); }}bool CSettingsSet::CurrentSettingsModified(void) const{ return m_CurrentSetModified;}void CSettingsSet::CurrentSettingsModified(bool modified){ m_CurrentSetModified = modified;}const string& CSettingsSet::GetTypeDescription(void) const{ return m_TypeDescription;}void CSettingsSet::SetTypeDescription(const string& desc){ m_TypeDescription = desc;}list<string> CSettingsSet::GetStyleNames() const{ list <string> ret_list; if ( m_ConfigCache.NotEmpty() ) { ret_list = m_ConfigCache->GetStyleNamesByType(m_Type); ret_list.remove(sm_StartupStyleName); ret_list.sort(); } // Make sure the default name is always at the top of the list // whether or not it exists in the PCC. ret_list.push_front(sm_StartupStyleName); return ret_list;}string CSettingsSet::AddStyle(void){ objects::CPluginConfigCache& pcc = SetConfigCache(); string new_name("New Default Values"); new_name = pcc.MakeUniqueStyle(m_Type, new_name); pcc.SetPCV(m_Type, new_name); return new_name;}string CSettingsSet::DuplicateStyle(const string& style){ objects::CPluginConfigCache& pcc = SetConfigCache(); // make new unique name. string new_name(style + " copy"); new_name = pcc.MakeUniqueStyle(m_Type, new_name); // Some style names (default) may not actually exist // so there is nothing to duplicate. if (pcc.HasPCV(m_Type, style)) { pcc.DupPCV(m_Type, style, new_name); } else { pcc.SetPCV(m_Type, new_name); } return new_name;}string CSettingsSet::RenameStyle(const string& old_style, const string& new_style){ if (old_style == sm_StartupStyleName || new_style.empty() || old_style == new_style ) { return kEmptyStr; } objects::CPluginConfigCache& pcc = SetConfigCache(); objects::CPluginConfigValues& pcv = pcc.SetPCV(m_Type, old_style); string new_name = pcc.MakeUniqueStyle(m_Type, new_style); pcv.SetId().SetStyle(new_name); return new_name;}bool CSettingsSet::CanRenameStyle(const string& style){ if (style == sm_StartupStyleName) return false; return SetConfigCache().HasPCV(m_Type, style);}bool CSettingsSet::DeleteStyle(const string& style){ if (style == sm_StartupStyleName) { return false; } SetConfigCache().DeletePCV(m_Type, style); return true;}string CSettingsSet::Get(const string& key, ELoadValueSource data_src) const{ if (data_src == eLoad_Current && m_ConfigCache.NotEmpty() && m_CurrentSavedSet.NotEmpty() ) { try { // keys never saved with a value get Factory Defaults. return m_ConfigCache->GetStringByKey(*m_CurrentSavedSet, key, m_KeyDelim); } catch (const CSerialException&) { } } return m_FactoryDefault->Get( key );}void CSettingsSet::Set(const string& key, const string& value){ CurrentSettingsModified(true); SetCurrentSavedSet().AddKeyString(key, value, m_KeyDelim);}void CSettingsSet::Set(const string& typekey, const string& key, const string& value){ CurrentSettingsModified(true); SetConfigCache().AddKeyString( SetCurrentSavedSet(), typekey, key, value, m_KeyDelim);}bool CSettingsSet::Delete(const string& key){ if (SetConfigCache().DelKeyvalue(SetCurrentSavedSet(), key, m_KeyDelim)) { CurrentSettingsModified(true); return true; } return false;}objects::CPluginConfigCache& CSettingsSet::SetConfigCache(void){ if ( m_ConfigCache.Empty() ) { m_ConfigCache.Reset( new objects::CPluginConfigCache ); } return *m_ConfigCache;}objects::CPluginConfigValues& CSettingsSet::SetCurrentSavedSet(void){ if ( m_CurrentSavedSet.Empty() ) { m_CurrentSavedSet.Reset(& (SetConfigCache().SetPCV(m_Type, m_CurrentStyleName)) ); } return *m_CurrentSavedSet;}// Array access methods.const string kArrayCountSubKey("array");string CSettingsSet::ArrayHeaderKey(const string& array_key) const{ return array_key + GetKeyDelimiter() + kArrayCountSubKey;}string CSettingsSet::ArrayItemKey(const string& array_key, unsigned int i, const string& item_key) const{ string array_item_key = array_key + GetKeyDelimiter() + NStr::UIntToString(i); if ( ! item_key.empty()) { array_item_key += GetKeyDelimiter() + item_key; } return array_item_key;} unsigned int CSettingsSet::GetArraySize(const string& array_key, ELoadValueSource src) const{ string array_size_str = Get(ArrayHeaderKey(array_key), src); return NStr::StringToUInt(array_size_str);}string CSettingsSet::GetArrayItem(const string& array_key, unsigned int i, const string& item_key, ELoadValueSource data_src) const{ try { return Get(ArrayItemKey(array_key, i, item_key), data_src); } catch (const CConfigException& e1) { /// no array item i in the PCC or in the Factory Defaults. /// try array item 0 as a default. if (e1.GetErrCode() == CConfigException::eNoDefaultValue) { try { return Get(ArrayItemKey(array_key, 0, item_key), data_src); } catch (const CConfigException&) { // no item 0 either. // rethrow the original exception. throw e1; } } throw; } _ASSERT(false); // can't reach here. return kEmptyStr; // satisfy compilers.}void CSettingsSet::SetArraySize(const string& array_key, unsigned int array_size){ Set(ArrayHeaderKey(array_key), NStr::UIntToString(array_size));}void CSettingsSet::SetArrayItem(const string& array_key, unsigned int i, const string& item_key, const string& value){ Set(ArrayItemKey(array_key, i, item_key), value);}string CFactoryDefaultSettings::Get(const string& key) const { TFDInput::const_iterator i = m_vals.find(key); if (i == m_vals.end()) { NCBI_THROW(CConfigException, eNoDefaultValue, "key: " + key); } return i->second;}END_NCBI_SCOPE/** ===========================================================================** $Log: settings_set.cpp,v $* Revision 1000.3 2004/06/01 20:43:24 gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9** Revision 1.9 2004/05/21 22:27:40 gorelenk* Added PCH ncbi_pch.hpp** Revision 1.8 2004/02/02 18:44:18 rsmith* add description to CSettingsSet, constructor and descendants.** Revision 1.7 2003/12/30 15:01:07 dicuccio* Fixed compiler warnings on MSVC** Revision 1.6 2003/12/29 14:40:57 rsmith* Add array utility methods. Get returns string not const string&.* Get always throws on failure, does not return special values.** Revision 1.5 2003/11/21 12:49:12 rsmith* Add ability to delete values by key.** Revision 1.4 2003/10/28 19:02:17 dicuccio* Changed ctor parameter for config cache from CRef<> to raw pointer** Revision 1.3 2003/10/24 14:39:39 rsmith* Add more doxygen comments.** Revision 1.2 2003/10/17 19:42:54 rsmith* make an abstract interface for factory defaults, and hence store them as a pointer in CSettingsSet.** Revision 1.1 2003/10/10 17:43:42 rsmith* moved from gui/core to gui/config** Revision 1.1 2003/09/26 18:15:31 rsmith* plugin configration data and dialog*** ===========================================================================*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?