custom widgets for Qt Designer, QgsScaleVisibilityGroupBox plugin

This commit is contained in:
Denis Rouzaud 2014-04-25 10:26:43 +02:00
parent 156dc55013
commit 2cf3e7c5dd
16 changed files with 904 additions and 218 deletions

View File

@ -46,6 +46,8 @@ IF(WITH_MAPSERVER)
SET (MAPSERVER_SKIP_ECW FALSE CACHE BOOL "Determines whether QGIS mapserver should disable ECW (ECW in server apps requires a special license)")
ENDIF(WITH_MAPSERVER)
SET (WITH_CUSTOM_WIDGETS FALSE CACHE BOOL "Determines whether QGIS custom widgets for Qt Designer should be built")
# build our version of astyle
SET (WITH_ASTYLE FALSE CACHE BOOL "If you plan to contribute you should reindent with scripts/prepare-commit.sh (using 'our' astyle)")
@ -229,10 +231,13 @@ SET(QT_USE_QTNETWORK 1)
SET(QT_USE_QTSVG 1)
SET(QT_USE_QTSQL 1)
SET(QT_USE_QTWEBKIT 1)
IF (WITH_CUSTOM_WIDGETS)
SET(QT_USE_QTDESIGNER 1)
ENDIF (WITH_CUSTOM_WIDGETS)
IF (NOT QT_QTXML_FOUND OR NOT QT_QTNETWORK_FOUND OR NOT QT_QTSVG_FOUND OR NOT QT_QTSQL_FOUND OR NOT QT_QTWEBKIT_FOUND)
IF (NOT QT_QTXML_FOUND OR NOT QT_QTNETWORK_FOUND OR NOT QT_QTSVG_FOUND OR NOT QT_QTSQL_FOUND OR NOT QT_QTWEBKIT_FOUND OR (WITH_CUSTOM_WIDGETS AND NOT QT_QTDESIGNER_FOUND))
MESSAGE(SEND_ERROR "Some Qt4 modules haven't been found!")
ENDIF (NOT QT_QTXML_FOUND OR NOT QT_QTNETWORK_FOUND OR NOT QT_QTSVG_FOUND OR NOT QT_QTSQL_FOUND OR NOT QT_QTWEBKIT_FOUND)
ENDIF (NOT QT_QTXML_FOUND OR NOT QT_QTNETWORK_FOUND OR NOT QT_QTSVG_FOUND OR NOT QT_QTSQL_FOUND OR NOT QT_QTWEBKIT_FOUND OR (WITH_CUSTOM_WIDGETS AND NOT QT_QTDESIGNER_FOUND))
IF (WITH_QTMOBILITY)
FIND_PACKAGE(QtMobility 1.1.0)
@ -285,6 +290,12 @@ ENDIF (ENABLE_TESTS)
INCLUDE( ${QT_USE_FILE} )
IF (WITH_CUSTOM_WIDGETS)
ADD_DEFINITIONS(-DQT_PLUGIN)
ADD_DEFINITIONS(-DQT_NO_DEBUG)
ADD_DEFINITIONS(-DQT_SHARED)
ENDIF (WITH_CUSTOM_WIDGETS)
# Disable automatic conversion from QString to ASCII 8-bit strings (char *)
# (Keeps code compatible with Qt/Mac/64bit)
ADD_DEFINITIONS(-DQT_NO_CAST_TO_ASCII)
@ -506,6 +517,7 @@ ADD_DEFINITIONS("-DCORE_EXPORT=${DLLIMPORT}")
ADD_DEFINITIONS("-DGUI_EXPORT=${DLLIMPORT}")
ADD_DEFINITIONS("-DPYTHON_EXPORT=${DLLIMPORT}")
ADD_DEFINITIONS("-DANALYSIS_EXPORT=${DLLIMPORT}")
ADD_DEFINITIONS("-DCUSTOMWIDGETS_EXPORT=${DLLIMPORT}")
ADD_DEFINITIONS("-DAPP_EXPORT=${DLLIMPORT}")
#############################################################
@ -533,6 +545,7 @@ SET (QGIS_LIBEXEC_DIR ${QGIS_LIBEXEC_SUBDIR})
SET (QGIS_DATA_DIR ${QGIS_DATA_SUBDIR})
SET (QGIS_PLUGIN_DIR ${QGIS_PLUGIN_SUBDIR})
SET (QGIS_INCLUDE_DIR ${QGIS_INCLUDE_SUBDIR})
SET (QGIS_CUSTOMWIDGETS_DIR ${QT_PLUGINS_DIR}/designer)
# set the default locations where the targets (executables, libraries) will land when compiled
# this is to allow running qgis from the source tree without having to actually do a "make install"
@ -589,7 +602,7 @@ ENDIF (NOT EXISTS QSCINTILLA_VERSION_STR AND EXISTS QSCI_MOD_VERSION_STR)
# installed with app target
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake_templates/qgsconfig.h.in ${CMAKE_BINARY_DIR}/qgsconfig.h)
INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
INCLUDE_DIRECTORIES(${QT_INCLUDES} ${CMAKE_BINARY_DIR})
# Added by Jef to prevent python core and gui libs linking to other qgisCore and qgisGui libs
# that may be in the same install prefix

