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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: view_default.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 20:55:48  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: view_default.cpp,v 1000.1 2004/06/01 20:55:48 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:  Josh Cherry
  35.  *
  36.  * File Description:  Launch default viewer(s) for documents
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include "view_default.hpp"
  41. #include <corelib/ncbiapp.hpp>
  42. #include <corelib/ncbireg.hpp>
  43. #include <gui/core/idocument.hpp>
  44. #include <gui/core/plugin_utils.hpp>
  45. #include <gui/plugin/PluginCommandSet.hpp>
  46. #include <gui/plugin/PluginValue.hpp>
  47. #include <gui/plugin/PluginInfo.hpp>
  48. #include <gui/plugin/PluginReply.hpp>
  49. #include <gui/plugin/PluginRequest.hpp>
  50. #include <gui/plugin/PluginValueConstraint.hpp>
  51. #include <gui/core/version.hpp>
  52. #include <gui/core/doc_manager.hpp>
  53. #include <gui/objutils/utils.hpp>
  54. #include <gui/utils/message_box.hpp>
  55. BEGIN_NCBI_SCOPE
  56. USING_SCOPE(objects);
  57. // standard info boilerplate
  58. void CAlgoPlugin_ViewDefault::GetInfo(CPluginInfo& info)
  59. {
  60.     info.Reset();
  61.     // version info macro
  62.     info.SetInfo(CPluginVersion::eMajor, CPluginVersion::eMinor, 0,
  63.                  string(__DATE__) + " " + string(__TIME__),
  64.                  "CAlgoPlugin_ViewDefault",
  65.                  "",
  66.                  "View with Default Viewer(s)",
  67.                  "");
  68.     // command info
  69.     CPluginCommandSet& cmds = info.SetCommands();
  70.     CPluginCommand&    args = cmds.AddAlgoCommand(eAlgoCommand_run);
  71.     args.AddArgument("document", "Document to view",
  72.                      CPluginArg::eDocument);
  73. }
  74. static void s_GetDefaultViewers(const CSerialObject& obj,
  75.                                 vector<string>& viewers)
  76. {
  77.     string name = obj.GetThisTypeInfo()->GetName();
  78.     // check registry for relevant entry
  79.     CNcbiApplication* app = CNcbiApplication::Instance();
  80.     _ASSERT(app);
  81.     CNcbiRegistry& registry = app->GetConfig();
  82.     string regentry = registry.GetString("VIEWERS", name, "");
  83.     if (!regentry.empty()) {
  84.         // treat as a comma-separated list of viewers
  85.         vector<string> fields;
  86.         NStr::Tokenize(regentry, ",", fields);
  87.         ITERATE (vector<string>, field, fields) {
  88.             string viewer = NStr::TruncateSpaces(*field);
  89.             viewers.push_back(viewer);
  90.         }
  91.     } else {
  92.         // use predefined default defaults
  93.         if (name == "Seq-entry" || name == "Bioseq"
  94.             || name == "Bioseq-set" || name == "Seq-id") {
  95.             viewers.push_back("CViewGraphic");
  96.         } else if (name == "Seq-align" || name == "Seq-align-set"
  97.                    || name == "Seq-annot") {
  98.             viewers.push_back("CAlnMultiView");
  99.         } else if (name == "CPhyTreeSerial") {
  100.             viewers.push_back("CPhyloTreeView");
  101.         }
  102.     }
  103. }
  104. void CAlgoPlugin_ViewDefault::RunCommand(CPluginMessage& msg)
  105. {
  106.     const CPluginCommand& args = msg.GetRequest().GetCommand();
  107.     CPluginReply& reply = msg.SetReply();
  108.     _TRACE("CAlgoPlugin_ViewDefault::Run()");
  109.     IDocument* doc = const_cast<IDocument*> (&args["document"].AsDocument());
  110.     if (!doc) {
  111.         reply.SetStatus(eMessageStatus_failed);
  112.         return;
  113.     }
  114.     
  115.     const CSerialObject& obj = 
  116.         dynamic_cast<const CSerialObject&>(*doc->GetObject());
  117.     
  118.     CRef<CSelectionBuffer> buf(new CSelectionBuffer());
  119.     buf->AddSelection(doc, obj);
  120.     vector<string> viewers;
  121.     s_GetDefaultViewers(obj, viewers);
  122.     ITERATE (vector<string>, viewer, viewers) {
  123.         CPluginUtils::CallPlugin(*viewer, eViewCommand_new_view, *buf);
  124.     }
  125.     reply.SetStatus(eMessageStatus_success);
  126. }
  127. END_NCBI_SCOPE
  128. /*
  129.  * ===========================================================================
  130.  * $Log: view_default.cpp,v $
  131.  * Revision 1000.1  2004/06/01 20:55:48  gouriano
  132.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  133.  *
  134.  * Revision 1.4  2004/05/21 22:27:47  gorelenk
  135.  * Added PCH ncbi_pch.hpp
  136.  *
  137.  * Revision 1.3  2004/05/03 13:05:42  dicuccio
  138.  * gui/utils --> gui/objutils where needed
  139.  *
  140.  * Revision 1.2  2004/04/19 14:07:25  jcherry
  141.  * Handle Seq-id
  142.  *
  143.  * Revision 1.1  2004/03/15 16:04:14  jcherry
  144.  * Initial version
  145.  *
  146.  * ===========================================================================
  147.  */