[prev in list] [next in list] [prev in thread] [next in thread]
List: kdevelop-bugs
Subject: [Bug 215198] UI: The context menu option "show declaration" is named
From: Milian Wolff <mail () milianw ! de>
Date: 2010-09-28 13:19:30
Message-ID: 20100928131930.8D4F06A7AC () immanuel ! kde ! org
[Download RAW message or body]
https://bugs.kde.org/show_bug.cgi?id=215198
Milian Wolff <mail@milianw.de> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |FIXED
--- Comment #2 from Milian Wolff <mail milianw de> 2010-09-28 15:19:29 ---
commit dfe7af1ccb8f1b6b2cc1a06caadef0c2b93238b2
Author: Milian Wolff <mail@milianw.de>
Date: Tue Sep 28 15:17:46 2010 +0200
reuse jump to Declaration/Definition actions in QuickOpen plugin, reduces
code duplicatoin and makes sure the actions have the same icon/shortcut/name
everywhere
BUG: 215198
diff --git a/plugins/classbrowser/classbrowserplugin.cpp
b/plugins/classbrowser/classbrowserplugin.cpp
index cc6aaa6..61021e9 100644
--- a/plugins/classbrowser/classbrowserplugin.cpp
+++ b/plugins/classbrowser/classbrowserplugin.cpp
@@ -29,7 +29,6 @@
#include <kpluginfactory.h>
#include <kpluginloader.h>
#include <kaboutdata.h>
-#include <kicon.h>
#include "interfaces/icore.h"
#include "interfaces/iuicontroller.h"
@@ -92,12 +91,6 @@ ClassBrowserPlugin::ClassBrowserPlugin(QObject *parent,
const QVariantList&)
m_findInBrowser = new QAction(i18n("Find in &Class Browser"), this);
connect(m_findInBrowser, SIGNAL(triggered(bool)), this,
SLOT(findInClassBrowser()));
- m_openDec = new QAction(i18n("Show &Declaration"), this);
- m_openDec->setIcon( KIcon("go-jump-declaration" ) );
- connect(m_openDec, SIGNAL(triggered(bool)), this, SLOT(openDeclaration()),
Qt::QueuedConnection);
- m_openDef = new QAction(i18n("Show De&finition"), this);
- m_openDef->setIcon( KIcon("go-jump-definition" ) );
- connect(m_openDef, SIGNAL(triggered(bool)), this, SLOT(openDefinition()),
Qt::QueuedConnection);
}
ClassBrowserPlugin::~ClassBrowserPlugin()
@@ -135,14 +128,6 @@ KDevelop::ContextMenuExtension
ClassBrowserPlugin::contextMenuExtension( KDevelo
m_findInBrowser->setData(QVariant::fromValue(DUChainBasePointer(decl)));
menuExt.addAction( KDevelop::ContextMenuExtension::ExtensionGroup,
m_findInBrowser);
}
-
- m_openDec->setData(QVariant::fromValue(DUChainBasePointer(decl)));
- menuExt.addAction( KDevelop::ContextMenuExtension::ExtensionGroup,
m_openDec);
-
- if(FunctionDefinition::definition(decl)) {
- m_openDef->setData(QVariant::fromValue(DUChainBasePointer(decl)));
- menuExt.addAction( KDevelop::ContextMenuExtension::ExtensionGroup,
m_openDef);
- }
}
}
@@ -195,57 +180,6 @@ static DestClass* getBestDeclaration(Declaration* a_decl)
return 0;
}
-void ClassBrowserPlugin::openDeclaration()
-{
- Q_ASSERT(qobject_cast<QAction*>(sender()));
-
- DUChainReadLocker readLock(DUChain::lock());
-
- QAction* a = static_cast<QAction*>(sender());
-
- Q_ASSERT(a->data().canConvert<DUChainBasePointer>());
-
- DeclarationPointer declPtr =
qvariant_cast<DUChainBasePointer>(a->data()).dynamicCast<Declaration>();
- Declaration* bestDeclaration =
getBestDeclaration<Declaration>(declPtr.data());
-
- // If it's a function, find the function definition to go to the actual
declaration.
- if ( bestDeclaration && bestDeclaration->isFunctionDeclaration() )
- {
- FunctionDefinition* funcDefinition =
dynamic_cast<FunctionDefinition*>(bestDeclaration);
- if ( funcDefinition == 0 )
- funcDefinition = FunctionDefinition::definition(bestDeclaration);
- if ( funcDefinition && funcDefinition->declaration() )
- bestDeclaration = funcDefinition->declaration();
- }
-
- if (bestDeclaration)
- {
- KUrl url(bestDeclaration->url().str());
- KTextEditor::Range range =
bestDeclaration->rangeInCurrentRevision().textRange();
-
- readLock.unlock();
-
- ICore::self()->documentController()->openDocument(url, range.start());
- }
-}
-
-void ClassBrowserPlugin::openDefinition()
-{
- Q_ASSERT(qobject_cast<QAction*>(sender()));
-
- DUChainReadLocker readLock(DUChain::lock());
-
- QAction* a = static_cast<QAction*>(sender());
-
- Q_ASSERT(a->data().canConvert<DUChainBasePointer>());
-
- DeclarationPointer declPtr =
qvariant_cast<DUChainBasePointer>(a->data()).dynamicCast<Declaration>();
- readLock.unlock();
-
- // Delegate to real function
- showDefinition(declPtr);
-}
-
void ClassBrowserPlugin::showDefinition(DeclarationPointer declaration)
{
DUChainReadLocker readLock(DUChain::lock());
diff --git a/plugins/classbrowser/classbrowserplugin.h
b/plugins/classbrowser/classbrowserplugin.h
index c4ad3b1..abe10de 100644
--- a/plugins/classbrowser/classbrowserplugin.h
+++ b/plugins/classbrowser/classbrowserplugin.h
@@ -52,15 +52,11 @@ public: // KDevelop::Plugin overrides
// The duchain must not be locked when this is called!
void showDefinition(KDevelop::DeclarationPointer declaration);
private Q_SLOTS:
- void openDeclaration();
- void openDefinition();
void findInClassBrowser();
private:
class ClassBrowserFactory* m_factory;
ClassTree* m_activeClassTree;
- QAction* m_openDef;
- QAction* m_openDec;
QAction* m_findInBrowser;
};
diff --git a/plugins/quickopen/quickopenplugin.cpp
b/plugins/quickopen/quickopenplugin.cpp
index a8115b0..cd2f537 100644
--- a/plugins/quickopen/quickopenplugin.cpp
+++ b/plugins/quickopen/quickopenplugin.cpp
@@ -72,6 +72,8 @@
#include <util/activetooltip.h>
#include <qboxlayout.h>
#include <language/util/navigationtooltip.h>
+#include <interfaces/contextmenuextension.h>
+#include <language/interfaces/codecontext.h>
using namespace KDevelop;
@@ -725,17 +727,17 @@ void
QuickOpenPlugin::createActionsForMainWindow(Sublime::MainWindow* /*window*/
quickOpenFunction->setShortcut( Qt::CTRL | Qt::ALT | Qt::Key_M );
connect(quickOpenFunction, SIGNAL(triggered(bool)), this,
SLOT(quickOpenFunction()));
- KAction* quickOpenDeclaration =
actions.addAction("quick_open_jump_declaration");
- quickOpenDeclaration->setText( i18n("Jump to Declaration") );
- quickOpenDeclaration->setIcon( KIcon("go-jump-declaration" ) );
- quickOpenDeclaration->setShortcut( Qt::CTRL | Qt::Key_Period );
- connect(quickOpenDeclaration, SIGNAL(triggered(bool)), this,
SLOT(quickOpenDeclaration()));
+ m_quickOpenDeclaration = actions.addAction("quick_open_jump_declaration");
+ m_quickOpenDeclaration->setText( i18n("Jump to Declaration") );
+ m_quickOpenDeclaration->setIcon( KIcon("go-jump-declaration" ) );
+ m_quickOpenDeclaration->setShortcut( Qt::CTRL | Qt::Key_Period );
+ connect(m_quickOpenDeclaration, SIGNAL(triggered(bool)), this,
SLOT(quickOpenDeclaration()), Qt::QueuedConnection);
- KAction* quickOpenDefinition =
actions.addAction("quick_open_jump_definition");
- quickOpenDefinition->setText( i18n("Jump to Definition") );
- quickOpenDefinition->setIcon( KIcon("go-jump-definition" ) );
- quickOpenDefinition->setShortcut( Qt::CTRL | Qt::Key_Comma );
- connect(quickOpenDefinition, SIGNAL(triggered(bool)), this,
SLOT(quickOpenDefinition()));
+ m_quickOpenDefinition = actions.addAction("quick_open_jump_definition");
+ m_quickOpenDefinition->setText( i18n("Jump to Definition") );
+ m_quickOpenDefinition->setIcon( KIcon("go-jump-definition" ) );
+ m_quickOpenDefinition->setShortcut( Qt::CTRL | Qt::Key_Comma );
+ connect(m_quickOpenDefinition, SIGNAL(triggered(bool)), this,
SLOT(quickOpenDefinition()), Qt::QueuedConnection);
KAction* quickOpenLine = actions.addAction("quick_open_line");
quickOpenLine->setText( i18n("Embedded Quick Open") );
@@ -812,6 +814,29 @@ void QuickOpenPlugin::unload()
{
}
+ContextMenuExtension QuickOpenPlugin::contextMenuExtension(Context* context)
+{
+ KDevelop::ContextMenuExtension menuExt =
KDevelop::IPlugin::contextMenuExtension( context );
+
+ KDevelop::DeclarationContext *codeContext =
dynamic_cast<KDevelop::DeclarationContext*>(context);
+
+ if (!codeContext)
+ return menuExt;
+
+ DUChainReadLocker readLock;
+ Declaration* decl(codeContext->declaration().data());
+
+ if (decl) {
+ menuExt.addAction( KDevelop::ContextMenuExtension::ExtensionGroup,
m_quickOpenDeclaration);
+
+ if(FunctionDefinition::definition(decl)) {
+ menuExt.addAction( KDevelop::ContextMenuExtension::ExtensionGroup,
m_quickOpenDefinition);
+ }
+ }
+
+ return menuExt;
+}
+
void QuickOpenPlugin::showQuickOpen(const QStringList& items)
{
if(!freeModel())
diff --git a/plugins/quickopen/quickopenplugin.h
b/plugins/quickopen/quickopenplugin.h
index 290986c..d49648d 100644
--- a/plugins/quickopen/quickopenplugin.h
+++ b/plugins/quickopen/quickopenplugin.h
@@ -29,6 +29,8 @@
#include <language/interfaces/quickopendataprovider.h>
#include "ui_quickopen.h"
+class KAction;
+
namespace KDevelop {
class SimpleCursor;
}
@@ -50,7 +52,9 @@ public:
// KDevelop::Plugin methods
virtual void unload();
-
+
+ virtual KDevelop::ContextMenuExtension
contextMenuExtension(KDevelop::Context* context);
+
enum ModelTypes {
Files = 1,
Functions = 2,
@@ -80,7 +84,6 @@ public:
QuickOpenLineEdit* createQuickOpenLineWidget();
virtual KDevelop::IQuickOpenLine* createQuickOpenLine(const QStringList&
scopes, const QStringList& type, QuickOpenType kind);
-
public slots:
void quickOpen();
void quickOpenFile();
@@ -120,6 +123,8 @@ private:
//We can only have one widget at a time, because we manipulate the model.
QPointer<QObject> m_currentWidgetHandler;
+ KAction* m_quickOpenDeclaration;
+ KAction* m_quickOpenDefinition;
};
///Will delete itself once the dialog is closed, so use QPointer when
referencing it permanently
--
Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
_______________________________________________
KDevelop-bugs mailing list
KDevelop-bugs@kdevelop.org
https://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-bugs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic