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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: plugin_handle.hpp,v $
  4.  * PRODUCTION Revision 1000.5  2004/06/01 19:46:58  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.19
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_CORE___PLUGIN_HANDLE__HPP
  10. #define GUI_CORE___PLUGIN_HANDLE__HPP
  11. /*  $Id: plugin_handle.hpp,v 1000.5 2004/06/01 19:46:58 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.  *    CPluginHandle -- application-side wrapper for a CPluginFactoryBase that
  40.  *                     supports delayed instantiation of a plugin
  41.  */
  42. #include <corelib/ncbiobj.hpp>
  43. #include <gui/plugin/AlgoCommand.hpp>
  44. #include <gui/plugin/DataCommand.hpp>
  45. #include <gui/plugin/ViewCommand.hpp>
  46. #include <gui/plugin/PluginCommandSet.hpp>
  47. BEGIN_NCBI_SCOPE
  48. // predeclarations to avoid some includes and dependencies
  49. // we include predeclarations in ncbi::objects::
  50. BEGIN_SCOPE(objects)
  51.     class CPluginRequest;
  52.     class CPluginReply;
  53.     class CPluginMessage;
  54.     class CPluginInfo;
  55.     class CPluginLibInfo;
  56. END_SCOPE(objects)
  57. class CPluginHandle_Impl;
  58. //
  59. // class CPluginHandle hides the details of implementing load-on-demand.
  60. //
  61. class NCBI_GUICORE_EXPORT CPluginHandle
  62. {
  63.     friend class CPluginHandle_Impl;
  64. public:
  65.     // default ctor
  66.     CPluginHandle();
  67.     CPluginHandle(const CPluginHandle& handle);
  68.     CPluginHandle& operator=(const CPluginHandle& handle);
  69.     ~CPluginHandle();
  70.     // retrieve the command type this plugin supports
  71.     objects::CPluginCommandSet::E_Choice GetCommand(void) const;
  72.     // determine if a given command sub-type is supported by this plugin
  73.     bool HasCommandSubtype(objects::EAlgoCommand) const;
  74.     bool HasCommandSubtype(objects::EDataCommand) const;
  75.     bool HasCommandSubtype(objects::EViewCommand) const;
  76.     // determine if this plugin has been loaded yet
  77.     bool    IsLoaded(void) const;
  78.     // retrieve the enabled flag
  79.     bool    IsEnabled(void) const;
  80.     // fill in a default set of arguments for the specified command
  81.     bool FillDefaults(objects::EAlgoCommand cmd,
  82.                       objects::CPluginCommand& args) const;
  83.     // fill in a default set of arguments for the specified data command
  84.     bool FillDefaults(objects::EDataCommand cmd,
  85.                       objects::CPluginCommand& args) const;
  86.     // fill in a default set of arguments for the specified view command
  87.     bool FillDefaults(objects::EViewCommand cmd,
  88.                       objects::CPluginCommand& args) const;
  89.     // return a properly formatted CPluginMessage object to invoke this
  90.     // plugin
  91.     CRef<objects::CPluginMessage> CreateMessage(objects::EAlgoCommand cmd);
  92.     CRef<objects::CPluginMessage> CreateMessage(objects::EDataCommand cmd);
  93.     CRef<objects::CPluginMessage> CreateMessage(objects::EViewCommand cmd);
  94.     // execute a given command
  95.     void Execute(objects::CPluginMessage& msg);
  96.     // finalize the arguments
  97.     void FinalizeArgs(objects::CPluginMessage& msg);
  98.     // get the plugin info
  99.     const objects::CPluginInfo& GetInfo(void) const;
  100.     // get the plugin libinfo
  101.     const objects::CPluginLibInfo& GetLibInfo(void) const;
  102.     // get the name of the class this plugin exports for a given command
  103.     const string& GetClassName(void) const;
  104.     // retrieve the help file for a given command.  This can either be a file
  105.     // on disk or the help itself.
  106.     const string GetHelpFile (void) const;
  107.     // retrieve the name of the library this plugin lives in
  108.     const string& GetLibrary  (void) const;
  109.     // retrieve the menu item for this plugin
  110.     const string& GetMenuItem (void) const;
  111.     // retrieve the mouse-over tooltip for this menu item
  112.     const string& GetToolTip  (void) const;
  113.     // retrieve the version information for this plugin
  114.     int           GetVerMajor    (void) const;
  115.     int           GetVerMinor    (void) const;
  116.     int           GetVerRevision (void) const;
  117.     const string& GetVerBuildDate(void) const;
  118.     // determine if a given plugin handle sorts to less than the current handle
  119.     bool LessThan(const CPluginHandle& other) const;
  120.     // operator bool() for determining validity
  121.     operator bool(void) const;
  122. private:
  123.     // we maintain a pointer to our implementation
  124.     CRef<CPluginHandle_Impl> m_Impl;
  125.     // explicit private ctor for creating handles from implementations
  126.     explicit CPluginHandle(CPluginHandle_Impl& impl);
  127.     // private handler for thrown exceptions
  128.     void x_ThrowInvalidHandle() const;
  129. };
  130. // comparison operators for plugin handles
  131. NCBI_XGBPLUGIN_EXPORT
  132. bool operator< (const CPluginHandle& h1, const CPluginHandle& h2);
  133. NCBI_XGBPLUGIN_EXPORT
  134. bool operator== (const CPluginHandle& h1, const CPluginHandle& h2);
  135. NCBI_XGBPLUGIN_EXPORT
  136. bool operator!= (const CPluginHandle& h1, const CPluginHandle& h2);
  137. inline
  138. CPluginHandle::operator bool(void) const
  139. {
  140.     return m_Impl ? true : false;
  141. }
  142. END_NCBI_SCOPE
  143. #endif  // GUI_CORE___PLUGIN_HANDLE__HPP
  144. /*
  145.  * ===========================================================================
  146.  * $Log: plugin_handle.hpp,v $
  147.  * Revision 1000.5  2004/06/01 19:46:58  gouriano
  148.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.19
  149.  *
  150.  * Revision 1.19  2004/05/25 17:07:49  dicuccio
  151.  * Added CreateMessage() API - creates a fully-formed plugin message for a given
  152.  * plugin call
  153.  *
  154.  * Revision 1.18  2004/02/12 23:03:42  mjohnson
  155.  * Added documentation lookup. Help buttons should all be enabled,
  156.  * and will launch browser to wiki when pressed.
  157.  *
  158.  * Revision 1.17  2004/01/15 22:50:18  jcherry
  159.  * Added FinalizeArgs() for plugins
  160.  *
  161.  * Revision 1.16  2003/11/26 17:04:33  dicuccio
  162.  * Added standard function to handle all exception throwing
  163.  *
  164.  * Revision 1.15  2003/11/06 19:54:01  dicuccio
  165.  * Added comments.  Removed dead APIs
  166.  *
  167.  * Revision 1.14  2003/11/04 17:12:08  dicuccio
  168.  * Dropped const requirement for CPluginMessage
  169.  *
  170.  * Revision 1.13  2003/10/23 16:12:15  dicuccio
  171.  * Exposed the CPluginLibInfo object behind the handle
  172.  *
  173.  * Revision 1.12  2003/08/22 15:54:48  dicuccio
  174.  * General clean-up:  Removed unneeded export specifiers from templates; removed
  175.  * 'USING_SCOPE(objects)'
  176.  *
  177.  * Revision 1.11  2003/08/05 16:58:39  dicuccio
  178.  * Changed calling conventions for plugin message queue - pass by reference, not
  179.  * CConstRef<>
  180.  *
  181.  * Revision 1.10  2003/07/14 10:58:05  shomrat
  182.  * Plugin messageing system related changes
  183.  *
  184.  * Revision 1.9  2003/06/27 14:37:04  shomrat
  185.  * Added comparison operators == and !=
  186.  *
  187.  * Revision 1.8  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.7  2003/06/20 14:44:36  dicuccio
  192.  * Revamped handling of plugin registration.  All plugin factories now derive
  193.  * from CPluginFactoryBase; CPluginFactory is a template.  There is a new
  194.  * requirement for derived plugin handlers of all types (each must implement a
  195.  * static function of the form 'static void GetInfo(CPluginInfo&)')
  196.  *
  197.  * Revision 1.6  2003/05/19 13:32:43  dicuccio
  198.  * Moved gui/core/plugin --> gui/plugin/
  199.  *
  200.  * Revision 1.5  2003/03/25 14:20:47  dicuccio
  201.  * Changed export specifier from XGBPLUGIN to GUICORE
  202.  *
  203.  * Revision 1.4  2003/02/28 15:05:13  dicuccio
  204.  * Added a flag for querying the 'enabled' status of a plugin
  205.  *
  206.  * Revision 1.3  2003/02/24 13:00:17  dicuccio
  207.  * Renamed classes in plugin spec:
  208.  *     CArgSeg --> CPluginArgSet
  209.  *     CArgument --> CPluginArg
  210.  *     CPluginArgs --> CPluginCommand
  211.  *     CPluginCommands --> CPluginCommandSet
  212.  *
  213.  * Revision 1.2  2003/02/21 16:44:13  dicuccio
  214.  * Added Win32 export specifiers for new plugin library.  Fixed compilation
  215.  * issues for Win32.
  216.  *
  217.  * Revision 1.1  2003/02/20 19:44:06  dicuccio
  218.  * Created new plugin architecture, mediated via an ASN.1 spec.  Moved GBENCH
  219.  * framework over to use new plugin architecture.
  220.  *
  221.  * ===========================================================================
  222.  */