BsGUIVector4Field.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #include "BsGUIVector4Field.h"
  2. #include "BsGUILayoutX.h"
  3. #include "BsGUILayoutY.h"
  4. #include "BsGUILabel.h"
  5. #include "BsGUIFloatField.h"
  6. #include "BsBuiltinResources.h"
  7. #include "BsCGUIWidget.h"
  8. #include "BsGUIMouseEvent.h"
  9. #include "BsGUISpace.h"
  10. #include "BsCGUIWidget.h"
  11. using namespace std::placeholders;
  12. namespace BansheeEngine
  13. {
  14. const UINT32 GUIVector4Field::ELEMENT_LABEL_WIDTH = 10;
  15. GUIVector4Field::GUIVector4Field(const PrivatelyConstruct& dummy, const GUIContent& labelContent,
  16. UINT32 labelWidth, const String& style, const GUIDimensions& dimensions, bool withLabel)
  17. :TGUIField(dummy, labelContent, labelWidth, style, dimensions, withLabel), mFieldX(nullptr), mFieldY(nullptr)
  18. {
  19. mFieldX = GUIFloatField::create(HString(L"X"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
  20. mFieldY = GUIFloatField::create(HString(L"Y"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
  21. mFieldZ = GUIFloatField::create(HString(L"Z"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
  22. mFieldW = GUIFloatField::create(HString(L"W"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
  23. mFieldX->onValueChanged.connect(std::bind(&GUIVector4Field::valueChanged, this, _1));
  24. mFieldY->onValueChanged.connect(std::bind(&GUIVector4Field::valueChanged, this, _1));
  25. mFieldZ->onValueChanged.connect(std::bind(&GUIVector4Field::valueChanged, this, _1));
  26. mFieldW->onValueChanged.connect(std::bind(&GUIVector4Field::valueChanged, this, _1));
  27. mFieldX->onConfirm.connect(std::bind(&GUIVector4Field::inputConfirmed, this));
  28. mFieldY->onConfirm.connect(std::bind(&GUIVector4Field::inputConfirmed, this));
  29. mFieldZ->onConfirm.connect(std::bind(&GUIVector4Field::inputConfirmed, this));
  30. mFieldW->onConfirm.connect(std::bind(&GUIVector4Field::inputConfirmed, this));
  31. mLayout->removeElement(mLabel);
  32. GUILayout* layout = mLayout->addNewElement<GUILayoutY>();
  33. layout->addElement(mLabel);
  34. mLabel->resetDimensions();
  35. GUILayout* elementLayout = layout->addNewElement<GUILayoutX>();
  36. elementLayout->addElement(mFieldX);
  37. elementLayout->addElement(mFieldY);
  38. elementLayout->addElement(mFieldZ);
  39. elementLayout->addElement(mFieldW);
  40. }
  41. Vector4 GUIVector4Field::getValue() const
  42. {
  43. Vector4 value;
  44. value.x = mFieldX->getValue();
  45. value.y = mFieldY->getValue();
  46. value.z = mFieldZ->getValue();
  47. value.w = mFieldW->getValue();
  48. return value;
  49. }
  50. void GUIVector4Field::setValue(const Vector4& value)
  51. {
  52. mFieldX->setValue(value.x);
  53. mFieldY->setValue(value.y);
  54. mFieldZ->setValue(value.z);
  55. mFieldW->setValue(value.w);
  56. }
  57. bool GUIVector4Field::hasInputFocus() const
  58. {
  59. return mFieldX->hasInputFocus() || mFieldY->hasInputFocus() || mFieldZ->hasInputFocus() || mFieldW->hasInputFocus();
  60. }
  61. void GUIVector4Field::setTint(const Color& color)
  62. {
  63. if (mLabel != nullptr)
  64. mLabel->setTint(color);
  65. mFieldX->setTint(color);
  66. mFieldY->setTint(color);
  67. mFieldZ->setTint(color);
  68. mFieldW->setTint(color);
  69. }
  70. void GUIVector4Field::styleUpdated()
  71. {
  72. if (mLabel != nullptr)
  73. mLabel->setStyle(getSubStyleName(getLabelStyleType()));
  74. mFieldX->setStyle(getSubStyleName(getFloatFieldStyleType()));
  75. mFieldY->setStyle(getSubStyleName(getFloatFieldStyleType()));
  76. mFieldZ->setStyle(getSubStyleName(getFloatFieldStyleType()));
  77. mFieldW->setStyle(getSubStyleName(getFloatFieldStyleType()));
  78. }
  79. void GUIVector4Field::valueChanged(float newValue)
  80. {
  81. onValueChanged(getValue());
  82. }
  83. void GUIVector4Field::inputConfirmed()
  84. {
  85. onConfirm();
  86. }
  87. const String& GUIVector4Field::getGUITypeName()
  88. {
  89. static String typeName = "GUIVector4Field";
  90. return typeName;
  91. }
  92. const String& GUIVector4Field::getFloatFieldStyleType()
  93. {
  94. static String LABEL_STYLE_TYPE = "EditorFloatField";
  95. return LABEL_STYLE_TYPE;
  96. }
  97. }