Start porting item properties widget

This commit is contained in:
Nyall Dawson 2017-10-10 13:47:01 +10:00
parent d3836e502a
commit b2414d8d8d
15 changed files with 4629 additions and 7 deletions

View File

@ -53,6 +53,12 @@ class QgsLayoutItem : QgsLayoutObject, QGraphicsRectItem, QgsLayoutUndoObjectInt
enum UndoCommand
{
UndoIncrementalMove,
UndoStrokeColor,
UndoStrokeWidth,
UndoBackgroundColor,
UndoOpacity,
UndoSetId,
UndoRotation,
};
explicit QgsLayoutItem( QgsLayout *layout, bool manageZValue = true );

View File

@ -166,6 +166,13 @@ class QgsLayoutObject: QObject, QgsExpressionContextGenerator
Refreshes the object, causing a recalculation of any property overrides.
%End
signals:
void changed();
%Docstring
Emitted when the object's properties change.
%End
protected:
bool writeObjectPropertiesToElement( QDomElement &parentElement, QDomDocument &document, const QgsReadWriteContext &context ) const;

View File

@ -97,6 +97,43 @@ class QgsLayoutItemBaseWidget: QgsPanelWidget
};
class QgsLayoutItemPropertiesWidget: QWidget
{
%Docstring
A widget for controlling the common properties of layout items (e.g. position and size, background, stroke, frame).
This widget can be embedded into other layout item widgets.
.. versionadded:: 3.0
%End
%TypeHeaderCode
#include "qgslayoutitemwidget.h"
%End
public:
QgsLayoutItemPropertiesWidget( QWidget *parent, QgsLayoutItem *item );
QgsLayoutItem::ReferencePoint positionMode() const;
%Docstring
:rtype: QgsLayoutItem.ReferencePoint
%End
void showBackgroundGroup( bool showGroup );
void showFrameGroup( bool showGroup );
protected slots:
void initializeDataDefinedButtons();
%Docstring
Initializes data defined buttons to current atlas coverage layer
%End
void populateDataDefinedButtons();
%Docstring
Sets data defined button state to match item
%End
};
/************************************************************************
* This file has been generated automatically from *
* *

View File

@ -178,6 +178,7 @@ SET(QGIS_APP_SRCS
layout/qgslayoutdesignerdialog.cpp
layout/qgslayoutguidewidget.cpp
layout/qgslayoutappmenuprovider.cpp
layout/qgslayoutmapwidget.cpp
layout/qgslayoutpagepropertieswidget.cpp
layout/qgslayoutpropertieswidget.cpp
@ -373,6 +374,7 @@ SET (QGIS_APP_MOC_HDRS
layout/qgslayoutappmenuprovider.h
layout/qgslayoutdesignerdialog.h
layout/qgslayoutguidewidget.h
layout/qgslayoutmapwidget.h
layout/qgslayoutpagepropertieswidget.h
layout/qgslayoutpropertieswidget.h

View File

@ -18,6 +18,8 @@
#include "qgslayoutitemguiregistry.h"
#include "qgslayoutitemregistry.h"
#include "qgslayoutviewrubberband.h"
#include "qgslayoutmapwidget.h"
#include "qgslayoutitemmap.h"
void QgsLayoutAppUtils::registerGuiForKnownItemTypes()
{
@ -40,7 +42,11 @@ void QgsLayoutAppUtils::registerGuiForKnownItemTypes()
registry->addLayoutItemGuiMetadata( new QgsLayoutItemGuiMetadata( QgsLayoutItemRegistry::LayoutItem + 1002, QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddLabel.svg" ) ), nullptr, createRubberBand ) );
registry->addLayoutItemGuiMetadata( new QgsLayoutItemGuiMetadata( QgsLayoutItemRegistry::LayoutMap, QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddMap.svg" ) ), nullptr, createRubberBand ) );
registry->addLayoutItemGuiMetadata( new QgsLayoutItemGuiMetadata( QgsLayoutItemRegistry::LayoutMap, QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddMap.svg" ) ),
[ = ]( QgsLayoutItem * item )->QgsLayoutItemBaseWidget *
{
return new QgsLayoutMapWidget( qobject_cast< QgsLayoutItemMap * >( item ) );
}, createRubberBand ) );
registry->addLayoutItemGuiMetadata( new QgsLayoutItemGuiMetadata( QgsLayoutItemRegistry::LayoutRectangle, QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddBasicRectangle.svg" ) ), nullptr, createRubberBand, QStringLiteral( "shapes" ) ) );
registry->addLayoutItemGuiMetadata( new QgsLayoutItemGuiMetadata( QgsLayoutItemRegistry::LayoutEllipse, QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddBasicCircle.svg" ) ), nullptr, createEllipseBand, QStringLiteral( "shapes" ) ) );

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,176 @@
/***************************************************************************
qgslayoutmapwidget.h
----------------------
begin : October 2017
copyright : (C) 2017 by Nyall Dawson
email : nyall dot dawson 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 QGSLAYOUTMAPWIDGET_H
#define QGSLAYOUTMAPWIDGET_H
#include "ui_qgslayoutmapwidgetbase.h"
#include "qgslayoutitemwidget.h"
class QgsMapLayer;
class QgsLayoutItemMap;
class QgsLayoutMapGrid;
class QgsLayoutMapOverview;
/**
* \ingroup app
* Input widget for the configuration of QgsLayoutItemMap
*/
class QgsLayoutMapWidget: public QgsLayoutItemBaseWidget, private Ui::QgsLayoutMapWidgetBase
{
Q_OBJECT
public:
explicit QgsLayoutMapWidget( QgsLayoutItemMap *item );
public slots:
void mScaleLineEdit_editingFinished();
void mSetToMapCanvasExtentButton_clicked();
void mViewExtentInCanvasButton_clicked();
void mUpdatePreviewButton_clicked();
void mFollowVisibilityPresetCheckBox_stateChanged( int state );
void mKeepLayerListCheckBox_stateChanged( int state );
void mKeepLayerStylesCheckBox_stateChanged( int state );
void mDrawCanvasItemsCheckBox_stateChanged( int state );
void overviewMapChanged( QgsComposerItem *item );
void mOverviewFrameStyleButton_clicked();
void mOverviewBlendModeComboBox_currentIndexChanged( int index );
void mOverviewInvertCheckbox_toggled( bool state );
void mOverviewCenterCheckbox_toggled( bool state );
void mXMinLineEdit_editingFinished();
void mXMaxLineEdit_editingFinished();
void mYMinLineEdit_editingFinished();
void mYMaxLineEdit_editingFinished();
void mAtlasMarginRadio_toggled( bool checked );
void mAtlasCheckBox_toggled( bool checked );
void mAtlasMarginSpinBox_valueChanged( int value );
void mAtlasFixedScaleRadio_toggled( bool checked );
void mAtlasPredefinedScaleRadio_toggled( bool checked );
void mAddGridPushButton_clicked();
void mRemoveGridPushButton_clicked();
void mGridUpButton_clicked();
void mGridDownButton_clicked();
QgsLayoutMapGrid *currentGrid();
void mDrawGridCheckBox_toggled( bool state );
void mGridListWidget_currentItemChanged( QListWidgetItem *current, QListWidgetItem *previous );
void mGridListWidget_itemChanged( QListWidgetItem *item );
void mGridPropertiesButton_clicked();
//overviews
void mAddOverviewPushButton_clicked();
void mRemoveOverviewPushButton_clicked();
void mOverviewUpButton_clicked();
void mOverviewDownButton_clicked();
QgsLayoutMapOverview *currentOverview();
void mOverviewCheckBox_toggled( bool state );
void mOverviewListWidget_currentItemChanged( QListWidgetItem *current, QListWidgetItem *previous );
void mOverviewListWidget_itemChanged( QListWidgetItem *item );
void setOverviewItemsEnabled( bool enabled );
void setOverviewItems( const QgsLayoutMapOverview *overview );
void blockOverviewItemsSignals( bool block );
protected:
void addPageToToolbox( QWidget *widget, const QString &name );
//! Sets the current composer map values to the GUI elements
virtual void updateGuiElements();
protected slots:
//! Initializes data defined buttons to current atlas coverage layer
void populateDataDefinedButtons();
private slots:
//! Sets the GUI elements to the values of mPicture
void setGuiElementValues();
//! Enables or disables the atlas margin around feature option depending on coverage layer type
void atlasLayerChanged( QgsVectorLayer *layer );
//! Enables or disables the atlas controls when composer atlas is toggled on/off
void compositionAtlasToggled( bool atlasEnabled );
void aboutToShowKeepLayersVisibilityPresetsMenu();
void followVisibilityPresetSelected( int currentIndex );
void keepLayersVisibilityPresetSelected();
void onMapThemesChanged();
void updateOverviewFrameStyleFromWidget();
void cleanUpOverviewFrameStyleSelector( QgsPanelWidget *container );
void mapCrsChanged( const QgsCoordinateReferenceSystem &crs );
private:
QgsLayoutItemMap *mMapItem = nullptr;
//! Sets extent of composer map from line edits
void updateComposerExtentFromGui();
//! Blocks / unblocks the signals of all GUI elements
void blockAllSignals( bool b );
void rotationChanged( double value );
#if 0 //TODO
void handleChangedFrameDisplay( QgsComposerMapGrid::BorderSide border, const QgsComposerMapGrid::DisplayMode mode );
void handleChangedAnnotationDisplay( QgsComposerMapGrid::BorderSide border, const QString &text );
void handleChangedAnnotationPosition( QgsComposerMapGrid::BorderSide border, const QString &text );
void handleChangedAnnotationDirection( QgsComposerMapGrid::BorderSide border, QgsComposerMapGrid::AnnotationDirection direction );
#endif
void insertFrameDisplayEntries( QComboBox *c );
void insertAnnotationDisplayEntries( QComboBox *c );
void insertAnnotationPositionEntries( QComboBox *c );
void insertAnnotationDirectionEntries( QComboBox *c );
#if 0 //TODO
void initFrameDisplayBox( QComboBox *c, QgsComposerMapGrid::DisplayMode display );
void initAnnotationDisplayBox( QComboBox *c, QgsComposerMapGrid::DisplayMode display );
void initAnnotationPositionBox( QComboBox *c, QgsComposerMapGrid::AnnotationPosition pos );
void initAnnotationDirectionBox( QComboBox *c, QgsComposerMapGrid::AnnotationDirection dir );
#endif
//! Enables or disables the atlas margin and predefined scales radio depending on the atlas coverage layer type
void toggleAtlasScalingOptionsByLayerType();
//! Recalculates the bounds for an atlas map when atlas properties change
void updateMapForAtlas();
//! Is there some predefined scales, globally or as project's options ?
bool hasPredefinedScales() const;
QListWidgetItem *addGridListItem( const QString &id, const QString &name );
void loadGridEntries();
QListWidgetItem *addOverviewListItem( const QString &id, const QString &name );
void loadOverviewEntries();
void updateOverviewFrameSymbolMarker( const QgsLayoutMapOverview *overview );
void storeCurrentLayerSet();
};
#endif

