Remove filter widgets when the table is empty

Instead of hiding them, which had some noticeable glitches.

See comments in issue #2188.
This commit is contained in:
mgrojo
2020-08-07 22:22:34 +02:00
parent 8503184524
commit 0e1eb7db78
3 changed files with 10 additions and 13 deletions

View File

@@ -128,13 +128,3 @@ void FilterTableHeader::setFilter(size_t column, const QString& value)
if(column < filterWidgets.size())
filterWidgets.at(column)->setText(value);
}
void FilterTableHeader::setFiltersVisible(bool visible)
{
// Loop through all widgets
for(size_t i=0; i < filterWidgets.size(); ++i)
{
// Get the current widget, and set it visible or not
filterWidgets.at(i)->setVisible(visible);
}
}

View File

@@ -15,7 +15,6 @@ public:
explicit FilterTableHeader(QTableView* parent = nullptr);
QSize sizeHint() const override;
bool hasFilters() const {return (filterWidgets.size() > 0);}
void setFiltersVisible(bool visible);
public slots:
void generateFilters(size_t number, bool showFirst = false);

View File

@@ -691,8 +691,16 @@ void TableBrowser::updateRecordsetLabel()
enableEditing(m_model->rowCountAvailable() != SqliteTableModel::RowCount::Unknown && is_table_or_unlocked_view);
// Show filters unless the table is empty
const bool filtersVisible = m_model->rowCount() > 0 || m_model->filterCount() != 0;
qobject_cast<FilterTableHeader*>(ui->dataTable->horizontalHeader())->setFiltersVisible(filtersVisible);
const bool needs_filters = total > 0 || m_model->filterCount() > 0;
FilterTableHeader* header = qobject_cast<FilterTableHeader*>(ui->dataTable->horizontalHeader());
if(header) {
if(needs_filters && !header->hasFilters()) {
generateFilters();
ui->dataTable->adjustSize();
} else if(!needs_filters && header->hasFilters()) {
header->generateFilters(0);
}
}
}
sqlb::Query TableBrowser::buildQuery(const BrowseDataTableSettings& storedData, const sqlb::ObjectIdentifier& tablename) const