48#include <QButtonGroup>
53 , mMapCanvas( mapCanvas )
57 setWidgetMode(
Text );
64 , mMapCanvas( mapCanvas )
71 setWidgetMode( mode );
74void QgsTextFormatWidget::initWidget()
78 mGeometryGeneratorGroupBox->setCollapsed(
true );
80 connect( mShapeSVGPathLineEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged );
81 connect( mFontSizeSpinBox,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontSizeSpinBox_valueChanged );
82 connect( mFontFamilyCmbBx, &QFontComboBox::currentFontChanged,
this, &QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged );
83 connect( mFontStyleComboBox, &QComboBox::currentTextChanged,
this, &QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged );
84 connect( mFontUnderlineBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontUnderlineBtn_toggled );
85 connect( mFontStrikethroughBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontStrikethroughBtn_toggled );
86 connect( mFontWordSpacingSpinBox,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged );
87 connect( mFontLetterSpacingSpinBox,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged );
89 connect( mFontMinPixelSpinBox,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged );
90 connect( mFontMaxPixelSpinBox,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged );
99 connect( mShapeTypeCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged );
100 connect( mShapeRotationCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged );
101 connect( mShapeSVGParamsBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGParamsBtn_clicked );
102 connect( mShapeSVGSelectorBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked );
103 connect( mPreviewTextEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mPreviewTextEdit_textChanged );
104 connect( mPreviewTextBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mPreviewTextBtn_clicked );
106 connect( mDirectSymbLeftToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked );
107 connect( mDirectSymbRightToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked );
108 connect( chkLineOrientationDependent, &QCheckBox::toggled,
this, &QgsTextFormatWidget::chkLineOrientationDependent_toggled );
109 connect( mToolButtonConfigureSubstitutes, &QToolButton::clicked,
this, &QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked );
110 connect( mKerningCheckBox, &QCheckBox::toggled,
this, &QgsTextFormatWidget::kerningToggled );
111 connect( mComboOverlapHandling, qOverload< int >( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::overlapModeChanged );
114 mOptionsTab->setIconSize( QSize( iconSize, iconSize ) );
115 mLabelingOptionsListWidget->setIconSize( QSize( iconSize, iconSize ) ) ;
121 mPreviewTextBtn->setIconSize( QSize( iconSize16, iconSize16 ) );
122 mPointOffsetAboveLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
123 mPointOffsetAbove->setIconSize( QSize( iconSize32, iconSize18 ) );
124 mPointOffsetAboveRight->setIconSize( QSize( iconSize32, iconSize18 ) );
125 mPointOffsetLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
126 mPointOffsetOver ->setIconSize( QSize( iconSize32, iconSize18 ) );
127 mPointOffsetRight->setIconSize( QSize( iconSize32, iconSize18 ) );
128 mPointOffsetBelowLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
129 mPointOffsetBelow->setIconSize( QSize( iconSize32, iconSize18 ) );
130 mPointOffsetBelowRight->setIconSize( QSize( iconSize32, iconSize18 ) );
131 mLabelMinScale->setPixmap(
QgsApplication::getThemeIcon( QStringLiteral(
"/mActionZoomOut.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
132 mLabelMaxScale->setPixmap(
QgsApplication::getThemeIcon( QStringLiteral(
"/mActionZoomIn.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
135 mFontUnderlineBtn->setMinimumSize( buttonSize, buttonSize );
136 mFontUnderlineBtn->setMaximumSize( buttonSize, buttonSize );
137 mFontStrikethroughBtn->setMinimumSize( buttonSize, buttonSize );
138 mFontStrikethroughBtn->setMaximumSize( buttonSize, buttonSize );
139 mFontBoldBtn->setMinimumSize( buttonSize, buttonSize );
140 mFontBoldBtn->setMaximumSize( buttonSize, buttonSize );
141 mFontItalicBtn->setMinimumSize( buttonSize, buttonSize );
142 mFontItalicBtn->setMaximumSize( buttonSize, buttonSize );
144 mPreviewScaleComboBox->setMapCanvas(
mMapCanvas );
145 mPreviewScaleComboBox->setShowCurrentScaleButton(
true );
148 const auto unitWidgets = findChildren<QgsUnitSelectionWidget *>();
186 mFontLineHeightSpinBox->setClearValue( 100.0 );
187 mShapeRotationDblSpnBx->setClearValue( 0.0 );
188 mShapeOffsetXSpnBx->setClearValue( 0.0 );
189 mShapeOffsetYSpnBx->setClearValue( 0.0 );
190 mPointOffsetXSpinBox->setClearValue( 0.0 );
191 mPointOffsetYSpinBox->setClearValue( 0.0 );
192 mPointAngleSpinBox->setClearValue( 0.0 );
193 mFontLetterSpacingSpinBox->setClearValue( 0.0 );
194 mFontWordSpacingSpinBox->setClearValue( 0.0 );
195 mZIndexSpinBox->setClearValue( 0.0 );
196 mLineDistanceSpnBx->setClearValue( 0.0 );
197 mMaximumDistanceSpnBx->setMinimum( 0 );
198 mMaximumDistanceSpnBx->setClearValue( 0.0, tr(
"Not set" ) );
199 mSpinStretch->setClearValue( 100 );
200 mTabStopDistanceSpin->setMinimum( 0 );
205 mFontLineHeightSpinBox->setClearValue( 100.0 );
207 mFontLineHeightSpinBox->setClearValue( 10.0 );
227 updateAvailableShadowPositions();
230 mBackgroundMarkerSymbolButton->setDialogTitle( tr(
"Background Symbol" ) );
231 mBackgroundMarkerSymbolButton->registerExpressionContextGenerator(
this );
232 mBackgroundMarkerSymbolButton->setMapCanvas(
mMapCanvas );
234 mBackgroundFillSymbolButton->setDialogTitle( tr(
"Background Symbol" ) );
235 mBackgroundFillSymbolButton->registerExpressionContextGenerator(
this );
236 mBackgroundFillSymbolButton->setMapCanvas(
mMapCanvas );
240 mRefFont = lblFontPreview->font();
243 connect( mShadowOffsetAngleDial, &QAbstractSlider::valueChanged, mShadowOffsetAngleSpnBx, &QSpinBox::setValue );
244 connect( mShadowOffsetAngleSpnBx,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), mShadowOffsetAngleDial, &QAbstractSlider::setValue );
245 connect( mLimitLabelChkBox, &QAbstractButton::toggled, mLimitLabelSpinBox, &QWidget::setEnabled );
246 connect( mCheckBoxSubstituteText, &QAbstractButton::toggled, mToolButtonConfigureSubstitutes, &QWidget::setEnabled );
256 populateFontCapitalsComboBox();
259 mPreviewBackgroundBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
260 mPreviewBackgroundBtn->setContext( QStringLiteral(
"labeling" ) );
261 mPreviewBackgroundBtn->setColor( QColor( 255, 255, 255 ) );
262 btnTextColor->setColorDialogTitle( tr(
"Select Text Color" ) );
263 btnTextColor->setContext( QStringLiteral(
"labeling" ) );
264 btnTextColor->setDefaultColor( Qt::black );
265 btnBufferColor->setColorDialogTitle( tr(
"Select Buffer Color" ) );
266 btnBufferColor->setContext( QStringLiteral(
"labeling" ) );
267 btnBufferColor->setDefaultColor( Qt::white );
268 mShapeStrokeColorBtn->setColorDialogTitle( tr(
"Select Stroke Color" ) );
269 mShapeStrokeColorBtn->setContext( QStringLiteral(
"labeling" ) );
270 mShapeFillColorBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
271 mShapeFillColorBtn->setContext( QStringLiteral(
"labeling" ) );
272 mShadowColorBtn->setColorDialogTitle( tr(
"Select Shadow Color" ) );
273 mShadowColorBtn->setContext( QStringLiteral(
"labeling" ) );
274 mShadowColorBtn->setDefaultColor( Qt::black );
276 mFontColorDDBtn->registerLinkedWidget( btnTextColor );
277 mBufferColorDDBtn->registerLinkedWidget( btnBufferColor );
278 mShapeStrokeColorDDBtn->registerLinkedWidget( mShapeStrokeColorBtn );
279 mShapeFillColorDDBtn->registerLinkedWidget( mShapeFillColorBtn );
280 mShadowColorDDBtn->registerLinkedWidget( mShadowColorBtn );
321 const auto groupBoxes = findChildren<QgsCollapsibleGroupBox *>();
324 grpbox->setSettingGroup( QStringLiteral(
"mAdvLabelingDlg" ) );
330 mLabelingOptionsListWidget->setAttribute( Qt::WA_MacShowFocusRect,
false );
335 QSizePolicy policy( mLabelingOptionsListFrame->sizePolicy() );
336 policy.setHorizontalStretch( 0 );
337 mLabelingOptionsListFrame->setSizePolicy( policy );
338 if ( !settings.
contains( QStringLiteral(
"/Windows/Labeling/OptionsSplitState" ) ) )
341 QList<int> splitsizes;
343 mLabelingOptionsSplitter->setSizes( splitsizes );
347 connect( mLabelStackedWidget, &QStackedWidget::currentChanged,
this, &QgsTextFormatWidget::optionsStackedWidget_CurrentChanged );
350 mFontPreviewSplitter->restoreState( settings.
value( QStringLiteral(
"Windows/Labeling/FontPreviewSplitState" ) ).toByteArray() );
351 mLabelingOptionsSplitter->restoreState( settings.
value( QStringLiteral(
"Windows/Labeling/OptionsSplitState" ) ).toByteArray() );
353 mLabelingOptionsListWidget->setCurrentRow( settings.
value( QStringLiteral(
"Windows/Labeling/Tab" ), 0 ).toInt() );
357 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
361 mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
365 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
367 overlapModeChanged();
369#ifndef HAS_KDE_QT5_FONT_STRETCH_FIX
370 mLabelStretch->hide();
371 mSpinStretch->hide();
372 mFontStretchDDBtn->hide();
377 QList<QWidget *> widgets;
378 widgets << btnBufferColor
380 << chkLabelPerFeaturePart
384 << chkLineOrientationDependent
386 << chkPreserveRotation
388 << comboBufferBlendMode
390 << mBufferJoinStyleComboBox
391 << mBufferTranspFillChbx
392 << mBufferOpacityWidget
393 << mCentroidInsideCheckBox
395 << mCoordRotationUnitComboBox
397 << mDirectSymbLeftLineEdit
398 << mDirectSymbRevChkBx
399 << mDirectSymbRightLineEdit
400 << mFitInsidePolygonCheckBox
401 << mFontCapitalsComboBox
402 << mFontLetterSpacingSpinBox
403 << mFontLimitPixelChkBox
404 << mFontLineHeightSpinBox
405 << mLineHeightUnitWidget
406 << mFontMaxPixelSpinBox
407 << mFontMinPixelSpinBox
408 << mFontMultiLineAlignComboBox
410 << mFontStyleComboBox
411 << mTextOrientationComboBox
412 << mTextOpacityWidget
414 << mFontWordSpacingSpinBox
416 << mFormatNumDecimalsSpnBx
417 << mFormatNumPlusSignChkBx
419 << mLimitLabelSpinBox
420 << mLineDistanceSpnBx
421 << mLineDistanceUnitWidget
422 << mMaximumDistanceSpnBx
423 << mMaximumDistanceUnitWidget
424 << mMaxCharAngleInDSpinBox
425 << mMaxCharAngleOutDSpinBox
427 << mOffsetTypeComboBox
428 << mCheckAllowDegradedPlacement
429 << mComboOverlapHandling
430 << mPointAngleSpinBox
431 << mPointOffsetUnitWidget
432 << mPointOffsetXSpinBox
433 << mPointOffsetYSpinBox
434 << mPreviewBackgroundBtn
437 << mRepeatDistanceSpinBox
438 << mRepeatDistanceUnitWidget
439 << mOverrunDistanceSpinBox
440 << mOverrunDistanceUnitWidget
441 << mScaleBasedVisibilityChkBx
447 << mShadowOffsetAngleSpnBx
448 << mShadowOffsetGlobalChkBx
449 << mShadowOffsetSpnBx
450 << mShadowOffsetUnitWidget
451 << mShadowRadiusAlphaChkBx
452 << mShadowRadiusDblSpnBx
453 << mShadowRadiusUnitWidget
455 << mShadowOpacityWidget
458 << mShapeStrokeColorBtn
459 << mShapeStrokeWidthSpnBx
460 << mShapeStrokeWidthUnitWidget
462 << mShapeFillColorBtn
463 << mShapeOffsetXSpnBx
464 << mShapeOffsetYSpnBx
465 << mShapeOffsetUnitWidget
466 << mShapeRadiusXDbSpnBx
467 << mShapeRadiusYDbSpnBx
468 << mShapeRotationCmbBx
469 << mShapeRotationDblSpnBx
470 << mShapeRadiusUnitWidget
471 << mShapeSVGPathLineEdit
473 << mShapeSizeUnitWidget
476 << mBackgroundOpacityWidget
481 << mAutoWrapLengthSpinBox
482 << mAutoWrapTypeComboBox
483 << mCentroidRadioVisible
484 << mCentroidRadioWhole
485 << mDirectSymbRadioBtnAbove
486 << mDirectSymbRadioBtnBelow
487 << mDirectSymbRadioBtnLR
488 << mUpsidedownRadioAll
489 << mUpsidedownRadioDefined
490 << mUpsidedownRadioOff
491 << mPlacementModeComboBox
492 << mFieldExpressionWidget
493 << mCheckBoxSubstituteText
494 << mGeometryGeneratorGroupBox
495 << mGeometryGenerator
496 << mGeometryGeneratorType
497 << mBackgroundMarkerSymbolButton
498 << mBackgroundFillSymbolButton
499 << mCalloutsDrawCheckBox
500 << mCalloutStyleComboBox
503 << mMaskJoinStyleComboBox
504 << mMaskBufferSizeSpinBox
505 << mMaskOpacityWidget
506 << mCheckAllowLabelsOutsidePolygons
507 << mHtmlFormattingCheckBox
508 << mPrioritizationComboBox
509 << mTabDistanceUnitWidget
510 << mTabStopDistanceSpin;
517 connect( mBufferDrawChkBx, &QCheckBox::stateChanged,
this, [ = ](
int )
519 updateBufferFrameStatus();
522 connect( mShapeDrawChkBx, &QCheckBox::stateChanged,
this, [ = ](
int )
524 updateShapeFrameStatus();
527 connect( mShadowDrawChkBx, &QCheckBox::stateChanged,
this, [ = ](
int )
529 updateShadowFrameStatus();
532 connect( mCalloutsDrawCheckBox, &QCheckBox::stateChanged,
this, [ = ](
int )
534 updateCalloutFrameStatus();
542 whileBlocking( mOptionsTab )->setCurrentIndex( mLabelStackedWidget->currentIndex() );
543 mOptionsTab->tabBar()->setUsesScrollButtons(
true );
564 toggleDDButtons(
true );
571 const int prevIndex = mOptionsTab->currentIndex();
572 toggleDDButtons(
true );
573 delete mLabelingOptionsListWidget->takeItem( 8 );
574 delete mLabelingOptionsListWidget->takeItem( 7 );
575 delete mLabelingOptionsListWidget->takeItem( 6 );
576 delete mLabelingOptionsListWidget->takeItem( 3 );
577 mOptionsTab->removeTab( 8 );
578 mOptionsTab->removeTab( 7 );
579 mOptionsTab->removeTab( 6 );
580 mOptionsTab->removeTab( 3 );
581 mLabelStackedWidget->removeWidget( mLabelPage_Rendering );
582 mLabelStackedWidget->removeWidget( mLabelPage_Callouts );
583 mLabelStackedWidget->removeWidget( mLabelPage_Mask );
584 mLabelStackedWidget->removeWidget( mLabelPage_Placement );
594 mLabelStackedWidget->setCurrentIndex( prevIndex - 1 );
595 mOptionsTab->setCurrentIndex( prevIndex - 1 );
602 mLabelStackedWidget->setCurrentIndex( 0 );
603 mOptionsTab->setCurrentIndex( 0 );
607 frameLabelWith->hide();
608 mDirectSymbolsFrame->hide();
609 mFormatNumFrame->hide();
610 mFormatNumChkBx->hide();
611 mFormatNumDDBtn->hide();
612 mCheckBoxSubstituteText->hide();
613 mToolButtonConfigureSubstitutes->hide();
614 mLabelWrapOnCharacter->hide();
615 wrapCharacterEdit->hide();
616 mWrapCharDDBtn->hide();
617 mLabelWrapLinesTo->hide();
618 mAutoWrapLengthSpinBox->hide();
619 mAutoWrapLengthDDBtn->hide();
620 mAutoWrapTypeComboBox->hide();
621 mFontMultiLineLabel->hide();
622 mFontMultiLineAlignComboBox->hide();
623 mFontMultiLineAlignDDBtn->hide();
631void QgsTextFormatWidget::toggleDDButtons(
bool visible )
633 const auto buttons = findChildren< QgsPropertyOverrideButton * >();
636#ifndef HAS_KDE_QT5_FONT_STRETCH_FIX
637 if ( button == mFontStretchDDBtn )
640 button->setVisible( visible );
646 mOptionsTab->setVisible( enabled );
647 mOptionsTab->setTabToolTip( 0, tr(
"Text" ) );
648 mOptionsTab->setTabToolTip( 1, tr(
"Formatting" ) );
649 mOptionsTab->setTabToolTip( 2, tr(
"Buffer" ) );
650 mOptionsTab->setTabToolTip( 3, tr(
"Mask" ) );
651 mOptionsTab->setTabToolTip( 4, tr(
"Background" ) );
652 mOptionsTab->setTabToolTip( 5, tr(
"Shadow" ) );
653 mOptionsTab->setTabToolTip( 6, tr(
"Callouts" ) );
654 mOptionsTab->setTabToolTip( 7, tr(
"Placement" ) );
655 mOptionsTab->setTabToolTip( 8, tr(
"Rendering" ) );
657 mLabelingOptionsListFrame->setVisible( !enabled );
658 groupBox_mPreview->setVisible( !enabled );
662void QgsTextFormatWidget::connectValueChanged(
const QList<QWidget *> &widgets,
const char *slot )
664 const auto constWidgets = widgets;
665 for ( QWidget *widget : constWidgets )
669 connect( w, SIGNAL( changed() ),
this, slot );
673 connect( w, SIGNAL( fieldChanged( QString ) ),
this, slot );
675 else if (
QgsOpacityWidget *w = qobject_cast< QgsOpacityWidget *>( widget ) )
677 connect( w, SIGNAL( opacityChanged(
double ) ),
this, slot );
679 else if (
QgsScaleWidget *w = qobject_cast< QgsScaleWidget *>( widget ) )
681 connect( w, SIGNAL( scaleChanged(
double ) ),
this, slot );
685 connect( w, SIGNAL( changed() ),
this, slot );
687 else if ( QComboBox *w = qobject_cast<QComboBox *>( widget ) )
689 connect( w, SIGNAL( currentIndexChanged(
int ) ),
this, slot );
691 else if ( QSpinBox *w = qobject_cast<QSpinBox *>( widget ) )
693 connect( w, SIGNAL( valueChanged(
int ) ),
this, slot );
695 else if ( QDoubleSpinBox *w = qobject_cast<QDoubleSpinBox *>( widget ) )
697 connect( w, SIGNAL( valueChanged(
double ) ),
this, slot );
699 else if (
QgsColorButton *w = qobject_cast<QgsColorButton *>( widget ) )
701 connect( w, SIGNAL( colorChanged( QColor ) ),
this, slot );
703 else if ( QCheckBox *w = qobject_cast<QCheckBox *>( widget ) )
705 connect( w, SIGNAL( toggled(
bool ) ),
this, slot );
707 else if ( QRadioButton *w = qobject_cast<QRadioButton *>( widget ) )
709 connect( w, SIGNAL( toggled(
bool ) ),
this, slot );
711 else if ( QLineEdit *w = qobject_cast<QLineEdit *>( widget ) )
713 connect( w, SIGNAL( textEdited( QString ) ),
this, slot );
715 else if ( QSlider *w = qobject_cast<QSlider *>( widget ) )
717 connect( w, SIGNAL( valueChanged(
int ) ),
this, slot );
719 else if ( QGroupBox *w = qobject_cast<QGroupBox *>( widget ) )
721 connect( w, SIGNAL( toggled(
bool ) ),
this, slot );
725 connect( w, SIGNAL( textChanged() ),
this, slot );
729 QgsLogger::warning( QStringLiteral(
"Could not create connection for widget %1" ).arg( widget->objectName() ) );
762 mDirectSymbDDBtn->registerCheckedWidget( mDirectSymbChkBx );
770 mFormatNumDDBtn->registerCheckedWidget( mFormatNumChkBx );
785 mEnableMaskDDBtn->registerCheckedWidget( mEnableMaskChkBx );
793 mShapeDrawDDBtn->registerCheckedWidget( mShapeDrawChkBx );
815 mShadowDrawDDBtn->registerCheckedWidget( mShadowDrawChkBx );
858 updateDataDefinedAlignment();
861 const QString ddScaleVisInfo = tr(
"Value < 0 represents a scale closer than 1:1, e.g. -10 = 10:1<br>"
862 "Value of 0 disables the specific limit." );
864 mScaleBasedVisibilityDDBtn->registerCheckedWidget( mScaleBasedVisibilityChkBx );
866 mScaleBasedVisibilityMinDDBtn->setUsageInfo( ddScaleVisInfo );
868 mScaleBasedVisibilityMaxDDBtn->setUsageInfo( ddScaleVisInfo );
874 mMinScaleWidget->setPredefinedScales( scales );
875 mMaxScaleWidget->setPredefinedScales( scales );
880 mMinScaleWidget->updateScales();
881 mMaxScaleWidget->updateScales();
885 mFontLimitPixelDDBtn->registerCheckedWidget( mFontLimitPixelChkBox );
906 if ( !mButtons.contains( key ) )
911 mButtons[key] = button;
928 mBufferDrawChkBx->setChecked( buffer.
enabled() );
929 mBufferFrame->setEnabled( buffer.
enabled() );
930 spinBufferSize->setValue( buffer.
size() );
931 mBufferUnitWidget->setUnit( buffer.
sizeUnit() );
933 btnBufferColor->setColor( buffer.
color() );
934 mBufferOpacityWidget->setOpacity( buffer.
opacity() );
935 mBufferJoinStyleComboBox->setPenJoinStyle( buffer.
joinStyle() );
937 comboBufferBlendMode->setBlendMode( buffer.
blendMode() );
939 mBufferEffect.reset( lPaintEffect->clone() );
943 mBufferEffect->setEnabled(
false );
945 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
949 mEnableMaskChkBx->setChecked( mask.
enabled() );
950 mMaskBufferSizeSpinBox->setValue( mask.
size() );
951 mMaskBufferUnitWidget->setUnit( mask.
sizeUnit() );
953 mMaskOpacityWidget->setOpacity( mask.
opacity() );
954 mMaskJoinStyleComboBox->setPenJoinStyle( mask.
joinStyle() );
956 mMaskEffect.reset( lPaintEffect->clone() );
960 mMaskEffect->setEnabled(
false );
962 mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
972 mTextOrientationComboBox->setCurrentIndex( mTextOrientationComboBox->findData(
static_cast< int >(
format.
orientation() ) ) );
975 mFontWordSpacingSpinBox->setValue(
format.
font().wordSpacing() );
976 mFontLetterSpacingSpinBox->setValue(
format.
font().letterSpacing() );
985 updateFont( mRefFont );
991 const QString missingTxt = tr(
"%1 not found. Default substituted." );
992 QString txtPrepend = tr(
"Chosen font" );
997 mFontMissingLabel->setText( missingTxt.arg( txtPrepend ) );
1000 mLabelingOptionsListWidget->setCurrentRow( 0 );
1007 mShapeDrawChkBx->setChecked( background.
enabled() );
1008 mShapeFrame->setEnabled( background.
enabled() );
1009 mShapeTypeCmbBx->blockSignals(
true );
1010 mShapeTypeCmbBx->setCurrentIndex( mShapeTypeCmbBx->findData( background.
type() ) );
1011 mShapeTypeCmbBx->blockSignals(
false );
1012 updateAvailableShadowPositions();
1013 mShapeSVGPathLineEdit->setText( background.
svgFile() );
1015 mShapeSizeCmbBx->setCurrentIndex( background.
sizeType() );
1016 mShapeSizeXSpnBx->setValue( background.
size().width() );
1017 mShapeSizeYSpnBx->setValue( background.
size().height() );
1018 mShapeSizeUnitWidget->setUnit( background.
sizeUnit() );
1020 mShapeRotationCmbBx->setCurrentIndex( background.
rotationType() );
1023 mShapeRotationDblSpnBx->setValue( background.
rotation() );
1024 mShapeOffsetXSpnBx->setValue( background.
offset().x() );
1025 mShapeOffsetYSpnBx->setValue( background.
offset().y() );
1026 mShapeOffsetUnitWidget->setUnit( background.
offsetUnit() );
1028 mShapeRadiusXDbSpnBx->setValue( background.
radii().width() );
1029 mShapeRadiusYDbSpnBx->setValue( background.
radii().height() );
1030 mShapeRadiusUnitWidget->setUnit( background.
radiiUnit() );
1033 mShapeFillColorBtn->setColor( background.
fillColor() );
1034 mShapeStrokeColorBtn->setColor( background.
strokeColor() );
1035 mShapeStrokeWidthSpnBx->setValue( background.
strokeWidth() );
1039 mBackgroundOpacityWidget->setOpacity( background.
opacity() );
1040 mShapeBlendCmbBx->setBlendMode( background.
blendMode() );
1042 mLoadSvgParams =
false;
1043 mShapeTypeCmbBx_currentIndexChanged( background.
type() );
1045 if (
auto *lPaintEffect = background.
paintEffect() )
1046 mBackgroundEffect.reset( lPaintEffect->clone() );
1050 mBackgroundEffect->setEnabled(
false );
1052 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
1058 mShadowDrawChkBx->setChecked( shadow.
enabled() );
1059 mShadowFrame->setEnabled( shadow.
enabled() );
1060 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( shadow.
shadowPlacement() ) );
1061 mShadowOffsetAngleSpnBx->setValue( shadow.
offsetAngle() );
1063 mShadowOffsetUnitWidget->setUnit( shadow.
offsetUnit() );
1065 mShadowOffsetGlobalChkBx->setChecked( shadow.
offsetGlobal() );
1067 mShadowRadiusDblSpnBx->setValue( shadow.
blurRadius() );
1070 mShadowRadiusAlphaChkBx->setChecked( shadow.
blurAlphaOnly() );
1071 mShadowOpacityWidget->setOpacity( shadow.
opacity() );
1072 mShadowScaleSpnBx->setValue( shadow.
scale() );
1074 mShadowColorBtn->setColor( shadow.
color() );
1075 mShadowBlendCmbBx->setBlendMode( shadow.
blendMode() );
1087 settings.
setValue( QStringLiteral(
"Windows/Labeling/FontPreviewSplitState" ), mFontPreviewSplitter->saveState() );
1088 settings.
setValue( QStringLiteral(
"Windows/Labeling/OptionsSplitState" ), mLabelingOptionsSplitter->saveState() );
1090 int prevIndex = mLabelingOptionsListWidget->currentRow();
1091 if ( mWidgetMode ==
Text )
1093 switch ( prevIndex )
1102 settings.
setValue( QStringLiteral(
"Windows/Labeling/Tab" ), prevIndex );
1129 buffer.
setEnabled( mBufferDrawChkBx->isChecked() );
1130 buffer.
setSize( spinBufferSize->value() );
1131 buffer.
setColor( btnBufferColor->color() );
1132 buffer.
setOpacity( mBufferOpacityWidget->opacity() );
1135 buffer.
setJoinStyle( mBufferJoinStyleComboBox->penJoinStyle() );
1137 buffer.
setBlendMode( comboBufferBlendMode->blendMode() );
1146 mask.
setEnabled( mEnableMaskChkBx->isChecked() );
1147 mask.
setSize( mMaskBufferSizeSpinBox->value() );
1148 mask.
setOpacity( mMaskOpacityWidget->opacity() );
1149 mask.
setSizeUnit( mMaskBufferUnitWidget->unit() );
1151 mask.
setJoinStyle( mMaskJoinStyleComboBox->penJoinStyle() );
1161 background.
setEnabled( mShapeDrawChkBx->isChecked() );
1163 background.
setSvgFile( mShapeSVGPathLineEdit->text() );
1165 background.
setSize( QSizeF( mShapeSizeXSpnBx->value(), mShapeSizeYSpnBx->value() ) );
1166 background.
setSizeUnit( mShapeSizeUnitWidget->unit() );
1169 background.
setRotation( mShapeRotationDblSpnBx->value() );
1170 background.
setOffset( QPointF( mShapeOffsetXSpnBx->value(), mShapeOffsetYSpnBx->value() ) );
1173 background.
setRadii( QSizeF( mShapeRadiusXDbSpnBx->value(), mShapeRadiusYDbSpnBx->value() ) );
1174 background.
setRadiiUnit( mShapeRadiusUnitWidget->unit() );
1177 background.
setFillColor( mShapeFillColorBtn->color() );
1182 background.
setOpacity( mBackgroundOpacityWidget->opacity() );
1183 background.
setBlendMode( mShapeBlendCmbBx->blendMode() );
1194 shadow.
setEnabled( mShadowDrawChkBx->isChecked() );
1205 shadow.
setOpacity( mShadowOpacityWidget->opacity() );
1206 shadow.
setScale( mShadowScaleSpnBx->value() );
1207 shadow.
setColor( mShadowColorBtn->color() );
1211 if ( includeDataDefinedProperties )
1242 if ( mButtons.contains( key ) )
1251void QgsTextFormatWidget::optionsStackedWidget_CurrentChanged(
int indx )
1253 mLabelingOptionsListWidget->blockSignals(
true );
1254 mLabelingOptionsListWidget->setCurrentRow( indx );
1255 mLabelingOptionsListWidget->blockSignals(
false );
1264 mPreviewExpressionContext = *lExpressionContext;
1269 const auto symbolButtonWidgets = findChildren<QgsSymbolButton *>();
1277void QgsTextFormatWidget::collapseSample(
bool collapse )
1281 QList<int> splitSizes = mFontPreviewSplitter->sizes();
1282 if ( splitSizes[0] > groupBox_mPreview->height() )
1284 const int delta = splitSizes[0] - groupBox_mPreview->height();
1285 splitSizes[0] -= delta;
1286 splitSizes[1] += delta;
1287 mFontPreviewSplitter->setSizes( splitSizes );
1292void QgsTextFormatWidget::changeTextColor(
const QColor &color )
1298void QgsTextFormatWidget::updateFont(
const QFont &newFont )
1301 if ( newFont != mRefFont )
1310 QFont symbolFont = mRefFont;
1311 symbolFont.setPointSize( font().pointSize() );
1312 mDirectSymbLeftLineEdit->setFont( symbolFont );
1313 mDirectSymbRightLineEdit->setFont( symbolFont );
1315 blockFontChangeSignals(
true );
1316 mFontFamilyCmbBx->setCurrentFont( symbolFont );
1317 populateFontStyleComboBox();
1318 mFontUnderlineBtn->setChecked( mRefFont.underline() );
1319 mFontStrikethroughBtn->setChecked( mRefFont.strikeOut() );
1320 mKerningCheckBox->setChecked( mRefFont.kerning() );
1321 blockFontChangeSignals(
false );
1329void QgsTextFormatWidget::blockFontChangeSignals(
bool blk )
1331 mFontFamilyCmbBx->blockSignals( blk );
1332 mFontStyleComboBox->blockSignals( blk );
1333 mFontCapitalsComboBox->blockSignals( blk );
1334 mFontUnderlineBtn->blockSignals( blk );
1335 mFontStrikethroughBtn->blockSignals( blk );
1336 mFontWordSpacingSpinBox->blockSignals( blk );
1337 mFontLetterSpacingSpinBox->blockSignals( blk );
1338 mKerningCheckBox->blockSignals( blk );
1353 lblFontPreview->setFormat(
format() );
1356void QgsTextFormatWidget::scrollPreview()
1358 scrollArea_mPreview->ensureVisible( 0, 0, 0, 0 );
1363 mPreviewBackgroundColor = color;
1365 scrollArea_mPreview->widget()->setStyleSheet( QStringLiteral(
"background: rgb(%1, %2, %3);" ).arg( QString::number( color.red() ),
1366 QString::number( color.green() ),
1367 QString::number( color.blue() ) ) );
1370void QgsTextFormatWidget::changeBufferColor(
const QColor &color )
1379 bool showLineFrame =
false;
1380 bool showCentroidFrame =
false;
1381 bool showQuadrantFrame =
false;
1382 bool showFixedQuadrantFrame =
false;
1383 bool showPlacementPriorityFrame =
false;
1384 bool showOffsetTypeFrame =
false;
1385 bool showOffsetFrame =
false;
1386 bool showDistanceFrame =
false;
1387 bool showMaximumDistanceFrame =
false;
1388 bool showPrioritizationFrame =
false;
1389 bool showRotationFrame =
false;
1390 bool showMaxCharAngleFrame =
false;
1395 bool enableMultiLinesFrame =
true;
1401 showDistanceFrame =
true;
1402 showMaximumDistanceFrame =
true;
1410 showQuadrantFrame =
true;
1411 showFixedQuadrantFrame =
true;
1412 showOffsetFrame =
true;
1413 showRotationFrame =
true;
1417 showDistanceFrame =
true;
1418 showMaximumDistanceFrame =
true;
1419 showPlacementPriorityFrame =
true;
1420 showPrioritizationFrame =
true;
1421 showOffsetTypeFrame =
true;
1428 showLineFrame =
true;
1429 showDistanceFrame =
true;
1432 const bool offline = chkLineAbove->isChecked() || chkLineBelow->isChecked();
1433 chkLineOrientationDependent->setEnabled( offline );
1434 mPlacementDistanceFrame->setEnabled( offline );
1438 showMaxCharAngleFrame = isCurved;
1440 enableMultiLinesFrame = !isCurved;
1445 showDistanceFrame =
true;
1448 mPlacementLineFrame->setVisible( showLineFrame );
1449 mPlacementPolygonFrame->setVisible( showPolygonPlacementOptions );
1450 mPlacementCentroidFrame->setVisible( showCentroidFrame );
1451 mPlacementQuadrantFrame->setVisible( showQuadrantFrame );
1452 mPlacementFixedQuadrantFrame->setVisible( showFixedQuadrantFrame );
1453 mPlacementCartographicFrame->setVisible( showPlacementPriorityFrame );
1454 mPlacementOffsetFrame->setVisible( showOffsetFrame );
1455 mPlacementDistanceFrame->setVisible( showDistanceFrame );
1456 mPlacementMaximumDistanceFrame->setVisible( showMaximumDistanceFrame );
1457 mPlacementPrioritizationFrame->setVisible( showPrioritizationFrame );
1458 mPlacementOffsetTypeFrame->setVisible( showOffsetTypeFrame );
1459 mPlacementRotationFrame->setVisible( showRotationFrame );
1464 mPlacementMaxCharAngleFrame->setVisible( showMaxCharAngleFrame );
1466 mMultiLinesFrame->setEnabled( enableMultiLinesFrame );
1470 switch ( currentPlacement )
1474 helperText = tr(
"Arranges label candidates in a clockwise circle around the feature, preferring placements to the top-right of the feature." );
1476 helperText = tr(
"Arranges label candidates in a cluster around the feature's centroid, preferring placements directly over the centroid." );
1480 helperText = tr(
"Arranges label candidates directly over the feature or at a preset offset from the feature." );
1482 helperText = tr(
"Arranges label candidates directly over the feature's centroid, or at a preset offset from the centroid." );
1486 helperText = tr(
"Arranges label candidates parallel to a generalised line representing the feature. Placements which fall over straighter portions of the line are preferred." );
1488 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." );
1492 helperText = tr(
"Arranges candidates following the curvature of a line feature. Placements which fall over straighter portions of the line are preferred." );
1496 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." );
1498 helperText = tr(
"Label candidates are arranged horizontally along the length of the feature." );
1502 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." );
1506 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." );
1510 helperText = tr(
"Arranges candidates following the curvature of the feature's perimeter. Placements which fall over straighter portions of the perimeter are preferred." );
1514 helperText = tr(
"Label candidates are placed outside of the features, preferring placements which give greatest visual association between the label and the feature." );
1517 mPlacementModeDescriptionLabel->setText( QStringLiteral(
"<i>%1</i>" ).arg( helperText ) );
1520void QgsTextFormatWidget::populateFontCapitalsComboBox()
1525#if defined(HAS_KDE_QT5_SMALL_CAPS_FIX) || QT_VERSION >= QT_VERSION_CHECK(6, 3, 0)
1535void QgsTextFormatWidget::populateFontStyleComboBox()
1537 mFontStyleComboBox->clear();
1538 const QStringList styles = mFontDB.styles( mRefFont.family() );
1539 const auto constStyles = styles;
1540 for (
const QString &style : constStyles )
1542 mFontStyleComboBox->addItem( style );
1545 QString targetStyle = mFontDB.styleString( mRefFont );
1546 if ( !styles.contains( targetStyle ) )
1549 targetStyle = QFontInfo( f ).styleName();
1550 mRefFont.setStyleName( targetStyle );
1553 const int stylIndx = mFontStyleComboBox->findText( targetStyle );
1554 if ( stylIndx > -1 )
1559 mFontStyleComboBox->setCurrentIndex( curIndx );
1562void QgsTextFormatWidget::mFontSizeSpinBox_valueChanged(
double d )
1564 mRefFont.setPointSizeF( d );
1565 updateFont( mRefFont );
1568void QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged(
const QFont &f )
1571 updateFont( mRefFont );
1574void QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged(
const QString &text )
1577 updateFont( mRefFont );
1580void QgsTextFormatWidget::mFontUnderlineBtn_toggled(
bool ckd )
1582 mRefFont.setUnderline( ckd );
1583 updateFont( mRefFont );
1586void QgsTextFormatWidget::mFontStrikethroughBtn_toggled(
bool ckd )
1588 mRefFont.setStrikeOut( ckd );
1589 updateFont( mRefFont );
1592void QgsTextFormatWidget::kerningToggled(
bool checked )
1594 mRefFont.setKerning( checked );
1595 updateFont( mRefFont );
1598void QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged(
double spacing )
1600 mRefFont.setWordSpacing( spacing );
1601 updateFont( mRefFont );
1604void QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged(
double spacing )
1606 mRefFont.setLetterSpacing( QFont::AbsoluteSpacing, spacing );
1607 updateFont( mRefFont );
1610void QgsTextFormatWidget::mFontSizeUnitWidget_changed()
1615 mFontLimitPixelChkBox->setChecked(
false );
1621 mFontLimitPixelChkBox->setChecked(
true );
1623 updateFont( mRefFont );
1626void QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged(
int px )
1629 mFontMaxPixelSpinBox->setMinimum( px );
1630 mFontMaxPixelSpinBox->update();
1633void QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged(
int px )
1636 if ( px < mFontMinPixelSpinBox->value() )
1638 mFontMaxPixelSpinBox->blockSignals(
true );
1639 mFontMaxPixelSpinBox->setValue( mFontMinPixelSpinBox->value() );
1640 mFontMaxPixelSpinBox->blockSignals(
false );
1642 mFontMaxPixelSpinBox->setMinimum( mFontMinPixelSpinBox->value() );
1645void QgsTextFormatWidget::mBufferUnitWidget_changed()
1647 updateFont( mRefFont );
1650void QgsTextFormatWidget::mMaskBufferUnitWidget_changed()
1652 updateFont( mRefFont );
1655void QgsTextFormatWidget::mCoordXDDBtn_changed()
1657 updateDataDefinedAlignment();
1660void QgsTextFormatWidget::mCoordXDDBtn_activated(
bool isActive )
1665 mCoordPointDDBtn->setActive(
false );
1668void QgsTextFormatWidget::mCoordYDDBtn_changed()
1670 updateDataDefinedAlignment();
1673void QgsTextFormatWidget::mCoordYDDBtn_activated(
bool isActive )
1678 mCoordPointDDBtn->setActive(
false );
1681void QgsTextFormatWidget::mCoordPointDDBtn_changed()
1683 updateDataDefinedAlignment();
1686void QgsTextFormatWidget::mCoordPointDDBtn_activated(
bool isActive )
1691 mCoordXDDBtn->setActive(
false );
1692 mCoordYDDBtn->setActive(
false );
1695void QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged(
int )
1703 showBackgroundRadius( isRect );
1705 mShapeSVGPathFrame->setVisible( isSVG );
1706 mBackgroundMarkerSymbolButton->setVisible( isMarker );
1707 mBackgroundFillSymbolButton->setVisible( !isSVG && !isMarker );
1711 mShapeSizeYLabel->setVisible( !isSVG && !isMarker );
1712 mShapeSizeYSpnBx->setVisible( !isSVG && !isMarker );
1713 mShapeSizeYDDBtn->setVisible( !isSVG && !isMarker );
1714 mShapeSizeXLabel->setText( tr(
"Size%1" ).arg( !isSVG && !isMarker ? tr(
" X" ) : QString() ) );
1717 mShapeFillColorBtn->setAllowOpacity( !isSVG );
1718 mShapeFillColorBtn->setButtonBackground();
1719 mShapeStrokeColorBtn->setAllowOpacity( !isSVG );
1720 mShapeStrokeColorBtn->setButtonBackground();
1723 mShapeFillColorLabel->setVisible( isSVG );
1724 mShapeFillColorLabel->setEnabled( isSVG );
1725 mShapeFillColorBtn->setVisible( isSVG );
1726 mShapeFillColorBtn->setEnabled( isSVG );
1727 mShapeFillColorDDBtn->setVisible( isSVG );
1728 mShapeFillColorDDBtn->setEnabled( isSVG );
1729 mShapeStrokeColorLabel->setVisible( isSVG );
1730 mShapeStrokeColorLabel->setEnabled( isSVG );
1731 mShapeStrokeColorBtn->setVisible( isSVG );
1732 mShapeStrokeColorBtn->setEnabled( isSVG );
1733 mShapeStrokeColorDDBtn->setVisible( isSVG );
1734 mShapeStrokeColorDDBtn->setEnabled( isSVG );
1735 mShapeStrokeWidthLabel->setVisible( isSVG );
1736 mShapeStrokeWidthLabel->setEnabled( isSVG );
1737 mShapeStrokeWidthSpnBx->setVisible( isSVG );
1738 mShapeStrokeWidthSpnBx->setEnabled( isSVG );
1739 mShapeStrokeWidthDDBtn->setVisible( isSVG );
1740 mShapeStrokeWidthDDBtn->setEnabled( isSVG );
1743 mShapeSVGParamsBtn->setVisible( isSVG );
1746 updateSvgWidgets( mShapeSVGPathLineEdit->text() );
1750 mShapeSVGUnitsLabel->setVisible( isSVG );
1751 mShapeStrokeWidthUnitWidget->setVisible(
false );
1752 mShapeStrokeUnitsDDBtn->setVisible(
false );
1753 mShapeStrokeUnitsDDBtn->setEnabled(
false );
1755 updateAvailableShadowPositions();
1758void QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged(
const QString &text )
1760 updateSvgWidgets( text );
1765 const int numOptionsChecked = ( chkLineAbove->isChecked() ? 1 : 0 ) +
1766 ( chkLineBelow->isChecked() ? 1 : 0 ) +
1767 ( chkLineOn->isChecked() ? 1 : 0 );
1769 if ( numOptionsChecked == 1 )
1772 chkLineAbove->setEnabled( !chkLineAbove->isChecked() );
1773 chkLineBelow->setEnabled( !chkLineBelow->isChecked() );
1774 chkLineOn->setEnabled( !chkLineOn->isChecked() );
1778 chkLineAbove->setEnabled(
true );
1779 chkLineBelow->setEnabled(
true );
1780 chkLineOn->setEnabled(
true );
1790void QgsTextFormatWidget::previewScaleChanged(
double scale )
1792 lblFontPreview->setScale( scale );
1795void QgsTextFormatWidget::updateSvgWidgets(
const QString &svgPath )
1797 if ( mShapeSVGPathLineEdit->text() != svgPath )
1799 mShapeSVGPathLineEdit->setText( svgPath );
1802 QString resolvedPath;
1803 bool validSVG =
true;
1804 if ( ! svgPath.startsWith( QLatin1String(
"base64:" ), Qt::CaseInsensitive ) )
1807 validSVG = QFileInfo::exists( resolvedPath );
1811 resolvedPath = svgPath;
1816 mShapeSVGPathLineEdit->setStyleSheet( !validSVG ? QStringLiteral(
"QLineEdit{ color: rgb(225, 0, 0); }" ) : QString() );
1817 mShapeSVGPathLineEdit->setToolTip( !validSVG ? tr(
"File not found" ) : resolvedPath );
1819 QColor fill, stroke;
1820 double strokeWidth = 0.0;
1821 bool fillParam =
false, strokeParam =
false, strokeWidthParam =
false;
1827 mShapeSVGParamsBtn->setEnabled( validSVG && ( fillParam || strokeParam || strokeWidthParam ) );
1829 mShapeFillColorLabel->setEnabled( validSVG && fillParam );
1830 mShapeFillColorBtn->setEnabled( validSVG && fillParam );
1831 mShapeFillColorDDBtn->setEnabled( validSVG && fillParam );
1832 if ( mLoadSvgParams && validSVG && fillParam )
1833 mShapeFillColorBtn->setColor( fill );
1835 mShapeStrokeColorLabel->setEnabled( validSVG && strokeParam );
1836 mShapeStrokeColorBtn->setEnabled( validSVG && strokeParam );
1837 mShapeStrokeColorDDBtn->setEnabled( validSVG && strokeParam );
1838 if ( mLoadSvgParams && validSVG && strokeParam )
1839 mShapeStrokeColorBtn->setColor( stroke );
1841 mShapeStrokeWidthLabel->setEnabled( validSVG && strokeWidthParam );
1842 mShapeStrokeWidthSpnBx->setEnabled( validSVG && strokeWidthParam );
1843 mShapeStrokeWidthDDBtn->setEnabled( validSVG && strokeWidthParam );
1844 if ( mLoadSvgParams && validSVG && strokeWidthParam )
1845 mShapeStrokeWidthSpnBx->setValue( strokeWidth );
1851 mShapeSVGUnitsLabel->setEnabled( validSVG && strokeWidthParam );
1854void QgsTextFormatWidget::updateAvailableShadowPositions()
1856 if ( mShadowUnderCmbBx->count() == 0
1862 mShadowUnderCmbBx->clear();
1870 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( currentPlacement ) );
1871 if ( mShadowUnderCmbBx->currentIndex() == -1 )
1872 mShadowUnderCmbBx->setCurrentIndex( 0 );
1876void QgsTextFormatWidget::updateProperty()
1884void QgsTextFormatWidget::createAuxiliaryField()
1916 property.setActive(
true );
1925void QgsTextFormatWidget::updateShapeFrameStatus()
1927 mShapeFrame->setEnabled( mShapeDrawDDBtn->isActive() || mShapeDrawChkBx->isChecked() );
1930void QgsTextFormatWidget::updateBufferFrameStatus()
1932 mBufferFrame->setEnabled( mBufferDrawDDBtn->isActive() || mBufferDrawChkBx->isChecked() );
1935void QgsTextFormatWidget::updateShadowFrameStatus()
1937 mShadowFrame->setEnabled( mShadowDrawDDBtn->isActive() || mShadowDrawChkBx->isChecked() );
1940void QgsTextFormatWidget::updateCalloutFrameStatus()
1942 mCalloutFrame->setEnabled( mCalloutDrawDDBtn->isActive() || mCalloutsDrawCheckBox->isChecked() );
1945void QgsTextFormatWidget::updateDataDefinedAlignment()
1948 mCoordAlignmentFrame->setEnabled( ( mCoordXDDBtn->isActive() && mCoordYDDBtn->isActive() )
1949 || mCoordPointDDBtn->isActive() );
1952void QgsTextFormatWidget::overlapModeChanged()
1954 QString description;
1958 description = tr(
"Overlapping labels will never be placed for the layer, even if it means some labels will be missing. (To see unplaced labels use the \"Show Unplaced Labels\" toolbar action.)" );
1961 description = tr(
"If a label cannot otherwise be placed for a feature then an overlapping label is permitted." );
1964 description = tr(
"Labels from this layer may freely overlap other labels or label obstacles without penalty." );
1968 mOverlapModeDescriptionLabel->setText( QStringLiteral(
"<i>%1</i>" ).arg( description ) );
1973 if ( name.isEmpty() )
2016 saveDlg.
setDefaultTags( mTextFormatsListWidget->currentTagFilter() );
2017 if ( !saveDlg.exec() )
2020 if ( saveDlg.
name().isEmpty() )
2030 const int res = QMessageBox::warning(
this, tr(
"Save Text Format" ),
2031 tr(
"Format with name '%1' already exists. Overwrite?" )
2032 .arg( saveDlg.
name() ),
2033 QMessageBox::Yes | QMessageBox::No );
2034 if ( res != QMessageBox::Yes )
2041 const QStringList symbolTags = saveDlg.
tags().split(
',' );
2048void QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked()
2051 svgDlg.setWindowTitle( tr(
"Select SVG file" ) );
2052 svgDlg.svgSelector()->setSvgPath( mShapeSVGPathLineEdit->text().trimmed() );
2054 if ( svgDlg.exec() == QDialog::Accepted )
2056 const QString svgPath = svgDlg.svgSelector()->currentSvgPath();
2057 if ( !svgPath.isEmpty() )
2059 mShapeSVGPathLineEdit->setText( svgPath );
2065void QgsTextFormatWidget::mShapeSVGParamsBtn_clicked()
2067 const QString svgPath = mShapeSVGPathLineEdit->text();
2068 mLoadSvgParams =
true;
2069 updateSvgWidgets( svgPath );
2070 mLoadSvgParams =
false;
2073void QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged(
int index )
2079void QgsTextFormatWidget::mPreviewTextEdit_textChanged(
const QString &text )
2081 lblFontPreview->setText( text );
2085void QgsTextFormatWidget::mPreviewTextBtn_clicked()
2087 mPreviewTextEdit->setText( QStringLiteral(
"Lorem Ipsum" ) );
2091void QgsTextFormatWidget::mPreviewBackgroundBtn_colorChanged(
const QColor &color )
2096void QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked()
2098 bool gotChar =
false;
2100 const QChar initial = !mDirectSymbLeftLineEdit->text().isEmpty() ? mDirectSymbLeftLineEdit->text().at( 0 ) : QChar();
2101 const QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
2106 if ( !dirSymb.isNull() )
2107 mDirectSymbLeftLineEdit->setText( QString( dirSymb ) );
2110void QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked()
2112 bool gotChar =
false;
2113 const QChar initial = !mDirectSymbRightLineEdit->text().isEmpty() ? mDirectSymbRightLineEdit->text().at( 0 ) : QChar();
2114 const QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
2119 if ( !dirSymb.isNull() )
2120 mDirectSymbRightLineEdit->setText( QString( dirSymb ) );
2123void QgsTextFormatWidget::chkLineOrientationDependent_toggled(
bool active )
2127 chkLineAbove->setText( tr(
"Left of line" ) );
2128 chkLineBelow->setText( tr(
"Right of line" ) );
2132 chkLineAbove->setText( tr(
"Above line" ) );
2133 chkLineBelow->setText( tr(
"Below line" ) );
2138void QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked()
2153 if ( dlg.exec() == QDialog::Accepted )
2160void QgsTextFormatWidget::showBackgroundRadius(
bool show )
2162 mShapeRadiusLabel->setVisible( show );
2163 mShapeRadiusXDbSpnBx->setVisible( show );
2165 mShapeRadiusYDbSpnBx->setVisible( show );
2167 mShapeRadiusUnitWidget->setVisible( show );
2169 mShapeRadiusDDBtn->setVisible( show );
2170 mShapeRadiusUnitsDDBtn->setVisible( show );
2176 return *lExpressionContext;
2197 if ( mGeometryGeneratorGroupBox->isChecked() )
2211 : QDialog( parent, fl )
2213 setWindowTitle( tr(
"Text Settings" ) );
2216 mFormatWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
2218 QVBoxLayout *layout =
new QVBoxLayout(
this );
2219 layout->addWidget( mFormatWidget );
2221 mButtonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, Qt::Horizontal,
this );
2222 layout->addWidget( mButtonBox );
2224 setLayout( layout );
2227 connect( mButtonBox->button( QDialogButtonBox::Ok ), &QAbstractButton::clicked,
this, &QDialog::accept );
2228 connect( mButtonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked,
this, &QDialog::reject );
2229 connect( mButtonBox->button( QDialogButtonBox::Help ), &QAbstractButton::clicked,
this, &QgsTextFormatDialog::showHelp );
2234 return mFormatWidget->
format();
2237void QgsTextFormatDialog::showHelp()
2239 QgsHelp::openHelp( QStringLiteral(
"style_library/label_settings.html#formatting-the-label-text" ) );
2255 mFormatWidget = qobject_cast< QgsTextFormatWidget * >(
widget() );
2258 if ( !mBlockSignals )
2265 return mFormatWidget->
format();
2270 mBlockSignals =
true;
2272 mBlockSignals =
false;
@ FromPoint
Offset distance applies from point geometry.
@ FromSymbolBounds
Offset distance applies from rendered symbol bounds.
@ PreferCloser
Prefer closer labels, falling back to alternate positions before larger distances.
@ PreferPositionOrdering
Prefer labels follow position ordering, falling back to more distance labels before alternate positio...
LabelPlacement
Placement modes which determine how label candidates are generated for a feature.
@ OverPoint
Arranges candidates over a point (or centroid of a polygon), or at a preset offset from the point....
@ Curved
Arranges candidates following the curvature of a line feature. Applies to line layers only.
@ 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'...
@ Free
Arranges candidates scattered throughout a polygon feature. Candidates are rotated to respect the pol...
@ OrderedPositionsAroundPoint
Candidates are placed in predefined positions around a point. Preference is given to positions with g...
@ Horizontal
Arranges horizontal candidates scattered throughout a polygon feature. Applies to polygon layers only...
@ PerimeterCurved
Arranges candidates following the curvature of a polygon's boundary. Applies to polygon layers only.
@ OutsidePolygons
Candidates are placed outside of polygon boundaries. Applies to polygon layers only.
Capitalization
String capitalization options.
@ AllSmallCaps
Force all characters to small caps.
@ 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...
@ SmallCaps
Mixed case small caps.
@ ForceFirstLetterToCapital
Convert just the first letter of each word to uppercase, leave the rest untouched.
@ AllUppercase
Convert all characters to uppercase.
TextOrientation
Text orientations.
@ Vertical
Vertically oriented text.
@ RotationBased
Horizontally or vertically oriented text based on rotation (only available for map labeling)
@ Horizontal
Horizontally oriented text.
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
@ Percentage
Percentage of another measurement (e.g., canvas size, feature size)
@ Millimeters
Millimeters.
@ Points
Points (e.g., for font sizes)
@ MetersInMapUnits
Meters value as Map units.
LabelOverlapHandling
Label overlap handling.
@ AllowOverlapAtNoCost
Labels may freely overlap other labels, at no cost.
@ AllowOverlapIfRequired
Avoids overlapping labels when possible, but permit overlaps if labels for features cannot otherwise ...
@ PreventOverlap
Do not allow labels to overlap other labels.
@ FlipUpsideDownLabels
Upside-down labels (90 <= angle < 270) are shown upright.
@ AlwaysAllowUpsideDown
Show upside down for all labels, including dynamic ones.
@ AllowUpsideDownWhenRotationIsDefined
Show upside down when rotation is layer- or data-defined.
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...
static QString nameFromProperty(const QgsPropertyDefinition &def, bool joined=false)
Returns the name of the auxiliary field for a property definition.
bool addAuxiliaryField(const QgsPropertyDefinition &definition)
Adds an auxiliary field for the given property.
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 QFont createFont(const QString &family, int pointSize=-1, int weight=-1, bool italic=false)
Creates a font with the specified family.
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 void setFontFamily(QFont &font, const QString &family)
Sets the family for a font object.
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(Qgis::WkbType 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.
Base class for all map layer types.
Qgis::DistanceUnit mapUnits() const
Returns the units of the map's geographical coordinates - used for scale calculation.
double scale() const
Returns the calculated map scale.
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.
Property
Data definable properties.
@ PositionX
X-coordinate data defined label position.
@ LinePlacementOptions
Line placement flags.
@ FontSizeUnit
Font size units.
@ LabelRotation
Label rotation.
@ FontStyle
Font style name.
@ Italic
Use italic style.
@ ShapeOpacity
Shape opacity.
@ AllowDegradedPlacement
Allow degraded label placements.
@ MaskEnabled
Whether the mask is enabled.
@ PredefinedPositionOrder
@ OverlapHandling
Overlap handling technique.
@ PositionY
Y-coordinate data defined label position.
@ MaximumScale
Maximum map scale (ie most "zoomed in")
@ Vali
Vertical alignment for data defined label position (Bottom, Base, Half, Cap, Top)
@ MinimumScale
Minimum map scale (ie most "zoomed out")
@ FontStretchFactor
Font stretch factor, since QGIS 3.24.
@ PolygonLabelOutside
Whether labels outside a polygon feature are permitted, or should be forced.
@ BufferOpacity
Buffer opacity.
@ MaskJoinStyle
Mask join style.
@ Strikeout
Use strikeout.
@ LabelAllParts
Whether all parts of multi-part features should be labeled.
@ Underline
Use underline.
@ FontBlendMode
Text blend mode.
@ FontCase
Label text case.
@ Hali
Horizontal alignment for data defined label position (Left, Center, Right)
@ MaskOpacity
Mask opacity.
@ OverrunDistance
Distance which labels can extend past either end of linear features.
@ MaskBufferUnit
Mask buffer size unit.
@ FontOpacity
Text opacity.
@ FontWordSpacing
Word spacing.
@ CalloutDraw
Show callout.
@ MaskBufferSize
Mask buffer size.
@ FontLetterSpacing
Letter spacing.
@ TabStopDistance
Tab stop distance, since QGIS 3.38.
@ ShadowOpacity
Shadow opacity.
@ PositionPoint
Point-coordinate data defined label position.
@ MaximumDistance
Maximum distance of label from feature.
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.
QgsStyle * styleAtPath(const QString &path)
Returns a reference to the style database associated with the project with matching file path.
QVector< double > mapScales() const
Returns the list of custom project map scales.
static QgsProject * instance()
Returns the QgsProject singleton instance.
const QgsProjectStyleSettings * styleSettings() const
Returns the project's style settings, which contains settings and properties relating to how a QgsPro...
const QgsProjectViewSettings * viewSettings() const
Returns the project's view settings, which contains settings and properties relating to how a QgsProj...
A grouped map of multiple QgsProperty objects, each referenced by a integer key value.
QSet< int > propertyKeys() const final
Returns a list of property keys contained within the collection.
void setProperty(int key, const QgsProperty &property)
Adds a property to the collection and takes ownership of it.
bool isActive(int key) const final
Returns true if the collection contains an active property with the specified key.
QgsProperty property(int key) const final
Returns a matching property from the collection, if one exists.
Definition for a property.
A store for object properties.
void setField(const QString &field)
Sets the field name the property references.
This class is a composition of two QSettings instances:
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
bool contains(const QString &key, QgsSettings::Section section=QgsSettings::NoSection) const
Returns true if there exists a setting called key; returns false otherwise.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
A collection of string replacements (specified using QgsStringReplacement objects).
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).
QgsStyle * destinationStyle()
Returns the destination style database.
QgsTextFormat textFormat(const QString &name) const
Returns the text format with the specified name.
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
@ ColorrampEntity
Color ramps.
@ LegendPatchShapeEntity
Legend patch shape.
static QgsStyle * defaultStyle(bool initialize=true)
Returns the default application-wide style.
QStringList labelSettingsNames() const
Returns a list of names of label settings in the style.
static QgsTextFormat defaultTextFormatForProject(QgsProject *project, QgsStyle::TextFormatContext context=QgsStyle::TextFormatContext::Labeling)
Returns the default text format to use for new text based objects for the specified project,...
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(Qgis::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 setRadiiUnit(Qgis::RenderUnit units)
Sets the units used for the shape's radii.
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.
Qgis::RenderUnit radiiUnit() const
Returns the units used for the shape's radii.
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.
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.
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...
Qgis::RenderUnit strokeWidthUnit() const
Returns the units used for the shape's stroke width.
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 setSizeUnit(Qgis::RenderUnit unit)
Sets the units used for the shape's size.
Qgis::RenderUnit offsetUnit() const
Returns the units used for the shape's offset.
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).
Qgis::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.
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 setStrokeWidthUnit(Qgis::RenderUnit units)
Sets the units used for the shape's stroke width.
void setOffsetUnit(Qgis::RenderUnit units)
Sets the units used for the shape's offset.
void setOffset(QPointF offset)
Sets the offset used for drawing the background shape.
void setSize(QSizeF size)
Sets the size of the background shape.
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.
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.
Qgis::RenderUnit sizeUnit() const
Returns the units for the buffer size.
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.
void setSizeUnit(Qgis::RenderUnit unit)
Sets the units used for the buffer size.
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.
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 setJoinStyle(Qt::PenJoinStyle style)
Sets the join style used for drawing the buffer.
void setSize(double size)
Sets the size of the buffer.
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...
QgsTextFormatDialog(const QgsTextFormat &format, QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, Qt::WindowFlags fl=QgsGuiUtils::ModalDialogFlags, QgsMapLayer *layer=nullptr)
Constructor for QgsTextFormatDialog.
void setFormat(const QgsTextFormat &format)
Sets the format to show in the widget.
QgsTextFormatPanelWidget(const QgsTextFormat &format, QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, QgsMapLayer *layer=nullptr)
Constructor for QgsTextFormatPanelWidget.
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...
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.
int mMinPixelLimit
Pixel size font limit.
void setDockMode(bool enabled)
Sets whether the widget should be shown in a compact dock mode.
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(const QgsTextFormat &format=QgsTextFormat(), QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, QgsMapLayer *layer=nullptr)
Constructor for QgsTextFormatWidget.
~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.
Qgis::GeometryType mGeomType
Geometry type for layer, if known.
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.
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.
virtual void setFormatFromStyle(const QString &name, QgsStyle::StyleEntity type, const QString &stylePath)
Sets the current text settings from a style entry.
Qgis::GeometryType labelGeometryType() const
Returns the geometry type which will be used by the labeling engine when registering labels for the l...
QgsMapLayer * mLayer
Associated vector layer.
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.
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 setCapitalization(Qgis::Capitalization capitalization)
Sets the text capitalization style.
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the format's property collection, used for data defined overrides.
void setOrientation(Qgis::TextOrientation orientation)
Sets the orientation for the text.
void setFont(const QFont &font)
Sets the font used for rendering text.
double lineHeight() const
Returns the line height for text.
double tabStopDistance() const
Returns the distance for tab stops.
void setSizeUnit(Qgis::RenderUnit unit)
Sets the units for the size of rendered text.
int stretchFactor() const
Returns the text's stretch factor.
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the format's property collection, used for data defined overrides.
void setStretchFactor(int factor)
Sets the text's stretch factor.
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 setTabStopDistanceUnit(Qgis::RenderUnit unit)
Sets the unit used for the tab stop distance.
void setOpacity(double opacity)
Sets the text's opacity.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing 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...
void setLineHeightUnit(Qgis::RenderUnit unit)
Sets the unit for the line height for text.
Qgis::RenderUnit lineHeightUnit() const
Returns the units for the line height for text.
Qgis::Capitalization capitalization() const
Returns the text capitalization style.
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 setTabStopDistanceMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the tab stop distance.
void setBuffer(const QgsTextBufferSettings &bufferSettings)
Sets the text's buffer settings.
QgsTextBackgroundSettings & background()
Returns a reference to the text background settings.
Qgis::RenderUnit sizeUnit() const
Returns the units for the size of rendered text.
bool allowHtmlFormatting() const
Returns true if text should be treated as a HTML document and HTML tags should be used for formatting...
double opacity() const
Returns the text's opacity.
void setTabStopDistance(double distance)
Sets the distance for tab stops.
Qgis::TextOrientation orientation() const
Returns the orientation of the text.
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.
Qgis::RenderUnit tabStopDistanceUnit() const
Returns the units for the tab stop distance.
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.
QColor color() const
Returns the color that text will be rendered in.
QFont font() const
Returns the font used for rendering text.
QgsMapUnitScale tabStopDistanceMapUnitScale() const
Returns the map unit scale object for the tab stop distance.
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.
Qgis::RenderUnit sizeUnit() const
Returns the units for the buffer size.
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.
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.
double opacity() const
Returns the mask's opacity.
bool enabled() const
Returns whether the mask is enabled.
void setSizeUnit(Qgis::RenderUnit unit)
Sets the units used for the buffer size.
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.
void setBlurRadiusUnit(Qgis::RenderUnit units)
Sets the units used for the shadow's blur radius.
bool enabled() const
Returns whether the shadow is enabled.
void setOffsetUnit(Qgis::RenderUnit units)
Sets the units used for the shadow's offset.
int scale() const
Returns the scaling used for the drop shadow (in percentage of original size).
Qgis::RenderUnit offsetUnit() const
Returns the units used for the shadow's offset.
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.
Qgis::RenderUnit blurRadiusUnit() const
Returns the units used for the shadow's blur radius.
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.
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.
double blurRadius() const
Returns the blur radius for the shadow.
void setBlurRadius(double blurRadius)
Sets the blur radius for the shadow.
void setEnabled(bool enabled)
Sets whether the text shadow will be drawn.
QList< Qgis::RenderUnit > RenderUnitList
List of render units.
Represents a vector layer which manages a vector based data sets.
QgsAuxiliaryLayer * auxiliaryLayer()
Returns the current auxiliary layer.
Q_INVOKABLE Qgis::GeometryType geometryType() const
Returns point, line or polygon.
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.