Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Move QgsNative instance from app->QgsGui singleton
This allows gui widgets to utilise native platform interfaces.
Additionally attaching the instance to QgsGui allows QgsNative
to become a QObject in future if required and for use
of signals/slots in the native interfaces.
Loading branch information
@@ -31,6 +31,7 @@ class QgsGui
:rtype: QgsGui
%End
static QgsEditorWidgetRegistry *editorWidgetRegistry();
%Docstring
Returns the global editor widget registry, used for managing all known edit widget factories.
@@ -206,6 +206,7 @@ Q_GUI_EXPORT extern int qt_defaultDpiX();
#include "qgsmimedatautils.h"
#include "qgsmessagelog.h"
#include "qgsmultibandcolorrenderer.h"
#include "qgsnative.h"
#include "qgsnewvectorlayerdialog.h"
#include "qgsnewmemorylayerdialog.h"
#include "qgsoptions.h"
@@ -1200,12 +1201,6 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipVersionCh
}
#endif
#ifdef Q_OS_MAC
mNative = new QgsMacNative();
#else
mNative = new QgsNative();
#endif
} // QgisApp ctor
QgisApp::QgisApp()
@@ -6125,7 +6120,7 @@ void QgisApp::activate()
void QgisApp::bringAllToFront()
{
mNative ->currentAppActivateIgnoringOtherApps();
QgsGui::nativePlatformInterface() ->currentAppActivateIgnoringOtherApps();
}
void QgisApp::addWindow( QAction *action )
@@ -139,8 +139,6 @@ class QgsDiagramProperties;
#include " ui_qgisapp.h"
#include " qgis_app.h"
#include " qgsnative.h"
#include < QGestureEvent>
#include < QTapAndHoldGesture>
@@ -1969,8 +1967,6 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
QHash< QgsComposition *, QgsMapLayerAction * > mAtlasFeatureActions ;
QgsNative *mNative = nullptr ;
int mProjOpen ;
bool gestureEvent ( QGestureEvent *event );
@@ -744,6 +744,7 @@ INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR} /effects
${CMAKE_BINARY_DIR} /src/core
${CMAKE_BINARY_DIR} /src/gui
${CMAKE_BINARY_DIR} /src/native
../core
../core/annotations
../core/auth
@@ -758,6 +759,7 @@ INCLUDE_DIRECTORIES(
../core/symbology-ng
../core/effects
../core/metadata
../native
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_BINARY_DIR} /../ui
)
@@ -804,6 +806,7 @@ SET(QGIS_GUI_HDRS ${QGIS_GUI_HDRS} ${CMAKE_CURRENT_BINARY_DIR}/qgis_gui.h)
IF (NOT APPLE)
INSTALL (FILES ${QGIS_GUI_HDRS} ${QGIS_GUI_MOC_HDRS} DESTINATION ${QGIS_INCLUDE_DIR} )
ELSE (NOT APPLE)
INCLUDE_DIRECTORIES (${CMAKE_SOURCE_DIR} /src/native/mac)
SET_TARGET_PROPERTIES (qgis_gui PROPERTIES
CLEAN_DIRECT_OUTPUT 1
FRAMEWORK 1
@@ -838,6 +841,7 @@ ADD_DEPENDENCIES(qgis_gui ui)
TARGET_LINK_LIBRARIES (qgis_gui
qgis_core
qgis_native
${QT_QTUITOOLS_LIBRARY}
${QWT_LIBRARY}
${QSCINTILLA_LIBRARY}
@@ -19,6 +19,7 @@
#include " qgseditorwidgetregistry.h"
#include " qgslayertreeembeddedwidgetregistry.h"
#include " qgsmaplayeractionregistry.h"
#include " qgsnative.h"
#include " qgsshortcutsmanager.h"
QgsGui *QgsGui::instance ()
@@ -27,6 +28,11 @@ QgsGui *QgsGui::instance()
return sInstance ;
}
QgsNative *QgsGui::nativePlatformInterface ()
{
return instance ()->mNative ;
}
QgsEditorWidgetRegistry *QgsGui::editorWidgetRegistry ()
{
return instance ()->mEditorWidgetRegistry ;
@@ -53,10 +59,17 @@ QgsGui::~QgsGui()
delete mEditorWidgetRegistry ;
delete mMapLayerActionRegistry ;
delete mShortcutsManager ;
delete mNative ;
}
QgsGui::QgsGui ()
{
#ifdef Q_OS_MAC
mNative = new QgsMacNative ();
#else
mNative = new QgsNative ();
#endif
mEditorWidgetRegistry = new QgsEditorWidgetRegistry ();
mShortcutsManager = new QgsShortcutsManager ();
mLayerTreeEmbeddedWidgetRegistry = new QgsLayerTreeEmbeddedWidgetRegistry ();
@@ -19,11 +19,13 @@
#define QGSGUI_H
#include " qgis_gui.h"
#include " qgis_sip.h"
class QgsEditorWidgetRegistry ;
class QgsShortcutsManager ;
class QgsLayerTreeEmbeddedWidgetRegistry ;
class QgsMapLayerActionRegistry ;
class QgsNative ;
/* *
* \ingroup gui
@@ -46,6 +48,13 @@ class GUI_EXPORT QgsGui
*/
static QgsGui *instance ();
/* *
* Returns the global native interface, which offers abstraction to the host OS's underlying public
* interfaces.
* \note Not available in Python bindings
*/
SIP_SKIP static QgsNative *nativePlatformInterface ();
/* *
* Returns the global editor widget registry, used for managing all known edit widget factories.
*/
@@ -72,6 +81,7 @@ class GUI_EXPORT QgsGui
QgsGui ();
QgsNative *mNative = nullptr ;
QgsEditorWidgetRegistry *mEditorWidgetRegistry = nullptr ;
QgsShortcutsManager *mShortcutsManager = nullptr ;
QgsLayerTreeEmbeddedWidgetRegistry *mLayerTreeEmbeddedWidgetRegistry = nullptr ;
@@ -17,10 +17,6 @@
#include " qgsnative.h"
QgsNative::QgsNative ()
{
}
void QgsNative::currentAppActivateIgnoringOtherApps ()
{
}
@@ -21,18 +21,20 @@
#include " qgis_native.h"
/* *
* \class QgsNative
* \ingroup native
* Base class for implementing methods for native system calls that
* are implemented in subclasses to provide platform abstraction.
* \since QGIS 3.0
*/
class NATIVE_EXPORT QgsNative
{
public:
QgsNative ();
virtual ~QgsNative () = default ;
/* *
* Bring QGIS to front. Default implementation does nothing.
*
* @note Added in QGIS 3.0
* Brings the QGIS app to front. The default implementation does nothing.
*/
virtual void currentAppActivateIgnoringOtherApps ();
};
@@ -22,8 +22,6 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR} /../../../src/app
${CMAKE_CURRENT_SOURCE_DIR} /../../../src/app/pluginmanager
${CMAKE_CURRENT_SOURCE_DIR} /../../../src/test
${CMAKE_SOURCE_DIR} /src/native
${CMAKE_BINARY_DIR} /src/native
${CMAKE_BINARY_DIR} /src/core
${CMAKE_BINARY_DIR} /src/gui
${CMAKE_BINARY_DIR} /src/python
@@ -79,8 +77,6 @@ MACRO (ADD_QGIS_TEST testname testsrc)
TARGET_LINK_LIBRARIES (qgis_${testname} ${APP_SERVICES_LIBRARY} )
ENDIF (APPLE)
ADD_TEST (qgis_${testname} ${CMAKE_CURRENT_BINARY_DIR} /../../../output/bin/qgis_${testname} -maxwarnings 10000)
TARGET_LINK_LIBRARIES (qgis_${testname} qgis_native)
ADD_TEST (qgis_${testname} ${CMAKE_CURRENT_BINARY_DIR} /../../../output/bin/qgis_${testname} )
# SET_TARGET_PROPERTIES(qgis_${testname} PROPERTIES
# INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${QGIS_LIB_DIR}
# INSTALL_RPATH_USE_LINK_PATH true )
@@ -21,6 +21,8 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR} /../../../src/core/raster
${CMAKE_CURRENT_SOURCE_DIR} /../../../src/core/symbology-ng
${CMAKE_CURRENT_SOURCE_DIR} /../../../src/test
${CMAKE_SOURCE_DIR} /src/native
${CMAKE_BINARY_DIR} /src/native
${CMAKE_BINARY_DIR} /src/core
${CMAKE_BINARY_DIR} /src/gui
)
@@ -87,6 +89,8 @@ MACRO (ADD_QGIS_TEST testname testsrc)
qgis_core
qgis_gui)
ADD_TEST (qgis_${testname} ${CMAKE_CURRENT_BINARY_DIR} /../../../output/bin/qgis_${testname} -maxwarnings 10000)
TARGET_LINK_LIBRARIES (qgis_${testname} qgis_native)
ADD_TEST (qgis_${testname} ${CMAKE_CURRENT_BINARY_DIR} /../../../output/bin/qgis_${testname} )
# SET_TARGET_PROPERTIES(qgis_${testname} PROPERTIES
# INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${QGIS_LIB_DIR}
# INSTALL_RPATH_USE_LINK_PATH true )
@@ -65,7 +65,7 @@ MACRO (ADD_QGIS_TEST testname testsrc)
TARGET_LINK_LIBRARIES (qgis_${testname}
${QT_QTCORE_LIBRARY}
${QT_QTTEST_LIBRARY}
qgis_app
qgis_gui
qgis_native
)
ADD_TEST (qgis_${testname} ${CMAKE_CURRENT_BINARY_DIR} /../../../output/bin/qgis_${testname} -maxwarnings 10000)
Toggle all file notes