theme_set.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:7k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: theme_set.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 20:43:27  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: theme_set.cpp,v 1000.1 2004/06/01 20:43:27 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Author:  Robert G. Smith
  35.  *
  36.  * File Description:
  37.  *   CSettingsSet is an adapter of the PluginConfigCache.  It is meant to be
  38.  *   used as a base class for individual plugins' configuration classes, and
  39.  *   provides an interface to the PluginConfigCache for plugins.
  40.  *   It constrains our access to the PluginConfigCache to a particular type.
  41.  *
  42.  */
  43. #include <ncbi_pch.hpp>
  44. #include <gui/config/theme_set.hpp>
  45. BEGIN_NCBI_SCOPE
  46. /// Dummy class, since CThemeSet doesn't need a Factory Default Settings.
  47. class NCBI_GUICONFIG_EXPORT CThemeDefaultSettings
  48.     : public IFactoryDefaultSettings
  49. {
  50. public:
  51.     CThemeDefaultSettings() {}
  52.     virtual ~CThemeDefaultSettings() {}
  53.     string   Get(const string& key) const { return kEmptyStr; }
  54. };
  55. CThemeSet::CThemeSet(objects::CPluginConfigCache* config_cache, 
  56.                  const string& type,
  57.                  const string& typedesc,
  58.                  const string& delim
  59.                 )
  60.       : CSettingsSet( config_cache, type, new CThemeDefaultSettings, typedesc, delim)
  61. {
  62. }
  63. CThemeSet::~CThemeSet()
  64. {
  65. }
  66. /// convert between current settings and the PluginConfigCache.
  67. bool CThemeSet::LoadCurrentSettings(ELoadValueSource src)
  68. {
  69.     NON_CONST_ITERATE(TSettingsReg, set_it, m_Settings) {
  70.         CSettingsSet& thisSet = **set_it;
  71.         string this_style;
  72.         if (src == eLoad_Current) {
  73.             string this_type = thisSet.GetType();
  74.             try {
  75.                 this_style = SetCurrentSavedSet().GetStyleByType(this_type);
  76.             }
  77.             catch (const CSerialException&) {
  78.                 // either CInvalidChoiceSelection because my current PCV is not an Include PCV.
  79.                 // or CUnassignedMember because this_type doesn't exist in my current PCV.
  80.                 this_style = sm_StartupStyleName;
  81.             }
  82.         } else {
  83.             // Factory default is the default style.
  84.             this_style = sm_StartupStyleName;
  85.         }
  86.         thisSet.SetCurrentStyleName(this_style);
  87.         thisSet.LoadCurrentSettings(src);
  88.     }
  89.     return true;
  90. }
  91. bool CThemeSet::SaveCurrentSettings(void)
  92. {
  93.     NON_CONST_ITERATE(TSettingsReg, set_it, m_Settings) {
  94.         CSettingsSet& thisSet = **set_it;
  95.         thisSet.SaveCurrentSettings();
  96.         
  97.         string this_type = thisSet.GetType();
  98.         string this_style = thisSet.GetCurrentStyleName();
  99.         SetCurrentSavedSet().AddPCId(this_type, this_style);
  100.     }
  101.     
  102.     return true;
  103. }
  104. void CThemeSet::AddSettingsSet(CSettingsSet& new_set)
  105. {
  106.     m_Settings.push_back( CRef<CSettingsSet>(&new_set ));
  107. }
  108. vector<string> CThemeSet::GetTypes() const
  109. {
  110.     vector<string>  my_types;
  111.     ITERATE(TSettingsReg, set_it, m_Settings) {
  112.         const string& this_type = (*set_it)->GetType();
  113.         my_types.push_back(this_type);
  114.     }
  115.     return my_types;
  116. }
  117. vector<string> CThemeSet::GetTypeDescriptions() const
  118. {
  119.     vector<string>  my_descs;
  120.     ITERATE(TSettingsReg, set_it, m_Settings) {
  121.         const string& this_desc = (*set_it)->GetTypeDescription();
  122.         my_descs.push_back(this_desc);
  123.     }
  124.     return my_descs;
  125. }
  126. list<string> CThemeSet::GetSetsStyles(const string& type) const
  127. {
  128.     return x_GetSettings(type).GetStyleNames();
  129. }
  130. const string& CThemeSet::GetSetsCurrentStyleName(const string& type) const
  131. {
  132.     return x_GetSettings(type).GetCurrentStyleName();
  133. }
  134. void CThemeSet::SetSetsCurrentStyleName(const string& type, const string& new_style)
  135. {
  136.         CSettingsSet& this_set = x_SetSettings(type);
  137.         this_set.SetCurrentStyleName(new_style);
  138.         this_set.LoadCurrentSettings(eLoad_Current);
  139. }
  140. const string& CThemeSet::GetSetsDescription(const string& type) const
  141. {
  142.     return x_GetSettings(type).GetTypeDescription();
  143. }
  144. const CSettingsSet& CThemeSet::x_GetSettings(const string& type) const
  145. {
  146.     ITERATE(TSettingsReg, set_it, m_Settings) {
  147.         if ((*set_it)->GetType() == type) {
  148.             return **set_it;
  149.         }
  150.     }
  151.     NCBI_THROW(CConfigException, eThemeUnknownSet, type);
  152. }
  153. CSettingsSet& CThemeSet::x_SetSettings(const string& type)
  154. {
  155.     NON_CONST_ITERATE(TSettingsReg, set_it, m_Settings) {
  156.         if ((*set_it)->GetType() == type) {
  157.             return **set_it;
  158.         }
  159.     }
  160.     NCBI_THROW(CConfigException, eThemeUnknownSet, type);
  161. }
  162. END_NCBI_SCOPE
  163. /*
  164. * ===========================================================================
  165. *
  166. * $Log: theme_set.cpp,v $
  167. * Revision 1000.1  2004/06/01 20:43:27  gouriano
  168. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  169. *
  170. * Revision 1.6  2004/05/21 22:27:40  gorelenk
  171. * Added PCH ncbi_pch.hpp
  172. *
  173. * Revision 1.5  2004/02/04 16:20:49  rsmith
  174. * store managed settings in a vector, not a map so we have control over their order.
  175. *
  176. * Revision 1.4  2004/02/02 18:44:18  rsmith
  177. * add description to CSettingsSet, constructor and descendants.
  178. *
  179. * Revision 1.3  2004/01/20 13:55:43  rsmith
  180. * Load settings after changing the style name in a sub-set.
  181. *
  182. * Revision 1.2  2003/12/30 15:01:21  dicuccio
  183. * Fixed compiler warnings on MSVC
  184. *
  185. * Revision 1.1  2003/12/29 14:41:39  rsmith
  186. * initial checkin
  187. *
  188. *
  189. * ===========================================================================
  190. */