/***************************************************************************
- * 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 *
#define CHATSCENE_H_
#include <QAbstractItemModel>
+#include <QClipboard>
#include <QGraphicsItem>
#include <QGraphicsScene>
#include <QSet>
enum ClickMode {
NoClick,
+ DragStartClick,
SingleClick,
DoubleClick,
TripleClick
virtual ~ChatScene();
inline QAbstractItemModel *model() const { return _model; }
+ inline MessageFilter *filter() const { return qobject_cast<MessageFilter*>(_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;
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;
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();
+#ifdef HAVE_WEBKIT
void loadWebPreview(ChatItem *parentItem, const QString &url, const QRectF &urlRect);
void clearWebPreview(ChatItem *parentItem = 0);
+#endif
signals:
void lastLineChanged(QGraphicsItem *item, qreal offset);
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);
private slots:
void firstHandlePositionChanged(qreal xpos);
void secondHandlePositionChanged(qreal xpos);
- void showWebPreviewEvent();
- void deleteWebPreviewEvent();
+#ifdef HAVE_WEBKIT
+ void webPreviewNextStep();
+#endif
void showWebPreviewChanged();
void clickTimeout();
QString _idString;
QAbstractItemModel *_model;
QList<ChatLine *> _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.
int _firstSelectionRow;
bool _isSelecting;
- bool _showWebPreview;
-
QTimer _clickTimer;
ClickMode _clickMode;
QPointF _clickPos;
bool _clickHandled;
bool _leftButtonPressed;
+ bool _showWebPreview;
+
+#ifdef HAVE_WEBKIT
struct WebPreview {
+ enum PreviewState {
+ NoPreview,
+ NewPreview,
+ DelayPreview,
+ ShowPreview,
+ HidePreview
+ };
ChatItem *parentItem;
QGraphicsItem *previewItem;
QString 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