16#ifndef DL_DISABLE_RENDER
44 if (String::EqualToLower(str,
"text"))
46 if (String::EqualToLower(str,
"msg_box"))
48 if (String::EqualToLower(str,
"button"))
50 if (String::EqualToLower(str,
"background"))
52 if (String::EqualToLower(str,
"locator"))
54 if (String::EqualToLower(str,
"list_box"))
97 void Add(std::string_view json_path);
131 _posPixel = pos_pixel;
142 _coor->DtPosition(dt);
155 _posScale = pos_scale;
156 _bNeedRefreshPos =
true;
170 _bNeedRefreshPos =
true;
180 _bNeedRefreshLocator =
true;
233 _orderInParent = order_parent;
255 for (
auto& iter : _allEle)
259 comp->Call(i == index);
269 if (index >= _allEle.size())
283 for (
auto& iter : _allEle)
339 if(_node->GetParent())
348 std::vector<Panel*> ret;
349 for (
auto& iter : _node->GetChild())
350 ret.push_back(iter->GetValue());
358 size_t ret = _node->GetChild().size();
361 for (
auto& iter : _node->GetChild())
362 ret += iter->GetValue()->GetChildNum(
true);
372 for (
auto& iter : _node->GetChild())
374 if (iter->GetValue() == child)
392 return vec[i]->GetValue();
412 for (
auto& iter : _allEle)
414 if (
auto comp = iter->Get<
T>())
427 for (
auto& iter : _allEle)
429 if (
auto comp = iter->Get<
T>())
487 return cpt ? cpt->
GetName() :
"";
496 if (index >= _allEle.size())
528 return _coor->GetPosition();
557 for (
auto& iter : _allEle)
559 T* cpt = iter->Cast<
T>();
571 if (
g_factory->GetOrderPickup() < _order)
578 && pos[1] <= size[1])
594 for (
auto& iter : _node->GetChild())
596 Panel* child = iter->GetValue();
661 _orderInParent{ -1 },
663 _bAutoRender{ true },
664 _bNeedRefreshPos{ false },
665 _bNeedRefreshLocator{ false },
666 _bDisableLocator{ false },
697 std::string _debugName;
702 std::vector<Components*> _allEle;
712 bool _bNeedRefreshPos;
713 bool _bNeedRefreshLocator;
714 bool _bDisableLocator;
721 NTree<Panel*>::Node* _node;
742 void _refresh_pos(
const Position& size);
745 void _refresh_size();
747 void _refresh_order();
749 void _update_child();
750 void _render_child();
752 void _update_cpt_drag(Components* cpt);
753 void _update_cpt_radio(Components* cpt);
static Coor * Create(Coor *parent=nullptr)
void DtPosPixel(const Position &dt)
UI::ButtonSprite * ExGetButtonSprite(size_t n=0, bool show_log=true)
void Add(T *p)
添加一个Element
bool IsSelectIndex(size_t index)
index元素是否选中状态
const Locator & GetLocator()
size_t GetClickIndex()
返回被点击的元素
void Update()
执行逻辑 @node 默认情况会自动调用
UI::EditBox * ExGetEditBox(size_t n=0, bool show_log=true)
返回第n个列表框
size_t GetChildNum(bool recursion=false)
返回子panel数量
Panel * GetChildPickup()
返回光标悬停的子panel
void SetLocator(const Locator::SL &sl)
void SetName(std::string_view name)
设置名字
void SetOrder(float order)
设置order
Components * GetSelect()
返回被选中的元素
std::size_t GetIndex()
返回第一个满足条件的组件下标
UI::Text * ExGetText(size_t n=0, bool show_log=true)
返回第n个text
std::string GetClickName()
void SetAutoRender(bool auto_render)
设置是否自动绘制
void AddPanel(Panel *child)
添加子panel
void SetLocator(const Locator &loc)
设置Locator
std::vector< T * > GetElementVector()
返回所有类型的元素
size_t GetDownIndex()
返回被按下的元素
void SetSize(const Position &size)
Panel * GetChildSelect()
返回被选中的子panel
RectF GetRect()
返回所有元素和子节点组成的包围盒
void Render()
执行绘制 @node 默认情况会自动调用
void SetOrderMode(OrderMode mode)
设置order模式
std::vector< Panel * > GetChildAll()
返回子panel
void SetPosPixel(const Position &pos_pixel)
设置 像素位置
void ElementSetSelect(size_t index, bool select)
设置元素是否选中
std::string GetSelectName()
void SetAutoCoor(bool auto_coor)
设置是否自动调整位置
void ExSetString(std::string_view str, size_t n=0)
设置第n个text内容
UI::Button * ExGetButton(size_t n=0, bool show_log=true)
返回第n个按钮
void OnChangeElementData(Components *cpt)
T * GetElement(size_t n=0)
返回第n个元素
void SetDebugName(std::string_view name)
UI::Background * ExGetBackground(size_t n=0, bool show_log=true)
返回第n个bg
Panel * GetParent()
返回父panel
size_t GetSelectIndex()
返回被选中的元素下标
void SetDir(Align::Dir4 dir)
设置朝向,基于Coor旋转,旋转后仍然定位到左上角
void SetAutoRun(bool auto_run)
设置是否自动执行
void DelCpt(Components *cpt)
移除子Element,不删除
void UpdateRadio()
执行逻辑Radio @node 手动调用,把子panel作为radio处理
std::string GetName() const
返回名字
size_t GetChildIndex(Panel *child)
返回子panel下标
void SetChildSelect(Panel *panel)
设置被选中的子panel,可以传空
UI::ButtonSprite9 * ExGetButtonSprite9(size_t n=0, bool show_log=true)
void SetAlign(const Align::Direction2 &hv)
设置 在父节点的对齐
void SetLocator(std::string_view name)
void Del(T *p)
添加一个Element
void SetSelectAll(bool select)
设置所有子元素的选中状态
Position GetParentSize()
返回父节点大小
void SetAutoSize(bool auto_size)
void SetOrderInParent(int order_parent)
设置order
void SetSelect(size_t index)
设置被选中的元素
bool IsPickup()
是否被鼠标选中(任意子元素、子面板被选中)
void Add(std::string_view json_path)
添加多个Element,通过json文件
void SetPickupMode(int mode)
void SetPickupMode(PickupMode mode)
Panel * GetChild(size_t i)
返回子panel
void AddCpt(Components *cpt)
添加一个Element
void SetPosScale(const Position &pos_scale)
设置 比例位置
Components * Get()
返回第一个满足条件的组件
Array< Direction, 2 > Direction2
constexpr Array< T, N > Dir2Offset(const Array< T, N > &size, Dir4 dir)
根据大小和朝向,计算偏移
constexpr Array< T, N > Size2Anchor(const Array< T, N > &size, const Array< Direction, N > &dir)
根据大小和对齐,计算锚点
Variable< std::string, str_uid("CustomName")> CustomName
Function< std::function< bool()>, str_uid("IsPickup")> IsPickup
---------------------------—具体组件----------------------------------—
Function< std::function< void(bool)>, str_uid("SetSelect")> SetSelect
设置是否选择
T * GetN(std::vector< Components * > &vec, size_t n)
从vector<Components*>返回指定类型的第n个元素
Function< std::function< void()>, str_uid("DeleteThis")> DeleteThis
删除自身
T * GetFirst(std::vector< Components * > &vec)
从vector<Components*>返回指定类型的第一个元素
ElementType String2ElementType(std::string_view str)
constexpr Array< Position::value_type, N > toPosition(const Array< T, N > &a)
转换到Position,已知长度
void log_err0(std::string_view str, DL_SOURCE_LOCATION)
constexpr float Z_DEFAULT_PANEL