| // |
| // "$Id: Fl_Plugin.H 6995 2010-01-12 08:48:55Z matt $" |
| // |
| // A Plugin system for FLTK, implemented in Fl_Preferences.cxx. |
| // |
| // Copyright 2002-2010 by Matthias Melcher. |
| // |
| // This library is free software; you can redistribute it and/or |
| // modify it under the terms of the GNU Library General Public |
| // License as published by the Free Software Foundation; either |
| // version 2 of the License, or (at your option) any later version. |
| // |
| // This library is distributed in the hope that it will be useful, |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| // Library General Public License for more details. |
| // |
| // You should have received a copy of the GNU Library General Public |
| // License along with this library; if not, write to the Free Software |
| // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
| // USA. |
| // |
| // Please report all bugs and problems on the following page: |
| // |
| // http://www.fltk.org/str.php |
| // |
| |
| /* \file |
| Fl_Plugin class . */ |
| |
| #ifndef Fl_Plugin_H |
| # define Fl_Plugin_H |
| |
| # include "Fl_Preferences.H" |
| |
| |
| /** |
| \brief Fl_Plugin allows link-time and run-time integration of binary modules. |
| |
| Fl_Plugin and Fl_Plugin_Manager provide a small and simple solution for |
| linking C++ classes at run-time, or optionally linking modules at compile |
| time without the need to change the main application. |
| |
| Fl_Plugin_Manager uses static initialisation to create the plugin interface |
| early during startup. Plugins are stored in a temporary database, organized |
| in classes. |
| |
| Plugins should derive a new class from Fl_Plugin as a base: |
| \code |
| class My_Plugin : public Fl_Plugin { |
| public: |
| My_Plugin() : Fl_Plugin("effects", "blur") { } |
| void do_something(...); |
| }; |
| My_Plugin blur_plugin(); |
| \endcode |
| |
| Plugins can be put into modules and either linked before distribution, or loaded |
| from dynamically linkable files. An Fl_Plugin_Manager is used to list and |
| access all currently loaded plugins. |
| \code |
| Fl_Plugin_Manager mgr("effects"); |
| int i, n = mgr.plugins(); |
| for (i=0; i<n; i++) { |
| My_Plugin *pin = (My_Plugin*)mgr.plugin(i); |
| pin->do_something(); |
| } |
| \endcode |
| */ |
| class FL_EXPORT Fl_Plugin { |
| Fl_Preferences::ID id; |
| public: |
| Fl_Plugin(const char *klass, const char *name); |
| virtual ~Fl_Plugin(); |
| }; |
| |
| |
| /** |
| \brief Fl_Plugin_Manager manages link-time and run-time plugin binaries. |
| \see Fl_Plugin |
| */ |
| class FL_EXPORT Fl_Plugin_Manager : public Fl_Preferences { |
| public: |
| Fl_Plugin_Manager(const char *klass); |
| ~Fl_Plugin_Manager(); |
| |
| /** \brief Return the number of plugins in the klass. |
| */ |
| int plugins() { return groups(); } |
| Fl_Plugin *plugin(int index); |
| Fl_Plugin *plugin(const char *name); |
| Fl_Preferences::ID addPlugin(const char *name, Fl_Plugin *plugin); |
| |
| static void removePlugin(Fl_Preferences::ID id); |
| static int load(const char *filename); |
| static int loadAll(const char *filepath, const char *pattern=0); |
| }; |
| |
| |
| #endif // !Fl_Preferences_H |
| |
| // |
| // End of "$Id: Fl_Preferences.H 6995 2010-01-12 08:48:55Z matt $". |
| // |