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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: view.hpp,v $
  4.  * PRODUCTION Revision 1000.5  2004/06/01 19:47:05  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.29
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_CORE___VIEW__HPP
  10. #define GUI_CORE___VIEW__HPP
  11. /*  $Id: view.hpp,v 1000.5 2004/06/01 19:47:05 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software / database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software / database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Authors:  Mike DiCuccio
  37.  *
  38.  * File Description:
  39.  *    CView -- abstract base class for GBENCH views
  40.  */
  41. #include <gui/core/iview.hpp>
  42. #include <gui/objutils/iselection.hpp>
  43. #include <gui/utils/view_event.hpp>
  44. #include <util/ievent_receiver.hpp>
  45. #include <util/ievent_transmitter.hpp>
  46. #include <gui/plugin/PluginArgSet.hpp>
  47. #include <gui/print/print_options.hpp>
  48. #include <objmgr/bioseq_handle.hpp>
  49. #include <memory>
  50. BEGIN_NCBI_SCOPE
  51. class CSelectionBuffer;
  52. /////////////////////////////////////////////////////////////////////////////
  53. //  CView -- base class for all views
  54. //
  55. class NCBI_GUICORE_EXPORT CView : public IView,
  56.                                   public IEventTransmitter,
  57.                                   public IEventReceiver,
  58.                                   public ISelection
  59. {
  60.     friend class CDocWorkspace;
  61. public:
  62.     // default ctor
  63.     CView();
  64.     // virtual dtor
  65.     virtual ~CView(void);
  66.     // Show the current window
  67.     virtual void Show(void);
  68.     // Hide the current window
  69.     virtual void Hide(void);
  70.     // callback for exiting a given window
  71.     virtual void OnExit(void);
  72.     // Print the contents of the current window.  This is made virtual to allow
  73.     // overrides by derived classes.
  74.     virtual void OnPrint(void);
  75.     // set the size of the window for this view.
  76.     virtual void SetSize(int width, int height);
  77.     // get the size of the window for this view.
  78.     virtual void GetSize(int& width, int& height) const;
  79.     // set the position of the window for this view.
  80.     virtual void SetPosition(int pos_x, int pos_y);
  81.     // set the position of the window for this view.
  82.     virtual void GetPosition(int& pos_x, int& pos_y) const;
  83.     // resize this window.
  84.     virtual void Resize(int pos_x, int pos_y, int width, int height);
  85.     // Access the document associated with this view
  86.     IDocument*  GetDocument(void);
  87.     // set the view's title
  88.     void SetTitle(const string& title);
  89.     // Access the event mask.  The event mask is a bitmap of flags, each bit of
  90.     // which corresponds to a distinct event.  These events define the scope of
  91.     // communication between views and from document to view.
  92.     void         SetEventMask(TUpdateFlags flags);
  93.     TUpdateFlags GetEventMask(void) const;
  94.     // Access the selection buffer.  The selection buffer is a hierarchical
  95.     // data structure holding lists of items for a number of documents.
  96.     const CSelectionBuffer& GetSelBuffer(void) const;
  97.     CSelectionBuffer&       SetSelBuffer(void);
  98.     // ISelection interface requirements.
  99.     void GetSelections(TConstScopedObjects& objs) const;
  100.     void SetSelections(const TConstScopedObjects& objs);
  101.     // Access the visible range.  This is provided as a global mechanism to
  102.     // permit other views to maneuver the visible range of their sibling views.
  103.     // This is provided as a virtual function such that sibling views can
  104.     // choose to ignore this message.
  105.     virtual void SetVisibleRange(const objects::CSeq_loc& range);
  106.     // Access the current visible range
  107.     const objects::CSeq_loc& GetVisibleRange(void) const;
  108.     //
  109.     // IWMClient interface
  110.     //
  111.     string GetLabel() const;
  112.     const CMenuItem* GetMenu() const;
  113.     //
  114.     // messaging API
  115.     //
  116.     // Message even handler for inter-view messaging
  117.     void MessageEventHandler(TUpdateFlags flags, const void *user_data);
  118.     // message event triggers.  These functions start the messaging cascade.
  119.     void PostDocumentChanged(void);
  120.     void PostVisibleRangeChanged(const objects::CSeq_loc& loc);
  121.     void PostSelectionChanged(const CSelectionBuffer& buf);
  122.     // Message events callbacks
  123.     virtual void OnSelectionChanged(const CSelectionBuffer& sels);
  124.     virtual void OnDocumentChanged(void);
  125.     virtual void OnViewReleased(IView& view);
  126.     virtual void OnViewCreated(IView& view);
  127.     virtual void OnVisibleRangeChanged(const objects::CSeq_loc& loc);
  128.     // Default events handler - reports unhandled event   
  129.     void OnAllEvents(CViewEvent::TEventObject evt);
  130.     // Events map - all events to default handler
  131.     EVENT_MAP_RX_BEGIN_INT
  132.         EVENT_ACCEPT_ALL(OnAllEvents)
  133.     EVENT_MAP_RX_END
  134.     // IEventTransmitter
  135.     EVENT_MAP_TX_BEGIN
  136.         EVENT_FIRE_ALL()
  137.     EVENT_MAP_TX_END
  138.     // Transmitter/reciever QI for registering events with document
  139.     virtual IEventTransmitter * QueryInterfaceTransmitter(void);
  140.     virtual IEventReceiver    * QueryInterfaceReceiver(void);
  141. protected:
  142.     // The core chunk of the FLTK GUI that we represent: a child window for the
  143.     // genome workbench framework
  144.     auto_ptr<Fl_Window>    m_Window;
  145.     // Each view holds a CRef<> of a single document
  146.     CRef<IDocument>         m_Document;
  147.     // Each view manages its own selection buffer.
  148.     CRef<CSelectionBuffer>  m_SelBuffer;
  149.     // The bitmask of events this view has chosen to receive.
  150.     TUpdateFlags            m_EventMask;
  151.     // The current visible range
  152.     CRef<objects::CSeq_loc> m_VisibleRange;
  153.     // our title (FLTK stores only the pointer, not the contents)
  154.     string m_TitleStr;
  155.     // internal document set function (this hides a const cast)
  156.     void x_SetDocument(const IDocument& doc);
  157.     // internal overridable hook for printing
  158.     virtual void x_Print(const CPrintOptions& opts);
  159.     // create a title string for this view, given a bioseq-handle
  160.     string x_GetTitle(const objects::CBioseq_Handle& handle) const;
  161. private:
  162.     // Prohibit copying!
  163.     CView(const CView&);
  164.     CView& operator= (const CView&);
  165. };
  166. ////////////////////////////////////////////////////////////////////////
  167. /// Inline Methods
  168. ////////////////////////////////////////////////////////////////////////
  169. inline
  170. void CView::SetEventMask(TUpdateFlags flags)
  171. {
  172.     m_EventMask = flags;
  173. }
  174. inline
  175. TUpdateFlags CView::GetEventMask(void) const
  176. {
  177.     return m_EventMask;
  178. }
  179. inline
  180. const CSelectionBuffer& CView::GetSelBuffer(void) const
  181. {
  182.     return *m_SelBuffer;
  183. }
  184. inline
  185. CSelectionBuffer& CView::SetSelBuffer(void)
  186. {
  187.     return *m_SelBuffer;
  188. }
  189. inline
  190. IDocument* CView::GetDocument(void)
  191. {
  192.     return m_Document;
  193. }
  194. END_NCBI_SCOPE
  195. /*
  196.  * ===========================================================================
  197.  * $Log: view.hpp,v $
  198.  * Revision 1000.5  2004/06/01 19:47:05  gouriano
  199.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.29
  200.  *
  201.  * Revision 1.29  2004/05/20 12:23:26  dicuccio
  202.  * Removed include for child.hpp
  203.  *
  204.  * Revision 1.28  2004/05/17 13:18:51  dicuccio
  205.  * Removed old document workspace.  Inherit views from IWMClient to support new
  206.  * workspace integration.  Removed references to CChild.
  207.  *
  208.  * Revision 1.27  2004/05/03 12:42:17  dicuccio
  209.  * Split gui_utils into gui_utils and gui_objutils
  210.  *
  211.  * Revision 1.26  2004/04/16 14:31:57  dicuccio
  212.  * Inherit CView from ISelection.  Provide base class support for marshalling
  213.  * selections
  214.  *
  215.  * Revision 1.25  2004/04/07 12:37:35  dicuccio
  216.  * Dropped unnneeded conversion ctor
  217.  *
  218.  * Revision 1.24  2004/03/30 17:09:56  tereshko
  219.  * Added support for events broadcasting
  220.  *
  221.  * Revision 1.23  2004/01/20 18:14:21  dicuccio
  222.  * Added default ctor.  Removed dead code
  223.  *
  224.  * Revision 1.22  2003/12/22 19:12:11  dicuccio
  225.  * Modified mechanism for view-view messaging: provide more explicit function
  226.  * signatures; added helper functions to make posting messages easier.
  227.  *
  228.  * Revision 1.21  2003/11/06 19:59:29  dicuccio
  229.  * Removed USING_SCOPE(objects)
  230.  *
  231.  * Revision 1.20  2003/11/04 17:13:37  dicuccio
  232.  * Added APIs for querying GUI position/size
  233.  *
  234.  * Revision 1.19  2003/11/04 13:08:24  dicuccio
  235.  * Formatting changes
  236.  *
  237.  * Revision 1.18  2003/11/04 12:36:50  friedman
  238.  * Added event message handling and callback for the document message pool.
  239.  *
  240.  * Revision 1.17  2003/10/16 15:47:41  dicuccio
  241.  * Added standard interface for retrieving a view's title given a bioseq-handle
  242.  *
  243.  * Revision 1.16  2003/10/10 17:10:57  dicuccio
  244.  * Added callback for OnExit() - called at view release time
  245.  *
  246.  * Revision 1.15  2003/09/04 14:00:26  dicuccio
  247.  * Introduce IDocument and IView as abstract base classes.  Use IDocument instead
  248.  * of CDocument.
  249.  *
  250.  * Revision 1.14  2003/08/15 19:33:22  dicuccio
  251.  * Changed location of print code
  252.  *
  253.  * Revision 1.13  2003/06/25 16:59:41  dicuccio
  254.  * Changed CPluginHandle into a pointer-to-implementation (the previous
  255.  * implementation is now the pointer held).  Lots of #include file clean-ups.
  256.  *
  257.  * Revision 1.12  2003/06/20 14:42:18  dicuccio
  258.  * Added initial print capabilities
  259.  *
  260.  * Revision 1.11  2003/06/16 15:55:57  dicuccio
  261.  * Work-in-progress: everything compiles, still much reorganization to be done.
  262.  * Moved generic functionality out of opengl/print/ and into gui/utils (print
  263.  * options, print dialogs, etc.).  Removed interactive state from CGlCanvas.
  264.  * Added hook in CView for opening standard print dialog, and for generic print
  265.  * handling.
  266.  *
  267.  * Revision 1.10  2003/05/19 13:32:43  dicuccio
  268.  * Moved gui/core/plugin --> gui/plugin/
  269.  *
  270.  * Revision 1.9  2003/04/24 16:14:02  dicuccio
  271.  * Added new interface functions for retrieving / setting the document associated
  272.  * with a view
  273.  *
  274.  * Revision 1.8  2003/03/17 14:58:01  dicuccio
  275.  * Added member variable for the FLTK gui component (stored as auto_ptr<>).
  276.  * Changed Show()/Hide() from pure virtual to virtual; provided default
  277.  * implementation.
  278.  *
  279.  * Revision 1.7  2003/03/03 14:20:32  dicuccio
  280.  * Added visible range as a base class quantity
  281.  *
  282.  * Revision 1.6  2003/01/13 13:11:42  dicuccio
  283.  * Namespace clean-up.  Retired namespace gui -> converted to namespace ncbi.
  284.  * Moved all FLUID-generated code into namespace ncbi.
  285.  *
  286.  * Revision 1.5  2002/12/19 18:13:02  dicuccio
  287.  * Added export specifiers for Win32.
  288.  *
  289.  * Revision 1.4  2002/12/12 15:18:57  dicuccio
  290.  * Changed SetSelBuffer to non-const GetSelBuffer.  Added copious function
  291.  * description comments.
  292.  *
  293.  * Revision 1.3  2002/11/19 16:56:46  dicuccio
  294.  * Added non-const accessor to a view's selection buffer.
  295.  *
  296.  * Revision 1.2  2002/11/07 18:20:14  dicuccio
  297.  * Moved #ifdef to top of file.
  298.  *
  299.  * Revision 1.1  2002/11/05 19:42:54  dicuccio
  300.  * Initial revision
  301.  *
  302.  * ===========================================================================
  303.  */
  304. #endif  // GUI_CORE___VIEW__HPP