libyui  3.0.13
 All Classes Functions Variables Enumerations Friends
YUILoader.h
1 /*
2  Copyright (C) 2000-2012 Novell, Inc
3  This library is free software; you can redistribute it and/or modify
4  it under the terms of the GNU Lesser General Public License as
5  published by the Free Software Foundation; either version 2.1 of the
6  License, or (at your option) version 3.0 of the License. This library
7  is distributed in the hope that it will be useful, but WITHOUT ANY
8  WARRANTY; without even the implied warranty of MERCHANTABILITY or
9  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
10  License for more details. You should have received a copy of the GNU
11  Lesser General Public License along with this library; if not, write
12  to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
13  Floor, Boston, MA 02110-1301 USA
14 */
15 
16 
17 /*-/
18 
19  File: YUILoader.h
20 
21  Author: Stefan Hundhammer <sh@suse.de>
22 
23 /-*/
24 
25 
26 #ifndef YUILoader_h
27 #define YUILoader_h
28 
29 
30 #include <string>
31 
32 #include "YUI.h"
33 #include "YExternalWidgets.h"
34 
35 
36 
37 #define YUIPlugin_Qt "qt"
38 #define YUIPlugin_NCurses "ncurses"
39 #define YUIPlugin_Gtk "gtk"
40 
41 
42 /**
43  * Class to load one of the concrete UI plug-ins: Qt, NCurses, Gtk.
44  **/
45 class YUILoader
46 {
47 public:
48  /**
49  * Load any of the available UI plug-ins in this order:
50  * - Qt if $DISPLAY is set
51  * - NCurses if stdout is a tty
52  **/
53  static void loadUI( bool withThreads = false );
54 
55  /**
56  * Load a UI plug-in. 'name' is one of the YUIPlugin_ -defines above.
57  *
58  * This might throw exceptions.
59  **/
60  static void loadPlugin( const std::string & name, bool withThreads = false );
61 
62  static bool pluginExists( const std::string & pluginBaseName );
63 
64  /**
65  * Load the given External Widgets plugin followed by its graphical extension implementation
66  * in the following order in the same way as loadUI:
67  * - Qt, Gtk or NCurses
68  *
69  * 'name' is the user defined plugin name, graphical extension implementations have to
70  * be called 'name'-qt, 'name'-gtk and 'name'-ncurses. Following this rule plugin
71  * file names are as libyui-XX-YY.so.VER where:
72  * XX is the user defined name
73  * YY is the UI used (ncurses, gtk, qt)
74  * VER is the libyui so version
75  * 'symbol' is the function symbol to be loaded, e.g. YExternalWidgets* 'symbol'(void)
76  * (e.g. default YExternalWidgets* createExternalWidgets(const char *)
77  * see createEWFunction_t definition)
78  **/
79  static void loadExternalWidgets( const std::string & name, const std::string & symbol="_Z21createExternalWidgetsPKc" );
80 
81 private:
82  YUILoader() {}
83  ~YUILoader() {}
84 
85  /**
86  * Used by loadExternalWidgets to load the graphical plugin specialization.
87  *
88  * 'name' is the original plugin name (e.g. the one passed to loadExternalWidgets)
89  * 'plugin_name' is the graphical plugin specialization name (e.g. 'name'-[gtk|ncurses|qt])
90  * 'symbol' is the function symbol to be loaded and executed (e.g. the one passed loadExternalWidgets)
91  * This might throw exceptions:
92  * YUIPluginException if the plugin has not been loaded
93  * specific exception can be thrown by funtion invoked (param symbol)
94  **/
95  static void loadExternalWidgetsPlugin( const std::string& name, const std::string& plugin_name, const std::string& symbol );
96 };
97 
98 
99 /**
100  * Every UI plug-in has to provide a function
101  *
102  * YUI * createUI( bool withThreads )
103  *
104  * that creates a UI of that specific type upon the first call and returns that
105  * singleton for all subsequent calls.
106  **/
107 typedef YUI * (*createUIFunction_t)( bool );
108 
109 /**
110  * Every WE extension plug-in has to provide a function
111  *
112  * YExternalWidgets * createWE( )
113  *
114  * that creates a WE of that specific type upon the first call and returns that
115  * singleton for all subsequent calls.
116  **/
117 typedef YExternalWidgets * (*createEWFunction_t)( const char * );
118 
119 #endif // YUILoader_h
Definition: YUI.h:48
static void loadPlugin(const std::string &name, bool withThreads=false)
Definition: YUILoader.cc:99
static void loadExternalWidgets(const std::string &name, const std::string &symbol="_Z21createExternalWidgetsPKc")
Definition: YUILoader.cc:139
static void loadUI(bool withThreads=false)
Definition: YUILoader.cc:39