view_phylo_tree.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:9k
- /*
- * ===========================================================================
- * PRODUCTION $Log: view_phylo_tree.cpp,v $
- * PRODUCTION Revision 1000.1 2004/06/01 20:59:57 gouriano
- * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
- * PRODUCTION
- * ===========================================================================
- */
- /* $Id: view_phylo_tree.cpp,v 1000.1 2004/06/01 20:59:57 gouriano Exp $
- * ===========================================================================
- *
- * PUBLIC DOMAIN NOTICE
- * National Center for Biotechnology Information
- *
- * This software/database is a "United States Government Work" under the
- * terms of the United States Copyright Act. It was written as part of
- * the author's official duties as a United States Government employee and
- * thus cannot be copyrighted. This software/database is freely available
- * to the public for use. The National Library of Medicine and the U.S.
- * Government have not placed any restriction on its use or reproduction.
- *
- * Although all reasonable efforts have been taken to ensure the accuracy
- * and reliability of the software and data, the NLM and the U.S.
- * Government do not and cannot warrant the performance or results that
- * may be obtained by using this software or data. The NLM and the U.S.
- * Government disclaim all warranties, express or implied, including
- * warranties of performance, merchantability or fitness for any particular
- * purpose.
- *
- * Please cite the author in any work or product based on this material.
- *
- * ===========================================================================
- *
- * Authors: Vladimir Tereshkov
- *
- * File Description:
- *
- *
- */
- #include <ncbi_pch.hpp>
- #include "view_phylo_tree.hpp"
- #include <gui/core/plugin_utils.hpp>
- #include <gui/core/version.hpp>
- #include <gui/plugin/PluginRequest.hpp>
- #include <gui/plugin/PluginCommand.hpp>
- #include <gui/plugin/PluginCommandSet.hpp>
- #include <gui/plugin/PluginInfo.hpp>
- #include <gui/plugin/PluginValue.hpp>
- #include <gui/objutils/utils.hpp>
- #include <gui/core/idocument.hpp>
- #include <gui/core/iview.hpp>
- #include <gui/core/view.hpp>
- #include <gui/core/view_menu.hpp>
- #include <gui/core/algo_menu.hpp>
- #include <gui/types.hpp>
- #include <serial/serialimpl.hpp>
- #include <algo/phy_tree/phy_tree_serial.hpp>
- #include <gui/widgets/phylo_tree/phylo_tree_reader.hpp>
- #include <serial/iterator.hpp>
- BEGIN_NCBI_SCOPE
- USING_SCOPE(objects);
- // We include the generated _.cpp file here. This avoids a nasty bug in some
- // versions of gcc in which inline functions are not intantiated.
- #include "view_phylo_tree_.cpp"
- #define TRY_TO_USE_NEW_MENU_SYSTEM
- #ifdef TRY_TO_USE_NEW_MENU_SYSTEM
- #define m_MenuBar m_MenuBarNew
- #else
- #define m_MenuBar m_MenuBarOld
- #endif
- // Events map
- EVENT_MAP_RX_BEGIN(CPhyloTreeView)
- EVENT_FORWARD(CViewEvent::eSelectionChanged, m_PhyloTree)
- EVENT_FORWARD(CViewEvent::eTreeSelectionChanged, m_PhyloTree)
- EVENT_MAP_RX_END
- //
- // standard plugin announcement boilerplate
- //
- void CPhyloTreeView::GetInfo(CPluginInfo& info)
- {
- info.Reset();
- // version info macro
- info.SetInfo(CPluginVersion::eMajor, CPluginVersion::eMinor, 0,
- string(__DATE__) + " " + string(__TIME__),
- "CPhyloTreeView",
- "Phylogenetic Tree Viewer",
- "Phylogenetic Tree Viewer", "");
- // command info
- CPluginCommandSet& cmds = info.SetCommands();
- CPluginCommand& args = cmds.AddViewCommand(eViewCommand_new_view);
- args.AddArgument("tree", "Tree", CPhyTreeSerial::GetTypeInfo());
- }
- // addon to menuitem
- #define MENU_ITEM_RADIO(cmd, label)
- { CMenuItem::eItem, label, cmd, "", CMenuItem::eRadioItem},
- #define MENU_ITEM_RADIO_SET(cmd, label)
- { CMenuItem::eItem, label, cmd, "", CMenuItem::eRadioItem|CMenuItem::eSet},
- #define MENU_ITEM_CHECK(cmd, label)
- { CMenuItem::eItem, label, cmd, "", CMenuItem::eCheckItem},
- #define MENU_ITEM_CHECK_SET(cmd, label)
- { CMenuItem::eItem, label, cmd, "", CMenuItem::eCheckItem|CMenuItem::eSet},
- static
- DEFINE_MENU(Menu)
- SUBMENU("Zoom")
- MENU_ITEM(eCmdZoomIn, "Zoom In")
- MENU_ITEM(eCmdZoomOut, "Zoom Out")
- MENU_ITEM(eCmdZoomAll, "Zoom All")
- END_SUBMENU()
- SUBMENU("Graph")
- MENU_ITEM_RADIO_SET(eCmdSetGraphType1, "Rectangle Cladogram")
- MENU_ITEM_RADIO(eCmdSetGraphType2, "Slated Cladogram")
- MENU_ITEM_RADIO(eCmdSetGraphType3, "Radial Tree")
- MENU_ITEM_RADIO(eCmdSetGraphType4, "Force Layout")
- MENU_SEPARATOR()
- MENU_ITEM_CHECK(eCmdUseDistances, "Distances Rendering")
- END_SUBMENU()
- END_MENU()
- CPhyloTreeView::CPhyloTreeView(const CPluginMessage& msg,
- const string& pool_name)
- : CView()
- {
- m_Window.reset(x_CreateWindow());
-
- m_MenuBar->SetItems(Menu);
- m_MenuBar->SetCmdTarget(m_PhyloTree);
-
- #ifdef TRY_TO_USE_NEW_MENU_SYSTEM
- int width, height;
- this->GetSize(width, height);
- height = m_MenuBar->GetPreferredSize().Y();
- m_MenuBar->size(width, height);
- m_MenuBar->position(0,0);
- #endif
- // set our core components
- const CPluginCommand& args = msg.GetRequest().GetCommand();
- const CPluginArg& arg = args["tree"];
- // extract tree from argument
- const CPhyTreeSerial *tree =
- dynamic_cast<const CPhyTreeSerial *>(&args["tree"].AsObject());
- if (!tree) {
- throw runtime_error("CPhyloTreeView::Save: not a tree");
- }
- const IDocument* doc = arg.GetDocument();
- if (tree && doc) {
- x_SetDocument(*doc);
- m_DataSource.Reset(new CPhyloTreeDataSource());
- m_SeqIds = tree->GetIds();
- m_TreeData = tree->GetTree();
- }
- // create the view menu manager
- #ifndef TRY_TO_USE_NEW_MENU_SYSTEM
- m_ViewMenuMgr.reset(new CViewMenuMgr(m_MenuBar, "View", this, pool_name));
- #endif
- // setting host for sending events
- m_PhyloTree->SetHost(this);
- }
- void CPhyloTreeView::OnDocumentChanged()
- {
- if (!m_Document) {
- return;
- }
- SetTitle(m_Document->GetShortTitle() + ": " + GetTitle());
- m_DataSource.Reset
- (new CPhyloTreeDataSource(m_TreeData, m_SeqIds,
- m_Document->GetScope()));
- m_PhyloTree->SetDataSource(m_DataSource.GetPointer());
-
- if ( !GetSelBuffer() ) {
- ITERATE (vector< CConstRef<CSeq_id> >, iter, m_SeqIds) {
- SetSelBuffer().AddSelection(GetDocument(), **iter);
- }
- }
- #ifndef TRY_TO_USE_NEW_MENU_SYSTEM
- m_ViewMenuMgr->AddActiveViews(m_Document);
- m_ViewMenuMgr->AddNewViews();// (m_Document);
- #endif
- }
- const string& CPhyloTreeView::GetTitle(void) const
- {
- static string s_str("Phylogenetic Tree View");
- return s_str;
- }
- void CPhyloTreeView::x_OnFileClose()
- {
- Hide();
- }
- void CPhyloTreeView::x_OnZoomIn()
- {
- m_PhyloTree->OnZoomIn();
- }
- void CPhyloTreeView::x_OnZoomOut()
- {
- m_PhyloTree->OnZoomOut();
- }
- void CPhyloTreeView::x_OnZoomAll()
- {
- m_PhyloTree->OnZoomAll();
- }
- void CPhyloTreeView::x_OnHelp()
- {
- }
- END_NCBI_SCOPE
- /*
- * ===========================================================================
- * $Log: view_phylo_tree.cpp,v $
- * Revision 1000.1 2004/06/01 20:59:57 gouriano
- * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
- *
- * Revision 1.12 2004/05/21 22:27:49 gorelenk
- * Added PCH ncbi_pch.hpp
- *
- * Revision 1.11 2004/05/20 15:31:46 tereshko
- * Implemented support for new updates-driven menu
- *
- * Revision 1.10 2004/05/06 19:44:36 tereshko
- * Added force tree layout
- *
- * Revision 1.9 2004/05/03 17:52:53 dicuccio
- * gui/utils --> gui/objutils where needed
- *
- * Revision 1.8 2004/04/28 19:29:22 tereshko
- * Changed menu structure
- *
- * Revision 1.7 2004/04/16 14:45:29 dicuccio
- * Code clean-up. Use appropriate ISelection interface for dynamic menus
- *
- * Revision 1.6 2004/04/07 13:03:14 dicuccio
- * Changed view API - require CPluginMessage instead of CPluginArgSet. Changed name of phy tree variable to match its origin
- *
- * Revision 1.5 2004/04/02 16:46:12 yazhuk
- * Added CScope argument to the Data Source constructor
- *
- * Revision 1.4 2004/03/30 17:12:52 tereshko
- * Added support for events broadcasting
- *
- * Revision 1.3 2004/03/02 18:31:55 tereshko
- * Added radial tree layout
- *
- * Revision 1.2 2004/02/18 15:11:59 tereshko
- * Added renderer switching handle, corrected defines
- *
- * Revision 1.1 2004/02/17 23:45:52 tereshko
- * Phylogenetic tree viewer plugin. Initial revision.
- *
- * Revision 1.4 2004/02/12 21:08:31 yazhuk
- * Reorganized menu and added new commands
- *
- * Revision 1.3 2004/01/15 20:53:16 yazhuk
- * Renamed m_Menu to m_MenuBar, added menu definition and menu setup code
- *
- * Revision 1.2 2003/12/22 19:33:15 dicuccio
- * Lots of changes. Changed to match new APIs in IView. Added better handling of messages received from other views
- *
- * Revision 1.1 2003/12/05 20:06:05 yazhuk
- * Initial revision
- *
- * ===========================================================================
- */