diff --git a/pglab/IndexModel.cpp b/pglab/IndexModel.cpp index 20343b4..968358a 100644 --- a/pglab/IndexModel.cpp +++ b/pglab/IndexModel.cpp @@ -6,14 +6,22 @@ #include "CustomDataRole.h" void IndexModel::setData(std::shared_ptr cat, const std::optional &table) +{ + if (cat != m_catalog) { + m_catalog = cat; + refreshConnection = connect(m_catalog.get(), &PgDatabaseCatalog::refreshed, this, &IndexModel::refresh); + } + m_table = table; + refresh(); +} + +void IndexModel::refresh() { beginResetModel(); SCOPE_EXIT { endResetModel(); }; - m_catalog = cat; - m_table = table; - if (table) - m_indexes = cat->indexes()->getIndexesForTable(table->oid()); + if (m_table) + m_indexes = m_catalog->indexes()->getIndexesForTable(m_table->oid()); else m_indexes.clear(); } diff --git a/pglab/IndexModel.h b/pglab/IndexModel.h index c238635..677240f 100644 --- a/pglab/IndexModel.h +++ b/pglab/IndexModel.h @@ -57,6 +57,10 @@ private: using t_Indexes = std::vector; t_Indexes m_indexes; + QMetaObject::Connection refreshConnection; + +private slots: + void refresh(); }; #endif // INDEXMODEL_H diff --git a/pglab/widgets/CatalogIndexPage.cpp b/pglab/widgets/CatalogIndexPage.cpp index 25cafec..af5e9f3 100644 --- a/pglab/widgets/CatalogIndexPage.cpp +++ b/pglab/widgets/CatalogIndexPage.cpp @@ -16,6 +16,7 @@ CatalogIndexPage::CatalogIndexPage(QWidget *parent) connect(m_tableView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &CatalogIndexPage::tableView_selectionChanged); + connect(m_indexModel, &IndexModel::modelReset, m_definitionView, &SqlCodePreview::clear); } void CatalogIndexPage::catalogSet() @@ -26,7 +27,6 @@ void CatalogIndexPage::setFilter(const std::optional &cls) { m_indexModel->setData(m_catalog, cls); m_tableView->resizeColumnsToContents(); - m_definitionView->setPlainText({}); } void CatalogIndexPage::tableView_selectionChanged(const QItemSelection &/*selected*/, const QItemSelection &/*deselected*/)