X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatscene.h;h=7bf5be3ad2ec292c1e931d6d1833604d078e90d5;hp=1c641093d9e3cf72f916b0fccee3da746cb9dc22;hb=6b2f3b5846f1329e9a5ea38192ae9ca6e47920bd;hpb=b2c1179d290dc97f2c8497db9ed0c8adcc679ed7 diff --git a/src/qtui/chatscene.h b/src/qtui/chatscene.h index 1c641093..7bf5be3a 100644 --- a/src/qtui/chatscene.h +++ b/src/qtui/chatscene.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 * @@ -62,29 +62,31 @@ public: enum ClickMode { NoClick, + DragStartClick, SingleClick, DoubleClick, - TripleClick, - DragStartClick + TripleClick }; ChatScene(QAbstractItemModel *model, const QString &idString, qreal width, ChatView *parent); 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; @@ -106,6 +108,7 @@ public: public slots: void updateForViewport(qreal width, qreal height); void setWidth(qreal width); + void layout(int start, int end, qreal width); // these are used by the chatitems to notify the scene and manage selections void setSelectingItem(ChatItem *item); @@ -114,11 +117,14 @@ public: void clearGlobalSelection(); void clearSelection(); void selectionToClipboard(QClipboard::Mode = QClipboard::Clipboard); + void stringToClipboard(const QString &str, QClipboard::Mode = QClipboard::Clipboard); void requestBacklog(); - void loadWebPreview(ChatItem *parentItem, const QString &url, const QRectF &urlRect); +#ifdef HAVE_WEBKIT + void loadWebPreview(ChatItem *parentItem, const QUrl &url, const QRectF &urlRect); void clearWebPreview(ChatItem *parentItem = 0); +#endif signals: void lastLineChanged(QGraphicsItem *item, qreal offset); @@ -136,12 +142,14 @@ protected: protected slots: void rowsInserted(const QModelIndex &, int, int); void rowsAboutToBeRemoved(const QModelIndex &, int, int); + void dataChanged(const QModelIndex &, const QModelIndex &); private slots: void firstHandlePositionChanged(qreal xpos); void secondHandlePositionChanged(qreal xpos); - void showWebPreviewEvent(); - void deleteWebPreviewEvent(); +#ifdef HAVE_WEBKIT + void webPreviewNextStep(); +#endif void showWebPreviewChanged(); void clickTimeout(); @@ -154,7 +162,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. @@ -184,16 +192,25 @@ private: bool _showWebPreview; +#ifdef HAVE_WEBKIT struct WebPreview { + enum PreviewState { + NoPreview, + NewPreview, + DelayPreview, + ShowPreview, + HidePreview + }; ChatItem *parentItem; QGraphicsItem *previewItem; - QString url; + QUrl url; QRectF urlRect; - QTimer delayTimer; - QTimer deleteTimer; - WebPreview() : parentItem(0), previewItem(0) {} + PreviewState previewState; + QTimer timer; + WebPreview() : parentItem(0), previewItem(0), previewState(NoPreview) {} }; WebPreview webPreview; +#endif // HAVE_WEBKIT }; #endif