View File

@ -20,6 +20,10 @@ IF (WITH_MAPSERVER)
ADD_SUBDIRECTORY(mapserver) # TODO: enable again once compilation is fixed
ENDIF (WITH_MAPSERVER)
IF (WITH_CUSTOM_WIDGETS)
ADD_SUBDIRECTORY(customwidgets)
ENDIF (WITH_CUSTOM_WIDGETS)
IF (WITH_ASTYLE)
ADD_SUBDIRECTORY(astyle)
ENDIF(WITH_ASTYLE)

View File

@ -81,8 +81,7 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
// and connecting QDialogButtonBox's accepted/rejected signals to dialog's accept/reject slots
initOptionsBase( false );
mMaximumScaleIconLabel->setPixmap( QgsApplication::getThemePixmap( "/mActionZoomIn.svg" ) );
mMinimumScaleIconLabel->setPixmap( QgsApplication::getThemePixmap( "/mActionZoomOut.svg" ) );
connect( buttonBox->button( QDialogButtonBox::Apply ), SIGNAL( clicked() ), this, SLOT( apply() ) );
connect( this, SIGNAL( accepted() ), this, SLOT( apply() ) );
@ -360,7 +359,7 @@ void QgsVectorLayerProperties::syncToLayer( void )
"layer is shown here. To enter or modify the query, click on the Query Builder button" ) );
//see if we are dealing with a pg layer here
grpSubset->setEnabled( true );
mSubsetGroupBox->setEnabled( true );
txtSubsetSQL->setText( layer->subsetString() );
// if the user is allowed to type an adhoc query, the app will crash if the query
// is bad. For this reason, the sql box is disabled and the query must be built
@ -386,16 +385,9 @@ void QgsVectorLayerProperties::syncToLayer( void )
setDisplayField( layer-> displayField() );
// set up the scale based layer visibility stuff....
chkUseScaleDependentRendering->setChecked( layer->hasScaleBasedVisibility() );
bool projectScales = QgsProject::instance()->readBoolEntry( "Scales", "/useProjectScales" );
if ( projectScales )
{
QStringList scalesList = QgsProject::instance()->readListEntry( "Scales", "/ScalesList" );
cbMinimumScale->updateScales( scalesList );
cbMaximumScale->updateScales( scalesList );
}
cbMinimumScale->setScale( 1.0 / layer->minimumScale() );
cbMaximumScale->setScale( 1.0 / layer->maximumScale() );
mScaleVisibilityWidget->setFromLayer( layer );
mScaleVisibilityGroupBox->setChecked( layer->hasScaleBasedVisibility() );
mScaleVisibilityWidget->setMapCanvas( QgisApp::instance()->mapCanvas() );
// get simplify drawing configuration
const QgsVectorSimplifyMethod& simplifyMethod = layer->simplifyMethod();
@ -491,7 +483,7 @@ void QgsVectorLayerProperties::apply()
//
// Set up sql subset query if applicable
//
grpSubset->setEnabled( true );
mSubsetGroupBox->setEnabled( true );
if ( txtSubsetSQL->toPlainText() != layer->subsetString() )
{
@ -501,9 +493,9 @@ void QgsVectorLayerProperties::apply()
}
// set up the scale based layer visibility stuff....
layer->toggleScaleBasedVisibility( chkUseScaleDependentRendering->isChecked() );
layer->setMinimumScale( 1.0 / cbMinimumScale->scale() );
layer->setMaximumScale( 1.0 / cbMaximumScale->scale() );
layer->toggleScaleBasedVisibility( mScaleVisibilityGroupBox->isChecked() );
layer->setMinimumScale( 1.0 / mScaleVisibilityWidget->minimumScale() );
layer->setMaximumScale( 1.0 / mScaleVisibilityWidget->maximumScale() );
// provider-specific options
if ( layer->dataProvider() )
@ -1110,16 +1102,6 @@ void QgsVectorLayerProperties::enableLabelOptions( bool theFlag )
labelOptionsFrame->setEnabled( theFlag );
}
void QgsVectorLayerProperties::on_mMinimumScaleSetCurrentPushButton_clicked()
{
cbMinimumScale->setScale( 1.0 / QgisApp::instance()->mapCanvas()->mapSettings().scale() );
}
void QgsVectorLayerProperties::on_mMaximumScaleSetCurrentPushButton_clicked()
{
cbMaximumScale->setScale( 1.0 / QgisApp::instance()->mapCanvas()->mapSettings().scale() );
}
void QgsVectorLayerProperties::on_mSimplifyDrawingGroupBox_toggled( bool checked )
{
if ( !( layer->dataProvider()->capabilities() & QgsVectorDataProvider::SimplifyGeometries ) )

View File

@ -20,6 +20,7 @@
#define QGSVECTORLAYERPROPERTIES
#include "qgsoptionsdialogbase.h"
#include "qgsscalevisibilitywidget.h"
#include "ui_qgsvectorlayerpropertiesbase.h"
#include "qgisgui.h"
#include "qgsaddattrdialog.h"
@ -116,9 +117,6 @@ class APP_EXPORT QgsVectorLayerProperties : public QgsOptionsDialogBase, private
void on_mButtonAddJoin_clicked();
void on_mButtonRemoveJoin_clicked();
void on_mMinimumScaleSetCurrentPushButton_clicked();
void on_mMaximumScaleSetCurrentPushButton_clicked();
void on_mSimplifyDrawingGroupBox_toggled( bool checked );
signals:

View File

@ -0,0 +1,103 @@
########################################################
# Files
SET (QGIS_CUSTOMWIDGETS_SRCS
qgiscustomwidgets.cpp
qgscollapsiblegroupboxplugin.cpp
qgsscalevisibilitywidgetplugin.cpp
)
SET (QGIS_CUSTOMWIDGETS_MOC_HDRS
qgiscustomwidgets.h
qgscollapsiblegroupboxplugin.h
qgsscalevisibilitywidgetplugin.h
)
QT4_WRAP_CPP(QGIS_CUSTOMWIDGETS_MOC_SRCS ${QGIS_CUSTOMWIDGETS_MOC_HDRS})
IF(UNIX)
SET_SOURCE_FILES_PROPERTIES(${QGIS_CUSTOMWIDGETS_MOC_SRCS} PROPERTIES COMPILE_FLAGS "-Wno-deprecated-declarations" )
ENDIF(UNIX)
SET(QGIS_CUSTOMWIDGETS_HDRS
qgiscustomwidgets.h
qgscollapsiblegroupboxplugin.h
qgsscalevisibilitywidgetplugin.h
)
SET(QGIS_CUSTOMWIDGETS_UI_HDRS
${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgsscalevisibilitygroupbox.h
)
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/../core/
${CMAKE_CURRENT_SOURCE_DIR}/../gui/
${CMAKE_CURRENT_BINARY_DIR}/../ui
)
IF (WIN32)
IF (MSVC)
ADD_DEFINITIONS("-DCUSTOMWIDGETS_EXPORT=${DLLEXPORT}")
ELSE (MSVC)
ADD_DEFINITIONS("-UCUSTOMWIDGETS_EXPORT \"-DCUSTOMWIDGETS_EXPORT=${DLLEXPORT}\"")
ENDIF (MSVC)
ENDIF (WIN32)
#############################################################
# qgis_customwidgets library
ADD_LIBRARY(qgis_customwidgets SHARED ${QGIS_CUSTOMWIDGETS_SRCS} ${QGIS_CUSTOMWIDGETS_MOC_SRCS} ${QGIS_CUSTOMWIDGETS_HDRS})
IF(NOT APPLE)
INSTALL(FILES ${QGIS_CUSTOMWIDGETS_HDRS} DESTINATION ${QGIS_INCLUDE_DIR})
ELSE(NOT APPLE)
SET_TARGET_PROPERTIES(qgis_customwidgets PROPERTIES
# no moc headers, messes up PROPERTIES syntax
CLEAN_DIRECT_OUTPUT 1
FRAMEWORK 1
FRAMEWORK_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}"
MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_SOURCE_DIR}/mac/framework.info.plist.in"
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${COMPLETE_VERSION}
MACOSX_FRAMEWORK_IDENTIFIER org.qgis.qgis2_customwidgets
BUILD_WITH_INSTALL_RPATH TRUE
PUBLIC_HEADER "${QGIS_CUSTOMWIDGETS_HDRS}"
LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}"
)
ENDIF(NOT APPLE)
#generate unversioned libs for android
IF (NOT ANDROID)
SET_TARGET_PROPERTIES(qgis_customwidgets PROPERTIES
VERSION ${COMPLETE_VERSION}
SOVERSION ${COMPLETE_VERSION}
)
ENDIF (NOT ANDROID)
# make sure that UI files will be processed first
ADD_DEPENDENCIES(qgis_customwidgets ui)
TARGET_LINK_LIBRARIES(qgis_customwidgets qgis_gui)
# install
INSTALL(TARGETS qgis_customwidgets
LIBRARY DESTINATION ${QGIS_CUSTOMWIDGETS_DIR}
PUBLIC_HEADER DESTINATION ${QGIS_INCLUDE_DIR})
# ui headers to install, don't exist at target definition time, install manually
IF (APPLE)
INSTALL(FILES ${QGIS_CUSTOMWIDGETS_UI_HDRS} DESTINATION ${QGIS_FW_SUBDIR}/qgis_gui.framework/Headers)
ELSE (APPLE)
INSTALL(FILES ${QGIS_CUSTOMWIDGETS_UI_HDRS} DESTINATION ${QGIS_INCLUDE_DIR})
ENDIF (APPLE)
# Mac dev frameworks
#IF (APPLE AND QGIS_MACAPP_INSTALL_DEV)
# INSTALL(TARGETS qgis_customwidgets FRAMEWORK DESTINATION ${QGIS_MACAPP_DEV_PREFIX})
# INSTALL(CODE "EXECUTE_PROCESS(COMMAND install_name_tool -id \"${QGIS_MACAPP_DEV_PREFIX}/qgis_customwidgets.framework/Versions/${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}/qgis_customwidgets\" \"$ENV{DESTDIR}${QGIS_MACAPP_DEV_PREFIX}/qgis_customwidgets.framework/qgis_customwidgets\")")
# INSTALL(CODE "EXECUTE_PROCESS(COMMAND install_name_tool -change \"${CMAKE_INSTALL_NAME_DIR}/qgis_core.framework/Versions/${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}/qgis_core\" \"${QGIS_MACAPP_DEV_PREFIX}/qgis_core.framework/Versions/${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}/qgis_core\" \"$ENV{DESTDIR}${QGIS_MACAPP_DEV_PREFIX}/qgis_customwidgets.framework/qgis_customwidgets\")")
#ENDIF (APPLE AND QGIS_MACAPP_INSTALL_DEV)

