14#ifndef DL_DISABLE_RENDER
51 if(!_vecItemData.empty())
54 for (
auto& iter : vec)
56 _vecItemData.push_back(iter);
68 return _bSelectChange;
75 return _vecSelect.empty() ? -1 : _vecSelect.front();
83 if (i >= _vecItemData.size())
85 return _vecItemData[i];
95 if (i >= _vecItemData.size())
97 return _vecItemData[i];
107 if (i >= _vecItemData.size())
109 return _vecItemData[i];
119 if (i >= _vecItemData.size())
127 _panel->SetOrder(order);
129 for (
Panel* panel : _allItem)
190 _cbItem = std::bind(&ListBox::_cb_default,
191 std::placeholders::_1, std::placeholders::_2);
204 std::vector<Panel*> _allItem;
205 std::list<size_t> _vecSelect;
206 std::function<void(
Panel* item,
Value v)> _cbItem;
207 std::vector<Value> _vecItemData;
217 void _delete_this() {
delete this; }
221 _cptDeleteThis = std::bind(&ListBox::_delete_this,
this);
239 void _limit_select(std::size_t i_select);
242 size_t _calc_scroll()
244 if (_vecItemData.size() <= _num)
248 Float dy = _locItem.GetDy();
251 return (
size_t)((_scroll + 1.0_f) / dy);
253 void _limit_scroll();
254 void _refresh_scroll()
262 _panel->SetSize(
toPosition(_item->GetSize()[0], std::abs(_locItem.GetDy() * _num)));
265 void _refresh_item_pos()
267 for (
size_t i = 0; i < _num; ++i)
269 _allItem[i]->GetCoor()->SetPosition(_locItem.Get(i));
272 void _refresh_item();
273 void _refresh_select();
277 static void _cb_default(Panel* item, Value v);
void PushBack(AnyType any)
添加一个任意对象
static Coor * Create(Coor *parent=nullptr)
void SetElementDataAnchor(const Position &anchor)
Value GetSelectClickDouble()
返回双击选中的数据
bool IsSelectChange()
选中状态变更
void SetScrollK(Float k)
设置滚轮操作倍数
void SetElementDataPos(const Position &offset)
void SetElementDataRunAble(bool able)
void SetOrder(float order)
设置绘制顺序
size_t GetSelectIndex()
返回选中下标
size_t GetSelectIndexClickDouble()
返回双击选中下标
void SetItemCallback(std::function< void(Panel *item, Value v)> func)
static ListBox * Create(Panel *item, size_t num)
创建列表框
void SetBlankShow(bool show)
设置没有的元素显示逻辑
void SetItemData(std::vector< T > &vec)
Value GetSelectClick()
返回单击选中的数据
void SetItemLocator(const Locator &loc)
设置子元素的定位器
Function< std::function< void(float)>, str_uid("SetOrder")> SetOrder
设置order
Function< std::function< dl::Coor *()>, str_uid("GetCoor")> GetCoor
返回坐标系
Function< std::function< void()>, str_uid("Render")> Render
绘制
Function< std::function< void()>, str_uid("DeleteThis")> DeleteThis
删除自身
Function< std::function< void()>, str_uid("Update")> Update
逻辑
constexpr float OffsetOrder(float order, int u=1, int v=0, int w=0)
偏移order
constexpr Array< Position::value_type, N > toPosition(const Array< T, N > &a)
转换到Position,已知长度