File indexing completed on 2024-05-12 05:52:07

0001 /*
0002     SPDX-FileCopyrightText: 2020 Waqar Ahmed <waqar.17a@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 #include "katequickopenlineedit.h"
0007 
0008 #include <QActionGroup>
0009 #include <QContextMenuEvent>
0010 #include <QMenu>
0011 
0012 #include <KConfigGroup>
0013 #include <KLocalizedString>
0014 #include <KSharedConfig>
0015 
0016 static const QString CONFIG_QUICKOPEN_LISTMODE{QStringLiteral("Quickopen List Mode")};
0017 static const QString CONFIG_QUICKOPEN_FILTERMODE{QStringLiteral("Quickopen Filter Mode")};
0018 
0019 QuickOpenLineEdit::QuickOpenLineEdit(QWidget *parent)
0020     : QLineEdit(parent)
0021 {
0022     setPlaceholderText(i18n("Quick Open Search (configure via context menu)"));
0023 
0024     // ensure config is read (menu only created upon demand)
0025     KSharedConfig::Ptr cfg = KSharedConfig::openConfig();
0026     KConfigGroup cg(cfg, QStringLiteral("General"));
0027 
0028     const bool cfgListMode = cg.readEntry(CONFIG_QUICKOPEN_LISTMODE, true);
0029     m_listMode = cfgListMode ? KateQuickOpenModelList::CurrentProject : KateQuickOpenModelList::AllProjects;
0030 
0031     m_filterMode = (FilterMode)cg.readEntry(CONFIG_QUICKOPEN_FILTERMODE, (int)Fuzzy);
0032 }
0033 
0034 QuickOpenLineEdit::~QuickOpenLineEdit()
0035 {
0036     KSharedConfig::Ptr cfg = KSharedConfig::openConfig();
0037     KConfigGroup cg(cfg, QStringLiteral("General"));
0038 
0039     cg.writeEntry(CONFIG_QUICKOPEN_LISTMODE, m_listMode == KateQuickOpenModelList::CurrentProject);
0040     cg.writeEntry(CONFIG_QUICKOPEN_FILTERMODE, (int)m_filterMode);
0041 }
0042 
0043 void QuickOpenLineEdit::contextMenuEvent(QContextMenuEvent *event)
0044 {
0045     // on demand construction
0046     if (!menu) {
0047         menu.reset(createStandardContextMenu());
0048         setupMenu();
0049     }
0050     menu->exec(event->globalPos());
0051 }
0052 
0053 void QuickOpenLineEdit::setupMenu()
0054 {
0055     const bool cfgListMode = m_listMode == CurrentProject;
0056 
0057     menu->addSeparator();
0058 
0059     QActionGroup *actGp = new QActionGroup(this);
0060 
0061     auto act = menu->addAction(i18n("All Projects"));
0062     act->setCheckable(true);
0063     connect(act, &QAction::toggled, this, [this](bool checked) {
0064         if (checked) {
0065             m_listMode = AllProjects;
0066             Q_EMIT listModeChanged(KateQuickOpenModelList::AllProjects);
0067         }
0068     });
0069     act->setChecked(!cfgListMode);
0070 
0071     actGp->addAction(act);
0072 
0073     act = menu->addAction(i18n("Current Project"));
0074     act->setCheckable(true);
0075     connect(act, &QAction::toggled, this, [this](bool checked) {
0076         if (checked) {
0077             m_listMode = CurrentProject;
0078             Q_EMIT listModeChanged(KateQuickOpenModelList::CurrentProject);
0079         }
0080     });
0081     act->setChecked(cfgListMode);
0082     actGp->addAction(act);
0083 
0084     // filter mode
0085     menu->addSeparator();
0086 
0087     actGp = new QActionGroup(this);
0088     act = menu->addAction(i18n("Fuzzy Filtering"));
0089     act->setCheckable(true);
0090     connect(act, &QAction::toggled, this, [this](bool checked) {
0091         if (checked) {
0092             m_filterMode = Fuzzy;
0093             Q_EMIT filterModeChanged();
0094         }
0095     });
0096     act->setChecked(m_filterMode == Fuzzy);
0097     actGp->addAction(act);
0098 
0099     act = menu->addAction(i18n("Wildcard Filtering"));
0100     act->setCheckable(true);
0101     connect(act, &QAction::toggled, this, [this](bool checked) {
0102         if (checked) {
0103             m_filterMode = Wildcard;
0104             Q_EMIT filterModeChanged();
0105         }
0106     });
0107     act->setChecked(m_filterMode == Wildcard);
0108     actGp->addAction(act);
0109 }
0110 
0111 #include "moc_katequickopenlineedit.cpp"