From a1d0bbf0ff0b01097f764de117de772090991d8b Mon Sep 17 00:00:00 2001 From: dockes Date: Tue, 21 Mar 2006 13:46:37 +0000 Subject: [PATCH] replaced (double)clicks in the result list with links --- src/qtgui/rclmain.cpp | 6 +- src/qtgui/rclreslist.cpp | 146 ++++++--------------------------------- src/qtgui/rclreslist.h | 23 ++---- 3 files changed, 29 insertions(+), 146 deletions(-) diff --git a/src/qtgui/rclmain.cpp b/src/qtgui/rclmain.cpp index b7c1f1f4..d6ead04b 100644 --- a/src/qtgui/rclmain.cpp +++ b/src/qtgui/rclmain.cpp @@ -1,5 +1,5 @@ #ifndef lint -static char rcsid[] = "@(#$Id: rclmain.cpp,v 1.12 2006-03-21 09:15:56 dockes Exp $ (C) 2005 J.F.Dockes"; +static char rcsid[] = "@(#$Id: rclmain.cpp,v 1.13 2006-03-21 13:46:37 dockes Exp $ (C) 2005 J.F.Dockes"; #endif /* * This program is free software; you can redistribute it and/or modify @@ -254,7 +254,7 @@ void RclMain::startAdvSearch(Rcl::AdvSearchData sdata) exit(1); } - resList->m_winfirst = -1; + resList->resetSearch(); if (!rcldb->setQuery(sdata, prefs.queryStemLang.length() > 0 ? Rcl::Db::QO_STEM : Rcl::Db::QO_NONE, @@ -464,7 +464,7 @@ void RclMain::startManual() void RclMain::showDocHistory() { LOGDEB(("RclMain::showDocHistory\n")); - resList->m_winfirst = -1; + resList->resetSearch(); curPreview = 0; DocSequence *docsource; diff --git a/src/qtgui/rclreslist.cpp b/src/qtgui/rclreslist.cpp index d785da85..33b9038e 100644 --- a/src/qtgui/rclreslist.cpp +++ b/src/qtgui/rclreslist.cpp @@ -1,5 +1,5 @@ #ifndef lint -static char rcsid[] = "@(#$Id: rclreslist.cpp,v 1.2 2006-03-21 13:27:37 dockes Exp $ (C) 2005 J.F.Dockes"; +static char rcsid[] = "@(#$Id: rclreslist.cpp,v 1.3 2006-03-21 13:46:37 dockes Exp $ (C) 2005 J.F.Dockes"; #endif #include @@ -40,8 +40,6 @@ RclResList::RclResList(QWidget* parent, const char* name) clearWState( WState_Polished ); // signals and slots connections - connect(this, SIGNAL(doubleClicked(int, int)), - this, SLOT(doubleClicked(int,int))); connect(this, SIGNAL(clicked(int, int)), this, SLOT(clicked(int,int))); connect(this, SIGNAL(linkClicked(const QString &)), this, SLOT(linkWasClicked(const QString &))); @@ -49,14 +47,7 @@ RclResList::RclResList(QWidget* parent, const char* name) // Code from init: m_winfirst = -1; - m_mouseDrag = false; - m_mouseDown = false; - m_par = -1; - m_car = -1; - m_waitingdbl = false; - m_dblclck = false; m_docsource = 0; - viewport()->installEventFilter(this); } @@ -90,119 +81,6 @@ bool RclResList::getDoc(int docnum, Rcl::Doc &doc) return false; } -// Get document number-in-window from paragraph number -int RclResList::reldocnumfromparnum(int par) -{ - std::map::iterator it = m_pageParaToReldocnums.find(par); - int rdn; - if (it != m_pageParaToReldocnums.end()) { - rdn = it->second; - } else { - rdn = -1; - } - LOGDEB1(("reldocnumfromparnum: par %d reldoc %d\n", par, rdn)); - return rdn; -} - -// Double click in result list -void RclResList::doubleClicked(int par, int ) -{ - LOGDEB(("RclResList::doubleClicked: par %d\n", par)); -#if 0 - m_dblclck = true; - int reldocnum = reldocnumfromparnum(par); - if (reldocnum < 0) - return; - emit docDoubleClicked(m_winfirst + reldocnum); -#endif -} - -// Single click in result list: we don't actually do anything but -// start a timer because we want to check first if this might be a -// double click -void RclResList::clicked(int par, int car) -{ -#if 0 - if (m_waitingdbl) - return; - LOGDEB(("RclResList::clicked:wfirst %d par %d char %d drg %d\n", - m_winfirst, par, car, m_mouseDrag)); - if (m_mouseDrag) - return; - - // remember par and car - m_par = par; - m_car = car; - m_waitingdbl = true; - m_dblclck = false; - // Wait to see if there's going to be a dblclck - QTimer::singleShot(150, this, SLOT(delayedClick()) ); -#endif -} - - -// This gets called by a timer 100mS after a single click in the -// result list. We don't want to start a preview if the user has -// requested a native viewer by double-clicking. If this was not actually -// a double-clik, we finally say it's a click, and change the active paragraph -void RclResList::delayedClick() -{ - LOGDEB(("RclResList::delayedClick:\n")); - m_waitingdbl = false; - if (m_dblclck) { - LOGDEB1(("RclResList::delayedclick: dbleclick\n")); - m_dblclck = false; - return; - } - - int par = m_par; - - // Erase everything back to white - { - QColor color("white"); - for (int i = 1; i < paragraphs(); i++) - setParagraphBackgroundColor(i, color); - } - - // Color the new active paragraph - QColor color("lightblue"); - setParagraphBackgroundColor(par, color); - - // Document number - int reldocnum = reldocnumfromparnum(par); - - if (reldocnum < 0) { - // emit headerClicked(); - } else { - emit docClicked(m_winfirst + reldocnum); - } -} - -bool RclResList::eventFilter( QObject *o, QEvent *e ) -{ - if (o == viewport()) { - // We don't want btdown+drag+btup to be a click ! So monitor - // mouse events - if (e->type() == QEvent::MouseMove) { - LOGDEB1(("resList: MouseMove\n")); - if (m_mouseDown) - m_mouseDrag = true; - } else if (e->type() == QEvent::MouseButtonPress) { - LOGDEB1(("resList: MouseButtonPress\n")); - m_mouseDown = true; - m_mouseDrag = false; - } else if (e->type() == QEvent::MouseButtonRelease) { - LOGDEB1(("resList: MouseButtonRelease\n")); - m_mouseDown = false; - } else if (e->type() == QEvent::MouseButtonDblClick) { - LOGDEB1(("resList: MouseButtonDblClick\n")); - m_mouseDown = false; - } - } - - return QTextBrowser::eventFilter(o, e); -} - void RclResList::keyPressEvent( QKeyEvent * e ) { if (e->key() == Key_Q && (e->state() & ControlButton)) { @@ -281,8 +159,6 @@ void RclResList::showResultPage() LOGDEB(("showResultPage: rescnt %d, winfirst %d\n", resCnt, m_winfirst)); - m_pageParaToReldocnums.clear(); - // If we are already on the last page, nothing to do: if (m_winfirst >= 0 && (m_winfirst + prefs.respagesize > resCnt)) { @@ -434,7 +310,6 @@ void RclResList::showResultPage() append(str); setCursorPosition(0,0); - m_pageParaToReldocnums[paragraphs()-1] = i; m_curDocs.push_back(doc); } @@ -475,6 +350,25 @@ void RclResList::showResultPage() } } +// Single click in result list: we don't actually do anything but +// start a timer because we want to check first if this might be a +// double click +void RclResList::clicked(int par, int car) +{ + LOGDEB(("RclResList::clicked:wfirst %d par %d char %d\n", + m_winfirst, par, car)); + // Erase everything back to white + { + QColor color("white"); + for (int i = 0; i < paragraphs(); i++) + setParagraphBackgroundColor(i, color); + } + + // Color the new active paragraph + QColor color("lightblue"); + setParagraphBackgroundColor(par, color); +} + void RclResList::linkWasClicked(const QString &s) { LOGDEB(("RclResList::linkClicked: [%s]\n", s.ascii())); diff --git a/src/qtgui/rclreslist.h b/src/qtgui/rclreslist.h index eadb4b73..3618b75f 100644 --- a/src/qtgui/rclreslist.h +++ b/src/qtgui/rclreslist.h @@ -1,6 +1,6 @@ #ifndef _RCLRESLIST_H_INCLUDED_ #define _RCLRESLIST_H_INCLUDED_ -/* @(#$Id: rclreslist.h,v 1.1 2006-03-21 09:15:56 dockes Exp $ (C) 2005 J.F.Dockes */ +/* @(#$Id: rclreslist.h,v 1.2 2006-03-21 13:46:37 dockes Exp $ (C) 2005 J.F.Dockes */ #include @@ -15,22 +15,12 @@ class RclResList : public QTextBrowser RclResList(QWidget* parent = 0, const char* name = 0); virtual ~RclResList(); - int m_winfirst; - bool m_mouseDrag; - bool m_mouseDown; - int m_par; - int m_car; - bool m_waitingdbl; - bool m_dblclck; - + virtual void resetSearch() {m_winfirst = -1;} virtual bool getDoc( int, Rcl::Doc & ); virtual void setDocSource(DocSequence *); - bool eventFilter( QObject *o, QEvent *e ); public slots: - virtual void doubleClicked( int, int ); - virtual void clicked( int, int ); - virtual void delayedClick(); + virtual void clicked(int, int); virtual void resPageUpOrBack(); virtual void resPageDownOrNext(); virtual void resultPageBack(); @@ -44,18 +34,17 @@ class RclResList : public QTextBrowser void headerClicked(); protected: - void keyPressEvent( QKeyEvent * e); + void keyPressEvent(QKeyEvent *e); protected slots: virtual void languageChange(); - virtual void linkWasClicked( const QString & ); + virtual void linkWasClicked(const QString &); private: - std::map m_pageParaToReldocnums; DocSequence *m_docsource; std::vector m_curDocs; + int m_winfirst; - virtual int reldocnumfromparnum( int ); void emitLinkClicked(const QString &s) { emit linkClicked(s); };