73 lines
1.6 KiB
C++
73 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include <QTableWidget>
|
|
#include <QSortFilterProxyModel>
|
|
#include "PgLabTableView.h"
|
|
#include <optional>
|
|
|
|
class PgDatabaseCatalog;
|
|
|
|
template <typename TableModel>
|
|
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<PgDatabaseCatalog> 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<typename TableModel::RowItem> 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;
|
|
};
|