Skip to content

Commit 90f8730

Browse files
committed
Attach QgsSourceSelectProviderRegistry to QgsGui
And make it a singleton
1 parent e868599 commit 90f8730

File tree

6 files changed

+40
-5
lines changed

6 files changed

+40
-5
lines changed

python/gui/qgsgui.sip

+6
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ class QgsGui
3838
:rtype: QgsEditorWidgetRegistry
3939
%End
4040

41+
static QgsSourceSelectProviderRegistry *sourceSelectProviderRegistry();
42+
%Docstring
43+
Returns the global source select provider registry, used for managing all known source select widget factories.
44+
:rtype: QgsSourceSelectProviderRegistry
45+
%End
46+
4147
static QgsShortcutsManager *shortcutsManager();
4248
%Docstring
4349
Returns the global shortcuts manager, used for managing a QAction and QShortcut sequences.

python/gui/qgssourceselectproviderregistry.sip

+3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ class QgsSourceSelectProviderRegistry
1414
This class keeps a list of source select providers that may add items to the QgsDataSourceManagerDialog
1515
When created, it automatically adds providers from data provider plugins (e.g. PostGIS, WMS, ...)
1616

17+
QgsSourceSelectProviderRegistry is not usually directly created, but rather accessed through
18+
QgsGui.sourceSelectProviderRegistry().
19+
1720
.. versionadded:: 3.0
1821
%End
1922

src/gui/qgsgui.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "qgseditorwidgetregistry.h"
2020
#include "qgslayertreeembeddedwidgetregistry.h"
2121
#include "qgsmaplayeractionregistry.h"
22+
#include "qgssourceselectproviderregistry.h"
2223
#include "qgslayoutitemregistry.h"
2324
#include "qgslayoutitemguiregistry.h"
2425
#include "qgslayoutviewrubberband.h"
@@ -45,6 +46,11 @@ QgsEditorWidgetRegistry *QgsGui::editorWidgetRegistry()
4546
return instance()->mEditorWidgetRegistry;
4647
}
4748

49+
QgsSourceSelectProviderRegistry *QgsGui::sourceSelectProviderRegistry()
50+
{
51+
return instance()->mSourceSelectProviderRegistry;
52+
}
53+
4854
QgsShortcutsManager *QgsGui::shortcutsManager()
4955
{
5056
return instance()->mShortcutsManager;
@@ -71,6 +77,7 @@ QgsGui::~QgsGui()
7177
delete mLayerTreeEmbeddedWidgetRegistry;
7278
delete mEditorWidgetRegistry;
7379
delete mMapLayerActionRegistry;
80+
delete mSourceSelectProviderRegistry;
7481
delete mShortcutsManager;
7582
delete mNative;
7683
}
@@ -87,6 +94,7 @@ QgsGui::QgsGui()
8794
mShortcutsManager = new QgsShortcutsManager();
8895
mLayerTreeEmbeddedWidgetRegistry = new QgsLayerTreeEmbeddedWidgetRegistry();
8996
mMapLayerActionRegistry = new QgsMapLayerActionRegistry();
97+
mSourceSelectProviderRegistry = new QgsSourceSelectProviderRegistry();
9098
mLayoutItemGuiRegistry = new QgsLayoutItemGuiRegistry();
9199
mLayoutItemGuiRegistry->populate();
92100
}

src/gui/qgsgui.h

+7
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class QgsEditorWidgetRegistry;
2525
class QgsShortcutsManager;
2626
class QgsLayerTreeEmbeddedWidgetRegistry;
2727
class QgsMapLayerActionRegistry;
28+
class QgsSourceSelectProviderRegistry;
2829
class QgsNative;
2930
class QgsLayoutItemGuiRegistry;
3031

@@ -61,6 +62,11 @@ class GUI_EXPORT QgsGui
6162
*/
6263
static QgsEditorWidgetRegistry *editorWidgetRegistry();
6364

