make autophrase do the right thing: add a subclause, not modify the query string

This commit is contained in:
dockes 2006-12-08 06:45:05 +00:00
parent d54ddc61b5
commit b363de63f0

View File

@ -1,5 +1,5 @@
#ifndef lint #ifndef lint
static char rcsid[] = "@(#$Id: ssearch_w.cpp,v 1.13 2006-12-04 08:17:24 dockes Exp $ (C) 2006 J.F.Dockes"; static char rcsid[] = "@(#$Id: ssearch_w.cpp,v 1.14 2006-12-08 06:45:05 dockes Exp $ (C) 2006 J.F.Dockes";
#endif #endif
/* /*
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@ -34,6 +34,8 @@ static char rcsid[] = "@(#$Id: ssearch_w.cpp,v 1.13 2006-12-04 08:17:24 dockes E
#include "ssearch_w.h" #include "ssearch_w.h"
#include "refcntr.h" #include "refcntr.h"
enum SSearchType {SST_ANY = 0, SST_ALL = 1, SST_FNM = 2};
void SSearch::init() void SSearch::init()
{ {
searchTypCMB->insertItem(tr("Any term")); searchTypCMB->insertItem(tr("Any term"));
@ -72,26 +74,28 @@ void SSearch::startSimpleSearch()
{ {
if (queryText->currentText().length() == 0) if (queryText->currentText().length() == 0)
return; return;
RefCntr<Rcl::SearchData> sdata(new Rcl::SearchData(Rcl::SCLT_AND));
string u8 = (const char *)queryText->currentText().utf8();
string u8 = (const char *)queryText->currentText().utf8();
LOGDEB(("SSearch::startSimpleSearch: [%s]\n", u8.c_str())); LOGDEB(("SSearch::startSimpleSearch: [%s]\n", u8.c_str()));
switch (searchTypCMB->currentItem()) { RefCntr<Rcl::SearchData> sdata(new Rcl::SearchData(Rcl::SCLT_OR));
case 0: SSearchType tp = (SSearchType)searchTypCMB->currentItem();
if (prefs.ssearchAutoPhrase && (tp == SST_ANY || tp == SST_ALL) &&
u8.find_first_of("\"") == string::npos) {
sdata->addClause(new Rcl::SearchDataClauseDist(Rcl::SCLT_PHRASE,
u8, 0));
}
switch (tp) {
case SST_ANY:
default: default:
// If this is an or and we're set for autophrase and there are
// no quotes in the query, add a phrase search
if (prefs.ssearchAutoPhrase &&
u8.find_first_of("\"") == string::npos) {
u8 += string(" \"") + u8 + "\"";
}
sdata->addClause(new Rcl::SearchDataClauseSimple(Rcl::SCLT_OR, u8)); sdata->addClause(new Rcl::SearchDataClauseSimple(Rcl::SCLT_OR, u8));
break; break;
case 1: case SST_ALL:
sdata->addClause(new Rcl::SearchDataClauseSimple(Rcl::SCLT_AND, u8)); sdata->addClause(new Rcl::SearchDataClauseSimple(Rcl::SCLT_AND, u8));
break; break;
case 2: case SST_FNM:
sdata->addClause(new Rcl::SearchDataClauseFilename(u8)); sdata->addClause(new Rcl::SearchDataClauseFilename(u8));
break; break;
} }
@ -137,7 +141,7 @@ void SSearch::startSimpleSearch()
void SSearch::setAnyTermMode() void SSearch::setAnyTermMode()
{ {
searchTypCMB->setCurrentItem(0); searchTypCMB->setCurrentItem(SST_ANY);
} }
// Complete last word in input by querying db for all possible terms. // Complete last word in input by querying db for all possible terms.
@ -145,7 +149,7 @@ void SSearch::completion()
{ {
if (!rcldb) if (!rcldb)
return; return;
if (searchTypCMB->currentItem() == 2) { if (searchTypCMB->currentItem() == SST_FNM) {
// Filename: no completion // Filename: no completion
QApplication::beep(); QApplication::beep();
return; return;