11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
20PROMEKI_NAMESPACE_BEGIN
30class PaintEvent :
public Event {
33 static const Type Paint;
36 PaintEvent() : Event(Paint) {}
43class ResizeEvent :
public Event {
46 static const Type Resize;
52 ResizeEvent(
const Size2Di32 &size) : Event(Resize), _size(size) {}
55 const Size2Di32 &size()
const {
return _size; }
103class Widget :
public ObjectBase {
104 PROMEKI_OBJECT(Widget, ObjectBase)
110 Widget(ObjectBase *parent =
nullptr);
116 const Rect2Di32 &geometry()
const {
return _geometry; }
119 void setGeometry(
const Rect2Di32 &rect);
122 int x()
const {
return _geometry.x(); }
125 int y()
const {
return _geometry.y(); }
128 int width()
const {
return _geometry.width(); }
131 int height()
const {
return _geometry.height(); }
134 Size2Di32 size()
const {
return Size2Di32(_geometry.width(), _geometry.height()); }
137 const Size2Di32 &minimumSize()
const {
return _minimumSize; }
140 void setMinimumSize(
const Size2Di32 &size) { _minimumSize = size; }
143 const Size2Di32 &maximumSize()
const {
return _maximumSize; }
146 void setMaximumSize(
const Size2Di32 &size) { _maximumSize = size; }
149 SizePolicy sizePolicy()
const {
return _sizePolicy; }
152 void setSizePolicy(SizePolicy policy) { _sizePolicy = policy; }
155 bool isVisible()
const {
return _visible; }
163 bool isEffectivelyVisible()
const;
172 void setVisible(
bool visible);
175 bool isEnabled()
const {
return _enabled; }
178 void setEnabled(
bool enabled) { _enabled = enabled; }
181 FocusPolicy focusPolicy()
const {
return _focusPolicy; }
184 void setFocusPolicy(FocusPolicy policy) { _focusPolicy = policy; }
187 bool hasFocus()
const {
return _focused; }
201 void setFocused(
bool focused) { _focused = focused; }
210 virtual void update();
213 bool isDirty()
const {
return _dirty; }
216 void clearDirty() { _dirty =
false; }
219 Layout *layout()
const {
return _layout; }
222 void setLayout(Layout *layout);
227 Point2Di32 mapToParent(
const Point2Di32 &p)
const;
232 Point2Di32 mapFromParent(
const Point2Di32 &p)
const;
237 Point2Di32 mapToGlobal(
const Point2Di32 &p)
const;
242 Point2Di32 mapFromGlobal(
const Point2Di32 &p)
const;
245 virtual Size2Di32 sizeHint()
const;
248 virtual Size2Di32 minimumSizeHint()
const;
259 void sendEvent(Event *e) { event(e); }
262 PROMEKI_SIGNAL(resized, Size2Di32)
265 PROMEKI_SIGNAL(visibilityChanged,
bool)
269 virtual void paintEvent(PaintEvent *e);
272 virtual void keyPressEvent(KeyEvent *e);
275 virtual void keyReleaseEvent(KeyEvent *e);
278 virtual void mouseEvent(MouseEvent *e);
281 virtual void resizeEvent(ResizeEvent *e);
284 virtual void focusInEvent(Event *e);
287 virtual void focusOutEvent(Event *e);
290 void event(Event *e)
override;
296 Size2Di32 _minimumSize;
297 Size2Di32 _maximumSize = Size2Di32(9999, 9999);
298 SizePolicy _sizePolicy = SizePreferred;
299 FocusPolicy _focusPolicy = NoFocus;
300 bool _visible =
true;
301 bool _enabled =
true;
302 bool _focused =
false;
304 Layout *_layout =
nullptr;