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#if ( GEOS_VERSION_MAJOR == 3 && GEOS_VERSION_MINOR < 10 )
119 mDuplicatesStackedWidget->setCurrentWidget( mDuplicatesNotAvailableWidget );
120 mLabelSpacingStackedWidget->setCurrentWidget( mLabelSpacingNotAvailableWidget );
123 mLabelingOptionsListWidget->addItem(
mTextItem );
125 mLabelingOptionsListWidget->addItem(
mBufferItem );
126 mLabelingOptionsListWidget->addItem(
mMaskItem );
128 mLabelingOptionsListWidget->addItem(
mShadowItem );
133 QObject::connect( mOptionsTab, &QTabWidget::currentChanged,
this, [
this](
int index ) {
134 if ( index == mOptionsTab->indexOf( textTab ) )
135 mLabelStackedWidget->setCurrentWidget( mLabelPage_Text );
136 else if ( index == mOptionsTab->indexOf( formattingTab ) )
137 mLabelStackedWidget->setCurrentWidget( mLabelPage_Formatting );
138 else if ( index == mOptionsTab->indexOf( maskTab ) )
139 mLabelStackedWidget->setCurrentWidget( mLabelPage_Mask );
140 else if ( index == mOptionsTab->indexOf( bufferTab ) )
141 mLabelStackedWidget->setCurrentWidget( mLabelPage_Buffer );
142 else if ( index == mOptionsTab->indexOf( backgroundTab ) )
143 mLabelStackedWidget->setCurrentWidget( mLabelPage_Background );
144 else if ( index == mOptionsTab->indexOf( shadowTab ) )
145 mLabelStackedWidget->setCurrentWidget( mLabelPage_Shadow );
146 else if ( index == mOptionsTab->indexOf( calloutsTab ) )
147 mLabelStackedWidget->setCurrentWidget( mLabelPage_Callouts );
148 else if ( index == mOptionsTab->indexOf( placementTab ) )
149 mLabelStackedWidget->setCurrentWidget( mLabelPage_Placement );
150 else if ( index == mOptionsTab->indexOf( renderingTab ) )
151 mLabelStackedWidget->setCurrentWidget( mLabelPage_Rendering );
154 QObject::connect( mLabelingOptionsListWidget, &QListWidget::currentRowChanged,
this, [
this](
int ) {
155 QListWidgetItem *currentItem = mLabelingOptionsListWidget->currentItem();
159 mLabelStackedWidget->setCurrentWidget( mLabelPage_Text );
161 mLabelStackedWidget->setCurrentWidget( mLabelPage_Formatting );
163 mLabelStackedWidget->setCurrentWidget( mLabelPage_Mask );
165 mLabelStackedWidget->setCurrentWidget( mLabelPage_Buffer );
167 mLabelStackedWidget->setCurrentWidget( mLabelPage_Background );
169 mLabelStackedWidget->setCurrentWidget( mLabelPage_Shadow );
171 mLabelStackedWidget->setCurrentWidget( mLabelPage_Callouts );
173 mLabelStackedWidget->setCurrentWidget( mLabelPage_Placement );
175 mLabelStackedWidget->setCurrentWidget( mLabelPage_Rendering );
178 QObject::connect( mLabelingOptionsListWidget, &QListWidget::currentRowChanged, mLabelStackedWidget, &QStackedWidget::setCurrentIndex );
180 connect( mShapeSVGPathLineEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged );
181 connect( mFontSizeSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontSizeSpinBox_valueChanged );
182 connect( mFontFamilyCmbBx, &QFontComboBox::currentFontChanged,
this, &QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged );
183 connect( mFontStyleComboBox, &QComboBox::currentTextChanged,
this, &QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged );
184 connect( mFontUnderlineBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontUnderlineBtn_toggled );
185 connect( mFontStrikethroughBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontStrikethroughBtn_toggled );
186 connect( mFontWordSpacingSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged );
187 connect( mFontLetterSpacingSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged );
189 connect( mFontMinPixelSpinBox,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged );
190 connect( mFontMaxPixelSpinBox,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged );
199 connect( mShapeTypeCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged );
200 connect( mShapeRotationCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged );
201 connect( mShapeSVGParamsBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGParamsBtn_clicked );
202 connect( mShapeSVGSelectorBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked );
203 connect( mPreviewTextEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mPreviewTextEdit_textChanged );
204 connect( mPreviewTextBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mPreviewTextBtn_clicked );
206 connect( mDirectSymbLeftToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked );
207 connect( mDirectSymbRightToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked );
208 connect( chkLineOrientationDependent, &QCheckBox::toggled,
this, &QgsTextFormatWidget::chkLineOrientationDependent_toggled );
209 connect( mToolButtonConfigureSubstitutes, &QToolButton::clicked,
this, &QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked );
210 connect( mKerningCheckBox, &QCheckBox::toggled,
this, &QgsTextFormatWidget::kerningToggled );
211 connect( mComboOverlapHandling, qOverload<int>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::overlapModeChanged );
212 connect( mTabStopsButton, &QToolButton::clicked,
this, &QgsTextFormatWidget::configureTabStops );
215 mOptionsTab->setIconSize( QSize( iconSize, iconSize ) );
216 mLabelingOptionsListWidget->setIconSize( QSize( iconSize, iconSize ) );
222 mPreviewTextBtn->setIconSize( QSize( iconSize16, iconSize16 ) );
223 mPointOffsetAboveLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
224 mPointOffsetAbove->setIconSize( QSize( iconSize32, iconSize18 ) );
225 mPointOffsetAboveRight->setIconSize( QSize( iconSize32, iconSize18 ) );
226 mPointOffsetLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
227 mPointOffsetOver->setIconSize( QSize( iconSize32, iconSize18 ) );
228 mPointOffsetRight->setIconSize( QSize( iconSize32, iconSize18 ) );
229 mPointOffsetBelowLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
230 mPointOffsetBelow->setIconSize( QSize( iconSize32, iconSize18 ) );
231 mPointOffsetBelowRight->setIconSize( QSize( iconSize32, iconSize18 ) );
232 mLabelMinScale->setPixmap(
QgsApplication::getThemeIcon( QStringLiteral(
"/mActionZoomOut.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
233 mLabelMaxScale->setPixmap(
QgsApplication::getThemeIcon( QStringLiteral(
"/mActionZoomIn.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
236 mFontUnderlineBtn->setMinimumSize( buttonSize, buttonSize );
237 mFontUnderlineBtn->setMaximumSize( buttonSize, buttonSize );
238 mFontStrikethroughBtn->setMinimumSize( buttonSize, buttonSize );
239 mFontStrikethroughBtn->setMaximumSize( buttonSize, buttonSize );
240 mFontBoldBtn->setMinimumSize( buttonSize, buttonSize );
241 mFontBoldBtn->setMaximumSize( buttonSize, buttonSize );
242 mFontItalicBtn->setMinimumSize( buttonSize, buttonSize );
243 mFontItalicBtn->setMaximumSize( buttonSize, buttonSize );
245 mPreviewScaleComboBox->setMapCanvas(
mMapCanvas );
246 mPreviewScaleComboBox->setShowCurrentScaleButton(
true );
249 const auto unitWidgets = findChildren<QgsUnitSelectionWidget *>();
271 mFontLineHeightSpinBox->setClearValue( 100.0 );
272 mShapeRotationDblSpnBx->setClearValue( 0.0 );
273 mShapeOffsetXSpnBx->setClearValue( 0.0 );
274 mShapeOffsetYSpnBx->setClearValue( 0.0 );
275 mPointOffsetXSpinBox->setClearValue( 0.0 );
276 mPointOffsetYSpinBox->setClearValue( 0.0 );
277 mPointAngleSpinBox->setClearValue( 0.0 );
278 mFontLetterSpacingSpinBox->setClearValue( 0.0 );
279 mFontWordSpacingSpinBox->setClearValue( 0.0 );
280 mZIndexSpinBox->setClearValue( 0.0 );
281 mLineDistanceSpnBx->setClearValue( 0.0 );
282 mMaximumDistanceSpnBx->setMinimum( 0 );
283 mMaximumDistanceSpnBx->setClearValue( 0.0, tr(
"Not set" ) );
284 mSpinStretch->setClearValue( 100 );
285 mTabStopDistanceSpin->setMinimum( 0 );
289 mFontLineHeightSpinBox->setClearValue( 100.0 );
291 mFontLineHeightSpinBox->setClearValue( 10.0 );
311 updateAvailableShadowPositions();
314 mBackgroundMarkerSymbolButton->setDialogTitle( tr(
"Background Symbol" ) );
315 mBackgroundMarkerSymbolButton->registerExpressionContextGenerator(
this );
316 mBackgroundMarkerSymbolButton->setMapCanvas(
mMapCanvas );
318 mBackgroundFillSymbolButton->setDialogTitle( tr(
"Background Symbol" ) );
319 mBackgroundFillSymbolButton->registerExpressionContextGenerator(
this );
320 mBackgroundFillSymbolButton->setMapCanvas(
mMapCanvas );
324 mRefFont = lblFontPreview->font();
327 connect( mShadowOffsetAngleDial, &QAbstractSlider::valueChanged, mShadowOffsetAngleSpnBx, &QSpinBox::setValue );
328 connect( mShadowOffsetAngleSpnBx,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ), mShadowOffsetAngleDial, &QAbstractSlider::setValue );
329 connect( mLimitLabelChkBox, &QAbstractButton::toggled, mLimitLabelSpinBox, &QWidget::setEnabled );
330 connect( mCheckBoxSubstituteText, &QAbstractButton::toggled, mToolButtonConfigureSubstitutes, &QWidget::setEnabled );
340 populateFontCapitalsComboBox();
343 mPreviewBackgroundBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
344 mPreviewBackgroundBtn->setContext( QStringLiteral(
"labeling" ) );
345 mPreviewBackgroundBtn->setColor( QColor( 255, 255, 255 ) );
346 btnTextColor->setColorDialogTitle( tr(
"Select Text Color" ) );
347 btnTextColor->setContext( QStringLiteral(
"labeling" ) );
348 btnTextColor->setDefaultColor( Qt::black );
349 btnBufferColor->setColorDialogTitle( tr(
"Select Buffer Color" ) );
350 btnBufferColor->setContext( QStringLiteral(
"labeling" ) );
351 btnBufferColor->setDefaultColor( Qt::white );
352 mShapeStrokeColorBtn->setColorDialogTitle( tr(
"Select Stroke Color" ) );
353 mShapeStrokeColorBtn->setContext( QStringLiteral(
"labeling" ) );
354 mShapeFillColorBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
355 mShapeFillColorBtn->setContext( QStringLiteral(
"labeling" ) );
356 mShadowColorBtn->setColorDialogTitle( tr(
"Select Shadow Color" ) );
357 mShadowColorBtn->setContext( QStringLiteral(
"labeling" ) );
358 mShadowColorBtn->setDefaultColor( Qt::black );
360 mFontColorDDBtn->registerLinkedWidget( btnTextColor );
361 mBufferColorDDBtn->registerLinkedWidget( btnBufferColor );
362 mShapeStrokeColorDDBtn->registerLinkedWidget( mShapeStrokeColorBtn );
363 mShapeFillColorDDBtn->registerLinkedWidget( mShapeFillColorBtn );
364 mShadowColorDDBtn->registerLinkedWidget( mShadowColorBtn );
405 const auto groupBoxes = findChildren<QgsCollapsibleGroupBox *>();
408 grpbox->setSettingGroup( QStringLiteral(
"mAdvLabelingDlg" ) );
414 mLabelingOptionsListWidget->setAttribute( Qt::WA_MacShowFocusRect,
false );
419 QSizePolicy policy( mLabelingOptionsListFrame->sizePolicy() );
420 policy.setHorizontalStretch( 0 );
421 mLabelingOptionsListFrame->setSizePolicy( policy );
422 if ( !settings.
contains( QStringLiteral(
"/Windows/Labeling/OptionsSplitState" ) ) )
425 QList<int> splitsizes;
427 mLabelingOptionsSplitter->setSizes( splitsizes );
431 connect( mLabelStackedWidget, &QStackedWidget::currentChanged,
this, &QgsTextFormatWidget::optionsStackedWidget_CurrentChanged );
434 mFontPreviewSplitter->restoreState( settings.
value( QStringLiteral(
"Windows/Labeling/FontPreviewSplitState" ) ).toByteArray() );
435 mLabelingOptionsSplitter->restoreState( settings.
value( QStringLiteral(
"Windows/Labeling/OptionsSplitState" ) ).toByteArray() );
437 mLabelingOptionsListWidget->setCurrentRow( settings.
value( QStringLiteral(
"Windows/Labeling/Tab" ), 0 ).toInt() );
441 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
445 mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
449 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
451 overlapModeChanged();
453#if defined( HAS_KDE_QT5_FONT_STRETCH_FIX ) || ( QT_VERSION >= QT_VERSION_CHECK( 6, 3, 0 ) )
456 mLabelStretch->hide();
457 mSpinStretch->hide();
458 mFontStretchDDBtn->hide();
463 QList<QWidget *> widgets;
464 widgets << btnBufferColor
466 << chkLabelPerFeaturePart
470 << chkLineOrientationDependent
472 << chkPreserveRotation
474 << comboBufferBlendMode
476 << mBufferJoinStyleComboBox
477 << mBufferTranspFillChbx
478 << mBufferOpacityWidget
479 << mCentroidInsideCheckBox
481 << mCoordRotationUnitComboBox
483 << mDirectSymbLeftLineEdit
484 << mDirectSymbRevChkBx
485 << mDirectSymbRightLineEdit
486 << mFitInsidePolygonCheckBox
487 << mFontCapitalsComboBox
488 << mFontLetterSpacingSpinBox
489 << mFontLimitPixelChkBox
490 << mFontLineHeightSpinBox
491 << mLineHeightUnitWidget
492 << mFontMaxPixelSpinBox
493 << mFontMinPixelSpinBox
494 << mFontMultiLineAlignComboBox
496 << mFontStyleComboBox
497 << mTextOrientationComboBox
498 << mTextOpacityWidget
500 << mFontWordSpacingSpinBox
502 << mFormatNumDecimalsSpnBx
503 << mFormatNumPlusSignChkBx
505 << mLimitLabelSpinBox
506 << mLineDistanceSpnBx
507 << mLineDistanceUnitWidget
508 << mMaximumDistanceSpnBx
509 << mMaximumDistanceUnitWidget
510 << mMaxCharAngleInDSpinBox
511 << mMaxCharAngleOutDSpinBox
513 << mOffsetTypeComboBox
514 << mCheckAllowDegradedPlacement
515 << mComboOverlapHandling
516 << mPointAngleSpinBox
517 << mPointOffsetUnitWidget
518 << mPointOffsetXSpinBox
519 << mPointOffsetYSpinBox
520 << mPreviewBackgroundBtn
523 << mRepeatDistanceSpinBox
524 << mRepeatDistanceUnitWidget
525 << mOverrunDistanceSpinBox
526 << mOverrunDistanceUnitWidget
527 << mLabelMarginSpinBox
528 << mLabelMarginUnitWidget
529 << mScaleBasedVisibilityChkBx
535 << mShadowOffsetAngleSpnBx
536 << mShadowOffsetGlobalChkBx
537 << mShadowOffsetSpnBx
538 << mShadowOffsetUnitWidget
539 << mShadowRadiusAlphaChkBx
540 << mShadowRadiusDblSpnBx
541 << mShadowRadiusUnitWidget
543 << mShadowOpacityWidget
546 << mShapeStrokeColorBtn
547 << mShapeStrokeWidthSpnBx
548 << mShapeStrokeWidthUnitWidget
550 << mShapeFillColorBtn
551 << mShapeOffsetXSpnBx
552 << mShapeOffsetYSpnBx
553 << mShapeOffsetUnitWidget
554 << mShapeRadiusXDbSpnBx
555 << mShapeRadiusYDbSpnBx
556 << mShapeRotationCmbBx
557 << mShapeRotationDblSpnBx
558 << mShapeRadiusUnitWidget
559 << mShapeSVGPathLineEdit
561 << mShapeSizeUnitWidget
564 << mBackgroundOpacityWidget
569 << mAutoWrapLengthSpinBox
570 << mAutoWrapTypeComboBox
571 << mCentroidRadioVisible
572 << mCentroidRadioWhole
573 << mDirectSymbRadioBtnAbove
574 << mDirectSymbRadioBtnBelow
575 << mDirectSymbRadioBtnLR
576 << mUpsidedownRadioAll
577 << mUpsidedownRadioDefined
578 << mUpsidedownRadioOff
579 << mPlacementModeComboBox
580 << mFieldExpressionWidget
581 << mCheckBoxSubstituteText
582 << mGeometryGeneratorGroupBox
583 << mGeometryGenerator
584 << mGeometryGeneratorType
585 << mBackgroundMarkerSymbolButton
586 << mBackgroundFillSymbolButton
587 << mCalloutsDrawCheckBox
588 << mCalloutStyleComboBox
591 << mMaskJoinStyleComboBox
592 << mMaskBufferSizeSpinBox
593 << mMaskOpacityWidget
594 << mCheckAllowLabelsOutsidePolygons
595 << mHtmlFormattingCheckBox
596 << mPrioritizationComboBox
597 << mTabDistanceUnitWidget
598 << mTabStopDistanceSpin
601 connectValueChanged( widgets );
606 connect( mBufferDrawChkBx, &QCheckBox::stateChanged,
this, [=](
int ) {
607 updateBufferFrameStatus();
610 connect( mShapeDrawChkBx, &QCheckBox::stateChanged,
this, [=](
int ) {
611 updateShapeFrameStatus();
614 connect( mShadowDrawChkBx, &QCheckBox::stateChanged,
this, [=](
int ) {
615 updateShadowFrameStatus();
618 connect( mCalloutsDrawCheckBox, &QCheckBox::stateChanged,
this, [=](
int ) {
619 updateCalloutFrameStatus();
627 whileBlocking( mOptionsTab )->setCurrentIndex( mLabelStackedWidget->currentIndex() );
628 mOptionsTab->tabBar()->setUsesScrollButtons(
true );
656 const int prevIndex = mOptionsTab->currentIndex();
666 mOptionsTab->removeTab( mOptionsTab->indexOf( renderingTab ) );
667 mOptionsTab->removeTab( mOptionsTab->indexOf( placementTab ) );
668 mOptionsTab->removeTab( mOptionsTab->indexOf( calloutsTab ) );
669 mOptionsTab->removeTab( mOptionsTab->indexOf( maskTab ) );
670 mLabelStackedWidget->removeWidget( mLabelPage_Rendering );
671 mLabelStackedWidget->removeWidget( mLabelPage_Callouts );
672 mLabelStackedWidget->removeWidget( mLabelPage_Mask );
673 mLabelStackedWidget->removeWidget( mLabelPage_Placement );
683 mLabelStackedWidget->setCurrentIndex( prevIndex - 1 );
684 mOptionsTab->setCurrentIndex( prevIndex - 1 );
691 mLabelStackedWidget->setCurrentIndex( 0 );
692 mOptionsTab->setCurrentIndex( 0 );
696 mStackedWidgetLabelWith->hide();
697 mDirectSymbolsFrame->hide();
698 mFormatNumFrame->hide();
699 mFormatNumChkBx->hide();
700 mFormatNumDDBtn->hide();
701 mCheckBoxSubstituteText->hide();
702 mToolButtonConfigureSubstitutes->hide();
703 mLabelWrapOnCharacter->hide();
704 wrapCharacterEdit->hide();
705 mWrapCharDDBtn->hide();
706 mLabelWrapLinesTo->hide();
707 mAutoWrapLengthSpinBox->hide();
708 mAutoWrapLengthDDBtn->hide();
709 mAutoWrapTypeComboBox->hide();
710 mFontMultiLineLabel->hide();
711 mFontMultiLineAlignComboBox->hide();
712 mFontMultiLineAlignDDBtn->hide();
722 const auto buttons = findChildren<QgsPropertyOverrideButton *>();
725#if defined( HAS_KDE_QT5_FONT_STRETCH_FIX ) || ( QT_VERSION >= QT_VERSION_CHECK( 6, 3, 0 ) )
728 if ( button == mFontStretchDDBtn )
731 button->setVisible( visible );
737 mOptionsTab->setVisible( enabled );
738 if (
int tabIndex = mOptionsTab->indexOf( textTab ); tabIndex >= 0 )
739 mOptionsTab->setTabToolTip( tabIndex, tr(
"Text" ) );
740 if (
int tabIndex = mOptionsTab->indexOf( formattingTab ); tabIndex >= 0 )
741 mOptionsTab->setTabToolTip( tabIndex, tr(
"Formatting" ) );
742 if (
int tabIndex = mOptionsTab->indexOf( bufferTab ); tabIndex >= 0 )
743 mOptionsTab->setTabToolTip( tabIndex, tr(
"Buffer" ) );
744 if (
int tabIndex = mOptionsTab->indexOf( maskTab ); tabIndex >= 0 )
745 mOptionsTab->setTabToolTip( tabIndex, tr(
"Mask" ) );
746 if (
int tabIndex = mOptionsTab->indexOf( backgroundTab ); tabIndex >= 0 )
747 mOptionsTab->setTabToolTip( tabIndex, tr(
"Background" ) );
748 if (
int tabIndex = mOptionsTab->indexOf( shadowTab ); tabIndex >= 0 )
749 mOptionsTab->setTabToolTip( tabIndex, tr(
"Shadow" ) );
750 if (
int tabIndex = mOptionsTab->indexOf( calloutsTab ); tabIndex >= 0 )
751 mOptionsTab->setTabToolTip( tabIndex, tr(
"Callouts" ) );
752 if (
int tabIndex = mOptionsTab->indexOf( placementTab ); tabIndex >= 0 )
753 mOptionsTab->setTabToolTip( tabIndex, tr(
"Placement" ) );
754 if (
int tabIndex = mOptionsTab->indexOf( renderingTab ); tabIndex >= 0 )
755 mOptionsTab->setTabToolTip( tabIndex, tr(
"Rendering" ) );
757 mLabelingOptionsListFrame->setVisible( !enabled );
758 groupBox_mPreview->setVisible( !enabled );
762void QgsTextFormatWidget::connectValueChanged(
const QList<QWidget *> &widgets )
764 const auto constWidgets = widgets;
765 for ( QWidget *widget : constWidgets )
775 else if (
QgsOpacityWidget *w = qobject_cast<QgsOpacityWidget *>( widget ) )
779 else if (
QgsScaleWidget *w = qobject_cast<QgsScaleWidget *>( widget ) )
787 else if ( QComboBox *w = qobject_cast<QComboBox *>( widget ) )
791 else if ( QSpinBox *w = qobject_cast<QSpinBox *>( widget ) )
795 else if ( QDoubleSpinBox *w = qobject_cast<QDoubleSpinBox *>( widget ) )
799 else if (
QgsColorButton *w = qobject_cast<QgsColorButton *>( widget ) )
803 else if ( QCheckBox *w = qobject_cast<QCheckBox *>( widget ) )
807 else if ( QRadioButton *w = qobject_cast<QRadioButton *>( widget ) )
811 else if ( QLineEdit *w = qobject_cast<QLineEdit *>( widget ) )
815 else if ( QSlider *w = qobject_cast<QSlider *>( widget ) )
819 else if ( QGroupBox *w = qobject_cast<QGroupBox *>( widget ) )
829 QgsLogger::warning( QStringLiteral(
"Could not create connection for widget %1" ).arg( widget->objectName() ) );
862 mDirectSymbDDBtn->registerCheckedWidget( mDirectSymbChkBx );
870 mFormatNumDDBtn->registerCheckedWidget( mFormatNumChkBx );
885 mEnableMaskDDBtn->registerCheckedWidget( mEnableMaskChkBx );
893 mShapeDrawDDBtn->registerCheckedWidget( mShapeDrawChkBx );
915 mShadowDrawDDBtn->registerCheckedWidget( mShadowDrawChkBx );
960 updateDataDefinedAlignment();
963 const QString ddScaleVisInfo = tr(
"Value < 0 represents a scale closer than 1:1, e.g. -10 = 10:1<br>"
964 "Value of 0 disables the specific limit." );
966 mScaleBasedVisibilityDDBtn->registerCheckedWidget( mScaleBasedVisibilityChkBx );
968 mScaleBasedVisibilityMinDDBtn->setUsageInfo( ddScaleVisInfo );
970 mScaleBasedVisibilityMaxDDBtn->setUsageInfo( ddScaleVisInfo );
976 mMinScaleWidget->setPredefinedScales( scales );
977 mMaxScaleWidget->setPredefinedScales( scales );
982 mMinScaleWidget->updateScales();
983 mMaxScaleWidget->updateScales();
987 mFontLimitPixelDDBtn->registerCheckedWidget( mFontLimitPixelChkBox );
1010 if ( !mButtons.contains( key ) )
1015 mButtons[key] = button;
1035 mBufferDrawChkBx->setChecked( buffer.
enabled() );
1036 mBufferFrame->setEnabled( buffer.
enabled() );
1037 spinBufferSize->setValue( buffer.
size() );
1038 mBufferUnitWidget->setUnit( buffer.
sizeUnit() );
1040 btnBufferColor->setColor( buffer.
color() );
1041 mBufferOpacityWidget->setOpacity( buffer.
opacity() );
1042 mBufferJoinStyleComboBox->setPenJoinStyle( buffer.
joinStyle() );
1044 comboBufferBlendMode->setBlendMode( buffer.
blendMode() );
1046 mBufferEffect.reset( lPaintEffect->clone() );
1050 mBufferEffect->setEnabled(
false );
1052 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
1056 mEnableMaskChkBx->setChecked( mask.
enabled() );
1057 mMaskBufferSizeSpinBox->setValue( mask.
size() );
1058 mMaskBufferUnitWidget->setUnit( mask.
sizeUnit() );
1060 mMaskOpacityWidget->setOpacity( mask.
opacity() );
1061 mMaskJoinStyleComboBox->setPenJoinStyle( mask.
joinStyle() );
1063 mMaskEffect.reset( lPaintEffect->clone() );
1067 mMaskEffect->setEnabled(
false );
1069 mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
1079 mTextOrientationComboBox->setCurrentIndex( mTextOrientationComboBox->findData(
static_cast<int>(
format.
orientation() ) ) );
1082 mFontWordSpacingSpinBox->setValue(
format.
font().wordSpacing() );
1083 mFontLetterSpacingSpinBox->setValue(
format.
font().letterSpacing() );
1092 updateFont( mRefFont );
1098 const QString missingTxt = tr(
"%1 not found. Default substituted." );
1099 QString txtPrepend = tr(
"Chosen font" );
1104 mFontMissingLabel->setText( missingTxt.arg( txtPrepend ) );
1107 mLabelingOptionsListWidget->setCurrentItem(
mTextItem );
1108 whileBlocking( mOptionsTab )->setCurrentIndex( mOptionsTab->indexOf( textTab ) );
1114 mShapeDrawChkBx->setChecked( background.
enabled() );
1115 mShapeFrame->setEnabled( background.
enabled() );
1116 mShapeTypeCmbBx->blockSignals(
true );
1117 mShapeTypeCmbBx->setCurrentIndex( mShapeTypeCmbBx->findData( background.
type() ) );
1118 mShapeTypeCmbBx->blockSignals(
false );
1119 updateAvailableShadowPositions();
1120 mShapeSVGPathLineEdit->setText( background.
svgFile() );
1122 mShapeSizeCmbBx->setCurrentIndex( background.
sizeType() );
1123 mShapeSizeXSpnBx->setValue( background.
size().width() );
1124 mShapeSizeYSpnBx->setValue( background.
size().height() );
1125 mShapeSizeUnitWidget->setUnit( background.
sizeUnit() );
1127 mShapeRotationCmbBx->setCurrentIndex( background.
rotationType() );
1130 mShapeRotationDblSpnBx->setValue( background.
rotation() );
1131 mShapeOffsetXSpnBx->setValue( background.
offset().x() );
1132 mShapeOffsetYSpnBx->setValue( background.
offset().y() );
1133 mShapeOffsetUnitWidget->setUnit( background.
offsetUnit() );
1135 mShapeRadiusXDbSpnBx->setValue( background.
radii().width() );
1136 mShapeRadiusYDbSpnBx->setValue( background.
radii().height() );
1137 mShapeRadiusUnitWidget->setUnit( background.
radiiUnit() );
1140 mShapeFillColorBtn->setColor( background.
fillColor() );
1141 mShapeStrokeColorBtn->setColor( background.
strokeColor() );
1142 mShapeStrokeWidthSpnBx->setValue( background.
strokeWidth() );
1146 mBackgroundOpacityWidget->setOpacity( background.
opacity() );
1147 mShapeBlendCmbBx->setBlendMode( background.
blendMode() );
1149 mLoadSvgParams =
false;
1150 mShapeTypeCmbBx_currentIndexChanged( background.
type() );
1152 if (
auto *lPaintEffect = background.
paintEffect() )
1153 mBackgroundEffect.reset( lPaintEffect->clone() );
1157 mBackgroundEffect->setEnabled(
false );
1159 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
1165 mShadowDrawChkBx->setChecked( shadow.
enabled() );
1166 mShadowFrame->setEnabled( shadow.
enabled() );
1167 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( shadow.
shadowPlacement() ) );
1168 mShadowOffsetAngleSpnBx->setValue( shadow.
offsetAngle() );
1170 mShadowOffsetUnitWidget->setUnit( shadow.
offsetUnit() );
1172 mShadowOffsetGlobalChkBx->setChecked( shadow.
offsetGlobal() );
1174 mShadowRadiusDblSpnBx->setValue( shadow.
blurRadius() );
1177 mShadowRadiusAlphaChkBx->setChecked( shadow.
blurAlphaOnly() );
1178 mShadowOpacityWidget->setOpacity( shadow.
opacity() );
1179 mShadowScaleSpnBx->setValue( shadow.
scale() );
1181 mShadowColorBtn->setColor( shadow.
color() );
1182 mShadowBlendCmbBx->setBlendMode( shadow.
blendMode() );
1194 settings.
setValue( QStringLiteral(
"Windows/Labeling/FontPreviewSplitState" ), mFontPreviewSplitter->saveState() );
1195 settings.
setValue( QStringLiteral(
"Windows/Labeling/OptionsSplitState" ), mLabelingOptionsSplitter->saveState() );
1197 int prevIndex = mLabelingOptionsListWidget->currentRow();
1198 if ( mWidgetMode ==
Text )
1200 switch ( prevIndex )
1209 settings.
setValue( QStringLiteral(
"Windows/Labeling/Tab" ), prevIndex );
1237 buffer.
setEnabled( mBufferDrawChkBx->isChecked() );
1238 buffer.
setSize( spinBufferSize->value() );
1239 buffer.
setColor( btnBufferColor->color() );
1240 buffer.
setOpacity( mBufferOpacityWidget->opacity() );
1243 buffer.
setJoinStyle( mBufferJoinStyleComboBox->penJoinStyle() );
1245 buffer.
setBlendMode( comboBufferBlendMode->blendMode() );
1254 mask.
setEnabled( mEnableMaskChkBx->isChecked() );
1255 mask.
setSize( mMaskBufferSizeSpinBox->value() );
1256 mask.
setOpacity( mMaskOpacityWidget->opacity() );
1257 mask.
setSizeUnit( mMaskBufferUnitWidget->unit() );
1259 mask.
setJoinStyle( mMaskJoinStyleComboBox->penJoinStyle() );
1269 background.
setEnabled( mShapeDrawChkBx->isChecked() );
1271 background.
setSvgFile( mShapeSVGPathLineEdit->text() );
1273 background.
setSize( QSizeF( mShapeSizeXSpnBx->value(), mShapeSizeYSpnBx->value() ) );
1274 background.
setSizeUnit( mShapeSizeUnitWidget->unit() );
1277 background.
setRotation( mShapeRotationDblSpnBx->value() );
1278 background.
setOffset( QPointF( mShapeOffsetXSpnBx->value(), mShapeOffsetYSpnBx->value() ) );
1281 background.
setRadii( QSizeF( mShapeRadiusXDbSpnBx->value(), mShapeRadiusYDbSpnBx->value() ) );
1282 background.
setRadiiUnit( mShapeRadiusUnitWidget->unit() );
1285 background.
setFillColor( mShapeFillColorBtn->color() );
1290 background.
setOpacity( mBackgroundOpacityWidget->opacity() );
1291 background.
setBlendMode( mShapeBlendCmbBx->blendMode() );
1302 shadow.
setEnabled( mShadowDrawChkBx->isChecked() );
1313 shadow.
setOpacity( mShadowOpacityWidget->opacity() );
1314 shadow.
setScale( mShadowScaleSpnBx->value() );
1315 shadow.
setColor( mShadowColorBtn->color() );
1319 if ( includeDataDefinedProperties )
1350 if ( mButtons.contains( key ) )
1359void QgsTextFormatWidget::optionsStackedWidget_CurrentChanged(
int )
1361 mLabelingOptionsListWidget->blockSignals(
true );
1362 QWidget *currentPage = mLabelStackedWidget->currentWidget();
1363 if ( currentPage == mLabelPage_Text )
1364 mLabelingOptionsListWidget->setCurrentItem(
mTextItem );
1365 else if ( currentPage == mLabelPage_Formatting )
1367 else if ( currentPage == mLabelPage_Mask )
1368 mLabelingOptionsListWidget->setCurrentItem(
mMaskItem );
1369 if ( currentPage == mLabelPage_Buffer )
1370 mLabelingOptionsListWidget->setCurrentItem(
mBufferItem );
1371 if ( currentPage == mLabelPage_Background )
1373 if ( currentPage == mLabelPage_Shadow )
1374 mLabelingOptionsListWidget->setCurrentItem(
mShadowItem );
1375 if ( currentPage == mLabelPage_Callouts )
1376 mLabelingOptionsListWidget->setCurrentItem(
mCalloutItem );
1377 if ( currentPage == mLabelPage_Rendering )
1379 if ( currentPage == mLabelPage_Placement )
1381 mLabelingOptionsListWidget->blockSignals(
false );
1390 mPreviewExpressionContext = *lExpressionContext;
1395 const auto symbolButtonWidgets = findChildren<QgsSymbolButton *>();
1403void QgsTextFormatWidget::collapseSample(
bool collapse )
1407 QList<int> splitSizes = mFontPreviewSplitter->sizes();
1408 if ( splitSizes[0] > groupBox_mPreview->height() )
1410 const int delta = splitSizes[0] - groupBox_mPreview->height();
1411 splitSizes[0] -= delta;
1412 splitSizes[1] += delta;
1413 mFontPreviewSplitter->setSizes( splitSizes );
1418void QgsTextFormatWidget::changeTextColor(
const QColor &color )
1424void QgsTextFormatWidget::updateFont(
const QFont &newFont )
1427 if ( newFont != mRefFont )
1436 QFont symbolFont = mRefFont;
1437 symbolFont.setPointSize( font().pointSize() );
1438 mDirectSymbLeftLineEdit->setFont( symbolFont );
1439 mDirectSymbRightLineEdit->setFont( symbolFont );
1441 blockFontChangeSignals(
true );
1442 mFontFamilyCmbBx->setCurrentFont( symbolFont );
1443 populateFontStyleComboBox();
1444 mFontUnderlineBtn->setChecked( mRefFont.underline() );
1445 mFontStrikethroughBtn->setChecked( mRefFont.strikeOut() );
1446 mKerningCheckBox->setChecked( mRefFont.kerning() );
1447 blockFontChangeSignals(
false );
1455void QgsTextFormatWidget::blockFontChangeSignals(
bool blk )
1457 mFontFamilyCmbBx->blockSignals( blk );
1458 mFontStyleComboBox->blockSignals( blk );
1459 mFontCapitalsComboBox->blockSignals( blk );
1460 mFontUnderlineBtn->blockSignals( blk );
1461 mFontStrikethroughBtn->blockSignals( blk );
1462 mFontWordSpacingSpinBox->blockSignals( blk );
1463 mFontLetterSpacingSpinBox->blockSignals( blk );
1464 mKerningCheckBox->blockSignals( blk );
1479 lblFontPreview->setFormat(
format() );
1482void QgsTextFormatWidget::scrollPreview()
1484 scrollArea_mPreview->ensureVisible( 0, 0, 0, 0 );
1489 mPreviewBackgroundColor = color;
1491 scrollArea_mPreview->widget()->setStyleSheet( QStringLiteral(
"background: rgb(%1, %2, %3);" ).arg( QString::number( color.red() ), QString::number( color.green() ), QString::number( color.blue() ) ) );
1494void QgsTextFormatWidget::changeBufferColor(
const QColor &color )
1503 bool showLineFrame =
false;
1504 bool showCentroidFrame =
false;
1505 bool showQuadrantFrame =
false;
1506 bool showFixedQuadrantFrame =
false;
1507 bool showPlacementPriorityFrame =
false;
1508 bool showOffsetTypeFrame =
false;
1509 bool showOffsetFrame =
false;
1510 bool showDistanceFrame =
false;
1511 bool showMaximumDistanceFrame =
false;
1512 bool showPrioritizationFrame =
false;
1513 bool showRotationFrame =
false;
1514 bool showMaxCharAngleFrame =
false;
1519 bool enableMultiLinesFrame =
true;
1525 showDistanceFrame =
true;
1526 showMaximumDistanceFrame =
true;
1534 showQuadrantFrame =
true;
1535 showFixedQuadrantFrame =
true;
1536 showOffsetFrame =
true;
1537 showRotationFrame =
true;
1541 showDistanceFrame =
true;
1542 showMaximumDistanceFrame =
true;
1543 showPlacementPriorityFrame =
true;
1544 showPrioritizationFrame =
true;
1545 showOffsetTypeFrame =
true;
1552 showLineFrame =
true;
1553 showDistanceFrame =
true;
1556 const bool offline = chkLineAbove->isChecked() || chkLineBelow->isChecked();
1557 chkLineOrientationDependent->setEnabled( offline );
1558 mPlacementDistanceFrame->setEnabled( offline );
1562 showMaxCharAngleFrame = isCurved;
1564 enableMultiLinesFrame = !isCurved;
1569 showDistanceFrame =
true;
1572 mPlacementLineFrame->setVisible( showLineFrame );
1573 mPlacementPolygonFrame->setVisible( showPolygonPlacementOptions );
1574 mPlacementCentroidFrame->setVisible( showCentroidFrame );
1575 mPlacementQuadrantFrame->setVisible( showQuadrantFrame );
1576 mPlacementFixedQuadrantFrame->setVisible( showFixedQuadrantFrame );
1577 mPlacementCartographicFrame->setVisible( showPlacementPriorityFrame );
1578 mPlacementOffsetFrame->setVisible( showOffsetFrame );
1579 mPlacementDistanceFrame->setVisible( showDistanceFrame );
1580 mPlacementMaximumDistanceFrame->setVisible( showMaximumDistanceFrame );
1581 mPlacementPrioritizationFrame->setVisible( showPrioritizationFrame );
1582 mPlacementOffsetTypeFrame->setVisible( showOffsetTypeFrame );
1583 mPlacementRotationFrame->setVisible( showRotationFrame );
1587 mPlacementMaxCharAngleFrame->setVisible( showMaxCharAngleFrame );
1589 mMultiLinesFrame->setEnabled( enableMultiLinesFrame );
1593 switch ( currentPlacement )
1597 helperText = tr(
"Arranges label candidates in a clockwise circle around the feature, preferring placements to the top-right of the feature." );
1599 helperText = tr(
"Arranges label candidates in a cluster around the feature's centroid, preferring placements directly over the centroid." );
1603 helperText = tr(
"Arranges label candidates directly over the feature or at a preset offset from the feature." );
1605 helperText = tr(
"Arranges label candidates directly over the feature's centroid, or at a preset offset from the centroid." );
1609 helperText = tr(
"Arranges label candidates parallel to a generalised line representing the feature. Placements which fall over straighter portions of the line are preferred." );
1611 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." );
1615 helperText = tr(
"Arranges candidates following the curvature of a line feature. Placements which fall over straighter portions of the line are preferred." );
1619 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." );
1621 helperText = tr(
"Label candidates are arranged horizontally along the length of the feature." );
1625 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." );
1629 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." );
1633 helperText = tr(
"Arranges candidates following the curvature of the feature's perimeter. Placements which fall over straighter portions of the perimeter are preferred." );
1637 helperText = tr(
"Label candidates are placed outside of the features, preferring placements which give greatest visual association between the label and the feature." );
1640 mPlacementModeDescriptionLabel->setText( QStringLiteral(
"<i>%1</i>" ).arg( helperText ) );
1643void QgsTextFormatWidget::populateFontCapitalsComboBox()
1648#if defined( HAS_KDE_QT5_SMALL_CAPS_FIX ) || QT_VERSION >= QT_VERSION_CHECK( 6, 3, 0 )
1658void QgsTextFormatWidget::populateFontStyleComboBox()
1660 mFontStyleComboBox->clear();
1661 const QStringList styles = mFontDB.styles( mRefFont.family() );
1662 const auto constStyles = styles;
1663 for (
const QString &style : constStyles )
1665 mFontStyleComboBox->addItem( style );
1668 QString targetStyle = mFontDB.styleString( mRefFont );
1669 if ( !styles.contains( targetStyle ) )
1672 targetStyle = QFontInfo( f ).styleName();
1673 mRefFont.setStyleName( targetStyle );
1676 const int stylIndx = mFontStyleComboBox->findText( targetStyle );
1677 if ( stylIndx > -1 )
1682 mFontStyleComboBox->setCurrentIndex( curIndx );
1685void QgsTextFormatWidget::mFontSizeSpinBox_valueChanged(
double d )
1687 mRefFont.setPointSizeF( d );
1688 updateFont( mRefFont );
1691void QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged(
const QFont &f )
1694 updateFont( mRefFont );
1697void QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged(
const QString &text )
1700 updateFont( mRefFont );
1703void QgsTextFormatWidget::mFontUnderlineBtn_toggled(
bool ckd )
1705 mRefFont.setUnderline( ckd );
1706 updateFont( mRefFont );
1709void QgsTextFormatWidget::mFontStrikethroughBtn_toggled(
bool ckd )
1711 mRefFont.setStrikeOut( ckd );
1712 updateFont( mRefFont );
1715void QgsTextFormatWidget::kerningToggled(
bool checked )
1717 mRefFont.setKerning( checked );
1718 updateFont( mRefFont );
1721void QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged(
double spacing )
1723 mRefFont.setWordSpacing( spacing );
1724 updateFont( mRefFont );
1727void QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged(
double spacing )
1729 mRefFont.setLetterSpacing( QFont::AbsoluteSpacing, spacing );
1730 updateFont( mRefFont );
1733void QgsTextFormatWidget::mFontSizeUnitWidget_changed()
1738 mFontLimitPixelChkBox->setChecked(
false );
1744 mFontLimitPixelChkBox->setChecked(
true );
1746 updateFont( mRefFont );
1749void QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged(
int px )
1752 mFontMaxPixelSpinBox->setMinimum( px );
1753 mFontMaxPixelSpinBox->update();
1756void QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged(
int px )
1759 if ( px < mFontMinPixelSpinBox->value() )
1761 mFontMaxPixelSpinBox->blockSignals(
true );
1762 mFontMaxPixelSpinBox->setValue( mFontMinPixelSpinBox->value() );
1763 mFontMaxPixelSpinBox->blockSignals(
false );
1765 mFontMaxPixelSpinBox->setMinimum( mFontMinPixelSpinBox->value() );
1768void QgsTextFormatWidget::mBufferUnitWidget_changed()
1770 updateFont( mRefFont );
1773void QgsTextFormatWidget::mMaskBufferUnitWidget_changed()
1775 updateFont( mRefFont );
1778void QgsTextFormatWidget::mCoordXDDBtn_changed()
1780 updateDataDefinedAlignment();
1783void QgsTextFormatWidget::mCoordXDDBtn_activated(
bool isActive )
1788 mCoordPointDDBtn->setActive(
false );
1791void QgsTextFormatWidget::mCoordYDDBtn_changed()
1793 updateDataDefinedAlignment();
1796void QgsTextFormatWidget::mCoordYDDBtn_activated(
bool isActive )
1801 mCoordPointDDBtn->setActive(
false );
1804void QgsTextFormatWidget::mCoordPointDDBtn_changed()
1806 updateDataDefinedAlignment();
1809void QgsTextFormatWidget::mCoordPointDDBtn_activated(
bool isActive )
1814 mCoordXDDBtn->setActive(
false );
1815 mCoordYDDBtn->setActive(
false );
1818void QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged(
int )
1826 showBackgroundRadius( isRect );
1828 mShapeSVGPathFrame->setVisible( isSVG );
1829 mBackgroundMarkerSymbolButton->setVisible( isMarker );
1830 mBackgroundFillSymbolButton->setVisible( !isSVG && !isMarker );
1834 mShapeSizeYLabel->setVisible( !isSVG && !isMarker );
1835 mShapeSizeYSpnBx->setVisible( !isSVG && !isMarker );
1836 mShapeSizeYDDBtn->setVisible( !isSVG && !isMarker );
1837 mShapeSizeXLabel->setText( tr(
"Size%1" ).arg( !isSVG && !isMarker ? tr(
" X" ) : QString() ) );
1840 mShapeFillColorBtn->setAllowOpacity( !isSVG );
1841 mShapeFillColorBtn->setButtonBackground();
1842 mShapeStrokeColorBtn->setAllowOpacity( !isSVG );
1843 mShapeStrokeColorBtn->setButtonBackground();
1846 mShapeFillColorLabel->setVisible( isSVG );
1847 mShapeFillColorLabel->setEnabled( isSVG );
1848 mShapeFillColorBtn->setVisible( isSVG );
1849 mShapeFillColorBtn->setEnabled( isSVG );
1850 mShapeFillColorDDBtn->setVisible( isSVG );
1851 mShapeFillColorDDBtn->setEnabled( isSVG );
1852 mShapeStrokeColorLabel->setVisible( isSVG );
1853 mShapeStrokeColorLabel->setEnabled( isSVG );
1854 mShapeStrokeColorBtn->setVisible( isSVG );
1855 mShapeStrokeColorBtn->setEnabled( isSVG );
1856 mShapeStrokeColorDDBtn->setVisible( isSVG );
1857 mShapeStrokeColorDDBtn->setEnabled( isSVG );
1858 mShapeStrokeWidthLabel->setVisible( isSVG );
1859 mShapeStrokeWidthLabel->setEnabled( isSVG );
1860 mShapeStrokeWidthSpnBx->setVisible( isSVG );
1861 mShapeStrokeWidthSpnBx->setEnabled( isSVG );
1862 mShapeStrokeWidthDDBtn->setVisible( isSVG );
1863 mShapeStrokeWidthDDBtn->setEnabled( isSVG );
1866 mShapeSVGParamsBtn->setVisible( isSVG );
1869 updateSvgWidgets( mShapeSVGPathLineEdit->text() );
1873 mShapeSVGUnitsLabel->setVisible( isSVG );
1874 mShapeStrokeWidthUnitWidget->setVisible(
false );
1875 mShapeStrokeUnitsDDBtn->setVisible(
false );
1876 mShapeStrokeUnitsDDBtn->setEnabled(
false );
1878 updateAvailableShadowPositions();
1881void QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged(
const QString &text )
1883 updateSvgWidgets( text );
1888 const int numOptionsChecked = ( chkLineAbove->isChecked() ? 1 : 0 ) + ( chkLineBelow->isChecked() ? 1 : 0 ) + ( chkLineOn->isChecked() ? 1 : 0 );
1890 if ( numOptionsChecked == 1 )
1893 chkLineAbove->setEnabled( !chkLineAbove->isChecked() );
1894 chkLineBelow->setEnabled( !chkLineBelow->isChecked() );
1895 chkLineOn->setEnabled( !chkLineOn->isChecked() );
1899 chkLineAbove->setEnabled(
true );
1900 chkLineBelow->setEnabled(
true );
1901 chkLineOn->setEnabled(
true );
1911void QgsTextFormatWidget::previewScaleChanged(
double scale )
1913 lblFontPreview->setScale( scale );
1916void QgsTextFormatWidget::updateSvgWidgets(
const QString &svgPath )
1918 if ( mShapeSVGPathLineEdit->text() != svgPath )
1920 mShapeSVGPathLineEdit->setText( svgPath );
1923 QString resolvedPath;
1924 bool validSVG =
true;
1925 if ( !svgPath.startsWith( QLatin1String(
"base64:" ), Qt::CaseInsensitive ) )
1928 validSVG = QFileInfo::exists( resolvedPath );
1932 resolvedPath = svgPath;
1937 mShapeSVGPathLineEdit->setStyleSheet( !validSVG ? QStringLiteral(
"QLineEdit{ color: rgb(225, 0, 0); }" ) : QString() );
1938 mShapeSVGPathLineEdit->setToolTip( !validSVG ? tr(
"File not found" ) : resolvedPath );
1940 QColor fill, stroke;
1941 double strokeWidth = 0.0;
1942 bool fillParam =
false, strokeParam =
false, strokeWidthParam =
false;
1948 mShapeSVGParamsBtn->setEnabled( validSVG && ( fillParam || strokeParam || strokeWidthParam ) );
1950 mShapeFillColorLabel->setEnabled( validSVG && fillParam );
1951 mShapeFillColorBtn->setEnabled( validSVG && fillParam );
1952 mShapeFillColorDDBtn->setEnabled( validSVG && fillParam );
1953 if ( mLoadSvgParams && validSVG && fillParam )
1954 mShapeFillColorBtn->setColor( fill );
1956 mShapeStrokeColorLabel->setEnabled( validSVG && strokeParam );
1957 mShapeStrokeColorBtn->setEnabled( validSVG && strokeParam );
1958 mShapeStrokeColorDDBtn->setEnabled( validSVG && strokeParam );
1959 if ( mLoadSvgParams && validSVG && strokeParam )
1960 mShapeStrokeColorBtn->setColor( stroke );
1962 mShapeStrokeWidthLabel->setEnabled( validSVG && strokeWidthParam );
1963 mShapeStrokeWidthSpnBx->setEnabled( validSVG && strokeWidthParam );
1964 mShapeStrokeWidthDDBtn->setEnabled( validSVG && strokeWidthParam );
1965 if ( mLoadSvgParams && validSVG && strokeWidthParam )
1966 mShapeStrokeWidthSpnBx->setValue( strokeWidth );
1972 mShapeSVGUnitsLabel->setEnabled( validSVG && strokeWidthParam );
1975void QgsTextFormatWidget::updateAvailableShadowPositions()
1977 if ( mShadowUnderCmbBx->count() == 0
1983 mShadowUnderCmbBx->clear();
1991 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( currentPlacement ) );
1992 if ( mShadowUnderCmbBx->currentIndex() == -1 )
1993 mShadowUnderCmbBx->setCurrentIndex( 0 );
1997void QgsTextFormatWidget::updateProperty()
2005void QgsTextFormatWidget::createAuxiliaryField()
2037 property.setActive(
true );
2046void QgsTextFormatWidget::updateShapeFrameStatus()
2048 mShapeFrame->setEnabled( mShapeDrawDDBtn->isActive() || mShapeDrawChkBx->isChecked() );
2051void QgsTextFormatWidget::updateBufferFrameStatus()
2053 mBufferFrame->setEnabled( mBufferDrawDDBtn->isActive() || mBufferDrawChkBx->isChecked() );
2056void QgsTextFormatWidget::updateShadowFrameStatus()
2058 mShadowFrame->setEnabled( mShadowDrawDDBtn->isActive() || mShadowDrawChkBx->isChecked() );
2061void QgsTextFormatWidget::updateCalloutFrameStatus()
2063 mCalloutFrame->setEnabled( mCalloutDrawDDBtn->isActive() || mCalloutsDrawCheckBox->isChecked() );
2066void QgsTextFormatWidget::updateDataDefinedAlignment()
2069 mCoordAlignmentFrame->setEnabled( ( mCoordXDDBtn->isActive() && mCoordYDDBtn->isActive() ) || mCoordPointDDBtn->isActive() );
2072void QgsTextFormatWidget::overlapModeChanged()
2074 QString description;
2078 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.)" );
2081 description = tr(
"If a label cannot otherwise be placed for a feature then an overlapping label is permitted." );
2084 description = tr(
"Labels from this layer may freely overlap other labels or label obstacles without penalty." );
2088 mOverlapModeDescriptionLabel->setText( QStringLiteral(
"<i>%1</i>" ).arg( description ) );
2093 if ( name.isEmpty() )
2136 saveDlg.
setDefaultTags( mTextFormatsListWidget->currentTagFilter() );
2137 if ( !saveDlg.exec() )
2140 if ( saveDlg.
name().isEmpty() )
2150 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 );
2151 if ( res != QMessageBox::Yes )
2158 const QStringList symbolTags = saveDlg.
tags().split(
',' );
2165void QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked()
2168 svgDlg.setWindowTitle( tr(
"Select SVG file" ) );
2169 svgDlg.svgSelector()->setSvgPath( mShapeSVGPathLineEdit->text().trimmed() );
2171 if ( svgDlg.exec() == QDialog::Accepted )
2173 const QString svgPath = svgDlg.svgSelector()->currentSvgPath();
2174 if ( !svgPath.isEmpty() )
2176 mShapeSVGPathLineEdit->setText( svgPath );
2182void QgsTextFormatWidget::mShapeSVGParamsBtn_clicked()
2184 const QString svgPath = mShapeSVGPathLineEdit->text();
2185 mLoadSvgParams =
true;
2186 updateSvgWidgets( svgPath );
2187 mLoadSvgParams =
false;
2190void QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged(
int index )
2196void QgsTextFormatWidget::mPreviewTextEdit_textChanged(
const QString &text )
2198 lblFontPreview->setText( text );
2202void QgsTextFormatWidget::mPreviewTextBtn_clicked()
2204 mPreviewTextEdit->setText( QStringLiteral(
"Lorem Ipsum" ) );
2208void QgsTextFormatWidget::mPreviewBackgroundBtn_colorChanged(
const QColor &color )
2213void QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked()
2215 bool gotChar =
false;
2217 const QChar initial = !mDirectSymbLeftLineEdit->text().isEmpty() ? mDirectSymbLeftLineEdit->text().at( 0 ) : QChar();
2218 const QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
2223 if ( !dirSymb.isNull() )
2224 mDirectSymbLeftLineEdit->setText( QString( dirSymb ) );
2227void QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked()
2229 bool gotChar =
false;
2230 const QChar initial = !mDirectSymbRightLineEdit->text().isEmpty() ? mDirectSymbRightLineEdit->text().at( 0 ) : QChar();
2231 const QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
2236 if ( !dirSymb.isNull() )
2237 mDirectSymbRightLineEdit->setText( QString( dirSymb ) );
2240void QgsTextFormatWidget::chkLineOrientationDependent_toggled(
bool active )
2244 chkLineAbove->setText( tr(
"Left of line" ) );
2245 chkLineBelow->setText( tr(
"Right of line" ) );
2249 chkLineAbove->setText( tr(
"Above line" ) );
2250 chkLineBelow->setText( tr(
"Below line" ) );
2255void QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked()
2270 if ( dlg.exec() == QDialog::Accepted )
2277void QgsTextFormatWidget::configureTabStops()
2285 widget->
setUnit( mTabDistanceUnitWidget->unit() );
2297 dlg.setUnit( mTabDistanceUnitWidget->unit() );
2298 if ( dlg.exec() == QDialog::Accepted )
2307void QgsTextFormatWidget::showBackgroundRadius(
bool show )
2309 mShapeRadiusLabel->setVisible( show );
2310 mShapeRadiusXDbSpnBx->setVisible( show );
2312 mShapeRadiusYDbSpnBx->setVisible( show );
2314 mShapeRadiusUnitWidget->setVisible( show );
2316 mShapeRadiusDDBtn->setVisible( show );
2317 mShapeRadiusUnitsDDBtn->setVisible( show );
2323 return *lExpressionContext;
2350 if ( mGeometryGeneratorGroupBox->isChecked() )
2364 : QDialog( parent, fl )
2366 setWindowTitle( tr(
"Text Settings" ) );
2369 mFormatWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
2371 QVBoxLayout *layout =
new QVBoxLayout(
this );
2372 layout->addWidget( mFormatWidget );
2374 mButtonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, Qt::Horizontal,
this );
2375 layout->addWidget( mButtonBox );
2377 setLayout( layout );
2380 connect( mButtonBox->button( QDialogButtonBox::Ok ), &QAbstractButton::clicked,
this, &QDialog::accept );
2381 connect( mButtonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked,
this, &QDialog::reject );
2382 connect( mButtonBox->button( QDialogButtonBox::Help ), &QAbstractButton::clicked,
this, &QgsTextFormatDialog::showHelp );
2387 return mFormatWidget->
format();
2390void QgsTextFormatDialog::showHelp()
2392 QgsHelp::openHelp( QStringLiteral(
"style_library/label_settings.html#formatting-the-label-text" ) );
2408 mFormatWidget = qobject_cast<QgsTextFormatWidget *>(
widget() );
2410 if ( !mBlockSignals )
2417 return mFormatWidget->
format();
2422 mBlockSignals =
true;
2424 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.
Contains configuration for rendering maps.
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.
@ LabelMarginDistance
Minimum distance from labels for this feature to other labels.
@ 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.
@ RemoveDuplicateLabels
Whether this feature can cause removal of duplicate labels.
@ 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 an 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.
Stores settings for use within QGIS.
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.
A database of saved style entities, including symbols, color ramps, text formats and others.
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.
A dialog for selection of an SVG file.
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 for entering 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 dataset.
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.