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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: plugin_dlg.cpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 21:17:18  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.1
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: plugin_dlg.cpp,v 1000.0 2004/06/01 21:17: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:  Mike DiCuccio
  35.  *
  36.  * File Description:
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <gui/core/plugin_dlg.hpp>
  41. #include <gui/core/plugin_utils.hpp>
  42. #include <gui/core/plugin_registry.hpp>
  43. #include <gui/widgets/fl/status_bar.hpp>
  44. #include <gui/utils/message_box.hpp>
  45. #include "plugin_arg_form.hpp"
  46. BEGIN_NCBI_SCOPE
  47. USING_SCOPE(objects);
  48. #include "plugin_dlg_.cpp"
  49. CPluginDlg::CPluginDlg(EDataCommand cmd)
  50.     : m_DataCmd(cmd)
  51.     , m_AlgoCmd(eAlgoCommand_no_command)
  52.     , m_ViewCmd(eViewCommand_no_command)
  53. {
  54.     m_Window.reset(x_CreateWindow());
  55.     // add the appropriate list of plugins
  56.     CPluginRegistry::TPlugins plugins =
  57.         CPluginRegistry::GetPlugins(CPluginCommandSet::e_Data);
  58.     m_Handles.reserve(plugins.size());
  59.     NON_CONST_ITERATE (CPluginRegistry::TPlugins, iter, plugins) {
  60.         // verify that we support the 'load' command
  61.         CPluginHandle plugin = *iter;
  62.         if ( !plugin.HasCommandSubtype(cmd) ) {
  63.             continue;
  64.         }
  65.         string menu_item = plugin.GetMenuItem();
  66.         m_PluginList->add(menu_item.c_str());
  67.         m_Handles.push_back(plugin);
  68.     }
  69.     switch (cmd) {
  70.     case eDataCommand_load:
  71.         m_TitleBase = "Open Items in a New Document";
  72.         break;
  73.     case eDataCommand_import:
  74.         m_TitleBase = "Import Items Into the Current Document";
  75.         break;
  76.     case eDataCommand_save:
  77.         m_TitleBase = "Save the Current Document";
  78.         break;
  79.     }
  80.     m_Window->label(m_TitleBase.c_str());
  81.     m_StatusBar->SetMessage("Please select an option");
  82. }
  83. void CPluginDlg::x_OnOK()
  84. {
  85.     // first, process all of our formatters
  86.     m_Form->Process();
  87.     // now, verify that our set of arguments is valid
  88.     try {
  89.         ITERATE (CPluginArgSet::Tdata, iter,
  90.                  m_Msg->GetRequest().GetCommand().GetArgs().Get()) {
  91.             const CPluginArg& arg = **iter;
  92.             if ( !CPluginUtils::IsValid(arg)  &&
  93.                 !(arg.IsSetOptional()  &&  arg.GetOptional()  && arg.IsEmpty())
  94.                 ) {
  95.                 string msg("Field '");
  96.                 msg += arg.GetDesc();
  97.                 msg += "' does not contain a valid value";
  98.                 throw runtime_error(msg);
  99.             }
  100.         }
  101.     }
  102.     catch (CException& e) {
  103.         string msg("Error in form input:n");
  104.         msg += e.GetMsg();
  105.         NcbiMessageBox(msg);
  106.         return;
  107.     }
  108.     catch (std::exception& e) {
  109.         string msg("Error in form input:n");
  110.         msg += e.what();
  111.         NcbiMessageBox(msg);
  112.         return;
  113.     }
  114.     CPluginUtils::CallPlugin(*m_Msg);
  115.     CDialog::x_OnOK();
  116. }
  117. void CPluginDlg::x_OnPluginChanged()
  118. {
  119.     m_Form->Clear();
  120.     m_Msg.Reset();
  121.     m_TitleStr = m_TitleBase;
  122.     m_Window->label(m_TitleStr.c_str());
  123.     m_StatusBar->SetMessage("Please select an option");
  124.     int idx = m_PluginList->value();
  125.     if (idx == 0) {
  126.         return;
  127.     }
  128.     --idx;
  129.     _ASSERT(idx < m_Handles.size());
  130.     CPluginHandle handle = m_Handles[idx];
  131.     if ( !handle ) {
  132.         return;
  133.     }
  134.     m_TitleStr += " - " + handle.GetMenuItem();
  135.     m_Window->label(m_TitleStr.c_str());
  136.     m_StatusBar->SetMessage(handle.GetToolTip());
  137.     if (m_DataCmd != eDataCommand_no_command) {
  138.         m_Msg.Reset(handle.CreateMessage(m_DataCmd));
  139.     } else if (m_AlgoCmd != eAlgoCommand_no_command) {
  140.         m_Msg.Reset(handle.CreateMessage(m_AlgoCmd));
  141.     } else if (m_ViewCmd != eViewCommand_no_command) {
  142.         m_Msg.Reset(handle.CreateMessage(m_ViewCmd));
  143.     } else {
  144.         return;
  145.     }
  146.     if (m_Msg) {
  147.         m_Form->SetArgs(m_Msg->SetRequest().SetCommand().SetArgs(),
  148.                         m_Objs);
  149.         m_Form->redraw();
  150.     }
  151. }
  152. END_NCBI_SCOPE
  153. /*
  154.  * ===========================================================================
  155.  * $Log: plugin_dlg.cpp,v $
  156.  * Revision 1000.0  2004/06/01 21:17:18  gouriano
  157.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.1
  158.  *
  159.  * Revision 1.1  2004/06/01 18:04:44  dicuccio
  160.  * Initial revision.  Lots of changes: added gui_project ASN.1 project, added new
  161.  * plugin arg form (separate widget), added plugin selector dialog
  162.  *
  163.  * ===========================================================================
  164.  */