The enitities and containers of the catalog now go into catalog subfolder Models go into model
83 lines
2.7 KiB
C++
83 lines
2.7 KiB
C++
#include "ColumnPage.h"
|
|
#include "ResultTableModelUtil.h"
|
|
#include "UserConfiguration.h"
|
|
#include <QTableView>
|
|
#include "catalog/PgClass.h"
|
|
#include "SqlCodePreview.h"
|
|
#include "ColumnTableModel.h"
|
|
#include "CustomFilterSortModel.h"
|
|
#include "CustomDataRole.h"
|
|
#include "PgLabItemDelegate.h"
|
|
#include <QStringBuilder>
|
|
#include <boost/container/flat_set.hpp>
|
|
#include "SqlFormattingUtils.h"
|
|
|
|
ColumnPage::ColumnPage(QWidget *parent)
|
|
: QSplitter(Qt::Vertical, parent)
|
|
{
|
|
m_tableView = new QTableView(this);
|
|
m_definitionView = new SqlCodePreview(this);
|
|
addWidget(m_tableView);
|
|
addWidget(m_definitionView);
|
|
|
|
SetTableViewDefault(m_tableView);
|
|
|
|
m_columnModel = new ColumnTableModel(this);
|
|
m_sortFilterProxy = new CustomFilterSortModel(this);
|
|
m_sortFilterProxy->setSourceModel(m_columnModel);
|
|
m_tableView->setModel(m_sortFilterProxy);
|
|
m_tableView->setSortingEnabled(true);
|
|
m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
|
|
|
|
// With this delegate the coloring of the datatype column doesn't work....
|
|
// auto item_delegate = new PgLabItemDelegate(this);
|
|
// m_tableView->setItemDelegate(item_delegate);
|
|
|
|
//auto icon_delegate = new IconColumnDelegate(this);
|
|
|
|
connect(m_tableView->selectionModel(), &QItemSelectionModel::selectionChanged,
|
|
this, &ColumnPage::tableView_selectionChanged);
|
|
}
|
|
|
|
void ColumnPage::setData(std::shared_ptr<const PgDatabaseCatalog> cat, const std::optional<PgClass> &cls)
|
|
{
|
|
m_catalog = cat;
|
|
m_definitionView->setCatalog(cat);
|
|
m_columnModel->setData(cat, cls);
|
|
m_Class = cls;
|
|
}
|
|
|
|
//void ColumnPage::setFilter(const std::optional<PgClass> &cls)
|
|
//{
|
|
// m_sortFilterProxy->setOidFilterTable(cls ? cls->oid() : InvalidOid, FirstHiddenValue);
|
|
//}
|
|
|
|
void ColumnPage::tableView_selectionChanged(const QItemSelection &/*selected*/, const QItemSelection &/*deselected*/)
|
|
{
|
|
auto&& indexes = m_tableView->selectionModel()->selectedIndexes();
|
|
boost::container::flat_set<int> rijen;
|
|
for (const auto &e : indexes)
|
|
rijen.insert(m_sortFilterProxy->mapToSource(e).row());
|
|
|
|
|
|
QString drops;
|
|
QString addsql;
|
|
auto iter = rijen.begin();
|
|
if (iter != rijen.end()) {
|
|
auto && col = m_columnModel->column(*iter);
|
|
drops = "ALTER TABLE " % m_Class->fullyQualifiedQuotedObjectName() % "\n DROP COLUMN " % quoteIdent(col.name);
|
|
addsql = "ALTER TABLE " % m_Class->fullyQualifiedQuotedObjectName() % "\n ADD COLUMN " % col.columnDefinition(*m_catalog);
|
|
for (++iter; iter != rijen.end(); ++iter) {
|
|
auto && col = m_columnModel->column(*iter);
|
|
drops += ",\n DROP COLUMN " % quoteIdent(col.name);
|
|
addsql += ",\n ADD COLUMN " % col.columnDefinition(*m_catalog);
|
|
}
|
|
drops += ";";
|
|
addsql += ";";
|
|
m_definitionView->setPlainText(drops % "\n\n" % addsql);
|
|
}
|
|
else {
|
|
m_definitionView->setPlainText("");
|
|
}
|
|
|
|
}
|