File indexing completed on 2024-04-28 04:21:22
0001 // SPDX-FileCopyrightText: 2019-2022 The KPhotoAlbum Development Team 0002 // 0003 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 0005 #include "FilterWidget.h" 0006 0007 #include <KActionCollection> 0008 #include <KLocalizedString> 0009 #include <KRatingWidget> 0010 #include <QLabel> 0011 0012 ThumbnailView::FilterWidget::FilterWidget(QWidget *parent) 0013 : KToolBar(parent) 0014 { 0015 setWindowTitle(i18nc("Name/title of the filter toolbar widget", "Filter Toolbar")); 0016 setWindowIcon(QIcon::fromTheme(QLatin1String("view-filter"))); 0017 0018 m_actions = new KActionCollection(this); 0019 m_toggleFilter = addAction( 0020 QIcon::fromTheme(QLatin1String("view-filter")), 0021 i18nc("The action enables/disables filtering of images in the thumbnail view.", "Toggle filter")); 0022 m_toggleFilter->setCheckable(true); 0023 m_toggleFilter->setToolTip(xi18n("Press <shortcut>Escape</shortcut> to clear filter.")); 0024 connect(m_toggleFilter, &QAction::toggled, this, &FilterWidget::filterToggled); 0025 m_actions->addAction(QString::fromLatin1("FilterWidget/toggle"), m_toggleFilter); 0026 0027 m_rating = new KRatingWidget; 0028 addWidget(m_rating); 0029 for (short i = 1; i <= 5; i++) { 0030 QAction *ratingAction = new QAction(i18np("Filter view by rating: %1 star", "Filter view by rating: %1 stars", i)); 0031 m_actions->addAction(QString::fromLatin1("FilterWidget/rating/%1").arg(i), ratingAction); 0032 m_actions->setDefaultShortcut(ratingAction, Qt::ALT + (Qt::Key_0 + i)); 0033 connect(ratingAction, &QAction::triggered, this, [=]() { 0034 short rating = i * 2; 0035 if (static_cast<short>(m_rating->rating()) == rating) 0036 rating = -1; 0037 Q_EMIT ratingChanged(rating); 0038 }); 0039 m_rating->addAction(ratingAction); 0040 } 0041 m_actions->readSettings(); 0042 0043 m_label = new QLabel; 0044 resetLabelText(); 0045 addWidget(m_label); 0046 0047 connect(m_rating, QOverload<int>::of(&KRatingWidget::ratingChanged), this, &FilterWidget::slotRatingChanged); 0048 } 0049 0050 void ThumbnailView::FilterWidget::setFilter(const DB::ImageSearchInfo &filter) 0051 { 0052 // prevent ratingChanged signal when the filter has changed 0053 blockSignals(true); 0054 m_rating->setRating(qMax(static_cast<short int>(0), filter.rating())); 0055 if (filter.isNull()) { 0056 m_toggleFilter->setChecked(false); 0057 resetLabelText(); 0058 } else { 0059 m_toggleFilter->setChecked(true); 0060 m_label->setText(i18nc("The label gives a textual description of the active filter", "Filter: %1", filter.toString())); 0061 } 0062 blockSignals(false); 0063 } 0064 0065 void ThumbnailView::FilterWidget::setEnabled(bool enabled) 0066 { 0067 m_toggleFilter->setEnabled(enabled); 0068 m_rating->setEnabled(enabled); 0069 if (enabled) 0070 resetLabelText(); 0071 else 0072 m_label->clear(); 0073 } 0074 0075 void ThumbnailView::FilterWidget::slotRatingChanged(int rating) 0076 { 0077 Q_ASSERT(-1 <= rating && rating <= 10); 0078 Q_EMIT ratingChanged((short)rating); 0079 } 0080 0081 void ThumbnailView::FilterWidget::resetLabelText() 0082 { 0083 m_label->setText(xi18n("Tip: Use <shortcut>Alt+Shift+<placeholder>A-Z</placeholder></shortcut> to toggle a filter for that token.")); 0084 } 0085 0086 KActionCollection *ThumbnailView::FilterWidget::actions() const 0087 { 0088 return m_actions; 0089 } 0090 0091 #include "moc_FilterWidget.cpp"