Skip to content

Commit

Permalink
Plugin manager signal when enabling / disabling plugin.
Browse files Browse the repository at this point in the history
Use plugin manager to call function attached to the plugin Item {} itself when enabling / disabling a plugin.
  • Loading branch information
mohsenD98 committed Sep 18, 2024
1 parent ea00df0 commit 781d9f9
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 11 deletions.
26 changes: 26 additions & 0 deletions src/core/pluginmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -288,10 +288,12 @@ void PluginManager::enableAppPlugin( const QString &uuid )
loadPlugin( mAvailableAppPlugins[uuid].path(), mAvailableAppPlugins[uuid].name() );
}
}
callPluginMethod( uuid, "appWideActivated" );
}

void PluginManager::disableAppPlugin( const QString &uuid )
{
callPluginMethod( uuid, "appWideDisabled" );
if ( mAvailableAppPlugins.contains( uuid ) )
{
if ( mLoadedPlugins.contains( mAvailableAppPlugins[uuid].path() ) )
Expand Down Expand Up @@ -455,3 +457,27 @@ QString PluginManager::findProjectPlugin( const QString &projectPath )
}
return QString();
}

void PluginManager::callPluginMethod( const QString &uuid, const QString &methodName )
{
if ( !mAvailableAppPlugins.contains( uuid ) )
{
return;
}

const QString pluginPath = mAvailableAppPlugins[uuid].path();
if ( !mLoadedPlugins.contains( pluginPath ) )
{
return;
}

const QPointer<QObject> object = mLoadedPlugins[pluginPath];

const char *normalizedSignature = QMetaObject::normalizedSignature( ( methodName + "()" ).toStdString().c_str() );
const int methodExists = object->metaObject()->indexOfSlot( normalizedSignature );

if ( methodExists != -1 )
{
QMetaObject::invokeMethod( object.data(), methodName.toStdString().c_str() );
}
}
2 changes: 2 additions & 0 deletions src/core/pluginmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,10 @@ class PluginManager : public QObject
void installProgress( double progress );
void installEnded( const QString &uuid = QString(), const QString &error = QString() );


private slots:
void handleWarnings( const QList<QQmlError> &warnings );
void callPluginMethod( const QString &uuid, const QString &slotName );

private:
QQmlEngine *mEngine = nullptr;
Expand Down
5 changes: 0 additions & 5 deletions src/qml/PluginManagerSettings.qml
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@ Popup {
y: (parent.height - height) / 2
padding: 0

signal unLoadClicked(string Uuid)
signal loadClicked(string Uuid)

Page {
id: page
width: parent.width
Expand Down Expand Up @@ -122,10 +119,8 @@ Popup {
Enabled = checked == true;
if (Enabled) {
pluginManager.enableAppPlugin(Uuid);
loadClicked(Uuid);
} else {
pluginManager.disableAppPlugin(Uuid);
unLoadClicked(Uuid);
}
}
}
Expand Down
6 changes: 0 additions & 6 deletions src/qml/qgismobileapp.qml
Original file line number Diff line number Diff line change
Expand Up @@ -2077,12 +2077,6 @@ ApplicationWindow {
modal: true
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
parent: Overlay.overlay

onUnLoadClicked: function (Uuid) {
if (Uuid.search === "qfield-egeniouss-plugin") {
positioningSettings.enableEgeniouss = false;
}
}
}

DashBoard {
Expand Down

0 comments on commit 781d9f9

Please sign in to comment.