Spinning Topp Logo BlackTopp Studios
inc
widget.h
1 // © Copyright 2010 - 2016 BlackTopp Studios Inc.
2 /* This file is part of The Mezzanine Engine.
3 
4  The Mezzanine Engine is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  The Mezzanine Engine is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with The Mezzanine Engine. If not, see <http://www.gnu.org/licenses/>.
16 */
17 /* The original authors have included a copy of the license specified above in the
18  'Docs' folder. See 'gpl.txt'
19 */
20 /* We welcome the use of the Mezzanine engine to anyone, including companies who wish to
21  Build professional software and charge for their product.
22 
23  However there are some practical restrictions, so if your project involves
24  any of the following you should contact us and we will try to work something
25  out:
26  - DRM or Copy Protection of any kind(except Copyrights)
27  - Software Patents You Do Not Wish to Freely License
28  - Any Kind of Linking to Non-GPL licensed Works
29  - Are Currently In Violation of Another Copyright Holder's GPL License
30  - If You want to change our code and not add a few hundred MB of stuff to
31  your distribution
32 
33  These and other limitations could cause serious legal problems if you ignore
34  them, so it is best to simply contact us or the Free Software Foundation, if
35  you have any questions.
36 
37  Joseph Toppi - toppij@gmail.com
38  John Blackwood - makoenergy02@gmail.com
39 */
40 #ifndef _uiwidget_h
41 #define _uiwidget_h
42 
43 #include "UI/quadrenderable.h"
44 #include "UI/widgetfactory.h"
45 #include "Input/metacode.h"
46 #include "eventpublisher.h"
47 #include "eventsubscriber.h"
48 
49 namespace Mezzanine
50 {
51  namespace UI
52  {
53  class Button;
54  class RenderableContainer;
55  class GenericWidgetFactory;
56  ///////////////////////////////////////////////////////////////////////////////
57  /// @brief This is the base class for widget specific event arguments.
58  /// @details
59  ///////////////////////////////////////
61  {
62  public:
63  ///////////////////////////////////////////////////////////////////////////////
64  // Public Data Members
65 
66  /// @brief The identification of the source firing this event.
68 
69  ///////////////////////////////////////////////////////////////////////////////
70  // Construction and Destruction
71 
72  /// @brief Class constructor.
73  /// @param Name The name of the event being fired.
74  /// @param Source The identification of the widget firing this event.
75  WidgetEventArguments(const String& Name, const String& Source) :
76  EventArguments(Name), WidgetName(Source) { }
77  /// @brief Class destructor.
78  virtual ~WidgetEventArguments() { }
79 
80  ///////////////////////////////////////////////////////////////////////////////
81  // CountedPtr Functionality
82 
83  /// @copydoc EventArguments::GetMostDerived()
85  { return this; }
86  };//WidgetEventArguments
87  }//UI
88 
89  ///////////////////////////////////////////////////////////////////////////////
90  /// @brief This is a metaprogramming traits class used by WidgetEventArguments.
91  /// @details This is need for an intrusive CountedPtr implementation. Should a working external reference count be made this
92  /// could be dropped in favor of a leaner implementation.
93  ///////////////////////////////////////
94  template <>
95  class ReferenceCountTraits<UI::WidgetEventArguments>
96  {
97  public:
98  /// @brief Typedef communicating the reference count type to be used.
100 
101  /// @brief Method responsible for creating a reference count for a CountedPtr of the templated type.
102  /// @param Target A pointer to the target class that is to be reference counted.
103  /// @return Returns a pointer to a new reference counter for the templated type.
104  static RefCountType* ConstructionPointer(RefCountType* Target)
105  { return Target; }
106 
107  /// @brief Enum used to decide the type of casting to be used by a reference counter of the templated type.
108  enum { IsCastable = CastStatic };
109  };//ReferenceCountTraits<WidgetEventArguments>
110 
111  namespace UI
112  {
113  /// @brief Convenience typedef for passing around WidgetEventArguments.
115 
116  ///////////////////////////////////////////////////////////////////////////////
117  /// @brief This is the base class for all widgets.
118  /// @details A widget is really a mechanism for implementing not-so-generic UI behaviors. They
119  /// are control stuctures allowing UI elements to interact with each other and potentially classes
120  /// outside the UI system(through the event system). @n @n
121  /// This class automatically creates a "Normal" and "Hovered" RenderLayerGroup that are used with
122  /// the events of this class, these groups should be used and additional groups only made for special
123  /// cases. @n @n
124  /// Instances of the Widget base class use the base LayoutStrategy.
125  ///////////////////////////////////////
127  {
128  public:
129  /// @brief Enum describing the current state of the widget.
131  {
132  WS_Untouched = 0,
133  WS_Hovered = 1,
134  WS_Focused = 2,
135  WS_Dragged = 4,
136 
137  WS_Mezzanine_Reserved_1 = 8,
138  WS_Mezzanine_Reserved_2 = 16,
139  WS_Mezzanine_Reserved_3 = 32,
140  WS_Mezzanine_Reserved_4 = 64,
141 
142  WS_User_State_1 = 128,
143  WS_User_State_2 = 256,
144  WS_User_State_3 = 512,
145  WS_User_State_4 = 1024
146  };
147  /// @brief Enum used to conveniently track the pre-made RenderLayerGroups used by Widgets.
149  {
150  WG_Normal = 1,
151  WG_Hovered = 2,
152  WG_Focused = 3,
153  WG_Dragged = 4,
154 
155  WG_Mezzanine_Reserved_1 = 9,
156  WG_Mezzanine_Reserved_2 = 10,
157  WG_Mezzanine_Reserved_3 = 11,
158  WG_Mezzanine_Reserved_4 = 12,
159 
160  WG_User_Group_1 = 17,
161  WG_User_Group_2 = 18,
162  WG_User_Group_3 = 19,
163  WG_User_Group_4 = 20
164  };
165 
166  /// @brief Container class for storing @ref RenderLayerGroup instances in relation to widget states.
167  typedef std::map<UInt32,RenderLayerGroup*> StateLayerGroupMap;
168  /// @brief Iterator type for @ref RenderLayerGroup instances stored in relation to widget states.
169  typedef StateLayerGroupMap::iterator StateLayerGroupIterator;
170  /// @brief Const Iterator type for @ref RenderLayerGroup instances stored in relation to widget states.
171  typedef StateLayerGroupMap::const_iterator ConstStateLayerGroupIterator;
172 
173  /// @brief String containing the type name for this class: "GenericWidget".
174  static const String TypeName;
175  /// @brief Event name for when the mouse enters this widget.
176  static const String EventMouseEnter;
177  /// @brief Event name for when the mouse leaves this widget.
178  static const String EventMouseExit;
179  /// @brief Event name for when the mouse starts dragging this widget.
181  /// @brief Event name for when the mouse stops dragging this widget.
182  static const String EventMouseDragEnd;
183  /// @brief Event name for when this widget gains focus.
184  static const String EventFocusGained;
185  /// @brief Event name for when this widget loses focus.
186  static const String EventFocusLost;
187  /// @brief Event name for when the system locks focus on this widget.
188  static const String EventFocusLocked;
189  /// @brief Event name fow when the system removes the focus lock from this widget.
191  /// @brief Event name for when this widget is switched from being hidden to being shown.
193  /// @brief Event name for when this widget is switched from being shown to being hidden.
195  protected:
196  /// @internal
197  /// @brief Map containing all the RenderLayerGroups bound to specific widget states.
198  StateLayerGroupMap StateGroupBindings;
199  /// @internal
200  /// @brief The child widget of this widget the mouse is over, if any.
202  /// @internal
203  /// @brief UInt32 describing the current state of this widget.
205 
206  /// @copydoc Renderable::ProtoSerializeImpl(XML::Node&) const
207  virtual void ProtoSerializeImpl(XML::Node& SelfRoot) const;
208  /// @copydoc Renderable::ProtoDeSerializeImpl(const XML::Node&)
209  virtual void ProtoDeSerializeImpl(const XML::Node& SelfRoot);
210  /// @internal
211  /// @brief Consumes input for this widget's use.
212  /// @param Code The input to be processed.
213  /// @return Returns true if the input was handled, false otherwise.
214  virtual Boole HandleInputImpl(const Input::MetaCode& Code);
215  /// @internal
216  /// @brief Handles the logic to execute when a child of this widget has it's state updated.
217  /// @param Child A pointer to the child that was updated.
218  /// @param OldState The pre-update state of the child.
219  /// @param NewState The post-update state of the child.
220  virtual void HandleChildStateChangeImpl(Widget* Child, const UInt32& OldState, const UInt32& NewState);
221  /// @internal
222  /// @brief Contains all the common necessary startup initializations for this class.
223  void ConstructWidget();
224  public:
225  /// @brief Blank constructor.
226  /// @param Parent The parent Screen that created this widget.
227  Widget(Screen* Parent);
228  /// @brief Standard initialization constructor.
229  /// @param RendName The name to be given to this widget.
230  /// @param Parent The parent Screen that created this widget.
231  Widget(const String& RendName, Screen* Parent);
232  /// @brief Rect constructor.
233  /// @param RendName The name to be given to this widget.
234  /// @param RendRect The rect describing this widget's transform relative to it's parent.
235  /// @param Parent The parent screen that created this widget.
236  Widget(const String& RendName, const UnifiedRect& RendRect, Screen* Parent);
237  /// @brief XML constructor.
238  /// @param XMLNode The node of the xml document to construct from.
239  /// @param Parent The screen the created Widget will belong to.
240  Widget(const XML::Node& XMLNode, Screen* Parent);
241  /// @brief Standard destructor.
242  virtual ~Widget();
243  //public:
244  ///////////////////////////////////////////////////////////////////////////////
245  // Utility Methods
246 
247  /// @copydoc Renderable::GetRenderableType() const
248  virtual RenderableType GetRenderableType() const;
249  /// @brief Gets the type of widget this is.
250  /// @return Returns a const String reference representing the type of widget this is.
251  virtual const String& GetTypeName() const;
252  /// @brief Gets the result of the last mouse hover check.
253  /// @return Returns whether or not the mouse was hovering over this widget during the last check.
254  virtual Boole IsHovered() const;
255  /// @brief Gets whether or not this widget currently has focus.
256  /// @return True if this widget has focus, false otherwise.
257  virtual Boole HasFocus() const;
258  /// @brief Gets whether or not the system mouse is being dragged over this widget.
259  /// @return Returns true if the mouse is dragging over this widget, false otherwise.
260  virtual Boole IsDragged() const;
261 
262  /// @brief Forces a new state of this Widget.
263  /// @warning Removing any core state flag (Hovered, Dragged, Focused, etc.) can result in some code breaking,
264  /// and won't have their associated events fire. This should primarily be used to add or remove user flags.
265  /// @param NewState The new state to be applied.
266  virtual void ForceState(const UInt32 NewState);
267  /// @brief Gets the current state of this Widget.
268  /// @return Returns a bitfield describing the current state of this Widget.
269  virtual UInt32 GetState() const;
270 
271  ///////////////////////////////////////////////////////////////////////////////
272  // State-LayerGroup Binding Methods
273 
274  /// @brief Binds a RenderLayerGroup to a WidgetState.
275  /// @param BindState The WidgetState to be bound to.
276  /// @param ToBind The RenderLayerGroup to be bound to the specified state.
277  virtual void BindGroupToState(const UInt32 BindState, RenderLayerGroup* ToBind);
278  /// @brief Gets the current RenderLayerGroup bound to a specified WidgetState.
279  /// @param BindState The WidgetState bound to the RenderLayerGroup being retrieved.
280  /// @return Returns a pointer to the RenderLayerGroup bound to the specified WidgetState, or NULL if none are bound.
281  virtual RenderLayerGroup* GetGroupBoundToState(const UInt32 BindState) const;
282  /// @brief Sets the group bound to the specified WidgetState as active.
283  /// @param BindState The WidgetState bound to the RenderLayerGroup being set.
284  /// @return Returns true if the active RenderLayerGroup has changed, false otherwise.
285  virtual Boole SetGroupFromState(const UInt32 BindState);
286 
287  ///////////////////////////////////////////////////////////////////////////////
288  // Fetch Methods
289 
290  /// @brief Gets the hovered sub-widget within this widget, if any.
291  /// @return Returns a pointer to the sub-widget within this widget the mouse is hovering over, or NULL if none.
292  Widget* GetHoveredSubWidget() const;
293  /// @brief Gets a pointer to the Widget at the bottom of the hovered SubWidget chain.
294  /// @return Returns a pointer to the hovered sub-widget of the hovered sub-widget, etc., until you reach the end of the chain.
295  Widget* GetBottomMostHoveredWidget();
296 
297  ///////////////////////////////////////////////////////////////////////////////
298  // Visibility and Priority Methods
299 
300  /// @copydoc Renderable::SetVisible(Boole)
301  virtual void SetVisible(Boole CanSee);
302  /// @copydoc Renderable::GetVisible() const
303  virtual Boole GetVisible() const;
304  /// @copydoc Renderable::IsVisible() const
305  virtual Boole IsVisible() const;
306  /// @copydoc Renderable::Show()
307  virtual void Show();
308  /// @copydoc Renderable::Hide()
309  virtual void Hide();
310 
311  ///////////////////////////////////////////////////////////////////////////////
312  // Serialization
313 
314  /// @copydoc Renderable::ProtoSerializeProperties(XML::Node&) const
315  virtual void ProtoSerializeProperties(XML::Node& SelfRoot) const;
316  /// @brief Convert the state-group bindings of this class to an XML::Node ready for serialization.
317  /// @param SelfRoot The root node containing all the serialized data for this instance.
318  virtual void ProtoSerializeStateGroupBindings(XML::Node& SelfRoot) const;
319  /// @brief Convert the Events of this class to an XML::Node ready for serialization.
320  /// @param SelfRoot The root node containing all the serialized data for this instance.
321  virtual void ProtoSerializeEvents(XML::Node& SelfRoot) const;
322 
323  /// @copydoc Renderable::ProtoDeSerializeProperties(const XML::Node&)
324  virtual void ProtoDeSerializeProperties(const XML::Node& SelfRoot);
325  /// @brief Take the data stored in an XML Node and overwrite the state-group bindings of this object with it.
326  /// @param SelfRoot An XML::Node containing the data to populate this class with.
327  virtual void ProtoDeSerializeStateGroupBindings(const XML::Node& SelfRoot);
328  /// @brief Take the data stored in an XML Node and overwrite the Events of this object with it.
329  /// @param SelfRoot An XML::Node containing the data to populate this class with.
330  virtual void ProtoDeSerializeEvents(const XML::Node& SelfRoot);
331 
332  /// @copydoc Renderable::GetDerivedSerializableName() const
333  virtual String GetDerivedSerializableName() const;
334  /// @copydoc Renderable::GetSerializableName()
335  static String GetSerializableName();
336 
337  ///////////////////////////////////////////////////////////////////////////////
338  // Internal Event Methods
339 
340  /// @brief Self logic to be executed when the mouse cursor enters the bounds of this widget.
341  /// @remarks This method should be exclusively called by the UIManager.
342  virtual void _OnMouseEnter();
343  /// @brief Self logic to be executed when the mouse cursor leaves the bounds of thiw widget.
344  /// @remarks This method should be exclusively called by the UIManager.
345  virtual void _OnMouseExit();
346  /// @brief Self logic to be executed when the mouse cursor starts dragging across the bounds of this widget.
347  /// @remarks This method should be exclusively called by the UIManager.
348  virtual void _OnMouseDragStart();
349  /// @brief Self logic to be executed when the mouse cursor stops dragging across the bounds of this widget.
350  /// @remarks This method should be exclusively called by the UIManager.
351  virtual void _OnMouseDragEnd();
352  /// @brief Self logic to be executed when focus is given to this widget.
353  /// @remarks This method should be exclusively called by the UIManager.
354  virtual void _OnFocusGained();
355  /// @brief Self logic to be executed when focus is removed from this widget.
356  /// @remarks This method should be exclusively called by the UIManager.
357  virtual void _OnFocusLost();
358  /// @brief Self logic to be executed when focus is locked to this widget.
359  /// @remarks This method should be exclusively called by the UIManager.
360  virtual void _OnFocusLocked();
361  /// @brief Self logic to be executed when focus is no longer locked to this widget.
362  /// @remarks This method should be exclusively called by the UIManager.
363  virtual void _OnFocusUnlocked();
364  /// @brief Self logic to be executed when this widget becomes visible.
365  virtual void _OnVisibilityShown();
366  /// @brief Self logic to be executed when this widget becomes invisible.
367  virtual void _OnVisibilityHidden();
368 
369  ///////////////////////////////////////////////////////////////////////////////
370  // Internal Methods
371 
372  /// @internal
373  /// @brief Handles input passed to this widget.
374  /// @note This input will be passed up if not consumed by this widget.
375  /// @param Code The MetaCode to be processed.
376  /// @return Returns true if this input was consumed/handled, false otherwise.
377  virtual Boole _HandleInput(const Input::MetaCode& Code);
378  /// @internal
379  /// @brief Notifies this widget that a child (or grandchild) has had it's state updated.
380  /// @param Child A pointer to the child that was updated.
381  /// @param OldState The pre-update state of the child.
382  /// @param NewState The post-update state of the child.
383  virtual void _NotifyChildStateChange(Widget* Child, const UInt32& OldState, const UInt32& NewState);
384  /// @copydoc EventSubscriber::_NotifyEvent(EventArgumentsPtr Args)
385  virtual void _NotifyEvent(EventArgumentsPtr Args);
386  };//Widget
387 
388  ///////////////////////////////////////////////////////////////////////////////
389  /// @brief This is the factory implementation for generic widgets.
390  /// @details
391  ///////////////////////////////////////
393  {
394  public:
395  /// @brief Class constructor.
397  /// @brief Class destructor.
398  virtual ~GenericWidgetFactory() { }
399 
400  /// @copydoc WidgetFactory::GetWidgetTypeName() const
401  virtual String GetWidgetTypeName() const;
402 
403  /// @brief Creates a new Widget.
404  /// @param RendName The name to be given to the created Widget.
405  /// @param Parent The screen the created Widget will belong to.
406  /// @return Returns a pointer to the created Widget.
407  virtual Widget* CreateWidget(const String& RendName, Screen* Parent);
408  /// @brief Creates a new Widget.
409  /// @param RendName The name to be given to the created Widget.
410  /// @param RendRect The dimensions that will be assigned to the created Widget.
411  /// @param Parent The screen the created Widget will belong to.
412  /// @return Returns a pointer to the created Widget.
413  virtual Widget* CreateWidget(const String& RendName, const UnifiedRect& RendRect, Screen* Parent);
414 
415  /// @copydoc WidgetFactory::CreateWidget(Screen*)
416  virtual Widget* CreateWidget(Screen* Parent);
417  /// @copydoc WidgetFactory::CreateWidget(const String&, const NameValuePairMap&, Screen*)
418  virtual Widget* CreateWidget(const String& RendName, const NameValuePairMap& Params, Screen* Parent);
419  /// @copydoc WidgetFactory::CreateWidget(const String&, const UnifiedRect&, const NameValuePairMap&, Screen*)
420  virtual Widget* CreateWidget(const String& RendName, const UnifiedRect& RendRect, const NameValuePairMap& Params, Screen* Parent);
421  /// @copydoc WidgetFactory::CreateWidget(const XML::Node&, Screen*)
422  virtual Widget* CreateWidget(const XML::Node& XMLNode, Screen* Parent);
423  /// @copydoc WidgetFactory::DestroyWidget(Widget*)
424  virtual void DestroyWidget(Widget* ToBeDestroyed);
425  };//GenericWidgetFactory
426  }//UI
427 }//Mezzanine
428 
429 #endif
GenericWidgetFactory()
Class constructor.
Definition: widget.h:396
static const String EventFocusUnlocked
Event name fow when the system removes the focus lock from this widget.
Definition: widget.h:190
This is the factory implementation for generic widgets.
Definition: widget.h:392
static const String EventMouseDragEnd
Event name for when the mouse stops dragging this widget.
Definition: widget.h:182
static const String TypeName
String containing the type name for this class: "GenericWidget".
Definition: widget.h:174
bool Boole
Generally acts a single bit, true or false.
Definition: datatypes.h:173
StateLayerGroupMap::iterator StateLayerGroupIterator
Iterator type for RenderLayerGroup instances stored in relation to widget states. ...
Definition: widget.h:169
Widget * HoveredSubWidget
The child widget of this widget the mouse is over, if any.
Definition: widget.h:201
static const String EventFocusGained
Event name for when this widget gains focus.
Definition: widget.h:184
UInt32 State
UInt32 describing the current state of this widget.
Definition: widget.h:204
UI::WidgetEventArguments RefCountType
Typedef communicating the reference count type to be used.
Definition: widget.h:99
This is a base class for all classes that subscribe to events.
virtual WidgetEventArguments * GetMostDerived()
Get a pointer to the most Derived type of this instance.
Definition: widget.h:84
A simple reference counting pointer.
Definition: countedptr.h:70
static RefCountType * ConstructionPointer(RefCountType *Target)
Method responsible for creating a reference count for a CountedPtr of the templated type...
Definition: widget.h:104
WidgetState
Enum describing the current state of the widget.
Definition: widget.h:130
WidgetGroupID
Enum used to conveniently track the pre-made RenderLayerGroups used by Widgets.
Definition: widget.h:148
This is the base class for any class that generates and publishes events to subscribers.
static const String EventMouseExit
Event name for when the mouse leaves this widget.
Definition: widget.h:178
const String WidgetName
The identification of the source firing this event.
Definition: widget.h:67
This class represents a 2D rect which can express the size and position of a renderable on screen...
Definition: unifieddim.h:661
static const String EventVisibilityShown
Event name for when this widget is switched from being hidden to being shown.
Definition: widget.h:192
static const String EventFocusLocked
Event name for when the system locks focus on this widget.
Definition: widget.h:188
StateLayerGroupMap::const_iterator ConstStateLayerGroupIterator
Const Iterator type for RenderLayerGroup instances stored in relation to widget states.
Definition: widget.h:171
This is used to deduce at compile if a specific class has built-in reference counting or needs an ext...
Definition: countedptr.h:87
A light-weight handle for manipulating nodes in DOM tree.
Definition: node.h:89
uint32_t UInt32
An 32-bit unsigned integer.
Definition: datatypes.h:126
This is the base class for all widgets.
Definition: widget.h:126
StateLayerGroupMap StateGroupBindings
Map containing all the RenderLayerGroups bound to specific widget states.
Definition: widget.h:198
virtual ~WidgetEventArguments()
Class destructor.
Definition: widget.h:78
A static cast from the pointer as provided with no attempt to calls functions on the pointer target...
Definition: countedptr.h:63
std::map< UInt32, RenderLayerGroup * > StateLayerGroupMap
Container class for storing RenderLayerGroup instances in relation to widget states.
Definition: widget.h:167
This is a common class to represent all possible arguments for a given event that is fired...
CountedPtr< WidgetEventArguments > WidgetEventArgumentsPtr
Convenience typedef for passing around WidgetEventArguments.
Definition: widget.h:114
static const String EventMouseEnter
Event name for when the mouse enters this widget.
Definition: widget.h:176
virtual ~GenericWidgetFactory()
Class destructor.
Definition: widget.h:398
This Determines the kind of user input.
Definition: metacode.h:93
This class stores a group of render layers that can be set to be rendered.
static const String EventMouseDragStart
Event name for when the mouse starts dragging this widget.
Definition: widget.h:180
static const String EventVisibilityHidden
Event name for when this widget is switched from being shown to being hidden.
Definition: widget.h:194
#define MEZZ_LIB
Some platforms require special decorations to denote what is exported/imported in a share library...
static const String EventFocusLost
Event name for when this widget loses focus.
Definition: widget.h:186
The bulk of the engine components go in this namspace.
Definition: actor.cpp:56
This represents a nestable quad for an object in a GUI layout.
std::map< String, String > NameValuePairMap
This is a datatype mostly used for describing settings or parameters that can't be declared in advanc...
Definition: datatypes.h:209
This class is a helper class for creating UI's. It is responsible for storing and keeping track of al...
Definition: screen.h:142
std::string String
A datatype used to a series of characters.
Definition: datatypes.h:159
RenderableType
A small enum to describe the type of renderable this is.
Definition: renderable.h:62
This is a base class for factories that construct the widgets available to the UI subsystem...
Definition: widgetfactory.h:61
WidgetEventArguments(const String &Name, const String &Source)
Class constructor.
Definition: widget.h:75
This is the base class for widget specific event arguments.
Definition: widget.h:60