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

List:       kde-commits
Subject:    KDE/kdevplatform
From:       Roberto Raggi <roberto () kdevelop ! org>
Date:       2008-04-16 10:19:33
Message-ID: 1208341173.469863.24871.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 797538 by raggi:

added the xmlgui state `has_project' + nicer KDevelop::IPlugin


 M  +38 -8     interfaces/iplugin.cpp  
 M  +10 -9     interfaces/iplugin.h  
 M  +12 -0     plugins/quickopen/kdevquickopen.rc  
 M  +2 -0      plugins/quickopen/quickopenplugin.cpp  
 M  +3 -1      plugins/quickopen/quickopenplugin.h  


--- trunk/KDE/kdevplatform/interfaces/iplugin.cpp #797537:797538
@@ -37,6 +37,7 @@
 #include <kdebug.h>
 #include "icore.h"
 #include "iplugincontroller.h"
+#include "iprojectcontroller.h"
 #include "contextmenuextension.h"
 #include <QtDesigner/QExtensionFactory>
 #include <QtDesigner/QExtensionManager>
@@ -68,8 +69,8 @@
 class IPluginPrivate
 {
 public:
-    IPluginPrivate()
-        : iconLoader(0), m_factory(0)
+    IPluginPrivate(IPlugin *q)
+        : q(q), iconLoader(0), m_factory(0)
     {}
 
     ~IPluginPrivate()
@@ -77,6 +78,28 @@
         delete iconLoader;
     }
 
+    void _k_guiClientAdded(KXMLGUIClient *client)
+    {
+	if (client != q)
+	    return;
+
+	q->initializeGuiState();
+	_k_updateState();
+    }
+
+    void _k_updateState()
+    {
+	const int projectCount =
+	    ICore::self()->projectController()->projectCount();
+    
+	IPlugin::ReverseStateChange reverse = IPlugin::StateNoReverse;
+	if (! projectCount)
+	    reverse = IPlugin::StateReverse;
+
+	q->stateChanged(QLatin1String("has_project"), reverse);
+    }
+
+    IPlugin *q;
     ICore *core;
     KIconLoader* iconLoader;
     PluginExtensionFactory* m_factory;
@@ -85,7 +108,7 @@
 
 IPlugin::IPlugin( const KComponentData &instance, QObject *parent )
         : QObject( parent ),
-        KXMLGUIClient(), d( new IPluginPrivate )
+	  KXMLGUIClient(), d( new IPluginPrivate(this) )
 {
     // The following cast is safe, there's no component in KDevPlatform that
     // creates plugins except the plugincontroller. The controller passes
@@ -102,8 +125,16 @@
             continue;
 
         connect(guiWindow->guiFactory(), SIGNAL(clientAdded(KXMLGUIClient *)),
-            this, SLOT(guiClientAdded(KXMLGUIClient *)));
+		this, SLOT(_k_guiClientAdded(KXMLGUIClient *)));
     }
+
+    connect(ICore::self()->projectController(),
+	    SIGNAL(projectOpened(KDevelop::IProject *)),
+	    this, SLOT(_k_updateState()));
+
+    connect(ICore::self()->projectController(),
+	    SIGNAL(projectClosed(KDevelop::IProject *)),
+	    this, SLOT(_k_updateState()));
 }
 
 IPlugin::~IPlugin()
@@ -111,10 +142,6 @@
     delete d;
 }
 
-void IPlugin::guiClientAdded(KXMLGUIClient *)
-{
-}
-
 Qt::DockWidgetArea IPlugin::dockWidgetAreaHint() const
 {
     return Qt::NoDockWidgetArea;
@@ -202,6 +229,9 @@
     return KDevelop::ContextMenuExtension();
 }
 
+void KDevelop::IPlugin::initializeGuiState()
+{ }
+
 #include "iplugin.moc"
 
 
--- trunk/KDE/kdevplatform/interfaces/iplugin.h #797537:797538
@@ -195,20 +195,21 @@
      */
     void newIconLoader() const;
 
-protected Q_SLOTS:
+protected:
+    void addExtension( const QString& );
+
     /**
-     * A new GUI client has been loaded.
+     * Initialize the XML Gui State.
      */
-    virtual void guiClientAdded(KXMLGUIClient *client);
+    virtual void initializeGuiState();
 
-protected:
-    void addExtension( const QString& );
+private:
+    Q_PRIVATE_SLOT(d, void _k_guiClientAdded(KXMLGUIClient *))
+    Q_PRIVATE_SLOT(d, void _k_updateState())
 
-private:
-    class IPluginPrivate*  const d;
+    friend class IPluginPrivate;
+    class IPluginPrivate* const d;
     QExtensionManager* extensionManager();
-
-
 };
 
 }
--- trunk/KDE/kdevplatform/plugins/quickopen/kdevquickopen.rc #797537:797538
@@ -30,4 +30,16 @@
 
   </Menu>
 </MenuBar>
+
+<State name="has_project">
+  <enable>
+    <Action name="quick_open_class" />
+    <Action name="quick_open_function" />
+    <Action name="quick_open_navigate" />
+    <Action name="quick_open_navigate_function_definitions" />
+    <Action name="quick_open_jump_declaration" />
+    <Action name="quick_open_jump_definition" />
+  </enable>
+</State>
+
 </kpartgui>
--- trunk/KDE/kdevplatform/plugins/quickopen/quickopenplugin.cpp #797537:797538
@@ -21,6 +21,7 @@
 
 #include "quickopenplugin.h"
 
+#include <cassert>
 #include <typeinfo>
 #include <QtGui/QTreeView>
 #include <QtGui/QHeaderView>
@@ -47,6 +48,7 @@
 #include <iuicontroller.h>
 #include <idocumentcontroller.h>
 #include <ilanguagecontroller.h>
+#include <iprojectcontroller.h>
 #include <ilanguagesupport.h>
 #include <hashedstring.h>
 #include <duchain/duchainutils.h>
--- trunk/KDE/kdevplatform/plugins/quickopen/quickopenplugin.h #797537:797538
@@ -75,9 +75,11 @@
     void quickOpenDefinition();
     void quickOpenNavigate();
     void quickOpenNavigateFunctions();
+
 private slots:
     void storeScopes( const QStringList& );
-  private:
+
+private:
     //Whether the model is free for use. Else we cannot create a quickopen-widget.
     bool modelIsFree() const;
 
[prev in list] [next in list] [prev in thread] [next in thread] 

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