24 mCategoryName(
"Layer"),
25 mSingletonHolder(this)
59 mIsInitialise =
false;
62 void LayerManager::clear()
64 for (
auto& layerNode : mLayerNodes)
75 xml::ElementEnumerator layer = _node->getElementEnumerator();
76 while (layer.next(mCategoryName))
80 if (!layer->findAttribute(
"name", name))
82 MYGUI_LOG(Warning,
"Attribute 'name' not found (file : " << _file <<
")");
86 for (
const auto& item : layers)
88 MYGUI_ASSERT(item->getName() != name,
"Layer '" << name <<
"' already exist (file : " << _file <<
")");
91 std::string_view type = layer->findAttribute(
"type");
92 if (type.empty() && _version <= Version(1, 0))
95 type = overlapped ?
"OverlappedLayer" :
"SharedLayer";
98 ILayer* item = _createLayerObject(type);
99 item->deserialization(layer.current(), _version);
101 layers.push_back(item);
108 ILayer* LayerManager::_createLayerObject(std::string_view _type)
111 MYGUI_ASSERT(
object !=
nullptr,
"factory '" << _type <<
"' is not found");
113 return object->castType<ILayer>();
116 void LayerManager::_unlinkWidget(
Widget* _widget)
124 MYGUI_ASSERT(
nullptr != _item,
"pointer must be valid");
131 for (
auto& layerNode : mLayerNodes)
133 if (_name == layerNode->getName())
141 MYGUI_LOG(Error,
"Layer '" << _name <<
"' is not found");
147 MYGUI_ASSERT(
nullptr != _item,
"pointer must be valid");
153 MYGUI_ASSERT(
nullptr != _item,
"pointer must be valid");
159 return getByName(_name,
false) !=
nullptr;
162 void LayerManager::merge(VectorLayer& _layers)
164 for (
auto& layerNode : mLayerNodes)
166 if (layerNode ==
nullptr)
169 const std::string& name = layerNode->getName();
170 for (
auto& layer : _layers)
172 if (name == layer->getName())
190 mLayerNodes = _layers;
197 ILayer* item = _createLayerObject(_type);
200 mLayerNodes.insert(mLayerNodes.begin() + _index, item);
205 void LayerManager::destroy(
ILayer* _layer)
213 VectorLayer::const_reverse_iterator iter = mLayerNodes.rbegin();
214 while (iter != mLayerNodes.rend())
218 return static_cast<Widget*
>(item);
226 for (
auto& layerNode : mLayerNodes)
228 layerNode->renderToTarget(_target, _update);
234 for (
const auto& layerNode : mLayerNodes)
236 if (_name == layerNode->getName())
239 MYGUI_ASSERT(!_throw,
"Layer '" << _name <<
"' not found");
250 for (
const auto& node : mLayerNodes)
251 node->resizeView(_viewSize);
256 return mLayerNodes.size();
262 return mLayerNodes[_index];
267 return mCategoryName;
#define MYGUI_ASSERT(exp, dest)
#define MYGUI_ASSERT_RANGE(index, size, owner)
#define MYGUI_LOG(level, text)
#define MYGUI_SINGLETON_DEFINITION(ClassName)
void registerFactory(std::string_view _category, std::string_view _type, Delegate::IDelegate *_delegate)
static FactoryManager & getInstance()
void unregisterFactory(std::string_view _category, std::string_view _type)
IObject * createObject(std::string_view _category, std::string_view _type)
const std::string & getName() const
void setName(std::string_view _name)
virtual ILayerItem * getLayerItemByPoint(int _left, int _top) const =0
virtual void attachLayerItem(ILayerItem *_item)=0
virtual ILayerNode * createChildItemNode()=0
void detachFromLayer() override
void upLayerItem() override
void detachFromLayer(Widget *_item)
void upLayerItem(Widget *_item)
ILayer * getLayer(size_t _index) const
const std::string & getCategoryName() const
static std::string_view getClassTypeName()
EnumeratorLayer getEnumerator() const
size_t getLayerCount() const
ILayer * createLayerAt(std::string_view _name, std::string_view _type, size_t _index)
void renderToTarget(IRenderTarget *_target, bool _update)
std::vector< ILayer * > VectorLayer
ILayer * getByName(std::string_view _name, bool _throw=true) const
void resizeView(const IntSize &_viewSize)
void attachToLayerNode(std::string_view _name, Widget *_item)
Widget * getWidgetFromPoint(int _left, int _top) const
Enumerator< VectorLayer > EnumeratorLayer
bool isExist(std::string_view _name) const
void unregisterLoadXmlDelegate(std::string_view _key)
LoadXmlDelegate & registerLoadXmlDelegate(std::string_view _key)
static ResourceManager & getInstance()
bool parseBool(std::string_view _value)
types::TSize< int > IntSize
delegates::DelegateFunction< Args... > * newDelegate(void(*_func)(Args... args))