2021-04-10 14:27:04 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include <QTableWidget>
|
2023-01-22 15:57:22 +01:00
|
|
|
#include <QTreeView>
|
2021-04-10 14:27:04 +02:00
|
|
|
#include <QSortFilterProxyModel>
|
2022-04-09 07:10:29 +02:00
|
|
|
#include "util/PgLabTableView.h"
|
2021-12-30 18:54:26 +01:00
|
|
|
#include <optional>
|
|
|
|
|
|
|
|
|
|
class PgDatabaseCatalog;
|
2021-04-10 14:27:04 +02:00
|
|
|
|
2023-01-22 15:57:22 +01:00
|
|
|
template <typename ViewType>
|
|
|
|
|
void ResizeColumnsToContent(ViewType *vt)
|
|
|
|
|
{
|
|
|
|
|
vt->resizeColumnsToContents();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <>
|
|
|
|
|
inline void ResizeColumnsToContent<QTreeView>(QTreeView *)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
template <typename TableModel, typename ViewType = PgLabTableView>
|
2021-04-10 14:27:04 +02:00
|
|
|
class PgLabTableViewHelper {
|
|
|
|
|
public:
|
2022-01-17 17:12:07 +01:00
|
|
|
|
|
|
|
|
PgLabTableViewHelper(QWidget * parent, TableModel *tableModel)
|
2021-04-10 14:27:04 +02:00
|
|
|
{
|
2023-01-22 15:57:22 +01:00
|
|
|
m_tableView = new ViewType(parent);
|
2021-04-10 14:27:04 +02:00
|
|
|
|
2022-01-17 17:12:07 +01:00
|
|
|
m_dataModel = tableModel;
|
2021-04-10 14:27:04 +02:00
|
|
|
m_sortFilter = new QSortFilterProxyModel(parent);
|
|
|
|
|
m_sortFilter->setSourceModel(m_dataModel);
|
2021-12-30 17:50:43 +01:00
|
|
|
m_tableView->setModel(m_sortFilter);
|
2021-04-10 14:27:04 +02:00
|
|
|
m_tableView->setSortingEnabled(true);
|
2022-04-02 13:54:37 +02:00
|
|
|
m_sortFilter->sort(0, Qt::AscendingOrder);
|
2021-04-10 14:27:04 +02:00
|
|
|
}
|
|
|
|
|
|
2022-01-17 17:12:07 +01:00
|
|
|
PgLabTableViewHelper(QWidget * parent)
|
|
|
|
|
: PgLabTableViewHelper(parent, new TableModel(parent))
|
|
|
|
|
{}
|
|
|
|
|
|
2023-01-22 15:57:22 +01:00
|
|
|
ViewType *tableView() const
|
2021-04-10 14:27:04 +02:00
|
|
|
{
|
|
|
|
|
return m_tableView;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TableModel *dataModel() const
|
|
|
|
|
{
|
|
|
|
|
return m_dataModel;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QSortFilterProxyModel *sortFilter() const
|
|
|
|
|
{
|
|
|
|
|
return m_sortFilter;
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-30 18:54:26 +01:00
|
|
|
void setCatalog(std::shared_ptr<PgDatabaseCatalog> cat)
|
|
|
|
|
{
|
|
|
|
|
m_dataModel->setCatalog(cat);
|
2023-01-22 15:57:22 +01:00
|
|
|
ResizeColumnsToContent(m_tableView);
|
2021-12-30 18:54:26 +01:00
|
|
|
}
|
|
|
|
|
|
2022-01-17 17:30:53 +01:00
|
|
|
QModelIndex currentSourceIndex() const
|
2021-12-30 18:54:26 +01:00
|
|
|
{
|
|
|
|
|
QModelIndex index = m_tableView->selectionModel()->currentIndex();
|
|
|
|
|
if (!index.isValid())
|
|
|
|
|
return index;
|
|
|
|
|
|
|
|
|
|
return m_sortFilter->mapToSource(index);
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-22 15:57:22 +01:00
|
|
|
typename TableModel::RowItem rowItemForSourceRow(QModelIndex index) const
|
2021-12-30 18:54:26 +01:00
|
|
|
{
|
2023-01-22 15:57:22 +01:00
|
|
|
return m_dataModel->rowItem(index);
|
2021-12-30 18:54:26 +01:00
|
|
|
}
|
|
|
|
|
|
2022-01-17 17:30:53 +01:00
|
|
|
typename TableModel::RowItem rowItemForProxyIndex(QModelIndex index)
|
|
|
|
|
{
|
|
|
|
|
QModelIndex sourceIndex = m_sortFilter->mapToSource(index);
|
2023-01-22 15:57:22 +01:00
|
|
|
return m_dataModel->rowItem(sourceIndex);
|
2022-01-17 17:30:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
typename TableModel::RowItem rowItemForProxyRow(int row) const
|
|
|
|
|
{
|
|
|
|
|
return rowItemForProxyIndex(m_sortFilter->index(row, 0, QModelIndex()));
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-30 18:54:26 +01:00
|
|
|
std::optional<typename TableModel::RowItem> currentRowItem() const
|
|
|
|
|
{
|
2022-01-17 17:30:53 +01:00
|
|
|
auto index = currentSourceIndex();
|
2021-12-30 18:54:26 +01:00
|
|
|
if (!index.isValid())
|
|
|
|
|
return {};
|
|
|
|
|
|
2023-01-22 15:57:22 +01:00
|
|
|
return rowItemForSourceRow(index);
|
2021-12-30 18:54:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2021-04-10 14:27:04 +02:00
|
|
|
private:
|
2023-01-22 15:57:22 +01:00
|
|
|
ViewType *m_tableView = nullptr;
|
2021-04-10 14:27:04 +02:00
|
|
|
TableModel *m_dataModel = nullptr;
|
|
|
|
|
QSortFilterProxyModel *m_sortFilter = nullptr;
|
|
|
|
|
};
|