void QgsComposerAttributeTableWidget::atlasToggled() { //display/hide atlas options in source combobox depending on atlas status bool atlasEnabled = atlasComposition() && atlasComposition()->enabled(); toggleAtlasSpecificControls( atlasEnabled ); mSourceComboBox->blockSignals( true ); mSourceComboBox->setCurrentIndex( mSourceComboBox->findData( mComposerTable->source() ) ); mSourceComboBox->blockSignals( false ); if ( !atlasEnabled && mComposerTable && mComposerTable->filterToAtlasFeature() ) { mComposerTable->setFilterToAtlasFeature( false ); } }
QgsComposerPictureWidget::QgsComposerPictureWidget( QgsComposerPicture* picture ): QgsComposerItemBaseWidget( 0, picture ), mPicture( picture ), mPreviewsLoaded( false ) { setupUi( this ); //add widget for general composer item properties QgsComposerItemWidget* itemPropertiesWidget = new QgsComposerItemWidget( this, picture ); mainLayout->addWidget( itemPropertiesWidget ); setGuiElementValues(); mPreviewsLoadingLabel->hide(); mPreviewListWidget->setIconSize( QSize( 30, 30 ) ); // mSearchDirectoriesGroupBox is a QgsCollapsibleGroupBoxBasic, so its collapsed state should not be saved/restored mSearchDirectoriesGroupBox->setCollapsed( true ); // setup connection for loading previews on first expansion of group box connect( mSearchDirectoriesGroupBox, SIGNAL( collapsedStateChanged( bool ) ), this, SLOT( loadPicturePreviews( bool ) ) ); connect( mPicture, SIGNAL( itemChanged() ), this, SLOT( setGuiElementValues() ) ); connect( mPicture, SIGNAL( pictureRotationChanged( double ) ), this, SLOT( setPicRotationSpinValue( double ) ) ); QgsAtlasComposition* atlas = atlasComposition(); if ( atlas ) { // repopulate data defined buttons if atlas layer changes connect( atlas, SIGNAL( coverageLayerChanged( QgsVectorLayer* ) ), this, SLOT( populateDataDefinedButtons() ) ); connect( atlas, SIGNAL( toggled( bool ) ), this, SLOT( populateDataDefinedButtons() ) ); } //connections for data defined buttons connect( mSourceDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mSourceDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mSourceDDBtn, SIGNAL( dataDefinedActivated( bool ) ), mPictureLineEdit, SLOT( setDisabled( bool ) ) ); }
QgsVectorLayer* QgsComposerItemBaseWidget::atlasCoverageLayer() const { QgsAtlasComposition* atlasMap = atlasComposition(); if ( atlasMap && atlasMap->enabled() ) { return atlasMap->coverageLayer(); } return 0; }
QgsComposerHtmlWidget::QgsComposerHtmlWidget( QgsComposerHtml* html, QgsComposerFrame* frame ) : QgsComposerItemBaseWidget( 0, html ) , mHtml( html ) , mFrame( frame ) { setupUi( this ); //setup html editor mHtmlEditor = new QgsCodeEditorHTML( this ); connect( mHtmlEditor, SIGNAL( textChanged() ), this, SLOT( htmlEditorChanged() ) ); htmlEditorLayout->addWidget( mHtmlEditor ); //setup stylesheet editor mStylesheetEditor = new QgsCodeEditorCSS( this ); connect( mStylesheetEditor, SIGNAL( textChanged() ), this, SLOT( stylesheetEditorChanged() ) ); stylesheetEditorLayout->addWidget( mStylesheetEditor ); blockSignals( true ); mResizeModeComboBox->addItem( tr( "Use existing frames" ), QgsComposerMultiFrame::UseExistingFrames ); mResizeModeComboBox->addItem( tr( "Extend to next page" ), QgsComposerMultiFrame::ExtendToNextPage ); mResizeModeComboBox->addItem( tr( "Repeat on every page" ), QgsComposerMultiFrame::RepeatOnEveryPage ); mResizeModeComboBox->addItem( tr( "Repeat until finished" ), QgsComposerMultiFrame::RepeatUntilFinished ); blockSignals( false ); setGuiElementValues(); if ( mHtml ) { QObject::connect( mHtml, SIGNAL( changed() ), this, SLOT( setGuiElementValues() ) ); QgsAtlasComposition* atlas = atlasComposition(); if ( atlas ) { // repopulate data defined buttons if atlas layer changes connect( atlas, SIGNAL( coverageLayerChanged( QgsVectorLayer* ) ), this, SLOT( populateDataDefinedButtons() ) ); connect( atlas, SIGNAL( toggled( bool ) ), this, SLOT( populateDataDefinedButtons() ) ); } } //embed widget for general options if ( mFrame ) { //add widget for general composer item properties QgsComposerItemWidget* itemPropertiesWidget = new QgsComposerItemWidget( this, mFrame ); mainLayout->addWidget( itemPropertiesWidget ); } //connections for data defined buttons connect( mUrlDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mUrlDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mUrlDDBtn, SIGNAL( dataDefinedActivated( bool ) ), mUrlLineEdit, SLOT( setDisabled( bool ) ) ); }
QgsComposerAttributeTableWidget::QgsComposerAttributeTableWidget( QgsComposerAttributeTableV2* table, QgsComposerFrame* frame ) : QgsComposerItemBaseWidget( 0, table ) , mComposerTable( table ) , mFrame( frame ) { setupUi( this ); blockAllSignals( true ); mResizeModeComboBox->addItem( tr( "Use existing frames" ), QgsComposerMultiFrame::UseExistingFrames ); mResizeModeComboBox->addItem( tr( "Extend to next page" ), QgsComposerMultiFrame::ExtendToNextPage ); mResizeModeComboBox->addItem( tr( "Repeat until finished" ), QgsComposerMultiFrame::RepeatUntilFinished ); mEmptyModeComboBox->addItem( tr( "Draw headers only" ), QgsComposerTableV2::HeadersOnly ); mEmptyModeComboBox->addItem( tr( "Hide entire table" ), QgsComposerTableV2::HideTable ); mEmptyModeComboBox->addItem( tr( "Show set message" ), QgsComposerTableV2::ShowMessage ); bool atlasEnabled = atlasComposition() && atlasComposition()->enabled(); mSourceComboBox->addItem( tr( "Layer features" ), QgsComposerAttributeTableV2::LayerAttributes ); toggleAtlasSpecificControls( atlasEnabled ); //update relations combo when relations modified in project connect( QgsProject::instance()->relationManager(), SIGNAL( changed() ), this, SLOT( updateRelationsCombo() ) ); mLayerComboBox->setFilters( QgsMapLayerProxyModel::VectorLayer ); connect( mLayerComboBox, SIGNAL( layerChanged( QgsMapLayer* ) ), this, SLOT( changeLayer( QgsMapLayer* ) ) ); refreshMapComboBox(); mHeaderFontColorButton->setColorDialogTitle( tr( "Select header font color" ) ); mHeaderFontColorButton->setAllowAlpha( true ); mHeaderFontColorButton->setContext( "composer" ); mContentFontColorButton->setColorDialogTitle( tr( "Select content font color" ) ); mContentFontColorButton->setAllowAlpha( true ); mContentFontColorButton->setContext( "composer" ); mGridColorButton->setColorDialogTitle( tr( "Select grid color" ) ); mGridColorButton->setAllowAlpha( true ); mGridColorButton->setContext( "composer" ); mGridColorButton->setDefaultColor( Qt::black ); mBackgroundColorButton->setColorDialogTitle( tr( "Select background color" ) ); mBackgroundColorButton->setAllowAlpha( true ); mBackgroundColorButton->setContext( "composer" ); mBackgroundColorButton->setShowNoColor( true ); mBackgroundColorButton->setNoColorString( tr( "No background" ) ); updateGuiElements(); on_mComposerMapComboBox_activated( mComposerMapComboBox->currentIndex() ); if ( mComposerTable ) { QObject::connect( mComposerTable, SIGNAL( changed() ), this, SLOT( updateGuiElements() ) ); QgsAtlasComposition* atlas = atlasComposition(); if ( atlas ) { // repopulate relations combo box if atlas layer changes connect( atlas, SIGNAL( coverageLayerChanged( QgsVectorLayer* ) ), this, SLOT( updateRelationsCombo() ) ); connect( atlas, SIGNAL( toggled( bool ) ), this, SLOT( atlasToggled() ) ); } } //embed widget for general options if ( mFrame ) { //add widget for general composer item properties QgsComposerItemWidget* itemPropertiesWidget = new QgsComposerItemWidget( this, mFrame ); mainLayout->addWidget( itemPropertiesWidget ); } }
} setGuiElementValues(); mPreviewsLoadingLabel->hide(); mPreviewListWidget->setIconSize( QSize( 30, 30 ) ); // mSearchDirectoriesGroupBox is a QgsCollapsibleGroupBoxBasic, so its collapsed state should not be saved/restored mSearchDirectoriesGroupBox->setCollapsed( true ); // setup connection for loading previews on first expansion of group box connect( mSearchDirectoriesGroupBox, SIGNAL( collapsedStateChanged( bool ) ), this, SLOT( loadPicturePreviews( bool ) ) ); connect( mPicture, SIGNAL( itemChanged() ), this, SLOT( setGuiElementValues() ) ); connect( mPicture, SIGNAL( pictureRotationChanged( double ) ), this, SLOT( setPicRotationSpinValue( double ) ) ); QgsAtlasComposition* atlas = atlasComposition(); if ( atlas ) { // repopulate data defined buttons if atlas layer changes connect( atlas, SIGNAL( coverageLayerChanged( QgsVectorLayer* ) ), this, SLOT( populateDataDefinedButtons() ) ); connect( atlas, SIGNAL( toggled( bool ) ), this, SLOT( populateDataDefinedButtons() ) ); } //connections for data defined buttons connect( mSourceDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mSourceDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mSourceDDBtn, SIGNAL( dataDefinedActivated( bool ) ), mPictureLineEdit, SLOT( setDisabled( bool ) ) ); } QgsComposerPictureWidget::~QgsComposerPictureWidget()
QgsComposerMapWidget::QgsComposerMapWidget( QgsComposerMap *composerMap ) : QgsComposerItemBaseWidget( nullptr, composerMap ) , mComposerMap( composerMap ) { setupUi( this ); setPanelTitle( tr( "Map properties" ) ); mMapRotationSpinBox->setClearValue( 0 ); //add widget for general composer item properties QgsComposerItemWidget *itemPropertiesWidget = new QgsComposerItemWidget( this, composerMap ); mainLayout->addWidget( itemPropertiesWidget ); mScaleLineEdit->setValidator( new QDoubleValidator( mScaleLineEdit ) ); mXMinLineEdit->setValidator( new QDoubleValidator( mXMinLineEdit ) ); mXMaxLineEdit->setValidator( new QDoubleValidator( mXMaxLineEdit ) ); mYMinLineEdit->setValidator( new QDoubleValidator( mYMinLineEdit ) ); mYMaxLineEdit->setValidator( new QDoubleValidator( mYMaxLineEdit ) ); blockAllSignals( true ); mCrsSelector->setOptionVisible( QgsProjectionSelectionWidget::CrsNotSet, true ); mCrsSelector->setNotSetText( tr( "Use project CRS" ) ); // follow preset combo mFollowVisibilityPresetCombo->setModel( new QStringListModel( mFollowVisibilityPresetCombo ) ); connect( mFollowVisibilityPresetCombo, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsComposerMapWidget::followVisibilityPresetSelected ); connect( QgsProject::instance()->mapThemeCollection(), &QgsMapThemeCollection::mapThemesChanged, this, &QgsComposerMapWidget::onMapThemesChanged ); onMapThemesChanged(); // keep layers from preset button QMenu *menuKeepLayers = new QMenu( this ); mLayerListFromPresetButton->setMenu( menuKeepLayers ); mLayerListFromPresetButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionShowAllLayers.svg" ) ) ); mLayerListFromPresetButton->setToolTip( tr( "Set layer list from a map theme" ) ); connect( menuKeepLayers, &QMenu::aboutToShow, this, &QgsComposerMapWidget::aboutToShowKeepLayersVisibilityPresetsMenu ); if ( composerMap ) { mLabel->setText( tr( "Map %1" ).arg( composerMap->id() ) ); connect( composerMap, &QgsComposerObject::itemChanged, this, &QgsComposerMapWidget::setGuiElementValues ); QgsAtlasComposition *atlas = atlasComposition(); if ( atlas ) { connect( atlas, &QgsAtlasComposition::coverageLayerChanged, this, &QgsComposerMapWidget::atlasLayerChanged ); connect( atlas, &QgsAtlasComposition::toggled, this, &QgsComposerMapWidget::compositionAtlasToggled ); compositionAtlasToggled( atlas->enabled() ); } mOverviewFrameMapComboBox->setComposition( composerMap->composition() ); mOverviewFrameMapComboBox->setItemType( QgsComposerItem::ComposerMap ); mOverviewFrameMapComboBox->setExceptedItemList( QList< QgsComposerItem * >() << composerMap ); connect( mOverviewFrameMapComboBox, &QgsComposerItemComboBox::itemChanged, this, &QgsComposerMapWidget::overviewMapChanged ); } connect( mCrsSelector, &QgsProjectionSelectionWidget::crsChanged, this, &QgsComposerMapWidget::mapCrsChanged ); registerDataDefinedButton( mScaleDDBtn, QgsComposerObject::MapScale ); registerDataDefinedButton( mMapRotationDDBtn, QgsComposerObject::MapRotation ); registerDataDefinedButton( mXMinDDBtn, QgsComposerObject::MapXMin ); registerDataDefinedButton( mYMinDDBtn, QgsComposerObject::MapYMin ); registerDataDefinedButton( mXMaxDDBtn, QgsComposerObject::MapXMax ); registerDataDefinedButton( mYMaxDDBtn, QgsComposerObject::MapYMax ); registerDataDefinedButton( mAtlasMarginDDBtn, QgsComposerObject::MapAtlasMargin ); registerDataDefinedButton( mStylePresetsDDBtn, QgsComposerObject::MapStylePreset ); registerDataDefinedButton( mLayersDDBtn, QgsComposerObject::MapLayers ); updateGuiElements(); loadGridEntries(); loadOverviewEntries(); connect( mMapRotationSpinBox, static_cast < void ( QgsDoubleSpinBox::* )( double ) > ( &QgsDoubleSpinBox::valueChanged ), this, &QgsComposerMapWidget::rotationChanged ); blockAllSignals( false ); }
bool QgsComposition::loadFromTemplate( const QDomDocument& doc, QMap<QString, QString>* substitutionMap, bool addUndoCommands ) { deleteAndRemoveMultiFrames(); //delete all items and emit itemRemoved signal QList<QGraphicsItem *> itemList = items(); QList<QGraphicsItem *>::iterator itemIter = itemList.begin(); for ( ; itemIter != itemList.end(); ++itemIter ) { QgsComposerItem* cItem = dynamic_cast<QgsComposerItem*>( *itemIter ); if ( cItem ) { removeItem( cItem ); emit itemRemoved( cItem ); delete cItem; } } mItemZList.clear(); mPages.clear(); mUndoStack.clear(); QDomDocument importDoc; if ( substitutionMap ) { QString xmlString = doc.toString(); QMap<QString, QString>::const_iterator sIt = substitutionMap->constBegin(); for ( ; sIt != substitutionMap->constEnd(); ++sIt ) { xmlString = xmlString.replace( "[" + sIt.key() + "]", encodeStringForXML( sIt.value() ) ); } QString errorMsg; int errorLine, errorColumn; if ( !importDoc.setContent( xmlString, &errorMsg, &errorLine, &errorColumn ) ) { return false; } } else { importDoc = doc; } //read general settings QDomElement compositionElem = importDoc.documentElement().firstChildElement( "Composition" ); if ( compositionElem.isNull() ) { return false; } bool ok = readXML( compositionElem, importDoc ); if ( !ok ) { return false; } //addItemsFromXML addItemsFromXML( importDoc.documentElement(), importDoc, 0, addUndoCommands, 0 ); // read atlas parameters QDomElement atlasElem = importDoc.documentElement().firstChildElement( "Atlas" ); atlasComposition().readXML( atlasElem, importDoc ); return true; }
QgsLayoutMapWidget::QgsLayoutMapWidget( QgsLayoutItemMap *item ) : QgsLayoutItemBaseWidget( nullptr, item ) , mMapItem( item ) { setupUi( this ); connect( mScaleLineEdit, &QLineEdit::editingFinished, this, &QgsLayoutMapWidget::mScaleLineEdit_editingFinished ); connect( mSetToMapCanvasExtentButton, &QPushButton::clicked, this, &QgsLayoutMapWidget::mSetToMapCanvasExtentButton_clicked ); connect( mViewExtentInCanvasButton, &QPushButton::clicked, this, &QgsLayoutMapWidget::mViewExtentInCanvasButton_clicked ); connect( mUpdatePreviewButton, &QPushButton::clicked, this, &QgsLayoutMapWidget::mUpdatePreviewButton_clicked ); connect( mFollowVisibilityPresetCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutMapWidget::mFollowVisibilityPresetCheckBox_stateChanged ); connect( mKeepLayerListCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutMapWidget::mKeepLayerListCheckBox_stateChanged ); connect( mKeepLayerStylesCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutMapWidget::mKeepLayerStylesCheckBox_stateChanged ); connect( mDrawCanvasItemsCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutMapWidget::mDrawCanvasItemsCheckBox_stateChanged ); connect( mOverviewBlendModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapWidget::mOverviewBlendModeComboBox_currentIndexChanged ); connect( mOverviewInvertCheckbox, &QCheckBox::toggled, this, &QgsLayoutMapWidget::mOverviewInvertCheckbox_toggled ); connect( mOverviewCenterCheckbox, &QCheckBox::toggled, this, &QgsLayoutMapWidget::mOverviewCenterCheckbox_toggled ); connect( mXMinLineEdit, &QLineEdit::editingFinished, this, &QgsLayoutMapWidget::mXMinLineEdit_editingFinished ); connect( mXMaxLineEdit, &QLineEdit::editingFinished, this, &QgsLayoutMapWidget::mXMaxLineEdit_editingFinished ); connect( mYMinLineEdit, &QLineEdit::editingFinished, this, &QgsLayoutMapWidget::mYMinLineEdit_editingFinished ); connect( mYMaxLineEdit, &QLineEdit::editingFinished, this, &QgsLayoutMapWidget::mYMaxLineEdit_editingFinished ); connect( mAtlasMarginRadio, &QRadioButton::toggled, this, &QgsLayoutMapWidget::mAtlasMarginRadio_toggled ); connect( mAtlasCheckBox, &QgsCollapsibleGroupBoxBasic::toggled, this, &QgsLayoutMapWidget::mAtlasCheckBox_toggled ); connect( mAtlasMarginSpinBox, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsLayoutMapWidget::mAtlasMarginSpinBox_valueChanged ); connect( mAtlasFixedScaleRadio, &QRadioButton::toggled, this, &QgsLayoutMapWidget::mAtlasFixedScaleRadio_toggled ); connect( mAtlasPredefinedScaleRadio, &QRadioButton::toggled, this, &QgsLayoutMapWidget::mAtlasPredefinedScaleRadio_toggled ); connect( mAddGridPushButton, &QPushButton::clicked, this, &QgsLayoutMapWidget::mAddGridPushButton_clicked ); connect( mRemoveGridPushButton, &QPushButton::clicked, this, &QgsLayoutMapWidget::mRemoveGridPushButton_clicked ); connect( mGridUpButton, &QPushButton::clicked, this, &QgsLayoutMapWidget::mGridUpButton_clicked ); connect( mGridDownButton, &QPushButton::clicked, this, &QgsLayoutMapWidget::mGridDownButton_clicked ); connect( mDrawGridCheckBox, &QCheckBox::toggled, this, &QgsLayoutMapWidget::mDrawGridCheckBox_toggled ); connect( mGridListWidget, &QListWidget::currentItemChanged, this, &QgsLayoutMapWidget::mGridListWidget_currentItemChanged ); connect( mGridListWidget, &QListWidget::itemChanged, this, &QgsLayoutMapWidget::mGridListWidget_itemChanged ); connect( mGridPropertiesButton, &QPushButton::clicked, this, &QgsLayoutMapWidget::mGridPropertiesButton_clicked ); connect( mAddOverviewPushButton, &QPushButton::clicked, this, &QgsLayoutMapWidget::mAddOverviewPushButton_clicked ); connect( mRemoveOverviewPushButton, &QPushButton::clicked, this, &QgsLayoutMapWidget::mRemoveOverviewPushButton_clicked ); connect( mOverviewUpButton, &QPushButton::clicked, this, &QgsLayoutMapWidget::mOverviewUpButton_clicked ); connect( mOverviewDownButton, &QPushButton::clicked, this, &QgsLayoutMapWidget::mOverviewDownButton_clicked ); connect( mOverviewCheckBox, &QgsCollapsibleGroupBoxBasic::toggled, this, &QgsLayoutMapWidget::mOverviewCheckBox_toggled ); connect( mOverviewListWidget, &QListWidget::currentItemChanged, this, &QgsLayoutMapWidget::mOverviewListWidget_currentItemChanged ); connect( mOverviewListWidget, &QListWidget::itemChanged, this, &QgsLayoutMapWidget::mOverviewListWidget_itemChanged ); setPanelTitle( tr( "Map properties" ) ); mMapRotationSpinBox->setClearValue( 0 ); //add widget for general composer item properties mItemPropertiesWidget = new QgsLayoutItemPropertiesWidget( this, item ); mainLayout->addWidget( mItemPropertiesWidget ); mScaleLineEdit->setValidator( new QDoubleValidator( mScaleLineEdit ) ); mXMinLineEdit->setValidator( new QDoubleValidator( mXMinLineEdit ) ); mXMaxLineEdit->setValidator( new QDoubleValidator( mXMaxLineEdit ) ); mYMinLineEdit->setValidator( new QDoubleValidator( mYMinLineEdit ) ); mYMaxLineEdit->setValidator( new QDoubleValidator( mYMaxLineEdit ) ); blockAllSignals( true ); mCrsSelector->setOptionVisible( QgsProjectionSelectionWidget::CrsNotSet, true ); mCrsSelector->setNotSetText( tr( "Use project CRS" ) ); mOverviewFrameStyleButton->setSymbolType( QgsSymbol::Fill ); // follow preset combo mFollowVisibilityPresetCombo->setModel( new QStringListModel( mFollowVisibilityPresetCombo ) ); connect( mFollowVisibilityPresetCombo, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapWidget::followVisibilityPresetSelected ); connect( QgsProject::instance()->mapThemeCollection(), &QgsMapThemeCollection::mapThemesChanged, this, &QgsLayoutMapWidget::onMapThemesChanged ); onMapThemesChanged(); // keep layers from preset button QMenu *menuKeepLayers = new QMenu( this ); mLayerListFromPresetButton->setMenu( menuKeepLayers ); mLayerListFromPresetButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionShowAllLayers.svg" ) ) ); mLayerListFromPresetButton->setToolTip( tr( "Set layer list from a map theme" ) ); connect( menuKeepLayers, &QMenu::aboutToShow, this, &QgsLayoutMapWidget::aboutToShowKeepLayersVisibilityPresetsMenu ); mOverviewFrameMapComboBox->setItemType( QgsLayoutItemRegistry::LayoutMap ); if ( item ) { connect( item, &QgsLayoutObject::changed, this, &QgsLayoutMapWidget::updateGuiElements ); #if 0 //TODO QgsAtlasComposition *atlas = atlasComposition(); if ( atlas ) { connect( atlas, &QgsAtlasComposition::coverageLayerChanged, this, &QgsLayoutMapWidget::atlasLayerChanged ); connect( atlas, &QgsAtlasComposition::toggled, this, &QgsLayoutMapWidget::compositionAtlasToggled ); compositionAtlasToggled( atlas->enabled() ); } #endif mOverviewFrameMapComboBox->setCurrentLayout( item->layout() ); mOverviewFrameStyleButton->registerExpressionContextGenerator( item ); } connect( mOverviewFrameMapComboBox, &QgsLayoutItemComboBox::itemChanged, this, &QgsLayoutMapWidget::overviewMapChanged ); connect( mCrsSelector, &QgsProjectionSelectionWidget::crsChanged, this, &QgsLayoutMapWidget::mapCrsChanged ); connect( mOverviewFrameStyleButton, &QgsSymbolButton::changed, this, &QgsLayoutMapWidget::overviewSymbolChanged ); registerDataDefinedButton( mScaleDDBtn, QgsLayoutObject::MapScale ); registerDataDefinedButton( mMapRotationDDBtn, QgsLayoutObject::MapRotation ); registerDataDefinedButton( mXMinDDBtn, QgsLayoutObject::MapXMin ); registerDataDefinedButton( mYMinDDBtn, QgsLayoutObject::MapYMin ); registerDataDefinedButton( mXMaxDDBtn, QgsLayoutObject::MapXMax ); registerDataDefinedButton( mYMaxDDBtn, QgsLayoutObject::MapYMax ); registerDataDefinedButton( mAtlasMarginDDBtn, QgsLayoutObject::MapAtlasMargin ); registerDataDefinedButton( mStylePresetsDDBtn, QgsLayoutObject::MapStylePreset ); registerDataDefinedButton( mLayersDDBtn, QgsLayoutObject::MapLayers ); updateGuiElements(); loadGridEntries(); loadOverviewEntries(); connect( mMapRotationSpinBox, static_cast < void ( QgsDoubleSpinBox::* )( double ) > ( &QgsDoubleSpinBox::valueChanged ), this, &QgsLayoutMapWidget::rotationChanged ); blockAllSignals( false ); }
QgsComposerItemWidget::QgsComposerItemWidget( QWidget* parent, QgsComposerItem* item ) : QgsComposerItemBaseWidget( parent, item ) , mItem( item ) , mFreezeXPosSpin( false ) , mFreezeYPosSpin( false ) , mFreezeWidthSpin( false ) , mFreezeHeightSpin( false ) , mFreezePageSpin( false ) { setupUi( this ); //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 ); setValuesForGuiElements(); connect( mItem->composition(), SIGNAL( paperSizeChanged() ), this, SLOT( setValuesForGuiPositionElements() ) ); connect( mItem, SIGNAL( sizeChanged() ), this, SLOT( setValuesForGuiPositionElements() ) ); connect( mItem, SIGNAL( itemChanged() ), this, SLOT( setValuesForGuiNonPositionElements() ) ); connect( mTransparencySlider, SIGNAL( valueChanged( int ) ), mTransparencySpnBx, SLOT( setValue( int ) ) ); QgsExpressionContext* context = mItem->createExpressionContext(); mVariableEditor->setContext( context ); mVariableEditor->setEditableScopeIndex( context->scopeCount() - 1 ); delete context; connect( mVariableEditor, SIGNAL( scopeChanged() ), this, SLOT( variablesChanged() ) ); //connect atlas signals to data defined buttons QgsAtlasComposition* atlas = atlasComposition(); if ( atlas ) { //repopulate data defined buttons if atlas layer changes connect( atlas, SIGNAL( coverageLayerChanged( QgsVectorLayer* ) ), this, SLOT( populateDataDefinedButtons() ) ); connect( atlas, SIGNAL( toggled( bool ) ), this, SLOT( populateDataDefinedButtons() ) ); } //connect data defined buttons connect( mXPositionDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mXPositionDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mYPositionDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mYPositionDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mWidthDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mWidthDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mHeightDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mHeightDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mItemRotationDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mItemRotationDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mTransparencyDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mTransparencyDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mBlendModeDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mBlendModeDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mExcludePrintsDDBtn, SIGNAL( dataDefinedChanged( const QString& ) ), this, SLOT( updateDataDefinedProperty() ) ); connect( mExcludePrintsDDBtn, SIGNAL( dataDefinedActivated( bool ) ), this, SLOT( updateDataDefinedProperty() ) ); }
QgsComposerMapWidget::QgsComposerMapWidget( QgsComposerMap* composerMap ) : QgsComposerItemBaseWidget( nullptr, composerMap ) , mComposerMap( composerMap ) { setupUi( this ); setPanelTitle( tr( "Map properties" ) ); //add widget for general composer item properties QgsComposerItemWidget* itemPropertiesWidget = new QgsComposerItemWidget( this, composerMap ); mainLayout->addWidget( itemPropertiesWidget ); mScaleLineEdit->setValidator( new QDoubleValidator( mScaleLineEdit ) ); mXMinLineEdit->setValidator( new QDoubleValidator( mXMinLineEdit ) ); mXMaxLineEdit->setValidator( new QDoubleValidator( mXMaxLineEdit ) ); mYMinLineEdit->setValidator( new QDoubleValidator( mYMinLineEdit ) ); mYMaxLineEdit->setValidator( new QDoubleValidator( mYMaxLineEdit ) ); blockAllSignals( true ); mPreviewModeComboBox->insertItem( 0, tr( "Cache" ) ); mPreviewModeComboBox->insertItem( 1, tr( "Render" ) ); mPreviewModeComboBox->insertItem( 2, tr( "Rectangle" ) ); // follow preset combo mFollowVisibilityPresetCombo->setModel( new QStringListModel( mFollowVisibilityPresetCombo ) ); connect( mFollowVisibilityPresetCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( followVisibilityPresetSelected( int ) ) ); connect( QgsProject::instance()->mapThemeCollection(), SIGNAL( presetsChanged() ), this, SLOT( onPresetsChanged() ) ); onPresetsChanged(); // keep layers from preset button QMenu* menuKeepLayers = new QMenu( this ); mLayerListFromPresetButton->setMenu( menuKeepLayers ); mLayerListFromPresetButton->setIcon( QgsApplication::getThemeIcon( "/mActionShowAllLayers.svg" ) ); mLayerListFromPresetButton->setToolTip( tr( "Set layer list from a map theme" ) ); connect( menuKeepLayers, SIGNAL( aboutToShow() ), this, SLOT( aboutToShowKeepLayersVisibilityPresetsMenu() ) ); if ( composerMap ) { mLabel->setText( tr( "Map %1" ).arg( composerMap->id() ) ); connect( composerMap, SIGNAL( itemChanged() ), this, SLOT( setGuiElementValues() ) ); QgsAtlasComposition* atlas = atlasComposition(); if ( atlas ) { connect( atlas, SIGNAL( coverageLayerChanged( QgsVectorLayer* ) ), this, SLOT( atlasLayerChanged( QgsVectorLayer* ) ) ); connect( atlas, SIGNAL( toggled( bool ) ), this, SLOT( compositionAtlasToggled( bool ) ) ); compositionAtlasToggled( atlas->enabled() ); } mOverviewFrameMapComboBox->setComposition( composerMap->composition() ); mOverviewFrameMapComboBox->setItemType( QgsComposerItem::ComposerMap ); mOverviewFrameMapComboBox->setExceptedItemList( QList< QgsComposerItem* >() << composerMap ); connect( mOverviewFrameMapComboBox, SIGNAL( itemChanged( QgsComposerItem* ) ), this, SLOT( overviewMapChanged( QgsComposerItem* ) ) ); } updateGuiElements(); loadGridEntries(); loadOverviewEntries(); populateDataDefinedButtons(); blockAllSignals( false ); }