Changes in / [fc6053:5f5a7b]


Ignore:
Location:
src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/CommandLineUI/CommandLineUIFactory.cpp

    rfc6053 r5f5a7b  
    3232  return new CommandLineWindow();
    3333}
     34
     35CommandLineUIFactory::description::description() :
     36    UIFactory::factoryDescription("CommandLine")
     37{}
     38
     39CommandLineUIFactory::description::~description()
     40{}
     41
     42UIFactory* CommandLineUIFactory::description::makeFactory(){
     43  return new CommandLineUIFactory();
     44}
  • src/UIElements/CommandLineUI/CommandLineUIFactory.hpp

    rfc6053 r5f5a7b  
    2121  virtual MainWindow* makeMainWindow();
    2222
     23  struct description : public UIFactory::factoryDescription {
     24    description();
     25    virtual ~description();
     26
     27    virtual UIFactory* makeFactory();
     28  };
     29
    2330protected:
    2431  CommandLineUIFactory();
  • src/UIElements/TextUI/TextUIFactory.cpp

    rfc6053 r5f5a7b  
    66 */
    77
    8 #include "Helpers/MemDebug.hpp"
    9 
    10 #include "TextUI/TextUIFactory.hpp"
    11 #include "TextUI/TextWindow.hpp"
    12 #include "TextUI/TextDialog.hpp"
     8#include "UIElements/TextUI/TextUIFactory.hpp"
     9#include "UIElements/TextUI/TextWindow.hpp"
     10#include "UIElements/TextUI/TextDialog.hpp"
    1311
    1412
    1513TextUIFactory::TextUIFactory()
    16 {
    17   // TODO Auto-generated constructor stub
    18 
    19 }
     14{}
    2015
    2116TextUIFactory::~TextUIFactory()
    22 {
    23   // TODO Auto-generated destructor stub
    24 }
     17{}
    2518
    2619
     
    3326}
    3427
     28TextUIFactory::description::description() :
     29    UIFactory::factoryDescription("Text")
     30{}
     31
     32TextUIFactory::description::~description()
     33{}
     34
     35UIFactory* TextUIFactory::description::makeFactory(){
     36  return new TextUIFactory();
     37}
     38
  • src/UIElements/TextUI/TextUIFactory.hpp

    rfc6053 r5f5a7b  
    2121  virtual MainWindow* makeMainWindow();
    2222
     23  struct description : public UIFactory::factoryDescription {
     24    description();
     25    virtual ~description();
     26
     27    virtual UIFactory* makeFactory();
     28  };
     29
    2330protected:
    2431  TextUIFactory();
  • src/UIElements/UIFactory.cpp

    rfc6053 r5f5a7b  
    88#include "Helpers/MemDebug.hpp"
    99
    10 #include <cassert>
     10#include <utility>
    1111#include "Patterns/Singleton_impl.hpp"
    12 #include "UIFactory.hpp"
     12#include "UIElements/UIFactory.hpp"
     13#include "Helpers/Assert.hpp"
    1314
    14 // all factories that can be used:
    15 #include "TextUI/TextUIFactory.hpp"
    16 #include "CommandLineUI/CommandLineUIFactory.hpp"
     15using namespace std;
     16
     17std::map<std::string,boost::shared_ptr<UIFactory::factoryDescription> > UIFactory::factories;
    1718
    1819UIFactory::UIFactory()
    19 {
    20   // TODO Auto-generated constructor stub
     20{}
    2121
     22UIFactory::~UIFactory()
     23{}
     24
     25void UIFactory::makeUserInterface(std::string type) {
     26  ASSERT(factories.count(type),"Selected factory was not registered before creation.");
     27  // call the factory factory
     28  setInstance(factories[type]->makeFactory());
    2229}
    2330
    24 UIFactory::~UIFactory()
    25 {
    26   // TODO Auto-generated destructor stub
    27 }
    28 
    29 void UIFactory::makeUserInterface(InterfaceTypes type) {
    30   switch(type) {
    31     case Text :
    32       setInstance(new TextUIFactory());
    33       break;
    34     case CommandLine:
    35       setInstance(new CommandLineUIFactory());
    36       break;
    37 
    38     default:
    39       assert(0 && "No such Factory in stock");
    40       break;
    41   }
     31void UIFactory::registerFactory(factoryDescription *factoryDesc) {
     32  ASSERT(!factories.count(factoryDesc->name),"Trying to re-register an already registered factory.");
     33  factories.insert(make_pair(factoryDesc->name,
     34                             boost::shared_ptr<factoryDescription>(factoryDesc)));
    4235}
    4336
    4437CONSTRUCT_SINGLETON(UIFactory)
     38
     39UIFactory::factoryDescription::factoryDescription(string _name) :
     40  name(_name)
     41{}
     42
     43UIFactory::factoryDescription::~factoryDescription()
     44{}
  • src/UIElements/UIFactory.hpp

    rfc6053 r5f5a7b  
    1515#include "Patterns/Singleton.hpp"
    1616
     17#include <string>
     18#include <map>
     19#include <boost/smart_ptr.hpp>
     20
    1721/**
    1822 * Abstract Factory to create any kind of User interface object needed by the programm.
     
    2428class UIFactory : public Singleton<UIFactory,false>
    2529{
    26 
     30  friend class Singleton<UIFactory,false>;
    2731public:
    28   enum InterfaceTypes {Text, CommandLine};
    29   virtual ~UIFactory();
    30 
    3132  /**
    3233   * Produce some kind of main window, of whichever type was chosen when the factory was created
     
    4243protected:
    4344  UIFactory();
     45  virtual ~UIFactory();
    4446
    4547public:
     48  struct factoryDescription {
     49    factoryDescription(std::string _name);
     50    virtual ~factoryDescription();
     51
     52    const std::string name;
     53    // yes this method really is a factory factory, to allow insertion of
     54    // arbitrary factories
     55    virtual UIFactory* makeFactory()=0;
     56  };
    4657  /**
    4758   * create a Factory of a certain type. From that moment on only those UIElements can be produced by the factory
    4859   */
    49   static void makeUserInterface(InterfaceTypes type);
    50 
     60  static void makeUserInterface(std::string type);
     61  static void registerFactory(factoryDescription *factoryDesc);
     62protected:
     63private:
     64  static std::map<std::string,boost::shared_ptr<factoryDescription> > factories;
    5165};
    5266
  • src/builder.cpp

    rfc6053 r5f5a7b  
    7474#include "periodentafel.hpp"
    7575#include "UIElements/UIFactory.hpp"
     76#include "UIElements/TextUI/TextUIFactory.hpp"
     77#include "UIElements/CommandLineUI/CommandLineUIFactory.hpp"
    7678#include "UIElements/MainWindow.hpp"
    7779#include "UIElements/Dialog.hpp"
     
    22592261      if (!CommandLineParser::getInstance().isEmpty()) {
    22602262        DoLog(0) && (Log() << Verbose(0) << "Setting UI to CommandLine." << endl);
    2261         UIFactory::makeUserInterface(UIFactory::CommandLine);
     2263        UIFactory::registerFactory(new CommandLineUIFactory::description());
     2264        UIFactory::makeUserInterface("CommandLine");
    22622265      } else {
    22632266        DoLog(0) && (Log() << Verbose(0) << "Setting UI to Text." << endl);
    2264         UIFactory::makeUserInterface(UIFactory::Text);
     2267        UIFactory::registerFactory(new TextUIFactory::description());
     2268        UIFactory::makeUserInterface("Text");
    22652269      }
    22662270    }
Note: See TracChangeset for help on using the changeset viewer.