libyui  3.0.10
 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  * usually YExternalWidgets* createWE(void) see createEWFunction_t
77  **/
78  static void loadExternalWidgets( const std::string & name, const std::string & symbol="_Z21createExternalWidgetsv" );
79 
80 private:
81  YUILoader() {}
82  ~YUILoader() {}
83 
84  /**
85  * Used by loadExternalWidgets to load the graphical plugin specialization.
86  *
87  * This might throw exceptions.
88  **/
89  static void loadExternalWidgetsPlugin( const std::string & name, const std::string & symbol );
90 };
91 
92 
93 /**
94  * Every UI plug-in has to provide a function
95  *
96  * YUI * createUI( bool withThreads )
97  *
98  * that creates a UI of that specific type upon the first call and returns that
99  * singleton for all subsequent calls.
100  **/
101 typedef YUI * (*createUIFunction_t)( bool );
102 
103 /**
104  * Every WE extension plug-in has to provide a function
105  *
106  * YExternalWidgets * createWE( )
107  *
108  * that creates a WE of that specific type upon the first call and returns that
109  * singleton for all subsequent calls.
110  **/
111 typedef YExternalWidgets * (*createEWFunction_t)( void );
112 
113 #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="_Z21createExternalWidgetsv")
Definition: YUILoader.cc:139
static void loadUI(bool withThreads=false)
Definition: YUILoader.cc:39