Enable/disable layer move buttons according to selection

This commit is contained in:
Dan Paulat 2023-10-15 22:23:39 -05:00
parent ec2663aee6
commit b45ec9dfa5
3 changed files with 77 additions and 1 deletions

View file

@ -18,11 +18,14 @@ class LayerDialogImpl
{
public:
explicit LayerDialogImpl(LayerDialog* self) :
layerModel_ {new model::LayerModel(self)}
self_ {self}, layerModel_ {new model::LayerModel(self)}
{
}
~LayerDialogImpl() = default;
void ConnectSignals();
LayerDialog* self_;
model::LayerModel* layerModel_;
};
@ -49,6 +52,14 @@ LayerDialog::LayerDialog(QWidget* parent) :
QHeaderView::ResizeMode::ResizeToContents);
}
}
// Disable move buttons
ui->moveTopButton->setEnabled(false);
ui->moveUpButton->setEnabled(false);
ui->moveDownButton->setEnabled(false);
ui->moveBottomButton->setEnabled(false);
p->ConnectSignals();
}
LayerDialog::~LayerDialog()
@ -56,6 +67,57 @@ LayerDialog::~LayerDialog()
delete ui;
}
void LayerDialogImpl::ConnectSignals()
{
QObject::connect(
self_->ui->layerTreeView->selectionModel(),
&QItemSelectionModel::selectionChanged,
self_,
[this](const QItemSelection& /* selected */,
const QItemSelection& /* deselected */)
{
QModelIndexList selectedRows =
self_->ui->layerTreeView->selectionModel()->selectedRows();
bool itemsSelected = selectedRows.size() > 0;
bool itemsMovableUp = itemsSelected;
bool itemsMovableDown = itemsSelected;
int rowCount = layerModel_->rowCount();
for (auto& rowIndex : selectedRows)
{
int row = rowIndex.row();
if (!layerModel_->IsMovable(row))
{
// If an item in the selection is not movable, disable all moves
itemsMovableUp = false;
itemsMovableDown = false;
break;
}
else
{
// If the first row is selected, items cannot be moved up
if (row == 0)
{
itemsMovableUp = false;
}
// If the last row is selected, items cannot be moved down
if (row == rowCount - 1)
{
itemsMovableDown = false;
}
}
}
// Enable move buttons according to selection
self_->ui->moveTopButton->setEnabled(itemsMovableUp);
self_->ui->moveUpButton->setEnabled(itemsMovableUp);
self_->ui->moveDownButton->setEnabled(itemsMovableDown);
self_->ui->moveBottomButton->setEnabled(itemsMovableDown);
});
}
} // namespace ui
} // namespace qt
} // namespace scwx