QueryTool now uses the same DataGrid as the CRUD tool.

This commit is contained in:
eelke 2026-10-18 10:29:24 +02:00
parent bbe52c9db8
commit 5e7fb68c55
15 changed files with 135 additions and 203 deletions

View file

@ -3,16 +3,19 @@
#include "CrudModel.h"
#include "CustomDataRole.h"
#include "ResultTableModelUtil.h"
#include "util/PgLabItemDelegate.h"
#include "DataGridWidget.h"
#include "IntegerRange.h"
#include "OpenDatabase.h"
#include "catalog/PgClassContainer.h"
#include "catalog/PgDatabaseCatalog.h"
#include <QDebug>
#include <QHeaderView>
#include <QMenu>
#include <QSortFilterProxyModel>
#include <QMessageBox>
#include <iterator>
#include <set>
#include <QTableView>
CrudTab::CrudTab(IDatabaseWindow *context, QWidget *parent)
@ -24,25 +27,18 @@ CrudTab::CrudTab(IDatabaseWindow *context, QWidget *parent)
m_db = context->openDatabase();
SetTableViewDefault(ui->tableView);
auto delegate = new PgLabItemDelegate(ui->tableView);
ui->tableView->setItemDelegate(delegate);
m_crudModel = new CrudModel(nullptr);
m_SortFilterProxy = new QSortFilterProxyModel(this);
m_SortFilterProxy->setSourceModel(m_crudModel);
m_SortFilterProxy->setSortRole(CustomSortRole);
ui->tableView->setModel(m_SortFilterProxy);
ui->tableView->setSortingEnabled(true);
m_SortFilterProxy->sort(0, Qt::AscendingOrder);
m_grid = new DataGridWidget(this);
ui->verticalLayout->addWidget(m_grid);
m_grid->setSourceModel(m_crudModel);
m_grid->view()->verticalHeader()->setVisible(false);
ui->tableView->setSelectionMode(QAbstractItemView::ExtendedSelection);
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tableView->addAction(ui->actionRemove_rows);
m_grid->view()->setSelectionMode(QAbstractItemView::ExtendedSelection);
m_grid->view()->setSelectionBehavior(QAbstractItemView::SelectRows);
m_grid->view()->addAction(ui->actionRemove_rows);
auto horizontal_header = ui->tableView->horizontalHeader();
auto horizontal_header = m_grid->view()->horizontalHeader();
horizontal_header->setContextMenuPolicy(Qt::ContextMenuPolicy::CustomContextMenu);
connect(horizontal_header, &QHeaderView::customContextMenuRequested,
this, &CrudTab::headerCustomContextMenu);
@ -70,7 +66,7 @@ void CrudTab::refresh()
void CrudTab::on_actionRemove_rows_triggered()
{
std::set<IntegerRange<int>> row_ranges;
auto selection = m_SortFilterProxy->mapSelectionToSource(ui->tableView->selectionModel()->selection());
auto selection = m_grid->proxy()->mapSelectionToSource(m_grid->view()->selectionModel()->selection());
for (auto& range : selection) {
row_ranges.emplace(range.top(), range.height());
}
@ -110,7 +106,7 @@ void CrudTab::headerCustomContextMenu(const QPoint &pos)
if (headerContextMenu)
{
auto horizontal_header = ui->tableView->horizontalHeader();
auto horizontal_header = m_grid->view()->horizontalHeader();
headerContextMenu->popup(horizontal_header->mapToGlobal(pos));
}
}
@ -122,9 +118,9 @@ void CrudTab::gotoColumn(QString column)
auto name = m_crudModel->headerData(i, Qt::Horizontal).toString();
if (name == column)
{
auto index = ui->tableView->currentIndex();
index = ui->tableView->model()->index(index.row(), i);
ui->tableView->setCurrentIndex(index);
auto index = m_grid->view()->currentIndex();
index = m_grid->view()->model()->index(index.row(), i);
m_grid->view()->setCurrentIndex(index);
break;
}
}