[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