make autophrase do the right thing: add a subclause, not modify the query string
This commit is contained in:
parent
d54ddc61b5
commit
b363de63f0
@ -1,5 +1,5 @@
|
||||
#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
|
||||
/*
|
||||
* 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 "refcntr.h"
|
||||
|
||||
enum SSearchType {SST_ANY = 0, SST_ALL = 1, SST_FNM = 2};
|
||||
|
||||
void SSearch::init()
|
||||
{
|
||||
searchTypCMB->insertItem(tr("Any term"));
|
||||
@ -72,26 +74,28 @@ void SSearch::startSimpleSearch()
|
||||
{
|
||||
if (queryText->currentText().length() == 0)
|
||||
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()));
|
||||
|
||||
switch (searchTypCMB->currentItem()) {
|
||||
case 0:
|
||||
RefCntr<Rcl::SearchData> sdata(new Rcl::SearchData(Rcl::SCLT_OR));
|
||||
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:
|
||||
// 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));
|
||||
break;
|
||||
case 1:
|
||||
case SST_ALL:
|
||||
sdata->addClause(new Rcl::SearchDataClauseSimple(Rcl::SCLT_AND, u8));
|
||||
break;
|
||||
case 2:
|
||||
case SST_FNM:
|
||||
sdata->addClause(new Rcl::SearchDataClauseFilename(u8));
|
||||
break;
|
||||
}
|
||||
@ -137,7 +141,7 @@ void SSearch::startSimpleSearch()
|
||||
|
||||
void SSearch::setAnyTermMode()
|
||||
{
|
||||
searchTypCMB->setCurrentItem(0);
|
||||
searchTypCMB->setCurrentItem(SST_ANY);
|
||||
}
|
||||
|
||||
// Complete last word in input by querying db for all possible terms.
|
||||
@ -145,7 +149,7 @@ void SSearch::completion()
|
||||
{
|
||||
if (!rcldb)
|
||||
return;
|
||||
if (searchTypCMB->currentItem() == 2) {
|
||||
if (searchTypCMB->currentItem() == SST_FNM) {
|
||||
// Filename: no completion
|
||||
QApplication::beep();
|
||||
return;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user