View File

@ -0,0 +1,36 @@
/***************************************************************************
qgscustomwidgets.cpp
--------------------------------------
Date : 25.04.2014
Copyright : (C) 2014 Denis Rouzaud
Email : denis.rouzaud@gmail.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. *
* *
***************************************************************************/
#include "qplugin.h"
#include "qgiscustomwidgets.h"
#include "qgscollapsiblegroupboxplugin.h"
#include "qgsscalevisibilitywidgetplugin.h"
QgisCustomWidgets::QgisCustomWidgets( QObject *parent )
: QObject( parent )
{
mWidgets.append( new QgsCollapsibleGroupBoxPlugin );
mWidgets.append( new QgsScaleVisibilityWidgetPlugin );
}
QList<QDesignerCustomWidgetInterface*> QgisCustomWidgets::customWidgets() const
{
return mWidgets;
}
Q_EXPORT_PLUGIN2( customwidgetsplugin, QgisCustomWidgets )

View File

@ -0,0 +1,38 @@
/***************************************************************************
qgscustomwidgets.h
--------------------------------------
Date : 25.04.2014
Copyright : (C) 2014 Denis Rouzaud
Email : denis.rouzaud@gmail.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 QGISCUSTOMWIDGETS_H
#define QGISCUSTOMWIDGETS_H
#include <QDesignerCustomWidgetCollectionInterface>
#include <qplugin.h>
class QgisCustomWidgets : public QObject, public QDesignerCustomWidgetCollectionInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetCollectionInterface )
public:
explicit QgisCustomWidgets( QObject *parent = 0 );
virtual QList<QDesignerCustomWidgetInterface*> customWidgets() const;
static QString groupName() {return "QGIS custom widgets";}
private:
QList<QDesignerCustomWidgetInterface*> mWidgets;
};
#endif // QGISCUSTOMWIDGETS_H

View File

@ -0,0 +1,105 @@
/***************************************************************************
qgscollapsiblegroupboxplugin.cpp
--------------------------------------
Date : 25.04.2014
Copyright : (C) 2014 Denis Rouzaud
Email : denis.rouzaud@gmail.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. *
* *
***************************************************************************/
#include "qgiscustomwidgets.h"
#include "qgscollapsiblegroupbox.h"
#include "qgscollapsiblegroupboxplugin.h"
QgsCollapsibleGroupBoxPlugin::QgsCollapsibleGroupBoxPlugin( QObject *parent )
: QObject( parent )
, mInitialized( false )
{
}
QString QgsCollapsibleGroupBoxPlugin::name() const
{
return "QgsCollapsibleGroupBox";
}
QString QgsCollapsibleGroupBoxPlugin::group() const
{
return QgisCustomWidgets::groupName();
}
QString QgsCollapsibleGroupBoxPlugin::includeFile() const
{
return "qgscollapsiblegroupbox.h";
}
QIcon QgsCollapsibleGroupBoxPlugin::icon() const
{
return QIcon();
}
bool QgsCollapsibleGroupBoxPlugin::isContainer() const
{
return true;
}
QWidget *QgsCollapsibleGroupBoxPlugin::createWidget( QWidget *parent )
{
return new QgsCollapsibleGroupBox( parent );
}
bool QgsCollapsibleGroupBoxPlugin::isInitialized() const
{
return mInitialized;
}
void QgsCollapsibleGroupBoxPlugin::initialize( QDesignerFormEditorInterface *core )
{
Q_UNUSED( core );
if ( mInitialized )
return;
mInitialized = true;
}
QString QgsCollapsibleGroupBoxPlugin::toolTip() const
{
return "A collapsible group box";
}
QString QgsCollapsibleGroupBoxPlugin::whatsThis() const
{
return "A collapsible group box with save state capability";
}
QString QgsCollapsibleGroupBoxPlugin::domXml() const
{
return QString( "<ui language=\"c++\">\n"
" <widget class=\"%1\" name=\"mGroupBox\">\n"
" <property name=\"geometry\">\n"
" <rect>\n"
" <x>0</x>\n"
" <y>0</y>\n"
" <width>300</width>\n"
" <height>100</height>\n"
" </rect>\n"
" </property>\n"
" <property name=\"toolTip\" >\n"
" <string>%2</string>\n"
" </property>\n"
" <property name=\"whatsThis\" >\n"
" <string>%3.</string>\n"
" </property>\n"
" </widget>\n"
"</ui>\n" )
.arg( name() )
.arg( toolTip() )
.arg( whatsThis() );
}

