Skip to content

Commit 57b44b8

Browse files
committed
Add auto completion in SQL editor again
1 parent 23d929e commit 57b44b8

5 files changed

Lines changed: 35 additions & 26 deletions

File tree

src/MainWindow.cpp

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -176,20 +176,19 @@ void MainWindow::fileNew()
176176
void MainWindow::populateStructure()
177177
{
178178
ui->dbTreeWidget->model()->removeRows(0, ui->dbTreeWidget->model()->rowCount());
179+
completerModelTables.clear();
180+
completerModelsFields.clear();
179181
if(!db.isOpen())
180182
return;
181183

182184
db.updateSchema();
183185
QStringList tblnames = db.getBrowsableObjectNames();
184-
for(int i=0;i<ui->tabSqlAreas->count();i++)
185-
qobject_cast<SqlExecutionArea*>(ui->tabSqlAreas->widget(i))->setTableNames(tblnames);
186186
sqliteHighlighterLogUser->setTableNames(tblnames);
187187
sqliteHighlighterLogApp->setTableNames(tblnames);
188188

189189
// setup models for sqltextedit autocomplete
190-
QStandardItemModel* completerModel = new QStandardItemModel();
191-
completerModel->setRowCount(tblnames.count());
192-
completerModel->setColumnCount(1);
190+
completerModelTables.setRowCount(tblnames.count());
191+
completerModelTables.setColumnCount(1);
193192

194193
objectMap tab = db.getBrowsableObjects();
195194
int row = 0;
@@ -198,7 +197,7 @@ void MainWindow::populateStructure()
198197
QString sName = it.value().getname();
199198
QStandardItem* item = new QStandardItem(sName);
200199
item->setIcon(QIcon(QString(":icons/%1").arg(it.value().gettype())));
201-
completerModel->setItem(row, 0, item);
200+
completerModelTables.setItem(row, 0, item);
202201

203202
// If it is a table add the field Nodes
204203
if((*it).gettype() == "table" || (*it).gettype() == "view")
@@ -215,14 +214,17 @@ void MainWindow::populateStructure()
215214
fldItem->setIcon(QIcon(":/icons/field"));
216215
tablefieldmodel->setItem(fldrow, 0, fldItem);
217216
}
218-
// TODO:
219-
//ui->sqlTextEdit->addFieldCompleterModel(sName.toLower(), tablefieldmodel);
217+
completerModelsFields.insert(sName.toLower(), tablefieldmodel);
220218
}
221219

222220
}
223-
// TODO:
224-
//ui->sqlTextEdit->setDefaultCompleterModel(completerModel);
225-
// end setup models for sqltextedit autocomplete
221+
for(int i=0;i<ui->tabSqlAreas->count();i++)
222+
{
223+
SqlExecutionArea* sqlarea = qobject_cast<SqlExecutionArea*>(ui->tabSqlAreas->widget(i));
224+
sqlarea->setTableNames(tblnames);
225+
sqlarea->getEditor()->setDefaultCompleterModel(&completerModelTables);
226+
sqlarea->getEditor()->insertFieldCompleterModels(completerModelsFields);
227+
}
226228

227229
// fill the structure tab
228230
QMap<QString, QTreeWidgetItem*> typeToParentItem;
@@ -1114,7 +1116,10 @@ void MainWindow::openSqlTab(bool resetCounter)
11141116
tabNumber = 0;
11151117

11161118
// Create new tab, add it to the tab widget and select it
1117-
QWidget* w = new SqlExecutionArea(this, &db);
1119+
SqlExecutionArea* w = new SqlExecutionArea(this, &db);
1120+
w->setTableNames(db.getBrowsableObjectNames());
1121+
w->getEditor()->setDefaultCompleterModel(&completerModelTables);
1122+
w->getEditor()->insertFieldCompleterModels(completerModelsFields);
11181123
int index = ui->tabSqlAreas->addTab(w, QString("SQL %1").arg(++tabNumber));
11191124
ui->tabSqlAreas->setCurrentIndex(index);
11201125
}

src/MainWindow.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#define MAINFORM_H
33

44
#include <QMainWindow>
5+
#include <QStandardItemModel>
6+
#include "sqltextedit.h"
57
#include "sqlitedb.h"
68

79
class QDragEnterEvent;
@@ -70,6 +72,9 @@ class MainWindow : public QMainWindow
7072

7173
DBBrowserDB db;
7274

75+
QStandardItemModel completerModelTables;
76+
SqlTextEdit::FieldCompleterModelMap completerModelsFields;
77+
7378
void init();
7479

7580
void updateRecentFileActions();

src/SqlExecutionArea.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define __SQLEXECUTIONAREA_H__
33

44
#include <QFrame>
5+
#include "sqltextedit.h"
56
class QSplitter;
67
class SqlTextEdit;
78
class ExtendedTableWidget;
@@ -10,6 +11,7 @@ class QVBoxLayout;
1011
class SQLiteSyntaxHighlighter;
1112
class SqliteTableModel;
1213
class DBBrowserDB;
14+
class QStandardItemModel;
1315

1416
class SqlExecutionArea : public QFrame
1517
{

src/sqltextedit.cpp

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ SqlTextEdit::SqlTextEdit(QWidget* parent) :
2222

2323
SqlTextEdit::~SqlTextEdit()
2424
{
25-
clearFieldCompleterModelMap();
26-
delete m_defaultCompleterModel;
2725
}
2826

2927
void SqlTextEdit::setCompleter(QCompleter *completer)
@@ -50,27 +48,26 @@ QCompleter* SqlTextEdit::completer() const
5048

5149
void SqlTextEdit::setDefaultCompleterModel(QAbstractItemModel *model)
5250
{
53-
delete m_defaultCompleterModel;
5451
m_defaultCompleterModel = model;
5552
m_Completer->setModel(m_defaultCompleterModel);
5653
}
5754

58-
void SqlTextEdit::clearFieldCompleterModelMap()
59-
{
60-
QAbstractItemModel* model;
61-
foreach (model, m_fieldCompleterMap)
62-
{
63-
delete model;
64-
}
65-
m_fieldCompleterMap.clear();
66-
}
67-
6855
QAbstractItemModel* SqlTextEdit::addFieldCompleterModel(const QString &tablename, QAbstractItemModel* model)
6956
{
7057
m_fieldCompleterMap[tablename] = model;
7158
return model;
7259
}
7360

61+
void SqlTextEdit::insertFieldCompleterModels(const FieldCompleterModelMap& fieldmap)
62+
{
63+
QMapIterator<QString, QAbstractItemModel*> i(fieldmap);
64+
while(i.hasNext())
65+
{
66+
i.next();
67+
addFieldCompleterModel(i.key(), i.value());
68+
}
69+
}
70+
7471
void SqlTextEdit::insertCompletion(const QString& completion)
7572
{
7673
if (m_Completer->widget() != this)

src/sqltextedit.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class SqlTextEdit : public QTextEdit
2525
// map that associates table -> field model
2626
typedef QMap<QString,QAbstractItemModel*> FieldCompleterModelMap;
2727

28-
void clearFieldCompleterModelMap();
2928
QAbstractItemModel* addFieldCompleterModel(const QString& tablename, QAbstractItemModel *model);
29+
void insertFieldCompleterModels(const FieldCompleterModelMap& fieldmap);
3030

3131
protected:
3232
void keyPressEvent(QKeyEvent *e);

0 commit comments

Comments
 (0)