File indexing completed on 2024-04-21 04:39:57

0001 /*
0002     SPDX-FileCopyrightText: 2013 Vishesh Handa <me@vhanda.in>
0003     SPDX-FileCopyrightText: 2010 Sebastian Trueg <trueg@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006 */
0007 
0008 #include "tagcheckbox.h"
0009 #include "tagwidget.h"
0010 
0011 #include <QHBoxLayout>
0012 #include <QLabel>
0013 #include <QMouseEvent>
0014 
0015 using namespace Baloo;
0016 
0017 TagCheckBox::TagCheckBox(const QString &tag, QWidget *parent)
0018     : QLabel(parent)
0019     , m_tag(tag)
0020 {
0021     auto lastSegment = tag.split(QLatin1Char('/'), Qt::SkipEmptyParts).last();
0022     setText(lastSegment);
0023 
0024     setToolTip(tag);
0025     setTextFormat(Qt::PlainText);
0026     setForegroundRole(parent->foregroundRole());
0027 
0028     installEventFilter(this);
0029 }
0030 
0031 TagCheckBox::~TagCheckBox() = default;
0032 
0033 bool TagCheckBox::eventFilter(QObject *watched, QEvent *event)
0034 {
0035     if (watched == this) {
0036         switch (event->type()) {
0037         case QEvent::Enter: {
0038             enableUrlHover(true);
0039             break;
0040         }
0041         case QEvent::Leave: {
0042             enableUrlHover(false);
0043             break;
0044         }
0045         case QEvent::MouseMove: {
0046             auto me = static_cast<QMouseEvent *>(event);
0047             enableUrlHover(rect().contains(me->pos()));
0048             break;
0049         }
0050 
0051         case QEvent::MouseButtonRelease: {
0052             auto me = static_cast<QMouseEvent *>(event);
0053             if (me->button() == Qt::LeftButton && rect().contains(me->pos())) {
0054                 Q_EMIT tagClicked(m_tag);
0055                 return true;
0056             }
0057             break;
0058         }
0059 
0060         default:
0061             // do nothing
0062             break;
0063         }
0064     }
0065 
0066     return QWidget::eventFilter(watched, event);
0067 }
0068 
0069 void TagCheckBox::enableUrlHover(bool enable)
0070 {
0071     if (m_urlHover != enable) {
0072         m_urlHover = enable;
0073         QFont f = font();
0074         f.setUnderline(enable);
0075         setFont(f);
0076         setCursor(enable ? Qt::PointingHandCursor : Qt::ArrowCursor);
0077     }
0078 }
0079 
0080 #include "moc_tagcheckbox.cpp"