| [f5a86a] | 1 | /* | 
|---|
|  | 2 | * UIFactory.hpp | 
|---|
|  | 3 | * | 
|---|
|  | 4 | *  Created on: Jan 5, 2010 | 
|---|
|  | 5 | *      Author: crueger | 
|---|
|  | 6 | */ | 
|---|
|  | 7 |  | 
|---|
|  | 8 | #ifndef UIFACTORY_HPP_ | 
|---|
|  | 9 | #define UIFACTORY_HPP_ | 
|---|
|  | 10 |  | 
|---|
| [56f73b] | 11 | // include config.h | 
|---|
|  | 12 | #ifdef HAVE_CONFIG_H | 
|---|
|  | 13 | #include <config.h> | 
|---|
|  | 14 | #endif | 
|---|
|  | 15 |  | 
|---|
|  | 16 |  | 
|---|
| [cc04b7] | 17 | class MainWindow; | 
|---|
| [f5a86a] | 18 | class Dialog; | 
|---|
| [a2ab15] | 19 | class DialogDescription; | 
|---|
| [d7940e] | 20 |  | 
|---|
| [ad011c] | 21 | #include "CodePatterns/Singleton.hpp" | 
|---|
| [d7940e] | 22 |  | 
|---|
| [9cf88c] | 23 | #include <string> | 
|---|
|  | 24 | #include <map> | 
|---|
|  | 25 | #include <boost/smart_ptr.hpp> | 
|---|
|  | 26 |  | 
|---|
| [dbb474] | 27 | /** | 
|---|
|  | 28 | * Abstract Factory to create any kind of User interface object needed by the programm. | 
|---|
|  | 29 | * | 
|---|
|  | 30 | * The factory can be created and has to be set to a certain type upon creation. It will then | 
|---|
|  | 31 | * only create UIelements of that certain type, so that all UIElements match. This way different | 
|---|
|  | 32 | * UIs can be handled in a concise abstract way. | 
|---|
| [de8e45] | 33 | * | 
|---|
|  | 34 | * The main functionality is the MainWindow and the Dialog. | 
|---|
|  | 35 | * | 
|---|
|  | 36 | * MainWindow basically is the framework if the UI. The MainWindow has a run function which is | 
|---|
|  | 37 | * called MainWindow::Display(), which will listen for user input and react to it via actions for | 
|---|
|  | 38 | * as long as the user desires or tells the MainWindow to quit. | 
|---|
|  | 39 | * | 
|---|
|  | 40 | * Within the MainWindow Dialog classes may be instantiated which ask the user for input to | 
|---|
|  | 41 | * certain actions he wants to perform. | 
|---|
|  | 42 | * | 
|---|
| [dbb474] | 43 | */ | 
|---|
| [d7940e] | 44 | class UIFactory : public Singleton<UIFactory,false> | 
|---|
| [f5a86a] | 45 | { | 
|---|
| [9cf88c] | 46 | friend class Singleton<UIFactory,false>; | 
|---|
| [f5a86a] | 47 | public: | 
|---|
|  | 48 |  | 
|---|
| [dbb474] | 49 | /** | 
|---|
|  | 50 | * Produce some kind of main window, of whichever type was chosen when the factory was created | 
|---|
|  | 51 | */ | 
|---|
| [d893f79] | 52 | virtual MainWindow* makeMainWindow()=0; | 
|---|
| [dbb474] | 53 |  | 
|---|
|  | 54 | /** | 
|---|
|  | 55 | * Produce a User Interaction Dialog, that can query values from the User. | 
|---|
|  | 56 | * Again the type is determined upon factory creation. | 
|---|
|  | 57 | */ | 
|---|
| [163110] | 58 | virtual Dialog* makeDialog(const std::string &_title)=0; | 
|---|
| [f5a86a] | 59 |  | 
|---|
|  | 60 | protected: | 
|---|
|  | 61 | UIFactory(); | 
|---|
| [9cf88c] | 62 | virtual ~UIFactory(); | 
|---|
| [f5a86a] | 63 |  | 
|---|
|  | 64 | public: | 
|---|
| [9cf88c] | 65 | struct factoryDescription { | 
|---|
|  | 66 | factoryDescription(std::string _name); | 
|---|
|  | 67 | virtual ~factoryDescription(); | 
|---|
|  | 68 |  | 
|---|
|  | 69 | const std::string name; | 
|---|
|  | 70 | // yes this method really is a factory factory, to allow insertion of | 
|---|
|  | 71 | // arbitrary factories | 
|---|
|  | 72 | virtual UIFactory* makeFactory()=0; | 
|---|
|  | 73 | }; | 
|---|
| [dbb474] | 74 | /** | 
|---|
|  | 75 | * create a Factory of a certain type. From that moment on only those UIElements can be produced by the factory | 
|---|
|  | 76 | */ | 
|---|
| [9cf88c] | 77 | static void makeUserInterface(std::string type); | 
|---|
|  | 78 | static void registerFactory(factoryDescription *factoryDesc); | 
|---|
| [415ddd] | 79 | static bool isFactoryPresent() { return !factories.empty(); } | 
|---|
| [462201] | 80 | virtual std::string getUIName(){  return "none";  } | 
|---|
| [28864c] | 81 | static bool isDoneInitializing() { return doneInitializing; } | 
|---|
| [9cf88c] | 82 | protected: | 
|---|
| [28864c] | 83 | //!> indicates whether the made factory is done initializing | 
|---|
|  | 84 | static bool doneInitializing; | 
|---|
|  | 85 |  | 
|---|
| [9cf88c] | 86 | private: | 
|---|
|  | 87 | static std::map<std::string,boost::shared_ptr<factoryDescription> > factories; | 
|---|
| [f5a86a] | 88 | }; | 
|---|
|  | 89 |  | 
|---|
|  | 90 | #endif /* UIFACTORY_HPP_ */ | 
|---|