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:
parent
f6ea2ce0a6
commit
2a7e505dbf
13 changed files with 220 additions and 113 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue