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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: feat_config.cpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 20:43:11  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: feat_config.cpp,v 1000.3 2004/06/01 20:43:11 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_config.cpp
  38. /// 
  39. /// Utilities to configure preferences for viewing SeqFeats.
  40. #include <ncbi_pch.hpp>
  41. #include <gui/config/feat_config.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. // const string CFeatConfigFactoryDefaults::kNotDefined("#NOT Defined#");
  47. const string CFeatConfigFactoryDefaults::kTrueStr("true");
  48. const string CFeatConfigFactoryDefaults::kFalseStr("false");
  49. string CFeatConfigFactoryDefaults::Get(const string& key) const
  50. {
  51.     string  key1, key2;
  52.     NStr::SplitInTwo(key, "|", key1, key2);
  53.     if (key1 == "color") {
  54.         if (key2 == "Master") {
  55.             return CRgbaColor::ColorStrFromName("black");
  56.         } else if (key2 == "Gene") {
  57.             return CRgbaColor::ColorStrFromName("green");
  58.         } else if (key2 == "RNA Master") {
  59.             return CRgbaColor::ColorStrFromName("blue");
  60.         } else if (key2 == "CDS") {
  61.             return CRgbaColor::ColorStrFromName("red");
  62.         } else if (key2 == "repeat_region") {
  63.             return CRgbaColor::ColorStrFromName("blue");
  64.         }
  65.     } else if (key == "show|Master") {
  66.         return kTrueStr;
  67.     }
  68.     NCBI_THROW(CConfigException, eNoDefaultValue, "key: " + key); 
  69. }
  70. // definitions for CFeatConfig
  71. /// use this cstr when declaring a CFeatConfig object.
  72. CFeatConfig::CFeatConfig(objects::CPluginConfigCache* config_cache)
  73.     : CSettingsSet(config_cache, "features", 
  74.                    new CFeatConfigFactoryDefaults()),
  75.       m_FeatList(*GetFeatConfigList())
  76. {
  77.     LoadCurrentSettings(eLoad_Current);
  78. }
  79. /// use this cstr when initializing a CFeatConfig object as a parent object
  80. /// in an inherited class, since it will probably need a different type
  81. /// and factory defaults.  But the FactoryDefaultSettings object pass in to here
  82. /// should probably inherit from CFeatConfigFactoryDefaults.
  83. CFeatConfig::CFeatConfig(objects::CPluginConfigCache* config_cache, 
  84.                  const string& type,
  85.                  const AutoPtr<IFactoryDefaultSettings>& fds)
  86.     : CSettingsSet(config_cache, type, fds),
  87.       m_FeatList(*GetFeatConfigList())
  88. {
  89.     LoadCurrentSettings(eLoad_Current);
  90. }
  91. bool CFeatConfig::LoadCurrentSettings(ELoadValueSource src)
  92. {
  93.     /// iterate through all feature types.
  94.     /// if we Get a "Not Defined" string, do not set anything for
  95.     /// that value, for the feature type.
  96.     /// Else set a real value and set Inherited to false.
  97.     
  98.     string featvaluestr;
  99.     
  100.     ClearColors();
  101.     ClearShows();
  102.     
  103.     ITERATE ( CFeatConfig, fc_it, *this ) {
  104.         int myType = fc_it->GetType();
  105.         int mySubtype = fc_it->GetSubtype();
  106.         
  107.         try {
  108.             featvaluestr = Get("color" + GetKeyDelimiter() + fc_it->GetStoragekey(), src);
  109.             SetColor( myType, mySubtype, CGlColor(featvaluestr));
  110.             SetColorInherited( myType, mySubtype, false);
  111.         }
  112.         catch (const CConfigException&) {
  113.         }
  114.         
  115.         try {
  116.             featvaluestr = Get("show" + GetKeyDelimiter() + fc_it->GetStoragekey(), src);
  117.             SetShow( myType, mySubtype,  NStr::StringToBool(featvaluestr));
  118.             SetShowInherited( myType, mySubtype, false);
  119.         }
  120.         catch (const CConfigException&) {
  121.         }
  122.     }
  123.     
  124.     return true;
  125. }
  126. bool CFeatConfig::SaveCurrentSettings(void)
  127. {
  128.     // iterate through all feature types.
  129.     // if features color/show/etc. value is not inherited
  130.     //  save it as a string.
  131.     //  If it is inherited, or no value is defined for that feature type, 
  132.     //  we do not save it and make sure there is not an entry with that key.
  133.     
  134.     ITERATE(CFeatConfigList, fc_it, m_FeatList) {
  135.         int myType = fc_it->GetType();
  136.         int mySubtype = fc_it->GetSubtype();
  137.         
  138.         if ( ! m_FeatColors.GetInherited(myType, mySubtype)) {
  139.             Set("color" + GetKeyDelimiter() + fc_it->GetStoragekey(), 
  140.                 GetColor(myType, mySubtype).ToString(false) );
  141.         } else {
  142.             Delete("color" + GetKeyDelimiter() + fc_it->GetStoragekey());
  143.         }
  144.         
  145.         if ( ! m_FeatShows.GetInherited(myType, mySubtype)) {
  146.             Set("show" + GetKeyDelimiter() + fc_it->GetStoragekey(), 
  147.                 NStr::BoolToString(GetShow(myType, mySubtype)) );
  148.         } else {
  149.             Delete("show" + GetKeyDelimiter() + fc_it->GetStoragekey());
  150.         }
  151.     }
  152.     
  153.     return true;
  154. }
  155. void CFeatConfig::GetFeatureDescs(vector<string>& names) const
  156. {
  157.     names.clear();
  158.     ITERATE (CFeatConfigList, iter, m_FeatList) {
  159.         names.push_back(iter->GetDescription());
  160.     }
  161. }
  162. bool CFeatConfig::GetTypeSubType(const string& desc, int& type, int& subtype) const
  163. {
  164.     CFeatConfigItem config_item;
  165.     if ( m_FeatList.GetItemByDescription(desc, config_item) ) {
  166.         type = config_item.GetType();
  167.         subtype = config_item.GetSubtype();
  168.         return true;
  169.     }
  170.     return false;
  171. }
  172. size_t CFeatConfig::size() const
  173. {
  174.     return m_FeatList.size();
  175. }
  176. CFeatConfig::const_iterator CFeatConfig::begin() const
  177. {
  178.     return m_FeatList.begin();
  179. }
  180. CFeatConfig::const_iterator CFeatConfig::end() const
  181. {
  182.     return m_FeatList.end();
  183. }
  184. bool CFeatConfig::GetShow(int type, int subtype) const
  185. {
  186.     return m_FeatShows.GetValue(type, subtype);
  187. }
  188. void CFeatConfig::SetShow(int type, int subtype, bool show)
  189. {
  190.     m_FeatShows.SetValue(type, subtype, show);
  191. }
  192. void CFeatConfig::SetShowInherited(int type, int subtype, bool inherited)
  193. {
  194.     m_FeatShows.SetInherited(type, subtype, inherited);
  195. }
  196. void CFeatConfig::SetShows(const CFeatConfigValues<bool>& o)
  197. {
  198.     m_FeatShows = o;
  199. }
  200. const CFeatConfigValues<bool>& 
  201. CFeatConfig::GetShows() const
  202. {
  203.     return m_FeatShows;
  204. }
  205. void CFeatConfig::ClearShows()
  206. {
  207.     m_FeatShows.ClearValues();
  208. }
  209. CGlColor CFeatConfig::GetColor(int type, int subtype) const
  210. {
  211.     return m_FeatColors.GetValue(type, subtype);
  212. }
  213. void CFeatConfig::SetColor(int type, int subtype, CGlColor color)
  214. {
  215.     m_FeatColors.SetValue(type, subtype, color);
  216. }
  217. void CFeatConfig::SetColors(const CFeatConfigValues<CGlColor>& o)
  218. {
  219.     m_FeatColors = o;
  220. }
  221. const CFeatConfigValues<CGlColor>& 
  222. CFeatConfig::GetColors() const
  223. {
  224.     return m_FeatColors;
  225. }
  226. void CFeatConfig::SetColorInherited(int type, int subtype, bool inherited)
  227. {
  228.     m_FeatColors.SetInherited(type, subtype, inherited);
  229. }
  230. void CFeatConfig::ClearColors()
  231. {
  232.     m_FeatColors.ClearValues();
  233. }
  234. END_NCBI_SCOPE
  235. /*
  236.  * ===========================================================================
  237.  * $Log: feat_config.cpp,v $
  238.  * Revision 1000.3  2004/06/01 20:43:11  gouriano
  239.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  240.  *
  241.  * Revision 1.12  2004/05/21 22:27:39  gorelenk
  242.  * Added PCH ncbi_pch.hpp
  243.  *
  244.  * Revision 1.11  2004/05/20 12:27:41  dicuccio
  245.  * Removed unnecessary doxygen module directives - they're in the headers
  246.  *
  247.  * Revision 1.10  2003/12/30 15:00:30  dicuccio
  248.  * Fixed compiler warnings on MSVC
  249.  *
  250.  * Revision 1.9  2003/12/29 14:43:29  rsmith
  251.  * Get returns string not string&. Take out stuff now in separate files.
  252.  *
  253.  * Revision 1.8  2003/11/21 12:49:12  rsmith
  254.  * Add ability to delete values by key.
  255.  *
  256.  * Revision 1.7  2003/11/18 20:22:57  rsmith
  257.  * Any -> Master, get/set all Show and Color values at once.
  258.  *
  259.  * Revision 1.6  2003/10/30 14:23:39  rsmith
  260.  * Add cstr for use as a base class, and static value strings.
  261.  *
  262.  * Revision 1.5  2003/10/28 19:02:17  dicuccio
  263.  * Changed ctor parameter for config cache from CRef<> to raw pointer
  264.  *
  265.  * Revision 1.4  2003/10/28 13:43:41  rsmith
  266.  * Expose feature list's size().
  267.  *
  268.  * Revision 1.3  2003/10/27 19:29:14  rsmith
  269.  * Expose iterators on CFeatConfigItem in CFeatConfig
  270.  *
  271.  * Revision 1.2  2003/10/24 14:49:50  rsmith
  272.  * CFeatConfig -> CFeatConfigList, CFeatConfig now contains a CFeatConfigList,
  273.  * several methods added.
  274.  *
  275.  * Revision 1.1  2003/10/17 19:45:01  rsmith
  276.  * configuration information for SeqFeats. Replaces config_items.cpp
  277.  *
  278.  *
  279.  * Log below was from config_items.cpp which this file replaced.
  280.  *
  281.  * Revision 1.3  2003/10/16 16:29:58  rsmith
  282.  * change implementation to use a set not a map, so that the iterators would
  283.  * return CFeatConfigItem not a pair.
  284.  *
  285.  * Revision 1.2  2003/10/10 19:37:03  dicuccio
  286.  * Reqorked static initializer to use struct constructors
  287.  *
  288.  * Revision 1.1  2003/10/10 17:43:42  rsmith
  289.  * moved from gui/core to gui/config
  290.  *
  291.  * ===========================================================================
  292.  */