QgsVectorLayer3DRendererWidget::QgsVectorLayer3DRendererWidget( QgsVectorLayer *layer, QgsMapCanvas *canvas, QWidget *parent ) : QgsMapLayerConfigWidget( layer, canvas, parent ) { setPanelTitle( tr( "3D View" ) ); QVBoxLayout *layout = new QVBoxLayout( this ); chkEnabled = new QCheckBox( "Enable 3D renderer", this ); widgetStack = new QStackedWidget( this ); layout->addWidget( chkEnabled ); layout->addWidget( widgetStack ); widgetUnsupported = new QLabel( tr( "Sorry, this layer is not supported." ), this ); widgetLine = new QgsLine3DSymbolWidget( this ); widgetPoint = new QgsPoint3DSymbolWidget( this ); widgetPolygon = new QgsPolygon3DSymbolWidget( this ); widgetStack->addWidget( widgetUnsupported ); widgetStack->addWidget( widgetLine ); widgetStack->addWidget( widgetPoint ); widgetStack->addWidget( widgetPolygon ); connect( chkEnabled, &QCheckBox::clicked, this, &QgsVectorLayer3DRendererWidget::onEnabledClicked ); connect( widgetLine, &QgsLine3DSymbolWidget::changed, this, &QgsVectorLayer3DRendererWidget::widgetChanged ); connect( widgetPoint, &QgsPoint3DSymbolWidget::changed, this, &QgsVectorLayer3DRendererWidget::widgetChanged ); connect( widgetPolygon, &QgsPolygon3DSymbolWidget::changed, this, &QgsVectorLayer3DRendererWidget::widgetChanged ); }
QgsComposerShapeWidget::QgsComposerShapeWidget( QgsComposerShape* composerShape ): QgsComposerItemBaseWidget( nullptr, composerShape ), mComposerShape( composerShape ) { setupUi( this ); setPanelTitle( tr( "Shape properties" ) ); //add widget for general composer item properties QgsComposerItemWidget* itemPropertiesWidget = new QgsComposerItemWidget( this, composerShape ); //shapes don't use background or frame, since the symbol style is set through a QgsSymbolSelectorWidget itemPropertiesWidget->showBackgroundGroup( false ); itemPropertiesWidget->showFrameGroup( false ); mainLayout->addWidget( itemPropertiesWidget ); blockAllSignals( true ); //shape types mShapeComboBox->addItem( tr( "Ellipse" ) ); mShapeComboBox->addItem( tr( "Rectangle" ) ); mShapeComboBox->addItem( tr( "Triangle" ) ); setGuiElementValues(); blockAllSignals( false ); if ( mComposerShape ) { connect( mComposerShape, SIGNAL( itemChanged() ), this, SLOT( setGuiElementValues() ) ); } }
QgsSymbolV2SelectorWidget::QgsSymbolV2SelectorWidget( QgsSymbolV2* symbol, QgsStyleV2* style, const QgsVectorLayer* vl, QWidget* parent ) : QgsPanelWidget( parent ) , mAdvancedMenu( nullptr ) , mVectorLayer( vl ) , mMapCanvas( nullptr ) { #ifdef Q_OS_MAC setWindowModality( Qt::WindowModal ); #endif mStyle = style; mSymbol = symbol; mPresentWidget = nullptr; setupUi( this ); // setup icons btnAddLayer->setIcon( QIcon( QgsApplication::iconPath( "symbologyAdd.svg" ) ) ); btnRemoveLayer->setIcon( QIcon( QgsApplication::iconPath( "symbologyRemove.svg" ) ) ); QIcon iconLock; iconLock.addFile( QgsApplication::iconPath( "locked.svg" ), QSize(), QIcon::Normal, QIcon::On ); iconLock.addFile( QgsApplication::iconPath( "locked.svg" ), QSize(), QIcon::Active, QIcon::On ); iconLock.addFile( QgsApplication::iconPath( "unlocked.svg" ), QSize(), QIcon::Normal, QIcon::Off ); iconLock.addFile( QgsApplication::iconPath( "unlocked.svg" ), QSize(), QIcon::Active, QIcon::Off ); btnLock->setIcon( iconLock ); btnDuplicate->setIcon( QIcon( QgsApplication::iconPath( "mActionDuplicateLayer.svg" ) ) ); btnUp->setIcon( QIcon( QgsApplication::iconPath( "symbologyUp.svg" ) ) ); btnDown->setIcon( QIcon( QgsApplication::iconPath( "symbologyDown.svg" ) ) ); model = new QStandardItemModel( layersTree ); // Set the symbol layersTree->setModel( model ); layersTree->setHeaderHidden( true ); QItemSelectionModel* selModel = layersTree->selectionModel(); connect( selModel, SIGNAL( currentChanged( const QModelIndex&, const QModelIndex& ) ), this, SLOT( layerChanged() ) ); loadSymbol( symbol, static_cast<SymbolLayerItem*>( model->invisibleRootItem() ) ); updatePreview(); connect( btnUp, SIGNAL( clicked() ), this, SLOT( moveLayerUp() ) ); connect( btnDown, SIGNAL( clicked() ), this, SLOT( moveLayerDown() ) ); connect( btnAddLayer, SIGNAL( clicked() ), this, SLOT( addLayer() ) ); connect( btnRemoveLayer, SIGNAL( clicked() ), this, SLOT( removeLayer() ) ); connect( btnLock, SIGNAL( clicked() ), this, SLOT( lockLayer() ) ); connect( btnDuplicate, SIGNAL( clicked() ), this, SLOT( duplicateLayer() ) ); connect( this, SIGNAL( symbolModified() ), this, SIGNAL( widgetChanged() ) ); updateUi(); // set symbol as active item in the tree QModelIndex newIndex = layersTree->model()->index( 0, 0 ); layersTree->setCurrentIndex( newIndex ); setPanelTitle( tr( "Symbol selector" ) ); }
QgsEffectStackPropertiesWidget::QgsEffectStackPropertiesWidget( QgsEffectStack *stack, QWidget *parent ) : QgsPanelWidget( parent ) , mStack( stack ) , mPreviewPicture( nullptr ) { // TODO #ifdef Q_OS_MAC //setWindowModality( Qt::WindowModal ); #endif mPresentWidget = nullptr; setupUi( this ); mAddButton->setIcon( QIcon( QgsApplication::iconPath( "symbologyAdd.svg" ) ) ); mRemoveButton->setIcon( QIcon( QgsApplication::iconPath( "symbologyRemove.svg" ) ) ); mUpButton->setIcon( QIcon( QgsApplication::iconPath( "symbologyUp.svg" ) ) ); mDownButton->setIcon( QIcon( QgsApplication::iconPath( "symbologyDown.svg" ) ) ); mModel = new QStandardItemModel(); // Set the effect mEffectsList->setModel( mModel ); QItemSelectionModel* selModel = mEffectsList->selectionModel(); connect( selModel, SIGNAL( currentChanged( const QModelIndex&, const QModelIndex& ) ), this, SLOT( effectChanged() ) ); loadStack( stack ); updatePreview(); connect( mUpButton, SIGNAL( clicked() ), this, SLOT( moveEffectUp() ) ); connect( mDownButton, SIGNAL( clicked() ), this, SLOT( moveEffectDown() ) ); connect( mAddButton, SIGNAL( clicked() ), this, SLOT( addEffect() ) ); connect( mRemoveButton, SIGNAL( clicked() ), this, SLOT( removeEffect() ) ); updateUi(); // set first selected effect as active item in the tree int initialRow = 0; for ( int i = 0; i < stack->count(); ++i ) { // list shows effects in opposite order to stack if ( stack->effect( stack->count() - i - 1 )->enabled() ) { initialRow = i; break; } } QModelIndex newIndex = mEffectsList->model()->index( initialRow, 0 ); mEffectsList->setCurrentIndex( newIndex ); setPanelTitle( tr( "Effects Properties" ) ); }
QgsComposerPictureWidget::QgsComposerPictureWidget( QgsComposerPicture *picture ): QgsComposerItemBaseWidget( nullptr, picture ), mPicture( picture ), mPreviewsLoaded( false ) { setupUi( this ); setPanelTitle( tr( "Picture properties" ) ); mFillColorButton->setAllowOpacity( true ); mFillColorButton->setColorDialogTitle( tr( "Select fill color" ) ); mFillColorButton->setContext( QStringLiteral( "composer" ) ); mStrokeColorButton->setAllowOpacity( true ); mStrokeColorButton->setColorDialogTitle( tr( "Select stroke color" ) ); mStrokeColorButton->setContext( QStringLiteral( "composer" ) ); mNorthTypeComboBox->blockSignals( true ); mNorthTypeComboBox->addItem( tr( "Grid north" ), QgsComposerPicture::GridNorth ); mNorthTypeComboBox->addItem( tr( "True north" ), QgsComposerPicture::TrueNorth ); mNorthTypeComboBox->blockSignals( false ); mPictureRotationOffsetSpinBox->setClearValue( 0.0 ); mPictureRotationSpinBox->setClearValue( 0.0 ); //add widget for general composer item properties QgsComposerItemWidget *itemPropertiesWidget = new QgsComposerItemWidget( this, picture ); mainLayout->addWidget( itemPropertiesWidget ); if ( mPicture->composition() ) { mComposerMapComboBox->setComposition( mPicture->composition() ); mComposerMapComboBox->setItemType( QgsComposerItem::ComposerMap ); connect( mComposerMapComboBox, &QgsComposerItemComboBox::itemChanged, this, &QgsComposerPictureWidget::composerMapChanged ); } 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, &QgsCollapsibleGroupBoxBasic::collapsedStateChanged, this, &QgsComposerPictureWidget::loadPicturePreviews ); connect( mPicture, &QgsComposerObject::itemChanged, this, &QgsComposerPictureWidget::setGuiElementValues ); connect( mPicture, &QgsComposerPicture::pictureRotationChanged, this, &QgsComposerPictureWidget::setPicRotationSpinValue ); //connections for data defined buttons connect( mSourceDDBtn, &QgsPropertyOverrideButton::activated, mPictureLineEdit, &QLineEdit::setDisabled ); registerDataDefinedButton( mSourceDDBtn, QgsComposerObject::PictureSource ); registerDataDefinedButton( mFillColorDDBtn, QgsComposerObject::PictureSvgBackgroundColor ); registerDataDefinedButton( mStrokeColorDDBtn, QgsComposerObject::PictureSvgStrokeColor ); registerDataDefinedButton( mStrokeWidthDDBtn, QgsComposerObject::PictureSvgStrokeWidth ); }
QgsMeshLayer3DRendererWidget::QgsMeshLayer3DRendererWidget( QgsMeshLayer *layer, QgsMapCanvas *canvas, QWidget *parent ) : QgsMapLayerConfigWidget( layer, canvas, parent ) { setPanelTitle( tr( "3D View" ) ); QVBoxLayout *layout = new QVBoxLayout( this ); chkEnabled = new QCheckBox( tr( "Enable 3D Renderer" ), this ); layout->addWidget( chkEnabled ); widgetMesh = new QgsMesh3DSymbolWidget( this ); layout->addWidget( widgetMesh ); connect( chkEnabled, &QCheckBox::clicked, this, &QgsMeshLayer3DRendererWidget::onEnabledClicked ); connect( widgetMesh, &QgsMesh3DSymbolWidget::changed, this, &QgsMeshLayer3DRendererWidget::widgetChanged ); }
QgsComposerArrowWidget::QgsComposerArrowWidget( QgsComposerArrow *arrow ): QgsComposerItemBaseWidget( nullptr, arrow ), mArrow( arrow ) { setupUi( this ); connect( mStrokeWidthSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsComposerArrowWidget::mStrokeWidthSpinBox_valueChanged ); connect( mArrowHeadWidthSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsComposerArrowWidget::mArrowHeadWidthSpinBox_valueChanged ); connect( mArrowHeadFillColorButton, &QgsColorButton::colorChanged, this, &QgsComposerArrowWidget::mArrowHeadFillColorButton_colorChanged ); connect( mArrowHeadStrokeColorButton, &QgsColorButton::colorChanged, this, &QgsComposerArrowWidget::mArrowHeadStrokeColorButton_colorChanged ); connect( mDefaultMarkerRadioButton, &QRadioButton::toggled, this, &QgsComposerArrowWidget::mDefaultMarkerRadioButton_toggled ); connect( mNoMarkerRadioButton, &QRadioButton::toggled, this, &QgsComposerArrowWidget::mNoMarkerRadioButton_toggled ); connect( mSvgMarkerRadioButton, &QRadioButton::toggled, this, &QgsComposerArrowWidget::mSvgMarkerRadioButton_toggled ); connect( mStartMarkerLineEdit, &QLineEdit::textChanged, this, &QgsComposerArrowWidget::mStartMarkerLineEdit_textChanged ); connect( mEndMarkerLineEdit, &QLineEdit::textChanged, this, &QgsComposerArrowWidget::mEndMarkerLineEdit_textChanged ); connect( mStartMarkerToolButton, &QToolButton::clicked, this, &QgsComposerArrowWidget::mStartMarkerToolButton_clicked ); connect( mEndMarkerToolButton, &QToolButton::clicked, this, &QgsComposerArrowWidget::mEndMarkerToolButton_clicked ); connect( mLineStyleButton, &QPushButton::clicked, this, &QgsComposerArrowWidget::mLineStyleButton_clicked ); setPanelTitle( tr( "Arrow properties" ) ); mRadioButtonGroup = new QButtonGroup( this ); mRadioButtonGroup->addButton( mDefaultMarkerRadioButton ); mRadioButtonGroup->addButton( mNoMarkerRadioButton ); mRadioButtonGroup->addButton( mSvgMarkerRadioButton ); mRadioButtonGroup->setExclusive( true ); //disable the svg related gui elements by default mSvgMarkerRadioButton_toggled( false ); //add widget for general composer item properties QgsComposerItemWidget *itemPropertiesWidget = new QgsComposerItemWidget( this, mArrow ); mainLayout->addWidget( itemPropertiesWidget ); mArrowHeadStrokeColorButton->setColorDialogTitle( tr( "Select Arrow Head Stroke Color" ) ); mArrowHeadStrokeColorButton->setAllowOpacity( true ); mArrowHeadStrokeColorButton->setContext( QStringLiteral( "composer" ) ); mArrowHeadStrokeColorButton->setNoColorString( tr( "Transparent stroke" ) ); mArrowHeadStrokeColorButton->setShowNoColor( true ); mArrowHeadFillColorButton->setColorDialogTitle( tr( "Select Arrow Head Fill Color" ) ); mArrowHeadFillColorButton->setAllowOpacity( true ); mArrowHeadFillColorButton->setContext( QStringLiteral( "composer" ) ); mArrowHeadFillColorButton->setNoColorString( tr( "Transparent fill" ) ); mArrowHeadFillColorButton->setShowNoColor( true ); setGuiElementValues(); if ( arrow ) { connect( arrow, &QgsComposerObject::itemChanged, this, &QgsComposerArrowWidget::setGuiElementValues ); } }
QgsReportOrganizerWidget::QgsReportOrganizerWidget( QWidget *parent, QgsLayoutDesignerDialog *designer, QgsReport *report ) : QgsPanelWidget( parent ) , mReport( report ) , mDesigner( designer ) { setupUi( this ); setPanelTitle( tr( "Report" ) ); mSectionModel = new QgsReportSectionModel( mReport, this ); mViewSections->setModel( mSectionModel ); mViewSections->header()->hide(); mViewSections->expandAll(); #ifdef ENABLE_MODELTEST new ModelTest( mSectionModel, this ); #endif QVBoxLayout *vLayout = new QVBoxLayout(); vLayout->setMargin( 0 ); vLayout->setSpacing( 0 ); mSettingsFrame->setLayout( vLayout ); mViewSections->setEditTriggers( QAbstractItemView::AllEditTriggers ); QMenu *addMenu = new QMenu( mButtonAddSection ); QAction *layoutSection = new QAction( tr( "Single section" ), addMenu ); addMenu->addAction( layoutSection ); connect( layoutSection, &QAction::triggered, this, &QgsReportOrganizerWidget::addLayoutSection ); QAction *fieldGroupSection = new QAction( tr( "Field group" ), addMenu ); addMenu->addAction( fieldGroupSection ); connect( fieldGroupSection, &QAction::triggered, this, &QgsReportOrganizerWidget::addFieldGroupSection ); connect( mViewSections->selectionModel(), &QItemSelectionModel::currentChanged, this, &QgsReportOrganizerWidget::selectionChanged ); mButtonAddSection->setMenu( addMenu ); connect( mButtonRemoveSection, &QPushButton::clicked, this, &QgsReportOrganizerWidget::removeSection ); mButtonRemoveSection->setEnabled( false ); //disable until section clicked // initially select report section QModelIndex reportIndex = mSectionModel->indexForSection( report ); mViewSections->setCurrentIndex( reportIndex ); }
QgsComposerLabelWidget::QgsComposerLabelWidget( QgsComposerLabel *label ): QgsComposerItemBaseWidget( nullptr, label ), mComposerLabel( label ) { setupUi( this ); setPanelTitle( tr( "Label properties" ) ); //add widget for general composer item properties QgsComposerItemWidget *itemPropertiesWidget = new QgsComposerItemWidget( this, label ); mainLayout->addWidget( itemPropertiesWidget ); mFontColorButton->setColorDialogTitle( tr( "Select font color" ) ); mFontColorButton->setContext( QStringLiteral( "composer" ) ); mMarginXDoubleSpinBox->setClearValue( 0.0 ); mMarginYDoubleSpinBox->setClearValue( 0.0 ); if ( mComposerLabel ) { setGuiElementValues(); connect( mComposerLabel, &QgsComposerObject::itemChanged, this, &QgsComposerLabelWidget::setGuiElementValues ); } }
QgsLayoutLabelWidget::QgsLayoutLabelWidget( QgsLayoutItemLabel *label ) : QgsLayoutItemBaseWidget( nullptr, label ) , mLabel( label ) { setupUi( this ); connect( mHtmlCheckBox, &QCheckBox::stateChanged, this, &QgsLayoutLabelWidget::mHtmlCheckBox_stateChanged ); connect( mTextEdit, &QPlainTextEdit::textChanged, this, &QgsLayoutLabelWidget::mTextEdit_textChanged ); connect( mInsertExpressionButton, &QPushButton::clicked, this, &QgsLayoutLabelWidget::mInsertExpressionButton_clicked ); connect( mMarginXDoubleSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutLabelWidget::mMarginXDoubleSpinBox_valueChanged ); connect( mMarginYDoubleSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutLabelWidget::mMarginYDoubleSpinBox_valueChanged ); connect( mFontColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutLabelWidget::mFontColorButton_colorChanged ); connect( mCenterRadioButton, &QRadioButton::clicked, this, &QgsLayoutLabelWidget::mCenterRadioButton_clicked ); connect( mLeftRadioButton, &QRadioButton::clicked, this, &QgsLayoutLabelWidget::mLeftRadioButton_clicked ); connect( mRightRadioButton, &QRadioButton::clicked, this, &QgsLayoutLabelWidget::mRightRadioButton_clicked ); connect( mTopRadioButton, &QRadioButton::clicked, this, &QgsLayoutLabelWidget::mTopRadioButton_clicked ); connect( mBottomRadioButton, &QRadioButton::clicked, this, &QgsLayoutLabelWidget::mBottomRadioButton_clicked ); connect( mMiddleRadioButton, &QRadioButton::clicked, this, &QgsLayoutLabelWidget::mMiddleRadioButton_clicked ); setPanelTitle( tr( "Label properties" ) ); mFontButton->setMode( QgsFontButton::ModeQFont ); //add widget for general composer item properties mItemPropertiesWidget = new QgsLayoutItemPropertiesWidget( this, label ); mainLayout->addWidget( mItemPropertiesWidget ); mFontColorButton->setColorDialogTitle( tr( "Select Font Color" ) ); mFontColorButton->setContext( QStringLiteral( "composer" ) ); mMarginXDoubleSpinBox->setClearValue( 0.0 ); mMarginYDoubleSpinBox->setClearValue( 0.0 ); if ( mLabel ) { setGuiElementValues(); connect( mLabel, &QgsLayoutObject::changed, this, &QgsLayoutLabelWidget::setGuiElementValues ); } connect( mFontButton, &QgsFontButton::changed, this, &QgsLayoutLabelWidget::fontChanged ); connect( mJustifyRadioButton, &QRadioButton::clicked, this, &QgsLayoutLabelWidget::justifyClicked ); }
QgsComposerPolygonWidget::QgsComposerPolygonWidget( QgsComposerPolygon* composerPolygon ): QgsComposerItemBaseWidget( nullptr, composerPolygon ) , mComposerPolygon( composerPolygon ) { setupUi( this ); setPanelTitle( tr( "Polygon properties" ) ); //add widget for general composer item properties QgsComposerItemWidget* itemPropertiesWidget = new QgsComposerItemWidget( this, composerPolygon ); //shapes don't use background or frame, since the symbol style is set through a QgsSymbolSelectorWidget itemPropertiesWidget->showBackgroundGroup( false ); itemPropertiesWidget->showFrameGroup( false ); mainLayout->addWidget( itemPropertiesWidget ); // update style icon updatePolygonStyle(); if ( mComposerPolygon ) { connect( mComposerPolygon, SIGNAL( itemChanged() ), this, SLOT( setGuiElementValues() ) ); } }
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 ); }
QgsComposerScaleBarWidget::QgsComposerScaleBarWidget( QgsComposerScaleBar *scaleBar ): QgsComposerItemBaseWidget( nullptr, scaleBar ), mComposerScaleBar( scaleBar ) { setupUi( this ); connect( mHeightSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsComposerScaleBarWidget::mHeightSpinBox_valueChanged ); connect( mLineWidthSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsComposerScaleBarWidget::mLineWidthSpinBox_valueChanged ); connect( mSegmentSizeSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsComposerScaleBarWidget::mSegmentSizeSpinBox_valueChanged ); connect( mSegmentsLeftSpinBox, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsComposerScaleBarWidget::mSegmentsLeftSpinBox_valueChanged ); connect( mNumberOfSegmentsSpinBox, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsComposerScaleBarWidget::mNumberOfSegmentsSpinBox_valueChanged ); connect( mUnitLabelLineEdit, &QLineEdit::textChanged, this, &QgsComposerScaleBarWidget::mUnitLabelLineEdit_textChanged ); connect( mMapUnitsPerBarUnitSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsComposerScaleBarWidget::mMapUnitsPerBarUnitSpinBox_valueChanged ); connect( mFontColorButton, &QgsColorButton::colorChanged, this, &QgsComposerScaleBarWidget::mFontColorButton_colorChanged ); connect( mFillColorButton, &QgsColorButton::colorChanged, this, &QgsComposerScaleBarWidget::mFillColorButton_colorChanged ); connect( mFillColor2Button, &QgsColorButton::colorChanged, this, &QgsComposerScaleBarWidget::mFillColor2Button_colorChanged ); connect( mStrokeColorButton, &QgsColorButton::colorChanged, this, &QgsComposerScaleBarWidget::mStrokeColorButton_colorChanged ); connect( mStyleComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsComposerScaleBarWidget::mStyleComboBox_currentIndexChanged ); connect( mLabelBarSpaceSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsComposerScaleBarWidget::mLabelBarSpaceSpinBox_valueChanged ); connect( mBoxSizeSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsComposerScaleBarWidget::mBoxSizeSpinBox_valueChanged ); connect( mAlignmentComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsComposerScaleBarWidget::mAlignmentComboBox_currentIndexChanged ); connect( mUnitsComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsComposerScaleBarWidget::mUnitsComboBox_currentIndexChanged ); connect( mLineJoinStyleCombo, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsComposerScaleBarWidget::mLineJoinStyleCombo_currentIndexChanged ); connect( mLineCapStyleCombo, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsComposerScaleBarWidget::mLineCapStyleCombo_currentIndexChanged ); connect( mMinWidthSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsComposerScaleBarWidget::mMinWidthSpinBox_valueChanged ); connect( mMaxWidthSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsComposerScaleBarWidget::mMaxWidthSpinBox_valueChanged ); setPanelTitle( tr( "Scalebar properties" ) ); mFontButton->setMode( QgsFontButton::ModeQFont ); connectUpdateSignal(); //add widget for general composer item properties QgsComposerItemWidget *itemPropertiesWidget = new QgsComposerItemWidget( this, scaleBar ); mainLayout->addWidget( itemPropertiesWidget ); mSegmentSizeRadioGroup.addButton( mFixedSizeRadio ); mSegmentSizeRadioGroup.addButton( mFitWidthRadio ); connect( &mSegmentSizeRadioGroup, static_cast < void ( QButtonGroup::* )( QAbstractButton * ) > ( &QButtonGroup::buttonClicked ), this, &QgsComposerScaleBarWidget::segmentSizeRadioChanged ); blockMemberSignals( true ); //style combo box mStyleComboBox->insertItem( 0, tr( "Single Box" ) ); mStyleComboBox->insertItem( 1, tr( "Double Box" ) ); mStyleComboBox->insertItem( 2, tr( "Line Ticks Middle" ) ); mStyleComboBox->insertItem( 3, tr( "Line Ticks Down" ) ); mStyleComboBox->insertItem( 4, tr( "Line Ticks Up" ) ); mStyleComboBox->insertItem( 5, tr( "Numeric" ) ); //alignment combo box mAlignmentComboBox->insertItem( 0, tr( "Left" ) ); mAlignmentComboBox->insertItem( 1, tr( "Middle" ) ); mAlignmentComboBox->insertItem( 2, tr( "Right" ) ); //units combo box mUnitsComboBox->insertItem( 0, tr( "Map units" ), QgsUnitTypes::DistanceUnknownUnit ); mUnitsComboBox->insertItem( 1, tr( "Meters" ), QgsUnitTypes::DistanceMeters ); mUnitsComboBox->insertItem( 2, tr( "Feet" ), QgsUnitTypes::DistanceFeet ); mUnitsComboBox->insertItem( 3, tr( "Nautical Miles" ), QgsUnitTypes::DistanceNauticalMiles ); mFillColorButton->setColorDialogTitle( tr( "Select Fill Color" ) ); mFillColorButton->setAllowOpacity( true ); mFillColorButton->setContext( QStringLiteral( "composer" ) ); mFillColorButton->setNoColorString( tr( "Transparent Fill" ) ); mFillColorButton->setShowNoColor( true ); mFillColor2Button->setColorDialogTitle( tr( "Select Alternate Fill Color" ) ); mFillColor2Button->setAllowOpacity( true ); mFillColor2Button->setContext( QStringLiteral( "composer" ) ); mFillColor2Button->setNoColorString( tr( "Transparent fill" ) ); mFillColor2Button->setShowNoColor( true ); mFontColorButton->setColorDialogTitle( tr( "Select Font Color" ) ); mFontColorButton->setAllowOpacity( true ); mFontColorButton->setContext( QStringLiteral( "composer" ) ); mStrokeColorButton->setColorDialogTitle( tr( "Select Line Color" ) ); mStrokeColorButton->setAllowOpacity( true ); mStrokeColorButton->setContext( QStringLiteral( "composer" ) ); mStrokeColorButton->setNoColorString( tr( "Transparent line" ) ); mStrokeColorButton->setShowNoColor( true ); QgsComposition *scaleBarComposition = mComposerScaleBar->composition(); if ( scaleBarComposition ) { mMapItemComboBox->setComposition( scaleBarComposition ); mMapItemComboBox->setItemType( QgsComposerItem::ComposerMap ); } connect( mMapItemComboBox, &QgsComposerItemComboBox::itemChanged, this, &QgsComposerScaleBarWidget::composerMapChanged ); registerDataDefinedButton( mFillColorDDBtn, QgsComposerObject::ScalebarFillColor ); registerDataDefinedButton( mFillColor2DDBtn, QgsComposerObject::ScalebarFillColor2 ); registerDataDefinedButton( mLineColorDDBtn, QgsComposerObject::ScalebarLineColor ); registerDataDefinedButton( mLineWidthDDBtn, QgsComposerObject::ScalebarLineWidth ); blockMemberSignals( false ); setGuiElements(); //set the GUI elements to the state of scaleBar connect( mFontButton, &QgsFontButton::changed, this, &QgsComposerScaleBarWidget::fontChanged ); }
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 ); }
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 ); }
QgsComposerMapGridWidget::QgsComposerMapGridWidget( QgsComposerMapGrid* mapGrid, QgsComposerMap* composerMap ) : QgsComposerItemBaseWidget( nullptr, mapGrid ) , mComposerMap( composerMap ) , mComposerMapGrid( mapGrid ) { setupUi( this ); setPanelTitle( tr( "Map grid properties" ) ); blockAllSignals( true ); mGridTypeComboBox->insertItem( 0, tr( "Solid" ) ); mGridTypeComboBox->insertItem( 1, tr( "Cross" ) ); mGridTypeComboBox->insertItem( 2, tr( "Markers" ) ); mGridTypeComboBox->insertItem( 3, tr( "Frame and annotations only" ) ); insertFrameDisplayEntries( mFrameDivisionsLeftComboBox ); insertFrameDisplayEntries( mFrameDivisionsRightComboBox ); insertFrameDisplayEntries( mFrameDivisionsTopComboBox ); insertFrameDisplayEntries( mFrameDivisionsBottomComboBox ); mAnnotationFormatComboBox->addItem( tr( "Decimal" ), QgsComposerMapGrid::Decimal ); mAnnotationFormatComboBox->addItem( tr( "Decimal with suffix" ), QgsComposerMapGrid::DecimalWithSuffix ); mAnnotationFormatComboBox->addItem( tr( "Degree, minute" ), QgsComposerMapGrid::DegreeMinuteNoSuffix ); mAnnotationFormatComboBox->addItem( tr( "Degree, minute with suffix" ), QgsComposerMapGrid::DegreeMinute ); mAnnotationFormatComboBox->addItem( tr( "Degree, minute aligned" ), QgsComposerMapGrid::DegreeMinutePadded ); mAnnotationFormatComboBox->addItem( tr( "Degree, minute, second" ), QgsComposerMapGrid::DegreeMinuteSecondNoSuffix ); mAnnotationFormatComboBox->addItem( tr( "Degree, minute, second with suffix" ), QgsComposerMapGrid::DegreeMinuteSecond ); mAnnotationFormatComboBox->addItem( tr( "Degree, minute, second aligned" ), QgsComposerMapGrid::DegreeMinuteSecondPadded ); mAnnotationFormatComboBox->addItem( tr( "Custom" ), QgsComposerMapGrid::CustomFormat ); mAnnotationFontColorButton->setColorDialogTitle( tr( "Select font color" ) ); mAnnotationFontColorButton->setAllowAlpha( true ); mAnnotationFontColorButton->setContext( "composer" ); insertAnnotationDisplayEntries( mAnnotationDisplayLeftComboBox ); insertAnnotationDisplayEntries( mAnnotationDisplayRightComboBox ); insertAnnotationDisplayEntries( mAnnotationDisplayTopComboBox ); insertAnnotationDisplayEntries( mAnnotationDisplayBottomComboBox ); insertAnnotationPositionEntries( mAnnotationPositionLeftComboBox ); insertAnnotationPositionEntries( mAnnotationPositionRightComboBox ); insertAnnotationPositionEntries( mAnnotationPositionTopComboBox ); insertAnnotationPositionEntries( mAnnotationPositionBottomComboBox ); insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxLeft ); insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxRight ); insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxTop ); insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxBottom ); mGridFramePenColorButton->setColorDialogTitle( tr( "Select grid frame color" ) ); mGridFramePenColorButton->setAllowAlpha( true ); mGridFramePenColorButton->setContext( "composer" ); mGridFramePenColorButton->setNoColorString( tr( "Transparent frame" ) ); mGridFramePenColorButton->setShowNoColor( true ); mGridFrameFill1ColorButton->setColorDialogTitle( tr( "Select grid frame fill color" ) ); mGridFrameFill1ColorButton->setAllowAlpha( true ); mGridFrameFill1ColorButton->setContext( "composer" ); mGridFrameFill1ColorButton->setNoColorString( tr( "Transparent fill" ) ); mGridFrameFill1ColorButton->setShowNoColor( true ); mGridFrameFill2ColorButton->setColorDialogTitle( tr( "Select grid frame fill color" ) ); mGridFrameFill2ColorButton->setAllowAlpha( true ); mGridFrameFill2ColorButton->setContext( "composer" ); mGridFrameFill2ColorButton->setNoColorString( tr( "Transparent fill" ) ); mGridFrameFill2ColorButton->setShowNoColor( true ); //set initial state of frame style controls toggleFrameControls( false, false, false ); updateGuiElements(); blockAllSignals( false ); }
QgsSymbolSelectorWidget::QgsSymbolSelectorWidget( QgsSymbol *symbol, QgsStyle *style, QgsVectorLayer *vl, QWidget *parent ) : QgsPanelWidget( parent ) , mVectorLayer( vl ) { #ifdef Q_OS_MAC setWindowModality( Qt::WindowModal ); #endif mStyle = style; mSymbol = symbol; mPresentWidget = nullptr; setupUi( this ); this->layout()->setContentsMargins( 0, 0, 0, 0 ); // setup icons btnAddLayer->setIcon( QIcon( QgsApplication::iconPath( "symbologyAdd.svg" ) ) ); btnRemoveLayer->setIcon( QIcon( QgsApplication::iconPath( "symbologyRemove.svg" ) ) ); QIcon iconLock; iconLock.addFile( QgsApplication::iconPath( QStringLiteral( "locked.svg" ) ), QSize(), QIcon::Normal, QIcon::On ); iconLock.addFile( QgsApplication::iconPath( QStringLiteral( "locked.svg" ) ), QSize(), QIcon::Active, QIcon::On ); iconLock.addFile( QgsApplication::iconPath( QStringLiteral( "unlocked.svg" ) ), QSize(), QIcon::Normal, QIcon::Off ); iconLock.addFile( QgsApplication::iconPath( QStringLiteral( "unlocked.svg" ) ), QSize(), QIcon::Active, QIcon::Off ); btnLock->setIcon( iconLock ); btnDuplicate->setIcon( QIcon( QgsApplication::iconPath( "mActionDuplicateLayer.svg" ) ) ); btnUp->setIcon( QIcon( QgsApplication::iconPath( "mActionArrowUp.svg" ) ) ); btnDown->setIcon( QIcon( QgsApplication::iconPath( "mActionArrowDown.svg" ) ) ); model = new QStandardItemModel( layersTree ); // Set the symbol layersTree->setModel( model ); layersTree->setHeaderHidden( true ); //get first feature from layer for previews if ( mVectorLayer ) { QgsFeatureIterator it = mVectorLayer->getFeatures( QgsFeatureRequest().setLimit( 1 ) ); it.nextFeature( mPreviewFeature ); mPreviewExpressionContext.appendScopes( QgsExpressionContextUtils::globalProjectLayerScopes( mVectorLayer ) ); mPreviewExpressionContext.setFeature( mPreviewFeature ); } else { mPreviewExpressionContext.appendScopes( QgsExpressionContextUtils::globalProjectLayerScopes( nullptr ) ); } QItemSelectionModel *selModel = layersTree->selectionModel(); connect( selModel, &QItemSelectionModel::currentChanged, this, &QgsSymbolSelectorWidget::layerChanged ); loadSymbol( symbol, static_cast<SymbolLayerItem *>( model->invisibleRootItem() ) ); updatePreview(); connect( btnUp, &QAbstractButton::clicked, this, &QgsSymbolSelectorWidget::moveLayerUp ); connect( btnDown, &QAbstractButton::clicked, this, &QgsSymbolSelectorWidget::moveLayerDown ); connect( btnAddLayer, &QAbstractButton::clicked, this, &QgsSymbolSelectorWidget::addLayer ); connect( btnRemoveLayer, &QAbstractButton::clicked, this, &QgsSymbolSelectorWidget::removeLayer ); connect( btnLock, &QAbstractButton::clicked, this, &QgsSymbolSelectorWidget::lockLayer ); connect( btnDuplicate, &QAbstractButton::clicked, this, &QgsSymbolSelectorWidget::duplicateLayer ); connect( this, &QgsSymbolSelectorWidget::symbolModified, this, &QgsPanelWidget::widgetChanged ); updateUi(); // set symbol as active item in the tree QModelIndex newIndex = layersTree->model()->index( 0, 0 ); layersTree->setCurrentIndex( newIndex ); setPanelTitle( tr( "Symbol Selector" ) ); connect( QgsApplication::svgCache(), &QgsSvgCache::remoteSvgFetched, this, [ = ] { // when a remote svg has been fetched, update the widget's previews // this is required if the symbol utilizes remote svgs, and the current previews // have been generated using the temporary "downloading" svg. In this case // we require the preview to be regenerated to use the correct fetched // svg symbolChanged(); updatePreview(); } ); }
QgsDataDefinedSizeLegendWidget::QgsDataDefinedSizeLegendWidget( const QgsDataDefinedSizeLegend *ddsLegend, const QgsProperty &ddSize, QgsMarkerSymbol *overrideSymbol, QgsMapCanvas *canvas, QWidget *parent ) : QgsPanelWidget( parent ) , mSizeProperty( ddSize ) , mMapCanvas( canvas ) { setupUi( this ); setPanelTitle( tr( "Data-defined size legend" ) ); QgsMarkerSymbol *symbol = nullptr; if ( !ddsLegend ) { radDisabled->setChecked( true ); } else { if ( ddsLegend->legendType() == QgsDataDefinedSizeLegend::LegendSeparated ) radSeparated->setChecked( true ); else radCollapsed->setChecked( true ); if ( ddsLegend->verticalAlignment() == QgsDataDefinedSizeLegend::AlignBottom ) cboAlignSymbols->setCurrentIndex( 0 ); else cboAlignSymbols->setCurrentIndex( 1 ); symbol = ddsLegend->symbol() ? ddsLegend->symbol()->clone() : nullptr; // may be null (undefined) } if ( overrideSymbol ) { symbol = overrideSymbol; // takes ownership mOverrideSymbol = true; } if ( !symbol ) { symbol = QgsMarkerSymbol::createSimple( QgsStringMap() ); } mSourceSymbol.reset( symbol ); btnChangeSymbol->setEnabled( !mOverrideSymbol ); QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( mSourceSymbol.get(), btnChangeSymbol->iconSize() ); btnChangeSymbol->setIcon( icon ); editTitle->setText( ddsLegend ? ddsLegend->title() : QString() ); mSizeClassesModel = new QStandardItemModel( viewSizeClasses ); mSizeClassesModel->setHorizontalHeaderLabels( QStringList() << tr( "Value" ) << tr( "Label" ) ); mSizeClassesModel->setSortRole( Qt::UserRole + 1 ); if ( ddsLegend ) { groupManualSizeClasses->setChecked( !ddsLegend->classes().isEmpty() ); Q_FOREACH ( const QgsDataDefinedSizeLegend::SizeClass &sc, ddsLegend->classes() ) { QStandardItem *item = new QStandardItem( QString::number( sc.size ) ); item->setData( sc.size ); QStandardItem *itemLabel = new QStandardItem( sc.label ); mSizeClassesModel->appendRow( QList<QStandardItem *>() << item << itemLabel ); } mSizeClassesModel->sort( 0 ); } connect( btnAddClass, &QToolButton::clicked, this, &QgsDataDefinedSizeLegendWidget::addSizeClass ); connect( btnRemoveClass, &QToolButton::clicked, this, &QgsDataDefinedSizeLegendWidget::removeSizeClass ); viewSizeClasses->setItemDelegateForColumn( 0, new SizeClassDelegate( viewSizeClasses ) ); viewSizeClasses->setModel( mSizeClassesModel ); connect( mSizeClassesModel, &QStandardItemModel::dataChanged, this, &QgsDataDefinedSizeLegendWidget::onSizeClassesChanged ); // prepare layer and model to preview legend mPreviewLayer = new QgsVectorLayer( "Point?crs=EPSG:4326", "Preview", "memory" ); mPreviewTree = new QgsLayerTree; mPreviewLayerNode = mPreviewTree->addLayer( mPreviewLayer ); // node owned by the tree mPreviewModel = new QgsLayerTreeModel( mPreviewTree ); if ( canvas ) mPreviewModel->setLegendMapViewData( canvas->mapUnitsPerPixel(), canvas->mapSettings().outputDpi(), canvas->scale() ); viewLayerTree->setModel( mPreviewModel ); connect( cboAlignSymbols, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), [ = ] { emit widgetChanged(); } ); connect( radDisabled, &QRadioButton::clicked, this, &QgsPanelWidget::widgetChanged ); connect( radSeparated, &QRadioButton::clicked, this, &QgsPanelWidget::widgetChanged ); connect( radCollapsed, &QRadioButton::clicked, this, &QgsPanelWidget::widgetChanged ); connect( groupManualSizeClasses, &QGroupBox::clicked, this, &QgsPanelWidget::widgetChanged ); connect( btnChangeSymbol, &QPushButton::clicked, this, &QgsDataDefinedSizeLegendWidget::changeSymbol ); connect( editTitle, &QLineEdit::textChanged, this, &QgsPanelWidget::widgetChanged ); connect( this, &QgsPanelWidget::widgetChanged, this, &QgsDataDefinedSizeLegendWidget::updatePreview ); updatePreview(); }
QgsLayoutMapGridWidget::QgsLayoutMapGridWidget( QgsLayoutItemMapGrid *mapGrid, QgsLayoutItemMap *map ) : QgsLayoutItemBaseWidget( nullptr, mapGrid ) , mMap( map ) , mMapGrid( mapGrid ) { setupUi( this ); mFrameStyleComboBox->addItem( tr( "No Frame" ), QgsLayoutItemMapGrid::NoFrame ); mFrameStyleComboBox->addItem( tr( "Zebra" ), QgsLayoutItemMapGrid::Zebra ); mFrameStyleComboBox->addItem( tr( "Zebra (Nautical)" ), QgsLayoutItemMapGrid::ZebraNautical ); mFrameStyleComboBox->addItem( tr( "Interior Ticks" ), QgsLayoutItemMapGrid::InteriorTicks ); mFrameStyleComboBox->addItem( tr( "Exterior Ticks" ), QgsLayoutItemMapGrid::ExteriorTicks ); mFrameStyleComboBox->addItem( tr( "Interior and Exterior Ticks" ), QgsLayoutItemMapGrid::InteriorExteriorTicks ); mFrameStyleComboBox->addItem( tr( "Line Border" ), QgsLayoutItemMapGrid::LineBorder ); mFrameStyleComboBox->addItem( tr( "Line Border (Nautical)" ), QgsLayoutItemMapGrid::LineBorderNautical ); mGridFrameMarginSpinBox->setShowClearButton( true ); mGridFrameMarginSpinBox->setClearValue( 0 ); connect( mIntervalXSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsLayoutMapGridWidget::mIntervalXSpinBox_editingFinished ); connect( mIntervalYSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsLayoutMapGridWidget::mIntervalYSpinBox_editingFinished ); connect( mOffsetXSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mOffsetXSpinBox_valueChanged ); connect( mOffsetYSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mOffsetYSpinBox_valueChanged ); connect( mCrossWidthSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mCrossWidthSpinBox_valueChanged ); connect( mFrameWidthSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mFrameWidthSpinBox_valueChanged ); connect( mGridFrameMarginSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mGridFrameMarginSpinBox_valueChanged ); connect( mFrameStyleComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameStyleComboBox_currentIndexChanged ); connect( mGridFramePenSizeSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mGridFramePenSizeSpinBox_valueChanged ); connect( mGridFramePenColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutMapGridWidget::mGridFramePenColorButton_colorChanged ); connect( mGridFrameFill1ColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutMapGridWidget::mGridFrameFill1ColorButton_colorChanged ); connect( mGridFrameFill2ColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutMapGridWidget::mGridFrameFill2ColorButton_colorChanged ); connect( mGridTypeComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mGridTypeComboBox_currentIndexChanged ); connect( mMapGridCRSButton, &QPushButton::clicked, this, &QgsLayoutMapGridWidget::mMapGridCRSButton_clicked ); connect( mMapGridUnitComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mMapGridUnitComboBox_currentIndexChanged ); connect( mGridBlendComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mGridBlendComboBox_currentIndexChanged ); connect( mCheckGridLeftSide, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::mCheckGridLeftSide_toggled ); connect( mCheckGridRightSide, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::mCheckGridRightSide_toggled ); connect( mCheckGridTopSide, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::mCheckGridTopSide_toggled ); connect( mCheckGridBottomSide, &QCheckBox::toggled, this, &QgsLayoutMapGridWidget::mCheckGridBottomSide_toggled ); connect( mFrameDivisionsLeftComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameDivisionsLeftComboBox_currentIndexChanged ); connect( mFrameDivisionsRightComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameDivisionsRightComboBox_currentIndexChanged ); connect( mFrameDivisionsTopComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameDivisionsTopComboBox_currentIndexChanged ); connect( mFrameDivisionsBottomComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mFrameDivisionsBottomComboBox_currentIndexChanged ); connect( mDrawAnnotationGroupBox, &QgsCollapsibleGroupBoxBasic::toggled, this, &QgsLayoutMapGridWidget::mDrawAnnotationGroupBox_toggled ); connect( mAnnotationFormatButton, &QToolButton::clicked, this, &QgsLayoutMapGridWidget::mAnnotationFormatButton_clicked ); connect( mAnnotationDisplayLeftComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDisplayLeftComboBox_currentIndexChanged ); connect( mAnnotationDisplayRightComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDisplayRightComboBox_currentIndexChanged ); connect( mAnnotationDisplayTopComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDisplayTopComboBox_currentIndexChanged ); connect( mAnnotationDisplayBottomComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDisplayBottomComboBox_currentIndexChanged ); connect( mAnnotationPositionLeftComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationPositionLeftComboBox_currentIndexChanged ); connect( mAnnotationPositionRightComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationPositionRightComboBox_currentIndexChanged ); connect( mAnnotationPositionTopComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationPositionTopComboBox_currentIndexChanged ); connect( mAnnotationPositionBottomComboBox, static_cast<void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationPositionBottomComboBox_currentIndexChanged ); connect( mAnnotationDirectionComboBoxLeft, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxLeft_currentIndexChanged ); connect( mAnnotationDirectionComboBoxRight, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxRight_currentIndexChanged ); connect( mAnnotationDirectionComboBoxTop, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxTop_currentIndexChanged ); connect( mAnnotationDirectionComboBoxBottom, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationDirectionComboBoxBottom_currentIndexChanged ); connect( mAnnotationFormatComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsLayoutMapGridWidget::mAnnotationFormatComboBox_currentIndexChanged ); connect( mCoordinatePrecisionSpinBox, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mCoordinatePrecisionSpinBox_valueChanged ); connect( mDistanceToMapFrameSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutMapGridWidget::mDistanceToMapFrameSpinBox_valueChanged ); connect( mAnnotationFontColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutMapGridWidget::mAnnotationFontColorButton_colorChanged ); setPanelTitle( tr( "Map Grid Properties" ) ); mAnnotationFontButton->setMode( QgsFontButton::ModeQFont ); blockAllSignals( true ); mGridTypeComboBox->insertItem( 0, tr( "Solid" ) ); mGridTypeComboBox->insertItem( 1, tr( "Cross" ) ); mGridTypeComboBox->insertItem( 2, tr( "Markers" ) ); mGridTypeComboBox->insertItem( 3, tr( "Frame and annotations only" ) ); insertFrameDisplayEntries( mFrameDivisionsLeftComboBox ); insertFrameDisplayEntries( mFrameDivisionsRightComboBox ); insertFrameDisplayEntries( mFrameDivisionsTopComboBox ); insertFrameDisplayEntries( mFrameDivisionsBottomComboBox ); mAnnotationFormatComboBox->addItem( tr( "Decimal" ), QgsLayoutItemMapGrid::Decimal ); mAnnotationFormatComboBox->addItem( tr( "Decimal with suffix" ), QgsLayoutItemMapGrid::DecimalWithSuffix ); mAnnotationFormatComboBox->addItem( tr( "Degree, minute" ), QgsLayoutItemMapGrid::DegreeMinuteNoSuffix ); mAnnotationFormatComboBox->addItem( tr( "Degree, minute with suffix" ), QgsLayoutItemMapGrid::DegreeMinute ); mAnnotationFormatComboBox->addItem( tr( "Degree, minute aligned" ), QgsLayoutItemMapGrid::DegreeMinutePadded ); mAnnotationFormatComboBox->addItem( tr( "Degree, minute, second" ), QgsLayoutItemMapGrid::DegreeMinuteSecondNoSuffix ); mAnnotationFormatComboBox->addItem( tr( "Degree, minute, second with suffix" ), QgsLayoutItemMapGrid::DegreeMinuteSecond ); mAnnotationFormatComboBox->addItem( tr( "Degree, minute, second aligned" ), QgsLayoutItemMapGrid::DegreeMinuteSecondPadded ); mAnnotationFormatComboBox->addItem( tr( "Custom" ), QgsLayoutItemMapGrid::CustomFormat ); mAnnotationFontColorButton->setColorDialogTitle( tr( "Select Font Color" ) ); mAnnotationFontColorButton->setAllowOpacity( true ); mAnnotationFontColorButton->setContext( QStringLiteral( "composer" ) ); insertAnnotationDisplayEntries( mAnnotationDisplayLeftComboBox ); insertAnnotationDisplayEntries( mAnnotationDisplayRightComboBox ); insertAnnotationDisplayEntries( mAnnotationDisplayTopComboBox ); insertAnnotationDisplayEntries( mAnnotationDisplayBottomComboBox ); insertAnnotationPositionEntries( mAnnotationPositionLeftComboBox ); insertAnnotationPositionEntries( mAnnotationPositionRightComboBox ); insertAnnotationPositionEntries( mAnnotationPositionTopComboBox ); insertAnnotationPositionEntries( mAnnotationPositionBottomComboBox ); insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxLeft ); insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxRight ); insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxTop ); insertAnnotationDirectionEntries( mAnnotationDirectionComboBoxBottom ); mGridFramePenColorButton->setColorDialogTitle( tr( "Select Grid Frame Color" ) ); mGridFramePenColorButton->setAllowOpacity( true ); mGridFramePenColorButton->setContext( QStringLiteral( "composer" ) ); mGridFramePenColorButton->setNoColorString( tr( "Transparent Frame" ) ); mGridFramePenColorButton->setShowNoColor( true ); mGridFrameFill1ColorButton->setColorDialogTitle( tr( "Select Grid Frame Fill Color" ) ); mGridFrameFill1ColorButton->setAllowOpacity( true ); mGridFrameFill1ColorButton->setContext( QStringLiteral( "composer" ) ); mGridFrameFill1ColorButton->setNoColorString( tr( "Transparent Fill" ) ); mGridFrameFill1ColorButton->setShowNoColor( true ); mGridFrameFill2ColorButton->setColorDialogTitle( tr( "Select Grid Frame Fill Color" ) ); mGridFrameFill2ColorButton->setAllowOpacity( true ); mGridFrameFill2ColorButton->setContext( QStringLiteral( "composer" ) ); mGridFrameFill2ColorButton->setNoColorString( tr( "Transparent Fill" ) ); mGridFrameFill2ColorButton->setShowNoColor( true ); mGridLineStyleButton->setSymbolType( QgsSymbol::Line ); mGridMarkerStyleButton->setSymbolType( QgsSymbol::Marker ); //set initial state of frame style controls toggleFrameControls( false, false, false ); updateGuiElements(); blockAllSignals( false ); connect( mAnnotationFontButton, &QgsFontButton::changed, this, &QgsLayoutMapGridWidget::annotationFontChanged ); connect( mGridLineStyleButton, &QgsSymbolButton::changed, this, &QgsLayoutMapGridWidget::lineSymbolChanged ); connect( mGridMarkerStyleButton, &QgsSymbolButton::changed, this, &QgsLayoutMapGridWidget::markerSymbolChanged ); mGridLineStyleButton->registerExpressionContextGenerator( mMapGrid ); mGridLineStyleButton->setLayer( coverageLayer() ); mGridMarkerStyleButton->registerExpressionContextGenerator( mMapGrid ); mGridMarkerStyleButton->setLayer( coverageLayer() ); if ( mMap->layout() ) { connect( &mMap->layout()->reportContext(), &QgsLayoutReportContext::layerChanged, mGridLineStyleButton, &QgsSymbolButton::setLayer ); connect( &mMap->layout()->reportContext(), &QgsLayoutReportContext::layerChanged, mGridMarkerStyleButton, &QgsSymbolButton::setLayer ); } }
QgsLayoutPolylineWidget::QgsLayoutPolylineWidget( QgsLayoutItemPolyline *polyline ) : QgsLayoutItemBaseWidget( nullptr, polyline ) , mPolyline( polyline ) { setupUi( this ); setPanelTitle( tr( "Polyline Properties" ) ); connect( mStrokeWidthSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutPolylineWidget::arrowStrokeWidthChanged ); connect( mArrowHeadWidthSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsLayoutPolylineWidget::arrowHeadWidthChanged ); connect( mArrowHeadFillColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutPolylineWidget::arrowHeadFillColorChanged ); connect( mArrowHeadStrokeColorButton, &QgsColorButton::colorChanged, this, &QgsLayoutPolylineWidget::arrowHeadStrokeColorChanged ); connect( mRadioStartArrow, &QRadioButton::toggled, this, &QgsLayoutPolylineWidget::startArrowHeadToggled ); connect( mRadioStartNoMarker, &QRadioButton::toggled, this, &QgsLayoutPolylineWidget::startNoMarkerToggled ); connect( mRadioStartSVG, &QRadioButton::toggled, this, &QgsLayoutPolylineWidget::startSvgMarkerToggled ); connect( mRadioEndArrow, &QRadioButton::toggled, this, &QgsLayoutPolylineWidget::endArrowHeadToggled ); connect( mRadioEndNoMarker, &QRadioButton::toggled, this, &QgsLayoutPolylineWidget::endNoMarkerToggled ); connect( mRadioEndSvg, &QRadioButton::toggled, this, &QgsLayoutPolylineWidget::endSvgMarkerToggled ); connect( mStartMarkerLineEdit, &QLineEdit::textChanged, this, &QgsLayoutPolylineWidget::mStartMarkerLineEdit_textChanged ); connect( mEndMarkerLineEdit, &QLineEdit::textChanged, this, &QgsLayoutPolylineWidget::mEndMarkerLineEdit_textChanged ); connect( mStartMarkerToolButton, &QToolButton::clicked, this, &QgsLayoutPolylineWidget::mStartMarkerToolButton_clicked ); connect( mEndMarkerToolButton, &QToolButton::clicked, this, &QgsLayoutPolylineWidget::mEndMarkerToolButton_clicked ); setPanelTitle( tr( "Arrow Properties" ) ); QButtonGroup *startMarkerGroup = new QButtonGroup( this ); startMarkerGroup->addButton( mRadioStartNoMarker ); startMarkerGroup->addButton( mRadioStartArrow ); startMarkerGroup->addButton( mRadioStartSVG ); startMarkerGroup->setExclusive( true ); QButtonGroup *endMarkerGroup = new QButtonGroup( this ); endMarkerGroup->addButton( mRadioEndNoMarker ); endMarkerGroup->addButton( mRadioEndArrow ); endMarkerGroup->addButton( mRadioEndSvg ); endMarkerGroup->setExclusive( true ); //disable the svg related gui elements by default enableStartSvgInputElements( false ); enableEndSvgInputElements( false ); mArrowHeadStrokeColorButton->setColorDialogTitle( tr( "Select Arrow Head Stroke Color" ) ); mArrowHeadStrokeColorButton->setAllowOpacity( true ); mArrowHeadStrokeColorButton->setContext( QStringLiteral( "composer" ) ); mArrowHeadStrokeColorButton->setNoColorString( tr( "Transparent stroke" ) ); mArrowHeadStrokeColorButton->setShowNoColor( true ); mArrowHeadFillColorButton->setColorDialogTitle( tr( "Select Arrow Head Fill Color" ) ); mArrowHeadFillColorButton->setAllowOpacity( true ); mArrowHeadFillColorButton->setContext( QStringLiteral( "composer" ) ); mArrowHeadFillColorButton->setNoColorString( tr( "Transparent fill" ) ); mArrowHeadFillColorButton->setShowNoColor( true ); //add widget for general composer item properties mItemPropertiesWidget = new QgsLayoutItemPropertiesWidget( this, polyline ); //shapes don't use background or frame, since the symbol style is set through a QgsSymbolSelectorWidget mItemPropertiesWidget->showBackgroundGroup( false ); mItemPropertiesWidget->showFrameGroup( false ); mainLayout->addWidget( mItemPropertiesWidget ); mLineStyleButton->setSymbolType( QgsSymbol::Line ); connect( mLineStyleButton, &QgsSymbolButton::changed, this, &QgsLayoutPolylineWidget::symbolChanged ); if ( mPolyline ) { connect( mPolyline, &QgsLayoutObject::changed, this, &QgsLayoutPolylineWidget::setGuiElementValues ); mLineStyleButton->registerExpressionContextGenerator( mPolyline ); } setGuiElementValues(); mLineStyleButton->registerExpressionContextGenerator( mPolyline ); mLineStyleButton->setLayer( coverageLayer() ); if ( mPolyline->layout() ) { connect( &mPolyline->layout()->reportContext(), &QgsLayoutReportContext::layerChanged, mLineStyleButton, &QgsSymbolButton::setLayer ); } }
QgsComposerAttributeTableWidget::QgsComposerAttributeTableWidget( QgsComposerAttributeTableV2* table, QgsComposerFrame* frame ) : QgsComposerItemBaseWidget( nullptr, table ) , mComposerTable( table ) , mFrame( frame ) { setupUi( this ); setPanelTitle( tr( "Table properties" ) ); 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 ); mWrapBehaviourComboBox->addItem( tr( "Truncate text" ), QgsComposerTableV2::TruncateText ); mWrapBehaviourComboBox->addItem( tr( "Wrap text" ), QgsComposerTableV2::WrapText ); 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* ) ) ); mComposerMapComboBox->setComposition( mComposerTable->composition() ); mComposerMapComboBox->setItemType( QgsComposerItem::ComposerMap ); connect( mComposerMapComboBox, SIGNAL( itemChanged( QgsComposerItem* ) ), this, SLOT( composerMapChanged( const QgsComposerItem* ) ) ); 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(); 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 ); } }