Plugin loading, with issues..

--HG--
branch : gsoc2014-dfighter
This commit is contained in:
dfighter1985 2014-06-09 01:14:13 +02:00
parent c45b6a17f4
commit f060adbed7
5 changed files with 72 additions and 17 deletions

View file

@ -114,8 +114,62 @@ void PluginManager::loadPlugins()
Q_EMIT pluginsChanged(); Q_EMIT pluginsChanged();
} }
bool PluginManager::loadPluginSpec( const char *plugin )
{
nlinfo( "Loading plugin spec %s", plugin );
PluginSpec *spec = new PluginSpec;
spec->m_pluginManager = this;
if( !spec->setSpecFileName( plugin ) )
{
nlinfo( "Error loading plugin spec %s", plugin );
return false;
}
m_pluginSpecs.append( spec );
m_ipluginSpecs.append( spec );
return true;
}
bool PluginManager::loadPlugin( const char *plugin ) bool PluginManager::loadPlugin( const char *plugin )
{ {
if( !loadPluginSpec( plugin ) )
return false;
ExtensionSystem::PluginSpec *spec = m_pluginSpecs.last();
if( !spec->resolveDependencies( m_pluginSpecs ) )
{
nlinfo( "Error resolving dependencies for plugin spec %s", plugin );
return false;
}
if( !spec->loadLibrary() )
{
nlinfo( "Error loading plugin %s", spec->fileName().toUtf8().data() );
return false;
}
if( !spec->initializePlugin() )
{
nlinfo( "Error initializing plugin %s", spec->fileName().toUtf8().data() );
spec->kill();
return false;
}
if( !spec->initializeExtensions() )
{
nlinfo( "Error starting plugin %s", spec->fileName().toUtf8().data() );
spec->stop();
spec->kill();
return false;
}
nlinfo( "Loaded plugin %s ( %s )", spec->name().data(), spec->fileName().toUtf8().data() );
Q_EMIT pluginsChanged();
return true; return true;
} }
@ -262,11 +316,7 @@ void PluginManager::readPluginPaths()
Q_FOREACH (const QString &pluginFile, pluginsList) Q_FOREACH (const QString &pluginFile, pluginsList)
{ {
PluginSpec *spec = new PluginSpec; loadPluginSpec( pluginFile.toUtf8().data() );
spec->m_pluginManager = this;
spec->setSpecFileName(pluginFile);
m_pluginSpecs.append(spec);
m_ipluginSpecs.append(spec);
} }
Q_EMIT pluginsChanged(); Q_EMIT pluginsChanged();

View file

@ -51,6 +51,7 @@ public:
virtual QList<IPluginSpec *> plugins() const; virtual QList<IPluginSpec *> plugins() const;
QList<PluginSpec *> loadQueue(); QList<PluginSpec *> loadQueue();
bool loadPluginSpec( const char *plugin );
bool loadPlugin( const char *plugin ); bool loadPlugin( const char *plugin );
bool unloadPlugin( ExtensionSystem::IPluginSpec *plugin ); bool unloadPlugin( ExtensionSystem::IPluginSpec *plugin );
void removePlugin( ExtensionSystem::IPluginSpec *plugin ); void removePlugin( ExtensionSystem::IPluginSpec *plugin );

View file

@ -36,13 +36,11 @@ struct ContextManagerPrivate
Core::MainWindow *m_mainWindow; Core::MainWindow *m_mainWindow;
QTabWidget *m_tabWidget; QTabWidget *m_tabWidget;
QVector<IContext *> m_contexts; QVector<IContext *> m_contexts;
int m_oldCurrent;
}; };
ContextManagerPrivate::ContextManagerPrivate(Core::MainWindow *mainWindow, QTabWidget *tabWidget) ContextManagerPrivate::ContextManagerPrivate(Core::MainWindow *mainWindow, QTabWidget *tabWidget)
: m_mainWindow(mainWindow), : m_mainWindow(mainWindow),
m_tabWidget(tabWidget), m_tabWidget(tabWidget)
m_oldCurrent(-1)
{ {
} }
@ -145,11 +143,7 @@ void ContextManager::currentTabChanged(int index)
if (index >= 0) if (index >= 0)
{ {
IContext *context = d->m_contexts.at(index); IContext *context = d->m_contexts.at(index);
IContext *oldContext = 0; Q_EMIT currentContextChanged(context);
if (d->m_oldCurrent >= 0)
oldContext = d->m_contexts.at(d->m_oldCurrent);
d->m_oldCurrent = index;
Q_EMIT currentContextChanged(context, oldContext);
} }
} }

View file

@ -51,8 +51,7 @@ public:
void unregisterUndoStack(QUndoStack *stack); void unregisterUndoStack(QUndoStack *stack);
Q_SIGNALS: Q_SIGNALS:
// the default argument '=0' is important for connects without the oldContext argument. void currentContextChanged(Core::IContext *context);
void currentContextChanged(Core::IContext *context, Core::IContext *oldContext = 0);
public Q_SLOTS: public Q_SLOTS:
void activateContext(const QString &id); void activateContext(const QString &id);

View file

@ -155,7 +155,18 @@ void PluginView::onLoadClicked()
return; return;
} }
this->m_pluginManager->loadPlugin( f.toAscii().data() ); QApplication::setOverrideCursor( Qt::WaitCursor );
bool success = m_pluginManager->loadPlugin( f.toAscii().data() );
QApplication::setOverrideCursor( Qt::ArrowCursor );
if( !success )
{
QMessageBox::warning( this,
tr( "Loading plugin" ),
tr( "Error loading plugin!" ) );
}
} }
} /* namespace Core */
} /* namespace Core */