plugin_handle_impl.hpp
来自「ncbi源码」· HPP 代码 · 共 264 行
HPP
264 行
/* * =========================================================================== * PRODUCTION $Log: plugin_handle_impl.hpp,v $ * PRODUCTION Revision 1000.4 2004/06/01 20:44:28 gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12 * PRODUCTION * =========================================================================== */#ifndef GUI_CORE___PLUGIN_HANDLE_IMPL__HPP#define GUI_CORE___PLUGIN_HANDLE_IMPL__HPP/* $Id: plugin_handle_impl.hpp,v 1000.4 2004/06/01 20:44:28 gouriano Exp $ * =========================================================================== * * PUBLIC DOMAIN NOTICE * National Center for Biotechnology Information * * This software/database is a "United States Government Work" under the * terms of the United States Copyright Act. It was written as part of * the author's official duties as a United States Government employee and * thus cannot be copyrighted. This software/database is freely available * to the public for use. The National Library of Medicine and the U.S. * Government have not placed any restriction on its use or reproduction. * * Although all reasonable efforts have been taken to ensure the accuracy * and reliability of the software and data, the NLM and the U.S. * Government do not and cannot warrant the performance or results that * may be obtained by using this software or data. The NLM and the U.S. * Government disclaim all warranties, express or implied, including * warranties of performance, merchantability or fitness for any particular * purpose. * * Please cite the author in any work or product based on this material. * * =========================================================================== * * Authors: Mike DiCuccio * * File Description: * */#include <gui/core/plugin_handle.hpp>#include <gui/plugin/PluginInfo.hpp>#include <gui/plugin/PluginLibInfo.hpp>#include <gui/plugin/PluginArgSet.hpp>BEGIN_NCBI_SCOPEUSING_SCOPE(objects);class CPluginFactoryBase;class CPluginBase;//// class CPluginHandle_Impl hides the details of implementing load-on-demand.//class CPluginHandle_Impl : public CObject{ friend class CPluginRegistry;public: CPluginHandle_Impl(const CPluginLibInfo& info); virtual ~CPluginHandle_Impl(); // retrieve a plugin handle representing this implementation CPluginHandle GetHandle(void) const; // retrieve the command type this plugin supports CPluginCommandSet::E_Choice GetCommand(void) const; // determine if a given command sub-type is supported by this plugin bool HasCommandSubtype(EAlgoCommand) const; bool HasCommandSubtype(EDataCommand) const; bool HasCommandSubtype(EViewCommand) const; // determine if this plugin has been loaded yet bool IsLoaded(void) const; // retrieve the enabled flag bool IsEnabled(void) const; // fill in a default set of arguments for the specified algorithm command bool FillDefaults(EAlgoCommand cmd, CPluginCommand& args) const; // fill in a default set of arguments for the specified data command bool FillDefaults(EDataCommand cmd, CPluginCommand& args) const; // fill in a default set of arguments for the specified view command bool FillDefaults(EViewCommand cmd, CPluginCommand& args) const; // return a properly formatted CPluginMessage object to invoke this // plugin CRef<objects::CPluginMessage> CreateMessage(objects::EAlgoCommand cmd); CRef<objects::CPluginMessage> CreateMessage(objects::EDataCommand cmd); CRef<objects::CPluginMessage> CreateMessage(objects::EViewCommand cmd); // execute a command contained in a plugin message. This will execute // the command in the specified named context; if the context doesn't // exist, one will be marshalled. void Execute(CPluginMessage& msg); // finalize the arguments void FinalizeArgs(objects::CPluginMessage& msg); // get the plugin info const CPluginInfo& GetInfo(void) const; // get the plugin libinfo const CPluginLibInfo& GetLibInfo(void) const; // get the name of the class this plugin exports for a given command const string& GetClassName(void) const; // retrieve the help file for a given command. This can either be a file // on disk or the help itself. It does not necessarily return what's in the // info structure for the plugin. Instead, it uses PluginInfo.Help_file // to create a URL, based on the contents of the config [Help]. // // The data returned by PluginInfo.GetHelp_file is an // expression that resolves to a URL. The resolution process // is as follows: // // 1. If it's an "http://" URL, then the result is simply the URL. // // 2. If it's a word, append that word to the value of // the config variable [Help]/HELP_BASE, with a slash // between. // // 3. If it's empty, use HELP_BASE + a slash + the class name with // underscores removed. // // In the cases of (2) and (3), if HELP_BASE is not set, // then the method uses a default URL (within NCBI). // // Examples: // 1. Help text: http://ncbi.nlm.nih.gov/BLAST-help // Resolves to: http://ncbi.nlm.nih.gov/BLAST-help // // 2. Help text: NetBLASTReply // In config file: [Help] // HELP_BASE=http://genomeworkbench.org/help // Resolves to: http://genomeworkbench.org/help/NetBLASTReply // // 3. Help text in class CAlgoPlugin_MyPlugin: "" // In config file: [Help] // HELP_BASE=http://genomeworkbench.org/help // Resolves to: http://genomeworkbench.org/help/CAlgoPluginMyPlugin // Note that in example #3 there are no underscores in the URL. // // // const string GetHelpFile (void) const; // retrieve the name of the library this plugin lives in const string& GetLibrary (void) const; // retrieve the menu item for this plugin const string& GetMenuItem (void) const; // retrieve the mouse-over tooltip for this menu item const string& GetToolTip (void) const; // retrieve the version information for this plugin int GetVerMajor (void) const; int GetVerMinor (void) const; int GetVerRevision (void) const; const string& GetVerBuildDate(void) const;protected: // internal command to set the factory. This is called from the registry // when a plugin library is loaded. void x_SetFactory(CPluginFactoryBase* factory) const; CPluginBase* x_GetPlugin(const string& context = "");private: // Our original argument information. This is the set that we use // to define what we are and how we interact with the framework. CConstRef<CPluginLibInfo> m_Info; // Our working set of information. This set may be updated as the // application proceeds. Its use is primarily in FillDefaults() and // SetDefaults(), where it is used to define the last known set of // arguments. mutable CRef<CPluginLibInfo> m_WorkingInfo; // the factory we represent. This is initially NULL; it is set when the // plugin is loaded mutable CPluginFactoryBase* m_Factory; // a dictionary of named instances of the plugin that we manage typedef map<string, CRef<CPluginBase> > TPluginDict; TPluginDict m_PluginDict; // wrapper to retrieve the current working set CPluginLibInfo& x_GetWorkingSet(void) const;};// comparison operator for plugin handlesinlinebool operator< (const CPluginHandle_Impl& h1, const CPluginHandle_Impl& h2){ return (h1.GetClassName() < h2.GetClassName());}END_NCBI_SCOPE/* * =========================================================================== * $Log: plugin_handle_impl.hpp,v $ * Revision 1000.4 2004/06/01 20:44:28 gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12 * * Revision 1.12 2004/05/25 17:08:50 dicuccio * Added CreateMessage() API to generate a new plugin message for a given plugin * call * * Revision 1.11 2004/02/12 23:03:02 mjohnson * Added documentation lookup. * * Revision 1.10 2004/02/03 21:23:48 dicuccio * Added standard accessors for the working set of plugin args * * Revision 1.9 2004/01/15 22:50:17 jcherry * Added FinalizeArgs() for plugins * * Revision 1.8 2003/11/06 20:04:07 dicuccio * Refactored FillDefaults(). Added option to have cached set of arguments * * Revision 1.7 2003/11/04 17:18:41 dicuccio * Changed calling API for plugins - take CPluginMessage directly instead of * paired command/reply * * Revision 1.6 2003/10/23 16:16:36 dicuccio * Exposed CPluginLibInfo * * Revision 1.5 2003/08/05 17:07:15 dicuccio * Changed calling semantics for the message queue - pass by reference, not * CConstRef<> * * Revision 1.4 2003/08/02 12:51:07 dicuccio * Enabled the context dictionary inside of plugin handles * * Revision 1.3 2003/07/14 13:32:13 shomrat * Removed unnecessary explicit class specification * * Revision 1.2 2003/07/14 11:01:02 shomrat * Plugin messageing system related changes * * Revision 1.1 2003/06/25 17:02:54 dicuccio * Split CPluginHandle into a handle (pointer-to-implementation) and * implementation file. Lots of #include file clean-ups. * * =========================================================================== */#endif // GUI_CORE___PLUGIN_HANDLE_IMPL__HPP
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?