/***************************************************************************
- * Copyright (C) 2005-08 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#ifndef CHATVIEWSEARCHCONTROLLER_H
#define CHATVIEWSEARCHCONTROLLER_H
-#include <QObject>
+#include <QGraphicsItem>
#include <QHash>
#include <QPointer>
#include <QString>
#include <QTimeLine>
+#include "chatscene.h"
#include "message.h"
class QGraphicsItem;
class ChatLine;
-class ChatScene;
class SearchHighlightItem;
-class ChatViewSearchController : public QObject {
- Q_OBJECT
+class ChatViewSearchController : public QObject
+{
+ Q_OBJECT
public:
- ChatViewSearchController(QObject *parent = 0);
+ ChatViewSearchController(QObject *parent = 0);
- inline const QString &searchString() const { return _searchString; }
+ inline const QString &searchString() const { return _searchString; }
- void setScene(ChatScene *scene);
+ void setScene(ChatScene *scene);
public slots:
- void setSearchString(const QString &searchString);
- void setCaseSensitive(bool caseSensitive);
- void setSearchSenders(bool searchSenders);
- void setSearchMsgs(bool searchMsgs);
- void setSearchOnlyRegularMsgs(bool searchOnlyRegularMsgs);
+ void setSearchString(const QString &searchString);
+ void setCaseSensitive(bool caseSensitive);
+ void setSearchSenders(bool searchSenders);
+ void setSearchMsgs(bool searchMsgs);
+ void setSearchOnlyRegularMsgs(bool searchOnlyRegularMsgs);
- void highlightNext();
- void highlightPrev();
+ void highlightNext();
+ void highlightPrev();
private slots:
- void sceneDestroyed();
- void updateHighlights(bool reuse = false);
+ void sceneDestroyed();
+ void updateHighlights(bool reuse = false);
+
+ void repositionHighlights();
+ void repositionHighlights(ChatLine *line);
signals:
- void newCurrentHighlight(QGraphicsItem *highlightItem);
+ void newCurrentHighlight(QGraphicsItem *highlightItem);
private:
- QString _searchString;
- ChatScene *_scene;
- QList<SearchHighlightItem *> _highlightItems;
- int _currentHighlight;
+ QString _searchString;
+ ChatScene *_scene;
+ QList<SearchHighlightItem *> _highlightItems;
+ int _currentHighlight;
- bool _caseSensitive;
- bool _searchSenders;
- bool _searchMsgs;
- bool _searchOnlyRegularMsgs;
+ bool _caseSensitive;
+ bool _searchSenders;
+ bool _searchMsgs;
+ bool _searchOnlyRegularMsgs;
- inline Qt::CaseSensitivity caseSensitive() const { return _caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive; }
+ inline Qt::CaseSensitivity caseSensitive() const { return _caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive; }
- inline bool checkType(Message::Type type) const { return type & (Message::Plain | Message::Notice | Message::Action); }
- void highlightLine(ChatLine *line);
+ inline bool checkType(Message::Type type) const { return type & (Message::Plain | Message::Notice | Message::Action); }
+
+ void checkMessagesForHighlight(int start = 0, int end = -1);
+ void highlightLine(ChatLine *line);
+ void updateHighlights(ChatLine *line);
};
// Highlight Items
-#include <QGraphicsItem>
+class SearchHighlightItem : public QObject, public QGraphicsItem
+{
+ Q_OBJECT
-class SearchHighlightItem : public QObject, public QGraphicsItem {
- Q_OBJECT
+// Apparently, there are broken Qt 4.8.2 mocs around that will fail without this (otherwise useless) #if... looking at you, Wheezy!
+#if QT_VERSION >= 0x040600
+ Q_INTERFACES(QGraphicsItem)
+#endif
-public:
- SearchHighlightItem(QRectF wordRect, QGraphicsItem *parent = 0);
- inline virtual QRectF boundingRect() const { return _boundingRect; }
- virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
- void setHighlighted(bool highlighted);
+public :
+ SearchHighlightItem(QRectF wordRect, QGraphicsItem *parent = 0);
+ virtual inline QRectF boundingRect() const { return _boundingRect; }
+ void updateGeometry(qreal width, qreal height);
+ virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+ enum { Type = ChatScene::SearchHighlightType };
+ virtual inline int type() const { return Type; }
+
+ void setHighlighted(bool highlighted);
+
+ static bool firstInLine(QGraphicsItem *item1, QGraphicsItem *item2);
private slots:
- void updateHighlight(qreal value);
+ void updateHighlight(qreal value);
private:
- QRectF _boundingRect;
- bool _highlighted;
- qreal _alpha;
- QTimeLine _timeLine;
+ QRectF _boundingRect;
+ bool _highlighted;
+ int _alpha;
+ QTimeLine _timeLine;
};
+
#endif //CHATVIEWSEARCHCONTROLLER_H