#include <QAbstractItemModel>
#include <QGraphicsScene>
#include <QSet>
+#include <QTimer>
+#include "chatlinemodel.h"
#include "columnhandleitem.h"
#include "messagefilter.h"
CutoffRight
};
+ enum ItemType {
+ ChatLineType = QGraphicsItem::UserType + 1,
+ ChatItemType,
+ TimestampChatItemType,
+ SenderChatItemType,
+ ContentsChatItemType,
+ SearchHighlightType,
+ WebPreviewType
+ };
+
+ enum ClickMode {
+ NoClick,
+ SingleClick,
+ DoubleClick,
+ TripleClick
+ };
+
ChatScene(QAbstractItemModel *model, const QString &idString, qreal width, QObject *parent);
virtual ~ChatScene();
inline QAbstractItemModel *model() const { return _model; }
inline QString idString() const { return _idString; }
- int sectionByScenePos(int x);
- inline int sectionByScenePos(const QPoint &pos) { return sectionByScenePos(pos.x()); }
+ 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()); }
inline bool isSingleBufferScene() const { return _singleBufferScene; }
- inline bool containsBuffer(const BufferId &id) const;
+ bool containsBuffer(const BufferId &id) const;
inline ChatLine *chatLine(int row) { return (row < _lines.count()) ? _lines[row] : 0; }
inline ColumnHandleItem *firstColumnHandle() const { return _firstColHandle; }
inline CutoffMode senderCutoffMode() const { return _cutoffMode; }
inline void setSenderCutoffMode(CutoffMode mode) { _cutoffMode = mode; }
+ bool isScrollingAllowed() const;
+
virtual bool event(QEvent *e);
public slots:
signals:
void lastLineChanged(QGraphicsItem *item, qreal offset);
+ void layoutChanged(); // indicates changes to the scenerect due to resizing of the contentsitems
+ void mouseMoveWhileSelecting(const QPointF &scenePos);
protected:
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent);
virtual void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent);
+ //virtual bool handleLeftClick(ClickMode mode);
protected slots:
void rowsInserted(const QModelIndex &, int, int);
void secondHandlePositionChanged(qreal xpos);
void showWebPreviewEvent();
void deleteWebPreviewEvent();
+ void showWebPreviewChanged();
private:
void setHandleXLimits();
int _firstSelectionRow;
bool _isSelecting;
+ bool _showWebPreview;
+
+ QTimer _clickTimer;
+
struct WebPreview {
ChatItem *parentItem;
QGraphicsItem *previewItem;
WebPreview webPreview;
};
-bool ChatScene::containsBuffer(const BufferId &id) const {
- MessageFilter *filter = qobject_cast<MessageFilter*>(model());
- if(filter)
- return filter->containsBuffer(id);
- else
- return false;
-}
-
#endif