Use table name as tab text in Browse Data tabs

This uses the name of the selected table for the tab titles in the
Browse Data tabs. When setting a custom tab title that title is
preserved.

See issue #2283.
This commit is contained in:
Martin Kleusberg
2020-08-17 17:14:09 +02:00
parent 73b2a1c23d
commit c96c393df8
4 changed files with 22 additions and 13 deletions

View File

@@ -693,7 +693,7 @@ bool MainWindow::fileClose()
// Reset the table browser of the Browse Data tab
while(ui->tabBrowsers->count())
closeTableBrowserTab(0, true);
newTableBrowserTab(true);
newTableBrowserTab();
TableBrowser* w = qobject_cast<TableBrowser*>(ui->tabBrowsers->currentWidget());
if(w)
w->setEnabled(false);
@@ -2630,7 +2630,7 @@ bool MainWindow::loadProject(QString filename, bool readOnly)
}
if (!currentTable.isEmpty())
newTableBrowserTab(true, currentTable);
newTableBrowserTab(currentTable);
xml.skipCurrentElement();
} else if(xml.name() == "table") {
@@ -2639,7 +2639,7 @@ bool MainWindow::loadProject(QString filename, bool readOnly)
sqlb::ObjectIdentifier table;
table.fromSerialised(xml.attributes().value("table").toString().toStdString());
int tab_index = newTableBrowserTab(true, table);
int tab_index = newTableBrowserTab(table);
ui->tabBrowsers->setTabText(tab_index, title);
xml.skipCurrentElement();
@@ -3118,7 +3118,7 @@ void MainWindow::switchToBrowseDataTab(sqlb::ObjectIdentifier tableToBrowse)
tableToBrowse.setName(ui->dbTreeWidget->model()->data(ui->dbTreeWidget->currentIndex().sibling(ui->dbTreeWidget->currentIndex().row(), DbStructureModel::ColumnName), Qt::EditRole).toString().toStdString());
}
newTableBrowserTab(false, tableToBrowse);
newTableBrowserTab(tableToBrowse);
if (ui->mainTab->indexOf(ui->browser) == -1)
ui->mainTab->addTab(ui->browser, ui->browser->accessibleName());
@@ -3561,18 +3561,18 @@ void MainWindow::closeTableBrowserTab(int index, bool force)
// Don't let an empty tab widget
if(ui->tabBrowsers->count() == 0 && !force)
newTableBrowserTab(true);
newTableBrowserTab();
}
int MainWindow::newTableBrowserTab(bool resetCounter, const sqlb::ObjectIdentifier& tableToBrowse)
int MainWindow::newTableBrowserTab(const sqlb::ObjectIdentifier& tableToBrowse)
{
static int tabNumber = 0;
if(resetCounter)
tabNumber = 0;
// Create and initialise widget
TableBrowser* w = new TableBrowser(&db, this);
connect(w, &TableBrowser::currentTableChanged, [this, w](const sqlb::ObjectIdentifier& table) {
// Only update tab name when no custom name was set
if(!ui->tabBrowsers->tabBar()->tabData(ui->tabBrowsers->indexOf(w)).toBool())
ui->tabBrowsers->setTabText(ui->tabBrowsers->indexOf(w), QString::fromStdString(table.toDisplayString()));
});
w->setStructure(dbStructureModel, tableToBrowse);
w->setEnabled(ui->fileCloseAction->isEnabled());
@@ -3600,7 +3600,7 @@ int MainWindow::newTableBrowserTab(bool resetCounter, const sqlb::ObjectIdentifi
m_currentTabTableModel = w->model();
// Create new tab, add it to the tab widget and select it
int index = ui->tabBrowsers->addTab(w, QIcon(":icons/table"), QString("Browse %1").arg(++tabNumber));
int index = ui->tabBrowsers->addTab(w, QIcon(":icons/table"), QString());
ui->tabBrowsers->setCurrentIndex(index);
return index;
@@ -3625,7 +3625,10 @@ void MainWindow::renameTableBrowserTab(int index)
ui->tabBrowsers->tabText(index));
if(!new_name.isNull()) // Don't do anything if the Cancel button was clicked
{
ui->tabBrowsers->setTabText(index, new_name);
ui->tabBrowsers->tabBar()->setTabData(index, true); // Custom name
}
}
void MainWindow::showContextMenuTableBrowserTabBar(const QPoint& pos)

View File

@@ -208,7 +208,7 @@ private slots:
void renameSqlTab(int index);
void showContextMenuSqlTabBar(const QPoint& pos);
int newTableBrowserTab(bool resetCounter = false, const sqlb::ObjectIdentifier& tableToBrowse = {});
int newTableBrowserTab(const sqlb::ObjectIdentifier& tableToBrowse = {});
void closeTableBrowserTab(int index, bool force = false);
void changeTableBrowserTab(int index);
void renameTableBrowserTab(int index);

View File

@@ -396,6 +396,8 @@ void TableBrowser::setStructure(QAbstractItemModel* model, const sqlb::ObjectIde
clear();
else // Under normal circumstances just select the old table again
ui->comboBrowseTable->setCurrentIndex(old_table_index);
emit currentTableChanged(currentlyBrowsedTableName());
}
QModelIndex TableBrowser::currentIndex() const
@@ -480,6 +482,9 @@ void TableBrowser::updateTable()
if(storedData.columnWidths.empty())
m_columnsResized = false;
// Current table changed
emit currentTableChanged(tablename);
// Build query and apply settings
applyModelSettings(storedData, buildQuery(storedData, tablename));
applyViewportSettings(storedData, tablename);

View File

@@ -91,6 +91,7 @@ signals:
void updatePlot(ExtendedTableWidget* tableWidget, SqliteTableModel* model, BrowseDataTableSettings* settings, bool keepOrResetSelection);
void createView(std::string sql);
void requestFileOpen(QString file);
void currentTableChanged(sqlb::ObjectIdentifier table);
private slots:
void clear();