From 5d2139ce993199fcc547e040c3e6c47cda26e658 Mon Sep 17 00:00:00 2001 From: Martin Kleusberg Date: Sat, 6 Apr 2013 23:40:47 +0200 Subject: [PATCH] Kind of fix the find dialog when using the SqliteTableModel --- src/FindDialog.cpp | 4 +-- src/MainWindow.cpp | 78 +++++++++++++++++----------------------------- src/MainWindow.h | 2 +- src/sqlitedb.cpp | 29 +++++------------ 4 files changed, 38 insertions(+), 75 deletions(-) diff --git a/src/FindDialog.cpp b/src/FindDialog.cpp index ade4c713..c32a07e8 100644 --- a/src/FindDialog.cpp +++ b/src/FindDialog.cpp @@ -23,7 +23,7 @@ void FindDialog::showResults(const resultMap& rmap) for(it=rmap.begin(),rowNum=0;it!=rmap.end();++it,rowNum++) { QString firstline = it.value().section('\n', 0, 0); - ui->tableResults->setItem(rowNum, 0, new QTableWidgetItem(QString::number(it.key() + 1))); + ui->tableResults->setItem(rowNum, 0, new QTableWidgetItem(QString::number(it.key()))); ui->tableResults->setItem(rowNum, 1, new QTableWidgetItem(firstline)); } QString results = tr("Found: %1").arg(ui->tableResults->rowCount()); @@ -51,7 +51,7 @@ void FindDialog::recordSelected(QTableWidgetItem* witem) if(witem) { int recNum = ui->tableResults->item(witem->row(), 0)->text().toInt(); - emit showrecord(recNum - 1); + emit showrecord(recNum); } } diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 75eccfde..22219fcd 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -273,47 +273,34 @@ void MainWindow::populateStructure() } } -void MainWindow::populateTable( const QString & tablename, bool keepColumnWidths) +void MainWindow::populateTable( const QString & tablename) { - QApplication::setOverrideCursor( Qt::WaitCursor ); + QApplication::setOverrideCursor(Qt::WaitCursor); + + // Set new table if(!tablename.isEmpty()) m_browseTableModel->setTable(tablename); -// bool mustreset = false; -// if (tablename.compare(db.curBrowseTableName)!=0) -// { -// mustreset = true; -// curBrowseOrderByIndex = 1; -// curBrowseOrderByMode = ORDERMODE_ASC; -// } -// QString orderby = QString::number(curBrowseOrderByIndex) + " " + (curBrowseOrderByMode == ORDERMODE_ASC ? "ASC" : "DESC"); -// if(!db.browseTable(tablename, orderby)) -// { -// browseTableModel->setRowCount(0); -// browseTableModel->setColumnCount(0); -// QApplication::restoreOverrideCursor(); -// if(findWin) -// findWin->resetFields(db.getTableFields("")); -// return; -// } + // Reset sorting + curBrowseOrderByIndex = 1; + curBrowseOrderByMode = Qt::AscendingOrder; + m_browseTableSortProxy->sort(curBrowseOrderByIndex, curBrowseOrderByMode); -// // Activate the add and delete record buttons and editing only if a table has been selected -// bool is_table = db.getObjectByName(tablename).gettype() == "table"; -// ui->buttonNewRecord->setEnabled(is_table); -// ui->buttonDeleteRecord->setEnabled(is_table); -// ui->dataTable->setEditTriggers(is_table ? QAbstractItemView::DoubleClicked | QAbstractItemView::AnyKeyPressed | QAbstractItemView::EditKeyPressed : QAbstractItemView::NoEditTriggers); + // Get table layout + db.browseTable(tablename); + + // Activate the add and delete record buttons and editing only if a table has been selected + bool is_table = db.getObjectByName(tablename).gettype() == "table"; + ui->buttonNewRecord->setEnabled(is_table); + ui->buttonDeleteRecord->setEnabled(is_table); + ui->dataTable->setEditTriggers(is_table ? QAbstractItemView::DoubleClicked | QAbstractItemView::AnyKeyPressed | QAbstractItemView::EditKeyPressed : QAbstractItemView::NoEditTriggers); + + //got to keep findWin in synch + if(findWin) + findWin->resetFields(); + if(editWin) + editWin->reset(); -// if (mustreset){ -// updateTableView(0, keepColumnWidths); -// if (findWin) findWin->resetFields(db.getTableFields(db.curBrowseTableName)); -// } else { -// updateTableView(-1, keepColumnWidths); -// } -// //got to keep findWin in synch -// if(findWin) -// findWin->resetFields(); -// if(editWin) -// editWin->reset(); QApplication::restoreOverrideCursor(); } @@ -483,9 +470,8 @@ void MainWindow::updateTableView(int lineToSelect, bool keepColumnWidths) void MainWindow::selectTableLine(int lineToSelect) { ui->dataTable->clearSelection(); - ui->dataTable->selectRow(lineToSelect); - ui->dataTable->setCurrentIndex(ui->dataTable->currentIndex().sibling(lineToSelect, 0)); - ui->dataTable->scrollTo(ui->dataTable->currentIndex().sibling(lineToSelect, 0)); + ui->dataTable->selectRow(m_browseTableSortProxy->mapFromSource(m_browseTableModel->index(lineToSelect, 0)).row()); + ui->dataTable->scrollTo(ui->dataTable->currentIndex()); } void MainWindow::navigatePrevious() @@ -538,7 +524,7 @@ void MainWindow::browseFind(bool open) { findWin = new FindDialog(this); connect(findWin, SIGNAL(lookfor(const QString&, const QString&, const QString&)), this, SLOT(lookfor(const QString&, const QString&, const QString&))); - connect(findWin, SIGNAL(showrecord(int)),this, SLOT(updateTableView(int))); + connect(findWin, SIGNAL(showrecord(int)),this, SLOT(selectTableLine(int))); connect(findWin, SIGNAL(goingAway()),this, SLOT(browseFindAway())); } findWin->resetFields(db.getTableFields(db.curBrowseTableName)); @@ -556,7 +542,7 @@ void MainWindow::browseFindAway() void MainWindow::browseRefresh() { - populateTable(ui->comboBrowseTable->currentText(), true); + populateTable(ui->comboBrowseTable->currentText()); } void MainWindow::lookfor( const QString & wfield, const QString & woperator, const QString & wsearchterm ) @@ -580,15 +566,7 @@ void MainWindow::lookfor( const QString & wfield, const QString & woperator, con finalsearchterm = QString(newsearchterm); } QApplication::setOverrideCursor( Qt::WaitCursor ); - QString statement = "SELECT rowid, "; - statement.append(wfield); - statement.append(" FROM "); - statement.append(db.curBrowseTableName); - statement.append(" WHERE "); - statement.append(wfield); - statement.append(" "); - statement.append(finaloperator); - statement.append(" "); + QString statement = QString("SELECT rowid, `%1` FROM `%2` WHERE `%3` %4 ").arg(wfield).arg(db.curBrowseTableName).arg(wfield).arg(finaloperator); //searchterm needs to be quoted if it is not a number bool ok = false; finalsearchterm.toDouble(&ok); @@ -600,7 +578,7 @@ void MainWindow::lookfor( const QString & wfield, const QString & woperator, con } else {//append the number, unquoted statement.append(finalsearchterm); } - statement.append(" ORDER BY rowid; "); + statement.append(" ORDER BY rowid;"); resultMap res = db.getFindResults(statement); findWin->showResults(res); QApplication::restoreOverrideCursor(); diff --git a/src/MainWindow.h b/src/MainWindow.h index ef63b4ef..9f1fb7f8 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -100,7 +100,7 @@ private slots: virtual void fileOpen(); virtual void fileNew(); virtual void populateStructure(); - virtual void populateTable(const QString & tablename , bool keepColumnWidths = false); + virtual void populateTable(const QString& tablename); virtual void resetBrowser(); virtual void fileClose(); virtual void fileExit(); diff --git a/src/sqlitedb.cpp b/src/sqlitedb.cpp index c64bb4ae..6e009209 100644 --- a/src/sqlitedb.cpp +++ b/src/sqlitedb.cpp @@ -507,12 +507,12 @@ bool DBBrowserDB::updateRecord(const QString& table, const QString& column, int } } -bool DBBrowserDB::browseTable( const QString & tablename, const QString& orderby ) +bool DBBrowserDB::browseTable( const QString & tablename, const QString& /*orderby*/ ) { QStringList testFields = getTableFields( tablename ); if (testFields.count()>0) {//table exists - getTableRecords( tablename, orderby ); + //getTableRecords( tablename, orderby ); browseFields = testFields; hasValidBrowseSet = true; curBrowseTableName = tablename; @@ -789,9 +789,6 @@ resultMap DBBrowserDB::getFindResults( const QString & wstatement) sqlite3_stmt *vm; const char *tail; - int ncol; - - // char *errmsg; int err=0; resultMap res; lastErrorMessage = QObject::tr("no error"); @@ -799,25 +796,13 @@ resultMap DBBrowserDB::getFindResults( const QString & wstatement) QByteArray statementutf8 = wstatement.toUtf8(); err=sqlite3_prepare_v2(_db, statementutf8, statementutf8.length(), &vm, &tail); - if (err == SQLITE_OK){ - int rownum = 0; - int recnum = 0; - QString r; - while ( sqlite3_step(vm) == SQLITE_ROW ){ - ncol = sqlite3_data_count(vm); - for (int e=0; e