turn-off abst. build for fname search (no terms) + prototype query expansion (xapian e-set on chosen doc) + dbl-click in preview adds term to ssearch

This commit is contained in:
dockes 2006-04-22 06:27:37 +00:00
parent f15b278194
commit 57cdece639
12 changed files with 133 additions and 29 deletions

View File

@ -1,5 +1,5 @@
#ifndef lint #ifndef lint
static char rcsid[] = "@(#$Id: main.cpp,v 1.42 2006-04-19 08:26:08 dockes Exp $ (C) 2005 J.F.Dockes"; static char rcsid[] = "@(#$Id: main.cpp,v 1.43 2006-04-22 06:27:37 dockes Exp $ (C) 2005 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
@ -80,11 +80,14 @@ bool maybeOpenDb(string &reason, bool force)
return false; return false;
} }
int qopts = 0; int qopts = Rcl::Db::QO_NONE;
if (prefs.queryBuildAbstract) if (prefs.queryBuildAbstract) {
qopts |= Rcl::Db::QO_BUILD_ABSTRACT; qopts |= Rcl::Db::QO_BUILD_ABSTRACT;
if (prefs.queryReplaceAbstract) if (prefs.queryReplaceAbstract)
qopts |= Rcl::Db::QO_REPLACE_ABSTRACT; qopts |= Rcl::Db::QO_REPLACE_ABSTRACT;
}
if (prefs.queryStemLang.length() > 0)
qopts |= Rcl::Db::QO_STEM;
if (force) if (force)
rcldb->close(); rcldb->close();
rcldb->rmQueryDb(""); rcldb->rmQueryDb("");

View File

@ -196,9 +196,11 @@
<variable>bool dynSearchActive;</variable> <variable>bool dynSearchActive;</variable>
<variable>bool canBeep;</variable> <variable>bool canBeep;</variable>
<variable>void *tabData;</variable> <variable>void *tabData;</variable>
<variable>QWidget *currentW;</variable>
</variables> </variables>
<signals> <signals>
<signal>previewClosed(QWidget *)</signal> <signal>previewClosed(QWidget *)</signal>
<signal>wordSelect(QString)</signal>
</signals> </signals>
<slots> <slots>
<slot>searchTextLine_textChanged( const QString &amp; text )</slot> <slot>searchTextLine_textChanged( const QString &amp; text )</slot>
@ -208,6 +210,7 @@
<slot>currentChanged( QWidget * tw )</slot> <slot>currentChanged( QWidget * tw )</slot>
<slot>closeCurrentTab()</slot> <slot>closeCurrentTab()</slot>
<slot>setCurTabProps( const string &amp; fn, const Rcl::Doc &amp; doc )</slot> <slot>setCurTabProps( const string &amp; fn, const Rcl::Doc &amp; doc )</slot>
<slot>textDoubleClicked(int, int)</slot>
</slots> </slots>
<functions> <functions>
<function access="private" specifier="non virtual">init()</function> <function access="private" specifier="non virtual">init()</function>

View File

