52
52
#endif
53
53
54
54
55
- QgsPluginManager::QgsPluginManager ( QWidget * parent, Qt::WFlags fl )
55
+ QgsPluginManager::QgsPluginManager ( QWidget * parent, bool pluginsAreEnabled, Qt::WFlags fl )
56
56
: QgsOptionsDialogBase( " PluginManager" , parent, fl )
57
57
{
58
58
// initialize pointer
@@ -75,6 +75,9 @@ QgsPluginManager::QgsPluginManager( QWidget * parent, Qt::WFlags fl )
75
75
// load translated description strings from qgspluginmanager_texts
76
76
initTabDescriptions ();
77
77
78
+ // set internal variable
79
+ mPluginsAreEnabled = pluginsAreEnabled;
80
+
78
81
// Init models
79
82
mModelPlugins = new QStandardItemModel ( 0 , 1 );
80
83
mModelProxy = new QgsPluginSortFilterProxyModel ( this );
@@ -248,6 +251,31 @@ void QgsPluginManager::unloadPlugin( QString id )
248
251
249
252
250
253
254
+ void QgsPluginManager::savePluginState ( QString id, bool state )
255
+ {
256
+ const QMap<QString, QString>* plugin = pluginMetadata ( id );
257
+ if ( ! plugin )
258
+ {
259
+ return ;
260
+ }
261
+
262
+ QSettings settings;
263
+ if ( plugin->value ( " pythonic" ) == " true" )
264
+ {
265
+ // Python plugin
266
+ settings.setValue ( " /PythonPlugins/" + id, state );
267
+ }
268
+ else
269
+ {
270
+ // C++ plugin
271
+ // Trim "cpp:" prefix from cpp plugin id
272
+ id = id.mid ( 4 );
273
+ settings.setValue ( " /Plugins/" + id, state );
274
+ }
275
+ }
276
+
277
+
278
+
251
279
void QgsPluginManager::getCppPluginsMetadata ()
252
280
{
253
281
QString sharedLibExtension;
@@ -493,7 +521,7 @@ void QgsPluginManager::reloadModelData()
493
521
mypDetailItem->setCheckState ( Qt::Unchecked );
494
522
}
495
523
496
- if ( isPluginLoaded ( it->value ( " id" ) ) )
524
+ if ( isPluginEnabled ( it->value ( " id" ) ) )
497
525
{
498
526
mypDetailItem->setCheckState ( Qt::Checked );
499
527
}
@@ -535,10 +563,20 @@ void QgsPluginManager::reloadModelData()
535
563
void QgsPluginManager::pluginItemChanged ( QStandardItem * item )
536
564
{
537
565
QString id = item->data ( PLUGIN_BASE_NAME_ROLE ).toString ();
538
- if ( item->checkState () && ! isPluginLoaded ( id ) )
566
+
567
+ if ( item->checkState () )
539
568
{
540
- QgsDebugMsg ( " Loading plugin: " + id );
541
- loadPlugin ( id );
569
+ if ( mPluginsAreEnabled && ! isPluginEnabled ( id ))
570
+ {
571
+ QgsDebugMsg ( " Loading plugin: " + id );
572
+ loadPlugin ( id );
573
+ }
574
+ else
575
+ {
576
+ // only enable the plugin, as we're in --noplugins mode
577
+ QgsDebugMsg ( " Enabling plugin: " + id );
578
+ savePluginState ( id, true );
579
+ }
542
580
}
543
581
else if ( ! item->checkState () )
544
582
{
@@ -1194,7 +1232,7 @@ void QgsPluginManager::on_ckbExperimental_toggled( bool state )
1194
1232
// PRIVATE METHODS ///////////////////////////////////////////////////////////////////
1195
1233
1196
1234
1197
- bool QgsPluginManager::isPluginLoaded ( QString key )
1235
+ bool QgsPluginManager::isPluginEnabled ( QString key )
1198
1236
{
1199
1237
const QMap<QString, QString>* plugin = pluginMetadata ( key );
1200
1238
if ( plugin->isEmpty () )
@@ -1203,19 +1241,15 @@ bool QgsPluginManager::isPluginLoaded( QString key )
1203
1241
return false ;
1204
1242
}
1205
1243
1244
+ QSettings mySettings;
1206
1245
if ( plugin->value ( " pythonic" ) != " true" )
1207
1246
{
1208
- // For C++ plugins, just check in the QgsPluginRegistry. If the plugin is broken, it was disabled quietly.
1209
1247
// Trim "cpp:" prefix from cpp plugin id
1210
1248
key = key.mid ( 4 );
1211
- QgsPluginRegistry *pRegistry = QgsPluginRegistry::instance ();
1212
- return pRegistry->isLoaded ( key );
1249
+ return ( mySettings.value ( " /Plugins/" + key, QVariant ( false ) ).toBool () );
1213
1250
}
1214
1251
else
1215
1252
{
1216
- // For Python plugins, check in QSettings if enabled rather than checking in QgsPluginRegistry if loaded.
1217
- // This will allow to turn off the plugin if broken.
1218
- QSettings mySettings;
1219
1253
return ( plugin->value ( " installed" ) == " true" && mySettings.value ( " /PythonPlugins/" + key, QVariant ( false ) ).toBool () );
1220
1254
}
1221
1255
}
0 commit comments