X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatviewsearchcontroller.h;h=9e3adf5bc72bc119b5f2a791803fc7ac5068ec29;hp=6d8dc2d9bdb754c6516fc5f1083c6491aabc5788;hb=57982f5802c957e768ce842888591115694fcbef;hpb=a117d3bd1592bae3b14630c953790a005b3c3a3d diff --git a/src/qtui/chatviewsearchcontroller.h b/src/qtui/chatviewsearchcontroller.h index 6d8dc2d9..9e3adf5b 100644 --- a/src/qtui/chatviewsearchcontroller.h +++ b/src/qtui/chatviewsearchcontroller.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -25,9 +25,12 @@ #include #include #include +#include +#include "chatscene.h" #include "message.h" +class QGraphicsItem; class ChatLine; class ChatScene; class SearchHighlightItem; @@ -49,14 +52,24 @@ public slots: void setSearchMsgs(bool searchMsgs); void setSearchOnlyRegularMsgs(bool searchOnlyRegularMsgs); + void highlightNext(); + void highlightPrev(); + private slots: void sceneDestroyed(); void updateHighlights(bool reuse = false); + void repositionHighlights(); + void repositionHighlights(ChatLine *line); + +signals: + void newCurrentHighlight(QGraphicsItem *highlightItem); + private: QString _searchString; ChatScene *_scene; QList _highlightItems; + int _currentHighlight; bool _caseSensitive; bool _searchSenders; @@ -66,21 +79,42 @@ private: 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 checkMessagesForHighlight(int start = 0, int end = -1); void highlightLine(ChatLine *line); + void updateHighlights(ChatLine *line); }; // Highlight Items #include -class SearchHighlightItem : public QGraphicsItem { +class SearchHighlightItem : public QObject, public QGraphicsItem { + Q_OBJECT +#if QT_VERSION >= 0x040600 + Q_INTERFACES(QGraphicsItem) +#endif + public: SearchHighlightItem(QRectF wordRect, QGraphicsItem *parent = 0); - inline virtual QRectF boundingRect() const { return _boundingRect; } + 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); private: QRectF _boundingRect; + bool _highlighted; + int _alpha; + QTimeLine _timeLine; }; #endif //CHATVIEWSEARCHCONTROLLER_H