diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index dc8aadf2..d6686d90 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -176,20 +176,19 @@ void MainWindow::fileNew() void MainWindow::populateStructure() { ui->dbTreeWidget->model()->removeRows(0, ui->dbTreeWidget->model()->rowCount()); + completerModelTables.clear(); + completerModelsFields.clear(); if(!db.isOpen()) return; db.updateSchema(); QStringList tblnames = db.getBrowsableObjectNames(); - for(int i=0;itabSqlAreas->count();i++) - qobject_cast(ui->tabSqlAreas->widget(i))->setTableNames(tblnames); sqliteHighlighterLogUser->setTableNames(tblnames); sqliteHighlighterLogApp->setTableNames(tblnames); // setup models for sqltextedit autocomplete - QStandardItemModel* completerModel = new QStandardItemModel(); - completerModel->setRowCount(tblnames.count()); - completerModel->setColumnCount(1); + completerModelTables.setRowCount(tblnames.count()); + completerModelTables.setColumnCount(1); objectMap tab = db.getBrowsableObjects(); int row = 0; @@ -198,7 +197,7 @@ void MainWindow::populateStructure() QString sName = it.value().getname(); QStandardItem* item = new QStandardItem(sName); item->setIcon(QIcon(QString(":icons/%1").arg(it.value().gettype()))); - completerModel->setItem(row, 0, item); + completerModelTables.setItem(row, 0, item); // If it is a table add the field Nodes if((*it).gettype() == "table" || (*it).gettype() == "view") @@ -215,14 +214,17 @@ void MainWindow::populateStructure() fldItem->setIcon(QIcon(":/icons/field")); tablefieldmodel->setItem(fldrow, 0, fldItem); } - // TODO: - //ui->sqlTextEdit->addFieldCompleterModel(sName.toLower(), tablefieldmodel); + completerModelsFields.insert(sName.toLower(), tablefieldmodel); } } - // TODO: - //ui->sqlTextEdit->setDefaultCompleterModel(completerModel); - // end setup models for sqltextedit autocomplete + for(int i=0;itabSqlAreas->count();i++) + { + SqlExecutionArea* sqlarea = qobject_cast(ui->tabSqlAreas->widget(i)); + sqlarea->setTableNames(tblnames); + sqlarea->getEditor()->setDefaultCompleterModel(&completerModelTables); + sqlarea->getEditor()->insertFieldCompleterModels(completerModelsFields); + } // fill the structure tab QMap typeToParentItem; @@ -1114,7 +1116,10 @@ void MainWindow::openSqlTab(bool resetCounter) tabNumber = 0; // Create new tab, add it to the tab widget and select it - QWidget* w = new SqlExecutionArea(this, &db); + SqlExecutionArea* w = new SqlExecutionArea(this, &db); + w->setTableNames(db.getBrowsableObjectNames()); + w->getEditor()->setDefaultCompleterModel(&completerModelTables); + w->getEditor()->insertFieldCompleterModels(completerModelsFields); int index = ui->tabSqlAreas->addTab(w, QString("SQL %1").arg(++tabNumber)); ui->tabSqlAreas->setCurrentIndex(index); } diff --git a/src/MainWindow.h b/src/MainWindow.h index 999898a0..d003f6fc 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -2,6 +2,8 @@ #define MAINFORM_H #include +#include +#include "sqltextedit.h" #include "sqlitedb.h" class QDragEnterEvent; @@ -70,6 +72,9 @@ private: DBBrowserDB db; + QStandardItemModel completerModelTables; + SqlTextEdit::FieldCompleterModelMap completerModelsFields; + void init(); void updateRecentFileActions(); diff --git a/src/SqlExecutionArea.h b/src/SqlExecutionArea.h index 1cc1d97c..9c32eb5e 100644 --- a/src/SqlExecutionArea.h +++ b/src/SqlExecutionArea.h @@ -2,6 +2,7 @@ #define __SQLEXECUTIONAREA_H__ #include +#include "sqltextedit.h" class QSplitter; class SqlTextEdit; class ExtendedTableWidget; @@ -10,6 +11,7 @@ class QVBoxLayout; class SQLiteSyntaxHighlighter; class SqliteTableModel; class DBBrowserDB; +class QStandardItemModel; class SqlExecutionArea : public QFrame { diff --git a/src/sqltextedit.cpp b/src/sqltextedit.cpp index d443facc..76b861a5 100644 --- a/src/sqltextedit.cpp +++ b/src/sqltextedit.cpp @@ -22,8 +22,6 @@ SqlTextEdit::SqlTextEdit(QWidget* parent) : SqlTextEdit::~SqlTextEdit() { - clearFieldCompleterModelMap(); - delete m_defaultCompleterModel; } void SqlTextEdit::setCompleter(QCompleter *completer) @@ -50,27 +48,26 @@ QCompleter* SqlTextEdit::completer() const void SqlTextEdit::setDefaultCompleterModel(QAbstractItemModel *model) { - delete m_defaultCompleterModel; m_defaultCompleterModel = model; m_Completer->setModel(m_defaultCompleterModel); } -void SqlTextEdit::clearFieldCompleterModelMap() -{ - QAbstractItemModel* model; - foreach (model, m_fieldCompleterMap) - { - delete model; - } - m_fieldCompleterMap.clear(); -} - QAbstractItemModel* SqlTextEdit::addFieldCompleterModel(const QString &tablename, QAbstractItemModel* model) { m_fieldCompleterMap[tablename] = model; return model; } +void SqlTextEdit::insertFieldCompleterModels(const FieldCompleterModelMap& fieldmap) +{ + QMapIterator i(fieldmap); + while(i.hasNext()) + { + i.next(); + addFieldCompleterModel(i.key(), i.value()); + } +} + void SqlTextEdit::insertCompletion(const QString& completion) { if (m_Completer->widget() != this) diff --git a/src/sqltextedit.h b/src/sqltextedit.h index 0a02a1ee..4a754db6 100644 --- a/src/sqltextedit.h +++ b/src/sqltextedit.h @@ -25,8 +25,8 @@ public: // map that associates table -> field model typedef QMap FieldCompleterModelMap; - void clearFieldCompleterModelMap(); QAbstractItemModel* addFieldCompleterModel(const QString& tablename, QAbstractItemModel *model); + void insertFieldCompleterModels(const FieldCompleterModelMap& fieldmap); protected: void keyPressEvent(QKeyEvent *e);