[feature] [ios] allow static build of postgres provider

This commit is contained in:
Peter Petrik 2019-10-11 15:03:35 +02:00
parent 679e75e13c
commit 5672f0d24c
16 changed files with 162 additions and 89 deletions

View File

@ -1504,10 +1504,12 @@ TARGET_LINK_LIBRARIES(qgis_core
IF (FORCE_STATIC_PROVIDERS)
INCLUDE_DIRECTORIES(
${CMAKE_SOURCE_DIR}/src/providers/wms
${CMAKE_SOURCE_DIR}/src/providers/postgres
)
TARGET_LINK_LIBRARIES(qgis_core
wmsprovider_a
postgresprovider_a
)
ENDIF (FORCE_STATIC_PROVIDERS)

View File

@ -37,6 +37,7 @@
#include "providers/meshmemory/qgsmeshmemorydataprovider.h"
#ifdef HAVE_STATIC_PROVIDERS
#include "qgswmsprovider.h"
#include "qgspostgresprovider.h"
#endif
static QgsProviderRegistry *sInstance = nullptr;
@ -109,6 +110,7 @@ void QgsProviderRegistry::init()
mProviders[ QgsOgrProvider::providerKey() ] = new QgsOgrProviderMetadata();
#ifdef HAVE_STATIC_PROVIDERS
mProviders[ QgsWmsProvider::providerKey() ] = new QgsWmsProviderMetadata();
mProviders[ QgsPostgresProvider::providerKey() ] = new QgsPostgresProviderMetadata();
#endif
// add dynamic providers

View File

@ -1130,9 +1130,11 @@ TARGET_LINK_LIBRARIES(qgis_gui
IF (FORCE_STATIC_PROVIDERS)
INCLUDE_DIRECTORIES(
${CMAKE_SOURCE_DIR}/src/providers/wms
${CMAKE_SOURCE_DIR}/src/providers/postgres
)
TARGET_LINK_LIBRARIES(qgis_gui
wmsprovider_gui_a
postgresprovider_gui_a
)
ENDIF (FORCE_STATIC_PROVIDERS)

View File

@ -27,6 +27,7 @@
#ifdef HAVE_STATIC_PROVIDERS
#include "qgswmsprovidergui.h"
#include "qgspostgresprovidergui.h"
#endif
/**
@ -68,6 +69,9 @@ void QgsProviderGuiRegistry::loadStaticProviders( )
#ifdef HAVE_STATIC_PROVIDERS
QgsProviderGuiMetadata *wms = new QgsWmsProviderGuiMetadata();
mProviders[ wms->key() ] = wms;
QgsProviderGuiMetadata *postgres = new QgsPostgresProviderGuiMetadata();
mProviders[ postgres->key() ] = postgres;
#endif
}

View File

@ -4,6 +4,9 @@ SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${QGIS_OUTPUT_DIRECTORY}/${QGIS_PLUGIN_SUBDI
# providers with implemented both static and dynamic building
ADD_SUBDIRECTORY(wms)
IF (POSTGRES_FOUND)
ADD_SUBDIRECTORY(postgres)
ENDIF (POSTGRES_FOUND)
IF (NOT FORCE_STATIC_PROVIDERS)
ADD_SUBDIRECTORY(arcgisrest)
@ -23,10 +26,6 @@ IF (NOT FORCE_STATIC_PROVIDERS)
ADD_SUBDIRECTORY(oracle)
ENDIF(WITH_ORACLE)
IF (POSTGRES_FOUND)
ADD_SUBDIRECTORY(postgres)
ENDIF (POSTGRES_FOUND)
IF (WITH_GRASS OR WITH_GRASS7)
ADD_SUBDIRECTORY(grass)
ENDIF (WITH_GRASS OR WITH_GRASS7)

View File

@ -28,14 +28,14 @@ SET(PG_MOC_HDRS
)
IF (WITH_GUI)
SET(PG_SRCS ${PG_SRCS}
SET(PG_GUI_SRCS
qgspostgresprovidergui.cpp
qgspostgresdataitemguiprovider.cpp
qgspgsourceselect.cpp
qgspgnewconnection.cpp
qgspostgresprojectstoragedialog.cpp
)
SET(PG_MOC_HDRS ${PG_MOC_HDRS}
SET(PG_GUI_MOC_HDRS
qgspostgresdataitemguiprovider.h
qgspgnewconnection.h
qgspgsourceselect.h
@ -52,6 +52,7 @@ SET(PG_HDRS
# Build
QT5_WRAP_CPP(PG_MOC_SRCS ${PG_MOC_HDRS})
QT5_WRAP_CPP (PG_GUI_MOC_SRCS ${PG_GUI_MOC_HDRS})
INCLUDE_DIRECTORIES(
${CMAKE_SOURCE_DIR}/src/core
@ -81,41 +82,66 @@ IF (WITH_GUI)
)
ENDIF ()
# static library
ADD_LIBRARY (postgresprovider_a STATIC ${PG_SRCS} ${PG_HDRS} ${PG_MOC_SRCS})
ADD_LIBRARY (postgresprovider MODULE ${PG_SRCS} ${PG_HDRS} ${PG_MOC_SRCS})
TARGET_LINK_LIBRARIES (postgresprovider_a
${POSTGRES_LIBRARY}
qgis_core
)
TARGET_LINK_LIBRARIES (postgresprovider
${POSTGRES_LIBRARY}
qgis_core
${Qt5Xml_LIBRARIES}
${Qt5Core_LIBRARIES}
${Qt5Svg_LIBRARIES}
${Qt5Network_LIBRARIES}
${Qt5Sql_LIBRARIES}
${Qt5Concurrent_LIBRARIES}
)
IF (WITH_GUI)
TARGET_LINK_LIBRARIES (postgresprovider_a
qgis_gui
ADD_LIBRARY(postgresprovider_gui_a STATIC ${PG_GUI_SRCS} ${PG_GUI_MOC_SRCS})
TARGET_LINK_LIBRARIES(postgresprovider_gui_a
${POSTGRES_LIBRARY}
${Qt5Xml_LIBRARIES}
${Qt5Core_LIBRARIES}
${Qt5Svg_LIBRARIES}
${Qt5Network_LIBRARIES}
${Qt5Sql_LIBRARIES}
${Qt5Concurrent_LIBRARIES}
${Qt5Gui_LIBRARIES}
${Qt5Widgets_LIBRARIES}
)
TARGET_LINK_LIBRARIES (postgresprovider
qgis_gui
ADD_DEPENDENCIES(postgresprovider_gui_a ui)
ENDIF (WITH_GUI)
IF (FORCE_STATIC_PROVIDERS)
# for (external) mobile apps to be able to pick up provider for linking
INSTALL (TARGETS postgresprovider_a ARCHIVE DESTINATION ${QGIS_PLUGIN_DIR})
IF (WITH_GUI)
INSTALL (TARGETS postgresprovider_gui_a ARCHIVE DESTINATION ${QGIS_PLUGIN_DIR})
ENDIF (WITH_GUI)
ELSE (FORCE_STATIC_PROVIDERS)
# dynamically loaded module
ADD_LIBRARY(postgresprovider MODULE ${PG_SRCS} ${PG_GUI_SRCS} ${PG_MOC_SRCS} ${PG_GUI_MOC_SRCS} ${PG_HDRS})
TARGET_LINK_LIBRARIES(postgresprovider
${POSTGRES_LIBRARY}
qgis_core
)
ADD_DEPENDENCIES(postgresprovider_a ui)
ADD_DEPENDENCIES(postgresprovider ui)
ENDIF ()
IF (WITH_GUI)
TARGET_LINK_LIBRARIES (postgresprovider
qgis_gui
)
ADD_DEPENDENCIES(postgresprovider ui)
ENDIF (WITH_GUI)
# clang-tidy
IF(CLANG_TIDY_EXE)
SET_TARGET_PROPERTIES(
postgresprovider PROPERTIES
CXX_CLANG_TIDY "${DO_CLANG_TIDY}"
)
ENDIF(CLANG_TIDY_EXE)
# clang-tidy
IF(CLANG_TIDY_EXE)
SET_TARGET_PROPERTIES(
postgresprovider PROPERTIES
CXX_CLANG_TIDY "${DO_CLANG_TIDY}"
)
ENDIF(CLANG_TIDY_EXE)
########################################################
# Install
INSTALL(TARGETS postgresprovider
RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
LIBRARY DESTINATION ${QGIS_PLUGIN_DIR})
INSTALL(TARGETS postgresprovider
RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
LIBRARY DESTINATION ${QGIS_PLUGIN_DIR})
ENDIF (FORCE_STATIC_PROVIDERS)

View File

@ -19,6 +19,7 @@
#include "qgspostgresprovider.h"
#include "qgspgnewconnection.h"
#include "qgsnewnamedialog.h"
#include "qgspgsourceselect.h"
#include <QInputDialog>
#include <QMessageBox>
@ -156,6 +157,21 @@ bool QgsPostgresDataItemGuiProvider::handleDrop( QgsDataItem *item, QgsDataItemG
return false;
}
QWidget *QgsPostgresDataItemGuiProvider::createParamWidget( QgsDataItem *root, QgsDataItemGuiContext )
{
QgsPGRootItem *pgRootItem = qobject_cast<QgsPGRootItem *>( root );
if ( pgRootItem != nullptr )
{
QgsPgSourceSelect *select = new QgsPgSourceSelect( nullptr, nullptr, QgsProviderRegistry::WidgetMode::Manager );
connect( select, &QgsPgSourceSelect::connectionsChanged, pgRootItem, &QgsPGRootItem::onConnectionsChanged );
return select;
}
else
{
return nullptr;
}
}
void QgsPostgresDataItemGuiProvider::newConnection( QgsDataItem *item )
{

View File

@ -36,6 +36,8 @@ class QgsPostgresDataItemGuiProvider : public QObject, public QgsDataItemGuiProv
bool acceptDrop( QgsDataItem *item, QgsDataItemGuiContext context ) override;
bool handleDrop( QgsDataItem *item, QgsDataItemGuiContext context, const QMimeData *data, Qt::DropAction action ) override;
QWidget *createParamWidget( QgsDataItem *root, QgsDataItemGuiContext ) override;
private:
static void newConnection( QgsDataItem *item );
static void editConnection( QgsDataItem *item );

View File

@ -27,11 +27,6 @@
#include "qgsvectorlayer.h"
#include "qgssettings.h"
#include "providers/gdal/qgsgdaldataitems.h"
#ifdef HAVE_GUI
#include "qgspgsourceselect.h"
#endif
#include <QMessageBox>
#include <climits>
@ -548,19 +543,10 @@ QVector<QgsDataItem *> QgsPGRootItem::createChildren()
return connections;
}
#ifdef HAVE_GUI
QWidget *QgsPGRootItem::paramWidget()
{
QgsPgSourceSelect *select = new QgsPgSourceSelect( nullptr, nullptr, QgsProviderRegistry::WidgetMode::Manager );
connect( select, &QgsPgSourceSelect::connectionsChanged, this, &QgsPGRootItem::onConnectionsChanged );
return select;
}
void QgsPGRootItem::onConnectionsChanged()
{
refresh();
}
#endif
QMainWindow *QgsPGRootItem::sMainWindow = nullptr;

View File

@ -40,16 +40,10 @@ class QgsPGRootItem : public QgsDataCollectionItem
QVariant sortKey() const override { return 3; }
#ifdef HAVE_GUI
QWidget *paramWidget() override;
#endif
static QMainWindow *sMainWindow;
public slots:
#ifdef HAVE_GUI
void onConnectionsChanged();
#endif
};
class QgsPGConnectionItem : public QgsDataCollectionItem

View File

@ -361,6 +361,11 @@ QgsTransaction *QgsPostgresProvider::transaction() const
return mTransaction;
}
QString QgsPostgresProvider::providerKey()
{
return POSTGRES_KEY;
}
void QgsPostgresProvider::setTransaction( QgsTransaction *transaction )
{
// static_cast since layers cannot be added to a transaction of a non-matching provider
@ -5221,7 +5226,9 @@ QgsPostgresProviderMetadata::QgsPostgresProviderMetadata()
{
}
#ifndef HAVE_STATIC_PROVIDERS
QGISEXTERN QgsProviderMetadata *providerMetadataFactory()
{
return new QgsPostgresProviderMetadata();
}
#endif

View File

@ -206,6 +206,7 @@ class QgsPostgresProvider : public QgsVectorDataProvider
QString name() const override;
QString description() const override;
QgsTransaction *transaction() const override;
static QString providerKey();
/**
* Convert the postgres string representation into the given QVariant type.

View File

@ -13,6 +13,7 @@
* *
***************************************************************************/
#include "qgspostgresprovidergui.h"
#include "qgsapplication.h"
#include "qgsproviderguimetadata.h"
#include "qgspgsourceselect.h"
@ -70,43 +71,39 @@ class QgsPostgresProjectStorageGuiProvider : public QgsProjectStorageGuiProvider
};
class QgsPostgresProviderGuiMetadata: public QgsProviderGuiMetadata
QgsPostgresProviderGuiMetadata::QgsPostgresProviderGuiMetadata():
QgsProviderGuiMetadata( QgsPostgresProvider::POSTGRES_KEY )
{
public:
QgsPostgresProviderGuiMetadata():
QgsProviderGuiMetadata( QgsPostgresProvider::POSTGRES_KEY )
{
}
}
QList<QgsSourceSelectProvider *> sourceSelectProviders() override
{
QList<QgsSourceSelectProvider *> providers;
providers << new QgsPostgresSourceSelectProvider; //#spellok
return providers;
}
QList<QgsSourceSelectProvider *> QgsPostgresProviderGuiMetadata::sourceSelectProviders()
{
QList<QgsSourceSelectProvider *> providers;
providers << new QgsPostgresSourceSelectProvider; //#spellok
return providers;
}
QList<QgsDataItemGuiProvider *> dataItemGuiProviders() override
{
return QList<QgsDataItemGuiProvider *>()
<< new QgsPostgresDataItemGuiProvider;
}
QList<QgsDataItemGuiProvider *> QgsPostgresProviderGuiMetadata::dataItemGuiProviders()
{
return QList<QgsDataItemGuiProvider *>()
<< new QgsPostgresDataItemGuiProvider;
}
QList<QgsProjectStorageGuiProvider *> projectStorageGuiProviders() override
{
QList<QgsProjectStorageGuiProvider *> providers;
providers << new QgsPostgresProjectStorageGuiProvider;
return providers;
}
void registerGui( QMainWindow *mainWindow ) override
{
QgsPGRootItem::sMainWindow = mainWindow;
}
};
QList<QgsProjectStorageGuiProvider *> QgsPostgresProviderGuiMetadata::projectStorageGuiProviders()
{
QList<QgsProjectStorageGuiProvider *> providers;
providers << new QgsPostgresProjectStorageGuiProvider;
return providers;
}
void QgsPostgresProviderGuiMetadata::registerGui( QMainWindow *mainWindow )
{
QgsPGRootItem::sMainWindow = mainWindow;
}
#ifndef HAVE_STATIC_PROVIDERS
QGISEXTERN QgsProviderGuiMetadata *providerGuiMetadataFactory()
{
return new QgsPostgresProviderGuiMetadata();
}
#endif

