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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: feat_config_list.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:46:25  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_CONFIG___FEAT_CONFIG_LIST__HPP
  10. #define GUI_CONFIG___FEAT_CONFIG_LIST__HPP
  11. /*  $Id: feat_config_list.hpp,v 1000.1 2004/06/01 19:46:25 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Authors:  Robert Smith
  37.  *
  38.  */
  39. /// @file feat_config_list.hpp
  40. /// Declarations for a list of "features" that can be configured.
  41. #include <corelib/ncbistd.hpp>
  42. #include <gui/gui.hpp>
  43. #include <objects/seqfeat/SeqFeatData.hpp>
  44. #include <set>
  45. /** @addtogroup GUI_CONFIG
  46.  *
  47.  * @{
  48.  */
  49. BEGIN_NCBI_SCOPE
  50. /// CFeatConfigItem - basic configuration data for one "feature" type.
  51. /// "feature" expanded to include things that are not SeqFeats.
  52. class NCBI_GUICONFIG_EXPORT CFeatConfigItem
  53. {
  54. public:
  55.     CFeatConfigItem() {}
  56.     CFeatConfigItem(int type, int subtype, const char* desc, const char* key)
  57.         : m_Type(type)
  58.         , m_Subtype(subtype)
  59.         , m_Description(desc)
  60.         , m_StorageKey(key) {}
  61.     bool operator<(const CFeatConfigItem& rhs) const;
  62.     
  63.     int         GetType() const;
  64.     int         GetSubtype() const;
  65.     string      GetDescription() const;
  66.     string      GetStoragekey() const;
  67.     
  68. private:    
  69.     int         m_Type;         ///< Feature type, or e_not_set for default values.
  70.     int         m_Subtype;      ///< Feature subtype or eSubtype_any for default values.
  71.     string      m_Description;  ///< a string for display purposes.
  72.     string      m_StorageKey;   ///< a short string to use as a key or part of a key 
  73.                                 ///< when storing a value by key/value string pairs.
  74. };
  75. // Inline methods.
  76. inline
  77. int CFeatConfigItem::GetType() const 
  78. { return m_Type; }
  79. inline
  80. int CFeatConfigItem::GetSubtype() const 
  81. { return m_Subtype; }
  82. inline
  83. string CFeatConfigItem::GetDescription() const 
  84. { return m_Description; }
  85. inline
  86. string CFeatConfigItem::GetStoragekey() const 
  87. { return m_StorageKey; }
  88. /// CConfigurableItems - a static list of items that can be configured.
  89. ///
  90. /// One can iterate through all items. Iterators dereference to CFeatConfigItem.
  91. /// One can also get an item by type and subtype.
  92. class NCBI_GUICONFIG_EXPORT CFeatConfigList 
  93. {
  94. private:
  95.     typedef set<CFeatConfigItem>    TFeatTypeContainer;
  96. public:
  97.     
  98.     CFeatConfigList();
  99.     
  100.     bool    TypeValid(int type, int subtype) const;
  101.     
  102.     /// can get all static information for one type/subtype.
  103.     bool    GetItem(int type, int subtype, CFeatConfigItem& config_item) const;
  104.     
  105.     bool    GetItemByDescription(const string& desc, CFeatConfigItem& config_item) const;
  106.     bool    GetItemByKey(const string& key, CFeatConfigItem& config_item) const;
  107.     
  108.     /// Get the displayable description of this type of feature.
  109.     string      GetDescription(int type, int subtype) const;
  110.     
  111.     /// Get the feature's type and subtype from its description.
  112.     /// return true on success, false if type and subtype are not valid.
  113.     bool        GetTypeSubType(const string& desc, int& type, int& subtype) const;
  114.     /// Get the key used to store this type of feature.
  115.     string      GetStoragekey(int type, int subtype) const;
  116.     /// return a list of all the feature descriptions for a menu or other control.
  117.     /// if hierarchical is true use in an Fl_Menu_ descendant to make hierarchical menus.
  118.     void    GetDescriptions(
  119.         vector<string> &descs,          ///> output, list of description strings.
  120.         bool hierarchical = false       ///> make descriptions hierachical, separated by '/'.
  121.      ) const;
  122.     
  123.     // Iteratable list of key values (type/subtype).
  124.     // can iterate through all values including defaults or with only
  125.     // real Feature types/subtypes.
  126.     typedef TFeatTypeContainer::const_iterator const_iterator;
  127.     
  128.     size_t          size() const;
  129.     const_iterator  begin() const;
  130.     const_iterator  end() const;
  131. private:
  132.     /// initialize our container of feature types and descriptions.
  133.     void    x_Init(void);
  134.     TFeatTypeContainer    m_FeatTypes;    ///> all valid types and subtypes.
  135. };
  136. /// You can have your own copy of the FeatConfgList, but usually
  137. /// you will want to get a pointer to a static copy from here.
  138. NCBI_GUICONFIG_EXPORT
  139. const CFeatConfigList* GetFeatConfigList();
  140. /// when getting Feature descriptions use this function if you want the 'Master'
  141. /// items to be called something else: like this:
  142. /// ChangeMasterFeatDescription(feat_it->GetDescription(), "Default")
  143. NCBI_GUICONFIG_EXPORT
  144. string  ChangeMasterFeatDescription(const string& oldDesc,
  145.                                     const string& newMasterDesc);
  146. END_NCBI_SCOPE
  147. /* @} */
  148. /*
  149.  * ===========================================================================
  150.  *
  151.  * $Log: feat_config_list.hpp,v $
  152.  * Revision 1000.1  2004/06/01 19:46:25  gouriano
  153.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  154.  *
  155.  * Revision 1.6  2004/05/11 18:55:53  dicuccio
  156.  * Changed doxygen modules - use GUI_CONFIG instead of PluginConfiguration
  157.  *
  158.  * Revision 1.5  2004/05/03 12:39:54  dicuccio
  159.  * Added #include for gui/gui.hpp
  160.  *
  161.  * Revision 1.4  2004/01/15 14:48:08  rsmith
  162.  * add GetTypeSubType method from CFeatConfig (deprecated).
  163.  *
  164.  * Revision 1.3  2004/01/14 20:29:35  rsmith
  165.  * Add GetDescriptions method to easily get lists of feature descriptions.
  166.  *
  167.  * Revision 1.2  2003/12/30 14:53:46  dicuccio
  168.  * Added export specifiers to global functions
  169.  *
  170.  * Revision 1.1  2003/12/29 14:17:12  rsmith
  171.  * Seperated from feat_config.hpp/cpp
  172.  *
  173.  *
  174.  * ===========================================================================
  175.  */
  176. #endif  /* GUI_CONFIG___FEAT_CONFIG_LIST__HPP */