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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: feat_decorate.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 20:43:16  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: feat_decorate.cpp,v 1000.1 2004/06/01 20:43:16 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.  * Authors:  Robert Smith
  35.  *
  36.  */
  37. /// @file feat_decorate.cpp
  38. /// 
  39. #include <ncbi_pch.hpp>
  40. #include <gui/config/feat_decorate.hpp>
  41. #include <gui/config/feat_config_list.hpp>
  42. BEGIN_NCBI_SCOPE
  43. /// This returns a string in response to any key if there is nothing
  44. /// for that key in the PluginConfigCache.  Hence it works closely
  45. /// with LoadCurrentSettings below.
  46. namespace {
  47.     const string kTrueStr("true");
  48.     const string kFalseStr("false");
  49.     
  50.     const string kDecorate("decorate");
  51. }
  52. /// everything has the same decoration by default.
  53. string CFeatDecorateFactoryDefaults::Get(const string& key) const
  54. {
  55.     string  key1, key2;
  56.     NStr::SplitInTwo(key, "|", key1, key2);
  57.     if (key == kDecorate + "|Master") {
  58.         return kEmptyStr;
  59.     }
  60.     NCBI_THROW(CConfigException, eNoDefaultValue, "key: " + key); 
  61. }
  62. // definitions for CFeatConfigDecorate
  63. /// use this cstr when declaring a CFeatConfigDecorate object.
  64. CFeatConfigDecorate::CFeatConfigDecorate(objects::CPluginConfigCache* config_cache, const string& typedesc)
  65.     : CSettingsSet(config_cache, "FeatureDecorate", 
  66.                    new CFeatDecorateFactoryDefaults(), typedesc)
  67. {
  68.     LoadCurrentSettings(eLoad_Current);
  69. }
  70. /// use this cstr when initializing a CFeatConfigDecorate object as a parent object
  71. /// in an inherited class, since it will probably need a different type
  72. /// and factory defaults.  But the FactoryDefaultSettings object pass in to here
  73. /// should probably inherit from CFeatConfigFactoryDefaults.
  74. CFeatConfigDecorate::CFeatConfigDecorate(objects::CPluginConfigCache* config_cache, 
  75.                  const string& type,
  76.                  const AutoPtr<IFactoryDefaultSettings>& fds,
  77.                  const string& typedesc
  78.     )
  79.     : CSettingsSet(config_cache, type, fds, typedesc)
  80. {
  81.  //   LoadCurrentSettings(eLoad_Current); // not needed since the child class will do this.
  82. }
  83. bool CFeatConfigDecorate::LoadCurrentSettings(ELoadValueSource src)
  84. {
  85.     // iterate through all feature types.
  86.     // if the Get throws, do not set anything for
  87.     // that value, for the feature type.
  88.     // Else set a real value and set Inherited to false.
  89.     
  90.     string featvaluestr;
  91.     
  92.     ClearDecorates();
  93.     
  94.     const CFeatConfigList& featureList = *GetFeatConfigList();
  95.     ITERATE ( CFeatConfigList, fc_it, featureList ) {
  96.        int myType = fc_it->GetType();
  97.         int mySubtype = fc_it->GetSubtype();
  98.                 
  99.         try {
  100.             featvaluestr = Get(kDecorate + GetKeyDelimiter() + fc_it->GetStoragekey(), src);
  101.             SetDecorate( myType, mySubtype,  CFeatDecorations(featvaluestr));
  102.             SetDecorateInherited( myType, mySubtype, false);
  103.         }
  104.         catch (const CConfigException&) {
  105.         }
  106.     }
  107.     
  108.     return true;
  109. }
  110. bool CFeatConfigDecorate::SaveCurrentSettings(void)
  111. {
  112.     // iterate through all feature types.
  113.     // if features color/show/etc. value is not inherited
  114.     //  save it as a string.
  115.     //  If it is inherited, or no value is defined for that feature type, 
  116.     //  we do not save it and make sure there is not an entry with that key.
  117.     
  118.     const CFeatConfigList& featureList = *GetFeatConfigList();
  119.     ITERATE(CFeatConfigList, fc_it, featureList) {
  120.         int myType = fc_it->GetType();
  121.         int mySubtype = fc_it->GetSubtype();
  122.         
  123.         if ( ! m_FeatDecorates.GetInherited(myType, mySubtype)) {
  124.             Set(kDecorate + GetKeyDelimiter() + fc_it->GetStoragekey(), 
  125.                GetDecorate(myType, mySubtype).ToString() );
  126.         } else {
  127.             Delete(kDecorate + GetKeyDelimiter() + fc_it->GetStoragekey());
  128.         }
  129.     }
  130.     
  131.     return true;
  132. }
  133. CFeatDecorations CFeatConfigDecorate::GetDecorate(int type, int subtype) const
  134. {
  135.     return m_FeatDecorates.GetValue(type, subtype);
  136. }
  137. void CFeatConfigDecorate::SetDecorate(int type, int subtype, CFeatDecorations decoration)
  138. {
  139.     m_FeatDecorates.SetValue(type, subtype, decoration);
  140. }
  141. void CFeatConfigDecorate::SetDecorateInherited(int type, int subtype, bool inherited)
  142. {
  143.     m_FeatDecorates.SetInherited(type, subtype, inherited);
  144. }
  145. void CFeatConfigDecorate::ClearDecorates()
  146. {
  147.     m_FeatDecorates.ClearValues();
  148. }
  149. END_NCBI_SCOPE
  150. /*
  151.  * ===========================================================================
  152.  * $Log: feat_decorate.cpp,v $
  153.  * Revision 1000.1  2004/06/01 20:43:16  gouriano
  154.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  155.  *
  156.  * Revision 1.3  2004/05/21 22:27:39  gorelenk
  157.  * Added PCH ncbi_pch.hpp
  158.  *
  159.  * Revision 1.2  2004/05/20 12:27:41  dicuccio
  160.  * Removed unnecessary doxygen module directives - they're in the headers
  161.  *
  162.  * Revision 1.1  2004/02/05 16:03:36  rsmith
  163.  * initial checkin
  164.  *
  165.  *
  166.  * ===========================================================================
  167.  */