pgLab/pglab/DatabaseWindow.h
eelke 15bee33076 Made step to remove ASyncWindow in favour of usage of Future and FutureWatcher.
This should allow concurrency in the plugins to be independent from their container.

Contains also some work on the system for registering plugins.
2018-12-30 15:46:15 +01:00

157 lines
3.9 KiB
C++

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "ASyncDBConnection.h"
#include "ConnectionConfig.h"
#include "OpenDatabase.h"
#include <QLabel>
//#include "ASyncWindow.h"
#include <QLabel>
#include <QRunnable>
#include <QSocketNotifier>
#include <memory>
#include <future>
#include "Pgsql_Connection.h"
//#include "QueuedBackgroundTask.h"
#include "ControllableTask.h"
#include <chrono>
#include <deque>
#include <mutex>
#include <QMutex>
#include <QWaitCondition>
#include <QMainWindow>
#include <QFuture>
#include <QFutureWatcher>
namespace Ui {
class MainWindow;
}
namespace Pgsql {
class Connection;
}
class QueryTab;
class MasterController;
class QCloseEvent;
class OpenDatabase;
class PgClass;
class PluginContentWidget;
namespace DatabaseWindow_details {
class DatabaseWindowContentContext;
}
/** This is the class for windows that handle tasks for a specific database/catalog
*
*/
class DatabaseWindow : public QMainWindow {
Q_OBJECT
public:
explicit DatabaseWindow(MasterController *master, QWidget *parent);
~DatabaseWindow();
void setConfig(const ConnectionConfig &config);
std::shared_ptr<OpenDatabase> getDatabase() { return m_database; }
void newCrudPage(const PgClass &table);
void newCodeGenPage(QString query, std::shared_ptr<const Pgsql::Result> dbres);
void setTabCaptionForWidget(QWidget *widget, const QString &caption, const QString &hint);
void setTabIcon(QWidget *widget, const QString &iconname);
private:
Ui::MainWindow *ui;
DatabaseWindow_details::DatabaseWindowContentContext *m_context;
ConnectionConfig m_config;
std::shared_ptr<OpenDatabase> m_database;
MasterController *m_masterController;
PluginContentWidget *m_previousPage = nullptr; ///< tracks which pages buttons were previously being displayed
// class QLoad : public QueuedBackgroundTask {
// public:
// explicit QLoad(ConnectionConfig config, CompletionFunction on_completion)
// : QueuedBackgroundTask(on_completion)
// , m_config(config)
// {}
// OpenDatabase::OpenDatabaseSPtr GetResult()
// {
// if (hasException()) rethrow();
// return result;
// }
// protected:
// OpenDatabase::OpenDatabaseSPtr result;
// virtual void doRun()
// {
// auto res = OpenDatabase::createOpenDatabase(m_config);
// result = res.get();
// }
// private:
// ConnectionConfig m_config;
// };
// std::shared_ptr<QLoad> loader;
class LoadCatalog: public ControllableTask<OpenDatabase::OpenDatabaseSPtr> {
public:
LoadCatalog(ConnectionConfig config)
: m_config(config)
{}
OpenDatabase::OpenDatabaseSPtr run(TaskControl& ) override
{
auto res = OpenDatabase::createOpenDatabase(m_config);
return res.get();
}
private:
ConnectionConfig m_config;
};
QFutureWatcher<LoadCatalog::Result> loadWatcher;
QueryTab *GetActiveQueryTab();
void closeEvent(QCloseEvent *event);
void showEvent(QShowEvent *event);
QueryTab *newSqlPage();
void newCreateTablePage();
/// Called when a newly created page is added to the QTabWidget
void addPage(PluginContentWidget* page, QString caption);
/// Called when a page is completely removed from the QTabWidget
void removePage(PluginContentWidget *page);
void addToolBarButtonsForPage(PluginContentWidget *page);
void removeToolBarButtonsForPage(PluginContentWidget *page);
//class PageData
private slots:
void catalogLoaded();
void on_actionLoad_SQL_triggered();
void on_actionSave_SQL_triggered();
void on_actionExport_data_triggered();
void on_actionClose_triggered();
void on_actionAbout_triggered();
void on_actionSave_SQL_as_triggered();
void on_actionSave_copy_of_SQL_as_triggered();
void on_actionNew_SQL_triggered();
void on_tabWidget_tabCloseRequested(int index);
void on_actionShow_connection_manager_triggered();
void on_actionCopy_triggered();
void on_actionCopy_as_C_string_triggered();
void on_actionCopy_as_raw_Cpp_string_triggered();
void on_tabWidget_currentChanged(int index);
void on_actionGenerate_code_triggered();
};
#endif // MAINWINDOW_H