[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdevplatform
From:       David Nolden <david.nolden.kde () art-master ! de>
Date:       2009-05-20 0:48:22
Message-ID: 1242780502.790330.20424.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 970316 by zwabel:

Show a "Show Documentation" context menu entry for declarations that have \
documentation available.


 M  +4 -1      interfaces/idocumentationcontroller.h  
 M  +42 -0     shell/documentationcontroller.cpp  
 M  +7 -1      shell/documentationcontroller.h  
 M  +2 -0      shell/plugincontroller.cpp  


--- trunk/KDE/kdevplatform/interfaces/idocumentationcontroller.h #970315:970316
@@ -22,7 +22,8 @@
 #include <interfaces/idocumentation.h>
 
 namespace KDevelop {
-
+class Context;
+class ContextMenuExtension;
 class Declaration;
 
 /**
@@ -41,6 +42,8 @@
         
         /** Show the documentation specified by @p doc. */
         virtual void showDocumentation(KSharedPtr< KDevelop::IDocumentation > \
doc)=0; +        
+        virtual ContextMenuExtension contextMenuExtension( Context* context ) = 0;
 };
 
 }
--- trunk/KDE/kdevplatform/shell/documentationcontroller.cpp #970315:970316
@@ -26,8 +26,13 @@
 #include <sublime/view.h>
 
 #include <KDebug>
+#include <QAction>
 
 #include "documentationview.h"
+#include <language/interfaces/codecontext.h>
+#include <interfaces/contextmenuextension.h>
+#include <language/duchain/duchain.h>
+#include <language/duchain/duchainlock.h>
 
 using namespace KDevelop;
 
@@ -51,6 +56,8 @@
 DocumentationController::DocumentationController(Core* core)
     : m_factory(new DocumentationViewFactory)
 {
+    m_showDocumentation = new QAction(i18n("Show Documentation"), this);
+    connect(m_showDocumentation, SIGNAL(triggered(bool)), \
SLOT(doShowDocumentation()));  }
 
 void DocumentationController::initialize()
@@ -60,6 +67,39 @@
     }
 }
 
+
+void KDevelop::DocumentationController::doShowDocumentation()
+{
+    KSharedPtr< IDocumentation > doc = \
m_showDocumentation->data().value<KSharedPtr<KDevelop::IDocumentation> >(); +    \
if(doc) +        showDocumentation(doc);
+}
+
+
+Q_DECLARE_METATYPE(KSharedPtr<KDevelop::IDocumentation>);
+
+KDevelop::ContextMenuExtension \
KDevelop::DocumentationController::contextMenuExtension ( Context* context ) +{
+    ContextMenuExtension menuExt;
+    
+    qRegisterMetaType<KSharedPtr<KDevelop::IDocumentation> \
>("KSharedPtr<KDevelop::IDocumentation>"); +    
+    DeclarationContext* ctx = dynamic_cast<DeclarationContext*>(context);
+    if(ctx) {
+        DUChainReadLocker lock(DUChain::lock());
+        if(!ctx->declaration().data())
+            return menuExt;
+        
+        KSharedPtr< IDocumentation > doc = \
documentationForDeclaration(ctx->declaration().data()); +        if(doc) {
+            m_showDocumentation->setData(QVariant::fromValue(doc));
+            menuExt.addAction(ContextMenuExtension::ExtensionGroup, \
m_showDocumentation);; +        }
+    }
+    
+    return menuExt;
+}
+
 KSharedPtr< KDevelop::IDocumentation > \
DocumentationController::documentationForDeclaration(Declaration* decl)  {
     QList<IPlugin*> \
m_plugins=ICore::self()->pluginController()->allPluginsForExtension(IDocumentationProvider_iid);
 @@ -95,3 +135,5 @@
     Q_ASSERT(view);
     view->showDocumentation(doc);
 }
+
+#include "documentationcontroller.moc"
--- trunk/KDE/kdevplatform/shell/documentationcontroller.h #970315:970316
@@ -23,6 +23,7 @@
 #include <QObject>
 
 class DocumentationViewFactory;
+class QAction;
 
 namespace KDevelop
 {
@@ -30,7 +31,7 @@
 
 class DocumentationController : public QObject, public \
KDevelop::IDocumentationController  {
-    Q_OBJECT
+        Q_OBJECT
     public:
         DocumentationController(Core* core);
         
@@ -38,9 +39,14 @@
         
         virtual KSharedPtr< KDevelop::IDocumentation > \
                documentationForDeclaration(KDevelop::Declaration* declaration);
         virtual void showDocumentation(KSharedPtr< KDevelop::IDocumentation > doc);
+        virtual ContextMenuExtension contextMenuExtension( Context* context );
         
+    private slots:
+        void doShowDocumentation();
     private:
         DocumentationViewFactory* m_factory;
+
+        QAction* m_showDocumentation;
 };
 
 }
--- trunk/KDE/kdevplatform/shell/plugincontroller.cpp #970315:970316
@@ -55,6 +55,7 @@
 #include "mainwindow.h"
 #include "core.h"
 #include "shellextension.h"
+#include <interfaces/idocumentationcontroller.h>
 
 namespace KDevelop
 {
@@ -581,6 +582,7 @@
         exts << plug->contextMenuExtension( context );
     }
     exts << ICore::self()->debugController()->contextMenuExtension( context );
+    exts << ICore::self()->documentationController()->contextMenuExtension( context \
);  return exts;
 }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic