17#include "moc_qgstextformatwidget.cpp"
50#include <QButtonGroup>
55 , mMapCanvas( mapCanvas )
59 setWidgetMode(
Text );
66 , mMapCanvas( mapCanvas )
73 setWidgetMode( mode );
76void QgsTextFormatWidget::initWidget()
80 mGeometryGeneratorGroupBox->setCollapsed(
true );
82 mTextItem =
new QListWidgetItem( tr(
"Text" ), mLabelingOptionsListWidget );
84 mTextItem->setToolTip( tr(
"Text style" ) );
86 mFormattingItem =
new QListWidgetItem( tr(
"Formatting" ), mLabelingOptionsListWidget );
90 mBufferItem =
new QListWidgetItem( tr(
"Buffer" ), mLabelingOptionsListWidget );
94 mMaskItem =
new QListWidgetItem( tr(
"Mask" ), mLabelingOptionsListWidget );
98 mBackgroundItem =
new QListWidgetItem( tr(
"Background" ), mLabelingOptionsListWidget );
102 mShadowItem =
new QListWidgetItem( tr(
"Shadow" ), mLabelingOptionsListWidget );
106 mCalloutItem =
new QListWidgetItem( tr(
"Callouts" ), mLabelingOptionsListWidget );
110 mPlacementItem =
new QListWidgetItem( tr(
"Placement" ), mLabelingOptionsListWidget );
114 mRenderingItem =
new QListWidgetItem( tr(
"Rendering" ), mLabelingOptionsListWidget );
118 mLabelingOptionsListWidget->addItem(
mTextItem );
120 mLabelingOptionsListWidget->addItem(
mBufferItem );
121 mLabelingOptionsListWidget->addItem(
mMaskItem );
123 mLabelingOptionsListWidget->addItem(
mShadowItem );
128 QObject::connect( mOptionsTab, &QTabWidget::currentChanged,
this, [
this](
int index ) {
129 if ( index == mOptionsTab->indexOf( textTab ) )
130 mLabelStackedWidget->setCurrentWidget( mLabelPage_Text );
131 else if ( index == mOptionsTab->indexOf( formattingTab ) )
132 mLabelStackedWidget->setCurrentWidget( mLabelPage_Formatting );
133 else if ( index == mOptionsTab->indexOf( maskTab ) )
134 mLabelStackedWidget->setCurrentWidget( mLabelPage_Mask );
135 else if ( index == mOptionsTab->indexOf( bufferTab ) )
136 mLabelStackedWidget->setCurrentWidget( mLabelPage_Buffer );
137 else if ( index == mOptionsTab->indexOf( backgroundTab ) )
138 mLabelStackedWidget->setCurrentWidget( mLabelPage_Background );
139 else if ( index == mOptionsTab->indexOf( shadowTab ) )
140 mLabelStackedWidget->setCurrentWidget( mLabelPage_Shadow );
141 else if ( index == mOptionsTab->indexOf( calloutsTab ) )
142 mLabelStackedWidget->setCurrentWidget( mLabelPage_Callouts );
143 else if ( index == mOptionsTab->indexOf( placementTab ) )
144 mLabelStackedWidget->setCurrentWidget( mLabelPage_Placement );
145 else if ( index == mOptionsTab->indexOf( renderingTab ) )
146 mLabelStackedWidget->setCurrentWidget( mLabelPage_Rendering );
149 QObject::connect( mLabelingOptionsListWidget, &QListWidget::currentRowChanged,
this, [
this](
int ) {
150 QListWidgetItem *currentItem = mLabelingOptionsListWidget->currentItem();
154 mLabelStackedWidget->setCurrentWidget( mLabelPage_Text );
156 mLabelStackedWidget->setCurrentWidget( mLabelPage_Formatting );
158 mLabelStackedWidget->setCurrentWidget( mLabelPage_Mask );
160 mLabelStackedWidget->setCurrentWidget( mLabelPage_Buffer );
162 mLabelStackedWidget->setCurrentWidget( mLabelPage_Background );
164 mLabelStackedWidget->setCurrentWidget( mLabelPage_Shadow );
166 mLabelStackedWidget->setCurrentWidget( mLabelPage_Callouts );
168 mLabelStackedWidget->setCurrentWidget( mLabelPage_Placement );
170 mLabelStackedWidget->setCurrentWidget( mLabelPage_Rendering );
173 QObject::connect( mLabelingOptionsListWidget, &QListWidget::currentRowChanged, mLabelStackedWidget, &QStackedWidget::setCurrentIndex );
175 connect( mShapeSVGPathLineEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged );
176 connect( mFontSizeSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontSizeSpinBox_valueChanged );
177 connect( mFontFamilyCmbBx, &QFontComboBox::currentFontChanged,
this, &QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged );
178 connect( mFontStyleComboBox, &QComboBox::currentTextChanged,
this, &QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged );
179 connect( mFontUnderlineBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontUnderlineBtn_toggled );
180 connect( mFontStrikethroughBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontStrikethroughBtn_toggled );
181 connect( mFontWordSpacingSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged );
182 connect( mFontLetterSpacingSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged );
184 connect( mFontMinPixelSpinBox,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged );
185 connect( mFontMaxPixelSpinBox,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged );
194 connect( mShapeTypeCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged );
195 connect( mShapeRotationCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged );
196 connect( mShapeSVGParamsBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGParamsBtn_clicked );
197 connect( mShapeSVGSelectorBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked );
198 connect( mPreviewTextEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mPreviewTextEdit_textChanged );
199 connect( mPreviewTextBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mPreviewTextBtn_clicked );
201 connect( mDirectSymbLeftToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked );
202 connect( mDirectSymbRightToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked );
203 connect( chkLineOrientationDependent, &QCheckBox::toggled,
this, &QgsTextFormatWidget::chkLineOrientationDependent_toggled );
204 connect( mToolButtonConfigureSubstitutes, &QToolButton::clicked,
this, &QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked );
205 connect( mKerningCheckBox, &QCheckBox::toggled,
this, &QgsTextFormatWidget::kerningToggled );
206 connect( mComboOverlapHandling, qOverload<int>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::overlapModeChanged );
207 connect( mTabStopsButton, &QToolButton::clicked,
this, &QgsTextFormatWidget::configureTabStops );
210 mOptionsTab->setIconSize( QSize( iconSize, iconSize ) );
211 mLabelingOptionsListWidget->setIconSize( QSize( iconSize, iconSize ) );
217 mPreviewTextBtn->setIconSize( QSize( iconSize16, iconSize16 ) );
218 mPointOffsetAboveLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
219 mPointOffsetAbove->setIconSize( QSize( iconSize32, iconSize18 ) );
220 mPointOffsetAboveRight->setIconSize( QSize( iconSize32, iconSize18 ) );
221 mPointOffsetLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
222 mPointOffsetOver->setIconSize( QSize( iconSize32, iconSize18 ) );
223 mPointOffsetRight->setIconSize( QSize( iconSize32, iconSize18 ) );
224 mPointOffsetBelowLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
225 mPointOffsetBelow->setIconSize( QSize( iconSize32, iconSize18 ) );
226 mPointOffsetBelowRight->setIconSize( QSize( iconSize32, iconSize18 ) );
227 mLabelMinScale->setPixmap(
QgsApplication::getThemeIcon( QStringLiteral(
"/mActionZoomOut.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
228 mLabelMaxScale->setPixmap(
QgsApplication::getThemeIcon( QStringLiteral(
"/mActionZoomIn.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
231 mFontUnderlineBtn->setMinimumSize( buttonSize, buttonSize );
232 mFontUnderlineBtn->setMaximumSize( buttonSize, buttonSize );
233 mFontStrikethroughBtn->setMinimumSize( buttonSize, buttonSize );
234 mFontStrikethroughBtn->setMaximumSize( buttonSize, buttonSize );
235 mFontBoldBtn->setMinimumSize( buttonSize, buttonSize );
236 mFontBoldBtn->setMaximumSize( buttonSize, buttonSize );
237 mFontItalicBtn->setMinimumSize( buttonSize, buttonSize );
238 mFontItalicBtn->setMaximumSize( buttonSize, buttonSize );
240 mPreviewScaleComboBox->setMapCanvas(
mMapCanvas );
241 mPreviewScaleComboBox->setShowCurrentScaleButton(
true );
244 const auto unitWidgets = findChildren<QgsUnitSelectionWidget *>();
265 mFontLineHeightSpinBox->setClearValue( 100.0 );
266 mShapeRotationDblSpnBx->setClearValue( 0.0 );
267 mShapeOffsetXSpnBx->setClearValue( 0.0 );
268 mShapeOffsetYSpnBx->setClearValue( 0.0 );
269 mPointOffsetXSpinBox->setClearValue( 0.0 );
270 mPointOffsetYSpinBox->setClearValue( 0.0 );
271 mPointAngleSpinBox->setClearValue( 0.0 );
272 mFontLetterSpacingSpinBox->setClearValue( 0.0 );
273 mFontWordSpacingSpinBox->setClearValue( 0.0 );
274 mZIndexSpinBox->setClearValue( 0.0 );
275 mLineDistanceSpnBx->setClearValue( 0.0 );
276 mMaximumDistanceSpnBx->setMinimum( 0 );
277 mMaximumDistanceSpnBx->setClearValue( 0.0, tr(
"Not set" ) );
278 mSpinStretch->setClearValue( 100 );
279 mTabStopDistanceSpin->setMinimum( 0 );
283 mFontLineHeightSpinBox->setClearValue( 100.0 );
285 mFontLineHeightSpinBox->setClearValue( 10.0 );
305 updateAvailableShadowPositions();
308 mBackgroundMarkerSymbolButton->setDialogTitle( tr(
"Background Symbol" ) );
309 mBackgroundMarkerSymbolButton->registerExpressionContextGenerator(
this );
310 mBackgroundMarkerSymbolButton->setMapCanvas(
mMapCanvas );
312 mBackgroundFillSymbolButton->setDialogTitle( tr(
"Background Symbol" ) );
313 mBackgroundFillSymbolButton->registerExpressionContextGenerator(
this );
314 mBackgroundFillSymbolButton->setMapCanvas(
mMapCanvas );
318 mRefFont = lblFontPreview->font();
321 connect( mShadowOffsetAngleDial, &QAbstractSlider::valueChanged, mShadowOffsetAngleSpnBx, &QSpinBox::setValue );
322 connect( mShadowOffsetAngleSpnBx,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ), mShadowOffsetAngleDial, &QAbstractSlider::setValue );
323 connect( mLimitLabelChkBox, &QAbstractButton::toggled, mLimitLabelSpinBox, &QWidget::setEnabled );
324 connect( mCheckBoxSubstituteText, &QAbstractButton::toggled, mToolButtonConfigureSubstitutes, &QWidget::setEnabled );
334 populateFontCapitalsComboBox();
337 mPreviewBackgroundBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
338 mPreviewBackgroundBtn->setContext( QStringLiteral(
"labeling" ) );
339 mPreviewBackgroundBtn->setColor( QColor( 255, 255, 255 ) );
340 btnTextColor->setColorDialogTitle( tr(
"Select Text Color" ) );
341 btnTextColor->setContext( QStringLiteral(
"labeling" ) );
342 btnTextColor->setDefaultColor( Qt::black );
343 btnBufferColor->setColorDialogTitle( tr(
"Select Buffer Color" ) );
344 btnBufferColor->setContext( QStringLiteral(
"labeling" ) );
345 btnBufferColor->setDefaultColor( Qt::white );
346 mShapeStrokeColorBtn->setColorDialogTitle( tr(
"Select Stroke Color" ) );
347 mShapeStrokeColorBtn->setContext( QStringLiteral(
"labeling" ) );
348 mShapeFillColorBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
349 mShapeFillColorBtn->setContext( QStringLiteral(
"labeling" ) );
350 mShadowColorBtn->setColorDialogTitle( tr(
"Select Shadow Color" ) );
351 mShadowColorBtn->setContext( QStringLiteral(
"labeling" ) );
352 mShadowColorBtn->setDefaultColor( Qt::black );
354 mFontColorDDBtn->registerLinkedWidget( btnTextColor );
355 mBufferColorDDBtn->registerLinkedWidget( btnBufferColor );
356 mShapeStrokeColorDDBtn->registerLinkedWidget( mShapeStrokeColorBtn );
357 mShapeFillColorDDBtn->registerLinkedWidget( mShapeFillColorBtn );
358 mShadowColorDDBtn->registerLinkedWidget( mShadowColorBtn );
399 const auto groupBoxes = findChildren<QgsCollapsibleGroupBox *>();
402 grpbox->setSettingGroup( QStringLiteral(
"mAdvLabelingDlg" ) );
408 mLabelingOptionsListWidget->setAttribute( Qt::WA_MacShowFocusRect,
false );
413 QSizePolicy policy( mLabelingOptionsListFrame->sizePolicy() );
414 policy.setHorizontalStretch( 0 );
415 mLabelingOptionsListFrame->setSizePolicy( policy );
416 if ( !settings.
contains( QStringLiteral(
"/Windows/Labeling/OptionsSplitState" ) ) )
419 QList<int> splitsizes;
421 mLabelingOptionsSplitter->setSizes( splitsizes );
425 connect( mLabelStackedWidget, &QStackedWidget::currentChanged,
this, &QgsTextFormatWidget::optionsStackedWidget_CurrentChanged );
428 mFontPreviewSplitter->restoreState( settings.
value( QStringLiteral(
"Windows/Labeling/FontPreviewSplitState" ) ).toByteArray() );
429 mLabelingOptionsSplitter->restoreState( settings.
value( QStringLiteral(
"Windows/Labeling/OptionsSplitState" ) ).toByteArray() );
431 mLabelingOptionsListWidget->setCurrentRow( settings.
value( QStringLiteral(
"Windows/Labeling/Tab" ), 0 ).toInt() );
435 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
439 mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
443 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
445 overlapModeChanged();
447#if defined( HAS_KDE_QT5_FONT_STRETCH_FIX ) || ( QT_VERSION >= QT_VERSION_CHECK( 6, 3, 0 ) )
450 mLabelStretch->hide();
451 mSpinStretch->hide();
452 mFontStretchDDBtn->hide();
457 QList<QWidget *> widgets;
458 widgets << btnBufferColor
460 << chkLabelPerFeaturePart
464 << chkLineOrientationDependent
466 << chkPreserveRotation
468 << comboBufferBlendMode
470 << mBufferJoinStyleComboBox
471 << mBufferTranspFillChbx
472 << mBufferOpacityWidget
473 << mCentroidInsideCheckBox
475 << mCoordRotationUnitComboBox
477 << mDirectSymbLeftLineEdit
478 << mDirectSymbRevChkBx
479 << mDirectSymbRightLineEdit
480 << mFitInsidePolygonCheckBox
481 << mFontCapitalsComboBox
482 << mFontLetterSpacingSpinBox
483 << mFontLimitPixelChkBox
484 << mFontLineHeightSpinBox
485 << mLineHeightUnitWidget
486 << mFontMaxPixelSpinBox
487 << mFontMinPixelSpinBox
488 << mFontMultiLineAlignComboBox
490 << mFontStyleComboBox
491 << mTextOrientationComboBox
492 << mTextOpacityWidget
494 << mFontWordSpacingSpinBox
496 << mFormatNumDecimalsSpnBx
497 << mFormatNumPlusSignChkBx
499 << mLimitLabelSpinBox
500 << mLineDistanceSpnBx
501 << mLineDistanceUnitWidget
502 << mMaximumDistanceSpnBx
503 << mMaximumDistanceUnitWidget
504 << mMaxCharAngleInDSpinBox
505 << mMaxCharAngleOutDSpinBox
507 << mOffsetTypeComboBox
508 << mCheckAllowDegradedPlacement
509 << mComboOverlapHandling
510 << mPointAngleSpinBox
511 << mPointOffsetUnitWidget
512 << mPointOffsetXSpinBox
513 << mPointOffsetYSpinBox
514 << mPreviewBackgroundBtn
517 << mRepeatDistanceSpinBox
518 << mRepeatDistanceUnitWidget
519 << mOverrunDistanceSpinBox
520 << mOverrunDistanceUnitWidget
521 << mScaleBasedVisibilityChkBx
527 << mShadowOffsetAngleSpnBx
528 << mShadowOffsetGlobalChkBx
529 << mShadowOffsetSpnBx
530 << mShadowOffsetUnitWidget
531 << mShadowRadiusAlphaChkBx
532 << mShadowRadiusDblSpnBx
533 << mShadowRadiusUnitWidget
535 << mShadowOpacityWidget
538 << mShapeStrokeColorBtn
539 << mShapeStrokeWidthSpnBx
540 << mShapeStrokeWidthUnitWidget
542 << mShapeFillColorBtn
543 << mShapeOffsetXSpnBx
544 << mShapeOffsetYSpnBx
545 << mShapeOffsetUnitWidget
546 << mShapeRadiusXDbSpnBx
547 << mShapeRadiusYDbSpnBx
548 << mShapeRotationCmbBx
549 << mShapeRotationDblSpnBx
550 << mShapeRadiusUnitWidget
551 << mShapeSVGPathLineEdit
553 << mShapeSizeUnitWidget
556 << mBackgroundOpacityWidget
561 << mAutoWrapLengthSpinBox
562 << mAutoWrapTypeComboBox
563 << mCentroidRadioVisible
564 << mCentroidRadioWhole
565 << mDirectSymbRadioBtnAbove
566 << mDirectSymbRadioBtnBelow
567 << mDirectSymbRadioBtnLR
568 << mUpsidedownRadioAll
569 << mUpsidedownRadioDefined
570 << mUpsidedownRadioOff
571 << mPlacementModeComboBox
572 << mFieldExpressionWidget
573 << mCheckBoxSubstituteText
574 << mGeometryGeneratorGroupBox
575 << mGeometryGenerator
576 << mGeometryGeneratorType
577 << mBackgroundMarkerSymbolButton
578 << mBackgroundFillSymbolButton
579 << mCalloutsDrawCheckBox
580 << mCalloutStyleComboBox
583 << mMaskJoinStyleComboBox
584 << mMaskBufferSizeSpinBox
585 << mMaskOpacityWidget
586 << mCheckAllowLabelsOutsidePolygons
587 << mHtmlFormattingCheckBox
588 << mPrioritizationComboBox
589 << mTabDistanceUnitWidget
590 << mTabStopDistanceSpin;
592 connectValueChanged( widgets );
597 connect( mBufferDrawChkBx, &QCheckBox::stateChanged,
this, [=](
int ) {
598 updateBufferFrameStatus();
601 connect( mShapeDrawChkBx, &QCheckBox::stateChanged,
this, [=](
int ) {
602 updateShapeFrameStatus();
605 connect( mShadowDrawChkBx, &QCheckBox::stateChanged,
this, [=](
int ) {
606 updateShadowFrameStatus();
609 connect( mCalloutsDrawCheckBox, &QCheckBox::stateChanged,
this, [=](
int ) {
610 updateCalloutFrameStatus();
618 whileBlocking( mOptionsTab )->setCurrentIndex( mLabelStackedWidget->currentIndex() );
619 mOptionsTab->tabBar()->setUsesScrollButtons(
true );
647 const int prevIndex = mOptionsTab->currentIndex();
657 mOptionsTab->removeTab( mOptionsTab->indexOf( renderingTab ) );
658 mOptionsTab->removeTab( mOptionsTab->indexOf( placementTab ) );
659 mOptionsTab->removeTab( mOptionsTab->indexOf( calloutsTab ) );
660 mOptionsTab->removeTab( mOptionsTab->indexOf( maskTab ) );
661 mLabelStackedWidget->removeWidget( mLabelPage_Rendering );
662 mLabelStackedWidget->removeWidget( mLabelPage_Callouts );
663 mLabelStackedWidget->removeWidget( mLabelPage_Mask );
664 mLabelStackedWidget->removeWidget( mLabelPage_Placement );
674 mLabelStackedWidget->setCurrentIndex( prevIndex - 1 );
675 mOptionsTab->setCurrentIndex( prevIndex - 1 );
682 mLabelStackedWidget->setCurrentIndex( 0 );
683 mOptionsTab->setCurrentIndex( 0 );
687 mStackedWidgetLabelWith->hide();
688 mDirectSymbolsFrame->hide();
689 mFormatNumFrame->hide();
690 mFormatNumChkBx->hide();
691 mFormatNumDDBtn->hide();
692 mCheckBoxSubstituteText->hide();
693 mToolButtonConfigureSubstitutes->hide();
694 mLabelWrapOnCharacter->hide();
695 wrapCharacterEdit->hide();
696 mWrapCharDDBtn->hide();
697 mLabelWrapLinesTo->hide();
698 mAutoWrapLengthSpinBox->hide();
699 mAutoWrapLengthDDBtn->hide();
700 mAutoWrapTypeComboBox->hide();
701 mFontMultiLineLabel->hide();
702 mFontMultiLineAlignComboBox->hide();
703 mFontMultiLineAlignDDBtn->hide();
713 const auto buttons = findChildren<QgsPropertyOverrideButton *>();
716#if defined( HAS_KDE_QT5_FONT_STRETCH_FIX ) || ( QT_VERSION >= QT_VERSION_CHECK( 6, 3, 0 ) )
719 if ( button == mFontStretchDDBtn )
722 button->setVisible( visible );
728 mOptionsTab->setVisible( enabled );
729 if (
int tabIndex = mOptionsTab->indexOf( textTab ); tabIndex >= 0 )
730 mOptionsTab->setTabToolTip( tabIndex, tr(
"Text" ) );
731 if (
int tabIndex = mOptionsTab->indexOf( formattingTab ); tabIndex >= 0 )
732 mOptionsTab->setTabToolTip( tabIndex, tr(
"Formatting" ) );
733 if (
int tabIndex = mOptionsTab->indexOf( bufferTab ); tabIndex >= 0 )
734 mOptionsTab->setTabToolTip( tabIndex, tr(
"Buffer" ) );
735 if (
int tabIndex = mOptionsTab->indexOf( maskTab ); tabIndex >= 0 )
736 mOptionsTab->setTabToolTip( tabIndex, tr(
"Mask" ) );
737 if (
int tabIndex = mOptionsTab->indexOf( backgroundTab ); tabIndex >= 0 )
738 mOptionsTab->setTabToolTip( tabIndex, tr(
"Background" ) );
739 if (
int tabIndex = mOptionsTab->indexOf( shadowTab ); tabIndex >= 0 )
740 mOptionsTab->setTabToolTip( tabIndex, tr(
"Shadow" ) );
741 if (
int tabIndex = mOptionsTab->indexOf( calloutsTab ); tabIndex >= 0 )
742 mOptionsTab->setTabToolTip( tabIndex, tr(
"Callouts" ) );
743 if (
int tabIndex = mOptionsTab->indexOf( placementTab ); tabIndex >= 0 )
744 mOptionsTab->setTabToolTip( tabIndex, tr(
"Placement" ) );
745 if (
int tabIndex = mOptionsTab->indexOf( renderingTab ); tabIndex >= 0 )
746 mOptionsTab->setTabToolTip( tabIndex, tr(
"Rendering" ) );
748 mLabelingOptionsListFrame->setVisible( !enabled );
749 groupBox_mPreview->setVisible( !enabled );
753void QgsTextFormatWidget::connectValueChanged(
const QList<QWidget *> &widgets )
755 const auto constWidgets = widgets;
756 for ( QWidget *widget : constWidgets )
766 else if (
QgsOpacityWidget *w = qobject_cast<QgsOpacityWidget *>( widget ) )
770 else if (
QgsScaleWidget *w = qobject_cast<QgsScaleWidget *>( widget ) )
778 else if ( QComboBox *w = qobject_cast<QComboBox *>( widget ) )
782 else if ( QSpinBox *w = qobject_cast<QSpinBox *>( widget ) )
786 else if ( QDoubleSpinBox *w = qobject_cast<QDoubleSpinBox *>( widget ) )
790 else if (
QgsColorButton *w = qobject_cast<QgsColorButton *>( widget ) )
794 else if ( QCheckBox *w = qobject_cast<QCheckBox *>( widget ) )
798 else if ( QRadioButton *w = qobject_cast<QRadioButton *>( widget ) )
802 else if ( QLineEdit *w = qobject_cast<QLineEdit *>( widget ) )
806 else if ( QSlider *w = qobject_cast<QSlider *>( widget ) )
810 else if ( QGroupBox *w = qobject_cast<QGroupBox *>( widget ) )
820 QgsLogger::warning( QStringLiteral(
"Could not create connection for widget %1" ).arg( widget->objectName() ) );
853 mDirectSymbDDBtn->registerCheckedWidget( mDirectSymbChkBx );
861 mFormatNumDDBtn->registerCheckedWidget( mFormatNumChkBx );
876 mEnableMaskDDBtn->registerCheckedWidget( mEnableMaskChkBx );
884 mShapeDrawDDBtn->registerCheckedWidget( mShapeDrawChkBx );
906 mShadowDrawDDBtn->registerCheckedWidget( mShadowDrawChkBx );
949 updateDataDefinedAlignment();
952 const QString ddScaleVisInfo = tr(
"Value < 0 represents a scale closer than 1:1, e.g. -10 = 10:1<br>"
953 "Value of 0 disables the specific limit." );
955 mScaleBasedVisibilityDDBtn->registerCheckedWidget( mScaleBasedVisibilityChkBx );
957 mScaleBasedVisibilityMinDDBtn->setUsageInfo( ddScaleVisInfo );
959 mScaleBasedVisibilityMaxDDBtn->setUsageInfo( ddScaleVisInfo );
965 mMinScaleWidget->setPredefinedScales( scales );
966 mMaxScaleWidget->setPredefinedScales( scales );
971 mMinScaleWidget->updateScales();
972 mMaxScaleWidget->updateScales();
976 mFontLimitPixelDDBtn->registerCheckedWidget( mFontLimitPixelChkBox );
997 if ( !mButtons.contains( key ) )
1002 mButtons[key] = button;
1022 mBufferDrawChkBx->setChecked( buffer.
enabled() );
1023 mBufferFrame->setEnabled( buffer.
enabled() );
1024 spinBufferSize->setValue( buffer.
size() );
1025 mBufferUnitWidget->setUnit( buffer.
sizeUnit() );
1027 btnBufferColor->setColor( buffer.
color() );
1028 mBufferOpacityWidget->setOpacity( buffer.
opacity() );
1029 mBufferJoinStyleComboBox->setPenJoinStyle( buffer.
joinStyle() );
1031 comboBufferBlendMode->setBlendMode( buffer.
blendMode() );
1033 mBufferEffect.reset( lPaintEffect->clone() );
1037 mBufferEffect->setEnabled(
false );
1039 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
1043 mEnableMaskChkBx->setChecked( mask.
enabled() );
1044 mMaskBufferSizeSpinBox->setValue( mask.
size() );
1045 mMaskBufferUnitWidget->setUnit( mask.
sizeUnit() );
1047 mMaskOpacityWidget->setOpacity( mask.
opacity() );
1048 mMaskJoinStyleComboBox->setPenJoinStyle( mask.
joinStyle() );
1050 mMaskEffect.reset( lPaintEffect->clone() );
1054 mMaskEffect->setEnabled(
false );
1056 mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
1066 mTextOrientationComboBox->setCurrentIndex( mTextOrientationComboBox->findData(
static_cast<int>(
format.
orientation() ) ) );
1069 mFontWordSpacingSpinBox->setValue(
format.
font().wordSpacing() );
1070 mFontLetterSpacingSpinBox->setValue(
format.
font().letterSpacing() );
1079 updateFont( mRefFont );
1085 const QString missingTxt = tr(
"%1 not found. Default substituted." );
1086 QString txtPrepend = tr(
"Chosen font" );
1091 mFontMissingLabel->setText( missingTxt.arg( txtPrepend ) );
1094 mLabelingOptionsListWidget->setCurrentItem(
mTextItem );
1095 whileBlocking( mOptionsTab )->setCurrentIndex( mOptionsTab->indexOf( textTab ) );
1101 mShapeDrawChkBx->setChecked( background.
enabled() );
1102 mShapeFrame->setEnabled( background.
enabled() );
1103 mShapeTypeCmbBx->blockSignals(
true );
1104 mShapeTypeCmbBx->setCurrentIndex( mShapeTypeCmbBx->findData( background.
type() ) );
1105 mShapeTypeCmbBx->blockSignals(
false );
1106 updateAvailableShadowPositions();
1107 mShapeSVGPathLineEdit->setText( background.
svgFile() );
1109 mShapeSizeCmbBx->setCurrentIndex( background.
sizeType() );
1110 mShapeSizeXSpnBx->setValue( background.
size().width() );
1111 mShapeSizeYSpnBx->setValue( background.
size().height() );
1112 mShapeSizeUnitWidget->setUnit( background.
sizeUnit() );
1114 mShapeRotationCmbBx->setCurrentIndex( background.
rotationType() );
1117 mShapeRotationDblSpnBx->setValue( background.
rotation() );
1118 mShapeOffsetXSpnBx->setValue( background.
offset().x() );
1119 mShapeOffsetYSpnBx->setValue( background.
offset().y() );
1120 mShapeOffsetUnitWidget->setUnit( background.
offsetUnit() );
1122 mShapeRadiusXDbSpnBx->setValue( background.
radii().width() );
1123 mShapeRadiusYDbSpnBx->setValue( background.
radii().height() );
1124 mShapeRadiusUnitWidget->setUnit( background.
radiiUnit() );
1127 mShapeFillColorBtn->setColor( background.
fillColor() );
1128 mShapeStrokeColorBtn->setColor( background.
strokeColor() );
1129 mShapeStrokeWidthSpnBx->setValue( background.
strokeWidth() );
1133 mBackgroundOpacityWidget->setOpacity( background.
opacity() );
1134 mShapeBlendCmbBx->setBlendMode( background.
blendMode() );
1136 mLoadSvgParams =
false;
1137 mShapeTypeCmbBx_currentIndexChanged( background.
type() );
1139 if (
auto *lPaintEffect = background.
paintEffect() )
1140 mBackgroundEffect.reset( lPaintEffect->clone() );
1144 mBackgroundEffect->setEnabled(
false );
1146 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
1152 mShadowDrawChkBx->setChecked( shadow.
enabled() );
1153 mShadowFrame->setEnabled( shadow.
enabled() );
1154 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( shadow.
shadowPlacement() ) );
1155 mShadowOffsetAngleSpnBx->setValue( shadow.
offsetAngle() );
1157 mShadowOffsetUnitWidget->setUnit( shadow.
offsetUnit() );
1159 mShadowOffsetGlobalChkBx->setChecked( shadow.
offsetGlobal() );
1161 mShadowRadiusDblSpnBx->setValue( shadow.
blurRadius() );
1164 mShadowRadiusAlphaChkBx->setChecked( shadow.
blurAlphaOnly() );
1165 mShadowOpacityWidget->setOpacity( shadow.
opacity() );
1166 mShadowScaleSpnBx->setValue( shadow.
scale() );
1168 mShadowColorBtn->setColor( shadow.
color() );
1169 mShadowBlendCmbBx->setBlendMode( shadow.
blendMode() );
1181 settings.
setValue( QStringLiteral(
"Windows/Labeling/FontPreviewSplitState" ), mFontPreviewSplitter->saveState() );
1182 settings.
setValue( QStringLiteral(
"Windows/Labeling/OptionsSplitState" ), mLabelingOptionsSplitter->saveState() );
1184 int prevIndex = mLabelingOptionsListWidget->currentRow();
1185 if ( mWidgetMode ==
Text )
1187 switch ( prevIndex )
1196 settings.
setValue( QStringLiteral(
"Windows/Labeling/Tab" ), prevIndex );
1224 buffer.
setEnabled( mBufferDrawChkBx->isChecked() );
1225 buffer.
setSize( spinBufferSize->value() );
1226 buffer.
setColor( btnBufferColor->color() );
1227 buffer.
setOpacity( mBufferOpacityWidget->opacity() );
1230 buffer.
setJoinStyle( mBufferJoinStyleComboBox->penJoinStyle() );
1232 buffer.
setBlendMode( comboBufferBlendMode->blendMode() );
1241 mask.
setEnabled( mEnableMaskChkBx->isChecked() );
1242 mask.
setSize( mMaskBufferSizeSpinBox->value() );
1243 mask.
setOpacity( mMaskOpacityWidget->opacity() );
1244 mask.
setSizeUnit( mMaskBufferUnitWidget->unit() );
1246 mask.
setJoinStyle( mMaskJoinStyleComboBox->penJoinStyle() );
1256 background.
setEnabled( mShapeDrawChkBx->isChecked() );
1258 background.
setSvgFile( mShapeSVGPathLineEdit->text() );
1260 background.
setSize( QSizeF( mShapeSizeXSpnBx->value(), mShapeSizeYSpnBx->value() ) );
1261 background.
setSizeUnit( mShapeSizeUnitWidget->unit() );
1264 background.
setRotation( mShapeRotationDblSpnBx->value() );
1265 background.
setOffset( QPointF( mShapeOffsetXSpnBx->value(), mShapeOffsetYSpnBx->value() ) );
1268 background.
setRadii( QSizeF( mShapeRadiusXDbSpnBx->value(), mShapeRadiusYDbSpnBx->value() ) );
1269 background.
setRadiiUnit( mShapeRadiusUnitWidget->unit() );
1272 background.
setFillColor( mShapeFillColorBtn->color() );
1277 background.
setOpacity( mBackgroundOpacityWidget->opacity() );
1278 background.
setBlendMode( mShapeBlendCmbBx->blendMode() );
1289 shadow.
setEnabled( mShadowDrawChkBx->isChecked() );
1300 shadow.
setOpacity( mShadowOpacityWidget->opacity() );
1301 shadow.
setScale( mShadowScaleSpnBx->value() );
1302 shadow.
setColor( mShadowColorBtn->color() );
1306 if ( includeDataDefinedProperties )
1337 if ( mButtons.contains( key ) )
1346void QgsTextFormatWidget::optionsStackedWidget_CurrentChanged(
int )
1348 mLabelingOptionsListWidget->blockSignals(
true );
1349 QWidget *currentPage = mLabelStackedWidget->currentWidget();
1350 if ( currentPage == mLabelPage_Text )
1351 mLabelingOptionsListWidget->setCurrentItem(
mTextItem );
1352 else if ( currentPage == mLabelPage_Formatting )
1354 else if ( currentPage == mLabelPage_Mask )
1355 mLabelingOptionsListWidget->setCurrentItem(
mMaskItem );
1356 if ( currentPage == mLabelPage_Buffer )
1357 mLabelingOptionsListWidget->setCurrentItem(
mBufferItem );
1358 if ( currentPage == mLabelPage_Background )
1360 if ( currentPage == mLabelPage_Shadow )
1361 mLabelingOptionsListWidget->setCurrentItem(
mShadowItem );
1362 if ( currentPage == mLabelPage_Callouts )
1363 mLabelingOptionsListWidget->setCurrentItem(
mCalloutItem );
1364 if ( currentPage == mLabelPage_Rendering )
1366 if ( currentPage == mLabelPage_Placement )
1368 mLabelingOptionsListWidget->blockSignals(
false );
1377 mPreviewExpressionContext = *lExpressionContext;
1382 const auto symbolButtonWidgets = findChildren<QgsSymbolButton *>();
1390void QgsTextFormatWidget::collapseSample(
bool collapse )
1394 QList<int> splitSizes = mFontPreviewSplitter->sizes();
1395 if ( splitSizes[0] > groupBox_mPreview->height() )
1397 const int delta = splitSizes[0] - groupBox_mPreview->height();
1398 splitSizes[0] -= delta;
1399 splitSizes[1] += delta;
1400 mFontPreviewSplitter->setSizes( splitSizes );
1405void QgsTextFormatWidget::changeTextColor(
const QColor &color )
1411void QgsTextFormatWidget::updateFont(
const QFont &newFont )
1414 if ( newFont != mRefFont )
1423 QFont symbolFont = mRefFont;
1424 symbolFont.setPointSize( font().pointSize() );
1425 mDirectSymbLeftLineEdit->setFont( symbolFont );
1426 mDirectSymbRightLineEdit->setFont( symbolFont );
1428 blockFontChangeSignals(
true );
1429 mFontFamilyCmbBx->setCurrentFont( symbolFont );
1430 populateFontStyleComboBox();
1431 mFontUnderlineBtn->setChecked( mRefFont.underline() );
1432 mFontStrikethroughBtn->setChecked( mRefFont.strikeOut() );
1433 mKerningCheckBox->setChecked( mRefFont.kerning() );
1434 blockFontChangeSignals(
false );
1442void QgsTextFormatWidget::blockFontChangeSignals(
bool blk )
1444 mFontFamilyCmbBx->blockSignals( blk );
1445 mFontStyleComboBox->blockSignals( blk );
1446 mFontCapitalsComboBox->blockSignals( blk );
1447 mFontUnderlineBtn->blockSignals( blk );
1448 mFontStrikethroughBtn->blockSignals( blk );
1449 mFontWordSpacingSpinBox->blockSignals( blk );
1450 mFontLetterSpacingSpinBox->blockSignals( blk );
1451 mKerningCheckBox->blockSignals( blk );
1466 lblFontPreview->setFormat(
format() );
1469void QgsTextFormatWidget::scrollPreview()
1471 scrollArea_mPreview->ensureVisible( 0, 0, 0, 0 );
1476 mPreviewBackgroundColor = color;
1478 scrollArea_mPreview->widget()->setStyleSheet( QStringLiteral(
"background: rgb(%1, %2, %3);" ).arg( QString::number( color.red() ), QString::number( color.green() ), QString::number( color.blue() ) ) );
1481void QgsTextFormatWidget::changeBufferColor(
const QColor &color )
1490 bool showLineFrame =
false;
1491 bool showCentroidFrame =
false;
1492 bool showQuadrantFrame =
false;
1493 bool showFixedQuadrantFrame =
false;
1494 bool showPlacementPriorityFrame =
false;
1495 bool showOffsetTypeFrame =
false;
1496 bool showOffsetFrame =
false;
1497 bool showDistanceFrame =
false;
1498 bool showMaximumDistanceFrame =
false;
1499 bool showPrioritizationFrame =
false;
1500 bool showRotationFrame =
false;
1501 bool showMaxCharAngleFrame =
false;
1506 bool enableMultiLinesFrame =
true;
1512 showDistanceFrame =
true;
1513 showMaximumDistanceFrame =
true;
1521 showQuadrantFrame =
true;
1522 showFixedQuadrantFrame =
true;
1523 showOffsetFrame =
true;
1524 showRotationFrame =
true;
1528 showDistanceFrame =
true;
1529 showMaximumDistanceFrame =
true;
1530 showPlacementPriorityFrame =
true;
1531 showPrioritizationFrame =
true;
1532 showOffsetTypeFrame =
true;
1539 showLineFrame =
true;
1540 showDistanceFrame =
true;
1543 const bool offline = chkLineAbove->isChecked() || chkLineBelow->isChecked();
1544 chkLineOrientationDependent->setEnabled( offline );
1545 mPlacementDistanceFrame->setEnabled( offline );
1549 showMaxCharAngleFrame = isCurved;
1551 enableMultiLinesFrame = !isCurved;
1556 showDistanceFrame =
true;
1559 mPlacementLineFrame->setVisible( showLineFrame );
1560 mPlacementPolygonFrame->setVisible( showPolygonPlacementOptions );
1561 mPlacementCentroidFrame->setVisible( showCentroidFrame );
1562 mPlacementQuadrantFrame->setVisible( showQuadrantFrame );
1563 mPlacementFixedQuadrantFrame->setVisible( showFixedQuadrantFrame );
1564 mPlacementCartographicFrame->setVisible( showPlacementPriorityFrame );
1565 mPlacementOffsetFrame->setVisible( showOffsetFrame );
1566 mPlacementDistanceFrame->setVisible( showDistanceFrame );
1567 mPlacementMaximumDistanceFrame->setVisible( showMaximumDistanceFrame );
1568 mPlacementPrioritizationFrame->setVisible( showPrioritizationFrame );
1569 mPlacementOffsetTypeFrame->setVisible( showOffsetTypeFrame );
1570 mPlacementRotationFrame->setVisible( showRotationFrame );
1574 mPlacementMaxCharAngleFrame->setVisible( showMaxCharAngleFrame );
1576 mMultiLinesFrame->setEnabled( enableMultiLinesFrame );
1580 switch ( currentPlacement )
1584 helperText = tr(
"Arranges label candidates in a clockwise circle around the feature, preferring placements to the top-right of the feature." );
1586 helperText = tr(
"Arranges label candidates in a cluster around the feature's centroid, preferring placements directly over the centroid." );
1590 helperText = tr(
"Arranges label candidates directly over the feature or at a preset offset from the feature." );
1592 helperText = tr(
"Arranges label candidates directly over the feature's centroid, or at a preset offset from the centroid." );
1596 helperText = tr(
"Arranges label candidates parallel to a generalised line representing the feature. Placements which fall over straighter portions of the line are preferred." );
1598 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." );
1602 helperText = tr(
"Arranges candidates following the curvature of a line feature. Placements which fall over straighter portions of the line are preferred." );
1606 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." );
1608 helperText = tr(
"Label candidates are arranged horizontally along the length of the feature." );
1612 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." );
1616 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." );
1620 helperText = tr(
"Arranges candidates following the curvature of the feature's perimeter. Placements which fall over straighter portions of the perimeter are preferred." );
1624 helperText = tr(
"Label candidates are placed outside of the features, preferring placements which give greatest visual association between the label and the feature." );
1627 mPlacementModeDescriptionLabel->setText( QStringLiteral(
"<i>%1</i>" ).arg( helperText ) );
1630void QgsTextFormatWidget::populateFontCapitalsComboBox()
1635#if defined( HAS_KDE_QT5_SMALL_CAPS_FIX ) || QT_VERSION >= QT_VERSION_CHECK( 6, 3, 0 )
1645void QgsTextFormatWidget::populateFontStyleComboBox()
1647 mFontStyleComboBox->clear();
1648 const QStringList styles = mFontDB.styles( mRefFont.family() );
1649 const auto constStyles = styles;
1650 for (
const QString &style : constStyles )
1652 mFontStyleComboBox->addItem( style );
1655 QString targetStyle = mFontDB.styleString( mRefFont );
1656 if ( !styles.contains( targetStyle ) )
1659 targetStyle = QFontInfo( f ).styleName();
1660 mRefFont.setStyleName( targetStyle );
1663 const int stylIndx = mFontStyleComboBox->findText( targetStyle );
1664 if ( stylIndx > -1 )
1669 mFontStyleComboBox->setCurrentIndex( curIndx );
1672void QgsTextFormatWidget::mFontSizeSpinBox_valueChanged(
double d )
1674 mRefFont.setPointSizeF( d );
1675 updateFont( mRefFont );
1678void QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged(
const QFont &f )
1681 updateFont( mRefFont );
1684void QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged(
const QString &text )
1687 updateFont( mRefFont );
1690void QgsTextFormatWidget::mFontUnderlineBtn_toggled(
bool ckd )
1692 mRefFont.setUnderline( ckd );
1693 updateFont( mRefFont );
1696void QgsTextFormatWidget::mFontStrikethroughBtn_toggled(
bool ckd )
1698 mRefFont.setStrikeOut( ckd );
1699 updateFont( mRefFont );
1702void QgsTextFormatWidget::kerningToggled(
bool checked )
1704 mRefFont.setKerning( checked );
1705 updateFont( mRefFont );
1708void QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged(
double spacing )
1710 mRefFont.setWordSpacing( spacing );
1711 updateFont( mRefFont );
1714void QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged(
double spacing )
1716 mRefFont.setLetterSpacing( QFont::AbsoluteSpacing, spacing );
1717 updateFont( mRefFont );
1720void QgsTextFormatWidget::mFontSizeUnitWidget_changed()
1725 mFontLimitPixelChkBox->setChecked(
false );
1731 mFontLimitPixelChkBox->setChecked(
true );
1733 updateFont( mRefFont );
1736void QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged(
int px )
1739 mFontMaxPixelSpinBox->setMinimum( px );
1740 mFontMaxPixelSpinBox->update();
1743void QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged(
int px )
1746 if ( px < mFontMinPixelSpinBox->value() )
1748 mFontMaxPixelSpinBox->blockSignals(
true );
1749 mFontMaxPixelSpinBox->setValue( mFontMinPixelSpinBox->value() );
1750 mFontMaxPixelSpinBox->blockSignals(
false );
1752 mFontMaxPixelSpinBox->setMinimum( mFontMinPixelSpinBox->value() );
1755void QgsTextFormatWidget::mBufferUnitWidget_changed()
1757 updateFont( mRefFont );
1760void QgsTextFormatWidget::mMaskBufferUnitWidget_changed()
1762 updateFont( mRefFont );
1765void QgsTextFormatWidget::mCoordXDDBtn_changed()
1767 updateDataDefinedAlignment();
1770void QgsTextFormatWidget::mCoordXDDBtn_activated(
bool isActive )
1775 mCoordPointDDBtn->setActive(
false );
1778void QgsTextFormatWidget::mCoordYDDBtn_changed()
1780 updateDataDefinedAlignment();
1783void QgsTextFormatWidget::mCoordYDDBtn_activated(
bool isActive )
1788 mCoordPointDDBtn->setActive(
false );
1791void QgsTextFormatWidget::mCoordPointDDBtn_changed()
1793 updateDataDefinedAlignment();
1796void QgsTextFormatWidget::mCoordPointDDBtn_activated(
bool isActive )
1801 mCoordXDDBtn->setActive(
false );
1802 mCoordYDDBtn->setActive(
false );
1805void QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged(
int )
1813 showBackgroundRadius( isRect );
1815 mShapeSVGPathFrame->setVisible( isSVG );
1816 mBackgroundMarkerSymbolButton->setVisible( isMarker );
1817 mBackgroundFillSymbolButton->setVisible( !isSVG && !isMarker );
1821 mShapeSizeYLabel->setVisible( !isSVG && !isMarker );
1822 mShapeSizeYSpnBx->setVisible( !isSVG && !isMarker );
1823 mShapeSizeYDDBtn->setVisible( !isSVG && !isMarker );
1824 mShapeSizeXLabel->setText( tr(
"Size%1" ).arg( !isSVG && !isMarker ? tr(
" X" ) : QString() ) );
1827 mShapeFillColorBtn->setAllowOpacity( !isSVG );
1828 mShapeFillColorBtn->setButtonBackground();
1829 mShapeStrokeColorBtn->setAllowOpacity( !isSVG );
1830 mShapeStrokeColorBtn->setButtonBackground();
1833 mShapeFillColorLabel->setVisible( isSVG );
1834 mShapeFillColorLabel->setEnabled( isSVG );
1835 mShapeFillColorBtn->setVisible( isSVG );
1836 mShapeFillColorBtn->setEnabled( isSVG );
1837 mShapeFillColorDDBtn->setVisible( isSVG );
1838 mShapeFillColorDDBtn->setEnabled( isSVG );
1839 mShapeStrokeColorLabel->setVisible( isSVG );
1840 mShapeStrokeColorLabel->setEnabled( isSVG );
1841 mShapeStrokeColorBtn->setVisible( isSVG );
1842 mShapeStrokeColorBtn->setEnabled( isSVG );
1843 mShapeStrokeColorDDBtn->setVisible( isSVG );
1844 mShapeStrokeColorDDBtn->setEnabled( isSVG );
1845 mShapeStrokeWidthLabel->setVisible( isSVG );
1846 mShapeStrokeWidthLabel->setEnabled( isSVG );
1847 mShapeStrokeWidthSpnBx->setVisible( isSVG );
1848 mShapeStrokeWidthSpnBx->setEnabled( isSVG );
1849 mShapeStrokeWidthDDBtn->setVisible( isSVG );
1850 mShapeStrokeWidthDDBtn->setEnabled( isSVG );
1853 mShapeSVGParamsBtn->setVisible( isSVG );
1856 updateSvgWidgets( mShapeSVGPathLineEdit->text() );
1860 mShapeSVGUnitsLabel->setVisible( isSVG );
1861 mShapeStrokeWidthUnitWidget->setVisible(
false );
1862 mShapeStrokeUnitsDDBtn->setVisible(
false );
1863 mShapeStrokeUnitsDDBtn->setEnabled(
false );
1865 updateAvailableShadowPositions();
1868void QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged(
const QString &text )
1870 updateSvgWidgets( text );
1875 const int numOptionsChecked = ( chkLineAbove->isChecked() ? 1 : 0 ) + ( chkLineBelow->isChecked() ? 1 : 0 ) + ( chkLineOn->isChecked() ? 1 : 0 );
1877 if ( numOptionsChecked == 1 )
1880 chkLineAbove->setEnabled( !chkLineAbove->isChecked() );
1881 chkLineBelow->setEnabled( !chkLineBelow->isChecked() );
1882 chkLineOn->setEnabled( !chkLineOn->isChecked() );
1886 chkLineAbove->setEnabled(
true );
1887 chkLineBelow->setEnabled(
true );
1888 chkLineOn->setEnabled(
true );
1898void QgsTextFormatWidget::previewScaleChanged(
double scale )
1900 lblFontPreview->setScale( scale );
1903void QgsTextFormatWidget::updateSvgWidgets(
const QString &svgPath )
1905 if ( mShapeSVGPathLineEdit->text() != svgPath )
1907 mShapeSVGPathLineEdit->setText( svgPath );
1910 QString resolvedPath;
1911 bool validSVG =
true;
1912 if ( !svgPath.startsWith( QLatin1String(
"base64:" ), Qt::CaseInsensitive ) )
1915 validSVG = QFileInfo::exists( resolvedPath );
1919 resolvedPath = svgPath;
1924 mShapeSVGPathLineEdit->setStyleSheet( !validSVG ? QStringLiteral(
"QLineEdit{ color: rgb(225, 0, 0); }" ) : QString() );
1925 mShapeSVGPathLineEdit->setToolTip( !validSVG ? tr(
"File not found" ) : resolvedPath );
1927 QColor fill, stroke;
1928 double strokeWidth = 0.0;
1929 bool fillParam =
false, strokeParam =
false, strokeWidthParam =
false;
1935 mShapeSVGParamsBtn->setEnabled( validSVG && ( fillParam || strokeParam || strokeWidthParam ) );
1937 mShapeFillColorLabel->setEnabled( validSVG && fillParam );
1938 mShapeFillColorBtn->setEnabled( validSVG && fillParam );
1939 mShapeFillColorDDBtn->setEnabled( validSVG && fillParam );
1940 if ( mLoadSvgParams && validSVG && fillParam )
1941 mShapeFillColorBtn->setColor( fill );
1943 mShapeStrokeColorLabel->setEnabled( validSVG && strokeParam );
1944 mShapeStrokeColorBtn->setEnabled( validSVG && strokeParam );
1945 mShapeStrokeColorDDBtn->setEnabled( validSVG && strokeParam );
1946 if ( mLoadSvgParams && validSVG && strokeParam )
1947 mShapeStrokeColorBtn->setColor( stroke );
1949 mShapeStrokeWidthLabel->setEnabled( validSVG && strokeWidthParam );
1950 mShapeStrokeWidthSpnBx->setEnabled( validSVG && strokeWidthParam );
1951 mShapeStrokeWidthDDBtn->setEnabled( validSVG && strokeWidthParam );
1952 if ( mLoadSvgParams && validSVG && strokeWidthParam )
1953 mShapeStrokeWidthSpnBx->setValue( strokeWidth );
1959 mShapeSVGUnitsLabel->setEnabled( validSVG && strokeWidthParam );
1962void QgsTextFormatWidget::updateAvailableShadowPositions()
1964 if ( mShadowUnderCmbBx->count() == 0
1970 mShadowUnderCmbBx->clear();
1978 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( currentPlacement ) );
1979 if ( mShadowUnderCmbBx->currentIndex() == -1 )
1980 mShadowUnderCmbBx->setCurrentIndex( 0 );
1984void QgsTextFormatWidget::updateProperty()
1992void QgsTextFormatWidget::createAuxiliaryField()
2024 property.setActive(
true );
2033void QgsTextFormatWidget::updateShapeFrameStatus()
2035 mShapeFrame->setEnabled( mShapeDrawDDBtn->isActive() || mShapeDrawChkBx->isChecked() );
2038void QgsTextFormatWidget::updateBufferFrameStatus()
2040 mBufferFrame->setEnabled( mBufferDrawDDBtn->isActive() || mBufferDrawChkBx->isChecked() );
2043void QgsTextFormatWidget::updateShadowFrameStatus()
2045 mShadowFrame->setEnabled( mShadowDrawDDBtn->isActive() || mShadowDrawChkBx->isChecked() );
2048void QgsTextFormatWidget::updateCalloutFrameStatus()
2050 mCalloutFrame->setEnabled( mCalloutDrawDDBtn->isActive() || mCalloutsDrawCheckBox->isChecked() );
2053void QgsTextFormatWidget::updateDataDefinedAlignment()
2056 mCoordAlignmentFrame->setEnabled( ( mCoordXDDBtn->isActive() && mCoordYDDBtn->isActive() ) || mCoordPointDDBtn->isActive() );
2059void QgsTextFormatWidget::overlapModeChanged()
2061 QString description;
2065 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.)" );
2068 description = tr(
"If a label cannot otherwise be placed for a feature then an overlapping label is permitted." );
2071 description = tr(
"Labels from this layer may freely overlap other labels or label obstacles without penalty." );
2075 mOverlapModeDescriptionLabel->setText( QStringLiteral(
"<i>%1</i>" ).arg( description ) );
2080 if ( name.isEmpty() )
2123 saveDlg.
setDefaultTags( mTextFormatsListWidget->currentTagFilter() );
2124 if ( !saveDlg.exec() )
2127 if ( saveDlg.
name().isEmpty() )
2137 const int res = QMessageBox::warning(
this, tr(
"Save Text Format" ), tr(
"Format with name '%1' already exists. Overwrite?" ).arg( saveDlg.
name() ), QMessageBox::Yes | QMessageBox::No );
2138 if ( res != QMessageBox::Yes )
2145 const QStringList symbolTags = saveDlg.
tags().split(
',' );
2152void QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked()
2155 svgDlg.setWindowTitle( tr(
"Select SVG file" ) );
2156 svgDlg.svgSelector()->setSvgPath( mShapeSVGPathLineEdit->text().trimmed() );
2158 if ( svgDlg.exec() == QDialog::Accepted )
2160 const QString svgPath = svgDlg.svgSelector()->currentSvgPath();
2161 if ( !svgPath.isEmpty() )
2163 mShapeSVGPathLineEdit->setText( svgPath );
2169void QgsTextFormatWidget::mShapeSVGParamsBtn_clicked()
2171 const QString svgPath = mShapeSVGPathLineEdit->text();
2172 mLoadSvgParams =
true;
2173 updateSvgWidgets( svgPath );
2174 mLoadSvgParams =
false;
2177void QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged(
int index )
2183void QgsTextFormatWidget::mPreviewTextEdit_textChanged(
const QString &text )
2185 lblFontPreview->setText( text );
2189void QgsTextFormatWidget::mPreviewTextBtn_clicked()
2191 mPreviewTextEdit->setText( QStringLiteral(
"Lorem Ipsum" ) );
2195void QgsTextFormatWidget::mPreviewBackgroundBtn_colorChanged(
const QColor &color )
2200void QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked()
2202 bool gotChar =
false;
2204 const QChar initial = !mDirectSymbLeftLineEdit->text().isEmpty() ? mDirectSymbLeftLineEdit->text().at( 0 ) : QChar();
2205 const QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
2210 if ( !dirSymb.isNull() )
2211 mDirectSymbLeftLineEdit->setText( QString( dirSymb ) );
2214void QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked()
2216 bool gotChar =
false;
2217 const QChar initial = !mDirectSymbRightLineEdit->text().isEmpty() ? mDirectSymbRightLineEdit->text().at( 0 ) : QChar();
2218 const QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
2223 if ( !dirSymb.isNull() )
2224 mDirectSymbRightLineEdit->setText( QString( dirSymb ) );
2227void QgsTextFormatWidget::chkLineOrientationDependent_toggled(
bool active )
2231 chkLineAbove->setText( tr(
"Left of line" ) );
2232 chkLineBelow->setText( tr(
"Right of line" ) );
2236 chkLineAbove->setText( tr(
"Above line" ) );
2237 chkLineBelow->setText( tr(
"Below line" ) );
2242void QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked()
2257 if ( dlg.exec() == QDialog::Accepted )
2264void QgsTextFormatWidget::configureTabStops()
2272 widget->
setUnit( mTabDistanceUnitWidget->unit() );
2284 dlg.setUnit( mTabDistanceUnitWidget->unit() );
2285 if ( dlg.exec() == QDialog::Accepted )
2294void QgsTextFormatWidget::showBackgroundRadius(
bool show )
2296 mShapeRadiusLabel->setVisible( show );
2297 mShapeRadiusXDbSpnBx->setVisible( show );
2299 mShapeRadiusYDbSpnBx->setVisible( show );
2301 mShapeRadiusUnitWidget->setVisible( show );
2303 mShapeRadiusDDBtn->setVisible( show );
2304 mShapeRadiusUnitsDDBtn->setVisible( show );
2310 return *lExpressionContext;
2337 if ( mGeometryGeneratorGroupBox->isChecked() )
2351 : QDialog( parent, fl )
2353 setWindowTitle( tr(
"Text Settings" ) );
2356 mFormatWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
2358 QVBoxLayout *layout =
new QVBoxLayout(
this );
2359 layout->addWidget( mFormatWidget );
2361 mButtonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, Qt::Horizontal,
this );
2362 layout->addWidget( mButtonBox );
2364 setLayout( layout );
2367 connect( mButtonBox->button( QDialogButtonBox::Ok ), &QAbstractButton::clicked,
this, &QDialog::accept );
2368 connect( mButtonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked,
this, &QDialog::reject );
2369 connect( mButtonBox->button( QDialogButtonBox::Help ), &QAbstractButton::clicked,
this, &QgsTextFormatDialog::showHelp );
2374 return mFormatWidget->
format();
2377void QgsTextFormatDialog::showHelp()
2379 QgsHelp::openHelp( QStringLiteral(
"style_library/label_settings.html#formatting-the-label-text" ) );
2395 mFormatWidget = qobject_cast<QgsTextFormatWidget *>(
widget() );
2397 if ( !mBlockSignals )
2404 return mFormatWidget->
format();
2409 mBlockSignals =
true;
2411 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.
A dialog to enter a custom dash space pattern for lines.
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.
QListWidgetItem * mMaskItem
Mask widget item.
QButtonGroup * mUpsidedownBtnGrp
Upside down labels button group.
int mMinPixelLimit
Pixel size font limit.
QListWidgetItem * mBackgroundItem
Background widget item.
void setDockMode(bool enabled)
Sets whether the widget should be shown in a compact dock mode.
QgsMapCanvas * mMapCanvas
Associated map canvas.
void setPropertyOverrideButtonsVisible(bool visible)
Toggles whether data defined buttons should be shown in the widget.
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.
QListWidgetItem * mFormattingItem
Formatting widget item.
~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.
QListWidgetItem * mTextItem
Text widget item.
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.
QListWidgetItem * mShadowItem
Shadow widget item.
QList< QgsTextFormat::Tab > mTabPositions
Tab positions.
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.
QListWidgetItem * mBufferItem
Buffer widget item.
void updateLinePlacementOptions()
Updates line placement options to reflect current state of widget.
QListWidgetItem * mCalloutItem
Callout widget item.
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...
QListWidgetItem * mRenderingItem
Rendering widget item.
void updatePreview()
Updates the text preview.
QListWidgetItem * mPlacementItem
Placement widget item.
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.
QList< QgsTextFormat::Tab > tabPositions() const
Returns the list of tab positions for tab stops.
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.
void setTabPositions(const QList< QgsTextFormat::Tab > &positions)
Sets the list of tab positions for tab stops.
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.
QSize iconSize(bool dockableToolbar)
Returns the user-preferred size of a window's toolbar icons.
int scaleIconSize(int standardSize)
Scales an icon size to compensate for display pixel density, making the icon size hi-dpi friendly,...
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.