mirror of
https://github.com/vcmi/vcmi.git
synced 2025-02-03 13:01:33 +02:00
map editor: auto update checkboxes of base/upgrade buildings in TownBulidingsWidget
This commit is contained in:
parent
6ac3752325
commit
4d1c8bb1b7
@ -77,7 +77,7 @@ TownBuildingsWidget::TownBuildingsWidget(CGTownInstance & t, QWidget *parent) :
|
||||
ui->treeView->setModel(&model);
|
||||
//ui->treeView->setColumnCount(3);
|
||||
model.setHorizontalHeaderLabels(QStringList() << QStringLiteral("Type") << QStringLiteral("Enabled") << QStringLiteral("Built"));
|
||||
|
||||
connect(&model, &QStandardItemModel::itemChanged, this, &TownBuildingsWidget::onItemChanged);
|
||||
//setAttribute(Qt::WA_DeleteOnClose);
|
||||
}
|
||||
|
||||
@ -196,12 +196,12 @@ std::set<BuildingID> TownBuildingsWidget::getBuildingsFromModel(int modelColumn,
|
||||
|
||||
std::set<BuildingID> TownBuildingsWidget::getForbiddenBuildings()
|
||||
{
|
||||
return getBuildingsFromModel(1, Qt::Unchecked);
|
||||
return getBuildingsFromModel(Column::ENABLED, Qt::Unchecked);
|
||||
}
|
||||
|
||||
std::set<BuildingID> TownBuildingsWidget::getBuiltBuildings()
|
||||
{
|
||||
return getBuildingsFromModel(2, Qt::Checked);
|
||||
return getBuildingsFromModel(Column::BUILT, Qt::Checked);
|
||||
}
|
||||
|
||||
void TownBuildingsWidget::on_treeView_expanded(const QModelIndex &index)
|
||||
@ -215,6 +215,37 @@ void TownBuildingsWidget::on_treeView_collapsed(const QModelIndex &index)
|
||||
}
|
||||
|
||||
|
||||
void TownBuildingsWidget::setRowColumnCheckState(QStandardItem * item, Column column, Qt::CheckState checkState) {
|
||||
auto sibling = item->model()->sibling(item->row(), column, item->index());
|
||||
model.itemFromIndex(sibling)->setCheckState(checkState);
|
||||
}
|
||||
|
||||
void TownBuildingsWidget::onItemChanged(QStandardItem * item) {
|
||||
disconnect(&model, &QStandardItemModel::itemChanged, this, &TownBuildingsWidget::onItemChanged);
|
||||
auto rowFirstColumnIndex = item->model()->sibling(item->row(), Column::TYPE, item->index());
|
||||
QStandardItem * nextRow = model.itemFromIndex(rowFirstColumnIndex);
|
||||
if (item->checkState() == Qt::Checked) {
|
||||
while (nextRow) {
|
||||
setRowColumnCheckState(nextRow, Column(item->column()), Qt::Checked);
|
||||
if (item->column() == Column::BUILT) {
|
||||
setRowColumnCheckState(nextRow, Column::ENABLED, Qt::Checked);
|
||||
}
|
||||
nextRow = nextRow->parent();
|
||||
|
||||
}
|
||||
}
|
||||
else if (item->checkState() == Qt::Unchecked) {
|
||||
while (nextRow) {
|
||||
setRowColumnCheckState(nextRow, Column(item->column()), Qt::Unchecked);
|
||||
if (item->column() == Column::ENABLED) {
|
||||
setRowColumnCheckState(nextRow, Column::BUILT, Qt::Unchecked);
|
||||
}
|
||||
nextRow = nextRow->child(0, Column::TYPE);
|
||||
}
|
||||
}
|
||||
connect(&model, &QStandardItemModel::itemChanged, this, &TownBuildingsWidget::onItemChanged);
|
||||
}
|
||||
|
||||
TownBuildingsDelegate::TownBuildingsDelegate(CGTownInstance & t): town(t), QStyledItemDelegate()
|
||||
{
|
||||
}
|
||||
|
@ -26,9 +26,13 @@ class TownBuildingsWidget : public QDialog
|
||||
QStandardItem * addBuilding(const CTown & ctown, int bId, std::set<si32> & remaining);
|
||||
|
||||
public:
|
||||
enum Column
|
||||
{
|
||||
TYPE, ENABLED, BUILT
|
||||
};
|
||||
explicit TownBuildingsWidget(CGTownInstance &, QWidget *parent = nullptr);
|
||||
~TownBuildingsWidget();
|
||||
|
||||
|
||||
void addBuildings(const CTown & ctown);
|
||||
std::set<BuildingID> getForbiddenBuildings();
|
||||
std::set<BuildingID> getBuiltBuildings();
|
||||
@ -38,9 +42,12 @@ private slots:
|
||||
|
||||
void on_treeView_collapsed(const QModelIndex &index);
|
||||
|
||||
void onItemChanged(QStandardItem * item);
|
||||
|
||||
private:
|
||||
std::set<BuildingID> getBuildingsFromModel(int modelColumn, Qt::CheckState checkState);
|
||||
|
||||
void setRowColumnCheckState(QStandardItem * item, Column column, Qt::CheckState checkState);
|
||||
|
||||
Ui::TownBuildingsWidget *ui;
|
||||
CGTownInstance & town;
|
||||
mutable QStandardItemModel model;
|
||||
|
Loading…
x
Reference in New Issue
Block a user