BsGUIToggleField.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "GUI/BsGUIToggleField.h"
  4. #include "GUI/BsGUILayout.h"
  5. #include "GUI/BsGUIToggle.h"
  6. #include "GUI/BsGUILabel.h"
  7. #include "UndoRedo/BsCmdInputFieldValueChange.h"
  8. using namespace std::placeholders;
  9. namespace bs
  10. {
  11. GUIToggleField::GUIToggleField(const PrivatelyConstruct& dummy, const GUIContent& labelContent,
  12. UINT32 labelWidth, const String& style, const GUIDimensions& dimensions, bool withLabel)
  13. :TGUIField(dummy, labelContent, labelWidth, style, dimensions, withLabel), mToggle(nullptr), mValue(false)
  14. {
  15. mToggle = GUIToggle::create(HString(""), getSubStyleName(getToggleStyleType()));
  16. mToggle->onToggled.connect(std::bind(&GUIToggleField::valueChanged, this, _1));
  17. mLayout->addElement(mToggle);
  18. }
  19. void GUIToggleField::setValue(bool value)
  20. {
  21. if (mValue == value)
  22. return;
  23. mValue = value;
  24. if(value)
  25. mToggle->toggleOn();
  26. else
  27. mToggle->toggleOff();
  28. }
  29. void GUIToggleField::setTint(const Color& color)
  30. {
  31. if (mLabel != nullptr)
  32. mLabel->setTint(color);
  33. mToggle->setTint(color);
  34. }
  35. void GUIToggleField::_setValue(bool value, bool triggerEvent)
  36. {
  37. setValue(value);
  38. if (triggerEvent)
  39. onValueChanged(value);
  40. }
  41. void GUIToggleField::styleUpdated()
  42. {
  43. if (mLabel != nullptr)
  44. mLabel->setStyle(getSubStyleName(getLabelStyleType()));
  45. mToggle->setStyle(getSubStyleName(getToggleStyleType()));
  46. }
  47. void GUIToggleField::valueChanged(bool newValue)
  48. {
  49. CmdInputFieldValueChange<GUIToggleField, bool>::execute(this, newValue);
  50. }
  51. const String& GUIToggleField::getGUITypeName()
  52. {
  53. static String typeName = "GUIToggleField";
  54. return typeName;
  55. }
  56. const String& GUIToggleField::getToggleStyleType()
  57. {
  58. static String STYLE_TYPE = "EditorFieldToggleInput";
  59. return STYLE_TYPE;
  60. }
  61. }