View File

@ -0,0 +1,46 @@
/***************************************************************************
qgscollapsiblegroupboxplugin.h
--------------------------------------
Date : 25.04.2014
Copyright : (C) 2014 Denis Rouzaud
Email : denis.rouzaud@gmail.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 QGSCOLLAPSIBLEGROUPBOXPLUGIN_H
#define QGSCOLLAPSIBLEGROUPBOXPLUGIN_H
#include <QDesignerCustomWidgetInterface>
class CUSTOMWIDGETS_EXPORT QgsCollapsibleGroupBoxPlugin : public QObject, public QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
explicit QgsCollapsibleGroupBoxPlugin( QObject *parent = 0 );
private:
bool mInitialized;
// QDesignerCustomWidgetInterface interface
public:
QString name() const;
QString group() const;
QString includeFile() const;
QIcon icon() const;
bool isContainer() const;
QWidget *createWidget( QWidget *parent );
bool isInitialized() const;
void initialize( QDesignerFormEditorInterface *core );
QString toolTip() const;
QString whatsThis() const;
QString domXml() const;
};
#endif // QGSCOLLAPSIBLEGROUPBOXPLUGIN_H

View File

@ -0,0 +1,105 @@
/***************************************************************************
qgsscalevisibilitywidgetplugin.cpp
--------------------------------------
Date : 25.04.2014
Copyright : (C) 2014 Denis Rouzaud
Email : denis.rouzaud@gmail.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. *
* *
***************************************************************************/
#include "qgiscustomwidgets.h"
#include "qgsscalevisibilitywidgetplugin.h"
#include "qgsscalevisibilitywidget.h"
QgsScaleVisibilityWidgetPlugin::QgsScaleVisibilityWidgetPlugin( QObject *parent )
: QObject( parent )
, mInitialized( false )
{
}
QString QgsScaleVisibilityWidgetPlugin::name() const
{
return "QgsScaleVisibilityWidget";
}
QString QgsScaleVisibilityWidgetPlugin::group() const
{
return QgisCustomWidgets::groupName();
}
QString QgsScaleVisibilityWidgetPlugin::includeFile() const
{
return "qgsscalevisibilitywidget.h";
}
QIcon QgsScaleVisibilityWidgetPlugin::icon() const
{
return QIcon();
}
bool QgsScaleVisibilityWidgetPlugin::isContainer() const
{
return false;
}
QWidget *QgsScaleVisibilityWidgetPlugin::createWidget( QWidget *parent )
{
return new QgsScaleVisibilityWidget( parent );
}
bool QgsScaleVisibilityWidgetPlugin::isInitialized() const
{
return mInitialized;
}
void QgsScaleVisibilityWidgetPlugin::initialize( QDesignerFormEditorInterface *core )
{
Q_UNUSED( core );
if ( mInitialized )
return;
mInitialized = true;
}
QString QgsScaleVisibilityWidgetPlugin::toolTip() const
{
return "A widget to define the scale visibility";
}
QString QgsScaleVisibilityWidgetPlugin::whatsThis() const
{
return "A widget to define the scale visibility";
}
QString QgsScaleVisibilityWidgetPlugin::domXml() const
{
return QString( "<ui language=\"c++\">\n"
" <widget class=\"%1\" name=\"mScaleVisibilityWidget\">\n"
" <property name=\"geometry\">\n"
" <rect>\n"
" <x>0</x>\n"
" <y>0</y>\n"
" <width>300</width>\n"
" <height>100</height>\n"
" </rect>\n"
" </property>\n"
" <property name=\"toolTip\" >\n"
" <string>%2</string>\n"
" </property>\n"
" <property name=\"whatsThis\" >\n"
" <string>%3.</string>\n"
" </property>\n"
" </widget>\n"
"</ui>\n" )
.arg( name() )
.arg( toolTip() )
.arg( whatsThis() );
}

