The list of tables can now be sorted by either name,schema or schema,name by clicking on the column headers.
This commit is contained in:
parent
5b20f900fc
commit
ec8c3ff5ec
3 changed files with 45 additions and 8 deletions
|
|
@ -27,6 +27,8 @@ TablesPage::TablesPage(MainWindow *parent)
|
||||||
SetTableViewDefault(ui->tableListTable);
|
SetTableViewDefault(ui->tableListTable);
|
||||||
m_tablesModel = new TablesTableModel(this);
|
m_tablesModel = new TablesTableModel(this);
|
||||||
ui->tableListTable->setModel(m_tablesModel);
|
ui->tableListTable->setModel(m_tablesModel);
|
||||||
|
ui->tableListTable->setSortingEnabled(true);
|
||||||
|
ui->tableListTable->sortByColumn(0, Qt::AscendingOrder);
|
||||||
|
|
||||||
SetTableViewDefault(ui->columnsTable);
|
SetTableViewDefault(ui->columnsTable);
|
||||||
m_columnsModel = new ColumnTableModel(this);
|
m_columnsModel = new ColumnTableModel(this);
|
||||||
|
|
|
||||||
|
|
@ -45,15 +45,49 @@ void TablesTableModel::setSortOrder(int so)
|
||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TablesTableModel::doSort(int so)
|
namespace {
|
||||||
|
|
||||||
|
inline bool compareByName(PgClass l, PgClass r)
|
||||||
|
{
|
||||||
|
return l.name < r.name
|
||||||
|
|| (l.name == r.name && l.relnamespace_name < r.relnamespace_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool compareBySchema(PgClass l, PgClass r)
|
||||||
|
{
|
||||||
|
return l.relnamespace_name < r.relnamespace_name
|
||||||
|
|| (l.relnamespace_name == r.relnamespace_name && l.name < r.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void TablesTableModel::sort(int column, Qt::SortOrder order)
|
||||||
{
|
{
|
||||||
if (so == 1)
|
if (column == NameCol) {
|
||||||
std::sort(m_tables.begin(), m_tables.end(),
|
if (order == Qt::AscendingOrder)
|
||||||
[] (auto l, auto r) -> bool { return l.relnamespace_name < r.relnamespace_name
|
std::sort(m_tables.begin(), m_tables.end(), compareByName);
|
||||||
|| (l.relnamespace_name == r.relnamespace_name && l.name < r.name); });
|
else
|
||||||
else
|
std::sort(m_tables.begin(), m_tables.end(), [] (auto l, auto r) { return !compareByName(l, r); });
|
||||||
std::sort(m_tables.begin(), m_tables.end(),
|
}
|
||||||
[] (auto l, auto r) -> bool { return l.name < r.name; });
|
else if (column == NamespaceCol) {
|
||||||
|
if (order == Qt::AscendingOrder)
|
||||||
|
std::sort(m_tables.begin(), m_tables.end(), compareBySchema);
|
||||||
|
else
|
||||||
|
std::sort(m_tables.begin(), m_tables.end(), [] (auto l, auto r) { return !compareBySchema(l, r); });
|
||||||
|
}
|
||||||
|
|
||||||
|
emit layoutChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TablesTableModel::doSort(int )
|
||||||
|
{
|
||||||
|
// if (so == 1)
|
||||||
|
// std::sort(m_tables.begin(), m_tables.end(),
|
||||||
|
// [] (auto l, auto r) -> bool { return l.relnamespace_name < r.relnamespace_name
|
||||||
|
// || (l.relnamespace_name == r.relnamespace_name && l.name < r.name); });
|
||||||
|
// else
|
||||||
|
// std::sort(m_tables.begin(), m_tables.end(),
|
||||||
|
// [] (auto l, auto r) -> bool { return l.name < r.name; });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ public:
|
||||||
|
|
||||||
void setCatalog(std::shared_ptr<const PgDatabaseCatalog> cat);
|
void setCatalog(std::shared_ptr<const PgDatabaseCatalog> cat);
|
||||||
|
|
||||||
|
virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
|
||||||
void setSortOrder(int so);
|
void setSortOrder(int so);
|
||||||
|
|
||||||
// Header:
|
// Header:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue