april  1.0.0
...
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
aprillibrary.h
Go to the documentation of this file.
1 /* ========================================================================= */
2 /* ------------------------------------------------------------------------- *//*
12 
13 
14  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15  Please read COPYING and README files in root folder
16  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
17 */
18 /* ------------------------------------------------------------------------- */
19 /* ========================================================================= */
20 #ifndef __APRILLIBRARY_INC__
21 #define __APRILLIBRARY_INC__
22 //
23 //
24 //
25 //
26 /* INCLUDES ------------------------------------------------------------ */
27 
28 #include <april/april.h>
29 #include <QObject>
30 #include <QSettings>
31 #include <QMap>
32 #include <libbbb/1/list2d.h>
33 
34 /* INCLUDES ============================================================ */
35 //
36 //
37 //
38 //
39 /* DEFINITIONS --------------------------------------------------------- */
40 
41 class AprilPluginInterf;
42 class AprilPluginLoader;
43 
44 namespace april {
45 
46 class World;
47 class Factory;
48 class WorldFactory;
49 
51 
55 typedef Factory * (*FactoryCreator) ( World * w, const QString & s_name );
56 
57 
58 /* DEFINITIONS ========================================================= */
59 //
60 //
61 //
62 //
63 /* CLASS --------------------------------------------------------------- */
64 
68 class
70  AprilLibrary : public QObject, public MemTrack {
72  BBM_TRACK( AprilLibrary );
73 
74  //
75  //
76  //
77  //
78  /* DEFINITIONS ----------------------------------------------------- */
79 
80  friend class World;
81  friend class WorldFactory;
82 
83 
84 public:
85 
87  struct LibProps {
88 
89 
90 
92  void save ( QSettings & s );
93 
95  void load ( QSettings & s );
96  };
97 
98 
99  /* DEFINITIONS ===================================================== */
100  //
101  //
102  //
103  //
104  /* DATA ------------------------------------------------------------ */
105 
106 private:
107 
109  LibProps props_;
110 
112  List2Dh worlds_;
113 
115  List2Dh plugins_;
116 
118  World * def_world_;
119 
121  QMap<QString,WorldFactory*> world_factories_;
122 
124  QMap<QString,FactoryCreator> factories_src_;
125 
126 
128  static AprilLibrary * uniq_;
129 
130 
131  /* DATA ============================================================ */
132  //
133  //
134  //
135  //
136  /* FUNCTIONS ------------------------------------------------------- */
137 
138 public:
139 
140 
144  AprilLibrary ( QObject * parent = NULL );
145 
146 
150  virtual ~AprilLibrary ( void );
151 
152 
156  static AprilLibrary * unique ( void )
157  { return uniq_; }
158 
159 
160 
161 
162  /* ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */
165 
166 
167 public:
168 
174  void loadProps ( void );
175 
176 
182  void saveProps ( void );
183 
185  static LibProps & properties ( void )
186  { Q_ASSERT( uniq_ != NULL ); return uniq_->props_; }
187 
188 
190  /* ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */
191 
192 
193  /* ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */
196 
197 
198 public:
199 
201  static bool hasWorld (
202  World * world
203  );
204 
206  static void remWorld (
207  World * world
208  );
209 
210 
212  static World * firstWorld ( void );
213 
215  static QString uniqueWorldName ( const QString & pattern );
216 
218  static int worldsCount ( void )
219  { return uniq_->worlds_.count(); }
220 
222  static World * findWorld ( const QString & s_name );
223 
225  static World * worldAt ( int i );
226 
228  static bool setCrtWorld ( World * new_crt );
229 
231  static World * crtWorld ( void )
232  { return uniq_->def_world_; }
233 
234 
235 
236 protected:
237 
238 
245  static void addWorld (
246  World * world
247  );
248 
249 private:
250 
252  void internalAddWorld ( World * world );
253 
255  void internalRemWorld ( World * world );
256 
257 
259  /* ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */
260 
261 
262  /* ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */
265 
266 
267 public:
268 
270  static AprilPluginInterf * loadPlugIn ( const QString & s );
271 
273  static bool unloadPlugIn ( const QString & s );
274 
276  static bool unloadPlugIn ( AprilPluginInterf * p );
277 
279  static bool unloadPlugIn ( AprilPluginLoader * pld );
280 
282  static AprilPluginInterf * findPlugIn ( const QString & s );
283 
285  static AprilPluginLoader * findPlugInLoader ( const QString & s );
286 
288  static AprilPluginInterf * findPlugInRel ( const QString & s );
289 
291  static AprilPluginLoader * findPlugInLoaderRel ( const QString & s );
292 
294  static AprilPluginLoader * firstPlugin ( void );
295 
297  static int pluginsCount ( void )
298  { return uniq_->plugins_.count(); }
299 
301  static AprilPluginLoader * pluginAt ( int i );
302 
304  /* ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */
305 
306 
307  /* ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */
310 
311 
312 public:
313 
315  static bool registerFactory (
316  const QString & s_name,
317  FactoryCreator callback
318  );
319 
321  static bool unregisterFactory (
322  const QString & s_name,
323  FactoryCreator callback
324  );
325 
327  static QString defaultWorldFactoryName ( void );
328 
330  static Factory * factoryForString (
331  World * w,
332  const QString & s_name
333  );
334 
336 
341  static WorldFactory * findWorldFactory (
342  const QString & s
343  );
344 
345 protected:
346 
348  static bool addWorldFactory (
349  const QString & s,
350  WorldFactory * inst
351  );
352 
354  static bool remWorldFactory (
355  const QString & s,
356  WorldFactory * inst
357  );
358 
359 private:
360 
362 
368  static Factory * defaultWorldFactoryCreator (
369  World * w,
370  const QString & s_name
371  );
372 
374  void registerFactoryCreators ( void );
375 
376 
378  /* ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */
379 
380 
381 
382  /* FUNCTIONS ======================================================= */
383  //
384  //
385  //
386  //
387 
388 }; /* class AprilLibrary */
389 
390 /* CLASS =============================================================== */
391 //
392 //
393 //
394 //
395 
396 } // namespace april
397 
400 
402 APRILSHARED_EXPORT void endAprilLibrary ( void );
403 
404 #endif // __APRILLIBRARY_INC__
405 /* ------------------------------------------------------------------------- */
406 /* ========================================================================= */