View File

@ -0,0 +1,46 @@
/***************************************************************************
qgsscalevisibilitywidgetplugin.h
--------------------------------------
Date : 25.04.2014
Copyright : (C) 2014 Denis Rouzaud
Email : denis.rouzaud@gmail.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 QGSSCALEVISIBILITYWIDGETPLUGIN_H
#define QGSSCALEVISIBILITYWIDGETPLUGIN_H
#include <QDesignerCustomWidgetInterface>
class CUSTOMWIDGETS_EXPORT QgsScaleVisibilityWidgetPlugin : public QObject, public QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
explicit QgsScaleVisibilityWidgetPlugin( QObject *parent = 0 );
private:
bool mInitialized;
// QDesignerCustomWidgetInterface interface
public:
QString name() const;
QString group() const;
QString includeFile() const;
QIcon icon() const;
bool isContainer() const;
QWidget *createWidget( QWidget *parent );
bool isInitialized() const;
void initialize( QDesignerFormEditorInterface *core );
QString toolTip() const;
QString whatsThis() const;
QString domXml() const;
};
#endif // QGSSCALEVISIBILITYWIDGETPLUGIN_H

View File

@ -138,6 +138,7 @@ qgsrelationeditor.cpp
qgsrelationmanagerdialog.cpp
qgsrubberband.cpp
qgsscalecombobox.cpp
qgsscalevisibilitywidget.cpp
qgssearchquerybuilder.cpp
qgssublayersdialog.cpp
qgssvgannotationitem.cpp
@ -276,6 +277,7 @@ qgsrelationadddlg.h
qgsrelationeditor.h
qgsrelationmanagerdialog.h
qgsscalecombobox.h
qgsscalevisibilitywidget.h
qgssearchquerybuilder.h
qgssublayersdialog.h
qgsunitselectionwidget.h
@ -340,6 +342,7 @@ qgsprojectionselector.h
qgsrelationeditor.h
qgsrubberband.h
qgsscalecombobox.h
qgsscalevisibilitywidget.h
qgssearchquerybuilder.h
qgssublayersdialog.h
qgsvectorlayertools.h

View File

@ -0,0 +1,92 @@
/***************************************************************************
qgsscalevisibilitywidget.cpp
--------------------------------------
Date : 25.04.2014
Copyright : (C) 2014 Denis Rouzaud
Email : denis.rouzaud@gmail.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. *
* *
***************************************************************************/
#include "qgsscalevisibilitywidget.h"
#include "qgsapplication.h"
#include "qgsproject.h"
QgsScaleVisibilityWidget::QgsScaleVisibilityWidget( QWidget *parent )
: QWidget( parent )
, mCanvas( 0 )
{
setupUi( this );
mMaximumScaleIconLabel->setPixmap( QgsApplication::getThemePixmap( "/mActionZoomIn.svg" ) );
mMinimumScaleIconLabel->setPixmap( QgsApplication::getThemePixmap( "/mActionZoomOut.svg" ) );
mMinimumScaleSetCurrentPushButton->hide();
mMaximumScaleSetCurrentPushButton->hide();
}
QgsScaleVisibilityWidget::~QgsScaleVisibilityWidget()
{
}
void QgsScaleVisibilityWidget::showEvent( QShowEvent * )
{
bool projectScales = QgsProject::instance()->readBoolEntry( "Scales", "/useProjectScales" );
if ( projectScales )
{
QStringList scalesList = QgsProject::instance()->readListEntry( "Scales", "/ScalesList" );
mMinimumScaleComboBox->updateScales( scalesList );
mMaximumScaleComboBox->updateScales( scalesList );
}
}
void QgsScaleVisibilityWidget::setMapCanvas( QgsMapCanvas *mapCanvas )
{
if ( !mapCanvas )
return;
mCanvas = mapCanvas;
mMinimumScaleSetCurrentPushButton->show();
mMaximumScaleSetCurrentPushButton->show();
}
void QgsScaleVisibilityWidget::setMinimumScale( double scale )
{
mMinimumScaleComboBox->setScale( scale );
}
double QgsScaleVisibilityWidget::minimumScale()
{
return mMinimumScaleComboBox->scale();
}
void QgsScaleVisibilityWidget::setMaximumScale( double scale )
{
mMaximumScaleComboBox->setScale( scale );
}
double QgsScaleVisibilityWidget::maximumScale()
{
return mMaximumScaleComboBox->scale();
}
void QgsScaleVisibilityWidget::on_mMinimumScaleSetCurrentPushButton_clicked()
{
mMinimumScaleComboBox->setScale( 1.0 / mCanvas->mapSettings().scale() );
}
void QgsScaleVisibilityWidget::on_mMaximumScaleSetCurrentPushButton_clicked()
{
mMaximumScaleComboBox->setScale( 1.0 / mCanvas->mapSettings().scale() );
}
void QgsScaleVisibilityWidget::setFromLayer( QgsMapLayer *layer )
{
mMinimumScaleComboBox->setScale( 1.0 / layer->minimumScale() );
mMaximumScaleComboBox->setScale( 1.0 / layer->maximumScale() );
}

