ControlFactory.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 "JoystickControl.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* typeName, ControlActivator activator)
  36. {
  37. std::string upper(typeName);
  38. std::transform(upper.begin(), upper.end(), upper.begin(), (int(*)(int))toupper);
  39. if (_registeredControls.find(upper) != _registeredControls.end())
  40. return false;
  41. _registeredControls[upper] = activator;
  42. return true;
  43. }
  44. void ControlFactory::unregisterCustomControl(const char* typeName)
  45. {
  46. std::string upper(typeName);
  47. std::transform(upper.begin(), upper.end(), upper.begin(), (int(*)(int))toupper);
  48. std::map<std::string, ControlActivator>::iterator it;
  49. if ((it = _registeredControls.find(upper)) != _registeredControls.end())
  50. {
  51. _registeredControls.erase(it);
  52. }
  53. }
  54. Control *ControlFactory::createControl(const char* typeName, Theme::Style* style, Properties* properties)
  55. {
  56. std::string upper(typeName);
  57. std::transform(upper.begin(), upper.end(), upper.begin(), (int(*)(int))toupper);
  58. std::map<std::string, ControlActivator>::iterator it = _registeredControls.find(upper);
  59. if (it == _registeredControls.end())
  60. return NULL;
  61. return (*it->second)(style, properties);
  62. }
  63. void ControlFactory::registerStandardControls()
  64. {
  65. registerCustomControl("LABEL", &Label::create);
  66. registerCustomControl("BUTTON", &Button::create);
  67. registerCustomControl("CHECKBOX", &CheckBox::create);
  68. registerCustomControl("RADIOBUTTON", &RadioButton::create);
  69. registerCustomControl("CONTAINER", &Container::create);
  70. registerCustomControl("SLIDER", &Slider::create);
  71. registerCustomControl("TEXTBOX", &TextBox::create);
  72. registerCustomControl("JOYSTICK", &JoystickControl::create); // convenience alias
  73. registerCustomControl("JOYSTICKCONTROL", &JoystickControl::create);
  74. registerCustomControl("IMAGE", &ImageControl::create); // convenience alias
  75. registerCustomControl("IMAGECONTROL", &ImageControl::create);
  76. }
  77. }