File indexing completed on 2025-02-16 04:47:58
0001 /* 0002 This file is part of KOrganizer. 0003 0004 SPDX-FileCopyrightText: 2004 Till Adam <adam@kde.org> 0005 SPDX-FileCopyrightText: 2005 Rafal Rzepecki <divide@users.sourceforge.net> 0006 SPDX-FileCopyrightText: 2008 Thomas Thrainer <tom_t@gmx.at> 0007 0008 SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0 0009 */ 0010 0011 #include "todoviewquicksearch.h" 0012 #include <CalendarSupport/KCalPrefs> 0013 0014 #include <Akonadi/TagSelectionComboBox> 0015 0016 #include <Libkdepim/KCheckComboBox> 0017 0018 #include <CalendarSupport/CategoryHierarchyReader> 0019 0020 #include <KCalendarCore/CalFilter> 0021 0022 #include <KLocalizedString> 0023 #include <QLineEdit> 0024 0025 #include <QHBoxLayout> 0026 0027 TodoViewQuickSearch::TodoViewQuickSearch(QWidget *parent) 0028 : QWidget(parent) 0029 , mSearchLine(new QLineEdit(this)) 0030 , mCategoryCombo(new Akonadi::TagSelectionComboBox(this)) 0031 , mPriorityCombo(new KPIM::KCheckComboBox(this)) 0032 { 0033 auto layout = new QHBoxLayout(this); 0034 // no special margin because it is added by the view 0035 layout->setContentsMargins(0, 0, 0, 0); 0036 0037 mSearchLine->setToolTip(i18nc("@info:tooltip", "Filter on matching summaries")); 0038 mSearchLine->setWhatsThis(i18nc("@info:whatsthis", "Enter text here to filter the to-dos that are shown by matching summaries.")); 0039 mSearchLine->setPlaceholderText(i18nc("@label in QuickSearchLine", "Search Summaries...")); 0040 mSearchLine->setClearButtonEnabled(true); 0041 connect(mSearchLine, &QLineEdit::textChanged, this, &TodoViewQuickSearch::searchTextChanged); 0042 0043 layout->addWidget(mSearchLine, 3); 0044 0045 mCategoryCombo->setCheckable(true); 0046 mCategoryCombo->setToolTip(i18nc("@info:tooltip", "Filter on these tags")); 0047 mCategoryCombo->setWhatsThis(i18nc("@info:whatsthis", 0048 "Use this combobox to filter the to-dos that are shown by " 0049 "a list of selected tags.")); 0050 const QString defaultText = i18nc("@item:inlistbox", "Select Tags"); 0051 mCategoryCombo->lineEdit()->setPlaceholderText(defaultText); 0052 0053 connect(mCategoryCombo, &Akonadi::TagSelectionComboBox::selectionChanged, this, [this]() { 0054 Q_EMIT filterCategoryChanged(mCategoryCombo->selectionNames()); 0055 }); 0056 0057 layout->addWidget(mCategoryCombo, 1); 0058 0059 { 0060 // Make the combo big enough so that "Select Categories" fits. 0061 QFontMetrics fm = mCategoryCombo->lineEdit()->fontMetrics(); 0062 0063 // QLineEdit::sizeHint() returns a nice size to fit 17 'x' chars. 0064 const int currentPreferedWidth = mCategoryCombo->lineEdit()->sizeHint().width(); 0065 0066 // Calculate a nice size for "Select Categories" 0067 const int newPreferedWidth = currentPreferedWidth - fm.boundingRect(QLatin1Char('x')).width() * 17 + fm.boundingRect(defaultText).width(); 0068 0069 const int pixelsToAdd = newPreferedWidth - mCategoryCombo->lineEdit()->width(); 0070 mCategoryCombo->setMinimumWidth(mCategoryCombo->width() + pixelsToAdd); 0071 } 0072 0073 mPriorityCombo->setToolTip(i18nc("@info:tooltip", "Filter on these priorities")); 0074 mPriorityCombo->setWhatsThis(i18nc("@info:whatsthis", 0075 "Use this combobox to filter the to-dos that are shown by " 0076 "a list of selected priorities.")); 0077 mPriorityCombo->lineEdit()->setPlaceholderText(i18nc("@item:inlistbox", "Select Priority")); 0078 connect(mPriorityCombo, &KPIM::KCheckComboBox::checkedItemsChanged, this, [this]() { 0079 Q_EMIT filterPriorityChanged(mPriorityCombo->checkedItems(Qt::UserRole)); 0080 }); 0081 0082 layout->addWidget(mPriorityCombo, 1); 0083 fillPriorities(); 0084 } 0085 0086 void TodoViewQuickSearch::reset() 0087 { 0088 mSearchLine->clear(); 0089 mCategoryCombo->setCurrentIndex(0); 0090 mPriorityCombo->setCurrentIndex(0); 0091 } 0092 0093 void TodoViewQuickSearch::fillPriorities() 0094 { 0095 QStringList priorityValues; 0096 priorityValues.append(i18nc("@action:inmenu priority is unspecified", "unspecified")); 0097 priorityValues.append(i18nc("@action:inmenu highest priority", "%1 (highest)", 1)); 0098 for (int p = 2; p < 10; ++p) { 0099 if (p == 5) { 0100 priorityValues.append(i18nc("@action:inmenu medium priority", "%1 (medium)", p)); 0101 } else if (p == 9) { 0102 priorityValues.append(i18nc("@action:inmenu lowest priority", "%1 (lowest)", p)); 0103 } else { 0104 priorityValues.append(i18nc("@action:inmenu", "%1", p)); 0105 } 0106 } 0107 // TODO: Using the same method as for categories to fill mPriorityCombo 0108 CalendarSupport::CategoryHierarchyReaderQComboBox(mPriorityCombo).read(priorityValues); 0109 } 0110 0111 #include "moc_todoviewquicksearch.cpp"