View File

@ -0,0 +1,60 @@
/***************************************************************************
qgsscalevisibilitywidget.h
--------------------------------------
Date : 25.04.2014
Copyright : (C) 2014 Denis Rouzaud
Email : denis.rouzaud@gmail.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 QGSSCALEVISIBILITYWIDGET_H
#define QGSSCALEVISIBILITYWIDGET_H
#include "ui_qgsscalevisibilitywidget.h"
#include "qgscollapsiblegroupbox.h"
#include "qgsmaplayer.h"
#include "qgsmapcanvas.h"
class GUI_EXPORT QgsScaleVisibilityWidget : public QWidget, private Ui::QgsScaleVisibilityWidget
{
Q_OBJECT
public:
explicit QgsScaleVisibilityWidget( QWidget *parent = 0 );
~QgsScaleVisibilityWidget();
void showEvent( QShowEvent * );
//! set the map canvas which will be used for the current scale buttons
/**
* @brief setMapCanvas set the map canvas which will be used for the current scale buttons
* if not set, the buttons are hidden.
*/
void setMapCanvas( QgsMapCanvas* mapCanvas );
public slots:
void setMinimumScale( double scale );
double minimumScale();
void setMaximumScale( double scale );
double maximumScale();
void setFromLayer( QgsMapLayer* layer );
private slots:
void on_mMinimumScaleSetCurrentPushButton_clicked();
void on_mMaximumScaleSetCurrentPushButton_clicked();
private:
//! pointer to the map canvas used for current buttons.
QgsMapCanvas* mCanvas;
};
#endif // QGSSCALEVISIBILITYWIDGET_H

