File indexing completed on 2024-04-28 04:21:22

0001 // SPDX-FileCopyrightText: 2003-2022 Jesper K. Pedersen <blackie@kde.org>
0002 //
0003 // SPDX-License-Identifier: GPL-2.0-or-later
0004 
0005 #include "MouseTrackingInteraction.h"
0006 
0007 #include "ThumbnailModel.h"
0008 #include "ThumbnailWidget.h"
0009 #include "VideoThumbnailCycler.h"
0010 
0011 #include <kpabase/FileName.h>
0012 
0013 #include <QMouseEvent>
0014 
0015 ThumbnailView::MouseTrackingInteraction::MouseTrackingInteraction(ThumbnailFactory *factory)
0016     : ThumbnailComponent(factory)
0017     , m_cursorWasAtStackIcon(false)
0018 {
0019 }
0020 
0021 bool ThumbnailView::MouseTrackingInteraction::mouseMoveEvent(QMouseEvent *event)
0022 {
0023     updateStackingIndication(event);
0024     handleCursorOverNewIcon();
0025 
0026     if ((event->modifiers() & Qt::ControlModifier) != 0 && widget()->isItemUnderCursorSelected())
0027         VideoThumbnailCycler::instance()->stopCycle();
0028     else
0029         VideoThumbnailCycler::instance()->setActive(widget()->mediaIdUnderCursor());
0030     return false;
0031 }
0032 
0033 void ThumbnailView::MouseTrackingInteraction::updateStackingIndication(QMouseEvent *event)
0034 {
0035     bool interestingArea = widget()->isMouseOverStackIndicator(event->pos());
0036     if (interestingArea && !m_cursorWasAtStackIcon) {
0037         widget()->setCursor(Qt::PointingHandCursor);
0038         m_cursorWasAtStackIcon = true;
0039     } else if (!interestingArea && m_cursorWasAtStackIcon) {
0040         widget()->unsetCursor();
0041         m_cursorWasAtStackIcon = false;
0042     }
0043 }
0044 
0045 void ThumbnailView::MouseTrackingInteraction::handleCursorOverNewIcon()
0046 {
0047     static DB::FileName lastFileNameUnderCursor;
0048     const DB::FileName fileName = widget()->mediaIdUnderCursor();
0049 
0050     if (fileName != lastFileNameUnderCursor) {
0051         if (!fileName.isNull() && !lastFileNameUnderCursor.isNull()) {
0052             Q_EMIT fileIdUnderCursorChanged(fileName);
0053             model()->updateCell(lastFileNameUnderCursor);
0054             model()->updateCell(fileName);
0055         }
0056         lastFileNameUnderCursor = fileName;
0057     }
0058 }
0059 // vi:expandtab:tabstop=4 shiftwidth=4:
0060 
0061 #include "moc_MouseTrackingInteraction.cpp"