mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 20:50:06 +00:00
Enable/disable layer move buttons according to selection
This commit is contained in:
parent
ec2663aee6
commit
b45ec9dfa5
3 changed files with 77 additions and 1 deletions
|
|
@ -164,6 +164,18 @@ Qt::DropActions LayerModel::supportedDropActions() const
|
||||||
return Qt::DropAction::MoveAction;
|
return Qt::DropAction::MoveAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool LayerModel::IsMovable(int row) const
|
||||||
|
{
|
||||||
|
bool movable = false;
|
||||||
|
|
||||||
|
if (0 <= row && static_cast<std::size_t>(row) < p->layers_.size())
|
||||||
|
{
|
||||||
|
movable = p->layers_.at(row).movable_;
|
||||||
|
}
|
||||||
|
|
||||||
|
return movable;
|
||||||
|
}
|
||||||
|
|
||||||
QVariant LayerModel::data(const QModelIndex& index, int role) const
|
QVariant LayerModel::data(const QModelIndex& index, int role) const
|
||||||
{
|
{
|
||||||
static const QString enabledString = QObject::tr("Enabled");
|
static const QString enabledString = QObject::tr("Enabled");
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,8 @@ public:
|
||||||
Qt::ItemFlags flags(const QModelIndex& index) const override;
|
Qt::ItemFlags flags(const QModelIndex& index) const override;
|
||||||
Qt::DropActions supportedDropActions() const override;
|
Qt::DropActions supportedDropActions() const override;
|
||||||
|
|
||||||
|
bool IsMovable(int row) const;
|
||||||
|
|
||||||
QVariant data(const QModelIndex& index,
|
QVariant data(const QModelIndex& index,
|
||||||
int role = Qt::DisplayRole) const override;
|
int role = Qt::DisplayRole) const override;
|
||||||
QVariant headerData(int section,
|
QVariant headerData(int section,
|
||||||
|
|
|
||||||
|
|
@ -18,11 +18,14 @@ class LayerDialogImpl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit LayerDialogImpl(LayerDialog* self) :
|
explicit LayerDialogImpl(LayerDialog* self) :
|
||||||
layerModel_ {new model::LayerModel(self)}
|
self_ {self}, layerModel_ {new model::LayerModel(self)}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
~LayerDialogImpl() = default;
|
~LayerDialogImpl() = default;
|
||||||
|
|
||||||
|
void ConnectSignals();
|
||||||
|
|
||||||
|
LayerDialog* self_;
|
||||||
model::LayerModel* layerModel_;
|
model::LayerModel* layerModel_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -49,6 +52,14 @@ LayerDialog::LayerDialog(QWidget* parent) :
|
||||||
QHeaderView::ResizeMode::ResizeToContents);
|
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()
|
LayerDialog::~LayerDialog()
|
||||||
|
|
@ -56,6 +67,57 @@ LayerDialog::~LayerDialog()
|
||||||
delete ui;
|
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 ui
|
||||||
} // namespace qt
|
} // namespace qt
|
||||||
} // namespace scwx
|
} // namespace scwx
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue