diff --git a/pglab/DatabaseWindow.cpp b/pglab/DatabaseWindow.cpp index 21c949f..10053e3 100644 --- a/pglab/DatabaseWindow.cpp +++ b/pglab/DatabaseWindow.cpp @@ -9,6 +9,7 @@ #include "TaskExecutor.h" #include #include +#include #include #include #include @@ -30,9 +31,6 @@ DatabaseWindow::DatabaseWindow(MasterController *master, QWidget *parent) : QMainWindow(parent) , m_masterController(master) { - connect(&loadWatcher, &QFutureWatcher::finished, - this, &DatabaseWindow::catalogLoaded); - m_tabWidget = new QTabWidget(this); m_tabWidget->setObjectName("m_tabWidget"); setCentralWidget(m_tabWidget); @@ -107,8 +105,15 @@ void DatabaseWindow::setConfig(const ConnectionConfig &config) title += m_config.name(); setWindowTitle(title); - auto f = TaskExecutor::run(new LoadCatalog(m_config)); - loadWatcher.setFuture(f); + auto cfg = m_config; + auto qthis = QPointer(this); + QtConcurrent::run([cfg] { + return OpenDatabase::createOpenDatabase(cfg); + }).then(qApp, [qthis](OpenDatabase::OpenDatabaseSPtr db) { + if (qthis) { + qthis.data()->catalogLoaded(db); + } + }); } catch (std::runtime_error &ex) { QMessageBox::critical(this, "Error reading database", @@ -316,15 +321,10 @@ void DatabaseWindow::openSqlFile(QString file_name) } -void DatabaseWindow::catalogLoaded() +void DatabaseWindow::catalogLoaded(OpenDatabase::OpenDatabaseSPtr db) { try { - m_database = loadWatcher.future().result(); - - // for (auto f : { "user", "pg_catalog", "information_schema" }) { - // // TODO open inspector windows - // } - // newCreateTablePage(); + m_database = db; actionNewSql_triggered(); } catch (const OpenDatabaseException &ex) { QMessageBox::critical(this, "Error reading database", ex.text()); diff --git a/pglab/DatabaseWindow.h b/pglab/DatabaseWindow.h index 95e908a..c1fa73f 100644 --- a/pglab/DatabaseWindow.h +++ b/pglab/DatabaseWindow.h @@ -7,7 +7,6 @@ #include "Pgsql_Connection.h" #include "ControllableTask.h" #include "IDatabaseWindow.h" -#include #include #include @@ -100,24 +99,6 @@ private: QMenu *menuCrud = nullptr; QMenu *menuWindow = nullptr; - - class LoadCatalog: public ControllableTask { - public: - LoadCatalog(ConnectionConfig config) - : m_config(config) - {} - - OpenDatabase::OpenDatabaseSPtr run(TaskControl& ) override - { - return OpenDatabase::createOpenDatabase(m_config); - } - - private: - ConnectionConfig m_config; - }; - - QFutureWatcher loadWatcher; - void createActions(); void initMenus(); @@ -139,10 +120,8 @@ private: QAction* createAction(QString caption, void (DatabaseWindow::*func)()); private slots: - void catalogLoaded(); + void catalogLoaded(OpenDatabase::OpenDatabaseSPtr db); void tableSelected(Oid tableoid); - // void tabWidget_tabCloseRequested(int index); - // void tabWidget_currentChanged(int index); void actionAbout_triggered(); void actionCancelQuery_triggered();