@ -71,6 +71,7 @@ void Preview::init()
canBeep = true; canBeep = true;
tabData = new list<TabData>; tabData = new list<TabData>;
TABDATA->push_back(TabData(pvTab->currentPage())); TABDATA->push_back(TabData(pvTab->currentPage()));
currentW = 0;
} }
void Preview::destroy() void Preview::destroy()
@ -223,6 +224,7 @@ void Preview::prevPressed()
void Preview::currentChanged(QWidget * tw) void Preview::currentChanged(QWidget * tw)
{ {
QWidget *edit = (QWidget *)tw->child("pvEdit"); QWidget *edit = (QWidget *)tw->child("pvEdit");
currentW = tw;
LOGDEB1(("Preview::currentChanged(). Editor: %p\n", edit)); LOGDEB1(("Preview::currentChanged(). Editor: %p\n", edit));
if (edit == 0) { if (edit == 0) {
@ -231,9 +233,23 @@ void Preview::currentChanged(QWidget * tw)
tw->installEventFilter(this); tw->installEventFilter(this);
edit->installEventFilter(this); edit->installEventFilter(this);
edit->setFocus(); edit->setFocus();
connect(edit, SIGNAL(doubleClicked(int, int)),
this, SLOT(textDoubleClicked(int, int)));
} }
} }
void Preview::textDoubleClicked(int, int)
{
if (!currentW)
return;
QTextEdit *edit = (QTextEdit *)currentW->child("pvEdit");
if (edit == 0) {
LOGERR(("Editor child not found\n"));
return;
}
if (edit->hasSelectedText())
emit(wordSelect(edit->selectedText()));
}
void Preview::closeCurrentTab() void Preview::closeCurrentTab()
{ {

View File

@ -1,5 +1,5 @@
#ifndef lint #ifndef lint
static char rcsid[] = "@(#$Id: rclmain.cpp,v 1.23 2006-04-20 09:20:09 dockes Exp $ (C) 2005 J.F.Dockes"; static char rcsid[] = "@(#$Id: rclmain.cpp,v 1.24 2006-04-22 06:27:37 dockes Exp $ (C) 2005 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
@ -95,8 +95,8 @@ void RclMain::init()
m_history = new RclDHistory(historyfile); m_history = new RclDHistory(historyfile);
connect(sSearch, SIGNAL(startSearch(Rcl::AdvSearchData)), connect(sSearch, SIGNAL(startSearch(Rcl::AdvSearchData)),
this, SLOT(startAdvSearch(Rcl::AdvSearchData))); this, SLOT(startAdvSearch(Rcl::AdvSearchData)));
connect(sSearch, SIGNAL(clearSearch()), connect(sSearch, SIGNAL(clearSearch()), resList, SLOT(resetSearch()));
resList, SLOT(resetSearch())); connect(resList, SIGNAL(docExpand(int)), this, SLOT(docExpand(int)));
nextPageAction->setIconSet(createIconSet("nextpage.png")); nextPageAction->setIconSet(createIconSet("nextpage.png"));
prevPageAction->setIconSet(createIconSet("prevpage.png")); prevPageAction->setIconSet(createIconSet("prevpage.png"));
@ -289,9 +289,16 @@ void RclMain::startAdvSearch(Rcl::AdvSearchData sdata)
resList->resetSearch(); resList->resetSearch();
if (!rcldb->setQuery(sdata, prefs.queryStemLang.length() > 0 ? int qopts = 0;
Rcl::Db::QO_STEM : Rcl::Db::QO_NONE, if (prefs.queryBuildAbstract && !sdata.fileNameOnly()) {
prefs.queryStemLang.ascii())) qopts |= Rcl::Db::QO_BUILD_ABSTRACT;
if (prefs.queryReplaceAbstract)
qopts |= Rcl::Db::QO_REPLACE_ABSTRACT;
}
if (!prefs.queryStemLang.length() == 0)
qopts |= Rcl::Db::QO_STEM;
if (!rcldb->setQuery(sdata, qopts, prefs.queryStemLang.ascii()))
return; return;
curPreview = 0; curPreview = 0;
@ -409,6 +416,8 @@ void RclMain::startPreview(int docnum)
curPreview->setCaption(resList->getDescription()); curPreview->setCaption(resList->getDescription());
connect(curPreview, SIGNAL(previewClosed(QWidget *)), connect(curPreview, SIGNAL(previewClosed(QWidget *)),
this, SLOT(previewClosed(QWidget *))); this, SLOT(previewClosed(QWidget *)));
connect(curPreview, SIGNAL(wordSelect(QString)),
this, SLOT(ssearchAddTerm(QString)));
curPreview->show(); curPreview->show();
} else { } else {
if (curPreview->makeDocCurrent(fn, doc)) { if (curPreview->makeDocCurrent(fn, doc)) {
@ -422,6 +431,13 @@ void RclMain::startPreview(int docnum)
curPreview->closeCurrentTab(); curPreview->closeCurrentTab();
} }
void RclMain::ssearchAddTerm(QString term)
{
QString text = sSearch->queryText->text();
text += QString::fromLatin1(" ") + term;
sSearch->queryText->setText(text);
}
void RclMain::startNativeViewer(int docnum) void RclMain::startNativeViewer(int docnum)
{ {
Rcl::Doc doc; Rcl::Doc doc;
@ -495,6 +511,23 @@ void RclMain::startManual()
startHelpBrowser(); startHelpBrowser();
} }
void RclMain::docExpand(int docnum)
{
Rcl::Doc doc;
if (!resList->getDoc(docnum, doc))
return;
list<string> terms;
terms = rcldb->expand(doc);
QString text = sSearch->queryText->text();
for (list<string>::iterator it = terms.begin(); it != terms.end(); it++) {
text += QString::fromLatin1(" \"") +
QString::fromUtf8((*it).c_str()) + QString::fromLatin1("\"");
}
sSearch->queryText->setText(text);
sSearch->setAnyTermMode();
sSearch->startSimpleSearch();
}
void RclMain::showDocHistory() void RclMain::showDocHistory()
{ {
LOGDEB(("RclMain::showDocHistory\n")); LOGDEB(("RclMain::showDocHistory\n"));

View File

@ -60,6 +60,8 @@ public slots:
virtual void setUIPrefs(); virtual void setUIPrefs();
virtual void enableNextPage(bool); virtual void enableNextPage(bool);
virtual void enablePrevPage(bool); virtual void enablePrevPage(bool);
virtual void docExpand(int);
virtual void ssearchAddTerm(QString);
protected: protected:
Preview *curPreview; Preview *curPreview;
advsearch *asearchform; advsearch *asearchform;

View File

@ -1,5 +1,5 @@
#ifndef lint #ifndef lint
static char rcsid[] = "@(#$Id: rclreslist.cpp,v 1.13 2006-04-20 09:20:09 dockes Exp $ (C) 2005 J.F.Dockes"; static char rcsid[] = "@(#$Id: rclreslist.cpp,v 1.14 2006-04-22 06:27:37 dockes Exp $ (C) 2005 J.F.Dockes";
#endif #endif
#include <time.h> #include <time.h>
@ -294,7 +294,7 @@ void RclResList::showResultPage()
if (!doc.fbytes.empty()) if (!doc.fbytes.empty())
fsize = atol(doc.fbytes.c_str()); fsize = atol(doc.fbytes.c_str());
string sizebuf; string sizebuf;
if (dsize >= 0) { if (dsize > 0) {
sizebuf = displayableBytes(dsize); sizebuf = displayableBytes(dsize);
if (fsize > 10 * dsize && fsize - dsize > 1000) if (fsize > 10 * dsize && fsize - dsize > 1000)
sizebuf += string(" / ") + displayableBytes(fsize); sizebuf += string(" / ") + displayableBytes(fsize);
@ -438,6 +438,7 @@ QPopupMenu *RclResList::createPopupMenu(const QPoint& pos)
popup->insertItem(tr("&Edit"), this, SLOT(menuEdit())); popup->insertItem(tr("&Edit"), this, SLOT(menuEdit()));
popup->insertItem(tr("&Copy File Name"), this, SLOT(menuCopyFN())); popup->insertItem(tr("&Copy File Name"), this, SLOT(menuCopyFN()));
popup->insertItem(tr("Copy &Url"), this, SLOT(menuCopyURL())); popup->insertItem(tr("Copy &Url"), this, SLOT(menuCopyURL()));
popup->insertItem(tr("&More like this"), this, SLOT(menuExpand()));
return popup; return popup;
} }
@ -467,6 +468,13 @@ void RclResList::menuCopyURL()
QClipboard::Selection); QClipboard::Selection);
} }
} }
void RclResList::menuExpand()
{
Rcl::Doc doc;
if (rcldb && getDoc(m_docnum, doc)) {
emit docExpand(m_docnum);
}
}
QString RclResList::getDescription() QString RclResList::getDescription()
{ {

View File

@ -1,6 +1,6 @@
#ifndef _RCLRESLIST_H_INCLUDED_ #ifndef _RCLRESLIST_H_INCLUDED_
#define _RCLRESLIST_H_INCLUDED_ #define _RCLRESLIST_H_INCLUDED_
/* @(#$Id: rclreslist.h,v 1.6 2006-04-20 09:20:10 dockes Exp $ (C) 2005 J.F.Dockes */ /* @(#$Id: rclreslist.h,v 1.7 2006-04-22 06:27:37 dockes Exp $ (C) 2005 J.F.Dockes */
#include <qtextbrowser.h> #include <qtextbrowser.h>
#include <qpopupmenu.h> #include <qpopupmenu.h>
@ -33,6 +33,7 @@ class RclResList : public QTextBrowser
virtual void menuEdit(); virtual void menuEdit();
virtual void menuCopyFN(); virtual void menuCopyFN();
virtual void menuCopyURL(); virtual void menuCopyURL();
virtual void menuExpand();
signals: signals:
void nextPageAvailable(bool); void nextPageAvailable(bool);
@ -40,6 +41,7 @@ class RclResList : public QTextBrowser
void docEditClicked(int); void docEditClicked(int);
void docPreviewClicked(int); void docPreviewClicked(int);
void headerClicked(); void headerClicked();
void docExpand(int);
protected: protected:
void keyPressEvent(QKeyEvent *e); void keyPressEvent(QKeyEvent *e);

View File

@ -147,6 +147,7 @@
<function>init()</function> <function>init()</function>
<function>completion()</function> <function>completion()</function>
<function returnType="bool">event( QEvent * evt )</function> <function returnType="bool">event( QEvent * evt )</function>
<function>setAnyTermMode()</function>
</functions> </functions>
<layoutdefaults spacing="6" margin="0"/> <layoutdefaults spacing="6" margin="0"/>
</UI> </UI>

View File

@ -75,6 +75,10 @@ void SSearchBase::startSimpleSearch()
emit startSearch(sdata); emit startSearch(sdata);
} }
void SSearchBase::setAnyTermMode()
{
searchTypCMB->setCurrentItem(0);
}
// Complete last word in input by querying db for all possible terms. // Complete last word in input by querying db for all possible terms.
void SSearchBase::completion() void SSearchBase::completion()