View File

@ -0,0 +1,35 @@
/***************************************************************************
qgspostgresprovidergui.h
------------------------
Date : October 2019
Copyright : (C) 2019 by Peter Petrik
Email : zilolv at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSPOSTGRESPROVIDERGUI_H
#define QGSPOSTGRESPROVIDERGUI_H
#include <QList>
#include <QMainWindow>
#include "qgsproviderguimetadata.h"
class QgsPostgresProviderGuiMetadata: public QgsProviderGuiMetadata
{
public:
QgsPostgresProviderGuiMetadata();
QList<QgsSourceSelectProvider *> sourceSelectProviders() override;
QList<QgsDataItemGuiProvider *> dataItemGuiProviders() override;
QList<QgsProjectStorageGuiProvider *> projectStorageGuiProviders() override;
void registerGui( QMainWindow *mainWindow ) override;
};
#endif // QGSPOSTGRESPROVIDERGUI_H

View File

@ -91,7 +91,7 @@ IF (FORCE_STATIC_PROVIDERS)
INSTALL (TARGETS wmsprovider_gui_a ARCHIVE DESTINATION ${QGIS_PLUGIN_DIR})
ENDIF (WITH_GUI)
ELSE (FORCE_STATIC_PROVIDERS)
# dynimally loaded module
# dynamically loaded module
ADD_LIBRARY(wmsprovider MODULE ${WMS_SRCS} ${WMS_GUI_SRCS} ${WMS_MOC_SRCS} ${WMS_GUI_MOC_SRCS})
TARGET_LINK_LIBRARIES(wmsprovider

View File

@ -94,13 +94,13 @@ ADD_QGIS_TEST(wmsprovidertest
testqgswmsprovider.cpp)
TARGET_LINK_LIBRARIES(qgis_wmsprovidertest wmsprovider_a qgis_core)
ADD_QGIS_TEST(postgresprovidertest testqgspostgresprovider.cpp)
TARGET_LINK_LIBRARIES(qgis_postgresprovidertest postgresprovider_a qgis_core)
ADD_QGIS_TEST(postgresconntest testqgspostgresconn.cpp)
TARGET_LINK_LIBRARIES(qgis_postgresconntest postgresprovider_a qgis_core)
IF (NOT FORCE_STATIC_PROVIDERS)
ADD_QGIS_TEST(postgresprovidertest testqgspostgresprovider.cpp)
TARGET_LINK_LIBRARIES(qgis_postgresprovidertest postgresprovider_a)
ADD_QGIS_TEST(postgresconntest testqgspostgresconn.cpp)
TARGET_LINK_LIBRARIES(qgis_postgresconntest postgresprovider_a)
ADD_QGIS_TEST(mdalprovidertest testqgsmdalprovider.cpp)
ENDIF (NOT FORCE_STATIC_PROVIDERS)