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#if defined(HAS_KDE_QT5_FONT_STRETCH_FIX) || (QT_VERSION >= QT_VERSION_CHECK(6, 3, 0))
372 mLabelStretch->hide();
373 mSpinStretch->hide();
374 mFontStretchDDBtn->hide();
379 QList<QWidget *> widgets;
380 widgets << btnBufferColor
382 << chkLabelPerFeaturePart
386 << chkLineOrientationDependent
388 << chkPreserveRotation
390 << comboBufferBlendMode
392 << mBufferJoinStyleComboBox
393 << mBufferTranspFillChbx
394 << mBufferOpacityWidget
395 << mCentroidInsideCheckBox
397 << mCoordRotationUnitComboBox
399 << mDirectSymbLeftLineEdit
400 << mDirectSymbRevChkBx
401 << mDirectSymbRightLineEdit
402 << mFitInsidePolygonCheckBox
403 << mFontCapitalsComboBox
404 << mFontLetterSpacingSpinBox
405 << mFontLimitPixelChkBox
406 << mFontLineHeightSpinBox
407 << mLineHeightUnitWidget
408 << mFontMaxPixelSpinBox
409 << mFontMinPixelSpinBox
410 << mFontMultiLineAlignComboBox
412 << mFontStyleComboBox
413 << mTextOrientationComboBox
414 << mTextOpacityWidget
416 << mFontWordSpacingSpinBox
418 << mFormatNumDecimalsSpnBx
419 << mFormatNumPlusSignChkBx
421 << mLimitLabelSpinBox
422 << mLineDistanceSpnBx
423 << mLineDistanceUnitWidget
424 << mMaximumDistanceSpnBx
425 << mMaximumDistanceUnitWidget
426 << mMaxCharAngleInDSpinBox
427 << mMaxCharAngleOutDSpinBox
429 << mOffsetTypeComboBox
430 << mCheckAllowDegradedPlacement
431 << mComboOverlapHandling
432 << mPointAngleSpinBox
433 << mPointOffsetUnitWidget
434 << mPointOffsetXSpinBox
435 << mPointOffsetYSpinBox
436 << mPreviewBackgroundBtn
439 << mRepeatDistanceSpinBox
440 << mRepeatDistanceUnitWidget
441 << mOverrunDistanceSpinBox
442 << mOverrunDistanceUnitWidget
443 << mScaleBasedVisibilityChkBx
449 << mShadowOffsetAngleSpnBx
450 << mShadowOffsetGlobalChkBx
451 << mShadowOffsetSpnBx
452 << mShadowOffsetUnitWidget
453 << mShadowRadiusAlphaChkBx
454 << mShadowRadiusDblSpnBx
455 << mShadowRadiusUnitWidget
457 << mShadowOpacityWidget
460 << mShapeStrokeColorBtn
461 << mShapeStrokeWidthSpnBx
462 << mShapeStrokeWidthUnitWidget
464 << mShapeFillColorBtn
465 << mShapeOffsetXSpnBx
466 << mShapeOffsetYSpnBx
467 << mShapeOffsetUnitWidget
468 << mShapeRadiusXDbSpnBx
469 << mShapeRadiusYDbSpnBx
470 << mShapeRotationCmbBx
471 << mShapeRotationDblSpnBx
472 << mShapeRadiusUnitWidget
473 << mShapeSVGPathLineEdit
475 << mShapeSizeUnitWidget
478 << mBackgroundOpacityWidget
483 << mAutoWrapLengthSpinBox
484 << mAutoWrapTypeComboBox
485 << mCentroidRadioVisible
486 << mCentroidRadioWhole
487 << mDirectSymbRadioBtnAbove
488 << mDirectSymbRadioBtnBelow
489 << mDirectSymbRadioBtnLR
490 << mUpsidedownRadioAll
491 << mUpsidedownRadioDefined
492 << mUpsidedownRadioOff
493 << mPlacementModeComboBox
494 << mFieldExpressionWidget
495 << mCheckBoxSubstituteText
496 << mGeometryGeneratorGroupBox
497 << mGeometryGenerator
498 << mGeometryGeneratorType
499 << mBackgroundMarkerSymbolButton
500 << mBackgroundFillSymbolButton
501 << mCalloutsDrawCheckBox
502 << mCalloutStyleComboBox
505 << mMaskJoinStyleComboBox
506 << mMaskBufferSizeSpinBox
507 << mMaskOpacityWidget
508 << mCheckAllowLabelsOutsidePolygons
509 << mHtmlFormattingCheckBox
510 << mPrioritizationComboBox
511 << mTabDistanceUnitWidget
512 << mTabStopDistanceSpin;
514 connectValueChanged( widgets );
519 connect( mBufferDrawChkBx, &QCheckBox::stateChanged,
this, [ = ](
int )
521 updateBufferFrameStatus();
524 connect( mShapeDrawChkBx, &QCheckBox::stateChanged,
this, [ = ](
int )
526 updateShapeFrameStatus();
529 connect( mShadowDrawChkBx, &QCheckBox::stateChanged,
this, [ = ](
int )
531 updateShadowFrameStatus();
534 connect( mCalloutsDrawCheckBox, &QCheckBox::stateChanged,
this, [ = ](
int )
536 updateCalloutFrameStatus();
544 whileBlocking( mOptionsTab )->setCurrentIndex( mLabelStackedWidget->currentIndex() );
545 mOptionsTab->tabBar()->setUsesScrollButtons(
true );
566 toggleDDButtons(
true );
573 const int prevIndex = mOptionsTab->currentIndex();
574 toggleDDButtons(
true );
575 delete mLabelingOptionsListWidget->takeItem( 8 );
576 delete mLabelingOptionsListWidget->takeItem( 7 );
577 delete mLabelingOptionsListWidget->takeItem( 6 );
578 delete mLabelingOptionsListWidget->takeItem( 3 );
579 mOptionsTab->removeTab( 8 );
580 mOptionsTab->removeTab( 7 );
581 mOptionsTab->removeTab( 6 );
582 mOptionsTab->removeTab( 3 );
583 mLabelStackedWidget->removeWidget( mLabelPage_Rendering );
584 mLabelStackedWidget->removeWidget( mLabelPage_Callouts );
585 mLabelStackedWidget->removeWidget( mLabelPage_Mask );
586 mLabelStackedWidget->removeWidget( mLabelPage_Placement );
596 mLabelStackedWidget->setCurrentIndex( prevIndex - 1 );
597 mOptionsTab->setCurrentIndex( prevIndex - 1 );
604 mLabelStackedWidget->setCurrentIndex( 0 );
605 mOptionsTab->setCurrentIndex( 0 );
609 frameLabelWith->hide();
610 mDirectSymbolsFrame->hide();
611 mFormatNumFrame->hide();
612 mFormatNumChkBx->hide();
613 mFormatNumDDBtn->hide();
614 mCheckBoxSubstituteText->hide();
615 mToolButtonConfigureSubstitutes->hide();
616 mLabelWrapOnCharacter->hide();
617 wrapCharacterEdit->hide();
618 mWrapCharDDBtn->hide();
619 mLabelWrapLinesTo->hide();
620 mAutoWrapLengthSpinBox->hide();
621 mAutoWrapLengthDDBtn->hide();
622 mAutoWrapTypeComboBox->hide();
623 mFontMultiLineLabel->hide();
624 mFontMultiLineAlignComboBox->hide();
625 mFontMultiLineAlignDDBtn->hide();
633void QgsTextFormatWidget::toggleDDButtons(
bool visible )
635 const auto buttons = findChildren< QgsPropertyOverrideButton * >();
638#if defined(HAS_KDE_QT5_FONT_STRETCH_FIX) || (QT_VERSION >= QT_VERSION_CHECK(6, 3, 0))
641 if ( button == mFontStretchDDBtn )
644 button->setVisible( visible );
650 mOptionsTab->setVisible( enabled );
651 mOptionsTab->setTabToolTip( 0, tr(
"Text" ) );
652 mOptionsTab->setTabToolTip( 1, tr(
"Formatting" ) );
653 mOptionsTab->setTabToolTip( 2, tr(
"Buffer" ) );
654 mOptionsTab->setTabToolTip( 3, tr(
"Mask" ) );
655 mOptionsTab->setTabToolTip( 4, tr(
"Background" ) );
656 mOptionsTab->setTabToolTip( 5, tr(
"Shadow" ) );
657 mOptionsTab->setTabToolTip( 6, tr(
"Callouts" ) );
658 mOptionsTab->setTabToolTip( 7, tr(
"Placement" ) );
659 mOptionsTab->setTabToolTip( 8, tr(
"Rendering" ) );
661 mLabelingOptionsListFrame->setVisible( !enabled );
662 groupBox_mPreview->setVisible( !enabled );
666void QgsTextFormatWidget::connectValueChanged(
const QList<QWidget *> &widgets )
668 const auto constWidgets = widgets;
669 for ( QWidget *widget : constWidgets )
679 else if (
QgsOpacityWidget *w = qobject_cast< QgsOpacityWidget *>( widget ) )
683 else if (
QgsScaleWidget *w = qobject_cast< QgsScaleWidget *>( widget ) )
691 else if ( QComboBox *w = qobject_cast<QComboBox *>( widget ) )
695 else if ( QSpinBox *w = qobject_cast<QSpinBox *>( widget ) )
699 else if ( QDoubleSpinBox *w = qobject_cast<QDoubleSpinBox *>( widget ) )
703 else if (
QgsColorButton *w = qobject_cast<QgsColorButton *>( widget ) )
707 else if ( QCheckBox *w = qobject_cast<QCheckBox *>( widget ) )
711 else if ( QRadioButton *w = qobject_cast<QRadioButton *>( widget ) )
715 else if ( QLineEdit *w = qobject_cast<QLineEdit *>( widget ) )
719 else if ( QSlider *w = qobject_cast<QSlider *>( widget ) )
723 else if ( QGroupBox *w = qobject_cast<QGroupBox *>( widget ) )
733 QgsLogger::warning( QStringLiteral(
"Could not create connection for widget %1" ).arg( widget->objectName() ) );
766 mDirectSymbDDBtn->registerCheckedWidget( mDirectSymbChkBx );
774 mFormatNumDDBtn->registerCheckedWidget( mFormatNumChkBx );
789 mEnableMaskDDBtn->registerCheckedWidget( mEnableMaskChkBx );
797 mShapeDrawDDBtn->registerCheckedWidget( mShapeDrawChkBx );
819 mShadowDrawDDBtn->registerCheckedWidget( mShadowDrawChkBx );
862 updateDataDefinedAlignment();
865 const QString ddScaleVisInfo = tr(
"Value < 0 represents a scale closer than 1:1, e.g. -10 = 10:1<br>"
866 "Value of 0 disables the specific limit." );
868 mScaleBasedVisibilityDDBtn->registerCheckedWidget( mScaleBasedVisibilityChkBx );
870 mScaleBasedVisibilityMinDDBtn->setUsageInfo( ddScaleVisInfo );
872 mScaleBasedVisibilityMaxDDBtn->setUsageInfo( ddScaleVisInfo );
878 mMinScaleWidget->setPredefinedScales( scales );
879 mMaxScaleWidget->setPredefinedScales( scales );
884 mMinScaleWidget->updateScales();
885 mMaxScaleWidget->updateScales();
889 mFontLimitPixelDDBtn->registerCheckedWidget( mFontLimitPixelChkBox );
910 if ( !mButtons.contains( key ) )
915 mButtons[key] = button;
932 mBufferDrawChkBx->setChecked( buffer.
enabled() );
933 mBufferFrame->setEnabled( buffer.
enabled() );
934 spinBufferSize->setValue( buffer.
size() );
935 mBufferUnitWidget->setUnit( buffer.
sizeUnit() );
937 btnBufferColor->setColor( buffer.
color() );
938 mBufferOpacityWidget->setOpacity( buffer.
opacity() );
939 mBufferJoinStyleComboBox->setPenJoinStyle( buffer.
joinStyle() );
941 comboBufferBlendMode->setBlendMode( buffer.
blendMode() );
943 mBufferEffect.reset( lPaintEffect->clone() );
947 mBufferEffect->setEnabled(
false );
949 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
953 mEnableMaskChkBx->setChecked( mask.
enabled() );
954 mMaskBufferSizeSpinBox->setValue( mask.
size() );
955 mMaskBufferUnitWidget->setUnit( mask.
sizeUnit() );
957 mMaskOpacityWidget->setOpacity( mask.
opacity() );
958 mMaskJoinStyleComboBox->setPenJoinStyle( mask.
joinStyle() );
960 mMaskEffect.reset( lPaintEffect->clone() );
964 mMaskEffect->setEnabled(
false );
966 mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
976 mTextOrientationComboBox->setCurrentIndex( mTextOrientationComboBox->findData(
static_cast< int >(
format.
orientation() ) ) );
979 mFontWordSpacingSpinBox->setValue(
format.
font().wordSpacing() );
980 mFontLetterSpacingSpinBox->setValue(
format.
font().letterSpacing() );
989 updateFont( mRefFont );
995 const QString missingTxt = tr(
"%1 not found. Default substituted." );
996 QString txtPrepend = tr(
"Chosen font" );
1001 mFontMissingLabel->setText( missingTxt.arg( txtPrepend ) );
1004 mLabelingOptionsListWidget->setCurrentRow( 0 );
1011 mShapeDrawChkBx->setChecked( background.
enabled() );
1012 mShapeFrame->setEnabled( background.
enabled() );
1013 mShapeTypeCmbBx->blockSignals(
true );
1014 mShapeTypeCmbBx->setCurrentIndex( mShapeTypeCmbBx->findData( background.
type() ) );
1015 mShapeTypeCmbBx->blockSignals(
false );
1016 updateAvailableShadowPositions();
1017 mShapeSVGPathLineEdit->setText( background.
svgFile() );
1019 mShapeSizeCmbBx->setCurrentIndex( background.
sizeType() );
1020 mShapeSizeXSpnBx->setValue( background.
size().width() );
1021 mShapeSizeYSpnBx->setValue( background.
size().height() );
1022 mShapeSizeUnitWidget->setUnit( background.
sizeUnit() );
1024 mShapeRotationCmbBx->setCurrentIndex( background.
rotationType() );
1027 mShapeRotationDblSpnBx->setValue( background.
rotation() );
1028 mShapeOffsetXSpnBx->setValue( background.
offset().x() );
1029 mShapeOffsetYSpnBx->setValue( background.
offset().y() );
1030 mShapeOffsetUnitWidget->setUnit( background.
offsetUnit() );
1032 mShapeRadiusXDbSpnBx->setValue( background.
radii().width() );
1033 mShapeRadiusYDbSpnBx->setValue( background.
radii().height() );
1034 mShapeRadiusUnitWidget->setUnit( background.
radiiUnit() );
1037 mShapeFillColorBtn->setColor( background.
fillColor() );
1038 mShapeStrokeColorBtn->setColor( background.
strokeColor() );
1039 mShapeStrokeWidthSpnBx->setValue( background.
strokeWidth() );
1043 mBackgroundOpacityWidget->setOpacity( background.
opacity() );
1044 mShapeBlendCmbBx->setBlendMode( background.
blendMode() );
1046 mLoadSvgParams =
false;
1047 mShapeTypeCmbBx_currentIndexChanged( background.
type() );
1049 if (
auto *lPaintEffect = background.
paintEffect() )
1050 mBackgroundEffect.reset( lPaintEffect->clone() );
1054 mBackgroundEffect->setEnabled(
false );
1056 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
1062 mShadowDrawChkBx->setChecked( shadow.
enabled() );
1063 mShadowFrame->setEnabled( shadow.
enabled() );
1064 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( shadow.
shadowPlacement() ) );
1065 mShadowOffsetAngleSpnBx->setValue( shadow.
offsetAngle() );
1067 mShadowOffsetUnitWidget->setUnit( shadow.
offsetUnit() );
1069 mShadowOffsetGlobalChkBx->setChecked( shadow.
offsetGlobal() );
1071 mShadowRadiusDblSpnBx->setValue( shadow.
blurRadius() );
1074 mShadowRadiusAlphaChkBx->setChecked( shadow.
blurAlphaOnly() );
1075 mShadowOpacityWidget->setOpacity( shadow.
opacity() );
1076 mShadowScaleSpnBx->setValue( shadow.
scale() );
1078 mShadowColorBtn->setColor( shadow.
color() );
1079 mShadowBlendCmbBx->setBlendMode( shadow.
blendMode() );
1091 settings.
setValue( QStringLiteral(
"Windows/Labeling/FontPreviewSplitState" ), mFontPreviewSplitter->saveState() );
1092 settings.
setValue( QStringLiteral(
"Windows/Labeling/OptionsSplitState" ), mLabelingOptionsSplitter->saveState() );
1094 int prevIndex = mLabelingOptionsListWidget->currentRow();
1095 if ( mWidgetMode ==
Text )
1097 switch ( prevIndex )
1106 settings.
setValue( QStringLiteral(
"Windows/Labeling/Tab" ), prevIndex );
1133 buffer.
setEnabled( mBufferDrawChkBx->isChecked() );
1134 buffer.
setSize( spinBufferSize->value() );
1135 buffer.
setColor( btnBufferColor->color() );
1136 buffer.
setOpacity( mBufferOpacityWidget->opacity() );
1139 buffer.
setJoinStyle( mBufferJoinStyleComboBox->penJoinStyle() );
1141 buffer.
setBlendMode( comboBufferBlendMode->blendMode() );
1150 mask.
setEnabled( mEnableMaskChkBx->isChecked() );
1151 mask.
setSize( mMaskBufferSizeSpinBox->value() );
1152 mask.
setOpacity( mMaskOpacityWidget->opacity() );
1153 mask.
setSizeUnit( mMaskBufferUnitWidget->unit() );
1155 mask.
setJoinStyle( mMaskJoinStyleComboBox->penJoinStyle() );
1165 background.
setEnabled( mShapeDrawChkBx->isChecked() );
1167 background.
setSvgFile( mShapeSVGPathLineEdit->text() );
1169 background.
setSize( QSizeF( mShapeSizeXSpnBx->value(), mShapeSizeYSpnBx->value() ) );
1170 background.
setSizeUnit( mShapeSizeUnitWidget->unit() );
1173 background.
setRotation( mShapeRotationDblSpnBx->value() );
1174 background.
setOffset( QPointF( mShapeOffsetXSpnBx->value(), mShapeOffsetYSpnBx->value() ) );
1177 background.
setRadii( QSizeF( mShapeRadiusXDbSpnBx->value(), mShapeRadiusYDbSpnBx->value() ) );
1178 background.
setRadiiUnit( mShapeRadiusUnitWidget->unit() );
1181 background.
setFillColor( mShapeFillColorBtn->color() );
1186 background.
setOpacity( mBackgroundOpacityWidget->opacity() );
1187 background.
setBlendMode( mShapeBlendCmbBx->blendMode() );
1198 shadow.
setEnabled( mShadowDrawChkBx->isChecked() );
1209 shadow.
setOpacity( mShadowOpacityWidget->opacity() );
1210 shadow.
setScale( mShadowScaleSpnBx->value() );
1211 shadow.
setColor( mShadowColorBtn->color() );
1215 if ( includeDataDefinedProperties )
1246 if ( mButtons.contains( key ) )
1255void QgsTextFormatWidget::optionsStackedWidget_CurrentChanged(
int indx )
1257 mLabelingOptionsListWidget->blockSignals(
true );
1258 mLabelingOptionsListWidget->setCurrentRow( indx );
1259 mLabelingOptionsListWidget->blockSignals(
false );
1268 mPreviewExpressionContext = *lExpressionContext;
1273 const auto symbolButtonWidgets = findChildren<QgsSymbolButton *>();
1281void QgsTextFormatWidget::collapseSample(
bool collapse )
1285 QList<int> splitSizes = mFontPreviewSplitter->sizes();
1286 if ( splitSizes[0] > groupBox_mPreview->height() )
1288 const int delta = splitSizes[0] - groupBox_mPreview->height();
1289 splitSizes[0] -= delta;
1290 splitSizes[1] += delta;
1291 mFontPreviewSplitter->setSizes( splitSizes );
1296void QgsTextFormatWidget::changeTextColor(
const QColor &color )
1302void QgsTextFormatWidget::updateFont(
const QFont &newFont )
1305 if ( newFont != mRefFont )
1314 QFont symbolFont = mRefFont;
1315 symbolFont.setPointSize( font().pointSize() );
1316 mDirectSymbLeftLineEdit->setFont( symbolFont );
1317 mDirectSymbRightLineEdit->setFont( symbolFont );
1319 blockFontChangeSignals(
true );
1320 mFontFamilyCmbBx->setCurrentFont( symbolFont );
1321 populateFontStyleComboBox();
1322 mFontUnderlineBtn->setChecked( mRefFont.underline() );
1323 mFontStrikethroughBtn->setChecked( mRefFont.strikeOut() );
1324 mKerningCheckBox->setChecked( mRefFont.kerning() );
1325 blockFontChangeSignals(
false );
1333void QgsTextFormatWidget::blockFontChangeSignals(
bool blk )
1335 mFontFamilyCmbBx->blockSignals( blk );
1336 mFontStyleComboBox->blockSignals( blk );
1337 mFontCapitalsComboBox->blockSignals( blk );
1338 mFontUnderlineBtn->blockSignals( blk );
1339 mFontStrikethroughBtn->blockSignals( blk );
1340 mFontWordSpacingSpinBox->blockSignals( blk );
1341 mFontLetterSpacingSpinBox->blockSignals( blk );
1342 mKerningCheckBox->blockSignals( blk );
1357 lblFontPreview->setFormat(
format() );
1360void QgsTextFormatWidget::scrollPreview()
1362 scrollArea_mPreview->ensureVisible( 0, 0, 0, 0 );
1367 mPreviewBackgroundColor = color;
1369 scrollArea_mPreview->widget()->setStyleSheet( QStringLiteral(
"background: rgb(%1, %2, %3);" ).arg( QString::number( color.red() ),
1370 QString::number( color.green() ),
1371 QString::number( color.blue() ) ) );
1374void QgsTextFormatWidget::changeBufferColor(
const QColor &color )
1383 bool showLineFrame =
false;
1384 bool showCentroidFrame =
false;
1385 bool showQuadrantFrame =
false;
1386 bool showFixedQuadrantFrame =
false;
1387 bool showPlacementPriorityFrame =
false;
1388 bool showOffsetTypeFrame =
false;
1389 bool showOffsetFrame =
false;
1390 bool showDistanceFrame =
false;
1391 bool showMaximumDistanceFrame =
false;
1392 bool showPrioritizationFrame =
false;
1393 bool showRotationFrame =
false;
1394 bool showMaxCharAngleFrame =
false;
1399 bool enableMultiLinesFrame =
true;
1405 showDistanceFrame =
true;
1406 showMaximumDistanceFrame =
true;
1414 showQuadrantFrame =
true;
1415 showFixedQuadrantFrame =
true;
1416 showOffsetFrame =
true;
1417 showRotationFrame =
true;
1421 showDistanceFrame =
true;
1422 showMaximumDistanceFrame =
true;
1423 showPlacementPriorityFrame =
true;
1424 showPrioritizationFrame =
true;
1425 showOffsetTypeFrame =
true;
1432 showLineFrame =
true;
1433 showDistanceFrame =
true;
1436 const bool offline = chkLineAbove->isChecked() || chkLineBelow->isChecked();
1437 chkLineOrientationDependent->setEnabled( offline );
1438 mPlacementDistanceFrame->setEnabled( offline );
1442 showMaxCharAngleFrame = isCurved;
1444 enableMultiLinesFrame = !isCurved;
1449 showDistanceFrame =
true;
1452 mPlacementLineFrame->setVisible( showLineFrame );
1453 mPlacementPolygonFrame->setVisible( showPolygonPlacementOptions );
1454 mPlacementCentroidFrame->setVisible( showCentroidFrame );
1455 mPlacementQuadrantFrame->setVisible( showQuadrantFrame );
1456 mPlacementFixedQuadrantFrame->setVisible( showFixedQuadrantFrame );
1457 mPlacementCartographicFrame->setVisible( showPlacementPriorityFrame );
1458 mPlacementOffsetFrame->setVisible( showOffsetFrame );
1459 mPlacementDistanceFrame->setVisible( showDistanceFrame );
1460 mPlacementMaximumDistanceFrame->setVisible( showMaximumDistanceFrame );
1461 mPlacementPrioritizationFrame->setVisible( showPrioritizationFrame );
1462 mPlacementOffsetTypeFrame->setVisible( showOffsetTypeFrame );
1463 mPlacementRotationFrame->setVisible( showRotationFrame );
1468 mPlacementMaxCharAngleFrame->setVisible( showMaxCharAngleFrame );
1470 mMultiLinesFrame->setEnabled( enableMultiLinesFrame );
1474 switch ( currentPlacement )
1478 helperText = tr(
"Arranges label candidates in a clockwise circle around the feature, preferring placements to the top-right of the feature." );
1480 helperText = tr(
"Arranges label candidates in a cluster around the feature's centroid, preferring placements directly over the centroid." );
1484 helperText = tr(
"Arranges label candidates directly over the feature or at a preset offset from the feature." );
1486 helperText = tr(
"Arranges label candidates directly over the feature's centroid, or at a preset offset from the centroid." );
1490 helperText = tr(
"Arranges label candidates parallel to a generalised line representing the feature. Placements which fall over straighter portions of the line are preferred." );
1492 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." );
1496 helperText = tr(
"Arranges candidates following the curvature of a line feature. Placements which fall over straighter portions of the line are preferred." );
1500 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." );
1502 helperText = tr(
"Label candidates are arranged horizontally along the length of the feature." );
1506 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." );
1510 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." );
1514 helperText = tr(
"Arranges candidates following the curvature of the feature's perimeter. Placements which fall over straighter portions of the perimeter are preferred." );
1518 helperText = tr(
"Label candidates are placed outside of the features, preferring placements which give greatest visual association between the label and the feature." );
1521 mPlacementModeDescriptionLabel->setText( QStringLiteral(
"<i>%1</i>" ).arg( helperText ) );
1524void QgsTextFormatWidget::populateFontCapitalsComboBox()
1529#if defined(HAS_KDE_QT5_SMALL_CAPS_FIX) || QT_VERSION >= QT_VERSION_CHECK(6, 3, 0)
1539void QgsTextFormatWidget::populateFontStyleComboBox()
1541 mFontStyleComboBox->clear();
1542 const QStringList styles = mFontDB.styles( mRefFont.family() );
1543 const auto constStyles = styles;
1544 for (
const QString &style : constStyles )
1546 mFontStyleComboBox->addItem( style );
1549 QString targetStyle = mFontDB.styleString( mRefFont );
1550 if ( !styles.contains( targetStyle ) )
1553 targetStyle = QFontInfo( f ).styleName();
1554 mRefFont.setStyleName( targetStyle );
1557 const int stylIndx = mFontStyleComboBox->findText( targetStyle );
1558 if ( stylIndx > -1 )
1563 mFontStyleComboBox->setCurrentIndex( curIndx );
1566void QgsTextFormatWidget::mFontSizeSpinBox_valueChanged(
double d )
1568 mRefFont.setPointSizeF( d );
1569 updateFont( mRefFont );
1572void QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged(
const QFont &f )
1575 updateFont( mRefFont );
1578void QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged(
const QString &text )
1581 updateFont( mRefFont );
1584void QgsTextFormatWidget::mFontUnderlineBtn_toggled(
bool ckd )
1586 mRefFont.setUnderline( ckd );
1587 updateFont( mRefFont );
1590void QgsTextFormatWidget::mFontStrikethroughBtn_toggled(
bool ckd )
1592 mRefFont.setStrikeOut( ckd );
1593 updateFont( mRefFont );
1596void QgsTextFormatWidget::kerningToggled(
bool checked )
1598 mRefFont.setKerning( checked );
1599 updateFont( mRefFont );
1602void QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged(
double spacing )
1604 mRefFont.setWordSpacing( spacing );
1605 updateFont( mRefFont );
1608void QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged(
double spacing )
1610 mRefFont.setLetterSpacing( QFont::AbsoluteSpacing, spacing );
1611 updateFont( mRefFont );
1614void QgsTextFormatWidget::mFontSizeUnitWidget_changed()
1619 mFontLimitPixelChkBox->setChecked(
false );
1625 mFontLimitPixelChkBox->setChecked(
true );
1627 updateFont( mRefFont );
1630void QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged(
int px )
1633 mFontMaxPixelSpinBox->setMinimum( px );
1634 mFontMaxPixelSpinBox->update();
1637void QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged(
int px )
1640 if ( px < mFontMinPixelSpinBox->value() )
1642 mFontMaxPixelSpinBox->blockSignals(
true );
1643 mFontMaxPixelSpinBox->setValue( mFontMinPixelSpinBox->value() );
1644 mFontMaxPixelSpinBox->blockSignals(
false );
1646 mFontMaxPixelSpinBox->setMinimum( mFontMinPixelSpinBox->value() );
1649void QgsTextFormatWidget::mBufferUnitWidget_changed()
1651 updateFont( mRefFont );
1654void QgsTextFormatWidget::mMaskBufferUnitWidget_changed()
1656 updateFont( mRefFont );
1659void QgsTextFormatWidget::mCoordXDDBtn_changed()
1661 updateDataDefinedAlignment();
1664void QgsTextFormatWidget::mCoordXDDBtn_activated(
bool isActive )
1669 mCoordPointDDBtn->setActive(
false );
1672void QgsTextFormatWidget::mCoordYDDBtn_changed()
1674 updateDataDefinedAlignment();
1677void QgsTextFormatWidget::mCoordYDDBtn_activated(
bool isActive )
1682 mCoordPointDDBtn->setActive(
false );
1685void QgsTextFormatWidget::mCoordPointDDBtn_changed()
1687 updateDataDefinedAlignment();
1690void QgsTextFormatWidget::mCoordPointDDBtn_activated(
bool isActive )
1695 mCoordXDDBtn->setActive(
false );
1696 mCoordYDDBtn->setActive(
false );
1699void QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged(
int )
1707 showBackgroundRadius( isRect );
1709 mShapeSVGPathFrame->setVisible( isSVG );
1710 mBackgroundMarkerSymbolButton->setVisible( isMarker );
1711 mBackgroundFillSymbolButton->setVisible( !isSVG && !isMarker );
1715 mShapeSizeYLabel->setVisible( !isSVG && !isMarker );
1716 mShapeSizeYSpnBx->setVisible( !isSVG && !isMarker );
1717 mShapeSizeYDDBtn->setVisible( !isSVG && !isMarker );
1718 mShapeSizeXLabel->setText( tr(
"Size%1" ).arg( !isSVG && !isMarker ? tr(
" X" ) : QString() ) );
1721 mShapeFillColorBtn->setAllowOpacity( !isSVG );
1722 mShapeFillColorBtn->setButtonBackground();
1723 mShapeStrokeColorBtn->setAllowOpacity( !isSVG );
1724 mShapeStrokeColorBtn->setButtonBackground();
1727 mShapeFillColorLabel->setVisible( isSVG );
1728 mShapeFillColorLabel->setEnabled( isSVG );
1729 mShapeFillColorBtn->setVisible( isSVG );
1730 mShapeFillColorBtn->setEnabled( isSVG );
1731 mShapeFillColorDDBtn->setVisible( isSVG );
1732 mShapeFillColorDDBtn->setEnabled( isSVG );
1733 mShapeStrokeColorLabel->setVisible( isSVG );
1734 mShapeStrokeColorLabel->setEnabled( isSVG );
1735 mShapeStrokeColorBtn->setVisible( isSVG );
1736 mShapeStrokeColorBtn->setEnabled( isSVG );
1737 mShapeStrokeColorDDBtn->setVisible( isSVG );
1738 mShapeStrokeColorDDBtn->setEnabled( isSVG );
1739 mShapeStrokeWidthLabel->setVisible( isSVG );
1740 mShapeStrokeWidthLabel->setEnabled( isSVG );
1741 mShapeStrokeWidthSpnBx->setVisible( isSVG );
1742 mShapeStrokeWidthSpnBx->setEnabled( isSVG );
1743 mShapeStrokeWidthDDBtn->setVisible( isSVG );
1744 mShapeStrokeWidthDDBtn->setEnabled( isSVG );
1747 mShapeSVGParamsBtn->setVisible( isSVG );
1750 updateSvgWidgets( mShapeSVGPathLineEdit->text() );
1754 mShapeSVGUnitsLabel->setVisible( isSVG );
1755 mShapeStrokeWidthUnitWidget->setVisible(
false );
1756 mShapeStrokeUnitsDDBtn->setVisible(
false );
1757 mShapeStrokeUnitsDDBtn->setEnabled(
false );
1759 updateAvailableShadowPositions();
1762void QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged(
const QString &text )
1764 updateSvgWidgets( text );
1769 const int numOptionsChecked = ( chkLineAbove->isChecked() ? 1 : 0 ) +
1770 ( chkLineBelow->isChecked() ? 1 : 0 ) +
1771 ( chkLineOn->isChecked() ? 1 : 0 );
1773 if ( numOptionsChecked == 1 )
1776 chkLineAbove->setEnabled( !chkLineAbove->isChecked() );
1777 chkLineBelow->setEnabled( !chkLineBelow->isChecked() );
1778 chkLineOn->setEnabled( !chkLineOn->isChecked() );
1782 chkLineAbove->setEnabled(
true );
1783 chkLineBelow->setEnabled(
true );
1784 chkLineOn->setEnabled(
true );
1794void QgsTextFormatWidget::previewScaleChanged(
double scale )
1796 lblFontPreview->setScale( scale );
1799void QgsTextFormatWidget::updateSvgWidgets(
const QString &svgPath )
1801 if ( mShapeSVGPathLineEdit->text() != svgPath )
1803 mShapeSVGPathLineEdit->setText( svgPath );
1806 QString resolvedPath;
1807 bool validSVG =
true;
1808 if ( ! svgPath.startsWith( QLatin1String(
"base64:" ), Qt::CaseInsensitive ) )
1811 validSVG = QFileInfo::exists( resolvedPath );
1815 resolvedPath = svgPath;
1820 mShapeSVGPathLineEdit->setStyleSheet( !validSVG ? QStringLiteral(
"QLineEdit{ color: rgb(225, 0, 0); }" ) : QString() );
1821 mShapeSVGPathLineEdit->setToolTip( !validSVG ? tr(
"File not found" ) : resolvedPath );
1823 QColor fill, stroke;
1824 double strokeWidth = 0.0;
1825 bool fillParam =
false, strokeParam =
false, strokeWidthParam =
false;
1831 mShapeSVGParamsBtn->setEnabled( validSVG && ( fillParam || strokeParam || strokeWidthParam ) );
1833 mShapeFillColorLabel->setEnabled( validSVG && fillParam );
1834 mShapeFillColorBtn->setEnabled( validSVG && fillParam );
1835 mShapeFillColorDDBtn->setEnabled( validSVG && fillParam );
1836 if ( mLoadSvgParams && validSVG && fillParam )
1837 mShapeFillColorBtn->setColor( fill );
1839 mShapeStrokeColorLabel->setEnabled( validSVG && strokeParam );
1840 mShapeStrokeColorBtn->setEnabled( validSVG && strokeParam );
1841 mShapeStrokeColorDDBtn->setEnabled( validSVG && strokeParam );
1842 if ( mLoadSvgParams && validSVG && strokeParam )
1843 mShapeStrokeColorBtn->setColor( stroke );
1845 mShapeStrokeWidthLabel->setEnabled( validSVG && strokeWidthParam );
1846 mShapeStrokeWidthSpnBx->setEnabled( validSVG && strokeWidthParam );
1847 mShapeStrokeWidthDDBtn->setEnabled( validSVG && strokeWidthParam );
1848 if ( mLoadSvgParams && validSVG && strokeWidthParam )
1849 mShapeStrokeWidthSpnBx->setValue( strokeWidth );
1855 mShapeSVGUnitsLabel->setEnabled( validSVG && strokeWidthParam );
1858void QgsTextFormatWidget::updateAvailableShadowPositions()
1860 if ( mShadowUnderCmbBx->count() == 0
1866 mShadowUnderCmbBx->clear();
1874 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( currentPlacement ) );
1875 if ( mShadowUnderCmbBx->currentIndex() == -1 )
1876 mShadowUnderCmbBx->setCurrentIndex( 0 );
1880void QgsTextFormatWidget::updateProperty()
1888void QgsTextFormatWidget::createAuxiliaryField()
1920 property.setActive(
true );
1929void QgsTextFormatWidget::updateShapeFrameStatus()
1931 mShapeFrame->setEnabled( mShapeDrawDDBtn->isActive() || mShapeDrawChkBx->isChecked() );
1934void QgsTextFormatWidget::updateBufferFrameStatus()
1936 mBufferFrame->setEnabled( mBufferDrawDDBtn->isActive() || mBufferDrawChkBx->isChecked() );
1939void QgsTextFormatWidget::updateShadowFrameStatus()
1941 mShadowFrame->setEnabled( mShadowDrawDDBtn->isActive() || mShadowDrawChkBx->isChecked() );
1944void QgsTextFormatWidget::updateCalloutFrameStatus()
1946 mCalloutFrame->setEnabled( mCalloutDrawDDBtn->isActive() || mCalloutsDrawCheckBox->isChecked() );
1949void QgsTextFormatWidget::updateDataDefinedAlignment()
1952 mCoordAlignmentFrame->setEnabled( ( mCoordXDDBtn->isActive() && mCoordYDDBtn->isActive() )
1953 || mCoordPointDDBtn->isActive() );
1956void QgsTextFormatWidget::overlapModeChanged()
1958 QString description;
1962 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.)" );
1965 description = tr(
"If a label cannot otherwise be placed for a feature then an overlapping label is permitted." );
1968 description = tr(
"Labels from this layer may freely overlap other labels or label obstacles without penalty." );
1972 mOverlapModeDescriptionLabel->setText( QStringLiteral(
"<i>%1</i>" ).arg( description ) );
1977 if ( name.isEmpty() )
2020 saveDlg.
setDefaultTags( mTextFormatsListWidget->currentTagFilter() );
2021 if ( !saveDlg.exec() )
2024 if ( saveDlg.
name().isEmpty() )
2034 const int res = QMessageBox::warning(
this, tr(
"Save Text Format" ),
2035 tr(
"Format with name '%1' already exists. Overwrite?" )
2036 .arg( saveDlg.
name() ),
2037 QMessageBox::Yes | QMessageBox::No );
2038 if ( res != QMessageBox::Yes )
2045 const QStringList symbolTags = saveDlg.
tags().split(
',' );
2052void QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked()
2055 svgDlg.setWindowTitle( tr(
"Select SVG file" ) );
2056 svgDlg.svgSelector()->setSvgPath( mShapeSVGPathLineEdit->text().trimmed() );
2058 if ( svgDlg.exec() == QDialog::Accepted )
2060 const QString svgPath = svgDlg.svgSelector()->currentSvgPath();
2061 if ( !svgPath.isEmpty() )
2063 mShapeSVGPathLineEdit->setText( svgPath );
2069void QgsTextFormatWidget::mShapeSVGParamsBtn_clicked()
2071 const QString svgPath = mShapeSVGPathLineEdit->text();
2072 mLoadSvgParams =
true;
2073 updateSvgWidgets( svgPath );
2074 mLoadSvgParams =
false;
2077void QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged(
int index )
2083void QgsTextFormatWidget::mPreviewTextEdit_textChanged(
const QString &text )
2085 lblFontPreview->setText( text );
2089void QgsTextFormatWidget::mPreviewTextBtn_clicked()
2091 mPreviewTextEdit->setText( QStringLiteral(
"Lorem Ipsum" ) );
2095void QgsTextFormatWidget::mPreviewBackgroundBtn_colorChanged(
const QColor &color )
2100void QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked()
2102 bool gotChar =
false;
2104 const QChar initial = !mDirectSymbLeftLineEdit->text().isEmpty() ? mDirectSymbLeftLineEdit->text().at( 0 ) : QChar();
2105 const QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
2110 if ( !dirSymb.isNull() )
2111 mDirectSymbLeftLineEdit->setText( QString( dirSymb ) );
2114void QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked()
2116 bool gotChar =
false;
2117 const QChar initial = !mDirectSymbRightLineEdit->text().isEmpty() ? mDirectSymbRightLineEdit->text().at( 0 ) : QChar();
2118 const QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
2123 if ( !dirSymb.isNull() )
2124 mDirectSymbRightLineEdit->setText( QString( dirSymb ) );
2127void QgsTextFormatWidget::chkLineOrientationDependent_toggled(
bool active )
2131 chkLineAbove->setText( tr(
"Left of line" ) );
2132 chkLineBelow->setText( tr(
"Right of line" ) );
2136 chkLineAbove->setText( tr(
"Above line" ) );
2137 chkLineBelow->setText( tr(
"Below line" ) );
2142void QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked()
2157 if ( dlg.exec() == QDialog::Accepted )
2164void QgsTextFormatWidget::showBackgroundRadius(
bool show )
2166 mShapeRadiusLabel->setVisible( show );
2167 mShapeRadiusXDbSpnBx->setVisible( show );
2169 mShapeRadiusYDbSpnBx->setVisible( show );
2171 mShapeRadiusUnitWidget->setVisible( show );
2173 mShapeRadiusDDBtn->setVisible( show );
2174 mShapeRadiusUnitsDDBtn->setVisible( show );
2180 return *lExpressionContext;
2207 if ( mGeometryGeneratorGroupBox->isChecked() )
2221 : QDialog( parent, fl )
2223 setWindowTitle( tr(
"Text Settings" ) );
2226 mFormatWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
2228 QVBoxLayout *layout =
new QVBoxLayout(
this );
2229 layout->addWidget( mFormatWidget );
2231 mButtonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, Qt::Horizontal,
this );
2232 layout->addWidget( mButtonBox );
2234 setLayout( layout );
2237 connect( mButtonBox->button( QDialogButtonBox::Ok ), &QAbstractButton::clicked,
this, &QDialog::accept );
2238 connect( mButtonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked,
this, &QDialog::reject );
2239 connect( mButtonBox->button( QDialogButtonBox::Help ), &QAbstractButton::clicked,
this, &QgsTextFormatDialog::showHelp );
2244 return mFormatWidget->
format();
2247void QgsTextFormatDialog::showHelp()
2249 QgsHelp::openHelp( QStringLiteral(
"style_library/label_settings.html#formatting-the-label-text" ) );
2265 mFormatWidget = qobject_cast< QgsTextFormatWidget * >(
widget() );
2268 if ( !mBlockSignals )
2275 return mFormatWidget->
format();
2280 mBlockSignals =
true;
2282 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.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
Base class for all map layer types.
The QgsMapSettings class contains configuration for rendering of the map.
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.