forked from blue/squawk
first successfull attempt to visualize selection on message body
This commit is contained in:
parent
c3a45ec58c
commit
0340db7f2f
4 changed files with 92 additions and 42 deletions
|
@ -52,7 +52,10 @@ FeedView::FeedView(QWidget* parent):
|
|||
dividerFont(),
|
||||
dividerMetrics(dividerFont),
|
||||
mousePressed(false),
|
||||
anchorHovered(false)
|
||||
dragging(false),
|
||||
anchorHovered(false),
|
||||
dragStartPoint(),
|
||||
dragEndPoint()
|
||||
{
|
||||
horizontalScrollBar()->setRange(0, 0);
|
||||
verticalScrollBar()->setSingleStep(approximateSingleMessageHeight);
|
||||
|
@ -304,7 +307,7 @@ bool FeedView::tryToCalculateGeometriesWithNoScrollbars(const QStyleOptionViewIt
|
|||
|
||||
void FeedView::paintEvent(QPaintEvent* event)
|
||||
{
|
||||
//qDebug() << "paint" << event->rect();
|
||||
qDebug() << "paint" << event->rect();
|
||||
const QAbstractItemModel* m = model();
|
||||
QWidget* vp = viewport();
|
||||
QRect zone = event->rect().translated(0, -vo);
|
||||
|
@ -427,19 +430,31 @@ void FeedView::mouseMoveEvent(QMouseEvent* event)
|
|||
return;
|
||||
}
|
||||
|
||||
mousePressed = false;
|
||||
//qDebug() << event;
|
||||
dragEndPoint = event->localPos().toPoint();
|
||||
if (mousePressed) {
|
||||
QPoint distance = dragStartPoint - dragEndPoint;
|
||||
if (distance.manhattanLength() > 5) {
|
||||
dragging = true;
|
||||
}
|
||||
}
|
||||
|
||||
QAbstractItemView::mouseMoveEvent(event);
|
||||
|
||||
if (specialDelegate) {
|
||||
QPoint point = event->localPos().toPoint();
|
||||
QModelIndex index = indexAt(point);
|
||||
QModelIndex index = indexAt(dragEndPoint);
|
||||
if (index.isValid()) {
|
||||
QRect rect = visualRect(index);
|
||||
MessageDelegate* del = static_cast<MessageDelegate*>(itemDelegate());
|
||||
if (rect.contains(point)) {
|
||||
setAnchorHovered(del->isAnchorHovered(point, index, rect));
|
||||
if (rect.contains(dragEndPoint)) {
|
||||
MessageDelegate* del = static_cast<MessageDelegate*>(itemDelegate());
|
||||
if (dragging) {
|
||||
setAnchorHovered(false);
|
||||
if (del->mouseDrag(dragStartPoint, dragEndPoint, index, rect)) {
|
||||
qDebug() << "asking to repaint" << rect;
|
||||
setDirtyRegion(rect);
|
||||
}
|
||||
} else {
|
||||
setAnchorHovered(del->isAnchorHovered(dragEndPoint, index, rect));
|
||||
}
|
||||
} else {
|
||||
setAnchorHovered(false);
|
||||
}
|
||||
|
@ -453,22 +468,29 @@ void FeedView::mousePressEvent(QMouseEvent* event)
|
|||
{
|
||||
QAbstractItemView::mousePressEvent(event);
|
||||
mousePressed = event->button() == Qt::LeftButton;
|
||||
if (mousePressed) {
|
||||
dragStartPoint = event->localPos().toPoint();
|
||||
}
|
||||
}
|
||||
|
||||
void FeedView::mouseReleaseEvent(QMouseEvent* event)
|
||||
{
|
||||
QAbstractItemView::mouseReleaseEvent(event);
|
||||
|
||||
if (mousePressed && specialDelegate) {
|
||||
QPoint point = event->localPos().toPoint();
|
||||
QModelIndex index = indexAt(point);
|
||||
if (index.isValid()) {
|
||||
QRect rect = visualRect(index);
|
||||
MessageDelegate* del = static_cast<MessageDelegate*>(itemDelegate());
|
||||
if (rect.contains(point)) {
|
||||
del->leftClick(point, index, rect);
|
||||
if (mousePressed) {
|
||||
if (!dragging && specialDelegate) {
|
||||
QPoint point = event->localPos().toPoint();
|
||||
QModelIndex index = indexAt(point);
|
||||
if (index.isValid()) {
|
||||
QRect rect = visualRect(index);
|
||||
MessageDelegate* del = static_cast<MessageDelegate*>(itemDelegate());
|
||||
if (rect.contains(point)) {
|
||||
del->leftClick(point, index, rect);
|
||||
}
|
||||
}
|
||||
}
|
||||
dragging = false;
|
||||
mousePressed = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue