From 9d42648511095e996e86adce1ac3478fa6c07436 Mon Sep 17 00:00:00 2001 From: dockes Date: Wed, 20 Jun 2007 13:16:11 +0000 Subject: [PATCH] menu entry to reset document history --- src/qtgui/preview_w.cpp | 5 ++++- src/qtgui/rclmain.ui | 10 ++++++++++ src/qtgui/rclmain_w.cpp | 18 ++++++++++++++---- src/qtgui/rclmain_w.h | 1 + src/query/history.cpp | 31 ++++++++++++++++++++++--------- src/query/history.h | 7 +++++-- 6 files changed, 56 insertions(+), 16 deletions(-) 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;