28 #include "qgssettings.h"
43 #include <QButtonGroup>
44 #include <QMessageBox>
48 , mMapCanvas( mapCanvas )
52 setWidgetMode(
Text );
59 , mMapCanvas( mapCanvas )
66 setWidgetMode( mode );
69 void QgsTextFormatWidget::initWidget()
73 mGeometryGeneratorGroupBox->setCollapsed(
true );
75 connect( mShapeSVGPathLineEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged );
76 connect( mFontSizeSpinBox,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontSizeSpinBox_valueChanged );
77 connect( mFontFamilyCmbBx, &QFontComboBox::currentFontChanged,
this, &QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged );
78 connect( mFontStyleComboBox, &QComboBox::currentTextChanged,
this, &QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged );
79 connect( mFontUnderlineBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontUnderlineBtn_toggled );
80 connect( mFontStrikethroughBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontStrikethroughBtn_toggled );
81 connect( mFontWordSpacingSpinBox,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged );
82 connect( mFontLetterSpacingSpinBox,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged );
84 connect( mFontMinPixelSpinBox,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged );
85 connect( mFontMaxPixelSpinBox,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged );
90 connect( mShapeTypeCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged );
91 connect( mShapeRotationCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged );
92 connect( mShapeSVGParamsBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGParamsBtn_clicked );
93 connect( mShapeSVGSelectorBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked );
94 connect( mPreviewTextEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mPreviewTextEdit_textChanged );
95 connect( mPreviewTextBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mPreviewTextBtn_clicked );
97 connect( mDirectSymbLeftToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked );
98 connect( mDirectSymbRightToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked );
99 connect( chkLineOrientationDependent, &QCheckBox::toggled,
this, &QgsTextFormatWidget::chkLineOrientationDependent_toggled );
100 connect( mToolButtonConfigureSubstitutes, &QToolButton::clicked,
this, &QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked );
101 connect( mKerningCheckBox, &QCheckBox::toggled,
this, &QgsTextFormatWidget::kerningToggled );
111 mPreviewTextBtn->setIconSize( QSize( iconSize16, iconSize16 ) );
112 mPointOffsetAboveLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
113 mPointOffsetAbove->setIconSize( QSize( iconSize32, iconSize18 ) );
114 mPointOffsetAboveRight->setIconSize( QSize( iconSize32, iconSize18 ) );
115 mPointOffsetLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
116 mPointOffsetOver ->setIconSize( QSize( iconSize32, iconSize18 ) );
117 mPointOffsetRight->setIconSize( QSize( iconSize32, iconSize18 ) );
118 mPointOffsetBelowLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
119 mPointOffsetBelow->setIconSize( QSize( iconSize32, iconSize18 ) );
120 mPointOffsetBelowRight->setIconSize( QSize( iconSize32, iconSize18 ) );
121 mLabelMinScale->setPixmap(
QgsApplication::getThemeIcon( QStringLiteral(
"/mActionZoomOut.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
122 mLabelMaxScale->setPixmap(
QgsApplication::getThemeIcon( QStringLiteral(
"/mActionZoomIn.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
125 mFontUnderlineBtn->setMinimumSize( buttonSize, buttonSize );
126 mFontUnderlineBtn->setMaximumSize( buttonSize, buttonSize );
127 mFontStrikethroughBtn->setMinimumSize( buttonSize, buttonSize );
128 mFontStrikethroughBtn->setMaximumSize( buttonSize, buttonSize );
129 mFontBoldBtn->setMinimumSize( buttonSize, buttonSize );
130 mFontBoldBtn->setMaximumSize( buttonSize, buttonSize );
131 mFontItalicBtn->setMinimumSize( buttonSize, buttonSize );
132 mFontItalicBtn->setMaximumSize( buttonSize, buttonSize );
134 mPreviewScaleComboBox->setMapCanvas(
mMapCanvas );
135 mPreviewScaleComboBox->setShowCurrentScaleButton(
true );
138 const auto unitWidgets = findChildren<QgsUnitSelectionWidget *>();
169 mFontLineHeightSpinBox->setClearValue( 1.0 );
170 mShapeRotationDblSpnBx->setClearValue( 0.0 );
171 mShapeOffsetXSpnBx->setClearValue( 0.0 );
172 mShapeOffsetYSpnBx->setClearValue( 0.0 );
173 mPointOffsetXSpinBox->setClearValue( 0.0 );
174 mPointOffsetYSpinBox->setClearValue( 0.0 );
175 mPointAngleSpinBox->setClearValue( 0.0 );
176 mFontLetterSpacingSpinBox->setClearValue( 0.0 );
177 mFontWordSpacingSpinBox->setClearValue( 0.0 );
178 mZIndexSpinBox->setClearValue( 0.0 );
179 mLineDistanceSpnBx->setClearValue( 0.0 );
191 updateAvailableShadowPositions();
194 mBackgroundMarkerSymbolButton->setDialogTitle( tr(
"Background Symbol" ) );
195 mBackgroundMarkerSymbolButton->registerExpressionContextGenerator(
this );
196 mBackgroundMarkerSymbolButton->setMapCanvas(
mMapCanvas );
198 mBackgroundFillSymbolButton->setDialogTitle( tr(
"Background Symbol" ) );
199 mBackgroundFillSymbolButton->registerExpressionContextGenerator(
this );
200 mBackgroundFillSymbolButton->setMapCanvas(
mMapCanvas );
204 mRefFont = lblFontPreview->font();
207 connect( mShadowOffsetAngleDial, &QAbstractSlider::valueChanged, mShadowOffsetAngleSpnBx, &QSpinBox::setValue );
208 connect( mShadowOffsetAngleSpnBx,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), mShadowOffsetAngleDial, &QAbstractSlider::setValue );
209 connect( mLimitLabelChkBox, &QAbstractButton::toggled, mLimitLabelSpinBox, &QWidget::setEnabled );
210 connect( mCheckBoxSubstituteText, &QAbstractButton::toggled, mToolButtonConfigureSubstitutes, &QWidget::setEnabled );
220 populateFontCapitalsComboBox();
223 mPreviewBackgroundBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
224 mPreviewBackgroundBtn->setContext( QStringLiteral(
"labeling" ) );
225 mPreviewBackgroundBtn->setColor( QColor( 255, 255, 255 ) );
226 btnTextColor->setColorDialogTitle( tr(
"Select Text Color" ) );
227 btnTextColor->setContext( QStringLiteral(
"labeling" ) );
228 btnTextColor->setDefaultColor( Qt::black );
229 btnBufferColor->setColorDialogTitle( tr(
"Select Buffer Color" ) );
230 btnBufferColor->setContext( QStringLiteral(
"labeling" ) );
231 btnBufferColor->setDefaultColor( Qt::white );
232 mShapeStrokeColorBtn->setColorDialogTitle( tr(
"Select Stroke Color" ) );
233 mShapeStrokeColorBtn->setContext( QStringLiteral(
"labeling" ) );
234 mShapeFillColorBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
235 mShapeFillColorBtn->setContext( QStringLiteral(
"labeling" ) );
236 mShadowColorBtn->setColorDialogTitle( tr(
"Select Shadow Color" ) );
237 mShadowColorBtn->setContext( QStringLiteral(
"labeling" ) );
238 mShadowColorBtn->setDefaultColor( Qt::black );
240 mFontColorDDBtn->registerLinkedWidget( btnTextColor );
241 mBufferColorDDBtn->registerLinkedWidget( btnBufferColor );
242 mShapeStrokeColorDDBtn->registerLinkedWidget( mShapeStrokeColorBtn );
243 mShapeFillColorDDBtn->registerLinkedWidget( mShapeFillColorBtn );
244 mShadowColorDDBtn->registerLinkedWidget( mShadowColorBtn );
285 const auto groupBoxes = findChildren<QgsCollapsibleGroupBox *>();
288 grpbox->setSettingGroup( QStringLiteral(
"mAdvLabelingDlg" ) );
294 mLabelingOptionsListWidget->setAttribute( Qt::WA_MacShowFocusRect,
false );
296 QgsSettings settings;
299 QSizePolicy policy( mLabelingOptionsListFrame->sizePolicy() );
300 policy.setHorizontalStretch( 0 );
301 mLabelingOptionsListFrame->setSizePolicy( policy );
302 if ( !settings.contains( QStringLiteral(
"/Windows/Labeling/OptionsSplitState" ) ) )
305 QList<int> splitsizes;
307 mLabelingOptionsSplitter->setSizes( splitsizes );
311 connect( mLabelStackedWidget, &QStackedWidget::currentChanged,
this, &QgsTextFormatWidget::optionsStackedWidget_CurrentChanged );
314 mFontPreviewSplitter->restoreState( settings.value( QStringLiteral(
"Windows/Labeling/FontPreviewSplitState" ) ).toByteArray() );
315 mLabelingOptionsSplitter->restoreState( settings.value( QStringLiteral(
"Windows/Labeling/OptionsSplitState" ) ).toByteArray() );
317 mLabelingOptionsListWidget->setCurrentRow( settings.value( QStringLiteral(
"Windows/Labeling/Tab" ), 0 ).toInt() );
321 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
325 mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
329 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
333 QList<QWidget *> widgets;
334 widgets << btnBufferColor
336 << chkLabelPerFeaturePart
340 << chkLineOrientationDependent
342 << chkPreserveRotation
344 << comboBufferBlendMode
346 << mBufferJoinStyleComboBox
347 << mBufferTranspFillChbx
348 << mBufferOpacityWidget
349 << mCentroidInsideCheckBox
352 << mDirectSymbLeftLineEdit
353 << mDirectSymbRevChkBx
354 << mDirectSymbRightLineEdit
355 << mFitInsidePolygonCheckBox
356 << mFontCapitalsComboBox
357 << mFontLetterSpacingSpinBox
358 << mFontLimitPixelChkBox
359 << mFontLineHeightSpinBox
360 << mFontMaxPixelSpinBox
361 << mFontMinPixelSpinBox
362 << mFontMultiLineAlignComboBox
364 << mFontStyleComboBox
365 << mTextOrientationComboBox
366 << mTextOpacityWidget
367 << mFontWordSpacingSpinBox
369 << mFormatNumDecimalsSpnBx
370 << mFormatNumPlusSignChkBx
372 << mLimitLabelSpinBox
373 << mLineDistanceSpnBx
374 << mLineDistanceUnitWidget
375 << mMaxCharAngleInDSpinBox
376 << mMaxCharAngleOutDSpinBox
378 << mOffsetTypeComboBox
379 << mPalShowAllLabelsForLayerChkBx
380 << mPointAngleSpinBox
381 << mPointOffsetUnitWidget
382 << mPointOffsetXSpinBox
383 << mPointOffsetYSpinBox
384 << mPreviewBackgroundBtn
387 << mRepeatDistanceSpinBox
388 << mRepeatDistanceUnitWidget
389 << mOverrunDistanceSpinBox
390 << mOverrunDistanceUnitWidget
391 << mScaleBasedVisibilityChkBx
397 << mShadowOffsetAngleSpnBx
398 << mShadowOffsetGlobalChkBx
399 << mShadowOffsetSpnBx
400 << mShadowOffsetUnitWidget
401 << mShadowRadiusAlphaChkBx
402 << mShadowRadiusDblSpnBx
403 << mShadowRadiusUnitWidget
405 << mShadowOpacityWidget
408 << mShapeStrokeColorBtn
409 << mShapeStrokeWidthSpnBx
410 << mShapeStrokeWidthUnitWidget
412 << mShapeFillColorBtn
413 << mShapeOffsetXSpnBx
414 << mShapeOffsetYSpnBx
415 << mShapeOffsetUnitWidget
416 << mShapeRadiusXDbSpnBx
417 << mShapeRadiusYDbSpnBx
418 << mShapeRotationCmbBx
419 << mShapeRotationDblSpnBx
420 << mShapeRadiusUnitWidget
421 << mShapeSVGPathLineEdit
423 << mShapeSizeUnitWidget
426 << mBackgroundOpacityWidget
431 << mAutoWrapLengthSpinBox
432 << mAutoWrapTypeComboBox
433 << mCentroidRadioVisible
434 << mCentroidRadioWhole
435 << mDirectSymbRadioBtnAbove
436 << mDirectSymbRadioBtnBelow
437 << mDirectSymbRadioBtnLR
438 << mUpsidedownRadioAll
439 << mUpsidedownRadioDefined
440 << mUpsidedownRadioOff
441 << mPlacementModeComboBox
442 << mFieldExpressionWidget
443 << mCheckBoxSubstituteText
444 << mGeometryGeneratorGroupBox
445 << mGeometryGenerator
446 << mGeometryGeneratorType
447 << mBackgroundMarkerSymbolButton
448 << mBackgroundFillSymbolButton
449 << mCalloutsDrawCheckBox
450 << mCalloutStyleComboBox
453 << mMaskJoinStyleComboBox
454 << mMaskBufferSizeSpinBox
455 << mMaskOpacityWidget
456 << mCheckAllowLabelsOutsidePolygons
457 << mHtmlFormattingCheckBox;
464 connect( mBufferDrawChkBx, &QCheckBox::stateChanged,
this, [ = ](
int )
466 updateBufferFrameStatus();
469 connect( mShapeDrawChkBx, &QCheckBox::stateChanged,
this, [ = ](
int )
471 updateShapeFrameStatus();
474 connect( mShadowDrawChkBx, &QCheckBox::stateChanged,
this, [ = ](
int )
476 updateShadowFrameStatus();
479 connect( mCalloutsDrawCheckBox, &QCheckBox::stateChanged,
this, [ = ](
int )
481 updateCalloutFrameStatus();
489 whileBlocking( mOptionsTab )->setCurrentIndex( mLabelStackedWidget->currentIndex() );
490 mOptionsTab->tabBar()->setUsesScrollButtons(
true );
511 toggleDDButtons(
true );
518 const int prevIndex = mOptionsTab->currentIndex();
519 toggleDDButtons(
true );
520 delete mLabelingOptionsListWidget->takeItem( 8 );
521 delete mLabelingOptionsListWidget->takeItem( 7 );
522 delete mLabelingOptionsListWidget->takeItem( 6 );
523 delete mLabelingOptionsListWidget->takeItem( 3 );
524 mOptionsTab->removeTab( 8 );
525 mOptionsTab->removeTab( 7 );
526 mOptionsTab->removeTab( 6 );
527 mOptionsTab->removeTab( 3 );
528 mLabelStackedWidget->removeWidget( mLabelPage_Rendering );
529 mLabelStackedWidget->removeWidget( mLabelPage_Callouts );
530 mLabelStackedWidget->removeWidget( mLabelPage_Mask );
531 mLabelStackedWidget->removeWidget( mLabelPage_Placement );
541 mLabelStackedWidget->setCurrentIndex( prevIndex - 1 );
542 mOptionsTab->setCurrentIndex( prevIndex - 1 );
549 mLabelStackedWidget->setCurrentIndex( 0 );
550 mOptionsTab->setCurrentIndex( 0 );
554 frameLabelWith->hide();
555 mDirectSymbolsFrame->hide();
556 mFormatNumFrame->hide();
557 mFormatNumChkBx->hide();
558 mFormatNumDDBtn->hide();
559 mCheckBoxSubstituteText->hide();
560 mToolButtonConfigureSubstitutes->hide();
561 mLabelWrapOnCharacter->hide();
562 wrapCharacterEdit->hide();
563 mWrapCharDDBtn->hide();
564 mLabelWrapLinesTo->hide();
565 mAutoWrapLengthSpinBox->hide();
566 mAutoWrapLengthDDBtn->hide();
567 mAutoWrapTypeComboBox->hide();
568 mFontMultiLineLabel->hide();
569 mFontMultiLineAlignComboBox->hide();
570 mFontMultiLineAlignDDBtn->hide();
578 void QgsTextFormatWidget::toggleDDButtons(
bool visible )
580 const auto buttons = findChildren< QgsPropertyOverrideButton * >();
583 button->setVisible( visible );
589 mOptionsTab->setVisible( enabled );
590 mOptionsTab->setTabToolTip( 0, tr(
"Text" ) );
591 mOptionsTab->setTabToolTip( 1, tr(
"Formatting" ) );
592 mOptionsTab->setTabToolTip( 2, tr(
"Buffer" ) );
593 mOptionsTab->setTabToolTip( 3, tr(
"Mask" ) );
594 mOptionsTab->setTabToolTip( 4, tr(
"Background" ) );
595 mOptionsTab->setTabToolTip( 5, tr(
"Shadow" ) );
596 mOptionsTab->setTabToolTip( 6, tr(
"Callouts" ) );
597 mOptionsTab->setTabToolTip( 7, tr(
"Placement" ) );
598 mOptionsTab->setTabToolTip( 8, tr(
"Rendering" ) );
600 mLabelingOptionsListFrame->setVisible( !enabled );
601 groupBox_mPreview->setVisible( !enabled );
605 void QgsTextFormatWidget::connectValueChanged(
const QList<QWidget *> &widgets,
const char *slot )
607 const auto constWidgets = widgets;
608 for ( QWidget *widget : constWidgets )
612 connect( w, SIGNAL( changed() ),
this, slot );
616 connect( w, SIGNAL( fieldChanged( QString ) ),
this, slot );
618 else if (
QgsOpacityWidget *w = qobject_cast< QgsOpacityWidget *>( widget ) )
620 connect( w, SIGNAL( opacityChanged(
double ) ),
this, slot );
622 else if (
QgsScaleWidget *w = qobject_cast< QgsScaleWidget *>( widget ) )
624 connect( w, SIGNAL( scaleChanged(
double ) ),
this, slot );
628 connect( w, SIGNAL( changed() ),
this, slot );
630 else if ( QComboBox *w = qobject_cast<QComboBox *>( widget ) )
632 connect( w, SIGNAL( currentIndexChanged(
int ) ),
this, slot );
634 else if ( QSpinBox *w = qobject_cast<QSpinBox *>( widget ) )
636 connect( w, SIGNAL( valueChanged(
int ) ),
this, slot );
638 else if ( QDoubleSpinBox *w = qobject_cast<QDoubleSpinBox *>( widget ) )
640 connect( w, SIGNAL( valueChanged(
double ) ),
this, slot );
642 else if (
QgsColorButton *w = qobject_cast<QgsColorButton *>( widget ) )
644 connect( w, SIGNAL( colorChanged( QColor ) ),
this, slot );
646 else if ( QCheckBox *w = qobject_cast<QCheckBox *>( widget ) )
648 connect( w, SIGNAL( toggled(
bool ) ),
this, slot );
650 else if ( QRadioButton *w = qobject_cast<QRadioButton *>( widget ) )
652 connect( w, SIGNAL( toggled(
bool ) ),
this, slot );
654 else if ( QLineEdit *w = qobject_cast<QLineEdit *>( widget ) )
656 connect( w, SIGNAL( textEdited( QString ) ),
this, slot );
658 else if ( QSlider *w = qobject_cast<QSlider *>( widget ) )
660 connect( w, SIGNAL( valueChanged(
int ) ),
this, slot );
662 else if ( QGroupBox *w = qobject_cast<QGroupBox *>( widget ) )
664 connect( w, SIGNAL( toggled(
bool ) ),
this, slot );
668 connect( w, SIGNAL( textChanged() ),
this, slot );
672 QgsLogger::warning( QStringLiteral(
"Could not create connection for widget %1" ).arg( widget->objectName() ) );
703 mDirectSymbDDBtn->registerCheckedWidget( mDirectSymbChkBx );
711 mFormatNumDDBtn->registerCheckedWidget( mFormatNumChkBx );
726 mEnableMaskDDBtn->registerCheckedWidget( mEnableMaskChkBx );
734 mShapeDrawDDBtn->registerCheckedWidget( mShapeDrawChkBx );
756 mShadowDrawDDBtn->registerCheckedWidget( mShadowDrawChkBx );
796 QString ddScaleVisInfo = tr(
"Value < 0 represents a scale closer than 1:1, e.g. -10 = 10:1<br>"
797 "Value of 0 disables the specific limit." );
799 mScaleBasedVisibilityDDBtn->registerCheckedWidget( mScaleBasedVisibilityChkBx );
801 mScaleBasedVisibilityMinDDBtn->setUsageInfo( ddScaleVisInfo );
803 mScaleBasedVisibilityMaxDDBtn->setUsageInfo( ddScaleVisInfo );
806 mFontLimitPixelDDBtn->registerCheckedWidget( mFontLimitPixelChkBox );
825 if ( !mButtons.contains( key ) )
830 mButtons[key] = button;
847 mBufferDrawChkBx->setChecked( buffer.
enabled() );
848 mBufferFrame->setEnabled( buffer.
enabled() );
849 spinBufferSize->setValue( buffer.
size() );
850 mBufferUnitWidget->setUnit( buffer.
sizeUnit() );
852 btnBufferColor->setColor( buffer.
color() );
853 mBufferOpacityWidget->setOpacity( buffer.
opacity() );
854 mBufferJoinStyleComboBox->setPenJoinStyle( buffer.
joinStyle() );
856 comboBufferBlendMode->setBlendMode( buffer.
blendMode() );
858 mBufferEffect.reset( lPaintEffect->clone() );
862 mBufferEffect->setEnabled(
false );
864 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
868 mEnableMaskChkBx->setChecked( mask.
enabled() );
869 mMaskBufferSizeSpinBox->setValue( mask.
size() );
870 mMaskBufferUnitWidget->setUnit( mask.
sizeUnit() );
872 mMaskOpacityWidget->setOpacity( mask.
opacity() );
873 mMaskJoinStyleComboBox->setPenJoinStyle( mask.
joinStyle() );
875 mMaskEffect.reset( lPaintEffect->clone() );
879 mMaskEffect->setEnabled(
false );
881 mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
890 mTextOrientationComboBox->setCurrentIndex( mTextOrientationComboBox->findData(
format.
orientation() ) );
893 mFontWordSpacingSpinBox->setValue(
format.
font().wordSpacing() );
894 mFontLetterSpacingSpinBox->setValue(
format.
font().letterSpacing() );
899 updateFont( mRefFont );
905 QString missingTxt = tr(
"%1 not found. Default substituted." );
906 QString txtPrepend = tr(
"Chosen font" );
911 mFontMissingLabel->setText( missingTxt.arg( txtPrepend ) );
914 mLabelingOptionsListWidget->setCurrentRow( 0 );
920 mShapeDrawChkBx->setChecked( background.
enabled() );
921 mShapeFrame->setEnabled( background.
enabled() );
922 mShapeTypeCmbBx->blockSignals(
true );
923 mShapeTypeCmbBx->setCurrentIndex( mShapeTypeCmbBx->findData( background.
type() ) );
924 mShapeTypeCmbBx->blockSignals(
false );
925 updateAvailableShadowPositions();
926 mShapeSVGPathLineEdit->setText( background.
svgFile() );
928 mShapeSizeCmbBx->setCurrentIndex( background.
sizeType() );
929 mShapeSizeXSpnBx->setValue( background.
size().width() );
930 mShapeSizeYSpnBx->setValue( background.
size().height() );
931 mShapeSizeUnitWidget->setUnit( background.
sizeUnit() );
933 mShapeRotationCmbBx->setCurrentIndex( background.
rotationType() );
936 mShapeRotationDblSpnBx->setValue( background.
rotation() );
937 mShapeOffsetXSpnBx->setValue( background.
offset().x() );
938 mShapeOffsetYSpnBx->setValue( background.
offset().y() );
939 mShapeOffsetUnitWidget->setUnit( background.
offsetUnit() );
941 mShapeRadiusXDbSpnBx->setValue( background.
radii().width() );
942 mShapeRadiusYDbSpnBx->setValue( background.
radii().height() );
943 mShapeRadiusUnitWidget->setUnit( background.
radiiUnit() );
946 mShapeFillColorBtn->setColor( background.
fillColor() );
947 mShapeStrokeColorBtn->setColor( background.
strokeColor() );
948 mShapeStrokeWidthSpnBx->setValue( background.
strokeWidth() );
952 mBackgroundOpacityWidget->setOpacity( background.
opacity() );
953 mShapeBlendCmbBx->setBlendMode( background.
blendMode() );
955 mLoadSvgParams =
false;
956 mShapeTypeCmbBx_currentIndexChanged( background.
type() );
958 if (
auto *lPaintEffect = background.
paintEffect() )
959 mBackgroundEffect.reset( lPaintEffect->clone() );
963 mBackgroundEffect->setEnabled(
false );
965 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
971 mShadowDrawChkBx->setChecked( shadow.
enabled() );
972 mShadowFrame->setEnabled( shadow.
enabled() );
973 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( shadow.
shadowPlacement() ) );
974 mShadowOffsetAngleSpnBx->setValue( shadow.
offsetAngle() );
976 mShadowOffsetUnitWidget->setUnit( shadow.
offsetUnit() );
978 mShadowOffsetGlobalChkBx->setChecked( shadow.
offsetGlobal() );
980 mShadowRadiusDblSpnBx->setValue( shadow.
blurRadius() );
983 mShadowRadiusAlphaChkBx->setChecked( shadow.
blurAlphaOnly() );
984 mShadowOpacityWidget->setOpacity( shadow.
opacity() );
985 mShadowScaleSpnBx->setValue( shadow.
scale() );
987 mShadowColorBtn->setColor( shadow.
color() );
988 mShadowBlendCmbBx->setBlendMode( shadow.
blendMode() );
999 QgsSettings settings;
1000 settings.setValue( QStringLiteral(
"Windows/Labeling/FontPreviewSplitState" ), mFontPreviewSplitter->saveState() );
1001 settings.setValue( QStringLiteral(
"Windows/Labeling/OptionsSplitState" ), mLabelingOptionsSplitter->saveState() );
1003 int prevIndex = mLabelingOptionsListWidget->currentRow();
1004 if ( mWidgetMode ==
Text )
1006 switch ( prevIndex )
1015 settings.setValue( QStringLiteral(
"Windows/Labeling/Tab" ), prevIndex );
1037 buffer.
setEnabled( mBufferDrawChkBx->isChecked() );
1038 buffer.
setSize( spinBufferSize->value() );
1039 buffer.
setColor( btnBufferColor->color() );
1040 buffer.
setOpacity( mBufferOpacityWidget->opacity() );
1043 buffer.
setJoinStyle( mBufferJoinStyleComboBox->penJoinStyle() );
1045 buffer.
setBlendMode( comboBufferBlendMode->blendMode() );
1054 mask.
setEnabled( mEnableMaskChkBx->isChecked() );
1055 mask.
setSize( mMaskBufferSizeSpinBox->value() );
1056 mask.
setOpacity( mMaskOpacityWidget->opacity() );
1057 mask.
setSizeUnit( mMaskBufferUnitWidget->unit() );
1059 mask.
setJoinStyle( mMaskJoinStyleComboBox->penJoinStyle() );
1069 background.
setEnabled( mShapeDrawChkBx->isChecked() );
1071 background.
setSvgFile( mShapeSVGPathLineEdit->text() );
1073 background.
setSize( QSizeF( mShapeSizeXSpnBx->value(), mShapeSizeYSpnBx->value() ) );
1074 background.
setSizeUnit( mShapeSizeUnitWidget->unit() );
1077 background.
setRotation( mShapeRotationDblSpnBx->value() );
1078 background.
setOffset( QPointF( mShapeOffsetXSpnBx->value(), mShapeOffsetYSpnBx->value() ) );
1081 background.
setRadii( QSizeF( mShapeRadiusXDbSpnBx->value(), mShapeRadiusYDbSpnBx->value() ) );
1082 background.
setRadiiUnit( mShapeRadiusUnitWidget->unit() );
1085 background.
setFillColor( mShapeFillColorBtn->color() );
1090 background.
setOpacity( mBackgroundOpacityWidget->opacity() );
1091 background.
setBlendMode( mShapeBlendCmbBx->blendMode() );
1102 shadow.
setEnabled( mShadowDrawChkBx->isChecked() );
1113 shadow.
setOpacity( mShadowOpacityWidget->opacity() );
1114 shadow.
setScale( mShadowScaleSpnBx->value() );
1115 shadow.
setColor( mShadowColorBtn->color() );
1119 if ( includeDataDefinedProperties )
1150 if ( mButtons.contains( key ) )
1162 void QgsTextFormatWidget::optionsStackedWidget_CurrentChanged(
int indx )
1164 mLabelingOptionsListWidget->blockSignals(
true );
1165 mLabelingOptionsListWidget->setCurrentRow( indx );
1166 mLabelingOptionsListWidget->blockSignals(
false );
1175 mPreviewExpressionContext = *lExpressionContext;
1180 const auto symbolButtonWidgets = findChildren<QgsSymbolButton *>();
1188 void QgsTextFormatWidget::collapseSample(
bool collapse )
1192 QList<int> splitSizes = mFontPreviewSplitter->sizes();
1193 if ( splitSizes[0] > groupBox_mPreview->height() )
1195 int delta = splitSizes[0] - groupBox_mPreview->height();
1196 splitSizes[0] -= delta;
1197 splitSizes[1] += delta;
1198 mFontPreviewSplitter->setSizes( splitSizes );
1203 void QgsTextFormatWidget::changeTextColor(
const QColor &color )
1209 void QgsTextFormatWidget::updateFont(
const QFont &font )
1212 if ( font != mRefFont )
1221 mDirectSymbLeftLineEdit->setFont( mRefFont );
1222 mDirectSymbRightLineEdit->setFont( mRefFont );
1224 blockFontChangeSignals(
true );
1225 mFontFamilyCmbBx->setCurrentFont( mRefFont );
1226 populateFontStyleComboBox();
1227 mFontUnderlineBtn->setChecked( mRefFont.underline() );
1228 mFontStrikethroughBtn->setChecked( mRefFont.strikeOut() );
1229 mKerningCheckBox->setChecked( mRefFont.kerning() );
1230 blockFontChangeSignals(
false );
1238 void QgsTextFormatWidget::blockFontChangeSignals(
bool blk )
1240 mFontFamilyCmbBx->blockSignals( blk );
1241 mFontStyleComboBox->blockSignals( blk );
1242 mFontCapitalsComboBox->blockSignals( blk );
1243 mFontUnderlineBtn->blockSignals( blk );
1244 mFontStrikethroughBtn->blockSignals( blk );
1245 mFontWordSpacingSpinBox->blockSignals( blk );
1246 mFontLetterSpacingSpinBox->blockSignals( blk );
1247 mKerningCheckBox->blockSignals( blk );
1262 lblFontPreview->setFormat(
format() );
1265 void QgsTextFormatWidget::scrollPreview()
1267 scrollArea_mPreview->ensureVisible( 0, 0, 0, 0 );
1272 mPreviewBackgroundColor = color;
1274 scrollArea_mPreview->widget()->setStyleSheet( QStringLiteral(
"background: rgb(%1, %2, %3);" ).arg( QString::number( color.red() ),
1275 QString::number( color.green() ),
1276 QString::number( color.blue() ) ) );
1279 void QgsTextFormatWidget::changeBufferColor(
const QColor &color )
1288 bool showLineFrame =
false;
1289 bool showCentroidFrame =
false;
1290 bool showQuadrantFrame =
false;
1291 bool showFixedQuadrantFrame =
false;
1292 bool showPlacementPriorityFrame =
false;
1293 bool showOffsetTypeFrame =
false;
1294 bool showOffsetFrame =
false;
1295 bool showDistanceFrame =
false;
1296 bool showRotationFrame =
false;
1297 bool showMaxCharAngleFrame =
false;
1302 bool enableMultiLinesFrame =
true;
1308 showDistanceFrame =
true;
1316 showQuadrantFrame =
true;
1317 showFixedQuadrantFrame =
true;
1318 showOffsetFrame =
true;
1319 showRotationFrame =
true;
1323 showDistanceFrame =
true;
1324 showPlacementPriorityFrame =
true;
1325 showOffsetTypeFrame =
true;
1332 showLineFrame =
true;
1333 showDistanceFrame =
true;
1336 bool offline = chkLineAbove->isChecked() || chkLineBelow->isChecked();
1337 chkLineOrientationDependent->setEnabled( offline );
1338 mPlacementDistanceFrame->setEnabled( offline );
1342 showMaxCharAngleFrame = isCurved;
1344 enableMultiLinesFrame = !isCurved;
1349 showDistanceFrame =
true;
1352 mPlacementLineFrame->setVisible( showLineFrame );
1353 mPlacementPolygonFrame->setVisible( showPolygonPlacementOptions );
1354 mPlacementCentroidFrame->setVisible( showCentroidFrame );
1355 mPlacementQuadrantFrame->setVisible( showQuadrantFrame );
1356 mPlacementFixedQuadrantFrame->setVisible( showFixedQuadrantFrame );
1357 mPlacementCartographicFrame->setVisible( showPlacementPriorityFrame );
1358 mPlacementOffsetFrame->setVisible( showOffsetFrame );
1359 mPlacementDistanceFrame->setVisible( showDistanceFrame );
1360 mPlacementOffsetTypeFrame->setVisible( showOffsetTypeFrame );
1361 mPlacementRotationFrame->setVisible( showRotationFrame );
1366 mPlacementMaxCharAngleFrame->setVisible( showMaxCharAngleFrame );
1368 mMultiLinesFrame->setEnabled( enableMultiLinesFrame );
1372 switch ( currentPlacement )
1376 helperText = tr(
"Arranges label candidates in a clockwise circle around the feature, preferring placements to the top-right of the feature." );
1378 helperText = tr(
"Arranges label candidates in a cluster around the feature's centroid, preferring placements directly over the centroid." );
1382 helperText = tr(
"Arranges label candidates directly over the feature or at a preset offset from the feature." );
1384 helperText = tr(
"Arranges label candidates directly over the feature's centroid, or at a preset offset from the centroid." );
1388 helperText = tr(
"Arranges label candidates parallel to a generalised line representing the feature. Placements which fall over straighter portions of the line are preferred." );
1390 helperText = tr(
"Arranges label candidates parallel to a generalised line representing the polygon's perimeter. Placements which fall over straighter portions of the perimeter are preferred." );
1394 helperText = tr(
"Arranges candidates following the curvature of a line feature. Placements which fall over straighter portions of the line are preferred." );
1398 helperText = tr(
"Arranges label candidates scattered throughout the polygon. Labels will always be placed horizontally, with placements further from the edges of the polygon preferred." );
1400 helperText = tr(
"Label candidates are arranged horizontally along the length of the feature." );
1404 helperText = tr(
"Arranges label candidates scattered throughout the polygon. Labels are rotated to respect the polygon's orientation, with placements further from the edges of the polygon preferred." );
1408 helperText = tr(
"Label candidates are placed in predefined positions around the features. Preference is given to positions with greatest cartographic appeal, e.g., top right and bottom right of the feature." );
1412 helperText = tr(
"Arranges candidates following the curvature of the feature's perimeter. Placements which fall over straighter portions of the perimeter are preferred." );
1416 helperText = tr(
"Label candidates are placed outside of the features, preferring placements which give greatest visual association between the label and the feature." );
1419 mPlacementModeDescriptionLabel->setText( QStringLiteral(
"<i>%1</i>" ).arg( helperText ) );
1422 void QgsTextFormatWidget::populateFontCapitalsComboBox()
1434 void QgsTextFormatWidget::populateFontStyleComboBox()
1436 mFontStyleComboBox->clear();
1437 QStringList styles = mFontDB.styles( mRefFont.family() );
1438 const auto constStyles = styles;
1439 for (
const QString &style : constStyles )
1441 mFontStyleComboBox->addItem( style );
1444 QString targetStyle = mFontDB.styleString( mRefFont );
1445 if ( !styles.contains( targetStyle ) )
1447 QFont f = QFont( mRefFont.family() );
1448 targetStyle = QFontInfo( f ).styleName();
1449 mRefFont.setStyleName( targetStyle );
1452 int stylIndx = mFontStyleComboBox->findText( targetStyle );
1453 if ( stylIndx > -1 )
1458 mFontStyleComboBox->setCurrentIndex( curIndx );
1461 void QgsTextFormatWidget::mFontSizeSpinBox_valueChanged(
double d )
1463 mRefFont.setPointSizeF( d );
1464 updateFont( mRefFont );
1467 void QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged(
const QFont &f )
1469 mRefFont.setFamily( f.family() );
1470 updateFont( mRefFont );
1473 void QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged(
const QString &text )
1476 updateFont( mRefFont );
1479 void QgsTextFormatWidget::mFontUnderlineBtn_toggled(
bool ckd )
1481 mRefFont.setUnderline( ckd );
1482 updateFont( mRefFont );
1485 void QgsTextFormatWidget::mFontStrikethroughBtn_toggled(
bool ckd )
1487 mRefFont.setStrikeOut( ckd );
1488 updateFont( mRefFont );
1491 void QgsTextFormatWidget::kerningToggled(
bool checked )
1493 mRefFont.setKerning( checked );
1494 updateFont( mRefFont );
1497 void QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged(
double spacing )
1499 mRefFont.setWordSpacing( spacing );
1500 updateFont( mRefFont );
1503 void QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged(
double spacing )
1505 mRefFont.setLetterSpacing( QFont::AbsoluteSpacing, spacing );
1506 updateFont( mRefFont );
1509 void QgsTextFormatWidget::mFontSizeUnitWidget_changed()
1514 mFontLimitPixelChkBox->setChecked(
false );
1520 mFontLimitPixelChkBox->setChecked(
true );
1522 updateFont( mRefFont );
1525 void QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged(
int px )
1528 mFontMaxPixelSpinBox->setMinimum( px );
1529 mFontMaxPixelSpinBox->update();
1532 void QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged(
int px )
1535 if ( px < mFontMinPixelSpinBox->value() )
1537 mFontMaxPixelSpinBox->blockSignals(
true );
1538 mFontMaxPixelSpinBox->setValue( mFontMinPixelSpinBox->value() );
1539 mFontMaxPixelSpinBox->blockSignals(
false );
1541 mFontMaxPixelSpinBox->setMinimum( mFontMinPixelSpinBox->value() );
1544 void QgsTextFormatWidget::mBufferUnitWidget_changed()
1546 updateFont( mRefFont );
1549 void QgsTextFormatWidget::mMaskBufferUnitWidget_changed()
1551 updateFont( mRefFont );
1554 void QgsTextFormatWidget::mCoordXDDBtn_changed( )
1556 if ( !mCoordXDDBtn->isActive() )
1560 else if ( mCoordYDDBtn->isActive() )
1566 void QgsTextFormatWidget::mCoordYDDBtn_changed( )
1568 if ( !mCoordYDDBtn->isActive() )
1572 else if ( mCoordXDDBtn->isActive() )
1578 void QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged(
int )
1586 showBackgroundRadius( isRect );
1588 mShapeSVGPathFrame->setVisible( isSVG );
1589 mBackgroundMarkerSymbolButton->setVisible( isMarker );
1590 mBackgroundFillSymbolButton->setVisible( !isSVG && !isMarker );
1594 mShapeSizeYLabel->setVisible( !isSVG && !isMarker );
1595 mShapeSizeYSpnBx->setVisible( !isSVG && !isMarker );
1596 mShapeSizeYDDBtn->setVisible( !isSVG && !isMarker );
1597 mShapeSizeXLabel->setText( tr(
"Size%1" ).arg( !isSVG && !isMarker ? tr(
" X" ) : QString() ) );
1600 mShapeFillColorBtn->setAllowOpacity( !isSVG );
1601 mShapeFillColorBtn->setButtonBackground();
1602 mShapeStrokeColorBtn->setAllowOpacity( !isSVG );
1603 mShapeStrokeColorBtn->setButtonBackground();
1606 mShapeFillColorLabel->setVisible( isSVG );
1607 mShapeFillColorLabel->setEnabled( isSVG );
1608 mShapeFillColorBtn->setVisible( isSVG );
1609 mShapeFillColorBtn->setEnabled( isSVG );
1610 mShapeFillColorDDBtn->setVisible( isSVG );
1611 mShapeFillColorDDBtn->setEnabled( isSVG );
1612 mShapeStrokeColorLabel->setVisible( isSVG );
1613 mShapeStrokeColorLabel->setEnabled( isSVG );
1614 mShapeStrokeColorBtn->setVisible( isSVG );
1615 mShapeStrokeColorBtn->setEnabled( isSVG );
1616 mShapeStrokeColorDDBtn->setVisible( isSVG );
1617 mShapeStrokeColorDDBtn->setEnabled( isSVG );
1618 mShapeStrokeWidthLabel->setVisible( isSVG );
1619 mShapeStrokeWidthLabel->setEnabled( isSVG );
1620 mShapeStrokeWidthSpnBx->setVisible( isSVG );
1621 mShapeStrokeWidthSpnBx->setEnabled( isSVG );
1622 mShapeStrokeWidthDDBtn->setVisible( isSVG );
1623 mShapeStrokeWidthDDBtn->setEnabled( isSVG );
1626 mShapeSVGParamsBtn->setVisible( isSVG );
1629 updateSvgWidgets( mShapeSVGPathLineEdit->text() );
1633 mShapeSVGUnitsLabel->setVisible( isSVG );
1634 mShapeStrokeWidthUnitWidget->setVisible(
false );
1635 mShapeStrokeUnitsDDBtn->setVisible(
false );
1636 mShapeStrokeUnitsDDBtn->setEnabled(
false );
1638 updateAvailableShadowPositions();
1641 void QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged(
const QString &text )
1643 updateSvgWidgets( text );
1648 int numOptionsChecked = ( chkLineAbove->isChecked() ? 1 : 0 ) +
1649 ( chkLineBelow->isChecked() ? 1 : 0 ) +
1650 ( chkLineOn->isChecked() ? 1 : 0 );
1652 if ( numOptionsChecked == 1 )
1655 chkLineAbove->setEnabled( !chkLineAbove->isChecked() );
1656 chkLineBelow->setEnabled( !chkLineBelow->isChecked() );
1657 chkLineOn->setEnabled( !chkLineOn->isChecked() );
1661 chkLineAbove->setEnabled(
true );
1662 chkLineBelow->setEnabled(
true );
1663 chkLineOn->setEnabled(
true );
1673 void QgsTextFormatWidget::previewScaleChanged(
double scale )
1675 lblFontPreview->setScale( scale );
1678 void QgsTextFormatWidget::updateSvgWidgets(
const QString &svgPath )
1680 if ( mShapeSVGPathLineEdit->text() != svgPath )
1682 mShapeSVGPathLineEdit->setText( svgPath );
1685 QString resolvedPath;
1686 bool validSVG =
true;
1687 if ( ! svgPath.startsWith( QLatin1String(
"base64:" ), Qt::CaseInsensitive ) )
1690 validSVG = QFileInfo::exists( resolvedPath );
1694 resolvedPath = svgPath;
1699 mShapeSVGPathLineEdit->setStyleSheet( !validSVG ? QStringLiteral(
"QLineEdit{ color: rgb(225, 0, 0); }" ) : QString() );
1700 mShapeSVGPathLineEdit->setToolTip( !validSVG ? tr(
"File not found" ) : resolvedPath );
1702 QColor fill, stroke;
1703 double strokeWidth = 0.0;
1704 bool fillParam =
false, strokeParam =
false, strokeWidthParam =
false;
1710 mShapeSVGParamsBtn->setEnabled( validSVG && ( fillParam || strokeParam || strokeWidthParam ) );
1712 mShapeFillColorLabel->setEnabled( validSVG && fillParam );
1713 mShapeFillColorBtn->setEnabled( validSVG && fillParam );
1714 mShapeFillColorDDBtn->setEnabled( validSVG && fillParam );
1715 if ( mLoadSvgParams && validSVG && fillParam )
1716 mShapeFillColorBtn->setColor( fill );
1718 mShapeStrokeColorLabel->setEnabled( validSVG && strokeParam );
1719 mShapeStrokeColorBtn->setEnabled( validSVG && strokeParam );
1720 mShapeStrokeColorDDBtn->setEnabled( validSVG && strokeParam );
1721 if ( mLoadSvgParams && validSVG && strokeParam )
1722 mShapeStrokeColorBtn->setColor( stroke );
1724 mShapeStrokeWidthLabel->setEnabled( validSVG && strokeWidthParam );
1725 mShapeStrokeWidthSpnBx->setEnabled( validSVG && strokeWidthParam );
1726 mShapeStrokeWidthDDBtn->setEnabled( validSVG && strokeWidthParam );
1727 if ( mLoadSvgParams && validSVG && strokeWidthParam )
1728 mShapeStrokeWidthSpnBx->setValue( strokeWidth );
1734 mShapeSVGUnitsLabel->setEnabled( validSVG && strokeWidthParam );
1737 void QgsTextFormatWidget::updateAvailableShadowPositions()
1739 if ( mShadowUnderCmbBx->count() == 0
1745 mShadowUnderCmbBx->clear();
1753 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( currentPlacement ) );
1754 if ( mShadowUnderCmbBx->currentIndex() == -1 )
1755 mShadowUnderCmbBx->setCurrentIndex( 0 );
1759 void QgsTextFormatWidget::updateProperty()
1767 void QgsTextFormatWidget::createAuxiliaryField()
1794 property.setActive(
true );
1803 void QgsTextFormatWidget::updateShapeFrameStatus()
1805 mShapeFrame->setEnabled( mShapeDrawDDBtn->isActive() || mShapeDrawChkBx->isChecked() );
1808 void QgsTextFormatWidget::updateBufferFrameStatus()
1810 mBufferFrame->setEnabled( mBufferDrawDDBtn->isActive() || mBufferDrawChkBx->isChecked() );
1813 void QgsTextFormatWidget::updateShadowFrameStatus()
1815 mShadowFrame->setEnabled( mShadowDrawDDBtn->isActive() || mShadowDrawChkBx->isChecked() );
1818 void QgsTextFormatWidget::updateCalloutFrameStatus()
1820 mCalloutFrame->setEnabled( mCalloutDrawDDBtn->isActive() || mCalloutsDrawCheckBox->isChecked() );
1864 saveDlg.
setDefaultTags( mTextFormatsListWidget->currentTagFilter() );
1865 if ( !saveDlg.exec() )
1868 if ( saveDlg.
name().isEmpty() )
1874 int res = QMessageBox::warning(
this, tr(
"Save Text Format" ),
1875 tr(
"Format with name '%1' already exists. Overwrite?" )
1876 .arg( saveDlg.
name() ),
1877 QMessageBox::Yes | QMessageBox::No );
1878 if ( res != QMessageBox::Yes )
1885 QStringList symbolTags = saveDlg.
tags().split(
',' );
1892 void QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked()
1895 svgDlg.setWindowTitle( tr(
"Select SVG file" ) );
1896 svgDlg.svgSelector()->setSvgPath( mShapeSVGPathLineEdit->text().trimmed() );
1898 if ( svgDlg.exec() == QDialog::Accepted )
1900 QString svgPath = svgDlg.svgSelector()->currentSvgPath();
1901 if ( !svgPath.isEmpty() )
1903 mShapeSVGPathLineEdit->setText( svgPath );
1909 void QgsTextFormatWidget::mShapeSVGParamsBtn_clicked()
1911 QString svgPath = mShapeSVGPathLineEdit->text();
1912 mLoadSvgParams =
true;
1913 updateSvgWidgets( svgPath );
1914 mLoadSvgParams =
false;
1917 void QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged(
int index )
1923 void QgsTextFormatWidget::mPreviewTextEdit_textChanged(
const QString &text )
1925 lblFontPreview->setText( text );
1929 void QgsTextFormatWidget::mPreviewTextBtn_clicked()
1931 mPreviewTextEdit->setText( QStringLiteral(
"Lorem Ipsum" ) );
1935 void QgsTextFormatWidget::mPreviewBackgroundBtn_colorChanged(
const QColor &color )
1940 void QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked()
1942 bool gotChar =
false;
1944 const QChar initial = !mDirectSymbLeftLineEdit->text().isEmpty() ? mDirectSymbLeftLineEdit->text().at( 0 ) : QChar();
1945 QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
1950 if ( !dirSymb.isNull() )
1951 mDirectSymbLeftLineEdit->setText( QString( dirSymb ) );
1954 void QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked()
1956 bool gotChar =
false;
1957 const QChar initial = !mDirectSymbRightLineEdit->text().isEmpty() ? mDirectSymbRightLineEdit->text().at( 0 ) : QChar();
1958 QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
1963 if ( !dirSymb.isNull() )
1964 mDirectSymbRightLineEdit->setText( QString( dirSymb ) );
1967 void QgsTextFormatWidget::chkLineOrientationDependent_toggled(
bool active )
1971 chkLineAbove->setText( tr(
"Left of line" ) );
1972 chkLineBelow->setText( tr(
"Right of line" ) );
1976 chkLineAbove->setText( tr(
"Above line" ) );
1977 chkLineBelow->setText( tr(
"Below line" ) );
1982 void QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked()
1997 if ( dlg.exec() == QDialog::Accepted )
2004 void QgsTextFormatWidget::showBackgroundRadius(
bool show )
2006 mShapeRadiusLabel->setVisible( show );
2007 mShapeRadiusXDbSpnBx->setVisible( show );
2009 mShapeRadiusYDbSpnBx->setVisible( show );
2011 mShapeRadiusUnitWidget->setVisible( show );
2013 mShapeRadiusDDBtn->setVisible( show );
2014 mShapeRadiusUnitsDDBtn->setVisible( show );
2019 mCoordAlignmentFrame->setEnabled( enable );
2025 return *lExpressionContext;
2046 if ( mGeometryGeneratorGroupBox->isChecked() )
2060 : QDialog( parent, fl )
2062 setWindowTitle( tr(
"Text Settings" ) );
2065 mFormatWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
2067 QVBoxLayout *layout =
new QVBoxLayout(
this );
2068 layout->addWidget( mFormatWidget );
2070 mButtonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, Qt::Horizontal,
this );
2071 layout->addWidget( mButtonBox );
2073 setLayout( layout );
2076 connect( mButtonBox->button( QDialogButtonBox::Ok ), &QAbstractButton::clicked,
this, &QDialog::accept );
2077 connect( mButtonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked,
this, &QDialog::reject );
2078 connect( mButtonBox->button( QDialogButtonBox::Help ), &QAbstractButton::clicked,
this, &QgsTextFormatDialog::showHelp );
2083 return mFormatWidget->
format();
2086 void QgsTextFormatDialog::showHelp()
2088 QgsHelp::openHelp( QStringLiteral(
"style_library/label_settings.html#formatting-the-label-text" ) );
2104 mFormatWidget = qobject_cast< QgsTextFormatWidget * >(
widget() );
2107 if ( !mBlockSignals )
2114 return mFormatWidget->
format();
2119 mBlockSignals =
true;
2121 mBlockSignals =
false;
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
static QgsSvgCache * svgCache()
Returns the application's SVG cache, used for caching SVG images and handling parameter replacement w...
bool addAuxiliaryField(const QgsPropertyDefinition &definition)
Adds an auxiliary field for the given property.
static QString nameFromProperty(const QgsPropertyDefinition &def, bool joined=false)
Returns the name of the auxiliary field for a property definition.
bool exists(const QgsPropertyDefinition &definition) const
Returns true if the property is stored in the layer already, false otherwise.
A dialog for selecting a single character from a single font.
QChar selectCharacter(bool *gotChar, const QFont &font, const QString &style, QChar initialSelection=QChar())
Opens the dialog modally and returns when the user has selected a character.
A QGIS expression editor based on QScintilla2.
void collapsedStateChanged(bool collapsed)
Signal emitted when groupbox collapsed/expanded state is changed, and when first shown.
A groupbox that collapses/expands when toggled and can save its collapsed and checked states.
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
static QgsExpressionContextScope * atlasScope(const QgsLayoutAtlas *atlas)
Creates a new scope which contains variables and functions relating to a QgsLayoutAtlas.
static QgsExpressionContextScope * mapSettingsScope(const QgsMapSettings &mapSettings)
Creates a new scope which contains variables and functions relating to a QgsMapSettings object.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void setOriginalValueVariable(const QVariant &value)
Sets the original value variable value for the context.
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
void setHighlightedVariables(const QStringList &variableNames)
Sets the list of variable names within the context intended to be highlighted to the user.
static const QString EXPR_ORIGINAL_VALUE
Inbuilt variable name for value original value variable.
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
QgsFillSymbol * clone() const override
Returns a deep copy of this symbol.
static bool fontFamilyMatchOnSystem(const QString &family, QString *chosen=nullptr, bool *match=nullptr)
Check whether font family is on system.
static bool updateFontViaStyle(QFont &f, const QString &fontstyle, bool fallback=false)
Updates font with named style and retain all font properties.
static QgsGui * instance()
Returns a pointer to the singleton instance.
static void enableAutoGeometryRestore(QWidget *widget, const QString &key=QString())
Register the widget to allow its position to be automatically saved and restored when open and closed...
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.
static QIcon iconForWkbType(QgsWkbTypes::Type type)
Returns the icon for a vector layer whose geometry type is provided.
@ SymbolLeftRight
Place direction symbols on left/right of label.
@ SymbolAbove
Place direction symbols on above label.
@ SymbolBelow
Place direction symbols on below label.
static void warning(const QString &msg)
Goes to qWarning.
Map canvas is a class for displaying all GIS data types on a canvas.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
double scale() const
Returns the calculated map scale.
QgsUnitTypes::DistanceUnit mapUnits() const
Returns the units of the map's geographical coordinates - used for scale calculation.
A marker symbol type, for rendering Point and MultiPoint geometries.
QgsMarkerSymbol * clone() const override
Returns a deep copy of this symbol.
A dialog to create a new auxiliary layer.
static QgsPaintEffect * defaultStack()
Returns a new effect stack consisting of a sensible selection of default effects.
static bool isDefaultStack(QgsPaintEffect *effect)
Tests whether a paint effect matches the default effects stack.
@ ShowDefined
Show upside down when rotation is layer- or data-defined.
@ Upright
Upside-down labels (90 <= angle < 270) are shown upright.
@ ShowAll
Show upside down for all labels, including dynamic ones.
Placement
Placement modes which determine how label candidates are generated for a feature.
@ PerimeterCurved
Arranges candidates following the curvature of a polygon's boundary. Applies to polygon layers only.
@ Curved
Arranges candidates following the curvature of a line feature. Applies to line layers only.
@ Horizontal
Arranges horizontal candidates scattered throughout a polygon feature. Applies to polygon layers only...
@ Free
Arranges candidates scattered throughout a polygon feature. Candidates are rotated to respect the pol...
@ OverPoint
Arranges candidates over a point (or centroid of a polygon), or at a preset offset from the point....
@ AroundPoint
Arranges candidates in a circle around a point (or centroid of a polygon). Applies to point or polygo...
@ Line
Arranges candidates parallel to a generalised line representing the feature or parallel to a polygon'...
@ OrderedPositionsAroundPoint
Candidates are placed in predefined positions around a point. Preference is given to positions with g...
@ OutsidePolygons
Candidates are placed outside of polygon boundaries. Applies to polygon layers only....
Property
Data definable properties.
@ MaskEnabled
Whether the mask is enabled.
@ LabelRotation
Label rotation.
@ PositionY
Y-coordinate data defined label position.
@ OverrunDistance
Distance which labels can extend past either end of linear features.
@ Strikeout
Use strikeout.
@ FontStyle
Font style name.
@ PositionX
X-coordinate data defined label position.
@ CalloutDraw
Show callout.
@ Underline
Use underline.
@ FontLetterSpacing
Letter spacing.
@ MaskJoinStyle
Mask join style.
@ Hali
Horizontal alignment for data defined label position (Left, Center, Right)
@ MaskBufferUnit
Mask buffer size unit.
@ LabelAllParts
Whether all parts of multi-part features should be labeled.
@ ShadowOpacity
Shadow opacity.
@ BufferOpacity
Buffer opacity.
@ ShapeOpacity
Shape opacity.
@ FontSizeUnit
Font size units.
@ Italic
Use italic style.
@ PredefinedPositionOrder
@ FontWordSpacing
Word spacing.
@ MaskBufferSize
Mask buffer size.
@ MinimumScale
Minimum map scale (ie most "zoomed out")
@ FontBlendMode
Text blend mode.
@ MaximumScale
Maximum map scale (ie most "zoomed in")
@ MaskOpacity
Mask opacity.
@ PolygonLabelOutside
Whether labels outside a polygon feature are permitted, or should be forced (since QGIS 3....
@ FontCase
Label text case.
@ LinePlacementOptions
Line placement flags.
@ Vali
Vertical alignment for data defined label position (Bottom, Base, Half, Cap, Top)
@ FontOpacity
Text opacity.
@ FromPoint
Offset distance applies from point geometry.
@ FromSymbolBounds
Offset distance applies from rendered symbol bounds.
const QgsTextFormat & format() const
Returns the label text formatting settings, e.g., font settings, buffer settings, etc.
static const QgsPropertiesDefinition & propertyDefinitions()
Returns the labeling property definitions.
static QgsProject * instance()
Returns the QgsProject singleton instance.
A grouped map of multiple QgsProperty objects, each referenced by a integer key value.
QgsProperty property(int key) const override
Returns a matching property from the collection, if one exists.
void setProperty(int key, const QgsProperty &property)
Adds a property to the collection and takes ownership of it.
QSet< int > propertyKeys() const override
Returns a list of property keys contained within the collection.
bool isActive(int key) const override
Returns true if the collection contains an active property with the specified key.
Definition for a property.
A store for object properties.
void setField(const QString &field)
Sets the field name the property references.
void setActive(bool active)
Sets whether the property is currently active.
A collection of string replacements (specified using QgsStringReplacement objects).
Capitalization
Capitalization options.
@ MixedCase
Mixed case, ie no change.
@ AllLowercase
Convert all characters to lowercase.
@ TitleCase
Simple title case conversion - does not fully grammatically parse the text and uses simple rules only...
@ AllUppercase
Convert all characters to uppercase.
@ ForceFirstLetterToCapital
Convert just the first letter of each word to uppercase, leave the rest untouched.
a dialog for setting properties of a newly saved style.
bool isFavorite() const
Returns true if the favorite is checked for the symbol.
QString name() const
Returns the entered name for the new symbol.
void setDefaultTags(const QString &tags)
Sets the default tags for the newly created item.
QString tags() const
Returns any tags entered for the new symbol (as a comma separated value list).
QgsTextFormat textFormat(const QString &name) const
Returns the text format with the specified name.
QgsTextFormat defaultTextFormat(QgsStyle::TextFormatContext context=QgsStyle::TextFormatContext::Labeling) const
Returns the default text format to use for new text based objects in the specified context.
QStringList textFormatNames() const
Returns a list of names of text formats in the style.
bool removeTextFormat(const QString &name)
Removes a text format from the style.
StyleEntity
Enum for Entities involved in a style.
@ LabelSettingsEntity
Label settings.
@ TextFormatEntity
Text formats.
@ SmartgroupEntity
Smart groups.
@ Symbol3DEntity
3D symbol entity (since QGIS 3.14)
@ ColorrampEntity
Color ramps.
@ LegendPatchShapeEntity
Legend patch shape (since QGIS 3.14)
static QgsStyle * defaultStyle()
Returns default application-wide style.
bool addTextFormat(const QString &name, const QgsTextFormat &format, bool update=false)
Adds a text format with the specified name to the style.
QgsPalLayerSettings labelSettings(const QString &name) const
Returns the label settings with the specified name.
bool saveTextFormat(const QString &name, const QgsTextFormat &format, bool favorite, const QStringList &tags)
Adds a text format to the database.
A dialog which allows users to specify a list of substitutions to apply to a string,...
void containsParams(const QString &path, bool &hasFillParam, QColor &defaultFillColor, bool &hasStrokeParam, QColor &defaultStrokeColor, bool &hasStrokeWidthParam, double &defaultStrokeWidth, bool blocking=false) const
Tests if an SVG file contains parameters for fill, stroke color, stroke width.
static QString svgSymbolNameToPath(const QString &name, const QgsPathResolver &pathResolver)
Determines an SVG symbol's path from its name.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
QgsExpressionContext * expressionContext() const
Returns the expression context used for the widget, if set.
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the widget.
QgsMessageBar * messageBar() const
Returns the message bar associated with the widget.
static QgsSymbol * defaultSymbol(QgsWkbTypes::GeometryType geomType)
Returns a new default symbol for the specified geometry type.
Container for settings relating to a text background object.
QgsMapUnitScale strokeWidthMapUnitScale() const
Returns the map unit scale object for the shape stroke width.
void setFillSymbol(QgsFillSymbol *symbol)
Sets the current fill symbol for the background shape.
RotationType rotationType() const
Returns the method used for rotating the background shape.
QString svgFile() const
Returns the absolute path to the background SVG file, if set.
QSizeF size() const
Returns the size of the background shape.
QSizeF radii() const
Returns the radii used for rounding the corners of shapes.
QgsMapUnitScale radiiMapUnitScale() const
Returns the map unit scale object for the shape radii.
void setOpacity(double opacity)
Sets the background shape's opacity.
void setStrokeColor(const QColor &color)
Sets the color used for outlining the background shape.
QgsUnitTypes::RenderUnit strokeWidthUnit() const
Returns the units used for the shape's stroke width.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape size.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the background shape.
SizeType
Methods for determining the background shape size.
bool enabled() const
Returns whether the background is enabled.
void setRadiiUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shape's radii.
double opacity() const
Returns the background shape's opacity.
void setStrokeWidthMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape stroke width.
QgsUnitTypes::RenderUnit offsetUnit() const
Returns the units used for the shape's offset.
double rotation() const
Returns the rotation for the background shape, in degrees clockwise.
QColor fillColor() const
Returns the color used for filing the background shape.
void setMarkerSymbol(QgsMarkerSymbol *symbol)
Sets the current marker symbol for the background shape.
void setRadii(QSizeF radii)
Sets the radii used for rounding the corners of shapes.
SizeType sizeType() const
Returns the method used to determine the size of the background shape (e.g., fixed size or buffer aro...
ShapeType type() const
Returns the type of background shape (e.g., square, ellipse, SVG).
double strokeWidth() const
Returns the width of the shape's stroke (stroke).
void setSizeType(SizeType type)
Sets the method used to determine the size of the background shape (e.g., fixed size or buffer around...
ShapeType
Background shape types.
@ ShapeMarkerSymbol
Marker symbol.
@ ShapeSquare
Square - buffered sizes only.
@ ShapeRectangle
Rectangle.
void setFillColor(const QColor &color)
Sets the color used for filing the background shape.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the background shape.
void setStrokeWidthUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shape's stroke width.
QColor strokeColor() const
Returns the color used for outlining the background shape.
void setRotationType(RotationType type)
Sets the method used for rotating the background shape.
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape offset.
QgsFillSymbol * fillSymbol() const
Returns the fill symbol to be rendered in the background.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the background shape.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the shape size.
void setType(ShapeType type)
Sets the type of background shape to draw (e.g., square, ellipse, SVG).
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units used for the shape's size.
RotationType
Methods for determining the rotation of the background shape.
@ RotationSync
Shape rotation is synced with text rotation.
QgsUnitTypes::RenderUnit radiiUnit() const
Returns the units used for the shape's radii.
void setEnabled(bool enabled)
Sets whether the text background will be drawn.
QgsMarkerSymbol * markerSymbol() const
Returns the marker symbol to be rendered in the background.
void setRadiiMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape radii.
void setRotation(double rotation)
Sets the rotation for the background shape, in degrees clockwise.
void setOffset(QPointF offset)
Sets the offset used for drawing the background shape.
void setSize(QSizeF size)
Sets the size of the background shape.
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units used for the shape's size.
const QgsPaintEffect * paintEffect() const
Returns the current paint effect for the background shape.
void setSvgFile(const QString &file)
Sets the path to the background SVG file.
QgsMapUnitScale offsetMapUnitScale() const
Returns the map unit scale object for the shape offset.
void setStrokeWidth(double width)
Sets the width of the shape's stroke (stroke).
QPointF offset() const
Returns the offset used for drawing the background shape.
void setOffsetUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shape's offset.
Container for settings relating to a text buffer.
void setFillBufferInterior(bool fill)
Sets whether the interior of the buffer will be filled in.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the buffer.
Qt::PenJoinStyle joinStyle() const
Returns the buffer join style.
double size() const
Returns the size of the buffer.
void setColor(const QColor &color)
Sets the color for the buffer.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the buffer size.
void setOpacity(double opacity)
Sets the buffer opacity.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the buffer size.
bool enabled() const
Returns whether the buffer is enabled.
double opacity() const
Returns the buffer opacity.
bool fillBufferInterior() const
Returns whether the interior of the buffer will be filled in.
void setEnabled(bool enabled)
Sets whether the text buffer will be drawn.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the buffer size.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the buffer.
const QgsPaintEffect * paintEffect() const
Returns the current paint effect for the buffer.
QColor color() const
Returns the color of the buffer.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the buffer.
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units used for the buffer size.
void setJoinStyle(Qt::PenJoinStyle style)
Sets the join style used for drawing the buffer.
void setSize(double size)
Sets the size of the buffer.
QgsTextFormatDialog(const QgsTextFormat &format, QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, Qt::WindowFlags fl=QgsGuiUtils::ModalDialogFlags, QgsVectorLayer *layer=nullptr)
Constructor for QgsTextFormatDialog.
QgsTextFormat format() const
Returns the current formatting settings defined by the widget.
QDialogButtonBox * buttonBox() const
Returns a reference to the dialog's button box.
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the widget is shown, e.g., the associated map canvas and expression context...
void setFormat(const QgsTextFormat &format)
Sets the format to show in the widget.
void setDockMode(bool dockMode) override
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs.
QgsTextFormat format() const
Returns the current formatting settings defined by the widget.
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the widget is shown, e.g., the associated map canvas and expression context...
QgsTextFormatPanelWidget(const QgsTextFormat &format, QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, QgsVectorLayer *layer=nullptr)
Constructor for QgsTextFormatPanelWidget.
A widget for customizing text formatting settings.
void updatePlacementWidgets()
Updates label placement options to reflect current state of widget.
QButtonGroup * mUpsidedownBtnGrp
Upside down labels button group.
QgsTextFormatWidget(const QgsTextFormat &format=QgsTextFormat(), QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, QgsVectorLayer *layer=nullptr)
Constructor for QgsTextFormatWidget.
int mMinPixelLimit
Pixel size font limit.
void setDockMode(bool enabled)
Sets whether the widget should be shown in a compact dock mode.
void enableDataDefinedAlignment(bool enable)
Controls whether data defined alignment buttons are enabled.
QgsMapCanvas * mMapCanvas
Associated map canvas.
QgsSymbolWidgetContext context() const
Returns the context in which the widget is shown, e.g., the associated map canvas and expression cont...
~QgsTextFormatWidget() override
void deactivateField(QgsPalLayerSettings::Property key)
Deactivate a field from data defined properties and update the corresponding button.
void setFormat(const QgsTextFormat &format)
Sets the current formatting settings.
virtual void setFormatFromStyle(const QString &name, QgsStyle::StyleEntity type)
Sets the current text settings from a style entry.
QButtonGroup * mDirectSymbBtnGrp
Symbol direction button group.
void updateWidgetForFormat(const QgsTextFormat &format)
Updates the widget's state to reflect the settings in a QgsTextFormat.
QList< QgsSymbolLayerReference > mMaskedSymbolLayers
void widgetChanged()
Emitted when the text format defined by the widget changes.
void setPreviewBackground(const QColor &color)
Sets the background color for the text preview widget.
QButtonGroup * mQuadrantBtnGrp
Quadrant button group.
QgsWkbTypes::GeometryType labelGeometryType() const
Returns the geometry type which will be used by the labeling engine when registering labels for the l...
QgsWkbTypes::GeometryType mGeomType
Geometry type for layer, if known.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
QgsSymbolWidgetContext mContext
Context in which widget is shown.
void updateLinePlacementOptions()
Updates line placement options to reflect current state of widget.
void populateDataDefinedButtons()
Sets up connections required for data defined buttons, or updates the existing definition of these bu...
virtual void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the widget is shown, e.g., the associated map canvas and expression context...
void updatePreview()
Updates the text preview.
void auxiliaryFieldCreated()
Emitted when an auxiliary field is created in the widget.
QgsStringReplacementCollection mSubstitutions
Text substitution list.
@ Text
Default mode, show text formatting settings only.
@ Labeling
Show labeling settings in addition to text formatting settings.
virtual void saveFormat()
Saves the current text settings to a style entry.
QgsPropertyCollection mDataDefinedProperties
Data defined properties as defined in the widget.
QgsVectorLayer * mLayer
Associated vector layer.
Container for all settings relating to text rendering.
void setColor(const QColor &color)
Sets the color that text will be rendered in.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the text.
void setSize(double size)
Sets the size for rendered text.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the size.
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the format's property collection, used for data defined overrides.
void setFont(const QFont &font)
Sets the font used for rendering text.
double lineHeight() const
Returns the line height for text.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the size of rendered text.
void setOrientation(TextOrientation orientation)
Sets the orientation for the text.
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the format's property collection, used for data defined overrides.
void setShadow(const QgsTextShadowSettings &shadowSettings)
Sets the text's drop shadow settings.
void setMask(const QgsTextMaskSettings &maskSettings)
Sets the text's masking settings.
bool fontFound() const
Returns true if the specified font was found on the system, or false if the font was not found and a ...
void setPreviewBackgroundColor(const QColor &color)
Sets the background color that text will be rendered on for previews.
void setOpacity(double opacity)
Sets the text's opacity.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the text.
TextOrientation orientation() const
Returns the orientation of the text.
void setAllowHtmlFormatting(bool allow)
Sets whether text should be treated as a HTML document and HTML tags should be used for formatting th...
QString resolvedFontFamily() const
Returns the family for the resolved font, ie if the specified font was not found on the system this w...
QgsTextMaskSettings & mask()
Returns a reference to the masking settings.
bool isValid() const
Returns true if the format is valid.
void setCapitalization(QgsStringUtils::Capitalization capitalization)
Sets the text capitalization style.
void setBuffer(const QgsTextBufferSettings &bufferSettings)
Sets the text's buffer settings.
QgsTextBackgroundSettings & background()
Returns a reference to the text background settings.
TextOrientation
Text orientation.
@ HorizontalOrientation
Vertically oriented text.
@ RotationBasedOrientation
Horizontally or vertically oriented text based on rotation (only available for map labeling)
@ VerticalOrientation
Horizontally oriented text.
bool allowHtmlFormatting() const
Returns true if text should be treated as a HTML document and HTML tags should be used for formatting...
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the size of rendered text.
double opacity() const
Returns the text's opacity.
QString namedStyle() const
Returns the named style for the font used for rendering text (e.g., "bold").
double size() const
Returns the size for rendered text.
QgsTextShadowSettings & shadow()
Returns a reference to the text drop shadow settings.
void setBackground(const QgsTextBackgroundSettings &backgroundSettings)
Sets the text's background settings.q.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the size.
void setNamedStyle(const QString &style)
Sets the named style for the font used for rendering text.
QgsStringUtils::Capitalization capitalization() const
Returns the text capitalization style.
QColor color() const
Returns the color that text will be rendered in.
QFont font() const
Returns the font used for rendering text.
QColor previewBackgroundColor() const
Returns the background color for text previews.
QgsTextBufferSettings & buffer()
Returns a reference to the text buffer settings.
void setLineHeight(double height)
Sets the line height for text.
Container for settings relating to a selective masking around a text.
void setEnabled(bool)
Returns whether the mask is enabled.
void setMaskedSymbolLayers(const QList< QgsSymbolLayerReference > &maskedLayers)
Sets the symbol layers that will be masked by this buffer.
QList< QgsSymbolLayerReference > maskedSymbolLayers() const
Returns a list of references to symbol layers that are masked by this buffer.
void setSize(double size)
Sets the size of the buffer.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the buffer size.
double size() const
Returns the size of the buffer.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the buffer size.
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units used for the buffer size.
QgsPaintEffect * paintEffect() const
Returns the current paint effect for the mask.
void setJoinStyle(Qt::PenJoinStyle style)
Sets the join style used for drawing the buffer.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the buffer size.
double opacity() const
Returns the mask's opacity.
bool enabled() const
Returns whether the mask is enabled.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the mask.
Qt::PenJoinStyle joinStyle() const
Returns the buffer join style.
void setOpacity(double opacity)
Sets the mask's opacity.
Container for settings relating to a text shadow.
int offsetAngle() const
Returns the angle for offsetting the position of the shadow from the text.
void setBlurRadiusMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shadow blur radius.
bool enabled() const
Returns whether the shadow is enabled.
int scale() const
Returns the scaling used for the drop shadow (in percentage of original size).
void setShadowPlacement(QgsTextShadowSettings::ShadowPlacement placement)
Sets the placement for the drop shadow.
double opacity() const
Returns the shadow's opacity.
QgsMapUnitScale blurRadiusMapUnitScale() const
Returns the map unit scale object for the shadow blur radius.
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shadow offset distance.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the drop shadow.
void setColor(const QColor &color)
Sets the color for the drop shadow.
QColor color() const
Returns the color of the drop shadow.
void setOffsetGlobal(bool global)
Sets whether the global shadow offset should be used.
ShadowPlacement
Placement positions for text shadow.
@ ShadowBuffer
Draw shadow under buffer.
@ ShadowShape
Draw shadow under background shape.
@ ShadowLowest
Draw shadow below all text components.
@ ShadowText
Draw shadow under text.
void setScale(int scale)
Sets the scaling used for the drop shadow (in percentage of original size).
void setBlurAlphaOnly(bool alphaOnly)
Sets whether only the alpha channel for the shadow should be blurred.
QgsTextShadowSettings::ShadowPlacement shadowPlacement() const
Returns the placement for the drop shadow.
double offsetDistance() const
Returns the distance for offsetting the position of the shadow from the text.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the drop shadow.
void setOffsetDistance(double distance)
Sets the distance for offsetting the position of the shadow from the text.
void setOpacity(double opacity)
Sets the shadow's opacity.
QgsMapUnitScale offsetMapUnitScale() const
Returns the map unit scale object for the shadow offset distance.
QgsUnitTypes::RenderUnit blurRadiusUnit() const
Returns the units used for the shadow's blur radius.
bool blurAlphaOnly() const
Returns whether only the alpha channel for the shadow will be blurred.
bool offsetGlobal() const
Returns true if the global shadow offset will be used.
void setOffsetAngle(int angle)
Sets the angle for offsetting the position of the shadow from the text.
QgsUnitTypes::RenderUnit offsetUnit() const
Returns the units used for the shadow's offset.
void setBlurRadiusUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shadow's blur radius.
double blurRadius() const
Returns the blur radius for the shadow.
void setBlurRadius(double blurRadius)
Sets the blur radius for the shadow.
void setOffsetUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shadow's offset.
void setEnabled(bool enabled)
Sets whether the text shadow will be drawn.
QList< QgsUnitTypes::RenderUnit > RenderUnitList
List of render units.
@ RenderMetersInMapUnits
Meters value as Map units.
@ RenderPercentage
Percentage of another measurement (e.g., canvas size, feature size)
@ RenderPoints
Points (e.g., for font sizes)
@ RenderMillimeters
Millimeters.
@ RenderMapUnits
Map units.
Represents a vector layer which manages a vector based data sets.
Q_INVOKABLE QgsWkbTypes::GeometryType geometryType() const
Returns point, line or polygon.
QgsAuxiliaryLayer * auxiliaryLayer()
Returns the current auxiliary layer.
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
QSize iconSize(bool dockableToolbar)
Returns the user-preferred size of a window's toolbar icons.
int scaleIconSize(int standardSize)
Scales an icon size to compensate for display pixel density, making the icon size hi-dpi friendly,...
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.