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"