mirror-chatterino2/src/widgets/helper/editablemodelview.cpp
2018-05-06 15:39:03 +02:00

77 lines
2 KiB
C++

#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->setMargin(0);
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