diff --git a/src/qtgui/preview_w.cpp b/src/qtgui/preview_w.cpp
index 8be82962..200bda2e 100644
--- a/src/qtgui/preview_w.cpp
+++ b/src/qtgui/preview_w.cpp
@@ -1,5 +1,5 @@
#ifndef lint
-static char rcsid[] = "@(#$Id: preview_w.cpp,v 1.21 2007-06-19 08:36:24 dockes Exp $ (C) 2005 J.F.Dockes";
+static char rcsid[] = "@(#$Id: preview_w.cpp,v 1.22 2007-06-20 13:15:57 dockes Exp $ (C) 2005 J.F.Dockes";
#endif
/*
* This program is free software; you can redistribute it and/or modify
@@ -772,6 +772,9 @@ bool Preview::loadFileInCurrentTab(string fn, size_t sz, const Rcl::Doc &idoc,
canBeep = ocanbeep;
#endif
}
+ // Enter document in document history
+ g_dynconf->enterDoc(fn, doc.ipath);
+
editor->setFocus();
emit(previewExposed(m_searchId, docnum));
return true;
diff --git a/src/qtgui/rclmain.ui b/src/qtgui/rclmain.ui
index e90abdc2..0c77eed1 100644
--- a/src/qtgui/rclmain.ui
+++ b/src/qtgui/rclmain.ui
@@ -78,6 +78,8 @@
-
+
+
-
@@ -174,6 +176,14 @@
Update &index
+
+
+ fileEraseDocHistoryAction
+
+
+ &Erase document history
+
+
helpAbout_RecollAction
diff --git a/src/qtgui/rclmain_w.cpp b/src/qtgui/rclmain_w.cpp
index e382f392..d08a5132 100644
--- a/src/qtgui/rclmain_w.cpp
+++ b/src/qtgui/rclmain_w.cpp
@@ -1,5 +1,5 @@
#ifndef lint
-static char rcsid[] = "@(#$Id: rclmain_w.cpp,v 1.30 2007-06-19 16:19:24 dockes Exp $ (C) 2005 J.F.Dockes";
+static char rcsid[] = "@(#$Id: rclmain_w.cpp,v 1.31 2007-06-20 13:15:58 dockes Exp $ (C) 2005 J.F.Dockes";
#endif
/*
* This program is free software; you can redistribute it and/or modify
@@ -139,6 +139,8 @@ void RclMain::init()
connect(fileExitAction, SIGNAL(activated() ), this, SLOT(fileExit() ) );
connect(fileStart_IndexingAction, SIGNAL(activated()),
this, SLOT(startIndexing()));
+ connect(fileEraseDocHistoryAction, SIGNAL(activated()),
+ this, SLOT(eraseDocHistory()));
connect(helpAbout_RecollAction, SIGNAL(activated()),
this, SLOT(showAboutDialog()));
connect(userManualAction, SIGNAL(activated()), this, SLOT(startManual()));
@@ -485,8 +487,6 @@ void RclMain::startPreview(int docnum, int mod)
}
(void)curPreview->addEditorTab();
}
- // Enter document in document history
- g_dynconf->enterDoc(fn, doc.ipath);
if (!curPreview->loadFileInCurrentTab(fn, st.st_size, doc, docnum))
curPreview->closeCurrentTab();
}
@@ -519,7 +519,6 @@ void RclMain::startPreview(Rcl::Doc doc)
preview->setSId(0, HiliteData());
connect(preview, SIGNAL(wordSelect(QString)),
this, SLOT(ssearchAddTerm(QString)));
- g_dynconf->enterDoc(fn, doc.ipath);
preview->show();
if (!preview->loadFileInCurrentTab(fn, st.st_size, doc, 0))
preview->closeCurrentTab();
@@ -821,6 +820,7 @@ void RclMain::showDocHistory()
m_searchId++;
+ // If you change the title, also change it in eraseDocHistory()
DocSequenceHistory *src =
new DocSequenceHistory(rcldb, g_dynconf,
string(tr("Document history").utf8()));
@@ -829,6 +829,16 @@ void RclMain::showDocHistory()
setDocSequence();
}
+void RclMain::eraseDocHistory()
+{
+ g_dynconf->eraseAll(RclHistory::docSubkey);
+ // We want to reset the displayed history if it is currently shown. Using
+ // the title value is an ugly hack
+ if (m_docSource->title() ==
+ string((const char *)tr("Document history").utf8())) {
+ showDocHistory();
+ }
+}
void RclMain::sortDataChanged(DocSeqSortSpec spec)
{
diff --git a/src/qtgui/rclmain_w.h b/src/qtgui/rclmain_w.h
index a3416cc6..ea0a1863 100644
--- a/src/qtgui/rclmain_w.h
+++ b/src/qtgui/rclmain_w.h
@@ -96,6 +96,7 @@ public slots:
virtual void previewPrevInTab(int sid, int docnum);
virtual void previewExposed(int sid, int docnum);
virtual void resetSearch();
+ virtual void eraseDocHistory();
protected:
virtual void closeEvent( QCloseEvent * );
diff --git a/src/query/history.cpp b/src/query/history.cpp
index 512020b0..bc1e00af 100644
--- a/src/query/history.cpp
+++ b/src/query/history.cpp
@@ -1,5 +1,5 @@
#ifndef lint
-static char rcsid[] = "@(#$Id: history.cpp,v 1.7 2006-09-11 12:05:39 dockes Exp $ (C) 2005 J.F.Dockes";
+static char rcsid[] = "@(#$Id: history.cpp,v 1.8 2007-06-20 13:16:11 dockes Exp $ (C) 2005 J.F.Dockes";
#endif
/*
* This program is free software; you can redistribute it and/or modify
@@ -31,7 +31,6 @@ static char rcsid[] = "@(#$Id: history.cpp,v 1.7 2006-09-11 12:05:39 dockes Exp
using namespace std;
#endif
-static const char *docSubkey = "docs";
// Encode/decode document history entry: Unix time + base64 of fn +
// base64 of ipath separated by a space. If ipath is not set, there
@@ -182,6 +181,8 @@ list RclHistory::getStringList(const string sk)
return sl;
}
+string RclHistory::docSubkey = "docs";
+
/// *************** History entries specific methods
bool RclHistory::enterDoc(const string fn, const string ipath)
{
@@ -213,8 +214,11 @@ using namespace std;
static string thisprog;
static string usage =
- " [-e] [-s ]"
- " \n\n"
+ "trhist [opts] \n"
+ " [-s ]: specify subkey (default: RclHistory::docSubkey)\n"
+ " [-e] : erase all\n"
+ " [-a ] enter string (needs -s, no good for history entries\n"
+ "\n"
;
static void
@@ -227,10 +231,12 @@ Usage(void)
static int op_flags;
#define OPT_e 0x2
#define OPT_s 0x4
+#define OPT_a 0x8
int main(int argc, char **argv)
{
- string sk = "docs";
+ string sk = RclHistory::docSubkey;
+ string value;
thisprog = argv[0];
argc--; argv++;
@@ -242,24 +248,31 @@ int main(int argc, char **argv)
Usage();
while (**argv)
switch (*(*argv)++) {
+ case 'a': op_flags |= OPT_a; if (argc < 2) Usage();
+ value = *(++argv); argc--;
+ goto b1;
case 's': op_flags |= OPT_s; if (argc < 2) Usage();
- sk = *(++argv);
- argc--;
+ sk = *(++argv); argc--;
goto b1;
case 'e': op_flags |= OPT_e; break;
default: Usage(); break;
}
b1: argc--; argv++;
}
- if (argc != 0)
+ if (argc != 1)
Usage();
+ string filename = *argv++;argc--;
- RclHistory hist("toto", 5);
+ RclHistory hist(filename, 5);
DebugLog::getdbl()->setloglevel(DEBDEB1);
DebugLog::setfilename("stderr");
if (op_flags & OPT_e) {
hist.eraseAll(sk);
+ } else if (op_flags & OPT_a) {
+ if (!(op_flags & OPT_s))
+ Usage();
+ hist.enterString(sk, value);
} else {
for (int i = 0; i < 10; i++) {
char docname[100];
diff --git a/src/query/history.h b/src/query/history.h
index 760c85b8..7320a323 100644
--- a/src/query/history.h
+++ b/src/query/history.h
@@ -16,7 +16,7 @@
*/
#ifndef _HISTORY_H_INCLUDED_
#define _HISTORY_H_INCLUDED_
-/* @(#$Id: history.h,v 1.6 2006-10-02 12:33:13 dockes Exp $ (C) 2004 J.F.Dockes */
+/* @(#$Id: history.h,v 1.7 2007-06-20 13:16:11 dockes Exp $ (C) 2004 J.F.Dockes */
/**
* Dynamic configuration storage
@@ -94,7 +94,8 @@ class RclHistory {
: m_mlen(maxsize), m_data(fn.c_str()) {}
bool ok() {return m_data.getStatus() == ConfSimple::STATUS_RW;}
- // Specific methods for history entries
+ // Specific methods for history entries. These are for convenience, they
+ // just call regular methods with key RclHistory::docSubkey;
bool enterDoc(const string fn, const string ipath);
list getDocHistory();
@@ -104,6 +105,8 @@ class RclHistory {
bool eraseAll(const string& sk);
bool truncate(const string& sk, unsigned int n);
+ static string docSubkey;
+
private:
unsigned int m_mlen;
ConfSimple m_data;