UIWidget.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #pragma once
  2. #include <ThirdParty/TurboBadger/tb_widgets.h>
  3. #include "../Core/Object.h"
  4. #include "UIPreferredSize.h"
  5. #include "UIDragObject.h"
  6. namespace Atomic
  7. {
  8. /// Defines widget visibility, used with UIWidget::SetVisibility.
  9. enum UI_WIDGET_VISIBILITY
  10. {
  11. /// Visible (default)
  12. UI_WIDGET_VISIBILITY_VISIBLE = tb:: WIDGET_VISIBILITY_VISIBLE,
  13. /// Invisible, but layouted. Interaction disabled.
  14. UI_WIDGET_VISIBILITY_INVISIBLE = tb::WIDGET_VISIBILITY_INVISIBLE,
  15. /// Invisible and no layout. Interaction disabled.
  16. UI_WIDGET_VISIBILITY_GONE = tb::WIDGET_VISIBILITY_GONE
  17. };
  18. /// TBWidget gravity (may be combined).
  19. /// Gravity gives hints about positioning and sizing preferences.
  20. enum UI_GRAVITY {
  21. UI_GRAVITY_NONE = tb::WIDGET_GRAVITY_NONE,
  22. UI_GRAVITY_LEFT = tb::WIDGET_GRAVITY_LEFT,
  23. UI_GRAVITY_RIGHT = tb::WIDGET_GRAVITY_RIGHT,
  24. UI_GRAVITY_TOP = tb::WIDGET_GRAVITY_TOP,
  25. UI_GRAVITY_BOTTOM = tb::WIDGET_GRAVITY_BOTTOM,
  26. UI_GRAVITY_LEFT_RIGHT = tb::WIDGET_GRAVITY_LEFT_RIGHT,
  27. UI_GRAVITY_TOP_BOTTOM = tb::WIDGET_GRAVITY_TOP_BOTTOM,
  28. UI_GRAVITY_ALL = tb::WIDGET_GRAVITY_ALL,
  29. UI_GRAVITY_DEFAULT = tb::WIDGET_GRAVITY_DEFAULT
  30. };
  31. class UILayoutParams;
  32. class UIFontDescription;
  33. /// Wraps a TurboBadger widget in our Object model
  34. class UIWidget : public Object, public tb::TBWidgetDelegate
  35. {
  36. friend class UI;
  37. OBJECT(UIWidget)
  38. public:
  39. UIWidget(Context* context, bool createWidget = true);
  40. virtual ~UIWidget();
  41. bool Load(const String& filename);
  42. const String& GetId();
  43. UIWidget* GetParent();
  44. UIWidget* GetContentRoot();
  45. IntRect GetRect();
  46. UIPreferredSize* GetPreferredSize();
  47. void SetRect(IntRect r);
  48. void SetSize(int width, int height);
  49. void SetPosition(int x, int y);
  50. void SetText(const String& text);
  51. void SetSkinBg(const String& id);
  52. void SetLayoutParams(UILayoutParams* params);
  53. void SetFontDescription(UIFontDescription* fd);
  54. void RemoveChild(UIWidget* child, bool cleanup = true);
  55. void DeleteAllChildren();
  56. // String ID
  57. virtual void SetId(const String& id);
  58. void Center();
  59. void SetGravity(UI_GRAVITY gravity);
  60. void SetValue(double value);
  61. double GetValue();
  62. void SetFocus();
  63. void SetState(/*WIDGET_STATE*/ unsigned state, bool on);
  64. bool GetState(/*WIDGET_STATE*/ unsigned state);
  65. void SetVisibility(UI_WIDGET_VISIBILITY visibility);
  66. UI_WIDGET_VISIBILITY GetVisibility();
  67. void SetStateRaw(/*WIDGET_STATE*/ unsigned state);
  68. /*WIDGET_STATE*/ unsigned GetStateRaw();
  69. void Invalidate();
  70. void Die();
  71. void SetDragObject(UIDragObject* object) { dragObject_ = object; }
  72. UIDragObject* GetDragObject() { return dragObject_; }
  73. UIWidget* GetFirstChild();
  74. UIWidget* GetNext();
  75. void SetIsFocusable(bool value);
  76. // get this or child widget with id
  77. UIWidget* GetWidget(const String& id);
  78. virtual void AddChild(UIWidget* child);
  79. tb::TBWidget* GetInternalWidget() { return widget_; }
  80. protected:
  81. void ConvertEvent(UIWidget* handler, UIWidget* target, const tb::TBWidgetEvent &ev, VariantMap& data);
  82. void SetWidget(tb::TBWidget* widget);
  83. virtual bool OnEvent(const tb::TBWidgetEvent &ev);
  84. virtual void OnDelete();
  85. String id_;
  86. tb::TBWidget* widget_;
  87. SharedPtr<UIPreferredSize> preferredSize_;
  88. SharedPtr<UIDragObject> dragObject_;
  89. };
  90. }