You.i Engine
YiStreamer.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_STREAMER_H_
3 #define _YI_STREAMER_H_
4 
5 #include "scenetree/YiAABB.h"
7 #include "view/YiSceneView.h"
8 
9 #include <glm/fwd.hpp>
10 
11 class CYILayoutConfig;
12 class CYINodeAdapter;
13 class CYISceneManager;
14 class CYISceneNode;
15 class CYIStreamableView;
16 class CYIStreamerSlots;
17 
37 {
38  friend class CYIStreamerSlots;
39  friend class CYIStreamableView;
40 
41 public:
42  CYIStreamer();
43  virtual ~CYIStreamer();
44 
52  void SetAdapter(std::unique_ptr<CYINodeAdapter> pAdapter);
53 
57  const CYINodeAdapter *GetAdapter() const;
58 
63 
70 
74  bool IsStreamedIn(uint32_t uIndex) const;
75 
79  CYISceneNode *GetStreamedNode(uint32_t uIndex) const;
80 
84  uint32_t GetItemIndex(CYISceneNode *pStreamableItem) const;
85 
86 protected:
92  void Init(CYISceneManager *pSceneManager);
93 
98 
107  virtual void StreamedIn(uint32_t uIndex, CYISceneNode *pStreamedItem);
108 
114  virtual void OnStreamedIn(uint32_t uIndex, CYISceneNode *pStreamedItem);
115 
122  virtual void StreamedOut(uint32_t uIndex, CYISceneNode *pStreamedItem);
123 
127  virtual void OnStreamedOut(uint32_t uIndex, CYISceneNode *pStreamedItem);
128 
134  virtual void InsertItem(uint32_t uIndex, std::unique_ptr<CYISceneNode> pItem) = 0;
135 
143  virtual std::unique_ptr<CYISceneNode> RemoveItem(uint32_t uIndex, CYISceneNode *pItem) = 0;
144 
152  virtual void ReorderItem(uint32_t uFromIndex, uint32_t uToIndex, CYISceneNode *pItem) = 0;
153 
157  virtual bool IsItemInStreamingRegion(CYISceneNode *pItem) const = 0;
158 
164  virtual CYISceneNode *GetItem(uint32_t uIndex) const = 0;
165 
169  virtual bool CanBeStreamedOut(uint32_t uIndex, CYISceneNode *pNode) const = 0;
170 
174  virtual void OnFocusGainedForItem(uint32_t uIndex);
175 
183  virtual void FocusGainedForItem(uint32_t uIndex);
184 
188  virtual void OnFocusLostForItem(uint32_t uIndex);
189 
197  virtual void FocusLostForItem(uint32_t uIndex);
198 
199 private:
200  void CreateItemsFromAdapter();
201  void InsertItemPriv(uint32_t uIndex);
202  void RemoveAllItems();
203  void RemoveItemPriv(uint32_t uIndex);
204  void MoveItemPriv(uint32_t uFromIndex, uint32_t uToIndex);
205  void OnAdapterItemAdded(uint32_t uIndex);
206  void OnAdapterItemRemoved(uint32_t uIndex);
207  void OnAdapterItemMoved(uint32_t uFromIndex, uint32_t uToIndex);
208  void StreamIn(uint32_t uIndex, CYIStreamableView *pView);
209  void StreamOut(uint32_t uIndex, CYIStreamableView *pView);
210  void UpdateAllIndices();
211 
212  std::unique_ptr<CYINodeAdapter> m_pAdapter;
213  CYISceneManager *m_pSceneManager;
214  uint32_t m_uItems;
215  std::unique_ptr<CYIStreamerSlots> m_pSlots;
216 
218 };
219 
224 #endif // _YI_STREAMER_H_
virtual void InsertItem(uint32_t uIndex, std::unique_ptr< CYISceneNode > pItem)=0
virtual void OnFocusGainedForItem(uint32_t uIndex)
virtual void StreamedOut(uint32_t uIndex, CYISceneNode *pStreamedItem)
#define YI_DISALLOW_COPY_AND_ASSIGN(TypeName)
Delete the copy constructor and assignment operator (and consequently the move constructor as well) ...
Definition: YiPredef.h:114
A class that implements a scene node streamer.
Definition: YiStreamer.h:36
Scene trees composed of CYISceneNode objects are registered with the scene manager in order for them ...
Definition: YiSceneManager.h:73
virtual std::unique_ptr< CYISceneNode > RemoveItem(uint32_t uIndex, CYISceneNode *pItem)=0
friend class CYIStreamableView
Definition: YiStreamer.h:39
virtual void StreamedIn(uint32_t uIndex, CYISceneNode *pStreamedItem)
virtual void OnStreamedIn(uint32_t uIndex, CYISceneNode *pStreamedItem)
virtual void OnStreamedOut(uint32_t uIndex, CYISceneNode *pStreamedItem)
virtual void OnFocusLostForItem(uint32_t uIndex)
virtual bool CanBeStreamedOut(uint32_t uIndex, CYISceneNode *pNode) const =0
Provides an interface for supplying and reclaiming nodes to and from CYIStreamer. ...
Definition: YiNodeAdapter.h:31
virtual void FocusGainedForItem(uint32_t uIndex)
FOCUS_ROOT_RULE
Definition: YiFocus.h:60
A scene node is the base type for all nodes which are used by the scene manager; it is an integral pa...
Definition: YiSceneNode.h:114
A class used to hold node-specific layout configuration (such as, for example, Margin).
Definition: YiLayoutConfig.h:24
virtual CYISceneNode * GetItem(uint32_t uIndex) const =0
virtual ~CYIStreamer()
Definition: YiFocus.h:50
bool RequestFocusOnItem(uint32_t uIndex, CYIFocus::FOCUS_DIRECTION eDirection=CYIFocus::FOCUS_FORWARD, CYIFocus::FOCUS_ROOT_RULE eFocusRootRule=CYIFocus::FOCUS_ROOT_DESCENDANTS_UPDATE_CONTEXT, const CYIAABB &previousFocusRect=CYIAABB())
FOCUS_DIRECTION
Definition: YiFocus.h:44
This class represents an Axis-Aligned Bounding Box.
Definition: YiAABB.h:24
void SetAdapter(std::unique_ptr< CYINodeAdapter > pAdapter)
uint32_t GetItemIndex(CYISceneNode *pStreamableItem) const
const CYINodeAdapter * GetAdapter() const
bool IsStreamedIn(uint32_t uIndex) const
virtual void FocusLostForItem(uint32_t uIndex)
friend class CYIStreamerSlots
Definition: YiStreamer.h:38
void UpdateStreamedStateOfAllItems()
virtual void ReorderItem(uint32_t uFromIndex, uint32_t uToIndex, CYISceneNode *pItem)=0
CYISceneNode * GetStreamedNode(uint32_t uIndex) const
void Init(CYISceneManager *pSceneManager)
virtual bool IsItemInStreamingRegion(CYISceneNode *pItem) const =0