Kind of fix the find dialog when using the SqliteTableModel

This commit is contained in:
Martin Kleusberg
2013-04-06 23:40:47 +02:00
parent 00b9f40271
commit 5d2139ce99
4 changed files with 38 additions and 75 deletions

View File

@@ -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);
}
}

View File

@@ -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();

View File

@@ -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();

View File

@@ -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<ncol; ++e){
r = QString::fromUtf8((const char *) sqlite3_column_text(vm, e));
if (e==0){
rownum = r.toInt();
rowIdMap::iterator mit = idmap.find(rownum);
recnum = *mit;
}
}
res.insert(recnum, r);
}
if (err == SQLITE_OK)
{
while ( sqlite3_step(vm) == SQLITE_ROW )
res.insert(sqlite3_column_int(vm, 0)-1, QString::fromUtf8((const char *)sqlite3_column_text(vm, 1)));
sqlite3_finalize(vm);
}else{
} else {
lastErrorMessage = QString::fromUtf8((const char*)sqlite3_errmsg(_db));
}
return res;