+void ContentsChatItem::endHoverMode() {
+ if(layoutData()->currentClickable.isValid()) {
+ setCursor(Qt::ArrowCursor);
+ layoutData()->currentClickable = Clickable();
+ update();
+ }
+}
+
+void ContentsChatItem::mousePressEvent(QGraphicsSceneMouseEvent *event) {
+ layoutData()->hasDragged = false;
+ ChatItem::mousePressEvent(event);
+}
+
+void ContentsChatItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
+ if(!event->buttons() && !layoutData()->hasDragged) {
+ // got a click
+ Clickable click = layoutData()->currentClickable;
+ if(click.isValid()) {
+ QString str = data(ChatLineModel::DisplayRole).toString().mid(click.start, click.length);
+ switch(click.type) {
+ case Clickable::Url:
+ QDesktopServices::openUrl(str);
+ break;
+ case Clickable::Channel:
+ // TODO join or whatever...
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ ChatItem::mouseReleaseEvent(event);
+}
+
+void ContentsChatItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
+ // mouse move events always mean we're not hovering anymore...
+ endHoverMode();
+ // also, check if we have dragged the mouse
+ if(!layoutData()->hasDragged && event->buttons() & Qt::LeftButton
+ && (event->buttonDownScreenPos(Qt::LeftButton) - event->screenPos()).manhattanLength() >= QApplication::startDragDistance())
+ layoutData()->hasDragged = true;
+ ChatItem::mouseMoveEvent(event);