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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: view_hit_matrix.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 20:59:19  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: view_hit_matrix.cpp,v 1000.2 2004/06/01 20:59:19 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:  Andrey Yazhuk
  35.  *
  36.  * File Description:
  37.  *    User-modifiable implementation file for extension of Dot Matrix
  38.  *    viewer for GBENCH
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include "view_hit_matrix.hpp"
  42. #include <gui/core/plugin_utils.hpp>
  43. #include <gui/core/version.hpp>
  44. #include <gui/plugin/PluginRequest.hpp>
  45. #include <gui/plugin/PluginCommand.hpp>
  46. #include <gui/plugin/PluginCommandSet.hpp>
  47. #include <gui/plugin/PluginInfo.hpp>
  48. #include <gui/plugin/PluginValue.hpp>
  49. #include <gui/objutils/utils.hpp>
  50. #include <serial/iterator.hpp>
  51. BEGIN_NCBI_SCOPE
  52. // We include the generated _.cpp file here.  This avoids a nasty bug in some
  53. // versions of gcc in which inline functions are not intantiated.
  54. #include "view_hit_matrix_.cpp"
  55. //
  56. // standard plugin announcement boilerplate
  57. //
  58. void CHitMatrixView::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.                  "CHitMatrixView",
  65.                  "Dot Matrix Viewer",
  66.                  "Dot Matrix Viewer", "");
  67.     // command info
  68.     CPluginCommandSet& cmds = info.SetCommands();
  69.     CPluginCommand&    args = cmds.AddViewCommand(eViewCommand_new_view);
  70.     /*args.AddArgument("alignments", "Alignments to render",
  71.                      CSeq_align_set::GetTypeInfo(),
  72.                      CPluginArg::TData::e_Single);*/
  73.     args.AddArgument("alignments", "Alignments to render",
  74.                      CSeq_annot::GetTypeInfo(),
  75.                      CPluginArg::TData::e_Single);
  76.     args.SetConstraint("alignments",
  77.                        *CPluginValueConstraint::CreateAnnotType
  78.                        (CSeq_annot::TData::e_Align));
  79.     /*args.SetConstraint("alignments",
  80.                        *CPluginValueConstraint::CreateAnnotType
  81.                        (CSeq_annot::TData::e_Align));*/
  82. }
  83. static
  84. DEFINE_MENU(Menu)
  85.     SUBMENU("Zoom")
  86.         MENU_ITEM(eCmdZoomIn, "Zoom In")
  87.         MENU_ITEM(eCmdZoomOut, "Zoom Out")
  88.         MENU_ITEM(eCmdZoomAll, "Zoom All")
  89.         MENU_ITEM(eCmdZoomObjects, "Zoom to Hits")
  90.         MENU_SEPARATOR()
  91.         MENU_ITEM(eCmdZoomSel, "Zoom to Selection")
  92.         MENU_ITEM(eCmdZoomSelObjects, "Zoom to Selected Hits")
  93.         MENU_ITEM(eCmdSetEqualScale, "Make Proportional")
  94.         MENU_SEPARATOR()
  95.         MENU_ITEM(eCmdZoomInX, "Zoom In Subject")
  96.         MENU_ITEM(eCmdZoomOutX, "Zoom Out Subject")
  97.         MENU_ITEM(eCmdZoomAllX, "Zoom All Subject")
  98.         MENU_SEPARATOR()
  99.         MENU_ITEM(eCmdZoomInY, "Zoom In Query")
  100.         MENU_ITEM(eCmdZoomOutY, "Zoom Out Query")
  101.         MENU_ITEM(eCmdZoomAllY, "Zoom All Query")        
  102.     END_SUBMENU()
  103.     SUBMENU("View")
  104.         MENU_ITEM(eCmdChooseSeq, "Choose Sequences to Display...")
  105.         MENU_ITEM(eCmdColorByScore, "Color by Score...")
  106.         MENU_SEPARATOR()        
  107.     END_SUBMENU()
  108. END_MENU()
  109. CHitMatrixView::CHitMatrixView(const CPluginMessage& msg,
  110.                                const string& pool_name)
  111.     : CAlnView()
  112. {
  113.     m_Window.reset(x_CreateWindow());
  114.     
  115.     m_MenuBar->SetItems(Menu);
  116.     m_MenuBar->SetCmdTarget(m_AlnView);
  117.     // set our core components
  118.     const CPluginCommand& args = msg.GetRequest().GetCommand();
  119.     const CPluginArg& arg = args["alignments"];
  120.     // extract the alignments from the argument
  121.     const CSeq_annot* annot =
  122.         dynamic_cast<const CSeq_annot*>(arg.GetObject());
  123.     const IDocument* doc = arg.GetDocument();
  124.     if (annot  &&  doc) {
  125.         x_SetDocument(*doc);
  126.         m_AnnotData.Reset(annot);
  127.     }
  128.     // create the view menu manager
  129.     m_ViewMenuMgr.reset(new CViewMenuMgr(m_MenuBar, "View", this, pool_name));
  130. }
  131. void CHitMatrixView::OnDocumentChanged()
  132. {
  133.     if (!m_Document) {
  134.         return;
  135.     }
  136.     SetTitle(m_Document->GetShortTitle() + ": " + GetTitle());
  137.     // create our alignment manager
  138.     m_DataSource.Reset(
  139.             new CHitMatrixDataSource(*m_AnnotData, m_Document->GetScope()));
  140.     CHitMatrixDataSource::TIdRefCont all_ids =  m_DataSource->GetSeqIDs();
  141.     // choosing sequences to display
  142.     if(all_ids.size() >1 )  {
  143.         CHitMatrixDataSource::TIdRefCont::const_iterator  it = all_ids.begin();
  144.         CConstRef<CSeq_id>   s_id(*it);
  145.         CConstRef<CSeq_id>   q_id(*(++it));
  146.         m_DataSource->SelectIds(s_id, q_id);
  147.         m_AlnView->SetDataSource(m_DataSource.GetPointer());
  148.     }    
  149.     
  150.     SetSelBuffer().Clear();
  151.     SetSelBuffer().AddSelection(m_Document, *m_AnnotData);
  152.     m_ViewMenuMgr->AddActiveViews(m_Document);
  153.     m_ViewMenuMgr->AddNewViews();//   (m_Document);
  154. }
  155. void CHitMatrixView::OnSelectionChanged(const CSelectionBuffer& buf)
  156. {
  157.     if (!m_Document) {
  158.         return;
  159.     }
  160.    
  161.     SetSelBuffer().Clear();
  162.     SetSelBuffer().AddSelection(m_Document, *m_AnnotData);
  163.     m_ViewMenuMgr->AddActiveViews(m_Document);
  164.     m_ViewMenuMgr->AddNewViews();//   (m_Document);
  165. }
  166. const string& CHitMatrixView::GetTitle(void) const
  167. {
  168.     static string s_str("Dot Matrix View");
  169.     return s_str;
  170. }
  171. void CHitMatrixView::x_OnFileClose()
  172. {
  173.     Hide();
  174. }
  175. void CHitMatrixView::x_OnZoomIn()
  176. {
  177.     m_AlnView->OnZoomIn();
  178. }
  179. void CHitMatrixView::x_OnZoomOut()
  180. {
  181.     m_AlnView->OnZoomOut();
  182. }
  183. void CHitMatrixView::x_OnZoomAll()
  184. {
  185.     m_AlnView->OnZoomAll();
  186. }
  187. void CHitMatrixView::x_OnHelp()
  188. {
  189. }
  190. /*
  191. void CHitMatrixView::x_OnZoomSelection()
  192. {
  193.     if (m_AlnView) {
  194.         m_AlnView->OnZoomSelection();
  195.     }
  196. }
  197. void CHitMatrixView::x_OnZoomSequence()
  198. {
  199.     if (m_AlnView) {
  200.         m_AlnView->OnZoomSequence();
  201.     }
  202. }
  203. void CHitMatrixView::x_OnClearSelections()
  204. {
  205.     if (m_AlnView) {
  206.         m_AlnView->OnResetSelection();
  207.     }
  208. }
  209. */
  210. END_NCBI_SCOPE
  211. /*
  212.  * ===========================================================================
  213.  * $Log: view_hit_matrix.cpp,v $
  214.  * Revision 1000.2  2004/06/01 20:59:19  gouriano
  215.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  216.  *
  217.  * Revision 1.8  2004/05/21 22:27:49  gorelenk
  218.  * Added PCH ncbi_pch.hpp
  219.  *
  220.  * Revision 1.7  2004/05/03 17:53:55  dicuccio
  221.  * Tweaked makefiles to support new gui_objutils library
  222.  *
  223.  * Revision 1.6  2004/04/16 14:44:17  dicuccio
  224.  * Pass appropriate ISelection interface to dynamic menus
  225.  *
  226.  * Revision 1.5  2004/04/07 13:02:00  dicuccio
  227.  * Changed view API - require CPluginMessage instead of CPluginArgSet in ctor.
  228.  * Changed published name of view from Hit Matrix to Dot Matrix
  229.  *
  230.  * Revision 1.4  2004/02/12 21:08:31  yazhuk
  231.  * Reorganized menu and added new commands
  232.  *
  233.  * Revision 1.3  2004/01/15 20:53:16  yazhuk
  234.  * Renamed m_Menu to m_MenuBar, added menu definition and menu setup code
  235.  *
  236.  * Revision 1.2  2003/12/22 19:33:15  dicuccio
  237.  * Lots of changes.  Changed to match new APIs in IView.  Added better handling of messages received from other views
  238.  *
  239.  * Revision 1.1  2003/12/05 20:06:05  yazhuk
  240.  * Initial revision
  241.  *
  242.   * ===========================================================================
  243.  */