#pragma once #include #include #include "PgLabTableView.h" #include class PgDatabaseCatalog; template class PgLabTableViewHelper { public: PgLabTableViewHelper(QWidget * parent) { m_tableView = new PgLabTableView(parent); m_dataModel = new TableModel(parent); m_sortFilter = new QSortFilterProxyModel(parent); m_sortFilter->setSourceModel(m_dataModel); m_tableView->setModel(m_sortFilter); m_tableView->setSortingEnabled(true); } 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 currentIndex() const { QModelIndex index = m_tableView->selectionModel()->currentIndex(); if (!index.isValid()) return index; return m_sortFilter->mapToSource(index); } typename TableModel::RowItem rowItem(int row) const { return m_dataModel->rowItem(row); } std::optional currentRowItem() const { auto index = currentIndex(); if (!index.isValid()) return {}; return rowItem(index.row()); } private: PgLabTableView *m_tableView = nullptr; TableModel *m_dataModel = nullptr; QSortFilterProxyModel *m_sortFilter = nullptr; };