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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: tree_export.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 20:58:24  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: tree_export.cpp,v 1000.1 2004/06/01 20:58:24 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:
  37.  *    CDataPlugin_TreeExport - write phylogenetic tree to a file
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include "tree_export.hpp"
  41. #include <gui/core/idocument.hpp>
  42. #include <gui/core/plugin_utils.hpp>
  43. #include <gui/core/version.hpp>
  44. #include <gui/plugin/PluginCommandSet.hpp>
  45. #include <gui/plugin/PluginInfo.hpp>
  46. #include <gui/plugin/PluginValueConstraint.hpp>
  47. #include <gui/utils/message_box.hpp>
  48. #include <algo/phy_tree/phy_tree_serial.hpp>
  49. BEGIN_NCBI_SCOPE
  50. USING_SCOPE(objects);
  51. void CDataPlugin_TreeExport::GetInfo(CPluginInfo& info)
  52. {
  53.     info.Reset();
  54.     // version info macro
  55.     info.SetInfo(CPluginVersion::eMajor, CPluginVersion::eMinor, 0,
  56.                  string(__DATE__) + " " + string(__TIME__),
  57.                  "CDataPlugin_TreeExport",
  58.                  "Tree file", "Tree export plugin", "");
  59.     // command info
  60.     CPluginCommandSet& cmds     = info.SetCommands();
  61.     CPluginCommand& save_args   = cmds.AddDataCommand(eDataCommand_save);
  62.     save_args.AddArgument("file", "File name", CPluginArg::eFile);
  63.     save_args.AddArgument("tree", "Tree", CPhyTreeSerial::GetTypeInfo());
  64.     save_args.AddDefaultArgument("fmt", "Format", CPluginArg::eString,
  65.                                  "Newick");
  66.     save_args.SetConstraint("fmt",
  67.                             (*CPluginValueConstraint::CreateSet(),
  68.                              "Newick", "Nexus"));
  69. }
  70. //
  71. // Save()
  72. // Save the information in the tree into a file
  73. //
  74. void CDataPlugin_TreeExport::Save(CPluginMessage& msg)
  75. {
  76.     const CPluginCommand& args = msg.GetRequest().GetCommand();
  77.     CPluginReply& reply = msg.SetReply();
  78.     string fname = args["file"].AsString();
  79.     try {
  80.         const string& fmt = args["fmt"].AsString();
  81.         const CPhyTreeSerial *tree = 
  82.             dynamic_cast<const CPhyTreeSerial *>(&args["tree"].AsObject());
  83.         if (!tree) {
  84.             throw runtime_error("CDataPlugin_TreeExport::Save: not a tree");
  85.         }
  86.         CNcbiOfstream ostr(fname.c_str());
  87.         if (fmt == "Newick") {
  88.             ostr << tree->GetTree();
  89.         } else if (fmt == "Nexus") {
  90.             WriteNexusTree(ostr, tree->GetTree());
  91.         } else {
  92.             throw runtime_error(string("Invalid format: ") + fmt);
  93.         }
  94.         reply.SetStatus(eMessageStatus_success);
  95.     }
  96.     catch (CException& e) {
  97.         string msg("Failed to save file:n");
  98.         msg += e.GetMsg();
  99.         NcbiMessageBox(msg);
  100.         reply.SetStatus(eMessageStatus_failed);
  101.     }
  102. #ifndef _DEBUG
  103.     catch (...) {
  104.         NcbiMessageBox("Failed to save file:nUnknown errorn");
  105.         reply.SetStatus(eMessageStatus_failed);
  106.     }
  107. #endif
  108. }
  109. END_NCBI_SCOPE
  110. /*
  111.  * ===========================================================================
  112.  * $Log: tree_export.cpp,v $
  113.  * Revision 1000.1  2004/06/01 20:58:24  gouriano
  114.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  115.  *
  116.  * Revision 1.4  2004/05/25 17:21:59  dicuccio
  117.  * Modified class names.  Fonts to 12 point
  118.  *
  119.  * Revision 1.3  2004/05/21 22:27:48  gorelenk
  120.  * Added PCH ncbi_pch.hpp
  121.  *
  122.  * Revision 1.2  2004/03/11 17:43:41  dicuccio
  123.  * Use new file chooser dialog
  124.  *
  125.  * Revision 1.1  2004/02/17 05:39:01  jcherry
  126.  * Initial version
  127.  *
  128.  * ===========================================================================
  129.  */