mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-21 22:24:07 +01:00
list settings can be reordered now
This commit is contained in:
parent
78532a01ec
commit
d6c3c99605
2 changed files with 79 additions and 9 deletions
|
@ -205,7 +205,9 @@ public:
|
||||||
assert(row >= 0 && row < this->rows_.size() && column >= 0 &&
|
assert(row >= 0 && row < this->rows_.size() && column >= 0 &&
|
||||||
column < this->columnCount_);
|
column < this->columnCount_);
|
||||||
|
|
||||||
return this->rows_[row].items[column]->flags();
|
return this->rows_[row].items[column]->flags() |
|
||||||
|
Qt::ItemFlag::ItemIsDragEnabled |
|
||||||
|
Qt::ItemFlag::ItemIsDropEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStandardItem *getItem(int row, int column)
|
QStandardItem *getItem(int row, int column)
|
||||||
|
@ -239,6 +241,66 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList mimeTypes() const override
|
||||||
|
{
|
||||||
|
return {"chatterino_row_id"};
|
||||||
|
}
|
||||||
|
|
||||||
|
QMimeData *mimeData(const QModelIndexList &list) const
|
||||||
|
{
|
||||||
|
if (list.length() == 1)
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if all indices are in the same row -> single row selected
|
||||||
|
for (auto &&x : list)
|
||||||
|
{
|
||||||
|
if (x.row() != list.first().row())
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto data = new QMimeData;
|
||||||
|
data->setData("chatterino_row_id", QByteArray::number(list[0].row()));
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int /*row*/,
|
||||||
|
int /*column*/, const QModelIndex &parent) override
|
||||||
|
{
|
||||||
|
if (data->hasFormat("chatterino_row_id") &&
|
||||||
|
action & (Qt::DropAction::MoveAction | Qt::DropAction::CopyAction))
|
||||||
|
{
|
||||||
|
int from = data->data("chatterino_row_id").toInt();
|
||||||
|
int to = parent.row();
|
||||||
|
|
||||||
|
if (from < 0 || from > this->vector_->getVector().size() ||
|
||||||
|
to < 0 || to > this->vector_->getVector().size())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (from != to)
|
||||||
|
{
|
||||||
|
auto item = this->vector_->getVector()[from];
|
||||||
|
this->vector_->removeItem(from);
|
||||||
|
this->vector_->insertItem(item, to);
|
||||||
|
}
|
||||||
|
|
||||||
|
// We return false since we remove items ourselves.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Qt::DropActions supportedDropActions() const override
|
||||||
|
{
|
||||||
|
return this->vector_->isSorted()
|
||||||
|
? Qt::DropActions()
|
||||||
|
: Qt::DropAction::CopyAction | Qt::DropAction::MoveAction;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void afterInit()
|
virtual void afterInit()
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,9 +15,12 @@ EditableModelView::EditableModelView(QAbstractTableModel *model)
|
||||||
{
|
{
|
||||||
this->model_->setParent(this);
|
this->model_->setParent(this);
|
||||||
this->tableView_->setModel(model);
|
this->tableView_->setModel(model);
|
||||||
this->tableView_->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
this->tableView_->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||||
this->tableView_->setSelectionBehavior(QAbstractItemView::SelectRows);
|
this->tableView_->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||||
this->tableView_->verticalHeader()->hide();
|
this->tableView_->setDragDropMode(QTableView::DragDropMode::InternalMove);
|
||||||
|
this->tableView_->setDragDropOverwriteMode(false);
|
||||||
|
this->tableView_->setDefaultDropAction(Qt::DropAction::MoveAction);
|
||||||
|
this->tableView_->verticalHeader()->setVisible(false);
|
||||||
|
|
||||||
// create layout
|
// create layout
|
||||||
QVBoxLayout *vbox = new QVBoxLayout(this);
|
QVBoxLayout *vbox = new QVBoxLayout(this);
|
||||||
|
@ -38,12 +41,17 @@ EditableModelView::EditableModelView(QAbstractTableModel *model)
|
||||||
QPushButton *remove = new QPushButton("Remove");
|
QPushButton *remove = new QPushButton("Remove");
|
||||||
buttons->addWidget(remove);
|
buttons->addWidget(remove);
|
||||||
QObject::connect(remove, &QPushButton::clicked, [this] {
|
QObject::connect(remove, &QPushButton::clicked, [this] {
|
||||||
QModelIndexList list;
|
auto selected = this->getTableView()->selectionModel()->selectedRows(0);
|
||||||
while ((list = this->getTableView()->selectionModel()->selectedRows(0))
|
|
||||||
.length() > 0)
|
// Remove rows backwards so indices don't shift.
|
||||||
{
|
std::vector<int> rows;
|
||||||
model_->removeRow(list[0].row());
|
for (auto &&index : selected)
|
||||||
}
|
rows.push_back(index.row());
|
||||||
|
|
||||||
|
std::sort(rows.begin(), rows.end(), std::greater{});
|
||||||
|
|
||||||
|
for (auto &&row : rows)
|
||||||
|
model_->removeRow(row);
|
||||||
});
|
});
|
||||||
|
|
||||||
buttons->addStretch();
|
buttons->addStretch();
|
||||||
|
|
Loading…
Reference in a new issue