mirror of
https://github.com/vcmi/vcmi.git
synced 2025-09-16 09:26:28 +02:00
Fix town building inspector
This commit is contained in:
@@ -172,11 +172,22 @@ void TownBulidingsWidget::addBuildings(const CTown & ctown)
|
|||||||
std::set<BuildingID> TownBulidingsWidget::getBuildingsFromModel(int modelColumn, Qt::CheckState checkState)
|
std::set<BuildingID> TownBulidingsWidget::getBuildingsFromModel(int modelColumn, Qt::CheckState checkState)
|
||||||
{
|
{
|
||||||
std::set<BuildingID> result;
|
std::set<BuildingID> result;
|
||||||
for(int i = 0; i < model.rowCount(); ++i)
|
std::vector<QModelIndex> stack;
|
||||||
|
stack.push_back(QModelIndex());
|
||||||
|
while(!stack.empty())
|
||||||
{
|
{
|
||||||
if(auto * item = model.item(i, modelColumn))
|
auto pindex = stack.back();
|
||||||
if(item->checkState() == checkState)
|
stack.pop_back();
|
||||||
result.emplace(item->data(Qt::UserRole).toInt());
|
for(int i = 0; i < model.rowCount(pindex); ++i)
|
||||||
|
{
|
||||||
|
QModelIndex index = model.index(i, modelColumn, pindex);
|
||||||
|
if(auto * item = model.itemFromIndex(index))
|
||||||
|
if(item->checkState() == checkState)
|
||||||
|
result.emplace(item->data(Qt::UserRole).toInt());
|
||||||
|
index = model.index(i, 0, pindex); //children are linked to first column of the model
|
||||||
|
if(model.hasChildren(index))
|
||||||
|
stack.push_back(index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
Reference in New Issue
Block a user