View File

@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsScaleVisibilityWidget</class>
<widget class="QWidget" name="QgsScaleVisibilityWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>423</width>
<height>87</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout" columnstretch="0,0,3,0,0,3">
<item row="0" column="5">
<widget class="QgsScaleComboBox" name="mMaximumScaleComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="textLabel1_2_2_2">
<property name="toolTip">
<string>Minimum scale, i.e. maximum scale denominator. This limit is exclusive, that means the layer will not be displayed on this scale.</string>
</property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:0.75em;&quot;&gt;Minimum&lt;br&gt;(exclusive)&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QPushButton" name="mMaximumScaleSetCurrentPushButton">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Current</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QgsScaleComboBox" name="mMinimumScaleComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QLabel" name="mMinimumScaleIconLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>22</width>
<height>22</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../images/images.qrc">:/images/themes/default/mActionZoomOut.svg</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="mMaximumScaleIconLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>22</width>
<height>22</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../images/images.qrc">:/images/themes/default/mActionZoomIn.svg</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="mMinimumScaleSetCurrentPushButton">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Current</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="textLabel1_3">
<property name="toolTip">
<string>Maximum scale, i.e. minimum scale denominator. This limit is inclusive, that means the layer will be displayed on this scale.</string>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:0.75em;&quot;&gt;Maximum&lt;br&gt;(inclusive)&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>QgsScaleComboBox</class>
<extends>QComboBox</extends>
<header>qgsscalecombobox.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="../../images/images.qrc"/>
</resources>
<connections/>
</ui>

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>929</width>
<height>573</height>
<width>904</width>
<height>588</height>
</rect>
</property>
<property name="minimumSize">
@ -246,7 +246,7 @@
</sizepolicy>
</property>
<property name="currentIndex">
<number>7</number>
<number>0</number>
</property>
<widget class="QWidget" name="mOptsPage_General">
<layout class="QVBoxLayout" name="verticalLayout_14">
@ -266,8 +266,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>383</width>
<height>504</height>
<width>730</width>
<height>502</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_13">
@ -279,7 +279,7 @@
<property name="title">
<string>Layer info</string>
</property>
<property name="syncGroup" stdset="0">
<property name="syncGroup">
<string notr="true">vectorgeneral</string>
</property>
<layout class="QGridLayout" name="gridLayout">
@ -374,7 +374,10 @@
<property name="title">
<string>Coordinate reference system</string>
</property>
<property name="syncGroup" stdset="0">
<property name="checkable">
<bool>false</bool>
</property>
<property name="syncGroup">
<string notr="true">vectorgeneral</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_27">
@ -453,148 +456,21 @@
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBox" name="chkUseScaleDependentRendering">
<widget class="QgsCollapsibleGroupBox" name="mScaleVisibilityGroupBox">
<property name="title">
<string>Scale dependent visibility</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">vectorgeneral</string>
</property>
<layout class="QGridLayout" name="_5">
<property name="verticalSpacing">
<number>6</number>
</property>
<property name="margin">
<number>11</number>
</property>
<item row="0" column="4">
<widget class="QLabel" name="textLabel1_2_2_2">
<property name="toolTip">
<string>Minimum scale, i.e. maximum scale denominator. This limit is exclusive, that means the layer will not be displayed on this scale.</string>
</property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:0.75em;&quot;&gt;Minimum&lt;br&gt;(exclusive)&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="0" column="6">
<widget class="QgsScaleComboBox" name="cbMaximumScale">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="6">
<widget class="QPushButton" name="mMaximumScaleSetCurrentPushButton">
<property name="text">
<string>Current</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="mMinimumScaleSetCurrentPushButton">
<property name="text">
<string>Current</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QgsScaleComboBox" name="cbMinimumScale">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<layout class="QGridLayout" name="gridLayout_6">
<item row="0" column="0">
<widget class="QLabel" name="textLabel1_3">
<widget class="QgsScaleVisibilityWidget" name="mScaleVisibilityWidget">
<property name="toolTip">
<string>Maximum scale, i.e. minimum scale denominator. This limit is inclusive, that means the layer will be displayed on this scale.</string>
<string>A widget to define the scale visibility</string>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:0.75em;&quot;&gt;Maximum&lt;br&gt;(inclusive)&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="mMaximumScaleIconLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>22</width>
<height>22</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../images/images.qrc">:/images/themes/default/mActionZoomIn.svg</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QLabel" name="mMinimumScaleIconLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>22</width>
<height>22</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../images/images.qrc">:/images/themes/default/mActionZoomOut.svg</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
<property name="whatsThis">
<string>A widget to define the scale visibility.</string>
</property>
</widget>
</item>
@ -602,7 +478,7 @@
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBox" name="grpSubset">
<widget class="QgsCollapsibleGroupBox" name="mSubsetGroupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
@ -612,23 +488,11 @@
<property name="title">
<string>Feature subset</string>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">vectorgeneral</string>
</property>
<layout class="QGridLayout">
<property name="margin">
<number>11</number>
</property>
<item row="0" column="0" colspan="2">
<widget class="QTextEdit" name="txtSubsetSQL">
<property name="enabled">
<bool>false</bool>
</property>
<property name="acceptDrops">
<bool>false</bool>
</property>
<property name="acceptRichText">
<bool>false</bool>
<layout class="QGridLayout" name="gridLayout_4">
<item row="1" column="1">
<widget class="QPushButton" name="pbnQueryBuilder">
<property name="text">
<string>Query Builder</string>
</property>
</widget>
</item>
@ -648,14 +512,23 @@
</property>
</spacer>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="pbnQueryBuilder">
<property name="text">
<string>Query Builder</string>
<item row="0" column="0" colspan="2">
<widget class="QTextEdit" name="txtSubsetSQL">
<property name="enabled">
<bool>false</bool>
</property>
<property name="acceptDrops">
<bool>false</bool>
</property>
<property name="acceptRichText">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
<zorder>txtSubsetSQL</zorder>
<zorder>pbnQueryBuilder</zorder>
<zorder>collapseButton</zorder>
</widget>
</item>
<item>
@ -769,8 +642,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>101</width>
<height>35</height>
<width>121</width>
<height>38</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_28">
@ -875,8 +748,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>574</width>
<height>144</height>
<width>702</width>
<height>171</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_32">
@ -1018,8 +891,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>768</width>
<height>506</height>
<width>476</width>
<height>182</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_26">
@ -1179,8 +1052,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>768</width>
<height>506</height>
<width>100</width>
<height>30</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_21">
@ -1227,8 +1100,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>768</width>
<height>506</height>
<width>90</width>
<height>113</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_23">
@ -1325,8 +1198,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>768</width>
<height>506</height>
<width>100</width>
<height>30</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_24">
@ -1367,8 +1240,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>751</width>
<height>552</height>
<width>393</width>
<height>608</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_3">
@ -1377,7 +1250,7 @@
<property name="title">
<string>Description</string>
</property>
<property name="syncGroup" stdset="0">
<property name="syncGroup">
<string notr="true">vectormeta</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
@ -1472,7 +1345,7 @@
<property name="title">
<string>Attribution</string>
</property>
<property name="syncGroup" stdset="0">
<property name="syncGroup">
<string notr="true">vectormeta</string>
</property>
<layout class="QGridLayout" name="gridLayout_7">
@ -1504,7 +1377,7 @@
<property name="title">
<string>MetadataUrl</string>
</property>
<property name="syncGroup" stdset="0">
<property name="syncGroup">
<string notr="true">vectormeta</string>
</property>
<layout class="QGridLayout" name="gridLayout_9">
@ -1659,7 +1532,7 @@
<property name="title">
<string>Properties</string>
</property>
<property name="syncGroup" stdset="0">
<property name="syncGroup">
<string notr="true">vectormeta</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_9">
@ -1767,17 +1640,22 @@
</layout>
</widget>
<customwidgets>
<customwidget>
<class>QgsScaleComboBox</class>
<extends>QComboBox</extends>
<header>qgsscalecombobox.h</header>
</customwidget>
<customwidget>
<class>QgsCollapsibleGroupBox</class>
<extends>QGroupBox</extends>
<header>qgscollapsiblegroupbox.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>QgsScaleVisibilityWidget</class>
<extends>QWidget</extends>
<header>qgsscalevisibilitywidget.h</header>
</customwidget>
<customwidget>
<class>QgsScaleComboBox</class>
<extends>QComboBox</extends>
<header>qgsscalecombobox.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="../../images/images.qrc"/>