X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatscene.h;h=b90de710d30b3f30b365cdef8ce23067892b6626;hp=852a8d1c561e2110854099ccfd380f12d035b226;hb=6eebebc97f84a94f732b05a793ea8e4c000643ab;hpb=9ce9c0ab3ac6f4bda4e3a70bf13a9c07d2debfe6 diff --git a/src/qtui/chatscene.h b/src/qtui/chatscene.h index 852a8d1c..b90de710 100644 --- a/src/qtui/chatscene.h +++ b/src/qtui/chatscene.h @@ -22,6 +22,7 @@ #define CHATSCENE_H_ #include +#include #include #include #include @@ -61,6 +62,7 @@ public: enum ClickMode { NoClick, + DragStartClick, SingleClick, DoubleClick, TripleClick @@ -70,19 +72,21 @@ public: virtual ~ChatScene(); inline QAbstractItemModel *model() const { return _model; } + inline MessageFilter *filter() const { return qobject_cast(_model); } inline QString idString() const { return _idString; } - int rowByScenePos(qreal y); - inline int rowByScenePos(const QPointF &pos) { return rowByScenePos(pos.y()); } - ChatLineModel::ColumnType columnByScenePos(qreal x); - inline ChatLineModel::ColumnType columnByScenePos(const QPointF &pos) { return columnByScenePos(pos.x()); } + int rowByScenePos(qreal y) const; + inline int rowByScenePos(const QPointF &pos) const { return rowByScenePos(pos.y()); } + ChatLineModel::ColumnType columnByScenePos(qreal x) const ; + inline ChatLineModel::ColumnType columnByScenePos(const QPointF &pos) const { return columnByScenePos(pos.x()); } ChatView *chatView() const; ChatItem *chatItemAt(const QPointF &pos) const; + inline ChatLine *chatLine(int row) { return (row < _lines.count()) ? _lines[row] : 0; } - inline bool isSingleBufferScene() const { return _singleBufferScene; } + inline bool isSingleBufferScene() const { return _singleBufferId.isValid(); } + inline BufferId singleBufferId() const { return _singleBufferId; } bool containsBuffer(const BufferId &id) const; - inline ChatLine *chatLine(int row) { return (row < _lines.count()) ? _lines[row] : 0; } ColumnHandleItem *firstColumnHandle() const; ColumnHandleItem *secondColumnHandle() const; @@ -91,9 +95,10 @@ public: inline void setSenderCutoffMode(CutoffMode mode) { _cutoffMode = mode; } QString selection() const; - inline bool hasGlobalSelection() const { return _selectionStart >= 0; } - inline bool isGloballySelecting() const { return _isSelecting; } + bool hasSelection() const; + bool hasGlobalSelection() const; bool isPosOverSelection(const QPointF &) const; + bool isGloballySelecting() const; void initiateDrag(QWidget *source); bool isScrollingAllowed() const; @@ -110,8 +115,8 @@ public: void startGlobalSelection(ChatItem *item, const QPointF &itemPos); void clearGlobalSelection(); void clearSelection(); - - void putToClipboard(const QString &); + void selectionToClipboard(QClipboard::Mode = QClipboard::Clipboard); + void stringToClipboard(const QString &str, QClipboard::Mode = QClipboard::Clipboard); void requestBacklog(); @@ -124,6 +129,7 @@ signals: void mouseMoveWhileSelecting(const QPointF &scenePos); protected: + virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *contextMenuEvent); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent); virtual void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent); @@ -151,7 +157,7 @@ private: QString _idString; QAbstractItemModel *_model; QList _lines; - bool _singleBufferScene; + BufferId _singleBufferId; // calls to QChatScene::sceneRect() are very expensive. As we manage the scenerect ourselves // we store the size in a member variable. @@ -173,14 +179,14 @@ private: int _firstSelectionRow; bool _isSelecting; - bool _showWebPreview; - QTimer _clickTimer; ClickMode _clickMode; QPointF _clickPos; bool _clickHandled; bool _leftButtonPressed; + bool _showWebPreview; + struct WebPreview { ChatItem *parentItem; QGraphicsItem *previewItem;