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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: registry.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 20:47:00  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: registry.cpp,v 1000.2 2004/06/01 20:47:00 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:  Mike DiCuccio
  35.  *
  36.  * File Description:
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <gui/dialogs/registry/registry.hpp>
  41. #include <gui/widgets/fl/tree_browser.hpp>
  42. #include "registry_item_panel.hpp"
  43. BEGIN_NCBI_SCOPE
  44. #include "registry_.cpp"
  45. CRegistryDlg::CRegistryDlg(IRegistryData& data)
  46.     : m_Data(&data)
  47. {
  48.     m_Window.reset(x_CreateWindow());
  49.     m_List->SetData(data);
  50.     m_Tree->set_root(data.GetRootLabel().c_str());
  51.     //
  52.     // retrieve our key/value pairs and add them
  53.     //
  54.     list<string> keys;
  55.     m_Data->GetKeys(keys);
  56.     x_FillTree(keys);
  57. }
  58. void CRegistryDlg::x_FillTree(const list<string>& keys)
  59. {
  60.     ITERATE (list<string>, iter, keys) {
  61.         x_AddKey(*iter);
  62.     }
  63. }
  64. void CRegistryDlg::x_AddKey(const string& key, CTreeBrowser::Node* parent)
  65. {
  66.     if (key.empty()) {
  67.         return;
  68.     }
  69.     list<string> toks;
  70.     NStr::Split(key, ".", toks);
  71.     string leaf = toks.back();
  72.     toks.pop_back();
  73.     CTreeBrowser::Node* node = m_Tree->get_root();
  74.     ITERATE (list<string>, iter, toks) {
  75.         node = m_Tree->AddChild(*iter, node);
  76.     }
  77.     node = m_Tree->AddLeaf(leaf, node);
  78.     // split the trailing item off - this will be edited in the list
  79.     _TRACE("k = " << key << "  v = " << leaf);
  80.     multimap<string, string>::value_type item(key, leaf);
  81.     m_Keys.insert(item);
  82. }
  83. void CRegistryDlg::x_OnChooseKey()
  84. {
  85.     CTreeBrowser::Node* node = m_Tree->GetSelected();
  86.     if (node) {
  87.         string key = x_NodeToKey(node);
  88.         list<string> keys;
  89.         typedef multimap<string, string> TKeyMap;
  90.         pair<TKeyMap::iterator, TKeyMap::iterator> range =
  91.             m_Keys.equal_range(key);
  92.         for ( ;  range.first != range.second;  ++range.first) {
  93.             keys.push_back(range.first->first + "." + range.first->second);
  94.         }
  95.         m_List->Update(keys);
  96.     }
  97. };
  98. string CRegistryDlg::x_NodeToKey(CTreeBrowser::Node* node)
  99. {
  100.     string str = node->find_path();
  101.     string::size_type pos = 0;
  102.     while ( (pos = str.find_first_of("/", pos)) != string::npos) {
  103.         if (pos > 0  &&  str[pos-1] != '\') {
  104.             str[pos] = '.';
  105.         }
  106.         ++pos;
  107.     }
  108.     return str;
  109. }
  110. END_NCBI_SCOPE
  111. /*
  112.  * ===========================================================================
  113.  * $Log: registry.cpp,v $
  114.  * Revision 1000.2  2004/06/01 20:47:00  gouriano
  115.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5
  116.  *
  117.  * Revision 1.5  2004/05/21 22:27:42  gorelenk
  118.  * Added PCH ncbi_pch.hpp
  119.  *
  120.  * Revision 1.4  2003/12/09 15:51:20  dicuccio
  121.  * Deprecated Fl_Toggle_Tree - replaced with Flu_Tree_Browser.  Added CTreeBrowser
  122.  * as a standard tree interface
  123.  *
  124.  * Revision 1.3  2003/10/23 16:19:14  dicuccio
  125.  * Fixed thinko in determining whether an item can be opened
  126.  *
  127.  * Revision 1.2  2003/09/29 15:31:41  dicuccio
  128.  * Inherit dialog from CDialog
  129.  *
  130.  * Revision 1.1  2003/09/12 19:48:43  dicuccio
  131.  * Initial revision
  132.  *
  133.  * ===========================================================================
  134.  */