Skip to content

Commit

Permalink
[feature] [ios] allow static build of postgres provider
Browse files Browse the repository at this point in the history
  • Loading branch information
PeterPetrik committed Oct 25, 2019
1 parent 679e75e commit 5672f0d
Show file tree
Hide file tree
Showing 16 changed files with 164 additions and 91 deletions.
2 changes: 2 additions & 0 deletions src/core/CMakeLists.txt
Expand Up @@ -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)

Expand Down
2 changes: 2 additions & 0 deletions src/core/qgsproviderregistry.cpp
Expand Up @@ -37,6 +37,7 @@
#include "providers/meshmemory/qgsmeshmemorydataprovider.h"
#ifdef HAVE_STATIC_PROVIDERS
#include "qgswmsprovider.h"
#include "qgspostgresprovider.h"
#endif

static QgsProviderRegistry *sInstance = nullptr;
Expand Down Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions src/gui/CMakeLists.txt
Expand Up @@ -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)

Expand Down
4 changes: 4 additions & 0 deletions src/gui/qgsproviderguiregistry.cpp
Expand Up @@ -27,6 +27,7 @@

#ifdef HAVE_STATIC_PROVIDERS
#include "qgswmsprovidergui.h"
#include "qgspostgresprovidergui.h"
#endif

/**
Expand Down Expand Up @@ -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
}

Expand Down
7 changes: 3 additions & 4 deletions src/providers/CMakeLists.txt
Expand Up @@ -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)
Expand All @@ -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)
Expand Down
88 changes: 57 additions & 31 deletions src/providers/postgres/CMakeLists.txt
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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 ()


# 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})
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)

INSTALL(TARGETS postgresprovider
RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
LIBRARY DESTINATION ${QGIS_PLUGIN_DIR})

ENDIF (FORCE_STATIC_PROVIDERS)
16 changes: 16 additions & 0 deletions src/providers/postgres/qgspostgresdataitemguiprovider.cpp
Expand Up @@ -19,6 +19,7 @@
#include "qgspostgresprovider.h"
#include "qgspgnewconnection.h"
#include "qgsnewnamedialog.h"
#include "qgspgsourceselect.h"

#include <QInputDialog>
#include <QMessageBox>
Expand Down Expand Up @@ -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 )
{
Expand Down
2 changes: 2 additions & 0 deletions src/providers/postgres/qgspostgresdataitemguiprovider.h
Expand Up @@ -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 );
Expand Down
14 changes: 0 additions & 14 deletions src/providers/postgres/qgspostgresdataitems.cpp
Expand Up @@ -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>

Expand Down Expand Up @@ -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;

Expand Down
6 changes: 0 additions & 6 deletions src/providers/postgres/qgspostgresdataitems.h
Expand Up @@ -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
Expand Down
7 changes: 7 additions & 0 deletions src/providers/postgres/qgspostgresprovider.cpp
Expand Up @@ -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
Expand Down Expand Up @@ -5221,7 +5226,9 @@ QgsPostgresProviderMetadata::QgsPostgresProviderMetadata()
{
}

#ifndef HAVE_STATIC_PROVIDERS
QGISEXTERN QgsProviderMetadata *providerMetadataFactory()
{
return new QgsPostgresProviderMetadata();
}
#endif
1 change: 1 addition & 0 deletions src/providers/postgres/qgspostgresprovider.h
Expand Up @@ -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.
Expand Down
57 changes: 27 additions & 30 deletions src/providers/postgres/qgspostgresprovidergui.cpp
Expand Up @@ -13,6 +13,7 @@
* *
***************************************************************************/

#include "qgspostgresprovidergui.h"
#include "qgsapplication.h"
#include "qgsproviderguimetadata.h"
#include "qgspgsourceselect.h"
Expand Down Expand Up @@ -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<QgsDataItemGuiProvider *> dataItemGuiProviders() override
{
return QList<QgsDataItemGuiProvider *>()
<< new QgsPostgresDataItemGuiProvider;
}
QList<QgsSourceSelectProvider *> QgsPostgresProviderGuiMetadata::sourceSelectProviders()
{
QList<QgsSourceSelectProvider *> providers;
providers << new QgsPostgresSourceSelectProvider; //#spellok
return providers;
}

QList<QgsProjectStorageGuiProvider *> projectStorageGuiProviders() override
{
QList<QgsProjectStorageGuiProvider *> providers;
providers << new QgsPostgresProjectStorageGuiProvider;
return providers;
}
QList<QgsDataItemGuiProvider *> QgsPostgresProviderGuiMetadata::dataItemGuiProviders()
{
return QList<QgsDataItemGuiProvider *>()
<< new QgsPostgresDataItemGuiProvider;
}

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

0 comments on commit 5672f0d

Please sign in to comment.