first successfull attempt to visualize selection on message body

This commit is contained in:
Blue 2022-05-01 23:19:52 +03:00
parent c3a45ec58c
commit 0340db7f2f
Signed by untrusted user: blue
GPG key ID: 9B203B252A63EE38
4 changed files with 92 additions and 42 deletions

View file

@ -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;
}
}