#include "chatline.h"
#include "chatlinemodelitem.h"
#include "chatscene.h"
+#include "chatview.h"
#include "client.h"
#include "clientbacklogmanager.h"
#include "columnhandleitem.h"
_clickTimer.setSingleShot(true);
connect(&_clickTimer, SIGNAL(timeout()), SLOT(clickTimeout()));
- _clickTimer.setInterval(QApplication::doubleClickInterval());
- _clickTimer.setSingleShot(true);
- connect(&_clickTimer, SIGNAL(timeout()), SLOT(clickTimeout()));
-
setItemIndexMethod(QGraphicsScene::NoIndex);
}
if(hasGlobalSelection()) {
int row = chatItem->row();
if(row >= qMin(_selectionStart, _selectionEnd) && row <= qMax(_selectionStart, _selectionEnd))
- return true;
+ return columnByScenePos(pos) >= _selectionMinCol;
} else {
return chatItem->isPosOverSelection(chatItem->mapFromScene(pos));
}
QPointF pos = event->scenePos();
QMenu menu;
+ // zoom actions and similar
+ chatView()->addActionsToMenu(&menu, pos);
+ menu.addSeparator();
+
if(isPosOverSelection(pos))
menu.addAction(SmallIcon("edit-copy"), tr("Copy Selection"),
this, SLOT(selectionToClipboard()),
QKeySequence::Copy);
+ // item-specific options (select link etc)
+ ChatItem *item = chatItemAt(pos);
+ if(item)
+ item->addActionsToMenu(&menu, item->mapFromScene(pos));
+
menu.exec(event->screenPos());
}
if(!hasSelection())
return;
+ stringToClipboard(selection(), mode);
+}
+
+void ChatScene::stringToClipboard(const QString &str, QClipboard::Mode mode) {
switch(mode) {
case QClipboard::Clipboard:
- QApplication::clipboard()->setText(selection());
+ QApplication::clipboard()->setText(str);
break;
case QClipboard::Selection:
if(QApplication::clipboard()->supportsSelection())
- QApplication::clipboard()->setText(selection(), QClipboard::Selection);
+ QApplication::clipboard()->setText(str, QClipboard::Selection);
break;
default:
break;
return;
}
-ChatLineModel::ColumnType ChatScene::columnByScenePos(qreal x) {
+ChatLineModel::ColumnType ChatScene::columnByScenePos(qreal x) const {
if(x < _firstColHandle->x())
return ChatLineModel::TimestampColumn;
if(x < _secondColHandle->x())
return ChatLineModel::ContentsColumn;
}
-int ChatScene::rowByScenePos(qreal y) {
+int ChatScene::rowByScenePos(qreal y) const {
// This is somewhat hacky... we look at the contents item that is at the given y position, since
// it has the full height. From this item, we can then determine the row index and hence the ChatLine.
// ChatItems cover their ChatLine, so we won't get to the latter directly.