Crazy Eddie's GUI System  0.8.7
LayoutContainer.h
1 /***********************************************************************
2  created: 29/7/2010
3  author: Martin Preisler
4 
5  purpose: Defines abstract base class for layout containers
6 *************************************************************************/
7 /***************************************************************************
8  * Copyright (C) 2004 - 2010 Paul D Turner & The CEGUI Development Team
9  *
10  * Permission is hereby granted, free of charge, to any person obtaining
11  * a copy of this software and associated documentation files (the
12  * "Software"), to deal in the Software without restriction, including
13  * without limitation the rights to use, copy, modify, merge, publish,
14  * distribute, sublicense, and/or sell copies of the Software, and to
15  * permit persons to whom the Software is furnished to do so, subject to
16  * the following conditions:
17  *
18  * The above copyright notice and this permission notice shall be
19  * included in all copies or substantial portions of the Software.
20  *
21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
24  * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
25  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
26  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
27  * OTHER DEALINGS IN THE SOFTWARE.
28  ***************************************************************************/
29 #ifndef _CEGUILayoutContainer_h_
30 #define _CEGUILayoutContainer_h_
31 
32 #include "../Window.h"
33 
34 #include <map>
35 
36 #if defined(_MSC_VER)
37 # pragma warning(push)
38 # pragma warning(disable : 4251)
39 #endif
40 
41 // Start of CEGUI namespace section
42 namespace CEGUI
43 {
44 
53 class CEGUIEXPORT LayoutContainer : public Window
54 {
55 public:
56  /*************************************************************************
57  Event name constants
58  *************************************************************************/
60  static const String EventNamespace;
61 
72  LayoutContainer(const String& type, const String& name);
73 
78  virtual ~LayoutContainer(void);
79 
85 
90  bool needsLayouting() const;
91 
96  virtual void layout() = 0;
97 
103  virtual void layoutIfNecessary();
104 
106  virtual void update(float elapsed);
107 
108  virtual const CachedRectf& getClientChildContentArea() const;
109 
110  virtual void notifyScreenAreaChanged(bool recursive);
111 
112 protected:
114  virtual Rectf getUnclippedInnerRect_impl(bool skipAllPixelAlignment) const;
115 
116  Rectf getClientChildContentArea_impl(bool skipAllPixelAlignment) const;
117 
118  size_t getIdxOfChild(Window* wnd) const;
119 
121  virtual void addChild_impl(Element* element);
123  virtual void removeChild_impl(Element* element);
124 
125  /*************************************************************************
126  Event trigger methods
127  *************************************************************************/
137  virtual bool handleChildSized(const EventArgs& e);
138 
148  virtual bool handleChildMarginChanged(const EventArgs& e);
149 
159  virtual bool handleChildAdded(const EventArgs& e);
160 
170  virtual bool handleChildRemoved(const EventArgs& e);
171 
176  virtual UVector2 getOffsetForWindow(Window* window) const;
177 
182  virtual UVector2 getBoundingSizeForWindow(Window* window) const;
183 
184  // overridden from parent class
186 
187  /*************************************************************************
188  Implementation Data
189  *************************************************************************/
190  // if true, we will relayout before rendering of this window starts
191  bool d_needsLayouting;
192 
193  typedef std::multimap<Window*, Event::Connection> ConnectionTracker;
195  ConnectionTracker d_eventConnections;
196 
197  CachedRectf d_clientChildContentArea;
198 };
199 
200 } // End of CEGUI namespace section
201 
202 #if defined(_MSC_VER)
203 # pragma warning(pop)
204 #endif
205 
206 #endif // end of guard _CEGUILayoutContainer_h_
207 
EventArgs based class that is used for objects passed to handlers triggered for events concerning som...
Definition: Element.h:211
A tiny wrapper to hide some of the dirty work of rect caching.
Definition: Element.h:315
A positioned and sized rectangular node in a tree graph.
Definition: Element.h:246
Base class used as the argument to all subscribers Event object.
Definition: EventArgs.h:51
An abstract base class providing common functionality and specifying the required interface for deriv...
Definition: LayoutContainer.h:54
virtual Rectf getUnclippedInnerRect_impl(bool skipAllPixelAlignment) const
Default implementation of function to return Element's inner rect area.
void onParentSized(ElementEventArgs &e)
Handler called when this window's parent window has been resized. If this window is the root / GUI Sh...
virtual void notifyScreenAreaChanged(bool recursive)
Inform the window, and optionally all children, that screen area rectangles have changed.
bool needsLayouting() const
returns true if this layout container will be relayouted before drawing
virtual const CachedRectf & getClientChildContentArea() const
Return a Rect that is used by client child elements as content area.
ConnectionTracker d_eventConnections
Tracks event connections we make.
Definition: LayoutContainer.h:195
virtual void update(float elapsed)
Cause window to update itself and any attached children. Client code does not need to call this metho...
virtual void removeChild_impl(Element *element)
Remove given element from child list.
virtual void layout()=0
(re)layouts all windows inside this layout container immediately
virtual UVector2 getBoundingSizeForWindow(Window *window) const
returns bounding size for window, including margins
void markNeedsLayouting()
marks this layout container for relayouting before drawing
LayoutContainer(const String &type, const String &name)
Constructor for Window base class.
virtual bool handleChildMarginChanged(const EventArgs &e)
Handler called when child window changes margin(s)
virtual bool handleChildSized(const EventArgs &e)
Handler called when child window gets sized.
virtual bool handleChildRemoved(const EventArgs &e)
Handler called when child window gets removed.
virtual void layoutIfNecessary()
(re)layouts all windows inside this layout container if it was marked necessary
virtual ~LayoutContainer(void)
Destructor for Window base class.
virtual UVector2 getOffsetForWindow(Window *window) const
returns margin offset for given window
virtual void addChild_impl(Element *element)
Add given element to child list at an appropriate position.
static const String EventNamespace
Namespace for global events.
Definition: LayoutContainer.h:60
virtual bool handleChildAdded(const EventArgs &e)
Handler called when child window gets added.
String class used within the GUI system.
Definition: String.h:64
An abstract base class providing common functionality and specifying the required interface for deriv...
Definition: Window.h:151
Main namespace for Crazy Eddie's GUI Library.
Definition: arch_overview.dox:1