ControlFactory.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "Base.h"
  2. #include "ControlFactory.h"
  3. #include "Label.h"
  4. #include "Button.h"
  5. #include "CheckBox.h"
  6. #include "RadioButton.h"
  7. #include "Container.h"
  8. #include "Slider.h"
  9. #include "TextBox.h"
  10. #include "Joystick.h"
  11. #include "ImageControl.h"
  12. namespace gameplay
  13. {
  14. static ControlFactory* __controlFactory = NULL;
  15. ControlFactory::ControlFactory()
  16. {
  17. registerStandardControls();
  18. }
  19. ControlFactory::ControlFactory(const ControlFactory& copy)
  20. {
  21. }
  22. ControlFactory::~ControlFactory()
  23. {
  24. }
  25. void ControlFactory::finalize()
  26. {
  27. SAFE_DELETE(__controlFactory);
  28. }
  29. ControlFactory* ControlFactory::getInstance()
  30. {
  31. if (__controlFactory == NULL)
  32. __controlFactory = new ControlFactory();
  33. return __controlFactory;
  34. }
  35. bool ControlFactory::registerCustomControl(const char* name, ControlActivator activator)
  36. {
  37. if (_registeredControls.find(name) != _registeredControls.end())
  38. return false;
  39. _registeredControls[name] = activator;
  40. return true;
  41. }
  42. void ControlFactory::unregisterCustomControl(const char* controlName)
  43. {
  44. std::map<std::string, ControlActivator>::iterator it;
  45. if ((it = _registeredControls.find(controlName)) != _registeredControls.end())
  46. {
  47. _registeredControls.erase(it);
  48. }
  49. }
  50. Control *ControlFactory::createControl(const char* controlName, Theme::Style* style, Properties* properties)
  51. {
  52. if (_registeredControls.find(controlName) == _registeredControls.end())
  53. return NULL;
  54. return (*_registeredControls[controlName])(style, properties);
  55. }
  56. void ControlFactory::registerStandardControls()
  57. {
  58. _registeredControls["LABEL"] = &Label::create;
  59. _registeredControls["BUTTON"] = &Button::create;
  60. _registeredControls["CHECKBOX"] = &CheckBox::create;
  61. _registeredControls["RADIOBUTTON"] = &RadioButton::create;
  62. _registeredControls["CONTAINER"] = &Container::create;
  63. _registeredControls["SLIDER"] = &Slider::create;
  64. _registeredControls["TEXTBOX"] = &TextBox::create;
  65. _registeredControls["JOYSTICK"] = &Joystick::create;
  66. _registeredControls["IMAGE"] = &ImageControl::create;
  67. }
  68. }