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 #include "icore.h" #include "iplugincontroller.h" +#include "iprojectcontroller.h" #include "contextmenuextension.h" #include #include @@ -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 @@ + + + + + + + + + + + + --- trunk/KDE/kdevplatform/plugins/quickopen/quickopenplugin.cpp #797537:797538 @@ -21,6 +21,7 @@ #include "quickopenplugin.h" +#include #include #include #include @@ -47,6 +48,7 @@ #include #include #include +#include #include #include #include --- 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;