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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: feat_show.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 20:43:18  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: feat_show.cpp,v 1000.1 2004/06/01 20:43:18 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_show.cpp
  38. /// 
  39. #include <ncbi_pch.hpp>
  40. #include <gui/config/feat_show.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. /// everything is shown by default.
  51. string CFeatShowFactoryDefaults::Get(const string& key) const
  52. {
  53.     string  key1, key2;
  54.     NStr::SplitInTwo(key, "|", key1, key2);
  55.     if (key == "show|Master") {
  56.         return kTrueStr;
  57.     }
  58.     NCBI_THROW(CConfigException, eNoDefaultValue, "key: " + key); 
  59. }
  60. // definitions for CFeatConfigShow
  61. /// use this cstr when declaring a CFeatConfigShow object.
  62. CFeatConfigShow::CFeatConfigShow(objects::CPluginConfigCache* config_cache, const string& typedesc)
  63.     : CSettingsSet(config_cache, "FeatureShow", 
  64.                    new CFeatShowFactoryDefaults(), typedesc)
  65. {
  66.     LoadCurrentSettings(eLoad_Current);
  67. }
  68. /// use this cstr when initializing a CFeatConfigShow object as a parent object
  69. /// in an inherited class, since it will probably need a different type
  70. /// and factory defaults.  But the FactoryDefaultSettings object pass in to here
  71. /// should probably inherit from CFeatConfigFactoryDefaults.
  72. CFeatConfigShow::CFeatConfigShow(objects::CPluginConfigCache* config_cache, 
  73.                  const string& type,
  74.                  const AutoPtr<IFactoryDefaultSettings>& fds,
  75.                  const string& typedesc
  76.     )
  77.     : CSettingsSet(config_cache, type, fds, typedesc)
  78. {
  79.  //   LoadCurrentSettings(eLoad_Current); // not needed since the child class will do this.
  80. }
  81. bool CFeatConfigShow::LoadCurrentSettings(ELoadValueSource src)
  82. {
  83.     // iterate through all feature types.
  84.     // if the Get throws, do not set anything for
  85.     // that value, for the feature type.
  86.     // Else set a real value and set Inherited to false.
  87.     
  88.     string featvaluestr;
  89.     
  90.     ClearShows();
  91.     
  92.     const CFeatConfigList& featureList = *GetFeatConfigList();
  93.     ITERATE ( CFeatConfigList, fc_it, featureList ) {
  94.        int myType = fc_it->GetType();
  95.         int mySubtype = fc_it->GetSubtype();
  96.                 
  97.         try {
  98.             featvaluestr = Get("show" + GetKeyDelimiter() + fc_it->GetStoragekey(), src);
  99.             SetShow( myType, mySubtype,  NStr::StringToBool(featvaluestr));
  100.             SetShowInherited( myType, mySubtype, false);
  101.         }
  102.         catch (const CConfigException&) {
  103.         }
  104.     }
  105.     
  106.     return true;
  107. }
  108. bool CFeatConfigShow::SaveCurrentSettings(void)
  109. {
  110.     // iterate through all feature types.
  111.     // if features color/show/etc. value is not inherited
  112.     //  save it as a string.
  113.     //  If it is inherited, or no value is defined for that feature type, 
  114.     //  we do not save it and make sure there is not an entry with that key.
  115.     
  116.     const CFeatConfigList& featureList = *GetFeatConfigList();
  117.     ITERATE(CFeatConfigList, fc_it, featureList) {
  118.         int myType = fc_it->GetType();
  119.         int mySubtype = fc_it->GetSubtype();
  120.         
  121.         if ( ! m_FeatShows.GetInherited(myType, mySubtype)) {
  122.             Set("show" + GetKeyDelimiter() + fc_it->GetStoragekey(), 
  123.                 NStr::BoolToString(GetShow(myType, mySubtype)) );
  124.         } else {
  125.             Delete("show" + GetKeyDelimiter() + fc_it->GetStoragekey());
  126.         }
  127.     }
  128.     
  129.     return true;
  130. }
  131. bool CFeatConfigShow::GetShow(int type, int subtype) const
  132. {
  133.     return m_FeatShows.GetValue(type, subtype);
  134. }
  135. void CFeatConfigShow::SetShow(int type, int subtype, bool show)
  136. {
  137.     m_FeatShows.SetValue(type, subtype, show);
  138. }
  139. void CFeatConfigShow::SetShowInherited(int type, int subtype, bool inherited)
  140. {
  141.     m_FeatShows.SetInherited(type, subtype, inherited);
  142. }
  143. void CFeatConfigShow::ClearShows()
  144. {
  145.     m_FeatShows.ClearValues();
  146. }
  147. END_NCBI_SCOPE
  148. /*
  149.  * ===========================================================================
  150.  * $Log: feat_show.cpp,v $
  151.  * Revision 1000.1  2004/06/01 20:43:18  gouriano
  152.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  153.  *
  154.  * Revision 1.6  2004/05/21 22:27:40  gorelenk
  155.  * Added PCH ncbi_pch.hpp
  156.  *
  157.  * Revision 1.5  2004/05/20 12:27:41  dicuccio
  158.  * Removed unnecessary doxygen module directives - they're in the headers
  159.  *
  160.  * Revision 1.4  2004/02/05 16:04:35  rsmith
  161.  * No need to LoadCurrentSettings when used as a base class.
  162.  *
  163.  * Revision 1.3  2004/02/02 18:44:18  rsmith
  164.  * add description to CSettingsSet, constructor and descendants.
  165.  *
  166.  * Revision 1.2  2003/12/30 15:00:50  dicuccio
  167.  * Fixed compiler errors/warnings on MSVC
  168.  *
  169.  * Revision 1.1  2003/12/29 14:34:38  rsmith
  170.  * split out from feat_config.cpp
  171.  *
  172.  *
  173.  * ===========================================================================
  174.  */