#include "EditableModelView.hpp" #include #include #include #include #include #include namespace chatterino { 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 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 chatterino