diff --git a/addons/symbolviewer/bash_parser.cpp b/addons/symbolviewer/bash_parser.cpp --- a/addons/symbolviewer/bash_parser.cpp +++ b/addons/symbolviewer/bash_parser.cpp @@ -47,7 +47,7 @@ funcNode = new QTreeWidgetItem(m_symbols, QStringList(i18n("Functions") ) ); funcNode->setIcon(0, QIcon(func)); - if (m_plugin->expandedOn) + if (m_expandOn->isChecked()) { m_symbols->expandItem(funcNode); } diff --git a/addons/symbolviewer/cpp_parser.cpp b/addons/symbolviewer/cpp_parser.cpp --- a/addons/symbolviewer/cpp_parser.cpp +++ b/addons/symbolviewer/cpp_parser.cpp @@ -52,7 +52,7 @@ mcrNode->setIcon(0, QIcon(mcr)); sctNode->setIcon(0, QIcon(sct)); clsNode->setIcon(0, QIcon(cls)); - if (m_plugin->expandedOn) + if (m_expandOn->isChecked()) { m_symbols->expandItem(mcrNode); m_symbols->expandItem(sctNode); @@ -151,7 +151,7 @@ if (m_treeOn->isChecked()) { node = new QTreeWidgetItem(clsNode, lastClsNode); - if (m_plugin->expandedOn) m_symbols->expandItem(node); + if (m_expandOn->isChecked()) m_symbols->expandItem(node); lastClsNode = node; mtdNode = lastClsNode; lastMtdNode = lastClsNode; @@ -243,7 +243,7 @@ if(m_func->isChecked()) { QString strippedWithTypes = stripped; - if (m_plugin->typesOn == false) + if (!m_typesOn->isChecked()) { while (stripped.indexOf(QLatin1Char('(')) >= 0) stripped = stripped.left(stripped.indexOf(QLatin1Char('('))); diff --git a/addons/symbolviewer/ecma_parser.cpp b/addons/symbolviewer/ecma_parser.cpp --- a/addons/symbolviewer/ecma_parser.cpp +++ b/addons/symbolviewer/ecma_parser.cpp @@ -131,16 +131,16 @@ // get the node to add the class entry to if ((m_treeOn->isChecked()) && (! nodes.isEmpty())) { node = new QTreeWidgetItem(nodes.last()); - if (m_plugin->expandedOn) m_symbols->expandItem(node); + if (m_expandOn->isChecked()) m_symbols->expandItem(node); } else { node = new QTreeWidgetItem(m_symbols); } // add an entry for the class node->setText(0, identifier); node->setIcon(0, QIcon(cls)); node->setText(1, QString::number(line, 10)); - if (m_plugin->expandedOn) m_symbols->expandItem(node); + if (m_expandOn->isChecked()) m_symbols->expandItem(node); } // (look for classes) // look for function definitions @@ -222,7 +222,7 @@ // add the function node->setText(0, identifier); node->setText(1, QString::number(line, 10)); - if (m_plugin->expandedOn) m_symbols->expandItem(node); + if (m_expandOn->isChecked()) m_symbols->expandItem(node); } } // (look for functions) @@ -263,7 +263,7 @@ // add the id node->setText(0, identifier); node->setText(1, QString::number(line, 10)); - if (m_plugin->expandedOn) m_symbols->expandItem(node); + if (m_expandOn->isChecked()) m_symbols->expandItem(node); } } diff --git a/addons/symbolviewer/fortran_parser.cpp b/addons/symbolviewer/fortran_parser.cpp --- a/addons/symbolviewer/fortran_parser.cpp +++ b/addons/symbolviewer/fortran_parser.cpp @@ -53,7 +53,7 @@ modNode->setIcon(0, QIcon(mod)); subrNode->setIcon(0, QIcon(subr)); - if (m_plugin->expandedOn) + if (m_expandOn->isChecked()) { m_symbols->expandItem(funcNode); m_symbols->expandItem(subrNode); diff --git a/addons/symbolviewer/perl_parser.cpp b/addons/symbolviewer/perl_parser.cpp --- a/addons/symbolviewer/perl_parser.cpp +++ b/addons/symbolviewer/perl_parser.cpp @@ -46,7 +46,7 @@ sctNode->setIcon(0, QIcon(sct)); clsNode->setIcon(0, QIcon(cls)); - if (m_plugin->expandedOn) + if (m_expandOn->isChecked()) { m_symbols->expandItem(mcrNode); m_symbols->expandItem(sctNode); diff --git a/addons/symbolviewer/php_parser.cpp b/addons/symbolviewer/php_parser.cpp --- a/addons/symbolviewer/php_parser.cpp +++ b/addons/symbolviewer/php_parser.cpp @@ -48,7 +48,7 @@ classNode->setIcon(0, QIcon( classPix ) ); functionNode->setIcon(0, QIcon( functionPix ) ); - if (m_plugin->expandedOn) + if (m_expandOn->isChecked()) { m_symbols->expandItem(namespaceNode); m_symbols->expandItem(defineNode); @@ -159,7 +159,7 @@ if (m_treeOn->isChecked()) { node = new QTreeWidgetItem(namespaceNode, lastNamespaceNode); - if (m_plugin->expandedOn) + if (m_expandOn->isChecked()) { m_symbols->expandItem(node); } @@ -199,7 +199,7 @@ if (m_treeOn->isChecked()) { node = new QTreeWidgetItem(classNode, lastClassNode); - if (m_plugin->expandedOn) + if (m_expandOn->isChecked()) { m_symbols->expandItem(node); } @@ -211,7 +211,7 @@ } if (isClass) { - if (m_plugin->typesOn) { + if (m_typesOn->isChecked()) { if (!classRegExp.cap(1).trimmed().isEmpty() && !classRegExp.cap(4).trimmed().isEmpty()) { nameWithTypes = classRegExp.cap(3)+QLatin1String(" [")+classRegExp.cap(1).trimmed()+QLatin1Char(',')+classRegExp.cap(4).trimmed()+QLatin1Char(']'); @@ -233,7 +233,7 @@ } else { - if (m_plugin->typesOn) + if (m_typesOn->isChecked()) { nameWithTypes = interfaceRegExp.cap(1) + QLatin1String(" [interface]"); node->setText(0, nameWithTypes); @@ -312,7 +312,7 @@ } nameWithTypes = functionRegExp.cap(4) + QLatin1Char('(') + functionArgsList.join(QLatin1String(", ")) + QLatin1Char(')'); - if (m_plugin->typesOn) + if (m_typesOn->isChecked()) { node->setText(0, nameWithTypes); } diff --git a/addons/symbolviewer/plugin_katesymbolviewer.h b/addons/symbolviewer/plugin_katesymbolviewer.h --- a/addons/symbolviewer/plugin_katesymbolviewer.h +++ b/addons/symbolviewer/plugin_katesymbolviewer.h @@ -92,8 +92,8 @@ KatePluginSymbolViewerView (KatePluginSymbolViewer *plugin, KTextEditor::MainWindow *mw); ~KatePluginSymbolViewerView () override; - public Q_SLOTS: + void displayOptionChanged(); void parseSymbols(); void slotDocChanged(); void goToSymbol(QTreeWidgetItem *); @@ -117,6 +117,8 @@ QAction *m_macro; QAction *m_struct; QAction *m_func; + QAction *m_typesOn; + QAction *m_expandOn; QTimer m_updateTimer; QTimer m_currItemTimer; @@ -152,10 +154,6 @@ public Q_SLOTS: void applyConfig( KatePluginSymbolViewerConfigPage* p ); - public: - bool typesOn; - bool expandedOn; - private: KatePluginSymbolViewerView* m_view = nullptr; }; diff --git a/addons/symbolviewer/plugin_katesymbolviewer.cpp b/addons/symbolviewer/plugin_katesymbolviewer.cpp --- a/addons/symbolviewer/plugin_katesymbolviewer.cpp +++ b/addons/symbolviewer/plugin_katesymbolviewer.cpp @@ -82,29 +82,38 @@ mw->guiFactory()->addClient (this); m_symbols = nullptr; + // FIXME Let the parser decide which options are available and how they are named + // because not all these options are supported by all parsers m_popup = new QMenu(m_symbols); - m_treeOn = m_popup->addAction(i18n("Tree Mode"), this, &KatePluginSymbolViewerView::parseSymbols); + m_treeOn = m_popup->addAction(i18n("Tree Mode"), this, &KatePluginSymbolViewerView::displayOptionChanged); m_treeOn->setCheckable(true); - m_sort = m_popup->addAction(i18n("Show Sorted"), this, &KatePluginSymbolViewerView::parseSymbols); + m_expandOn = m_popup->addAction(i18n("Expand Tree"), this, &KatePluginSymbolViewerView::displayOptionChanged); + m_expandOn->setCheckable(true); + m_sort = m_popup->addAction(i18n("Show Sorted"), this, &KatePluginSymbolViewerView::displayOptionChanged); m_sort->setCheckable(true); m_popup->addSeparator(); - m_macro = m_popup->addAction(i18n("Show Macros"), this, &KatePluginSymbolViewerView::parseSymbols); + m_macro = m_popup->addAction(i18n("Show Macros"), this, &KatePluginSymbolViewerView::displayOptionChanged); m_macro->setCheckable(true); - m_struct = m_popup->addAction(i18n("Show Structures"), this, &KatePluginSymbolViewerView::parseSymbols); + m_struct = m_popup->addAction(i18n("Show Structures"), this, &KatePluginSymbolViewerView::displayOptionChanged); m_struct->setCheckable(true); - m_func = m_popup->addAction(i18n("Show Functions"), this, &KatePluginSymbolViewerView::parseSymbols); + m_func = m_popup->addAction(i18n("Show Functions"), this, &KatePluginSymbolViewerView::displayOptionChanged); m_func->setCheckable(true); + m_typesOn = m_popup->addAction(i18n("Show Parameters"), this, &KatePluginSymbolViewerView::displayOptionChanged); + m_typesOn->setCheckable(true); KConfigGroup config(KSharedConfig::openConfig(), "PluginSymbolViewer"); - m_plugin->typesOn = config.readEntry(QLatin1String("ViewTypes"), false); - m_plugin->expandedOn = config.readEntry(QLatin1String("ExpandTree"), false); + m_typesOn->setChecked(config.readEntry(QLatin1String("ViewTypes"), false)); + m_expandOn->setChecked(config.readEntry(QLatin1String("ExpandTree"), false)); m_treeOn->setChecked(config.readEntry(QLatin1String("TreeView"), false)); m_sort->setChecked(config.readEntry(QLatin1String("SortSymbols"), false)); m_macro->setChecked(true); m_struct->setChecked(true); m_func->setChecked(true); + m_expandOn->setEnabled(m_treeOn->isChecked()); + m_typesOn->setEnabled(m_func->isChecked()); + m_updateTimer.setSingleShot(true); connect(&m_updateTimer, &QTimer::timeout, this, &KatePluginSymbolViewerView::parseSymbols); @@ -255,6 +264,17 @@ m_popup->popup(QCursor::pos(), m_treeOn); } +/** + * Each popup menu action is connected to this slot which offer the possibility + * to modify the menu depended on current settings. + */ +void KatePluginSymbolViewerView::displayOptionChanged() +{ + m_expandOn->setEnabled(m_treeOn->isChecked()); + m_typesOn->setEnabled(m_func->isChecked()); + parseSymbols(); +} + void KatePluginSymbolViewerView::parseSymbols() { if (!m_symbols) @@ -363,19 +383,22 @@ return (KTextEditor::ConfigPage*)p; } -void KatePluginSymbolViewer::applyConfig( KatePluginSymbolViewerConfigPage* p ) +void KatePluginSymbolViewer::applyConfig(KatePluginSymbolViewerConfigPage* p) { KConfigGroup config(KSharedConfig::openConfig(), QStringLiteral("PluginSymbolViewer")); config.writeEntry(QLatin1String("ViewTypes"), p->viewReturns->isChecked()); config.writeEntry(QLatin1String("ExpandTree"), p->expandTree->isChecked()); config.writeEntry(QLatin1String("TreeView"), p->treeView->isChecked()); config.writeEntry(QLatin1String("SortSymbols"), p->sortSymbols->isChecked()); - typesOn = p->viewReturns->isChecked(); - expandedOn = p->expandTree->isChecked(); if (m_view) { + m_view->m_typesOn->setChecked(p->viewReturns->isChecked()); + m_view->m_expandOn->setChecked(p->expandTree->isChecked()); m_view->m_treeOn->setChecked(p->treeView->isChecked()); m_view->m_sort->setChecked(p->sortSymbols->isChecked()); + + m_view->m_expandOn->setEnabled(m_view->m_treeOn->isChecked()); + m_view->m_typesOn->setEnabled(m_view->m_func->isChecked()); } } diff --git a/addons/symbolviewer/python_parser.cpp b/addons/symbolviewer/python_parser.cpp --- a/addons/symbolviewer/python_parser.cpp +++ b/addons/symbolviewer/python_parser.cpp @@ -46,7 +46,7 @@ mcrNode->setIcon(0, QIcon(mcr)); clsNode->setIcon(0, QIcon(cls)); - if (m_plugin->expandedOn) + if (m_expandOn->isChecked()) { m_symbols->expandItem(mcrNode); m_symbols->expandItem(clsNode); @@ -114,7 +114,7 @@ if (m_treeOn->isChecked()) { node = new QTreeWidgetItem(clsNode, lastClsNode); - if (m_plugin->expandedOn) m_symbols->expandItem(node); + if (m_expandOn->isChecked()) m_symbols->expandItem(node); lastClsNode = node; mtdNode = lastClsNode; lastMtdNode = lastClsNode; diff --git a/addons/symbolviewer/ruby_parser.cpp b/addons/symbolviewer/ruby_parser.cpp --- a/addons/symbolviewer/ruby_parser.cpp +++ b/addons/symbolviewer/ruby_parser.cpp @@ -44,7 +44,7 @@ clsNode = new QTreeWidgetItem(m_symbols); clsNode->setText(0, i18n("Classes")); clsNode->setIcon(0, QIcon(cls)); - if (m_plugin->expandedOn) m_symbols->expandItem(clsNode); + if (m_expandOn->isChecked()) m_symbols->expandItem(clsNode); lastClsNode = clsNode; mtdNode = clsNode; lastMtdNode = clsNode; @@ -65,7 +65,7 @@ if (m_treeOn->isChecked()) { node = new QTreeWidgetItem(clsNode, lastClsNode); - if (m_plugin->expandedOn) m_symbols->expandItem(node); + if (m_expandOn->isChecked()) m_symbols->expandItem(node); lastClsNode = node; mtdNode = lastClsNode; lastMtdNode = lastClsNode; @@ -89,7 +89,7 @@ name = cl.mid(4); node->setToolTip(0, name); - if (m_plugin->typesOn == false) + if (!m_typesOn->isChecked()) { name = name.left(name.indexOf(QLatin1Char('('))); } diff --git a/addons/symbolviewer/tcl_parser.cpp b/addons/symbolviewer/tcl_parser.cpp --- a/addons/symbolviewer/tcl_parser.cpp +++ b/addons/symbolviewer/tcl_parser.cpp @@ -47,7 +47,7 @@ lastMcrNode = mcrNode; lastClsNode = clsNode; - if (m_plugin->expandedOn) + if (m_expandOn->isChecked()) { m_symbols->expandItem(clsNode); m_symbols->expandItem(mcrNode); diff --git a/addons/symbolviewer/xslt_parser.cpp b/addons/symbolviewer/xslt_parser.cpp --- a/addons/symbolviewer/xslt_parser.cpp +++ b/addons/symbolviewer/xslt_parser.cpp @@ -54,7 +54,7 @@ sctNode->setIcon(0, QIcon(sct)); clsNode->setIcon(0, QIcon(cls)); - if (m_plugin->expandedOn) + if (m_expandOn->isChecked()) { m_symbols->expandItem(mcrNode); m_symbols->expandItem(sctNode);