The table inheritance works mostly
This commit is contained in:
parent
ccd88d0578
commit
2ff9577d41
22 changed files with 473 additions and 145 deletions
|
|
@ -1,25 +1,51 @@
|
|||
#pragma once
|
||||
|
||||
#include <QTableWidget>
|
||||
#include <QTreeView>
|
||||
#include <QSortFilterProxyModel>
|
||||
#include "util/PgLabItemDelegate.h"
|
||||
#include "util/PgLabTableView.h"
|
||||
#include <optional>
|
||||
|
||||
class PgDatabaseCatalog;
|
||||
|
||||
template <typename TableModel>
|
||||
template <typename ViewType>
|
||||
void ResizeColumnsToContent(ViewType *vt)
|
||||
{
|
||||
vt->resizeColumnsToContents();
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void ResizeColumnsToContent<QTreeView>(QTreeView *)
|
||||
{
|
||||
}
|
||||
|
||||
template <typename ViewType>
|
||||
void InitView(ViewType *vt)
|
||||
{}
|
||||
|
||||
template <>
|
||||
inline void InitView<QTreeView>(QTreeView *tv)
|
||||
{
|
||||
tv->setAlternatingRowColors(true);
|
||||
tv->setItemDelegate(new PgLabItemDelegate(tv));
|
||||
tv->setWordWrap(false);
|
||||
}
|
||||
|
||||
|
||||
template <typename TableModel, typename ViewType = PgLabTableView>
|
||||
class PgLabTableViewHelper {
|
||||
public:
|
||||
|
||||
PgLabTableViewHelper(QWidget * parent, TableModel *tableModel)
|
||||
{
|
||||
m_tableView = new PgLabTableView(parent);
|
||||
|
||||
m_itemView = new ViewType(parent);
|
||||
InitView(m_itemView);
|
||||
m_dataModel = tableModel;
|
||||
m_sortFilter = new QSortFilterProxyModel(parent);
|
||||
m_sortFilter->setSourceModel(m_dataModel);
|
||||
m_tableView->setModel(m_sortFilter);
|
||||
m_tableView->setSortingEnabled(true);
|
||||
m_itemView->setModel(m_sortFilter);
|
||||
m_itemView->setSortingEnabled(true);
|
||||
m_sortFilter->sort(0, Qt::AscendingOrder);
|
||||
}
|
||||
|
||||
|
|
@ -27,9 +53,9 @@ public:
|
|||
: PgLabTableViewHelper(parent, new TableModel(parent))
|
||||
{}
|
||||
|
||||
PgLabTableView *tableView() const
|
||||
ViewType *itemView() const
|
||||
{
|
||||
return m_tableView;
|
||||
return m_itemView;
|
||||
}
|
||||
|
||||
TableModel *dataModel() const
|
||||
|
|
@ -45,27 +71,27 @@ public:
|
|||
void setCatalog(std::shared_ptr<PgDatabaseCatalog> cat)
|
||||
{
|
||||
m_dataModel->setCatalog(cat);
|
||||
m_tableView->resizeColumnsToContents();
|
||||
ResizeColumnsToContent(m_itemView);
|
||||
}
|
||||
|
||||
QModelIndex currentSourceIndex() const
|
||||
{
|
||||
QModelIndex index = m_tableView->selectionModel()->currentIndex();
|
||||
QModelIndex index = m_itemView->selectionModel()->currentIndex();
|
||||
if (!index.isValid())
|
||||
return index;
|
||||
|
||||
return m_sortFilter->mapToSource(index);
|
||||
}
|
||||
|
||||
typename TableModel::RowItem rowItemForSourceRow(int row) const
|
||||
typename TableModel::RowItem rowItemForSourceRow(QModelIndex index) const
|
||||
{
|
||||
return m_dataModel->rowItem(row);
|
||||
return m_dataModel->rowItem(index);
|
||||
}
|
||||
|
||||
typename TableModel::RowItem rowItemForProxyIndex(QModelIndex index)
|
||||
{
|
||||
QModelIndex sourceIndex = m_sortFilter->mapToSource(index);
|
||||
return m_dataModel->rowItem(sourceIndex.row());
|
||||
return m_dataModel->rowItem(sourceIndex);
|
||||
}
|
||||
|
||||
typename TableModel::RowItem rowItemForProxyRow(int row) const
|
||||
|
|
@ -79,12 +105,12 @@ public:
|
|||
if (!index.isValid())
|
||||
return {};
|
||||
|
||||
return rowItemForSourceRow(index.row());
|
||||
return rowItemForSourceRow(index);
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
PgLabTableView *m_tableView = nullptr;
|
||||
ViewType *m_itemView = nullptr;
|
||||
TableModel *m_dataModel = nullptr;
|
||||
QSortFilterProxyModel *m_sortFilter = nullptr;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue