created base for all the list based settings
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
#include "editablemodelview.hpp"
|
||||
|
||||
#include <QAbstractTableModel>
|
||||
#include <QHBoxLayout>
|
||||
#include <QHeaderView>
|
||||
#include <QPushButton>
|
||||
#include <QTableView>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
namespace chatterino {
|
||||
namespace widgets {
|
||||
namespace helper {
|
||||
|
||||
EditableModelView::EditableModelView(QAbstractTableModel *_model)
|
||||
: tableView(new QTableView(this))
|
||||
, model(_model)
|
||||
{
|
||||
this->model->setParent(this);
|
||||
this->tableView->setModel(_model);
|
||||
this->tableView->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||
this->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
this->tableView->verticalHeader()->hide();
|
||||
|
||||
// create layout
|
||||
QVBoxLayout *vbox = new QVBoxLayout(this);
|
||||
vbox->addWidget(this->tableView);
|
||||
|
||||
// create button layout
|
||||
QHBoxLayout *buttons = new QHBoxLayout(this);
|
||||
vbox->addLayout(buttons);
|
||||
|
||||
// add
|
||||
QPushButton *add = new QPushButton("Add");
|
||||
buttons->addWidget(add);
|
||||
QObject::connect(add, &QPushButton::clicked, [this] { this->addButtonPressed.invoke(); });
|
||||
|
||||
// remove
|
||||
QPushButton *remove = new QPushButton("Remove");
|
||||
buttons->addWidget(remove);
|
||||
QObject::connect(remove, &QPushButton::clicked, [this] {
|
||||
QModelIndexList list;
|
||||
while ((list = this->getTableView()->selectionModel()->selectedRows(0)).length() > 0) {
|
||||
model->removeRow(list[0].row());
|
||||
}
|
||||
});
|
||||
|
||||
// finish button layout
|
||||
buttons->addStretch(1);
|
||||
}
|
||||
|
||||
void EditableModelView::setTitles(std::initializer_list<QString> titles)
|
||||
{
|
||||
int i = 0;
|
||||
for (const QString &title : titles) {
|
||||
if (this->model->columnCount() == i) {
|
||||
break;
|
||||
}
|
||||
|
||||
this->model->setHeaderData(i++, Qt::Horizontal, title, Qt::DisplayRole);
|
||||
}
|
||||
}
|
||||
|
||||
QTableView *EditableModelView::getTableView()
|
||||
{
|
||||
return this->tableView;
|
||||
}
|
||||
|
||||
QAbstractTableModel *EditableModelView::getModel()
|
||||
{
|
||||
return this->model;
|
||||
}
|
||||
|
||||
} // namespace helper
|
||||
} // namespace widgets
|
||||
} // namespace chatterino
|
||||
@@ -0,0 +1,33 @@
|
||||
#pragma once
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
#include <pajlada/signals/signal.hpp>
|
||||
|
||||
class QAbstractTableModel;
|
||||
class QTableView;
|
||||
|
||||
namespace chatterino {
|
||||
namespace widgets {
|
||||
namespace helper {
|
||||
|
||||
class EditableModelView : public QWidget
|
||||
{
|
||||
public:
|
||||
EditableModelView(QAbstractTableModel *model);
|
||||
|
||||
void setTitles(std::initializer_list<QString> titles);
|
||||
|
||||
QTableView *getTableView();
|
||||
QAbstractTableModel *getModel();
|
||||
|
||||
pajlada::Signals::NoArgSignal addButtonPressed;
|
||||
|
||||
private:
|
||||
QTableView *tableView;
|
||||
QAbstractTableModel *model;
|
||||
};
|
||||
|
||||
} // namespace helper
|
||||
} // namespace widgets
|
||||
} // namespace chatterino
|
||||
Reference in New Issue
Block a user