View File

@ -1,5 +1,5 @@
#ifndef lint #ifndef lint
static char rcsid[] = "@(#$Id: rcldb.cpp,v 1.69 2006-04-19 08:26:08 dockes Exp $ (C) 2004 J.F.Dockes"; static char rcsid[] = "@(#$Id: rcldb.cpp,v 1.70 2006-04-22 06:27:37 dockes Exp $ (C) 2004 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
@ -128,7 +128,7 @@ class Native {
}; };
Db::Db() Db::Db()
: m_qOpts(0) : m_qOpts(QO_NONE)
{ {
m_ndb = new Native; m_ndb = new Native;
} }
@ -786,7 +786,7 @@ static void stringToXapianQueries(const string &iq,
const string& stemlang, const string& stemlang,
Native *m_ndb, Native *m_ndb,
list<Xapian::Query> &pqueries, list<Xapian::Query> &pqueries,
Db::QueryOpts opts = Db::QO_NONE) unsigned int opts = Db::QO_NONE)
{ {
string qstring = iq; string qstring = iq;
@ -855,8 +855,7 @@ static void stringToXapianQueries(const string &iq,
} }
// Prepare query out of "advanced search" data // Prepare query out of "advanced search" data
bool Db::setQuery(AdvSearchData &sdata, QueryOpts opts, bool Db::setQuery(AdvSearchData &sdata, int opts, const string& stemlang)
const string& stemlang)
{ {
LOGDEB(("Db::setQuery: adv:\n")); LOGDEB(("Db::setQuery: adv:\n"));
LOGDEB((" allwords: %s\n", sdata.allwords.c_str())); LOGDEB((" allwords: %s\n", sdata.allwords.c_str()));
@ -873,6 +872,7 @@ bool Db::setQuery(AdvSearchData &sdata, QueryOpts opts,
LOGDEB((" searched file types: %s\n", ft.c_str())); LOGDEB((" searched file types: %s\n", ft.c_str()));
if (!sdata.topdir.empty()) if (!sdata.topdir.empty())
LOGDEB((" restricted to: %s\n", sdata.topdir.c_str())); LOGDEB((" restricted to: %s\n", sdata.topdir.c_str()));
LOGDEB((" Options: 0x%x\n", opts));
m_filterTopDir = sdata.topdir; m_filterTopDir = sdata.topdir;
m_dbindices.clear(); m_dbindices.clear();
@ -882,6 +882,8 @@ bool Db::setQuery(AdvSearchData &sdata, QueryOpts opts,
list<Xapian::Query> pqueries; list<Xapian::Query> pqueries;
Xapian::Query xq; Xapian::Query xq;
m_qOpts = opts;
if (!sdata.filename.empty()) { if (!sdata.filename.empty()) {
LOGDEB((" filename search\n")); LOGDEB((" filename search\n"));
// File name search, with possible wildcards. // File name search, with possible wildcards.
@ -929,7 +931,7 @@ bool Db::setQuery(AdvSearchData &sdata, QueryOpts opts,
} }
if (!sdata.allwords.empty()) { if (!sdata.allwords.empty()) {
stringToXapianQueries(sdata.allwords, stemlang, m_ndb, pqueries, opts); stringToXapianQueries(sdata.allwords, stemlang, m_ndb, pqueries, m_qOpts);
if (!pqueries.empty()) { if (!pqueries.empty()) {
Xapian::Query nq = Xapian::Query nq =
Xapian::Query(Xapian::Query::OP_AND, pqueries.begin(), Xapian::Query(Xapian::Query::OP_AND, pqueries.begin(),
@ -941,7 +943,7 @@ bool Db::setQuery(AdvSearchData &sdata, QueryOpts opts,
} }
if (!sdata.orwords.empty()) { if (!sdata.orwords.empty()) {
stringToXapianQueries(sdata.orwords, stemlang, m_ndb, pqueries, opts); stringToXapianQueries(sdata.orwords, stemlang, m_ndb, pqueries, m_qOpts);
if (!pqueries.empty()) { if (!pqueries.empty()) {
Xapian::Query nq = Xapian::Query nq =
Xapian::Query(Xapian::Query::OP_OR, pqueries.begin(), Xapian::Query(Xapian::Query::OP_OR, pqueries.begin(),
@ -953,7 +955,7 @@ bool Db::setQuery(AdvSearchData &sdata, QueryOpts opts,
} }
if (!sdata.orwords1.empty()) { if (!sdata.orwords1.empty()) {
stringToXapianQueries(sdata.orwords1, stemlang, m_ndb, pqueries, opts); stringToXapianQueries(sdata.orwords1, stemlang, m_ndb, pqueries, m_qOpts);
if (!pqueries.empty()) { if (!pqueries.empty()) {
Xapian::Query nq = Xapian::Query nq =
Xapian::Query(Xapian::Query::OP_OR, pqueries.begin(), Xapian::Query(Xapian::Query::OP_OR, pqueries.begin(),
@ -1101,7 +1103,7 @@ bool Native::dbDataToRclDoc(std::string &data, Doc &doc,
int qopts, int qopts,
Xapian::docid docid, const list<string>& terms) Xapian::docid docid, const list<string>& terms)
{ {
LOGDEB1(("Db::dbDataToRclDoc: data: %s\n", data.c_str())); LOGDEB1(("Db::dbDataToRclDoc: opts %x data: %s\n", qopts, data.c_str()));
ConfSimple parms(&data); ConfSimple parms(&data);
if (!parms.ok()) if (!parms.ok())
return false; return false;
@ -1118,7 +1120,7 @@ bool Native::dbDataToRclDoc(std::string &data, Doc &doc,
doc.abstract = doc.abstract.substr(rclSyntAbs.length()); doc.abstract = doc.abstract.substr(rclSyntAbs.length());
syntabs = true; syntabs = true;
} }
if ((qopts && Db::QO_BUILD_ABSTRACT) && !terms.empty()) { if ((qopts & Db::QO_BUILD_ABSTRACT) && !terms.empty()) {
LOGDEB1(("dbDataToRclDoc:: building abstract from position data\n")); LOGDEB1(("dbDataToRclDoc:: building abstract from position data\n"));
if (doc.abstract.empty() || syntabs || if (doc.abstract.empty() || syntabs ||
(qopts & Db::QO_REPLACE_ABSTRACT)) (qopts & Db::QO_REPLACE_ABSTRACT))
@ -1127,6 +1129,7 @@ bool Native::dbDataToRclDoc(std::string &data, Doc &doc,
parms.get(string("ipath"), doc.ipath); parms.get(string("ipath"), doc.ipath);
parms.get(string("fbytes"), doc.fbytes); parms.get(string("fbytes"), doc.fbytes);
parms.get(string("dbytes"), doc.dbytes); parms.get(string("dbytes"), doc.dbytes);
doc.xdocid = docid;
return true; return true;
} }
@ -1295,6 +1298,24 @@ bool Db::getDoc(const string &fn, const string &ipath, Doc &doc, int *pc)
return false; return false;
} }
list<string> Db::expand(const Doc &doc)
{
list<string> res;
if (!m_ndb || !m_ndb->enquire) {
LOGERR(("Db::expand: no query opened\n"));
return res;
}
Xapian::RSet rset;
rset.add_document(Xapian::docid(doc.xdocid));
Xapian::ESet eset = m_ndb->enquire->get_eset(10, rset);
LOGDEB(("ESet terms:\n"));
for (Xapian::ESetIterator it = eset.begin(); it != eset.end(); it++) {
LOGDEB((" [%s]\n", (*it).c_str()));
res.push_back(*it);
}
return res;
}
// Width of a sample extract around a query term // Width of a sample extract around a query term
// //
// We build a possibly full size but sparsely populated (only around // We build a possibly full size but sparsely populated (only around

View File

@ -16,7 +16,7 @@
*/ */
#ifndef _DB_H_INCLUDED_ #ifndef _DB_H_INCLUDED_
#define _DB_H_INCLUDED_ #define _DB_H_INCLUDED_
/* @(#$Id: rcldb.h,v 1.33 2006-04-19 08:26:08 dockes Exp $ (C) 2004 J.F.Dockes */ /* @(#$Id: rcldb.h,v 1.34 2006-04-22 06:27:37 dockes Exp $ (C) 2004 J.F.Dockes */
#include <string> #include <string>
#include <list> #include <list>
@ -77,9 +77,11 @@ class Doc {
// The following fields don't go to the db record // The following fields don't go to the db record
string text; // text is split and indexed string text; // During indexing only: text returned by input handler will
// be split and indexed
int pc; // used by sortseq, convenience int pc; // used by sortseq, convenience
unsigned long xdocid; // Opaque: rcldb doc identifier.
void erase() { void erase() {
url.erase(); url.erase();
@ -96,6 +98,8 @@ class Doc {
dbytes.erase(); dbytes.erase();
text.erase(); text.erase();
pc = 0;
xdocid = 0;
} }
}; };
@ -114,7 +118,7 @@ class Db {
enum QueryOpts {QO_NONE=0, QO_STEM = 1, QO_BUILD_ABSTRACT = 2, enum QueryOpts {QO_NONE=0, QO_STEM = 1, QO_BUILD_ABSTRACT = 2,
QO_REPLACE_ABSTRACT = 4}; QO_REPLACE_ABSTRACT = 4};
bool open(const string &dbdir, OpenMode mode, int qops = 0); bool open(const string &dbdir, OpenMode mode, int qops = QO_NONE);
bool close(); bool close();
bool isopen(); bool isopen();
@ -130,7 +134,7 @@ class Db {
// Query-related functions // Query-related functions
// Parse query string and initialize query // Parse query string and initialize query
bool setQuery(AdvSearchData &q, QueryOpts opts = QO_NONE, bool setQuery(AdvSearchData &q, int opts = QO_NONE,
const string& stemlang = "english"); const string& stemlang = "english");
bool getQueryTerms(list<string>& terms); bool getQueryTerms(list<string>& terms);
@ -156,6 +160,9 @@ class Db {
/** Get document for given filename and ipath */ /** Get document for given filename and ipath */
bool getDoc(const string &fn, const string &ipath, Doc &doc, int *percent); bool getDoc(const string &fn, const string &ipath, Doc &doc, int *percent);
/** Expand query */
list<string> expand(const Doc &doc);
/** Get results count for current query */ /** Get results count for current query */
int getResCnt(); int getResCnt();

View File

@ -1,6 +1,6 @@
#ifndef _SEARCHDATA_H_INCLUDED_ #ifndef _SEARCHDATA_H_INCLUDED_
#define _SEARCHDATA_H_INCLUDED_ #define _SEARCHDATA_H_INCLUDED_
/* @(#$Id: searchdata.h,v 1.1 2006-04-19 08:26:08 dockes Exp $ (C) 2004 J.F.Dockes */ /* @(#$Id: searchdata.h,v 1.2 2006-04-22 06:27:37 dockes Exp $ (C) 2004 J.F.Dockes */
namespace Rcl { namespace Rcl {
/** /**
@ -29,6 +29,10 @@ class AdvSearchData {
filename.erase(); filename.erase();
description.erase(); description.erase();
} }
bool fileNameOnly() {
return allwords.empty() && phrase.empty() && orwords.empty() &&
orwords1.empty() && nowords.empty();
}
}; };
} }