BsGUIVector4Field.cpp 3.7 KB

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