#pragma once #include #include #include "util/PgLabTableView.h" #include class PgDatabaseCatalog; template class PgLabTableViewHelper { public: PgLabTableViewHelper(QWidget * parent, TableModel *tableModel) { m_tableView = new PgLabTableView(parent); m_dataModel = tableModel; m_sortFilter = new QSortFilterProxyModel(parent); m_sortFilter->setSourceModel(m_dataModel); m_tableView->setModel(m_sortFilter); m_tableView->setSortingEnabled(true); m_sortFilter->sort(0, Qt::AscendingOrder); } PgLabTableViewHelper(QWidget * parent) : PgLabTableViewHelper(parent, new TableModel(parent)) {} PgLabTableView *tableView() const { return m_tableView; } TableModel *dataModel() const { return m_dataModel; } QSortFilterProxyModel *sortFilter() const { return m_sortFilter; } void setCatalog(std::shared_ptr cat) { m_dataModel->setCatalog(cat); m_tableView->resizeColumnsToContents(); } QModelIndex currentSourceIndex() const { QModelIndex index = m_tableView->selectionModel()->currentIndex(); if (!index.isValid()) return index; return m_sortFilter->mapToSource(index); } typename TableModel::RowItem rowItemForSourceRow(int row) const { return m_dataModel->rowItem(row); } typename TableModel::RowItem rowItemForProxyIndex(QModelIndex index) { QModelIndex sourceIndex = m_sortFilter->mapToSource(index); return m_dataModel->rowItem(sourceIndex.row()); } typename TableModel::RowItem rowItemForProxyRow(int row) const { return rowItemForProxyIndex(m_sortFilter->index(row, 0, QModelIndex())); } std::optional currentRowItem() const { auto index = currentSourceIndex(); if (!index.isValid()) return {}; return rowItemForSourceRow(index.row()); } private: PgLabTableView *m_tableView = nullptr; TableModel *m_dataModel = nullptr; QSortFilterProxyModel *m_sortFilter = nullptr; };