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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: plugin_mgr_dlg.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 20:48:34  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.13
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: plugin_mgr_dlg.cpp,v 1000.2 2004/06/01 20:48:34 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.  *    User-modifiable portion of the plugin manager dialog
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include "plugin_mgr_dlg.hpp"
  41. #include "scanner_output_dlg.hpp"
  42. #include <corelib/ncbiapp.hpp>
  43. #include <corelib/ncbireg.hpp>
  44. #include <gui/dialogs/file_browser.hpp>
  45. BEGIN_NCBI_SCOPE
  46. // Include the *_.cpp file to avoid compilation issues with gcc
  47. #include "plugin_mgr_dlg_.cpp"
  48. CPluginMgrDlg::CPluginMgrDlg()
  49. {
  50.     m_Window.reset(x_CreateWindow());
  51. }
  52. void CPluginMgrDlg::Show()
  53. {
  54.     // call the base class first
  55.     CDialog::Show();
  56.     // now correct any paths we need to
  57.     if (m_Window.get()) {
  58.         m_PathsList->clear();
  59.         // fill the list of search paths from the config file
  60.         CNcbiApplication* app = CNcbiApplication::Instance();
  61.         _ASSERT(app);
  62.         const CNcbiRegistry& reg = app->GetConfig();
  63.         string search_path = reg.Get("app", "plugin_path");
  64.         if ( !search_path.empty() ) {
  65.             list<string> paths;
  66.             NStr::Split(search_path, ", ", paths);
  67.             ITERATE (list<string>, iter, paths) {
  68.                 m_PathsList->add(iter->c_str());
  69.             }
  70.         }
  71.     }
  72. }
  73. void CPluginMgrDlg::x_OnPathUp()
  74. {
  75.     int start = -1;
  76.     int stop = -1;
  77.     for (int i = 1;  i < m_PathsList->size()+1;  ++i) {
  78.         if ( m_PathsList->selected(i)  &&  start == -1) {
  79.             start = i;
  80.         } else if ( !m_PathsList->selected(i)  &&  start != -1) {
  81.             stop = i - 1;
  82.             break;
  83.         }
  84.     }
  85.     if (start <= 1) {
  86.         return;
  87.     }
  88.     if (stop == -1) {
  89.         stop = m_PathsList->size();
  90.     }
  91.     string path = m_PathsList->text(start - 1);
  92.     m_PathsList->insert(stop + 1, path.c_str());
  93.     m_PathsList->remove(start - 1);
  94. }
  95. void CPluginMgrDlg::x_OnPathDown()
  96. {
  97.     int start = -1;
  98.     int stop = -1;
  99.     for (int i = 1;  i < m_PathsList->size()+1;  ++i) {
  100.         if ( m_PathsList->selected(i)  &&  start == -1) {
  101.             start = i;
  102.         } else if ( !m_PathsList->selected(i)  &&  start != -1) {
  103.             stop = i - 1;
  104.             break;
  105.         }
  106.     }
  107.     if (start == -1) {
  108.         return;
  109.     }
  110.     if (stop == -1  ||  stop >= m_PathsList->size() + 1) {
  111.         return;
  112.     }
  113.     string path = m_PathsList->text(stop + 1);
  114.     m_PathsList->remove(stop + 1);
  115.     m_PathsList->insert(start, path.c_str());
  116. }
  117. void CPluginMgrDlg::x_OnAddPath()
  118. {
  119.     string path = NcbiDirBrowser("Select a plugin directory", "");
  120.     if ( path.empty() ) {
  121.         return;
  122.     }
  123.     // append the path to the paths list
  124.     m_PathsList->add(path.c_str());
  125.     // add the path to the registry
  126.     CNcbiApplication* app = CNcbiApplication::Instance();
  127.     _ASSERT(app);
  128.     CNcbiRegistry& reg = app->GetConfig();
  129.     reg.Set("app", "plugin_path",
  130.             x_ListToPluginPath(), CNcbiRegistry::ePersistent);
  131. }
  132. void CPluginMgrDlg::x_OnRemovePath()
  133. {
  134.     for (int i = 0;  i <= m_PathsList->size();  ++i) {
  135.         if ( !m_PathsList->selected(i) ) {
  136.             continue;
  137.         }
  138.         m_PathsList->remove(i);
  139.         --i;
  140.     }
  141.     // add the path to the registry
  142.     CNcbiApplication* app = CNcbiApplication::Instance();
  143.     _ASSERT(app);
  144.     CNcbiRegistry& reg = app->GetConfig();
  145.     reg.Set("app", "plugin_path",
  146.             x_ListToPluginPath(), CNcbiRegistry::ePersistent);
  147. }
  148. void CPluginMgrDlg::x_OnRescanPlugins()
  149. {
  150.     if ( !m_OutputDlg.get() ) {
  151.         m_OutputDlg.reset(new CScannerOutputDlg());
  152.     }
  153.     
  154.     m_OutputDlg->Show(x_ListToPluginPath());
  155. }
  156. void CPluginMgrDlg::x_OnToggleEnable()
  157. {
  158. }
  159. string CPluginMgrDlg::x_ListToPluginPath()
  160. {
  161.     string ret_val;
  162.     for (int i = 1;  i <= m_PathsList->size();  ++i) {
  163.         if ( !ret_val.empty() ) {
  164.             ret_val += ", ";
  165.         }
  166.         ret_val += m_PathsList->text(i);
  167.     }
  168.     return ret_val;
  169. }
  170. END_NCBI_SCOPE
  171. /*
  172.  * ===========================================================================
  173.  * $Log: plugin_mgr_dlg.cpp,v $
  174.  * Revision 1000.2  2004/06/01 20:48:34  gouriano
  175.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.13
  176.  *
  177.  * Revision 1.13  2004/05/21 22:27:42  gorelenk
  178.  * Added PCH ncbi_pch.hpp
  179.  *
  180.  * Revision 1.12  2004/03/11 17:35:05  dicuccio
  181.  * Use new file/dir browser
  182.  *
  183.  * Revision 1.11  2003/09/29 15:33:15  dicuccio
  184.  * Inherit dialog from CDialog
  185.  *
  186.  * Revision 1.10  2003/08/22 15:46:43  dicuccio
  187.  * Removed config file from CSettings - accessible through CNcbiApplication
  188.  *
  189.  * Revision 1.9  2003/06/25 17:02:56  dicuccio
  190.  * Split CPluginHandle into a handle (pointer-to-implementation) and
  191.  * implementation file.  Lots of #include file clean-ups.
  192.  *
  193.  * Revision 1.8  2003/05/07 17:56:25  dicuccio
  194.  * Must add plugin path to list *before* saving the list contents to the
  195.  * registry file...
  196.  *
  197.  * Revision 1.7  2003/04/29 14:51:52  dicuccio
  198.  * Reworked FLUID-generated code: more explicit control over constructor, better
  199.  * memeory management
  200.  *
  201.  * Revision 1.6  2003/03/25 13:15:48  dicuccio
  202.  * Implemented removal of plugin path elements.  Changed addition to use
  203.  * standard path formatting function
  204.  *
  205.  * Revision 1.5  2003/03/11 15:18:57  kuznets
  206.  * iterate -> ITERATE
  207.  *
  208.  * Revision 1.4  2003/02/26 19:23:47  dicuccio
  209.  * Added dialog for 'gbench_plugin_scan' output
  210.  *
  211.  * Revision 1.3  2003/02/25 14:48:16  dicuccio
  212.  * Implemented most of the plugin manager dialog features.
  213.  *
  214.  * Revision 1.2  2003/01/13 13:10:10  dicuccio
  215.  * Namespace clean-up.  Retired namespace gui -> converted all to namespace
  216.  * ncbi.  Moved all FLUID-generated code into namespace ncbi.
  217.  *
  218.  * Revision 1.1  2003/01/10 17:27:15  dicuccio
  219.  * Added first pass at plugin manager dialog - displays information about the
  220.  * currently loaded plugins, allows setting plugin paths via GUI
  221.  *
  222.  * ===========================================================================
  223.  */