Introduced the MasterController as part of working on loading catalogue information.

Need a central piece to manage the catalogue data per database to prevent loading
this multiple times. MasterController is now also used to enable reopening the
connection manager from a query window after the connection manager has been closed.
This commit is contained in:
Eelke Klein 2017-02-01 18:01:02 +01:00
parent b6d986051b
commit 6370050204
36 changed files with 769 additions and 71 deletions

View file

@ -13,6 +13,7 @@
#include "explaintreemodelitem.h"
#include "json/json.h"
#include "mainwindow.h"
#include "pgtypecontainer.h"
#include "util.h"
QueryTab::QueryTab(MainWindow *win, QWidget *parent) :
@ -39,6 +40,9 @@ QueryTab::QueryTab(MainWindow *win, QWidget *parent) :
ui->queryEdit->setFont(font);
highlighter.reset(new SqlHighlighter(ui->queryEdit->document()));
ui->paramTableView->setModel(&m_paramList);
ui->paramTableView->setItemDelegateForColumn(1, &m_typeDelegate);
connect(ui->queryEdit, &QPlainTextEdit::textChanged, this, &QueryTab::queryTextChanged);
// m_stopwatch.setOutputLabel(ui->lblElapsedTime);
// ui->lblElapsedTime->clear();
@ -49,6 +53,7 @@ QueryTab::~QueryTab()
{
m_dbConnection.closeConnection();
m_dbConnection.setStateCallback(nullptr);
// delete m_pgTypes;
delete ui;
}
@ -279,26 +284,47 @@ void QueryTab::queryTextChanged()
void QueryTab::connectionStateChanged(ASyncDBConnection::State state)
{
QString status_str;
switch (state) {
case ASyncDBConnection::State::NotConnected:
status_str = tr("Geen verbinding");
break;
case ASyncDBConnection::State::Connecting:
status_str = tr("Verbinden");
break;
case ASyncDBConnection::State::Connected:
status_str = tr("Verbonden");
break;
case ASyncDBConnection::State::QuerySend:
status_str = tr("Query verstuurd");
break;
case ASyncDBConnection::State::CancelSend:
status_str = tr("Query geannuleerd");
break;
// QString status_str;
// switch (state) {
// case ASyncDBConnection::State::NotConnected:
// status_str = tr("Geen verbinding");
// break;
// case ASyncDBConnection::State::Connecting:
// status_str = tr("Verbinden");
// break;
// case ASyncDBConnection::State::Connected:
// status_str = tr("Verbonden");
// break;
// case ASyncDBConnection::State::QuerySend:
// status_str = tr("Query verstuurd");
// break;
// case ASyncDBConnection::State::CancelSend:
// status_str = tr("Query geannuleerd");
// break;
// }
// addLog(status_str);
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;
}
tabwidget->setTabIcon(i, QIcon(iconname));
}
addLog(status_str);
// statusBar()->showMessage(status_str);
// statusBar()->showMessage(status_str);
// bool connected = ASyncDBConnection::State::Connected == state;
// ui->actionExecute_SQL->setEnabled(connected);
@ -409,11 +435,17 @@ std::string QueryTab::getCommand() const
return command.toUtf8().data();
}
void QueryTab::setTabCaption(const QString &caption, const QString &tooltip)
QTabWidget *QueryTab::getTabWidget()
{
QWidget * w = parentWidget();
QWidget * p = w->parentWidget();
QTabWidget *tabwidget = dynamic_cast<QTabWidget*>(p);
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) {
@ -437,7 +469,11 @@ void QueryTab::query_ready(std::shared_ptr<Pgsql::Result> dbres, qint64 elapsedm
TuplesResultWidget *trw = new TuplesResultWidget;
trw->setResult(result_model, elapsedms);
resultList.push_back(trw);
ui->tabWidget->addTab(trw, "Data");
ui->tabWidget->addTab(trw, "Data");
if (resultList.size() == 1)
ui->tabWidget->setCurrentWidget(trw);
// ui->lblRowCount->setText(rowcount_str);
// resultModel.reset(new QueryResultModel(nullptr , dbres));
// ui->ResultView->setModel(resultModel.get());