/***************************************************************************
- * 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 *
_chatView(parent),
_idString(idString),
_model(model),
- _singleBufferScene(false),
+ _singleBufferId(BufferId()),
_sceneRect(0, 0, width, 0),
_firstLineRow(-1),
_viewportHeight(0),
_leftButtonPressed(false)
{
MessageFilter *filter = qobject_cast<MessageFilter*>(model);
- if(filter) {
- _singleBufferScene = filter->isSingleBufferFilter();
+ if(filter && filter->isSingleBufferFilter()) {
+ _singleBufferId = filter->singleBufferId();
}
ChatViewSettings defaultSettings;
_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);
}
ChatItem *item = chatItemAt(pos);
if(item)
item->addActionsToMenu(&menu, item->mapFromScene(pos));
+ else
+ // no item -> default scene actions
+ Client::mainUi()->actionProvider()->addActions(&menu, filter(), BufferId());
menu.exec(event->screenPos());
void ChatScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
if(event->buttons() == Qt::LeftButton) {
if(!_clickHandled && (event->scenePos() - _clickPos).toPoint().manhattanLength() >= QApplication::startDragDistance()) {
- if(_clickTimer.isActive()) _clickTimer.stop();
+ if(_clickTimer.isActive())
+ _clickTimer.stop();
if(_clickMode == SingleClick && isPosOverSelection(_clickPos))
initiateDrag(event->widget());
else {
updateSelection(event->scenePos());
emit mouseMoveWhileSelecting(event->scenePos());
event->accept();
- } else if(_clickHandled)
+ } else if(_clickHandled && _clickMode < DoubleClick)
QGraphicsScene::mouseMoveEvent(event);
} else
QGraphicsScene::mouseMoveEvent(event);
clearSelection();
}
if(_clickMode != NoClick && _clickTimer.isActive()) {
- _clickMode = (ClickMode)(_clickMode == TripleClick ? DoubleClick : _clickMode + 1);
- handleClick(Qt::LeftButton, event->scenePos());
+ switch(_clickMode) {
+ case NoClick: _clickMode = SingleClick; break;
+ case SingleClick: _clickMode = DoubleClick; break;
+ case DoubleClick: _clickMode = TripleClick; break;
+ case TripleClick: _clickMode = DoubleClick; break;
+ case DragStartClick: break;
+ }
+ handleClick(Qt::LeftButton, _clickPos);
} else {
_clickMode = SingleClick;
_clickPos = event->scenePos();
}
_clickTimer.start();
- } else if(event->buttons() == Qt::RightButton) {
- handleClick(Qt::RightButton, event->scenePos());
}
if(event->type() == QEvent::GraphicsSceneMouseDoubleClick)
QGraphicsScene::mouseDoubleClickEvent(event);
}
void ChatScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
- if(!event->buttons() & Qt::LeftButton) {
+ if(event->button() == Qt::LeftButton && _leftButtonPressed) {
_leftButtonPressed = false;
if(_clickMode != NoClick) {
if(_clickMode == SingleClick)
}
void ChatScene::clickTimeout() {
- if(!_leftButtonPressed && _clickMode == SingleClick && !_clickHandled)
+ if(!_leftButtonPressed && _clickMode == SingleClick)
handleClick(Qt::LeftButton, _clickPos);
}