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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: document.hpp,v $
  4.  * PRODUCTION Revision 1000.5  2004/06/01 19:46:46  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.39
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_CORE___DOCUMENT__HPP
  10. #define GUI_CORE___DOCUMENT__HPP
  11. /*  $Id: document.hpp,v 1000.5 2004/06/01 19:46:46 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.  *    CDocument -- the basic data unit for GBENCH
  40.  */
  41. #include <corelib/ncbimtx.hpp>
  42. #include <gui/core/idocument.hpp>
  43. #include <gui/core/iview.hpp>
  44. #include <gui/utils/msg_pool.hpp>
  45. #include <gui/utils/view_event.hpp>
  46. #include <util/ievent_receiver.hpp>
  47. #include <util/ievent_transmitter.hpp>
  48. #include <map>
  49. BEGIN_NCBI_SCOPE
  50. class CObjectOStream;
  51. class CDocWorkspace;
  52. class IView;
  53. class NCBI_GUICORE_EXPORT CDocument : public IDocument,
  54.                                       public IEventTransmitter,
  55.                                       public IEventReceiver
  56. {
  57.     friend class CDocManager;
  58. public:
  59.     CDocument();
  60.     virtual ~CDocument(void);
  61.     // Get a description of our contents.
  62.     // This is suitable for display in a GUI component such as a list view.
  63.     const string& GetTitle     (void) const;
  64.     const string& GetShortTitle(void) const;
  65.     // Retrieve the unique ID associated with this document
  66.     size_t GetDocID(void) const;
  67.     // Attach a view to the current document
  68.     virtual void AttachView(IView* view, const string& pool_name = "");
  69.     // Detach a view to the current document
  70.     virtual void DetachView(IView* view);
  71.     // Retrieve the existing views for this class
  72.     const TViews& GetViews(void) const;
  73.     TViews&       SetViews(void);
  74.     // Clear this document.  This is called at application shut-down
  75.     // to make sure all data is properly destroyed.
  76.     virtual void Clear(void);
  77.     // Hide/Show the workspace associated with this document
  78.     void ShowWorkspace(void);
  79.     void HideWorkspace(void);
  80.     // Add an annotation to this document.  This will throw an exception if the
  81.     // action is unsupported.
  82.     void AttachAnnot(objects::CSeq_annot& annot);
  83.     // serialization: write our contents to a stream
  84.     // this is pure virtual to allow derived document types to determine what
  85.     // serialization means for their data
  86.     virtual void Write(CObjectOStream& os) const = 0;
  87.     // access the scope associated with this document
  88.     objects::CScope& GetScope(void) const;
  89.     void             SetScope(objects::CScope& scope);
  90.     // Force all views to update themselves relative to this document.
  91.     // This is equivalent to calling PostDocumentChanged()
  92.     void UpdateAllViews(void);
  93.     // message event triggers.  These functions start the messaging cascade.
  94.     void PostDocumentChanged(const string& msg_pool = kEmptyStr);
  95.     void PostVisibleRangeChanged(const objects::CSeq_loc& loc,
  96.                                  const string& msg_pool = kEmptyStr);
  97.     void PostSelectionChanged(const CSelectionBuffer& buf,
  98.                               const string& msg_pool = kEmptyStr);
  99.     void PostViewCreated(IView& view);
  100.     void PostViewReleased(IView& view);
  101.     // Send event to a views group message pool
  102.     void PostGroupMessage(IView* view, TUpdateFlags flags, 
  103.                           const void* user_data);
  104.      // Transmitter/reciever QI for registering events with document
  105.     virtual IEventTransmitter * QueryInterfaceTransmitter(void);
  106.     virtual IEventReceiver    * QueryInterfaceReceiver(void);
  107. protected:
  108.     // the master scope for this record
  109.     mutable CRef<objects::CScope> m_Scope;
  110.     // the workspace (= container for all views)
  111.     //auto_ptr<CDocWorkspace> m_Workspace;
  112.     // Views attached to this document
  113.     TViews m_Views;
  114.     // positioning information for views
  115.     int m_LastX;
  116.     int m_LastY;
  117.     // titles for this document, one brief the other longer
  118.     string m_Title;
  119.     string m_ShortTitle;
  120.     // mutex for guarding access to internals
  121.     CMutex m_Mutex;
  122. private:
  123.     // document ID - private; derived classes cannot alter
  124.     size_t m_DocId;
  125.     // Message Pool 
  126.     typedef CMsgPool<IView>     TViewMsgPool;
  127.     typedef CMsgPoolMgr<IView>  TViewMsgPoolMgr;
  128.     // the pool manager for this document
  129.     auto_ptr<TViewMsgPoolMgr> m_MsgPoolMgr;
  130.     // the name of the pool containing all possible views
  131.     string m_AllViewsName;
  132.     // the actual pool containing all views
  133.     CRef<TViewMsgPool> m_AllViewsPool;
  134.     // flag: are we currently processing a message in the pool?
  135.     bool m_MsgPosted;
  136.     // map view to its group message pool
  137.     typedef map<IView*, CRef<TViewMsgPool> > TViewGroupPools;
  138.     TViewGroupPools m_ViewGroupPools;
  139.     // internal function to retrieve a single message pool.  This may
  140.     // return NULL if no such view is found.
  141.     TViewMsgPool* x_GetMessagePool(const string& name,
  142.                                    bool create_if_not_found = false);
  143.     // internal function to wrap creation of the all views pool
  144.     TViewMsgPool& x_GetAllViewsPool();
  145.     // internal message posting function
  146.     void x_PostMessage(TViewMsgPool* pool, TUpdateFlags event,
  147.                        const void* data);
  148.     // Prohibit copying!
  149.     CDocument(const CDocument&);
  150.     CDocument& operator= (const CDocument&);
  151.     // IEventTransmitter
  152.     virtual void SetHost(IEventTransmitter * host);
  153.     virtual void FireEvent(const CEvent * evt);
  154.     // IEventReceiver
  155.     virtual void OnEvent(const CEvent * evt);
  156. };
  157. inline
  158. size_t CDocument::GetDocID(void) const
  159. {
  160.     return m_DocId;
  161. }
  162. // Get a description of our contents.
  163. // This is suitable for display in a GUI component such as a list view.
  164. inline
  165. const string& CDocument::GetTitle(void) const
  166. {
  167.     return m_Title;
  168. }
  169. inline
  170. const string& CDocument::GetShortTitle(void) const
  171. {
  172.     return m_ShortTitle;
  173. }
  174. inline
  175. objects::CScope& CDocument::GetScope(void) const
  176. {
  177.     return *m_Scope;
  178. }
  179. // Retrieve the existing views for this class
  180. inline
  181. const IDocument::TViews& CDocument::GetViews(void) const
  182. {
  183.     return m_Views;
  184. }
  185. inline
  186. IDocument::TViews& CDocument::SetViews(void)
  187. {
  188.     return m_Views;
  189. }
  190. END_NCBI_SCOPE
  191. /*
  192.  * ===========================================================================
  193.  * $Log: document.hpp,v $
  194.  * Revision 1000.5  2004/06/01 19:46:46  gouriano
  195.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.39
  196.  *
  197.  * Revision 1.39  2004/05/17 13:18:50  dicuccio
  198.  * Removed old document workspace.  Inherit views from IWMClient to support new
  199.  * workspace integration.  Removed references to CChild.
  200.  *
  201.  * Revision 1.38  2004/03/30 17:09:56  tereshko
  202.  * Added support for events broadcasting
  203.  *
  204.  * Revision 1.37  2003/12/31 20:31:02  dicuccio
  205.  * Added internal functions to wrap handling of message pools
  206.  *
  207.  * Revision 1.36  2003/12/22 19:12:10  dicuccio
  208.  * Modified mechanism for view-view messaging: provide more explicit function
  209.  * signatures; added helper functions to make posting messages easier.
  210.  *
  211.  * Revision 1.35  2003/11/19 20:41:06  friedman
  212.  * Added grouping views into group message pools
  213.  *
  214.  * Revision 1.33  2003/11/06 19:51:40  dicuccio
  215.  * Changed API for ATtachView() to take an optional message pool name
  216.  *
  217.  * Revision 1.32  2003/11/04 17:10:22  dicuccio
  218.  * Added variables to hold positions of most recent views
  219.  *
  220.  * Revision 1.31  2003/11/04 13:08:15  dicuccio
  221.  * Changed storage of message pool to CRef<> instead of C++ reference
  222.  *
  223.  * Revision 1.30  2003/11/04 12:29:50  friedman
  224.  * Added all view message pool to be invoked fom UpdateAllViews. Replaces
  225.  * iterating through the all the views and calling Update.
  226.  *
  227.  * Revision 1.29  2003/10/10 17:10:30  dicuccio
  228.  * Added interface functions to detach a view from a document
  229.  *
  230.  * Revision 1.28  2003/09/04 14:00:26  dicuccio
  231.  * Introduce IDocument and IView as abstract base classes.  Use IDocument instead
  232.  * of CDocument.
  233.  *
  234.  * Revision 1.27  2003/08/22 15:54:48  dicuccio
  235.  * General clean-up:  Removed unneeded export specifiers from templates; removed
  236.  * 'USING_SCOPE(objects)'
  237.  *
  238.  * Revision 1.26  2003/07/31 16:40:58  dicuccio
  239.  * Added document ID
  240.  *
  241.  * Revision 1.25  2003/06/25 16:59:41  dicuccio
  242.  * Changed CPluginHandle into a pointer-to-implementation (the previous
  243.  * implementation is now the pointer held).  Lots of #include file clean-ups.
  244.  *
  245.  * Revision 1.24  2003/06/17 19:40:16  dicuccio
  246.  * Added AttachAnnot()
  247.  *
  248.  * Revision 1.23  2003/06/02 16:01:29  dicuccio
  249.  * Rearranged include/objects/ subtree.  This includes the following shifts:
  250.  *     - include/objects/alnmgr --> include/objtools/alnmgr
  251.  *     - include/objects/cddalignview --> include/objtools/cddalignview
  252.  *     - include/objects/flat --> include/objtools/flat
  253.  *     - include/objects/objmgr/ --> include/objmgr/
  254.  *     - include/objects/util/ --> include/objmgr/util/
  255.  *     - include/objects/validator --> include/objtools/validator
  256.  *
  257.  * Revision 1.22  2003/05/08 16:17:39  dicuccio
  258.  * Changed CFastMutex -> CMutex (locks must be recursive-safe)
  259.  *
  260.  * Revision 1.21  2003/05/05 12:38:51  dicuccio
  261.  * Added mutex for guarding access to CDocument's data members
  262.  *
  263.  * Revision 1.20  2003/04/29 14:28:44  dicuccio
  264.  * Removed last vestiges of old typing system
  265.  *
  266.  * Revision 1.19  2003/04/24 16:11:49  dicuccio
  267.  * Large revision.  Removed old notions of document == bioseq-handle; instituted
  268.  * new abstract base class in which a document holds a scope
  269.  *
  270.  * Revision 1.18  2003/04/10 19:49:06  dicuccio
  271.  * Made text description a member variable
  272.  *
  273.  * Revision 1.17  2003/03/31 13:50:03  dicuccio
  274.  * Added general mechanism for determination of feature subtypes - permits
  275.  * exploration of different modes of feature resolution
  276.  *
  277.  * Revision 1.16  2003/03/17 14:56:54  dicuccio
  278.  * Removed dependency on view.hpp.  Added member variable for workspace, one per
  279.  * document.  Added Show()/Hide() functions for workspace.
  280.  *
  281.  * Revision 1.15  2003/03/03 15:35:10  dicuccio
  282.  * Added view slaved flag
  283.  *
  284.  * Revision 1.14  2003/02/20 19:44:06  dicuccio
  285.  * Created new plugin architecture, mediated via an ASN.1 spec.  Moved GBENCH
  286.  * framework over to use new plugin architecture.
  287.  *
  288.  * Revision 1.13  2003/02/05 19:35:38  dicuccio
  289.  * Added member variable for the scope of a bioseq handle.  Removed user-level
  290.  * annotations (unused and unnecessary).
  291.  *
  292.  * Revision 1.12  2003/01/13 13:11:41  dicuccio
  293.  * Namespace clean-up.  Retired namespace gui -> converted to namespace ncbi.
  294.  * Moved all FLUID-generated code into namespace ncbi.
  295.  *
  296.  * Revision 1.11  2003/01/08 15:34:16  dicuccio
  297.  * Added missing #includes
  298.  *
  299.  * Revision 1.10  2003/01/08 14:41:06  dicuccio
  300.  * Revamped type resolution - each record is now bound to a list of its types so
  301.  * that records can be typed based on sub-components.
  302.  *
  303.  * Revision 1.9  2002/12/20 19:09:03  dicuccio
  304.  * Changed SetViews() -> GetViews()
  305.  *
  306.  * Revision 1.8  2002/12/19 18:13:02  dicuccio
  307.  * Added export specifiers for Win32.
  308.  *
  309.  * Revision 1.7  2002/12/09 20:38:29  dicuccio
  310.  * Added user-level annotations.  These annotations are not strictly part of the
  311.  * record, but may be added to the record as desired.
  312.  *
  313.  * Revision 1.6  2002/11/29 15:55:17  dicuccio
  314.  * Added somewhat obtuse work-around for MSVC's handling of namespaces (the
  315.  * nested namespace ncbi::objects presents a lot of difficulty for MSVC's
  316.  * compiler)
  317.  *
  318.  * Revision 1.5  2002/11/25 19:25:34  dicuccio
  319.  * Added function to explicitly set the bioseq-handle - used by data loader
  320.  * plugins.  Added default flags to UpdateAllViews(): update all events by
  321.  * default.
  322.  *
  323.  * Revision 1.4  2002/11/09 22:56:39  dicuccio
  324.  * Provide public access to non-const view list and view attachment.
  325.  *
  326.  * Revision 1.3  2002/11/07 18:20:13  dicuccio
  327.  * Moved #ifdef to top of file.
  328.  *
  329.  * Revision 1.2  2002/11/05 19:45:47  dicuccio
  330.  * Promote CViewUtils to be a friend of CDocument
  331.  *
  332.  * Revision 1.1  2002/11/04 21:09:06  dicuccio
  333.  * Initial revision
  334.  *
  335.  * ===========================================================================
  336.  */
  337. #endif  // GUI_CORE___DOCUMENT__HPP