qtgui: add menu to erase search history + misc cleanups

This commit is contained in:
Jean-Francois Dockes
2011-01-15 15:39:15 +01:00
parent 85b36d3c34
commit c4f79e49da
12 changed files with 120 additions and 41 deletions
+5 -3
View File
@@ -22,6 +22,9 @@ static char rcsid[] = "@(#$Id: docseq.cpp,v 1.11 2008-09-29 08:59:20 dockes Exp
#include "sortseq.h"
#include "debuglog.h"
string DocSequence::o_sort_trans;
string DocSequence::o_filt_trans;
int DocSequence::getSeqSlice(int offs, int cnt, vector<ResListEntry>& result)
{
int ret = 0;
@@ -78,11 +81,10 @@ bool DocSource::buildStack()
return true;
}
string DocSource::o_sort_trans;
string DocSource::o_filt_trans;
string DocSource::title()
{
if (m_seq.isNull())
return "";
string qual;
if (m_fspec.isNotNull() && !m_sspec.isNotNull())
qual = string(" (") + o_filt_trans + string(")");
+20 -7
View File
@@ -131,6 +131,14 @@ class DocSequence {
virtual bool setSortSpec(const DocSeqSortSpec &) {return false;}
virtual RefCntr<DocSequence> getSourceSeq() {return RefCntr<DocSequence>();}
static void set_translations(const string& sort, const string& filt)
{
o_sort_trans = sort;
o_filt_trans = filt;
}
protected:
static string o_sort_trans;
static string o_filt_trans;
private:
string m_title;
};
@@ -147,20 +155,28 @@ public:
virtual string getAbstract(Rcl::Doc& doc)
{
if (m_seq.isNull())
return "";
return m_seq->getAbstract(doc);
}
virtual string getDescription()
{
if (m_seq.isNull())
return "";
return m_seq->getDescription();
}
virtual bool getTerms(vector<string>& terms,
vector<vector<string> >& groups,
vector<int>& gslks)
{
if (m_seq.isNull())
return false;
return m_seq->getTerms(terms, groups, gslks);
}
virtual void getUTerms(vector<string>& terms)
{
if (m_seq.isNull())
return;
m_seq->getUTerms(terms);
}
virtual string title() {return m_seq->title();}
@@ -183,25 +199,22 @@ public:
virtual bool setSortSpec(const DocSeqSortSpec &);
virtual bool getDoc(int num, Rcl::Doc &doc, string *sh = 0)
{
if (m_seq.isNull())
return false;
return m_seq->getDoc(num, doc, sh);
}
virtual int getResCnt()
{
if (m_seq.isNull())
return 0;
return m_seq->getResCnt();
}
static void set_translations(const string& sort, const string& filt)
{
o_sort_trans = sort;
o_filt_trans = filt;
}
virtual string title();
private:
bool buildStack();
void stripStack();
DocSeqFiltSpec m_fspec;
DocSeqSortSpec m_sspec;
static string o_sort_trans;
static string o_filt_trans;
};
#endif /* _DOCSEQ_H_INCLUDED_ */
+34 -4
View File
@@ -30,7 +30,10 @@ DocSequenceDb::DocSequenceDb(RefCntr<Rcl::Query> q, const string &t,
: DocSequence(t), m_q(q), m_sdata(sdata), m_fsdata(sdata),
m_rescnt(-1),
m_queryBuildAbstract(true),
m_queryReplaceAbstract(false)
m_queryReplaceAbstract(false),
m_isFiltered(false),
m_isSorted(false),
m_needSetQuery(false)
{
}
@@ -57,12 +60,14 @@ string DocSequenceDb::getDescription()
bool DocSequenceDb::getDoc(int num, Rcl::Doc &doc, string *sh)
{
setQuery();
if (sh) sh->erase();
return m_q->getDoc(num, doc);
}
int DocSequenceDb::getResCnt()
{
setQuery();
if (m_rescnt < 0) {
m_rescnt= m_q->getResCnt();
}
@@ -71,6 +76,7 @@ int DocSequenceDb::getResCnt()
string DocSequenceDb::getAbstract(Rcl::Doc &doc)
{
setQuery();
if (!m_q->whatDb())
return doc.meta[Rcl::Doc::keyabs];
string abstract;
@@ -86,6 +92,7 @@ string DocSequenceDb::getAbstract(Rcl::Doc &doc)
bool DocSequenceDb::getEnclosing(Rcl::Doc& doc, Rcl::Doc& pdoc)
{
setQuery();
string udi;
if (!FileInterner::getEnclosing(doc.url, doc.ipath, pdoc.url, pdoc.ipath,
udi))
@@ -95,9 +102,22 @@ bool DocSequenceDb::getEnclosing(Rcl::Doc& doc, Rcl::Doc& pdoc)
list<string> DocSequenceDb::expand(Rcl::Doc &doc)
{
setQuery();
return m_q->expand(doc);
}
string DocSequenceDb::title()
{
string qual;
if (m_isFiltered && !m_isSorted)
qual = string(" (") + o_filt_trans + string(")");
else if (!m_isFiltered && m_isSorted)
qual = string(" (") + o_sort_trans + string(")");
else if (m_isFiltered && m_isSorted)
qual = string(" (") + o_sort_trans + string(",") + o_filt_trans + string(")");
return DocSequence::title() + qual;
}
bool DocSequenceDb::setFiltSpec(const DocSeqFiltSpec &fs)
{
LOGDEB(("DocSequenceDb::setFiltSpec\n"));
@@ -114,10 +134,13 @@ bool DocSequenceDb::setFiltSpec(const DocSeqFiltSpec &fs)
m_fsdata->addFiletype(fs.values[i]);
}
}
m_isFiltered = true;
} else {
m_fsdata = m_sdata;
m_isFiltered = false;
}
return m_q->setQuery(m_fsdata);
m_needSetQuery = true;
return true;
}
bool DocSequenceDb::setSortSpec(const DocSeqSortSpec &spec)
@@ -126,13 +149,20 @@ bool DocSequenceDb::setSortSpec(const DocSeqSortSpec &spec)
spec.field.c_str(), spec.desc ? "desc" : "asc"));
if (spec.isNotNull()) {
m_q->setSortBy(spec.field, !spec.desc);
m_isSorted = true;
} else {
m_q->setSortBy(string(), true);
m_isSorted = false;
}
return m_q->setQuery(m_fsdata);
m_needSetQuery = true;
return true;
}
bool DocSequenceDb::setQuery()
{
return m_q->setQuery(m_fsdata);
if (!m_needSetQuery)
return true;
m_rescnt = -1;
m_needSetQuery = !m_q->setQuery(m_fsdata);
return !m_needSetQuery;
}
+6 -3
View File
@@ -23,8 +23,7 @@
#include "searchdata.h"
#include "rclquery.h"
/** A DocSequence from a Db query (there should be one active for this
to make sense) */
/** A DocSequence from a Db query */
class DocSequenceDb : public DocSequence {
public:
DocSequenceDb(RefCntr<Rcl::Query> q, const string &t,
@@ -44,12 +43,12 @@ class DocSequenceDb : public DocSequence {
virtual bool setFiltSpec(const DocSeqFiltSpec &filtspec);
virtual bool canSort() {return true;}
virtual bool setSortSpec(const DocSeqSortSpec &sortspec);
virtual bool setQuery();
virtual void setAbstractParams(bool qba, bool qra)
{
m_queryBuildAbstract = qba;
m_queryReplaceAbstract = qra;
}
virtual string title();
private:
RefCntr<Rcl::Query> m_q;
@@ -58,6 +57,10 @@ class DocSequenceDb : public DocSequence {
int m_rescnt;
bool m_queryBuildAbstract;
bool m_queryReplaceAbstract;
bool m_isFiltered;
bool m_isSorted;
bool m_needSetQuery; // search data changed, need to reapply before fetch
bool setQuery();
};
#endif /* _DOCSEQDB_H_INCLUDED_ */