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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: view.cpp,v $
  4.  * PRODUCTION Revision 1000.5  2004/06/01 20:44:47  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.26
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: view.cpp,v 1000.5 2004/06/01 20:44:47 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.  *    CView -- abstract base class for GBENCH views
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <gui/core/view.hpp>
  41. #include <gui/core/idocument.hpp>
  42. #include <gui/core/selection_buffer.hpp>
  43. #include <gui/print/print_dlg.hpp>
  44. #include <objmgr/util/sequence.hpp>
  45. BEGIN_NCBI_SCOPE
  46. USING_SCOPE(ncbi::objects);
  47. CView::CView()
  48.     : m_SelBuffer(new CSelectionBuffer()),
  49.       m_EventMask(fAllEvents),
  50.       m_VisibleRange(new CSeq_loc())
  51. {
  52. }
  53. CView::~CView(void)
  54. {
  55. }
  56. void CView::Show()
  57. {
  58.     if (m_Window.get()) {
  59.         m_Window->show();
  60.     }
  61. }
  62. void CView::Hide()
  63. {
  64.     if (m_Window.get()) {
  65.         m_Window->hide();
  66.     }
  67. }
  68. void CView::OnExit(void)
  69. {
  70.     if (m_Document) {
  71.         CRef<CView> view(this);
  72.         m_Document->DetachView(this);
  73.     }
  74. }
  75. void CView::OnPrint(void)
  76. {
  77.     CPrintDlg dlg;
  78.     if (dlg.ShowModal() == eCancel) {
  79.         return;
  80.     }
  81.     x_Print(dlg.GetOptions());
  82. }
  83. void CView::GetSelections(TConstScopedObjects& objs) const
  84. {
  85.     objs = GetSelBuffer().DecomposeToPairs();
  86. }
  87. void CView::SetSelections(const TConstScopedObjects& objs)
  88. {
  89.     /// FIXME: stub
  90. }
  91. void CView::x_Print(const CPrintOptions& opts)
  92. {
  93. }
  94. void CView::SetSize(int width, int height)
  95. {
  96.     if (m_Window.get()) {
  97.         m_Window->size(width, height);
  98.     }
  99. }
  100. void CView::GetSize(int& width, int& height) const
  101. {
  102.     width  = 0;
  103.     height = 0;
  104.     if (m_Window.get()) {
  105.         width  = m_Window->w();
  106.         height = m_Window->h();
  107.     }
  108. }
  109. void CView::SetPosition(int pos_x, int pos_y)
  110. {
  111.     if (m_Window.get()) {
  112.         m_Window->position(pos_x, pos_y);
  113.     }
  114. }
  115. void CView::GetPosition(int& pos_x, int& pos_y) const
  116. {
  117.     pos_x  = 0;
  118.     pos_y = 0;
  119.     if (m_Window.get()) {
  120.         pos_x = m_Window->x();
  121.         pos_y = m_Window->y();
  122.     }
  123. }
  124. void CView::Resize(int pos_x, int pos_y, int width, int height)
  125. {
  126.     if (m_Window.get()) {
  127.         m_Window->resize(pos_x, pos_y, width, height);
  128.     }
  129. }
  130. void CView::SetTitle(const string& title)
  131. {
  132.     m_TitleStr = title;
  133.     if (m_Window.get()) {
  134.         m_Window->label(m_TitleStr.c_str());
  135.     }
  136. }
  137. void CView::SetVisibleRange(const CSeq_loc& loc)
  138. {
  139.     m_VisibleRange.Reset(const_cast<CSeq_loc*>(&loc));
  140. //    Update(fVisibleRangeChanged);
  141. }
  142. const CSeq_loc& CView::GetVisibleRange(void) const
  143. {
  144.     return *m_VisibleRange;
  145. }
  146. void CView::x_SetDocument(const IDocument& doc)
  147. {
  148.     m_Document.Reset(const_cast<IDocument*> (&doc));
  149. }
  150. void CView::MessageEventHandler(TUpdateFlags flags, const void *user_data)
  151. {
  152.     switch (flags) {
  153.     case fSelectionChanged:
  154.         OnSelectionChanged(*reinterpret_cast<const CSelectionBuffer*>(user_data));
  155.         break;
  156.     case fDocumentChanged:
  157.         OnDocumentChanged();
  158.         break;
  159.     case fViewReleased:
  160.         OnViewReleased(*const_cast<IView*>(reinterpret_cast<const IView*>(user_data)));
  161.         break;
  162.     case fViewCreated:
  163.         OnViewCreated(*const_cast<IView*>(reinterpret_cast<const IView*>(user_data)));
  164.         break;
  165.     case fVisibleRangeChanged:
  166.         OnVisibleRangeChanged(*reinterpret_cast<const CSeq_loc*>(user_data));
  167.         break;
  168.     default:
  169.         LOG_POST(Warning << "unhandled message: " << flags);
  170.         break;
  171.     }
  172. }
  173. // message event triggers.  These functions start the messaging cascade.
  174. void CView::PostVisibleRangeChanged(const CSeq_loc& loc)
  175. {
  176.     GetDocument()->PostGroupMessage(this, fVisibleRangeChanged, &loc);
  177. }
  178. void CView::PostSelectionChanged(const CSelectionBuffer& buf)
  179. {
  180.     GetDocument()->PostGroupMessage(this, fSelectionChanged, &buf);
  181. }
  182. void CView::PostDocumentChanged(void)
  183. {
  184.     GetDocument()->PostGroupMessage(this, fDocumentChanged, NULL);
  185. }
  186. //
  187. // default message handlers
  188. //
  189. void CView::OnSelectionChanged(const CSelectionBuffer&)
  190. {
  191.     _TRACE("unhandled message: OnSelectionChanged()");
  192. }
  193. void CView::OnDocumentChanged(void)
  194. {
  195.     _TRACE("unhandled message: OnDocumentChanged()");
  196. }
  197. void CView::OnViewReleased(IView&)
  198. {
  199.     _TRACE("unhandled message: OnViewReleased()");
  200. }
  201. void CView::OnViewCreated(IView&)
  202. {
  203.     _TRACE("unhandled message: OnViewCreated()");
  204. }
  205. void CView::OnVisibleRangeChanged(const CSeq_loc&)
  206. {
  207.     _TRACE("unhandled message: OnVisibleRangeChanged()");
  208. }
  209. // dummy event handler
  210. void CView::OnAllEvents(CViewEvent::TEventObject evt)
  211. {
  212.     _TRACE("unhandled event: OnViewEvent()");
  213. }
  214. // Transmitter/reciever QI
  215. IEventTransmitter * CView::QueryInterfaceTransmitter(void)
  216. {
  217.     return dynamic_cast<IEventTransmitter*>(this);
  218. }
  219. IEventReceiver    * CView::QueryInterfaceReceiver(void)
  220. {
  221.     return dynamic_cast<IEventReceiver*>(this);
  222. }
  223. //
  224. // utilities
  225. //
  226. string CView::x_GetTitle(const CBioseq_Handle& handle) const
  227. {
  228.     const CSeq_id& best_id = sequence::GetId(handle, sequence::eGetId_Best);
  229.     string str("{");
  230.     str += NStr::IntToString(m_Document->GetDocID()) + "}: ";
  231.     str += GetTitle() + ": ";
  232.     best_id.GetLabel(&str);
  233.     str += ": ";
  234.     str += sequence::GetTitle(handle);
  235.     return str;
  236. }
  237. string CView::GetLabel() const
  238. {
  239.     return GetTitle();
  240. }
  241. const CMenuItem* CView::GetMenu() const
  242. {
  243.     return NULL;
  244. }
  245. END_NCBI_SCOPE
  246. /*
  247.  * ===========================================================================
  248.  * $Log: view.cpp,v $
  249.  * Revision 1000.5  2004/06/01 20:44:47  gouriano
  250.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.26
  251.  *
  252.  * Revision 1.26  2004/05/21 22:27:40  gorelenk
  253.  * Added PCH ncbi_pch.hpp
  254.  *
  255.  * Revision 1.25  2004/05/17 13:20:15  dicuccio
  256.  * Added default implementations of GetLabel() and GetMenu() from IWMClient
  257.  * interface
  258.  *
  259.  * Revision 1.24  2004/04/16 14:38:46  dicuccio
  260.  * Added standard selection marshalling interface
  261.  *
  262.  * Revision 1.23  2004/04/07 12:48:48  dicuccio
  263.  * Dropped unnnecessary conversion ctor.  Initialize m_pHost in base class
  264.  *
  265.  * Revision 1.22  2004/03/30 17:09:32  tereshko
  266.  * Added support for events broadcasting
  267.  *
  268.  * Revision 1.21  2004/03/05 17:29:59  dicuccio
  269.  * Use sequence::GetId() instead of CSeq_id::GetStringDescr()
  270.  *
  271.  * Revision 1.20  2004/01/20 18:14:31  dicuccio
  272.  * Added default ctor
  273.  *
  274.  * Revision 1.19  2003/12/22 19:19:24  dicuccio
  275.  * Clarified process of posting messages to other views.  Removed CView::Update().
  276.  *
  277.  * Revision 1.18  2003/11/19 20:40:41  friedman
  278.  * Added grouping views into group message pools
  279.  *
  280.  * Revision 1.17  2003/11/04 17:20:37  dicuccio
  281.  * Implemented window position/size functions
  282.  *
  283.  * Revision 1.16  2003/11/04 12:48:04  friedman
  284.  * Added event message handling and callback for the document all-view
  285.  * message pool.
  286.  *
  287.  * Revision 1.15  2003/10/16 15:49:22  dicuccio
  288.  * Added function to retrieve a formatted title for a view given a bioseq-handle
  289.  *
  290.  * Revision 1.14  2003/10/10 17:16:29  dicuccio
  291.  * Implemented OnExit() - detach view, return from call forces destruction
  292.  *
  293.  * Revision 1.13  2003/09/29 15:29:31  dicuccio
  294.  * CPrintDlg (CDialog) uses ShowModal(), not Show()
  295.  *
  296.  * Revision 1.12  2003/09/04 14:01:51  dicuccio
  297.  * Introduce IDocument and IView as abstract base classes for CDocument and CView
  298.  *
  299.  * Revision 1.11  2003/08/15 19:34:47  dicuccio
  300.  * Moved print code from gui/utils to gui/print
  301.  *
  302.  * Revision 1.10  2003/06/20 14:46:20  dicuccio
  303.  * Initial changes to implement print functionality
  304.  *
  305.  * Revision 1.9  2003/06/16 15:56:55  dicuccio
  306.  * Added hook for printing, popup of standard print dialog
  307.  *
  308.  * Revision 1.8  2003/04/24 16:35:01  dicuccio
  309.  * Added explicit document set function.  Removed requirement for hard-coded
  310.  * argument name
  311.  *
  312.  * Revision 1.7  2003/03/17 14:50:52  dicuccio
  313.  * Changed Show()/Hide() from pure virtual to virtual - provided default
  314.  * implementation
  315.  *
  316.  * Revision 1.6  2003/03/10 23:06:13  kuznets
  317.  * iterate -> ITERATE
  318.  *
  319.  * Revision 1.5  2003/03/03 15:19:10  dicuccio
  320.  * Added logic to handle slaved views
  321.  *
  322.  * Revision 1.4  2003/03/03 14:52:24  dicuccio
  323.  * Added visible range as a base class entity.  Changed initialization to take
  324.  * plugin arguments instead of IDocument
  325.  *
  326.  * Revision 1.3  2003/01/13 13:10:07  dicuccio
  327.  * Namespace clean-up.  Retired namespace gui -> converted all to namespace
  328.  * ncbi.  Moved all FLUID-generated code into namespace ncbi.
  329.  *
  330.  * Revision 1.2  2002/11/08 02:14:41  dicuccio
  331.  * Minor code clean-ups (reformat text, eliminate dead variables, favor NCBI
  332.  * macros)
  333.  *
  334.  * Revision 1.1  2002/11/06 17:46:19  dicuccio
  335.  * Initial revision
  336.  *
  337.  * ===========================================================================
  338.  */