Warning, file /education/kiten/app/searchstringinput.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

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