diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 2a906480..3da472a6 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include "CreateIndexDialog.h" #include "AboutDialog.h" @@ -27,6 +28,8 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow), browseTableModel(new QStandardItemModel(this)), + m_browseTableModel(new SqliteTableModel(this, &db)), + m_browseTableSortProxy(new QSortFilterProxyModel(this)), sqliteHighlighterTabSql(0), sqliteHighlighterLogUser(0), sqliteHighlighterLogApp(0), @@ -52,8 +55,6 @@ void MainWindow::init() // Init the SQL log dock db.mainWindow = this; - m_browseTableModel = new SqliteTableModel(this, &db); - // Set up the db tree widget ui->dbTreeWidget->setColumnHidden(1, true); ui->dbTreeWidget->setColumnWidth(0, 300); @@ -66,8 +67,8 @@ void MainWindow::init() createSyntaxHighlighters(); // Set up DB models - //ui->dataTable->setModel(browseTableModel); - ui->dataTable->setModel(m_browseTableModel); + m_browseTableSortProxy->setSourceModel(m_browseTableModel); + ui->dataTable->setModel(m_browseTableSortProxy); queryResultListModel = new QStandardItemModel(this); ui->queryResultTableView->setModel(queryResultListModel); @@ -332,7 +333,8 @@ void MainWindow::resetBrowser() pos = pos == -1 ? 0 : pos; ui->comboBrowseTable->setCurrentIndex(pos); curBrowseOrderByIndex = 1; - curBrowseOrderByMode = ORDERMODE_ASC; + curBrowseOrderByMode = Qt::AscendingOrder; + m_browseTableSortProxy->sort(curBrowseOrderByIndex, curBrowseOrderByMode); populateTable(ui->comboBrowseTable->currentText()); } @@ -1144,9 +1146,9 @@ void MainWindow::browseTableHeaderClicked(int logicalindex) return; // instead of the column name we just use the column index, +2 because 'rowid, *' is the projection - curBrowseOrderByIndex = logicalindex + 2; - curBrowseOrderByMode = curBrowseOrderByMode == ORDERMODE_ASC ? ORDERMODE_DESC : ORDERMODE_ASC; - populateTable(ui->comboBrowseTable->currentText(), true); + curBrowseOrderByIndex = logicalindex; + curBrowseOrderByMode = curBrowseOrderByMode == Qt::AscendingOrder ? Qt::DescendingOrder : Qt::AscendingOrder; + m_browseTableSortProxy->sort(curBrowseOrderByIndex, curBrowseOrderByMode); // select the first item in the column so the header is bold // we might try to select the last selected item diff --git a/src/MainWindow.h b/src/MainWindow.h index a95674b7..65905314 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -4,9 +4,6 @@ #include #include "sqlitedb.h" -#define ORDERMODE_ASC 0 -#define ORDERMODE_DESC 1 - class QDragEnterEvent; class EditDialog; class FindDialog; @@ -16,6 +13,7 @@ class QIntValidator; class QLabel; class QModelIndex; class SqliteTableModel; +class QSortFilterProxyModel; namespace Ui { class MainWindow; @@ -55,6 +53,7 @@ private: QStandardItemModel *browseTableModel; SqliteTableModel* m_browseTableModel; + QSortFilterProxyModel* m_browseTableSortProxy; QStandardItemModel *queryResultListModel; QMenu *popupTableMenu; QMenu *recentFilesMenu; @@ -70,7 +69,7 @@ private: QAction *recentSeparatorAct; int curBrowseOrderByIndex; - int curBrowseOrderByMode; + Qt::SortOrder curBrowseOrderByMode; EditDialog* editWin; FindDialog* findWin; diff --git a/src/MainWindow.ui b/src/MainWindow.ui index dbe2da9c..57bfb24a 100644 --- a/src/MainWindow.ui +++ b/src/MainWindow.ui @@ -312,7 +312,7 @@ 0 0 - 763 + 278 444 diff --git a/src/sqlitetablemodel.cpp b/src/sqlitetablemodel.cpp index a5c79a7d..acbb8ab4 100644 --- a/src/sqlitetablemodel.cpp +++ b/src/sqlitetablemodel.cpp @@ -37,7 +37,6 @@ void SqliteTableModel::setQuery(const QString& sQuery) status = sqlite3_step(stmt); if(SQLITE_ROW == status) { - m_columnCount = sqlite3_data_count(stmt); QString sCount = QString::fromUtf8((const char *) sqlite3_column_text(stmt, 0)); m_rowCount = sCount.toInt(); } @@ -46,6 +45,7 @@ void SqliteTableModel::setQuery(const QString& sQuery) // now fetch the first 100 entries and get headers m_headers.clear(); + m_data.clear(); m_columnCount = 0; QString sLimitQuery = QString("%1 LIMIT 0, %2;").arg(sQuery).arg(m_chunkSize); utf8Query = sLimitQuery.toUtf8();