Made a step in removing knowledge of DatabaseWindow from QueryTab as an effort to move

in the direction of a plugin system.

DatabaseWindow now passes a Context to QueryTab and other pages that give those pages an
API for passing information up the system without knowing anything about the sytem.
This commit is contained in:
eelke 2018-12-29 18:59:54 +01:00
parent f6ea2ce0a6
commit 2a7e505dbf
13 changed files with 220 additions and 113 deletions

View file

@ -15,19 +15,18 @@
#include <QClipboard>
#include "ExplainTreeModelItem.h"
#include "json/json.h"
#include "DatabaseWindow.h"
#include "OpenDatabase.h"
#include "catalog/PgDatabaseCatalog.h"
#include "QueryParamListController.h"
#include "util.h"
#include "GlobalIoService.h"
#include "UserConfiguration.h"
#include "IPluginContentWidgetContext.h"
QueryTab::QueryTab(DatabaseWindow *win, QWidget *parent) :
PlgPage(parent),
ui(new Ui::QueryTab),
m_win(win),
m_dbConnection(*getGlobalAsioIoService())
QueryTab::QueryTab(IPluginContentWidgetContext *context_, QWidget *parent)
: PluginContentWidget(context_, parent)
, ui(new Ui::QueryTab)
, m_dbConnection(*getGlobalAsioIoService())
{
ui->setupUi(this);
@ -37,7 +36,7 @@ QueryTab::QueryTab(DatabaseWindow *win, QWidget *parent) :
ui->queryEdit->setFont(UserConfiguration::instance()->codeFont());
highlighter = new SqlSyntaxHighlighter(ui->queryEdit->document());
auto open_database = m_win->getDatabase();
auto open_database = context()-> getDatabase();
if (open_database) {
auto cat = open_database->catalog();
highlighter->setTypes(*cat->types());
@ -64,7 +63,7 @@ void QueryTab::setConfig(const ConnectionConfig &config,
{
m_config = config;
m_catalog = cat;
m_win->QueueTask([this]() { startConnect(); });
context()->QueueTask([this]() { startConnect(); });
}
bool QueryTab::canClose()
@ -160,7 +159,7 @@ void QueryTab::execute()
auto cb = [this](Expected<std::shared_ptr<Pgsql::Result>> res, qint64 elapsedms)
{
m_win->QueueTask([this, res, elapsedms]() { query_ready(res, elapsedms); });
context()->QueueTask([this, res, elapsedms]() { query_ready(res, elapsedms); });
};
if (m_queryParamListController->empty())
@ -203,7 +202,7 @@ void QueryTab::explain(bool analyze)
explain = ExplainRoot::createFromJson(root);
}
}
m_win->QueueTask([this, explain]() { explain_ready(explain); });
context()->QueueTask([this, explain]() { explain_ready(explain); });
}).detach();
}
}
@ -226,7 +225,7 @@ void QueryTab::setFileName(const QString &filename)
m_fileName = filename;
QFileInfo fileInfo(filename);
QString fn(fileInfo.fileName());
setTabCaption(fn, m_fileName);
context()->setCaption(this, fn, m_fileName);
}
bool QueryTab::continueWithoutSavingWarning()
@ -285,27 +284,23 @@ void QueryTab::queryTextChanged()
void QueryTab::connectionStateChanged(ASyncDBConnection::State state)
{
QTabWidget *tabwidget = getTabWidget();
if (tabwidget) {
int i = tabwidget->indexOf(this);
QString iconname;
switch (state) {
case ASyncDBConnection::State::NotConnected:
case ASyncDBConnection::State::Connecting:
iconname = ":/icons/16x16/document_red.png";
break;
case ASyncDBConnection::State::Connected:
iconname = ":/icons/16x16/document_green.png";
break;
case ASyncDBConnection::State::QuerySend:
case ASyncDBConnection::State::CancelSend:
iconname = ":/icons/16x16/document_yellow.png";
break;
case ASyncDBConnection::State::Terminating:
break;
}
tabwidget->setTabIcon(i, QIcon(iconname));
QString iconname;
switch (state) {
case ASyncDBConnection::State::NotConnected:
case ASyncDBConnection::State::Connecting:
iconname = "document_red.png";
break;
case ASyncDBConnection::State::Connected:
iconname = "document_green.png";
break;
case ASyncDBConnection::State::QuerySend:
case ASyncDBConnection::State::CancelSend:
iconname = "document_yellow.png";
break;
case ASyncDBConnection::State::Terminating:
break;
}
context()->setIcon(this, iconname);
}
@ -394,9 +389,7 @@ void QueryTab::explain_ready(ExplainRoot::SPtr explain)
ui->explainTreeView->setColumnWidth(6, 600);
ui->tabWidget->setCurrentWidget(ui->explainTab);
auto w = dynamic_cast<QMainWindow*>(this->window());
if (w)
w->statusBar()->showMessage(tr("Explain ready."));
context()->showStatusMessage(tr("Explain ready."));
}
else {
addLog("Explain no result");
@ -423,26 +416,26 @@ std::string QueryTab::getCommandUtf8() const
return getCommand().toUtf8().data();
}
QTabWidget *QueryTab::getTabWidget()
{
QWidget * w = parentWidget();
QWidget * p = w->parentWidget();
QTabWidget *tw = dynamic_cast<QTabWidget*>(p);
return tw;
}
//QTabWidget *QueryTab::getTabWidget()
//{
// QWidget * w = parentWidget();
// QWidget * p = w->parentWidget();
// QTabWidget *tw = dynamic_cast<QTabWidget*>(p);
// return tw;
//}
void QueryTab::setTabCaption(const QString &caption, const QString &tooltip)
{
QTabWidget *tabwidget = getTabWidget();
if (tabwidget) {
int i = tabwidget->indexOf(this);
if (i >= 0) {
tabwidget->setTabText(i, caption);
tabwidget->setTabToolTip(i, tooltip);
}
}
//void QueryTab::setTabCaption(const QString &caption, const QString &tooltip)
//{
// QTabWidget *tabwidget = getTabWidget();
// if (tabwidget) {
// int i = tabwidget->indexOf(this);
// if (i >= 0) {
// tabwidget->setTabText(i, caption);
// tabwidget->setTabToolTip(i, tooltip);
// }
// }
}
//}
void QueryTab::query_ready(Expected<std::shared_ptr<Pgsql::Result>> exp_res, qint64 elapsedms)
{
@ -609,7 +602,7 @@ void QueryTab::generateCode()
}
if (resultList.size() == 1) {
std::shared_ptr<const Pgsql::Result> dbres = resultList[0]->GetPgsqlResult();
m_win->newCodeGenPage(command, dbres);
//context()->newCodeGenPage(command, dbres);
}
}