View File

@ -414,7 +414,10 @@ bool QgsLayoutItem::readXml( const QDomElement &itemElem, const QDomDocument &do
return false;
}
return readPropertiesFromElement( itemElem, doc, context );
bool result = readPropertiesFromElement( itemElem, doc, context );
emit changed();
update();
return result;
}
QgsAbstractLayoutUndoCommand *QgsLayoutItem::createCommand( const QString &text, int id, QUndoCommand *parent )
@ -475,6 +478,12 @@ void QgsLayoutItem::setFrameJoinStyle( const Qt::PenJoinStyle style )
emit frameChanged();
}
void QgsLayoutItem::setBackgroundEnabled( bool drawBackground )
{
mBackground = drawBackground;
update();
}
void QgsLayoutItem::setBackgroundColor( const QColor &color )
{
mBackgroundColor = color;
@ -995,14 +1004,14 @@ void QgsLayoutItem::refreshFrame( bool updateItem )
//data defined stroke color set?
bool ok = false;
QColor frameColor = mDataDefinedProperties.valueAsColor( QgsLayoutObject::FrameColor, createExpressionContext(), mFrameColor, &ok );
QPen itemPen = pen();
QPen itemPen;
if ( ok )
{
itemPen.setColor( frameColor );
itemPen = QPen( frameColor );
}
else
{
itemPen.setColor( mFrameColor );
itemPen = QPen( mFrameColor );
}
itemPen.setJoinStyle( mFrameJoinStyle );

View File

@ -84,6 +84,12 @@ class CORE_EXPORT QgsLayoutItem : public QgsLayoutObject, public QGraphicsRectIt
enum UndoCommand
{
UndoIncrementalMove = 1, //!< Layout item incremental movement, e.g. as a result of a keypress
UndoStrokeColor, //!< Stroke color adjustment
UndoStrokeWidth, //!< Stroke width adjustment
UndoBackgroundColor, //!< Background color adjustment
UndoOpacity, //!< Opacity adjustment
UndoSetId, //!< Change item ID
UndoRotation, //!< Rotation adjustment
};
/**
@ -384,7 +390,7 @@ class CORE_EXPORT QgsLayoutItem : public QgsLayoutObject, public QGraphicsRectIt
* \see hasBackground()
* \see setBackgroundColor()
*/
void setBackgroundEnabled( bool drawBackground ) { mBackground = drawBackground; }
void setBackgroundEnabled( bool drawBackground );
/**
* Returns the background color for this item. This is only used if hasBackground()

View File

@ -279,6 +279,7 @@ bool QgsLayoutItemGroup::readXml( const QDomElement &itemElement, const QDomDocu
resetBoundingRect();
emit changed();
return result;
}

View File

@ -189,6 +189,13 @@ class CORE_EXPORT QgsLayoutObject: public QObject, public QgsExpressionContextGe
*/
virtual void refresh() {}
signals:
/**
* Emitted when the object's properties change.
*/
void changed();
protected:
/**

View File

@ -16,7 +16,7 @@
#include "qgslayoutitemwidget.h"
#include "qgspropertyoverridebutton.h"
#include "qgslayout.h"
#include "qgsproject.h"
//
// QgsLayoutConfigObject
@ -154,3 +154,739 @@ QgsAtlasComposition *QgsLayoutItemBaseWidget::atlasComposition() const
return mConfigObject->atlasComposition();
}
#endif
//
//QgsLayoutItemPropertiesWidget
void QgsLayoutItemPropertiesWidget::updateVariables()
{
QgsExpressionContext context = mItem->createExpressionContext();
mVariableEditor->setContext( &context );
int editableIndex = context.indexOfScope( tr( "Composer Item" ) );
if ( editableIndex >= 0 )
mVariableEditor->setEditableScopeIndex( editableIndex );
}
QgsLayoutItemPropertiesWidget::QgsLayoutItemPropertiesWidget( QWidget *parent, QgsLayoutItem *item )
: QWidget( parent )
, mItem( item )
, mConfigObject( new QgsLayoutConfigObject( this, item ) )
, mFreezeXPosSpin( false )
, mFreezeYPosSpin( false )
, mFreezeWidthSpin( false )
, mFreezeHeightSpin( false )
, mFreezePageSpin( false )
{
setupUi( this );
connect( mFrameColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutItemPropertiesWidget::mFrameColorButton_colorChanged );
connect( mBackgroundColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutItemPropertiesWidget::mBackgroundColorButton_colorChanged );
connect( mStrokeWidthSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutItemPropertiesWidget::mStrokeWidthSpinBox_valueChanged );
connect( mStrokeUnitsComboBox, &QgsLayoutUnitsComboBox::changed, this, &QgsLayoutItemPropertiesWidget::strokeUnitChanged );
connect( mFrameGroupBox, &QgsCollapsibleGroupBoxBasic::toggled, this, &QgsLayoutItemPropertiesWidget::mFrameGroupBox_toggled );
connect( mFrameJoinStyleCombo, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutItemPropertiesWidget::mFrameJoinStyleCombo_currentIndexChanged );
connect( mBackgroundGroupBox, &QgsCollapsibleGroupBoxBasic::toggled, this, &QgsLayoutItemPropertiesWidget::mBackgroundGroupBox_toggled );
connect( mItemIdLineEdit, &QLineEdit::editingFinished, this, &QgsLayoutItemPropertiesWidget::mItemIdLineEdit_editingFinished );
connect( mPageSpinBox, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsLayoutItemPropertiesWidget::mPageSpinBox_valueChanged );
connect( mXPosSpin, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutItemPropertiesWidget::mXPosSpin_valueChanged );
connect( mYPosSpin, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutItemPropertiesWidget::mYPosSpin_valueChanged );
connect( mWidthSpin, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutItemPropertiesWidget::mWidthSpin_valueChanged );
connect( mHeightSpin, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutItemPropertiesWidget::mHeightSpin_valueChanged );
connect( mUpperLeftCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutItemPropertiesWidget::mUpperLeftCheckBox_stateChanged );
connect( mUpperMiddleCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutItemPropertiesWidget::mUpperMiddleCheckBox_stateChanged );
connect( mUpperRightCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutItemPropertiesWidget::mUpperRightCheckBox_stateChanged );
connect( mMiddleLeftCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutItemPropertiesWidget::mMiddleLeftCheckBox_stateChanged );
connect( mMiddleCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutItemPropertiesWidget::mMiddleCheckBox_stateChanged );
connect( mMiddleRightCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutItemPropertiesWidget::mMiddleRightCheckBox_stateChanged );
connect( mLowerLeftCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutItemPropertiesWidget::mLowerLeftCheckBox_stateChanged );
connect( mLowerMiddleCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutItemPropertiesWidget::mLowerMiddleCheckBox_stateChanged );
connect( mLowerRightCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutItemPropertiesWidget::mLowerRightCheckBox_stateChanged );
connect( mBlendModeCombo, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutItemPropertiesWidget::mBlendModeCombo_currentIndexChanged );
connect( mItemRotationSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutItemPropertiesWidget::mItemRotationSpinBox_valueChanged );
connect( mExcludeFromPrintsCheckBox, &QCheckBox::toggled, this, &QgsLayoutItemPropertiesWidget::mExcludeFromPrintsCheckBox_toggled );
mItemRotationSpinBox->setClearValue( 0 );
mStrokeUnitsComboBox->linkToWidget( mStrokeWidthSpinBox );
mStrokeUnitsComboBox->setConverter( &mItem->layout()->context().measurementConverter() );
//make button exclusive
QButtonGroup *buttonGroup = new QButtonGroup( this );
buttonGroup->addButton( mUpperLeftCheckBox );
buttonGroup->addButton( mUpperMiddleCheckBox );
buttonGroup->addButton( mUpperRightCheckBox );
buttonGroup->addButton( mMiddleLeftCheckBox );
buttonGroup->addButton( mMiddleCheckBox );
buttonGroup->addButton( mMiddleRightCheckBox );
buttonGroup->addButton( mLowerLeftCheckBox );
buttonGroup->addButton( mLowerMiddleCheckBox );
buttonGroup->addButton( mLowerRightCheckBox );
buttonGroup->setExclusive( true );
initializeDataDefinedButtons();
setValuesForGuiElements();
#if 0 //TODO
connect( mItem->composition(), &QgsComposition::paperSizeChanged, this, &QgsLayoutItemPropertiesWidget::setValuesForGuiPositionElements );
connect( mItem, &QgsComposerItem::sizeChanged, this, &QgsLayoutItemPropertiesWidget::setValuesForGuiPositionElements );
#endif
connect( mItem, &QgsLayoutObject::changed, this, &QgsLayoutItemPropertiesWidget::setValuesForGuiNonPositionElements );
connect( mOpacityWidget, &QgsOpacityWidget::opacityChanged, this, &QgsLayoutItemPropertiesWidget::opacityChanged );
updateVariables();
connect( mVariableEditor, &QgsVariableEditorWidget::scopeChanged, this, &QgsLayoutItemPropertiesWidget::variablesChanged );
// listen out for variable edits
connect( QgsApplication::instance(), &QgsApplication::customVariablesChanged, this, &QgsLayoutItemPropertiesWidget::updateVariables );
connect( mItem->layout()->project(), &QgsProject::customVariablesChanged, this, &QgsLayoutItemPropertiesWidget::updateVariables );
if ( mItem->layout() )
connect( mItem->layout(), &QgsLayout::variablesChanged, this, &QgsLayoutItemPropertiesWidget::updateVariables );
}
void QgsLayoutItemPropertiesWidget::showBackgroundGroup( bool showGroup )
{
mBackgroundGroupBox->setVisible( showGroup );
}
void QgsLayoutItemPropertiesWidget::showFrameGroup( bool showGroup )
{
mFrameGroupBox->setVisible( showGroup );
}
//slots
void QgsLayoutItemPropertiesWidget::mFrameColorButton_colorChanged( const QColor &newFrameColor )
{
if ( !mItem )
{
return;
}
mItem->layout()->undoStack()->beginCommand( mItem, tr( "Change Frame Color" ), QgsLayoutItem::UndoStrokeColor );
mItem->setFrameStrokeColor( newFrameColor );
mItem->layout()->undoStack()->endCommand();
mItem->update();
}
void QgsLayoutItemPropertiesWidget::mBackgroundColorButton_colorChanged( const QColor &newBackgroundColor )
{
if ( !mItem )
{
return;
}
mItem->layout()->undoStack()->beginCommand( mItem, tr( "Change Background Color" ), QgsLayoutItem::UndoBackgroundColor );
mItem->setBackgroundColor( newBackgroundColor );
#if 0 //TODO
//if the item is a composer map, we need to regenerate the map image
//because it usually is cached
if ( QgsComposerMap *cm = qobject_cast<QgsComposerMap *>( mItem ) )
{
cm->invalidateCache();
}
else
{
mItem->updateItem();
}
#endif
mItem->layout()->undoStack()->endCommand();
}
void QgsLayoutItemPropertiesWidget::changeItemPosition()
{
mItem->layout()->undoStack()->beginCommand( mItem, tr( "Move Item" ) );
double x = mXPosSpin->value();
double y = mYPosSpin->value();
double width = mWidthSpin->value();
double height = mHeightSpin->value();
#if 0 //TODO
mItem->setItemPosition( x, y, width, height, positionMode(), false, mPageSpinBox->value() );
#endif
mItem->update();
mItem->layout()->undoStack()->endCommand();
}
void QgsLayoutItemPropertiesWidget::variablesChanged()
{
#if 0 //TODO
QgsExpressionContextUtils::setComposerItemVariables( mItem, mVariableEditor->variablesInActiveScope() );
#endif
}
QgsLayoutItem::ReferencePoint QgsLayoutItemPropertiesWidget::positionMode() const
{
if ( mUpperLeftCheckBox->checkState() == Qt::Checked )
{
return QgsLayoutItem::UpperLeft;
}
else if ( mUpperMiddleCheckBox->checkState() == Qt::Checked )
{
return QgsLayoutItem::UpperMiddle;
}
else if ( mUpperRightCheckBox->checkState() == Qt::Checked )
{
return QgsLayoutItem::UpperRight;
}
else if ( mMiddleLeftCheckBox->checkState() == Qt::Checked )
{
return QgsLayoutItem::MiddleLeft;
}
else if ( mMiddleCheckBox->checkState() == Qt::Checked )
{
return QgsLayoutItem::Middle;
}
else if ( mMiddleRightCheckBox->checkState() == Qt::Checked )
{
return QgsLayoutItem::MiddleRight;
}
else if ( mLowerLeftCheckBox->checkState() == Qt::Checked )
{
return QgsLayoutItem::LowerLeft;
}
else if ( mLowerMiddleCheckBox->checkState() == Qt::Checked )
{
return QgsLayoutItem::LowerMiddle;
}
else if ( mLowerRightCheckBox->checkState() == Qt::Checked )
{
return QgsLayoutItem::LowerRight;
}
return QgsLayoutItem::UpperLeft;
}
void QgsLayoutItemPropertiesWidget::mStrokeWidthSpinBox_valueChanged( double d )
{
if ( !mItem )
{
return;
}
mItem->layout()->undoStack()->beginCommand( mItem, tr( "Change Frame Stroke Width" ), QgsLayoutItem::UndoStrokeWidth );
mItem->setFrameStrokeWidth( QgsLayoutMeasurement( d, mStrokeUnitsComboBox->unit() ) );
mItem->layout()->undoStack()->endCommand();
}
void QgsLayoutItemPropertiesWidget::strokeUnitChanged( QgsUnitTypes::LayoutUnit unit )
{
if ( !mItem )
{
return;
}
mItem->layout()->undoStack()->beginCommand( mItem, tr( "Change Frame Stroke Width" ), QgsLayoutItem::UndoStrokeWidth );
mItem->setFrameStrokeWidth( QgsLayoutMeasurement( mStrokeWidthSpinBox->value(), unit ) );
mItem->layout()->undoStack()->endCommand();
}
void QgsLayoutItemPropertiesWidget::mFrameJoinStyleCombo_currentIndexChanged( int index )
{
Q_UNUSED( index );
if ( !mItem )
{
return;
}
mItem->layout()->undoStack()->beginCommand( mItem, tr( "Change Frame Join Style" ) );
mItem->setFrameJoinStyle( mFrameJoinStyleCombo->penJoinStyle() );
mItem->layout()->undoStack()->endCommand();
}
void QgsLayoutItemPropertiesWidget::mFrameGroupBox_toggled( bool state )
{
if ( !mItem )
{
return;
}
mItem->layout()->undoStack()->beginCommand( mItem, state ? tr( "Enable Frame" ) : tr( "Disable Frame" ) );
mItem->setFrameEnabled( state );
mItem->update();
mItem->layout()->undoStack()->endCommand();
}
void QgsLayoutItemPropertiesWidget::mBackgroundGroupBox_toggled( bool state )
{
if ( !mItem )
{
return;
}
mItem->layout()->undoStack()->beginCommand( mItem, state ? tr( "Enable Background" ) : tr( "Disable Background" ) );
mItem->setBackgroundEnabled( state );
#if 0 //TODO
//if the item is a composer map, we need to regenerate the map image
//because it usually is cached
if ( QgsComposerMap *cm = qobject_cast<QgsComposerMap *>( mItem ) )
{
cm->invalidateCache();
}
else
{
mItem->updateItem();
}
#endif
mItem->layout()->undoStack()->endCommand();
}
void QgsLayoutItemPropertiesWidget::setValuesForGuiPositionElements()
{
if ( !mItem )
{
return;
}
mXPosSpin->blockSignals( true );
mYPosSpin->blockSignals( true );
mWidthSpin->blockSignals( true );
mHeightSpin->blockSignals( true );
mUpperLeftCheckBox->blockSignals( true );
mUpperMiddleCheckBox->blockSignals( true );
mUpperRightCheckBox->blockSignals( true );
mMiddleLeftCheckBox->blockSignals( true );
mMiddleCheckBox->blockSignals( true );
mMiddleRightCheckBox->blockSignals( true );
mLowerLeftCheckBox->blockSignals( true );
mLowerMiddleCheckBox->blockSignals( true );
mLowerRightCheckBox->blockSignals( true );
mPageSpinBox->blockSignals( true );
QPointF pos; //TODO = mItem->pagePos();
switch ( mItem->referencePoint() )
{
case QgsLayoutItem::UpperLeft:
{
mUpperLeftCheckBox->setChecked( true );
if ( !mFreezeXPosSpin )
mXPosSpin->setValue( pos.x() );
if ( !mFreezeYPosSpin )
mYPosSpin->setValue( pos.y() );
break;
}
case QgsLayoutItem::UpperMiddle:
{
mUpperMiddleCheckBox->setChecked( true );
if ( !mFreezeXPosSpin )
mXPosSpin->setValue( pos.x() + mItem->rect().width() / 2.0 );
if ( !mFreezeYPosSpin )
mYPosSpin->setValue( pos.y() );
break;
}
case QgsLayoutItem::UpperRight:
{
mUpperRightCheckBox->setChecked( true );
if ( !mFreezeXPosSpin )
mXPosSpin->setValue( pos.x() + mItem->rect().width() );
if ( !mFreezeYPosSpin )
mYPosSpin->setValue( pos.y() );
break;
}
case QgsLayoutItem::MiddleLeft:
{
mMiddleLeftCheckBox->setChecked( true );
if ( !mFreezeXPosSpin )
mXPosSpin->setValue( pos.x() );
if ( !mFreezeYPosSpin )
mYPosSpin->setValue( pos.y() + mItem->rect().height() / 2.0 );
break;
}
case QgsLayoutItem::Middle:
{
mMiddleCheckBox->setChecked( true );
if ( !mFreezeXPosSpin )
mXPosSpin->setValue( pos.x() + mItem->rect().width() / 2.0 );
if ( !mFreezeYPosSpin )
mYPosSpin->setValue( pos.y() + mItem->rect().height() / 2.0 );
break;
}
case QgsLayoutItem::MiddleRight:
{
mMiddleRightCheckBox->setChecked( true );
if ( !mFreezeXPosSpin )
mXPosSpin->setValue( pos.x() + mItem->rect().width() );
if ( !mFreezeYPosSpin )
mYPosSpin->setValue( pos.y() + mItem->rect().height() / 2.0 );
break;
}
case QgsLayoutItem::LowerLeft:
{
mLowerLeftCheckBox->setChecked( true );
if ( !mFreezeXPosSpin )
mXPosSpin->setValue( pos.x() );
if ( !mFreezeYPosSpin )
mYPosSpin->setValue( pos.y() + mItem->rect().height() );
break;
}
case QgsLayoutItem::LowerMiddle:
{
mLowerMiddleCheckBox->setChecked( true );
if ( !mFreezeXPosSpin )
mXPosSpin->setValue( pos.x() + mItem->rect().width() / 2.0 );
if ( !mFreezeYPosSpin )
mYPosSpin->setValue( pos.y() + mItem->rect().height() );
break;
}
case QgsLayoutItem::LowerRight:
{
mLowerRightCheckBox->setChecked( true );
if ( !mFreezeXPosSpin )
mXPosSpin->setValue( pos.x() + mItem->rect().width() );
if ( !mFreezeYPosSpin )
mYPosSpin->setValue( pos.y() + mItem->rect().height() );
break;
}
}
if ( !mFreezeWidthSpin )
mWidthSpin->setValue( mItem->rect().width() );
if ( !mFreezeHeightSpin )
mHeightSpin->setValue( mItem->rect().height() );
#if 0 //TODO
if ( !mFreezePageSpin )
mPageSpinBox->setValue( mItem->page() );
#endif
mXPosSpin->blockSignals( false );
mYPosSpin->blockSignals( false );
mWidthSpin->blockSignals( false );
mHeightSpin->blockSignals( false );
mUpperLeftCheckBox->blockSignals( false );
mUpperMiddleCheckBox->blockSignals( false );
mUpperRightCheckBox->blockSignals( false );
mMiddleLeftCheckBox->blockSignals( false );
mMiddleCheckBox->blockSignals( false );
mMiddleRightCheckBox->blockSignals( false );
mLowerLeftCheckBox->blockSignals( false );
mLowerMiddleCheckBox->blockSignals( false );
mLowerRightCheckBox->blockSignals( false );
mPageSpinBox->blockSignals( false );
}
void QgsLayoutItemPropertiesWidget::setValuesForGuiNonPositionElements()
{
if ( !mItem )
{
return;
}
mStrokeWidthSpinBox->blockSignals( true );
mStrokeUnitsComboBox->blockSignals( true );
mFrameGroupBox->blockSignals( true );
mBackgroundGroupBox->blockSignals( true );
mItemIdLineEdit->blockSignals( true );
mBlendModeCombo->blockSignals( true );
mOpacityWidget->blockSignals( true );
mFrameColorButton->blockSignals( true );
mFrameJoinStyleCombo->blockSignals( true );
mBackgroundColorButton->blockSignals( true );
mItemRotationSpinBox->blockSignals( true );
mExcludeFromPrintsCheckBox->blockSignals( true );
mBackgroundColorButton->setColor( mItem->backgroundColor() );
mFrameColorButton->setColor( mItem->frameStrokeColor() );
mStrokeUnitsComboBox->setUnit( mItem->frameStrokeWidth().units() );
mStrokeWidthSpinBox->setValue( mItem->frameStrokeWidth().length() );
mFrameJoinStyleCombo->setPenJoinStyle( mItem->frameJoinStyle() );
mItemIdLineEdit->setText( mItem->id() );
mFrameGroupBox->setChecked( mItem->hasFrame() );
mBackgroundGroupBox->setChecked( mItem->hasBackground() );
#if 0//TODO
mBlendModeCombo->setBlendMode( mItem->blendMode() );
mOpacityWidget->setOpacity( mItem->itemOpacity() );
mItemRotationSpinBox->setValue( mItem->itemRotation( QgsComposerObject::OriginalValue ) );
mExcludeFromPrintsCheckBox->setChecked( mItem->excludeFromExports( QgsComposerObject::OriginalValue ) );
#endif
mBackgroundColorButton->blockSignals( false );
mFrameColorButton->blockSignals( false );
mFrameJoinStyleCombo->blockSignals( false );
mStrokeWidthSpinBox->blockSignals( false );
mStrokeUnitsComboBox->blockSignals( false );
mFrameGroupBox->blockSignals( false );
mBackgroundGroupBox->blockSignals( false );
mItemIdLineEdit->blockSignals( false );
mBlendModeCombo->blockSignals( false );
mOpacityWidget->blockSignals( false );
mItemRotationSpinBox->blockSignals( false );
mExcludeFromPrintsCheckBox->blockSignals( false );
}
void QgsLayoutItemPropertiesWidget::initializeDataDefinedButtons()
{
mConfigObject->initializeDataDefinedButton( mXPositionDDBtn, QgsLayoutObject::PositionX );
mConfigObject->initializeDataDefinedButton( mYPositionDDBtn, QgsLayoutObject::PositionY );
mConfigObject->initializeDataDefinedButton( mWidthDDBtn, QgsLayoutObject::ItemWidth );
mConfigObject->initializeDataDefinedButton( mHeightDDBtn, QgsLayoutObject::ItemHeight );
mConfigObject->initializeDataDefinedButton( mItemRotationDDBtn, QgsLayoutObject::ItemRotation );
mConfigObject->initializeDataDefinedButton( mOpacityDDBtn, QgsLayoutObject::Opacity );
mConfigObject->initializeDataDefinedButton( mBlendModeDDBtn, QgsLayoutObject::BlendMode );
mConfigObject->initializeDataDefinedButton( mExcludePrintsDDBtn, QgsLayoutObject::ExcludeFromExports );
mConfigObject->initializeDataDefinedButton( mItemFrameColorDDBtn, QgsLayoutObject::FrameColor );
mConfigObject->initializeDataDefinedButton( mItemBackgroundColorDDBtn, QgsLayoutObject::BackgroundColor );
}
void QgsLayoutItemPropertiesWidget::populateDataDefinedButtons()
{
const QList< QgsPropertyOverrideButton * > buttons = findChildren< QgsPropertyOverrideButton * >();
for ( QgsPropertyOverrideButton *button : buttons )
{
mConfigObject->updateDataDefinedButton( button );
}
}
void QgsLayoutItemPropertiesWidget::setValuesForGuiElements()
{
if ( !mItem )
{
return;
}
mBackgroundColorButton->setColorDialogTitle( tr( "Select Background Color" ) );
mBackgroundColorButton->setAllowOpacity( true );
mBackgroundColorButton->setContext( QStringLiteral( "composer" ) );
mFrameColorButton->setColorDialogTitle( tr( "Select Frame Color" ) );
mFrameColorButton->setAllowOpacity( true );
mFrameColorButton->setContext( QStringLiteral( "composer" ) );
setValuesForGuiPositionElements();
setValuesForGuiNonPositionElements();
populateDataDefinedButtons();
}
void QgsLayoutItemPropertiesWidget::mBlendModeCombo_currentIndexChanged( int index )
{
Q_UNUSED( index );
if ( mItem )
{
mItem->layout()->undoStack()->beginCommand( mItem, tr( "Change Blend Mode" ) );
#if 0 //TODO
mItem->setBlendMode( mBlendModeCombo->blendMode() );
#endif
mItem->layout()->undoStack()->endCommand();
}
}
void QgsLayoutItemPropertiesWidget::opacityChanged( double value )
{
if ( mItem )
{
mItem->layout()->undoStack()->beginCommand( mItem, tr( "Change Opacity" ), QgsLayoutItem::UndoOpacity );
#if 0 //TODO
mItem->setItemOpacity( value );
#endif
mItem->layout()->undoStack()->endCommand();
}
}
void QgsLayoutItemPropertiesWidget::mItemIdLineEdit_editingFinished()
{
if ( mItem )
{
mItem->layout()->undoStack()->beginCommand( mItem, tr( "Change Item ID" ), QgsLayoutItem::UndoSetId );
mItem->setId( mItemIdLineEdit->text() );
mItemIdLineEdit->setText( mItem->id() );
mItem->layout()->undoStack()->endCommand();
}
}
void QgsLayoutItemPropertiesWidget::mPageSpinBox_valueChanged( int )
{
mFreezePageSpin = true;
changeItemPosition();
mFreezePageSpin = false;
}
void QgsLayoutItemPropertiesWidget::mXPosSpin_valueChanged( double )
{
mFreezeXPosSpin = true;
changeItemPosition();
mFreezeXPosSpin = false;
}
void QgsLayoutItemPropertiesWidget::mYPosSpin_valueChanged( double )
{
mFreezeYPosSpin = true;
changeItemPosition();
mFreezeYPosSpin = false;
}
void QgsLayoutItemPropertiesWidget::mWidthSpin_valueChanged( double )
{
mFreezeWidthSpin = true;
changeItemPosition();
mFreezeWidthSpin = false;
}
void QgsLayoutItemPropertiesWidget::mHeightSpin_valueChanged( double )
{
mFreezeHeightSpin = true;
changeItemPosition();
mFreezeHeightSpin = false;
}
void QgsLayoutItemPropertiesWidget::mUpperLeftCheckBox_stateChanged( int state )
{
if ( state != Qt::Checked )
return;
if ( mItem )
{
#if 0 // TODO
mItem->setItemPosition( mItem->pos().x(), mItem->pos().y(), QgsComposerItem::UpperLeft );
#endif
}
setValuesForGuiPositionElements();
}
void QgsLayoutItemPropertiesWidget::mUpperMiddleCheckBox_stateChanged( int state )
{
if ( state != Qt::Checked )
return;
if ( mItem )
{
#if 0 //TODO
mItem->setItemPosition( mItem->pos().x() + mItem->rect().width() / 2.0,
mItem->pos().y(), QgsComposerItem::UpperMiddle );
#endif
}
setValuesForGuiPositionElements();
}
void QgsLayoutItemPropertiesWidget::mUpperRightCheckBox_stateChanged( int state )
{
if ( state != Qt::Checked )
return;
if ( mItem )
{
#if 0 //TODO
mItem->setItemPosition( mItem->pos().x() + mItem->rect().width(),
mItem->pos().y(), QgsComposerItem::UpperRight );
#endif
}
setValuesForGuiPositionElements();
}
void QgsLayoutItemPropertiesWidget::mMiddleLeftCheckBox_stateChanged( int state )
{
if ( state != Qt::Checked )
return;
if ( mItem )
{
#if 0 //TODO
mItem->setItemPosition( mItem->pos().x(),
mItem->pos().y() + mItem->rect().height() / 2.0, QgsComposerItem::MiddleLeft );
#endif
}
setValuesForGuiPositionElements();
}
void QgsLayoutItemPropertiesWidget::mMiddleCheckBox_stateChanged( int state )
{
if ( state != Qt::Checked )
return;
if ( mItem )
{
#if 0 //TODO
mItem->setItemPosition( mItem->pos().x() + mItem->rect().width() / 2.0,
mItem->pos().y() + mItem->rect().height() / 2.0, QgsComposerItem::Middle );
#endif
}
setValuesForGuiPositionElements();
}
void QgsLayoutItemPropertiesWidget::mMiddleRightCheckBox_stateChanged( int state )
{
if ( state != Qt::Checked )
return;
if ( mItem )
{
#if 0 //TODO
mItem->setItemPosition( mItem->pos().x() + mItem->rect().width(),
mItem->pos().y() + mItem->rect().height() / 2.0, QgsComposerItem::MiddleRight );
#endif
}
setValuesForGuiPositionElements();
}
void QgsLayoutItemPropertiesWidget::mLowerLeftCheckBox_stateChanged( int state )
{
if ( state != Qt::Checked )
return;
if ( mItem )
{
#if 0 //TODO
mItem->setItemPosition( mItem->pos().x(),
mItem->pos().y() + mItem->rect().height(), QgsComposerItem::LowerLeft );
#endif
}
setValuesForGuiPositionElements();
}
void QgsLayoutItemPropertiesWidget::mLowerMiddleCheckBox_stateChanged( int state )
{
if ( state != Qt::Checked )
return;
if ( mItem )
{
#if 0 //TODO
mItem->setItemPosition( mItem->pos().x() + mItem->rect().width() / 2.0,
mItem->pos().y() + mItem->rect().height(), QgsComposerItem::LowerMiddle );
#endif
}
setValuesForGuiPositionElements();
}
void QgsLayoutItemPropertiesWidget::mLowerRightCheckBox_stateChanged( int state )
{
if ( state != Qt::Checked )
return;
if ( mItem )
{
#if 0 //TODO
mItem->setItemPosition( mItem->pos().x() + mItem->rect().width(),
mItem->pos().y() + mItem->rect().height(), QgsComposerItem::LowerRight );
#endif
}
setValuesForGuiPositionElements();
}
void QgsLayoutItemPropertiesWidget::mItemRotationSpinBox_valueChanged( double val )
{
if ( mItem )
{
mItem->layout()->undoStack()->beginCommand( mItem, tr( "Rotate" ), QgsLayoutItem::UndoRotation );
#if 0 //TODO
mItem->setItemRotation( val, true );
#endif
mItem->update();
mItem->layout()->undoStack()->endCommand();
}
}
void QgsLayoutItemPropertiesWidget::mExcludeFromPrintsCheckBox_toggled( bool checked )
{
if ( mItem )
{
mItem->layout()->undoStack()->beginCommand( mItem, checked ? tr( "Exclude from Exports" ) : tr( "Include in Exports" ) );
#if 0 //TODO
mItem->setExcludeFromExports( checked );
#endif
mItem->layout()->undoStack()->endCommand();
}
}

View File

@ -18,6 +18,8 @@
#include "qgis_gui.h"
#include "qgslayoutobject.h"
#include "qgspanelwidget.h"
#include "qgslayoutitem.h"
#include "ui_qgslayoutitemwidgetbase.h"
#include <QObject>
#include <QPointer>
@ -147,4 +149,99 @@ class GUI_EXPORT QgsLayoutItemBaseWidget: public QgsPanelWidget
QgsLayoutConfigObject *mConfigObject = nullptr;
};
/**
* \class QgsLayoutItemPropertiesWidget
* \ingroup gui
* A widget for controlling the common properties of layout items (e.g. position and size, background, stroke, frame).
* This widget can be embedded into other layout item widgets.
* \since QGIS 3.0
*/
class GUI_EXPORT QgsLayoutItemPropertiesWidget: public QWidget, private Ui::QgsLayoutItemWidgetBase
{
Q_OBJECT
public:
QgsLayoutItemPropertiesWidget( QWidget *parent, QgsLayoutItem *item );
QgsLayoutItem::ReferencePoint positionMode() const;
void showBackgroundGroup( bool showGroup );
void showFrameGroup( bool showGroup );
protected slots:
//! Initializes data defined buttons to current atlas coverage layer
void initializeDataDefinedButtons();
//! Sets data defined button state to match item
void populateDataDefinedButtons();
private slots:
/**
* Set the frame color
*/
void mFrameColorButton_colorChanged( const QColor &newFrameColor );
/**
* Set the background color
*/
void mBackgroundColorButton_colorChanged( const QColor &newBackgroundColor );
// void on_mTransparencySlider_valueChanged( int value );
// void on_mTransparencySpinBox_valueChanged( int value );
void mStrokeWidthSpinBox_valueChanged( double d );
void strokeUnitChanged( QgsUnitTypes::LayoutUnit unit );
void mFrameGroupBox_toggled( bool state );
void mFrameJoinStyleCombo_currentIndexChanged( int index );
void mBackgroundGroupBox_toggled( bool state );
void mItemIdLineEdit_editingFinished();
//adjust coordinates in line edits
void mPageSpinBox_valueChanged( int );
void mXPosSpin_valueChanged( double );
void mYPosSpin_valueChanged( double );
void mWidthSpin_valueChanged( double );
void mHeightSpin_valueChanged( double );
void mUpperLeftCheckBox_stateChanged( int state );
void mUpperMiddleCheckBox_stateChanged( int state );
void mUpperRightCheckBox_stateChanged( int state );
void mMiddleLeftCheckBox_stateChanged( int state );
void mMiddleCheckBox_stateChanged( int state );
void mMiddleRightCheckBox_stateChanged( int state );
void mLowerLeftCheckBox_stateChanged( int state );
void mLowerMiddleCheckBox_stateChanged( int state );
void mLowerRightCheckBox_stateChanged( int state );
void mBlendModeCombo_currentIndexChanged( int index );
void opacityChanged( double value );
void mItemRotationSpinBox_valueChanged( double val );
void mExcludeFromPrintsCheckBox_toggled( bool checked );
void setValuesForGuiElements();
//sets the values for all position related (x, y, width, height) elements
void setValuesForGuiPositionElements();
//sets the values for all non-position related elements
void setValuesForGuiNonPositionElements();
void variablesChanged();
void updateVariables();
private:
QgsLayoutItem *mItem = nullptr;
QgsLayoutConfigObject *mConfigObject = nullptr;
bool mFreezeXPosSpin = false;
bool mFreezeYPosSpin = false;
bool mFreezeWidthSpin = false;
bool mFreezeHeightSpin = false;
bool mFreezePageSpin = false;
// void changeItemTransparency( int value );
void changeItemPosition();
};
#endif // QGSLAYOUTITEMWIDGET_H

View File

@ -0,0 +1,861 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsLayoutItemWidgetBase</class>
<widget class="QWidget" name="QgsLayoutItemWidgetBase">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>548</width>
<height>1812</height>
</rect>
</property>
<property name="windowTitle">
<string>Global Options</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="mGeneralOptionsGroupBox">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="title">
<string>Position and size</string>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">composeritem</string>
</property>
<property name="collapsed" stdset="0">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout_3" columnstretch="0,1,1,1">
<item row="3" column="0">
<widget class="QLabel" name="mWidthLabel">
<property name="text">
<string>Width</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="mXLabel">
<property name="text">
<string>X</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="mHeightLabel">
<property name="text">
<string>Height</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="mYLabel">
<property name="text">
<string>Y</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="mPageLabel">
<property name="text">
<string>Page</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QgsPropertyOverrideButton" name="mXPositionDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QgsPropertyOverrideButton" name="mYPositionDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QgsPropertyOverrideButton" name="mWidthDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QgsPropertyOverrideButton" name="mHeightDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="3">
<widget class="QgsSpinBox" name="mPageSpinBox">
<property name="minimum">
<number>1</number>
</property>
<property name="showClearButton" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="1" colspan="2">
<widget class="QgsDoubleSpinBox" name="mWidthSpin">
<property name="suffix">
<string> mm</string>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="maximum">
<double>9999999.000000000000000</double>
</property>
<property name="showClearButton" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="4" column="1" colspan="2">
<widget class="QgsDoubleSpinBox" name="mHeightSpin">
<property name="suffix">
<string> mm</string>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="maximum">
<double>9999999.000000000000000</double>
</property>
<property name="showClearButton" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QgsDoubleSpinBox" name="mYPosSpin">
<property name="suffix">
<string> mm</string>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="minimum">
<double>-9999999.000000000000000</double>
</property>
<property name="maximum">
<double>9999999.000000000000000</double>
</property>
<property name="showClearButton" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QgsDoubleSpinBox" name="mXPosSpin">
<property name="suffix">
<string> mm</string>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="minimum">
<double>-9999999.000000000000000</double>
</property>
<property name="maximum">
<double>9999999.000000000000000</double>
</property>
<property name="showClearButton" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Reference point</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QCheckBox" name="mUpperMiddleCheckBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QCheckBox" name="mMiddleRightCheckBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="mMiddleCheckBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QCheckBox" name="mUpperRightCheckBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="mLowerMiddleCheckBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QCheckBox" name="mLowerRightCheckBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="mUpperLeftCheckBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="mLowerLeftCheckBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="mMiddleLeftCheckBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="mTransformsGroupBox">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="title">
<string>Rotation</string>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">composeritem</string>
</property>
<property name="collapsed" stdset="0">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_5" columnstretch="0,1">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Rotation</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QgsDoubleSpinBox" name="mItemRotationSpinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="wrapping">
<bool>true</bool>
</property>
<property name="suffix">
<string> °</string>
</property>
<property name="minimum">
<double>-360.000000000000000</double>
</property>
<property name="maximum">
<double>360.000000000000000</double>
</property>
</widget>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mItemRotationDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="mFrameGroupBox">
<property name="title">
<string>Frame</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">composeritem</string>
</property>
<property name="collapsed" stdset="0">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Color</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QgsColorButton" name="mFrameColorButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mItemFrameColorDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="mStrokeWidthLabel">
<property name="text">
<string>Thickness</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="buddy">
<cstring>mStrokeWidthSpinBox</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QgsDoubleSpinBox" name="mStrokeWidthSpinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string/>
</property>
<property name="maximum">
<double>99.989999999999995</double>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
<property name="showClearButton" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QgsLayoutUnitsComboBox" name="mStrokeUnitsComboBox"/>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Join style</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QgsPenJoinStyleComboBox" name="mFrameJoinStyleCombo">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="mBackgroundGroupBox">
<property name="title">
<string>Background</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">composeritem</string>
</property>
<property name="collapsed" stdset="0">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_7">
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Background color</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QgsColorButton" name="mBackgroundColorButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mItemBackgroundColorDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="groupBox">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="title">
<string>Item ID</string>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">composeritem</string>
</property>
<property name="collapsed" stdset="0">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_8">
<item row="0" column="0">
<widget class="QLabel" name="mItemIdLabel">
<property name="text">
<string>Id</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="mItemIdLineEdit"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="groupRendering">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="title">
<string>Rendering</string>
</property>
<property name="collapsed" stdset="0">
<bool>true</bool>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">composeritem</string>
</property>
<layout class="QGridLayout" name="gridLayout_4" columnstretch="0,1">
<item row="0" column="0">
<widget class="QLabel" name="labelBlendMode">
<property name="text">
<string>Blending mode</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QgsOpacityWidget" name="mOpacityWidget" native="true">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
</widget>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mOpacityDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="3" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="mExcludeFromPrintsCheckBox">
<property name="text">
<string>Exclude item from exports</string>
</property>
</widget>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mExcludePrintsDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="labelTransparency">
<property name="text">
<string>Opacity</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QgsBlendModeComboBox" name="mBlendModeCombo"/>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mBlendModeDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBox" name="groupBox_3">
<property name="title">
<string>Variables</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QgsVariableEditorWidget" name="mVariableEditor" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>200</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>QgsColorButton</class>
<extends>QToolButton</extends>
<header>qgscolorbutton.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>QgsPropertyOverrideButton</class>
<extends>QToolButton</extends>
<header>qgspropertyoverridebutton.h</header>
</customwidget>
<customwidget>
<class>QgsDoubleSpinBox</class>
<extends>QDoubleSpinBox</extends>
<header>qgsdoublespinbox.h</header>
</customwidget>
<customwidget>
<class>QgsSpinBox</class>
<extends>QSpinBox</extends>
<header>qgsspinbox.h</header>
</customwidget>
<customwidget>
<class>QgsPenJoinStyleComboBox</class>
<extends>QComboBox</extends>
<header>qgspenstylecombobox.h</header>
</customwidget>
<customwidget>
<class>QgsCollapsibleGroupBoxBasic</class>
<extends>QGroupBox</extends>
<header location="global">qgscollapsiblegroupbox.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>QgsBlendModeComboBox</class>
<extends>QComboBox</extends>
<header>qgsblendmodecombobox.h</header>
</customwidget>
<customwidget>
<class>QgsCollapsibleGroupBox</class>
<extends>QGroupBox</extends>
<header>qgscollapsiblegroupbox.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>QgsVariableEditorWidget</class>
<extends>QWidget</extends>
<header location="global">qgsvariableeditorwidget.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>QgsOpacityWidget</class>
<extends>QWidget</extends>
<header>qgsopacitywidget.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>QgsLayoutUnitsComboBox</class>
<extends>QComboBox</extends>
<header>qgslayoutunitscombobox.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>mGeneralOptionsGroupBox</tabstop>
<tabstop>mPageSpinBox</tabstop>
<tabstop>mXPosSpin</tabstop>
<tabstop>mXPositionDDBtn</tabstop>
<tabstop>mYPosSpin</tabstop>
<tabstop>mYPositionDDBtn</tabstop>
<tabstop>mWidthSpin</tabstop>
<tabstop>mWidthDDBtn</tabstop>
<tabstop>mHeightSpin</tabstop>
<tabstop>mHeightDDBtn</tabstop>
<tabstop>mUpperLeftCheckBox</tabstop>
<tabstop>mUpperMiddleCheckBox</tabstop>
<tabstop>mUpperRightCheckBox</tabstop>
<tabstop>mMiddleLeftCheckBox</tabstop>
<tabstop>mMiddleCheckBox</tabstop>
<tabstop>mMiddleRightCheckBox</tabstop>
<tabstop>mLowerLeftCheckBox</tabstop>
<tabstop>mLowerMiddleCheckBox</tabstop>
<tabstop>mLowerRightCheckBox</tabstop>
<tabstop>mTransformsGroupBox</tabstop>
<tabstop>mItemRotationSpinBox</tabstop>
<tabstop>mItemRotationDDBtn</tabstop>
<tabstop>mFrameGroupBox</tabstop>
<tabstop>mFrameColorButton</tabstop>
<tabstop>mItemFrameColorDDBtn</tabstop>
<tabstop>mStrokeWidthSpinBox</tabstop>
<tabstop>mFrameJoinStyleCombo</tabstop>
<tabstop>mBackgroundGroupBox</tabstop>
<tabstop>mBackgroundColorButton</tabstop>
<tabstop>mItemBackgroundColorDDBtn</tabstop>
<tabstop>groupBox</tabstop>
<tabstop>mItemIdLineEdit</tabstop>
<tabstop>groupRendering</tabstop>
<tabstop>mBlendModeCombo</tabstop>
<tabstop>mBlendModeDDBtn</tabstop>
<tabstop>mOpacityDDBtn</tabstop>
<tabstop>mExcludeFromPrintsCheckBox</tabstop>
<tabstop>mExcludePrintsDDBtn</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,912 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsLayoutMapWidgetBase</class>
<widget class="QWidget" name="QgsLayoutMapWidgetBase">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>384</width>
<height>749</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Map Options</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="mLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">padding: 2px; font-weight: bold; background-color: rgb(200, 200, 200);</string>
</property>
<property name="text">
<string>Map</string>
</property>
</widget>
</item>
<item>
<widget class="QgsScrollArea" name="scrollArea">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>627</width>
<height>2272</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="mainLayout">
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="groupBox">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="title">
<string>Main properties</string>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">composeritem</string>
</property>
<property name="collapsed" stdset="0">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="3" column="0">
<widget class="QLabel" name="mMapRotationLabel_2">
<property name="text">
<string>CRS</string>
</property>
</widget>
</item>
<item row="2" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QgsDoubleSpinBox" name="mMapRotationSpinBox">
<property name="wrapping">
<bool>true</bool>
</property>
<property name="suffix">
<string> °</string>
</property>
<property name="minimum">
<double>-360.000000000000000</double>
</property>
<property name="maximum">
<double>360.000000000000000</double>
</property>
</widget>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mMapRotationDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="5" column="0" colspan="2">
<widget class="QCheckBox" name="mDrawCanvasItemsCheckBox">
<property name="text">
<string>Draw map canvas items</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QLineEdit" name="mScaleLineEdit">
<property name="inputMask">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mScaleDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Scale</string>
</property>
<property name="buddy">
<cstring>mScaleLineEdit</cstring>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QgsProjectionSelectionWidget" name="mCrsSelector" native="true">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="mMapRotationLabel">
<property name="text">
<string>Map rotation</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QPushButton" name="mUpdatePreviewButton">
<property name="text">
<string>Update preview</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="groupBox_2">
<property name="title">
<string>Layers</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_12">
<item>
<widget class="QCheckBox" name="mFollowVisibilityPresetCheckBox">
<property name="text">
<string>Follow map theme</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="mFollowVisibilityPresetCombo"/>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mStylePresetsDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_10">
<item>
<widget class="QCheckBox" name="mKeepLayerListCheckBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Lock layers</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="mLayerListFromPresetButton">
<property name="text">
<string>…</string>
</property>
<property name="popupMode">
<enum>QToolButton::InstantPopup</enum>
</property>
</widget>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mLayersDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="mKeepLayerStylesCheckBox">
<property name="text">
<string>Lock styles for layers</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="mExtentsCheckBox">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="title">
<string>Extents</string>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">composeritem</string>
</property>
<property name="collapsed" stdset="0">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="mXMinLabel">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>X min</string>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
<property name="buddy">
<cstring>mXMinLineEdit</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="mXMinLineEdit"/>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mXMinDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="mYMinLabel">
<property name="text">
<string>Y min</string>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
<property name="buddy">
<cstring>mYMinLineEdit</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLineEdit" name="mYMinLineEdit"/>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mYMinDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="mXMaxLabel">
<property name="text">
<string>X max</string>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
<property name="buddy">
<cstring>mXMaxLineEdit</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLineEdit" name="mXMaxLineEdit"/>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mXMaxDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="3" column="0">
<widget class="QLabel" name="mYMaxLabel">
<property name="text">
<string>Y max</string>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
<property name="buddy">
<cstring>mYMaxLineEdit</cstring>
</property>
</widget>
</item>
<item row="3" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLineEdit" name="mYMaxLineEdit"/>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mYMaxDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="4" column="0" colspan="2">
<widget class="QPushButton" name="mSetToMapCanvasExtentButton">
<property name="text">
<string>Set to map canvas extent</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QPushButton" name="mViewExtentInCanvasButton">
<property name="text">
<string>View extent in map canvas</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="mAtlasCheckBox">
<property name="title">
<string>Controlled by atlas</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<property name="collapsed" stdset="0">
<bool>true</bool>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">composeritem</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QRadioButton" name="mAtlasMarginRadio">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Margin around feature</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
<widget class="QgsSpinBox" name="mAtlasMarginSpinBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string>%</string>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="value">
<number>10</number>
</property>
</widget>
</item>
<item>
<widget class="QgsPropertyOverrideButton" name="mAtlasMarginDDBtn">
<property name="text">
<string>…</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QRadioButton" name="mAtlasPredefinedScaleRadio">
<property name="toolTip">
<string>Use one of the predefined scales of the project where the atlas feature best fits.</string>
</property>
<property name="text">
<string>Predefined scale (best fit)</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QRadioButton" name="mAtlasFixedScaleRadio">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Fixed scale</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="mGridGroupBox">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="title">
<string>Grids</string>
</property>
<property name="collapsed" stdset="0">
<bool>true</bool>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">composeritem</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QPushButton" name="mAddGridPushButton">
<property name="toolTip">
<string>Add a new grid</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../images/images.qrc">
<normaloff>:/images/themes/default/symbologyAdd.svg</normaloff>:/images/themes/default/symbologyAdd.svg</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="mRemoveGridPushButton">
<property name="toolTip">
<string>Remove selected grid</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../images/images.qrc">
<normaloff>:/images/themes/default/symbologyRemove.svg</normaloff>:/images/themes/default/symbologyRemove.svg</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="mGridUpButton">
<property name="toolTip">
<string>Move selected grid up</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../images/images.qrc">
<normaloff>:/images/themes/default/mActionArrowUp.svg</normaloff>:/images/themes/default/mActionArrowUp.svg</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="mGridDownButton">
<property name="toolTip">
<string>Move selected grid down</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../images/images.qrc">
<normaloff>:/images/themes/default/mActionArrowDown.svg</normaloff>:/images/themes/default/mActionArrowDown.svg</iconset>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QListWidget" name="mGridListWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>90</height>
</size>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_13">
<item>
<widget class="QCheckBox" name="mDrawGridCheckBox">
<property name="text">
<string>Draw grid</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="mGridPropertiesButton">
<property name="text">
<string>Modify grid...</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="mOverviewsGroupBox">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="title">
<string>Overviews</string>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">composeritem</string>
</property>
<property name="collapsed" stdset="0">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QPushButton" name="mAddOverviewPushButton">
<property name="toolTip">
<string>Add a new overview</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../images/images.qrc">
<normaloff>:/images/themes/default/symbologyAdd.svg</normaloff>:/images/themes/default/symbologyAdd.svg</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="mRemoveOverviewPushButton">
<property name="toolTip">
<string>Remove selected overview</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../images/images.qrc">
<normaloff>:/images/themes/default/symbologyRemove.svg</normaloff>:/images/themes/default/symbologyRemove.svg</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="mOverviewUpButton">
<property name="toolTip">
<string>Move selected overview up</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../images/images.qrc">
<normaloff>:/images/themes/default/mActionArrowUp.svg</normaloff>:/images/themes/default/mActionArrowUp.svg</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="mOverviewDownButton">
<property name="toolTip">
<string>Move selected overview down</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../images/images.qrc">
<normaloff>:/images/themes/default/mActionArrowDown.svg</normaloff>:/images/themes/default/mActionArrowDown.svg</iconset>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QListWidget" name="mOverviewListWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>90</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBoxBasic" name="mOverviewCheckBox">
<property name="title">
<string>Draw overview</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="syncGroup" stdset="0">
<string notr="true">composermapoverview</string>
</property>
<property name="collapsed" stdset="0">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_8" columnstretch="0,1">
<item row="0" column="0">
<widget class="QLabel" name="mOverviewFrameMapLabel">
<property name="text">
<string>Map frame</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QgsComposerItemComboBox" name="mOverviewFrameMapComboBox"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="mOverviewFrameStyleLabel">
<property name="text">
<string>Frame style</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="mOverviewFrameStyleButton">
<property name="text">
<string>Change...</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="mOverviewBlendModeLabel">
<property name="text">
<string>Blending mode</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QgsBlendModeComboBox" name="mOverviewBlendModeComboBox"/>
</item>
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="mOverviewInvertCheckbox">
<property name="text">
<string>Invert overview</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QCheckBox" name="mOverviewCenterCheckbox">
<property name="text">
<string>Center on overview</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>QgsPropertyOverrideButton</class>
<extends>QToolButton</extends>
<header>qgspropertyoverridebutton.h</header>
</customwidget>
<customwidget>
<class>QgsDoubleSpinBox</class>
<extends>QDoubleSpinBox</extends>
<header>qgsdoublespinbox.h</header>
</customwidget>
<customwidget>
<class>QgsSpinBox</class>
<extends>QSpinBox</extends>
<header>qgsspinbox.h</header>
</customwidget>
<customwidget>
<class>QgsCollapsibleGroupBoxBasic</class>
<extends>QGroupBox</extends>
<header location="global">qgscollapsiblegroupbox.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>QgsBlendModeComboBox</class>
<extends>QComboBox</extends>
<header>qgsblendmodecombobox.h</header>
</customwidget>
<customwidget>
<class>QgsScrollArea</class>
<extends>QScrollArea</extends>
<header>qgsscrollarea.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>QgsComposerItemComboBox</class>
<extends>QComboBox</extends>
<header>qgscomposeritemcombobox.h</header>
</customwidget>
<customwidget>
<class>QgsProjectionSelectionWidget</class>
<extends>QWidget</extends>
<header>qgsprojectionselectionwidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>scrollArea</tabstop>
<tabstop>groupBox</tabstop>
<tabstop>mUpdatePreviewButton</tabstop>
<tabstop>mScaleLineEdit</tabstop>
<tabstop>mScaleDDBtn</tabstop>
<tabstop>mMapRotationSpinBox</tabstop>
<tabstop>mMapRotationDDBtn</tabstop>
<tabstop>mCrsSelector</tabstop>
<tabstop>mDrawCanvasItemsCheckBox</tabstop>
<tabstop>mFollowVisibilityPresetCheckBox</tabstop>
<tabstop>mFollowVisibilityPresetCombo</tabstop>
<tabstop>mStylePresetsDDBtn</tabstop>
<tabstop>mKeepLayerListCheckBox</tabstop>
<tabstop>mLayerListFromPresetButton</tabstop>
<tabstop>mLayersDDBtn</tabstop>
<tabstop>mKeepLayerStylesCheckBox</tabstop>
<tabstop>mExtentsCheckBox</tabstop>
<tabstop>mXMinLineEdit</tabstop>
<tabstop>mXMinDDBtn</tabstop>
<tabstop>mYMinLineEdit</tabstop>
<tabstop>mYMinDDBtn</tabstop>
<tabstop>mXMaxLineEdit</tabstop>
<tabstop>mXMaxDDBtn</tabstop>
<tabstop>mYMaxLineEdit</tabstop>
<tabstop>mYMaxDDBtn</tabstop>
<tabstop>mSetToMapCanvasExtentButton</tabstop>
<tabstop>mViewExtentInCanvasButton</tabstop>
<tabstop>mAtlasCheckBox</tabstop>
<tabstop>mAtlasMarginRadio</tabstop>
<tabstop>mAtlasMarginSpinBox</tabstop>
<tabstop>mAtlasMarginDDBtn</tabstop>
<tabstop>mAtlasPredefinedScaleRadio</tabstop>
<tabstop>mAtlasFixedScaleRadio</tabstop>
<tabstop>mGridGroupBox</tabstop>
<tabstop>mAddGridPushButton</tabstop>
<tabstop>mRemoveGridPushButton</tabstop>
<tabstop>mGridUpButton</tabstop>
<tabstop>mGridDownButton</tabstop>
<tabstop>mGridListWidget</tabstop>
<tabstop>mDrawGridCheckBox</tabstop>
<tabstop>mGridPropertiesButton</tabstop>
<tabstop>mOverviewsGroupBox</tabstop>
<tabstop>mAddOverviewPushButton</tabstop>
<tabstop>mRemoveOverviewPushButton</tabstop>
<tabstop>mOverviewUpButton</tabstop>
<tabstop>mOverviewDownButton</tabstop>
<tabstop>mOverviewListWidget</tabstop>
<tabstop>mOverviewCheckBox</tabstop>
<tabstop>mOverviewFrameMapComboBox</tabstop>
<tabstop>mOverviewFrameStyleButton</tabstop>
<tabstop>mOverviewBlendModeComboBox</tabstop>
<tabstop>mOverviewInvertCheckbox</tabstop>
<tabstop>mOverviewCenterCheckbox</tabstop>
<tabstop>mDrawGridCheckBox</tabstop>
<tabstop>mGridPropertiesButton</tabstop>
</tabstops>
<resources>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
<include location="../../../images/images.qrc"/>
</resources>
<connections/>
</ui>