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"