File indexing completed on 2024-04-21 03:41:59

0001 /*
0002     This file is part of Kiten, a KDE Japanese Reference Tool...
0003     SPDX-FileCopyrightText: 2006 Joseph Kerian <jkerian@gmail.com>
0004     SPDX-FileCopyrightText: 2011 Daniel E. Moctezuma <democtezuma@gmail.com>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #include "searchstringinput.h"
0010 
0011 #include "kiten.h"
0012 #include "kitenconfig.h"
0013 
0014 #include <KActionCollection>
0015 #include <KHistoryComboBox>
0016 #include <KLocalizedString>
0017 #include <KSelectAction>
0018 #include <KToolBar>
0019 
0020 #include <QLineEdit>
0021 
0022 SearchStringInput::SearchStringInput(Kiten *parent)
0023     : QObject(parent)
0024 {
0025     _parent = parent;
0026     _actionFilterRare = _parent->actionCollection()->add<KSelectAction>(QStringLiteral("filter_rare"));
0027     _actionFilterRare->setText(i18n("Filter Type"));
0028     _actionFilterRare->addAction(i18n("No filter"));
0029     _actionFilterRare->addAction(i18n("Filter out rare"));
0030     _actionFilterRare->addAction(i18n("Common/Uncommon"));
0031 
0032     _actionSearchSection = _parent->actionCollection()->add<KSelectAction>(QStringLiteral("search_searchType"));
0033     _actionSearchSection->setText(i18n("Match Type"));
0034     _actionSearchSection->addAction(i18n("Exact Match"));
0035     _actionSearchSection->addAction(i18n("Match Beginning"));
0036     _actionSearchSection->addAction(i18n("Match Ending"));
0037     _actionSearchSection->addAction(i18n("Match Anywhere"));
0038 
0039     _actionSelectWordType = _parent->actionCollection()->add<KSelectAction>(QStringLiteral("search_wordType"));
0040     _actionSelectWordType->setText(i18n("Word Type"));
0041     _actionSelectWordType->addAction(i18n("Any"));
0042     _actionSelectWordType->addAction(i18n("Verb"));
0043     _actionSelectWordType->addAction(i18n("Noun"));
0044     _actionSelectWordType->addAction(i18n("Adjective"));
0045     _actionSelectWordType->addAction(i18n("Adverb"));
0046     _actionSelectWordType->addAction(i18n("Prefix"));
0047     _actionSelectWordType->addAction(i18n("Suffix"));
0048     _actionSelectWordType->addAction(i18n("Expression"));
0049 
0050     _actionTextInput = new KHistoryComboBox(_parent);
0051     _actionTextInput->setDuplicatesEnabled(false);
0052     _actionTextInput->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
0053     updateFontFromConfig();
0054 
0055     _actionFocusInput = _parent->actionCollection()->addAction(QStringLiteral("focusinputfield"), this, SLOT(focusInput()));
0056     _parent->actionCollection()->setDefaultShortcut(_actionFocusInput, Qt::CTRL | Qt::Key_L);
0057     _actionFocusInput->setText(i18n("Focus input field"));
0058 
0059     auto actionsearchbox = new QWidgetAction(this);
0060     actionsearchbox->setText(i18n("Search Bar"));
0061     actionsearchbox->setDefaultWidget(_actionTextInput);
0062     _parent->actionCollection()->addAction(QStringLiteral("searchbox"), actionsearchbox);
0063 
0064     if (!_actionFilterRare || !_actionSearchSection || !_actionSelectWordType || !actionsearchbox) {
0065         qCritical() << "Error creating user interface elements: " << !_actionFilterRare << !_actionSearchSection << !_actionSelectWordType << !actionsearchbox;
0066     }
0067 
0068     // connect(actionTextInput, SIGNAL(returnPressed()), this, SIGNAL(search()));
0069     connect(_actionTextInput, static_cast<void (KHistoryComboBox::*)(const QString &)>(&KHistoryComboBox::textActivated), this, &SearchStringInput::test);
0070 }
0071 
0072 void SearchStringInput::focusInput()
0073 {
0074     _actionTextInput->setFocus();
0075     _actionTextInput->lineEdit()->selectAll();
0076 }
0077 
0078 DictQuery SearchStringInput::getSearchQuery() const
0079 {
0080     DictQuery result(_actionTextInput->currentText());
0081 
0082     if (_actionFilterRare->currentItem() == DictQuery::Rare) {
0083         result.setProperty(QStringLiteral("common"), QStringLiteral("1"));
0084     }
0085 
0086     result.setFilterType((DictQuery::FilterType)_actionFilterRare->currentItem());
0087     result.setMatchType((DictQuery::MatchType)_actionSearchSection->currentItem());
0088     result.setMatchWordType((DictQuery::MatchWordType)_actionSelectWordType->currentItem());
0089 
0090     return result;
0091 }
0092 
0093 void SearchStringInput::setDefaultsFromConfig()
0094 {
0095     KitenConfigSkeleton *config = KitenConfigSkeleton::self();
0096     _actionFilterRare->setCurrentItem(config->filter_rare());
0097     _actionSearchSection->setCurrentItem(config->search_precision());
0098     _actionSelectWordType->setCurrentItem(config->search_limit_to_wordtype());
0099 }
0100 
0101 void SearchStringInput::setSearchQuery(const DictQuery &query)
0102 {
0103     qDebug() << "------------------------------Set Triggered";
0104     // First we set the various actions according to the query
0105     _actionFilterRare->setCurrentItem(query.getFilterType());
0106     _actionSearchSection->setCurrentItem(query.getMatchType());
0107     _actionSelectWordType->setCurrentItem(query.getMatchWordType());
0108 
0109     // Secondly we remove aspects that are visible in the gui from the search string
0110     DictQuery copy(query);
0111     for (KToolBar *bar : _parent->toolBars()) {
0112         if (bar->widgetForAction(_actionFilterRare) != nullptr)
0113             copy.removeProperty(QStringLiteral("common"));
0114 
0115         if (bar->widgetForAction(_actionSelectWordType) != nullptr)
0116             copy.removeProperty(QStringLiteral("type"));
0117     }
0118 
0119     _actionTextInput->addToHistory(copy.toString()); // Update history and completion list
0120     _actionTextInput->setCurrentItem(copy.toString(), true);
0121     _actionTextInput->reset(); // Call this manually when you call setCurrentItem
0122 }
0123 
0124 void SearchStringInput::test()
0125 {
0126     qDebug() << "test1";
0127     Q_EMIT search();
0128     qDebug() << "test2";
0129 }
0130 
0131 void SearchStringInput::updateFontFromConfig()
0132 {
0133     _actionTextInput->setFont(KitenConfigSkeleton::self()->font());
0134 }
0135 
0136 #include "moc_searchstringinput.cpp"