Hasty Badger
Small UI library (a branch of Turbo Badger)
 All Classes Namespaces Functions Variables Enumerations Enumerator Friends Groups Pages
tb_widgets_listener.h
1 // ================================================================================
2 // == This file is a part of Turbo Badger. (C) 2011-2014, Emil SegerÃ¥s ==
3 // == See tb_core.h for more information. ==
4 // ================================================================================
5 
6 #ifndef TB_WIDGETSLISTENER_H
7 #define TB_WIDGETSLISTENER_H
8 
9 #include "tb_core.h"
10 #include "tb_linklist.h"
11 #include "tb_widgets.h"
12 
13 namespace tb {
14 
15 class TBWidget;
16 
20 class TBWidgetListenerGlobalLink : public TBLinkOf<TBWidgetListenerGlobalLink> { };
21 
28 class TBWidgetListener : public TBLinkOf<TBWidgetListener>, public TBWidgetListenerGlobalLink
29 {
30 public:
32  static void AddGlobalListener(TBWidgetListener *listener);
33  static void RemoveGlobalListener(TBWidgetListener *listener);
34 
36  virtual void OnWidgetDelete(TBWidget * /*widget*/) {}
37 
45  virtual bool OnWidgetDying(TBWidget * /*widget*/) { return false; }
46 
49  virtual void OnWidgetAdded(TBWidget * /*parent*/, TBWidget * /*child*/) {}
50 
53  virtual void OnWidgetRemove(TBWidget * /*parent*/, TBWidget * /*child*/) {}
54 
56  virtual void OnWidgetFocusChanged(TBWidget * /*widget*/, bool /*focused*/) {}
57 
61  virtual bool OnWidgetInvokeEvent(TBWidget * /*widget*/, const TBWidgetEvent & /*ev*/) { return false; }
62 private:
63  friend class TBWidget;
64  static void InvokeWidgetDelete(TBWidget *widget);
65  static bool InvokeWidgetDying(TBWidget *widget);
66  static void InvokeWidgetAdded(TBWidget *parent, TBWidget *child);
67  static void InvokeWidgetRemove(TBWidget *parent, TBWidget *child);
68  static void InvokeWidgetFocusChanged(TBWidget *widget, bool focused);
69  static bool InvokeWidgetInvokeEvent(TBWidget *widget, const TBWidgetEvent &ev);
70 };
71 
75 {
76 public:
77  TBWidgetSafePointer() : m_widget(nullptr) { }
78  TBWidgetSafePointer(TBWidget *widget) : m_widget(nullptr) { Set(widget); }
79  ~TBWidgetSafePointer() { Set(nullptr); }
80 
82  void Set(TBWidget *widget);
83 
85  TBWidget *Get() const { return m_widget; }
86 private:
87  virtual void OnWidgetDelete(TBWidget *widget);
88  TBWidget *m_widget;
89 };
90 
91 } // namespace tb
92 
93 #endif // TB_WIDGETSLISTENER_H
void Set(TBWidget *widget)
Set the widget pointer that should be nulled if deleted.
Definition: tb_widgets_listener.cpp:90
virtual bool OnWidgetInvokeEvent(TBWidget *, const TBWidgetEvent &)
Called when a event is about to be invoked on a widget.
Definition: tb_widgets_listener.h:61
virtual void OnWidgetDelete(TBWidget *)
Called when widget is being deleted (in its destructor, so virtual functions are already gone)...
Definition: tb_widgets_listener.h:36
The base TBWidget class.
Definition: tb_widgets.h:418
TBWidgetSafePointer keeps a pointer to a widget that will be set to nullptr if the widget is removed...
Definition: tb_widgets_listener.h:74
TBWidgetListener listens to some callbacks from TBWidget.
Definition: tb_widgets_listener.h:28
Definition: tb_widgets.h:112
virtual bool OnWidgetDying(TBWidget *)
This is called when the widget request to be deleted.
Definition: tb_widgets_listener.h:45
virtual void OnWidgetFocusChanged(TBWidget *, bool)
Called when widget focus has changed on a widget.
Definition: tb_widgets_listener.h:56
TBWidget * Get() const
Return the widget, or nullptr if it has been deleted.
Definition: tb_widgets_listener.h:85
virtual void OnWidgetRemove(TBWidget *, TBWidget *)
Called when the child is about to be removed from parent, after its parents OnChildRemove.
Definition: tb_widgets_listener.h:53
virtual void OnWidgetAdded(TBWidget *, TBWidget *)
Called when the child has been added to parent, after its parents OnChildAdded.
Definition: tb_widgets_listener.h:49
static void AddGlobalListener(TBWidgetListener *listener)
Add a listener to all widgets.
Definition: tb_widgets_listener.cpp:14