65+
/**
66+
* Returns the global source select provider registry, used for managing all known source select widget factories.
67+
*/
68+
static QgsSourceSelectProviderRegistry *sourceSelectProviderRegistry();
69+
6470
/**
6571
* Returns the global shortcuts manager, used for managing a QAction and QShortcut sequences.
6672
*/
@@ -89,6 +95,7 @@ class GUI_EXPORT QgsGui
8995

9096
QgsNative *mNative = nullptr;
9197
QgsEditorWidgetRegistry *mEditorWidgetRegistry = nullptr;
98+
QgsSourceSelectProviderRegistry *mSourceSelectProviderRegistry = nullptr;
9299
QgsShortcutsManager *mShortcutsManager = nullptr;
93100
QgsLayerTreeEmbeddedWidgetRegistry *mLayerTreeEmbeddedWidgetRegistry = nullptr;
94101
QgsMapLayerActionRegistry *mMapLayerActionRegistry = nullptr;

src/gui/qgssourceselectproviderregistry.h

+3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ class QgsSourceSelectProvider;
2525
* This class keeps a list of source select providers that may add items to the QgsDataSourceManagerDialog
2626
* When created, it automatically adds providers from data provider plugins (e.g. PostGIS, WMS, ...)
2727
*
28+
* QgsSourceSelectProviderRegistry is not usually directly created, but rather accessed through
29+
* QgsGui::sourceSelectProviderRegistry().
30+
*
2831
* \since QGIS 3.0
2932
*/
3033
class GUI_EXPORT QgsSourceSelectProviderRegistry

tests/src/python/test_qgssourceselectprovider.py

+13-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# -*- coding: utf-8 -*-
22
"""
3-
Test the QgsSourceSelectProvider class
3+
Test the QgsSourceSelectProvider
4+
and QgsSourceSelectProviderRegistry classes
45
56
Run with: ctest -V -R PyQgsSourceSelectProvider
67
@@ -12,7 +13,7 @@
1213

1314
import os
1415
import tempfile
15-
from qgis.gui import (QgsSourceSelectProvider, QgsSourceSelectProviderRegistry, QgsAbstractDataSourceWidget)
16+
from qgis.gui import (QgsGui, QgsSourceSelectProvider, QgsSourceSelectProviderRegistry, QgsAbstractDataSourceWidget)
1617
from qgis.testing import start_app, unittest
1718
from qgis.PyQt.QtGui import QIcon
1819
from qgis.PyQt.QtWidgets import QWidget
@@ -90,9 +91,8 @@ def testConcreteClass(self):
9091
self.assertEqual(provider.ordering(), 1)
9192
self.assertTrue(isinstance(provider.icon(), QIcon))
9293

93-
def testRegistry(self):
94+
def _testRegistry(self, registry):
9495

95-
registry = QgsSourceSelectProviderRegistry()
9696
registry.addProvider(ConcreteSourceSelectProvider())
9797
registry.addProvider(ConcreteSourceSelectProvider2())
9898

@@ -113,13 +113,21 @@ def testRegistry(self):
113113
# Get not existent by name
114114
self.assertFalse(registry.providerByName('Oh This Is Missing!'))
115115

116-
# Get providers by provider key
116+
# Get providers by data provider key
117117
self.assertGreater(len(registry.providersByKey('MyTestProviderKey')), 0)
118118
self.assertGreater(len(registry.providersByKey('MyTestProviderKey2')), 0)
119119

120120
# Get not existent by key
121121
self.assertEqual(len(registry.providersByKey('Oh This Is Missing!')), 0)
122122

123+
def testRegistry(self):
124+
registry = QgsSourceSelectProviderRegistry()
125+
self._testRegistry(registry)
126+
127+
def testRegistrySingleton(self):
128+
registry = QgsGui.sourceSelectProviderRegistry()
129+
self._testRegistry(registry)
130+
123131

124132
if __name__ == '__main__':
125133
unittest.main()

0 commit comments

Comments
 (0)