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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: doc_manager.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:46:44  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.25
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_CORE___DOC_MANAGER__HPP
  10. #define GUI_CORE___DOC_MANAGER__HPP
  11. /*  $Id: doc_manager.hpp,v 1000.2 2004/06/01 19:46:44 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.  *    Central document arbiter for GBENCH
  40.  */
  41. #include <corelib/ncbiobj.hpp>
  42. #include <gui/gui.hpp>
  43. #include <list>
  44. BEGIN_NCBI_SCOPE
  45. BEGIN_SCOPE(objects)
  46.     class CObjectManager;
  47.     class CScope;
  48.     class CSeq_id;
  49.     class CPluginMessage;
  50.     class CPluginMRUList;
  51. END_SCOPE(objects)
  52. class CDocMgrView;
  53. class IDocument;
  54. class CSelectionBuffer;
  55. class CSettings;
  56. class CSerialObject;
  57. class CEvent;
  58. //
  59. // class CDocManager is the central repository for all documents
  60. //
  61. // This class maintains all active records and controls the creation of any new
  62. // records.  This class holds the one and only instance of the object manager,
  63. // and mediates communication between document loaders and the object manager
  64. // itself.  In addition, this class is a clearing house for global
  65. // application-specific settings, provided that these settings do not directly
  66. // require the presence of a GUI: the settings may be colors, for example, but
  67. // not widgets.  class CDocManager supports a limited viewing context by
  68. // maintaining a list of specific document manager view classes that are bound
  69. // to it.  These view classes receive update notifications when the document
  70. // manager changes.
  71. //
  72. class NCBI_GUICORE_EXPORT CDocManager
  73. {
  74. public:
  75.     typedef list< CRef<IDocument> >     TDocList;
  76.     typedef list< CRef<CDocMgrView> >   TViewList;
  77.     // Explicitly force the document manager to shut everything down:
  78.     // destroy all views and documents, shutdown the underlying object manager
  79.     static void        ShutDown();
  80.     // Request a new document, referencing some sequence in a scope
  81.     // by a sequence ID.  This is used for things such as remote fetch
  82.     // or simple indexed retrieval.
  83.     static IDocument*  CreateDocument(objects::CScope& scope,
  84.                                       const objects::CSeq_id& id);
  85.     // Request a document wrapped around a substantial object.
  86.     // This object can be any CSerialObject-derived object, and represents
  87.     // a core chunk of information, such as a seq-entry or a seq-submit.
  88.     static IDocument*  CreateDocument(objects::CScope& scope,
  89.                                       const CSerialObject& obj);
  90.     // Release a document from management
  91.     static bool        ReleaseDocument(IDocument* doc);
  92.     // retrieve a document from its scope
  93.     static IDocument* GetDocumentFromScope(objects::CScope& scope);
  94.     static const IDocument* GetDocumentFromScope(const objects::CScope& scope);
  95.     // Attach a view to the document manager.
  96.     // NOTE: this is distinct from views managed by documents; these views
  97.     // receive notification on updates to the document manager only, and are
  98.     // not connected to any real document!
  99.     static void        AttachView(CDocMgrView* view);
  100.     // Update all views.
  101.     // Facilitates communication between the document manager and its views.
  102.     static void        UpdateAllViews(TUpdateFlags flags = fAllEvents);
  103.     // Notify all views
  104.     // Event broadcasting function
  105.     static void        NotifyAllViews(const CEvent * event);
  106.     // Get a list of all currently loaded documents
  107.     static TDocList&   GetDocuments(void);
  108.     // access the object manager
  109.     static objects::CObjectManager& GetObjectManager(void);
  110.     // access our selection buffer
  111.     static CSelectionBuffer& GetSelBuffer(void);
  112.     // access the global settings repository
  113.     static CSettings& GetSettings(void);
  114.     // Cache the plugin messgae for the Most Recent Used list
  115.     static void AddMRUEntry(objects::CPluginMessage& msg, string label = kEmptyStr);
  116.     static objects::CPluginMRUList& GetMRUCache(void);
  117. private:
  118.     // our one and only object manager
  119.     static CRef<objects::CObjectManager> sm_ObjMgr;
  120.     // a list of the documents we manage
  121.     static TDocList     sm_Documents;
  122.     // an index of scope -> document
  123.     typedef map< CRef<objects::CScope>, CRef<IDocument> > TScopeIndex;
  124.     static TScopeIndex sm_ScopeIdx;
  125.     // a list of the views attached to the document manager
  126.     // this list received information only when the document manager is updated
  127.     // these views are not connected to any document!
  128.     static TViewList    sm_Views;
  129.     // The document manager also maintains a global selection pool
  130.     static CRef<CSelectionBuffer> sm_SelBuffer;
  131.     // We maintain one clearing-house for all application-wide settings
  132.     static CRef<CSettings> sm_Settings;
  133.     // force creation of the data loader structures
  134.     static void     x_CreateObjectManager(void);
  135.     // Most Recently Used plugin message cache
  136.     static CRef<objects::CPluginMRUList> sm_PluginMessageCache;
  137.     // all constructing / copying of doc managers is forbidden
  138.     CDocManager();
  139.     ~CDocManager();
  140.     CDocManager(const CDocManager&);
  141.     CDocManager& operator= (const CDocManager&);
  142. };
  143. END_NCBI_SCOPE
  144. #endif  // GUI_CORE___DOC_MANAGER__HPP
  145. /*
  146.  * ===========================================================================
  147.  * $Log: doc_manager.hpp,v $
  148.  * Revision 1000.2  2004/06/01 19:46:44  gouriano
  149.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.25
  150.  *
  151.  * Revision 1.25  2004/06/01 18:06:39  dicuccio
  152.  * FOrmatting changes.  Renamed GetPluginMessageCache() -> GetMRUCache()
  153.  *
  154.  * Revision 1.24  2004/05/18 11:31:17  friedman
  155.  * Handle adding recently loaded documents into the MRU list.
  156.  *
  157.  * Revision 1.23  2004/04/21 17:12:58  dicuccio
  158.  * Added const version of GetDocumentFromScope()
  159.  *
  160.  * Revision 1.22  2004/04/07 12:33:21  dicuccio
  161.  * Added GetDocumentFromScope(), scope -> document index
  162.  *
  163.  * Revision 1.21  2004/03/30 17:08:44  tereshko
  164.  * Added NotifyAllViews function
  165.  *
  166.  * Revision 1.20  2004/03/11 17:14:57  dicuccio
  167.  * Changed gui/types to gui/gui
  168.  *
  169.  * Revision 1.19  2003/09/29 15:20:06  dicuccio
  170.  * Deprecated gui/scope.hpp.  Merged gui/core/types.hpp into gui/types.hpp
  171.  *
  172.  * Revision 1.18  2003/09/16 14:03:43  dicuccio
  173.  * Removed API for creating documents based on seq-annots - replaced with generic
  174.  * API to create documents based on CSerialObject
  175.  *
  176.  * Revision 1.17  2003/09/04 14:00:26  dicuccio
  177.  * Introduce IDocument and IView as abstract base classes.  Use IDocument instead
  178.  * of CDocument.
  179.  *
  180.  * Revision 1.16  2003/08/22 15:54:48  dicuccio
  181.  * General clean-up:  Removed unneeded export specifiers from templates; removed
  182.  * 'USING_SCOPE(objects)'
  183.  *
  184.  * Revision 1.15  2003/06/29 13:10:56  dicuccio
  185.  * Use DEFINE_STATIC_MUTEX() instead of static member variable
  186.  *
  187.  * Revision 1.14  2003/06/25 16:59:41  dicuccio
  188.  * Changed CPluginHandle into a pointer-to-implementation (the previous
  189.  * implementation is now the pointer held).  Lots of #include file clean-ups.
  190.  *
  191.  * Revision 1.13  2003/06/02 16:01:29  dicuccio
  192.  * Rearranged include/objects/ subtree.  This includes the following shifts:
  193.  *     - include/objects/alnmgr --> include/objtools/alnmgr
  194.  *     - include/objects/cddalignview --> include/objtools/cddalignview
  195.  *     - include/objects/flat --> include/objtools/flat
  196.  *     - include/objects/objmgr/ --> include/objmgr/
  197.  *     - include/objects/util/ --> include/objmgr/util/
  198.  *     - include/objects/validator --> include/objtools/validator
  199.  *
  200.  * Revision 1.12  2003/05/08 16:17:39  dicuccio
  201.  * Changed CFastMutex -> CMutex (locks must be recursive-safe)
  202.  *
  203.  * Revision 1.11  2003/04/30 13:51:50  dicuccio
  204.  * Made access of CDocmanager internals thread safe
  205.  *
  206.  * Revision 1.10  2003/04/24 16:10:43  dicuccio
  207.  * Added new interface functions for creating documents from a number of
  208.  * data-model types
  209.  *
  210.  * Revision 1.9  2003/01/15 20:54:46  dicuccio
  211.  * Corrected docoumentation.  Added CSettings class to hold global app-wide
  212.  * settings (colors, etc.)
  213.  *
  214.  * Revision 1.8  2003/01/13 13:11:41  dicuccio
  215.  * Namespace clean-up.  Retired namespace gui -> converted to namespace ncbi.
  216.  * Moved all FLUID-generated code into namespace ncbi.
  217.  *
  218.  * Revision 1.7  2002/12/26 14:19:55  dicuccio
  219.  * Added Win32 export specifiers.
  220.  *
  221.  * Revision 1.6  2002/12/19 18:13:02  dicuccio
  222.  * Added export specifiers for Win32.
  223.  *
  224.  * Revision 1.5  2002/12/12 15:17:30  dicuccio
  225.  * Added a selection buffer specific to the document manager - provides global
  226.  * selections
  227.  *
  228.  * Revision 1.4  2002/11/29 15:55:17  dicuccio
  229.  * Added somewhat obtuse work-around for MSVC's handling of namespaces (the
  230.  * nested namespace ncbi::objects presents a lot of difficulty for MSVC's
  231.  * compiler)
  232.  *
  233.  * Revision 1.3  2002/11/25 19:26:07  dicuccio
  234.  * Reverted singleton interface in favor of a pure static interface (more in line
  235.  * with the remainder of the framework).
  236.  *
  237.  * Revision 1.2  2002/11/07 18:20:12  dicuccio
  238.  * Moved #ifdef to top of file.
  239.  *
  240.  * Revision 1.1  2002/11/04 21:09:05  dicuccio
  241.  * Initial revision
  242.  *
  243.  * ===========================================================================
  244.  */