32 #include <QButtonGroup> 36 , mMapCanvas( mapCanvas )
39 setWidgetMode(
Text );
46 , mMapCanvas( mapCanvas )
49 setWidgetMode( mode );
52 void QgsTextFormatWidget::initWidget()
55 connect( mShapeSVGPathLineEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged );
56 connect( mFontSizeSpinBox, static_cast <
void ( QDoubleSpinBox::* )(
double ) > ( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontSizeSpinBox_valueChanged );
57 connect( mFontCapitalsComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mFontCapitalsComboBox_currentIndexChanged );
58 connect( mFontFamilyCmbBx, &QFontComboBox::currentFontChanged,
this, &QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged );
59 connect( mFontStyleComboBox,
static_cast<void ( QComboBox::* )(
const QString & )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged );
60 connect( mFontUnderlineBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontUnderlineBtn_toggled );
61 connect( mFontStrikethroughBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontStrikethroughBtn_toggled );
62 connect( mFontWordSpacingSpinBox, static_cast <
void ( QDoubleSpinBox::* )(
double ) > ( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged );
63 connect( mFontLetterSpacingSpinBox, static_cast <
void ( QDoubleSpinBox::* )(
double ) > ( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged );
65 connect( mFontMinPixelSpinBox, static_cast <
void ( QSpinBox::* )(
int ) > ( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged );
66 connect( mFontMaxPixelSpinBox, static_cast <
void ( QSpinBox::* )(
int ) > ( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged );
70 connect( mShapeTypeCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged );
71 connect( mShapeRotationCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged );
72 connect( mShapeSVGParamsBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGParamsBtn_clicked );
73 connect( mShapeSVGSelectorBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked );
74 connect( mPreviewTextEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mPreviewTextEdit_textChanged );
75 connect( mPreviewTextBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mPreviewTextBtn_clicked );
77 connect( mDirectSymbLeftToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked );
78 connect( mDirectSymbRightToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked );
79 connect( mChkNoObstacle, &QCheckBox::toggled,
this, &QgsTextFormatWidget::mChkNoObstacle_toggled );
80 connect( chkLineOrientationDependent, &QCheckBox::toggled,
this, &QgsTextFormatWidget::chkLineOrientationDependent_toggled );
81 connect( mToolButtonConfigureSubstitutes, &QToolButton::clicked,
this, &QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked );
84 mOptionsTab->setIconSize( QSize( iconSize, iconSize ) );
88 mPointOffsetAboveLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
89 mPointOffsetAbove->setIconSize( QSize( iconSize32, iconSize18 ) );
90 mPointOffsetAboveRight->setIconSize( QSize( iconSize32, iconSize18 ) );
91 mPointOffsetLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
92 mPointOffsetOver ->setIconSize( QSize( iconSize32, iconSize18 ) );
93 mPointOffsetRight->setIconSize( QSize( iconSize32, iconSize18 ) );
94 mPointOffsetBelowLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
95 mPointOffsetBelow->setIconSize( QSize( iconSize32, iconSize18 ) );
96 mPointOffsetBelowRight->setIconSize( QSize( iconSize32, iconSize18 ) );
97 mLabelMinScale->setPixmap(
QgsApplication::getThemeIcon( QStringLiteral(
"/mActionZoomOut.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
98 mLabelMaxScale->setPixmap(
QgsApplication::getThemeIcon( QStringLiteral(
"/mActionZoomIn.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
101 mFontUnderlineBtn->setMinimumSize( buttonSize, buttonSize );
102 mFontUnderlineBtn->setMaximumSize( buttonSize, buttonSize );
103 mFontStrikethroughBtn->setMinimumSize( buttonSize, buttonSize );
104 mFontStrikethroughBtn->setMaximumSize( buttonSize, buttonSize );
105 mFontBoldBtn->setMinimumSize( buttonSize, buttonSize );
106 mFontBoldBtn->setMaximumSize( buttonSize, buttonSize );
107 mFontItalicBtn->setMinimumSize( buttonSize, buttonSize );
108 mFontItalicBtn->setMaximumSize( buttonSize, buttonSize );
110 mPreviewScaleComboBox->setMapCanvas( mMapCanvas );
111 mPreviewScaleComboBox->setShowCurrentScaleButton(
true );
142 mFontLineHeightSpinBox->setClearValue( 1.0 );
143 mShapeRotationDblSpnBx->setClearValue( 0.0 );
144 mShapeOffsetXSpnBx->setClearValue( 0.0 );
145 mShapeOffsetYSpnBx->setClearValue( 0.0 );
146 mPointOffsetXSpinBox->setClearValue( 0.0 );
147 mPointOffsetYSpinBox->setClearValue( 0.0 );
148 mPointAngleSpinBox->setClearValue( 0.0 );
149 mFontLetterSpacingSpinBox->setClearValue( 0.0 );
150 mFontWordSpacingSpinBox->setClearValue( 0.0 );
151 mZIndexSpinBox->setClearValue( 0.0 );
161 mRefFont = lblFontPreview->font();
164 connect( mShadowOffsetAngleDial, &QAbstractSlider::valueChanged, mShadowOffsetAngleSpnBx, &QSpinBox::setValue );
165 connect( mShadowOffsetAngleSpnBx, static_cast <
void ( QSpinBox::* )(
int ) > ( &QSpinBox::valueChanged ), mShadowOffsetAngleDial, &QAbstractSlider::setValue );
166 connect( mLimitLabelChkBox, &QAbstractButton::toggled, mLimitLabelSpinBox, &QWidget::setEnabled );
167 connect( mCheckBoxSubstituteText, &QAbstractButton::toggled, mToolButtonConfigureSubstitutes, &QWidget::setEnabled );
174 populateFontCapitalsComboBox();
177 mPreviewBackgroundBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
178 mPreviewBackgroundBtn->setContext( QStringLiteral(
"labeling" ) );
179 mPreviewBackgroundBtn->setColor( QColor( 255, 255, 255 ) );
180 btnTextColor->setColorDialogTitle( tr(
"Select Text Color" ) );
181 btnTextColor->setContext( QStringLiteral(
"labeling" ) );
182 btnTextColor->setDefaultColor( Qt::black );
183 btnBufferColor->setColorDialogTitle( tr(
"Select Buffer Color" ) );
184 btnBufferColor->setContext( QStringLiteral(
"labeling" ) );
185 btnBufferColor->setDefaultColor( Qt::white );
186 mShapeStrokeColorBtn->setColorDialogTitle( tr(
"Select Stroke Color" ) );
187 mShapeStrokeColorBtn->setContext( QStringLiteral(
"labeling" ) );
188 mShapeFillColorBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
189 mShapeFillColorBtn->setContext( QStringLiteral(
"labeling" ) );
190 mShadowColorBtn->setColorDialogTitle( tr(
"Select Shadow Color" ) );
191 mShadowColorBtn->setContext( QStringLiteral(
"labeling" ) );
192 mShadowColorBtn->setDefaultColor( Qt::black );
194 mFontColorDDBtn->registerLinkedWidget( btnTextColor );
195 mBufferColorDDBtn->registerLinkedWidget( btnBufferColor );
196 mShapeStrokeColorDDBtn->registerLinkedWidget( mShapeStrokeColorBtn );
197 mShapeFillColorDDBtn->registerLinkedWidget( mShapeFillColorBtn );
198 mShadowColorDDBtn->registerLinkedWidget( mShadowColorBtn );
267 connect( groupBox_mPreview,
270 &QgsTextFormatWidget::collapseSample );
273 mLabelingOptionsListWidget->setAttribute( Qt::WA_MacShowFocusRect,
false );
278 QSizePolicy policy( mLabelingOptionsListFrame->sizePolicy() );
279 policy.setHorizontalStretch( 0 );
280 mLabelingOptionsListFrame->setSizePolicy( policy );
281 if ( !settings.
contains( QStringLiteral(
"/Windows/Labeling/OptionsSplitState" ) ) )
284 QList<int> splitsizes;
286 mLabelingOptionsSplitter->setSizes( splitsizes );
290 connect( mLabelStackedWidget, &QStackedWidget::currentChanged,
this, &QgsTextFormatWidget::optionsStackedWidget_CurrentChanged );
293 mFontPreviewSplitter->restoreState( settings.
value( QStringLiteral(
"Windows/Labeling/FontPreviewSplitState" ) ).toByteArray() );
294 mLabelingOptionsSplitter->restoreState( settings.
value( QStringLiteral(
"Windows/Labeling/OptionsSplitState" ) ).toByteArray() );
296 mLabelingOptionsListWidget->setCurrentRow( settings.
value( QStringLiteral(
"Windows/Labeling/Tab" ), 0 ).toInt() );
300 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
303 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
308 QList<QWidget *> widgets;
309 widgets << btnBufferColor
311 << chkLabelPerFeaturePart
315 << chkLineOrientationDependent
317 << chkPreserveRotation
319 << comboBufferBlendMode
321 << mBufferBlendModeDDBtn
325 << mBufferJoinStyleComboBox
326 << mBufferJoinStyleDDBtn
328 << mBufferOpacityDDBtn
329 << mBufferTranspFillChbx
330 << mBufferOpacityWidget
333 << mCentroidInsideCheckBox
335 << mCoordAlignmentHDDBtn
336 << mCoordAlignmentVDDBtn
337 << mCoordRotationDDBtn
342 << mDirectSymbLeftDDBtn
343 << mDirectSymbLeftLineEdit
344 << mDirectSymbPlacementDDBtn
345 << mDirectSymbRevChkBx
346 << mDirectSymbRevDDBtn
347 << mDirectSymbRightDDBtn
348 << mDirectSymbRightLineEdit
349 << mFitInsidePolygonCheckBox
350 << mFontBlendModeDDBtn
352 << mFontCapitalsComboBox
357 << mFontLetterSpacingDDBtn
358 << mFontLetterSpacingSpinBox
359 << mFontLimitPixelChkBox
360 << mFontLimitPixelDDBtn
361 << mFontLineHeightDDBtn
362 << mFontLineHeightSpinBox
363 << mFontMaxPixelDDBtn
364 << mFontMaxPixelSpinBox
365 << mFontMinPixelDDBtn
366 << mFontMinPixelSpinBox
367 << mFontMultiLineAlignComboBox
368 << mFontMultiLineAlignDDBtn
371 << mFontStrikeoutDDBtn
372 << mFontStyleComboBox
375 << mTextOpacityWidget
376 << mFontUnderlineDDBtn
378 << mFontWordSpacingDDBtn
379 << mFontWordSpacingSpinBox
382 << mFormatNumDecimalsDDBtn
383 << mFormatNumDecimalsSpnBx
384 << mFormatNumPlusSignChkBx
385 << mFormatNumPlusSignDDBtn
388 << mLimitLabelSpinBox
389 << mLineDistanceDDBtn
390 << mLineDistanceSpnBx
391 << mLineDistanceUnitDDBtn
392 << mLineDistanceUnitWidget
393 << mMaxCharAngleDDBtn
394 << mMaxCharAngleInDSpinBox
395 << mMaxCharAngleOutDSpinBox
397 << mObstacleFactorDDBtn
398 << mObstacleFactorSlider
399 << mObstacleTypeComboBox
400 << mOffsetTypeComboBox
401 << mPalShowAllLabelsForLayerChkBx
402 << mPointAngleSpinBox
404 << mPointOffsetUnitsDDBtn
405 << mPointOffsetUnitWidget
406 << mPointOffsetXSpinBox
407 << mPointOffsetYSpinBox
408 << mPointPositionOrderDDBtn
409 << mPointQuadOffsetDDBtn
410 << mPreviewBackgroundBtn
414 << mRepeatDistanceDDBtn
415 << mRepeatDistanceSpinBox
416 << mRepeatDistanceUnitDDBtn
417 << mRepeatDistanceUnitWidget
418 << mScaleBasedVisibilityChkBx
419 << mScaleBasedVisibilityDDBtn
420 << mScaleBasedVisibilityMaxDDBtn
422 << mScaleBasedVisibilityMinDDBtn
430 << mShadowOffsetAngleDDBtn
431 << mShadowOffsetAngleSpnBx
432 << mShadowOffsetDDBtn
433 << mShadowOffsetGlobalChkBx
434 << mShadowOffsetSpnBx
435 << mShadowOffsetUnitsDDBtn
436 << mShadowOffsetUnitWidget
437 << mShadowRadiusAlphaChkBx
438 << mShadowRadiusDDBtn
439 << mShadowRadiusDblSpnBx
440 << mShadowRadiusUnitsDDBtn
441 << mShadowRadiusUnitWidget
444 << mShadowOpacityDDBtn
445 << mShadowOpacityWidget
449 << mShapeBlendModeDDBtn
450 << mShapeStrokeColorBtn
451 << mShapeStrokeColorDDBtn
452 << mShapeStrokeUnitsDDBtn
453 << mShapeStrokeWidthDDBtn
454 << mShapeStrokeWidthSpnBx
455 << mShapeStrokeWidthUnitWidget
458 << mShapeFillColorBtn
459 << mShapeFillColorDDBtn
461 << mShapeOffsetUnitsDDBtn
462 << mShapeOffsetXSpnBx
463 << mShapeOffsetYSpnBx
464 << mShapeOffsetUnitWidget
465 << mShapePenStyleCmbBx
466 << mShapePenStyleDDBtn
468 << mShapeRadiusUnitsDDBtn
469 << mShapeRadiusXDbSpnBx
470 << mShapeRadiusYDbSpnBx
471 << mShapeRotationCmbBx
472 << mShapeRotationDDBtn
473 << mShapeRotationDblSpnBx
474 << mShapeRotationTypeDDBtn
475 << mShapeRadiusUnitWidget
476 << mShapeSVGPathDDBtn
477 << mShapeSVGPathLineEdit
479 << mShapeSizeTypeDDBtn
480 << mShapeSizeUnitsDDBtn
481 << mShapeSizeUnitWidget
486 << mShapeOpacityDDBtn
487 << mBackgroundOpacityWidget
492 << mAutoWrapLengthDDBtn
497 << mAutoWrapLengthSpinBox
498 << mAutoWrapTypeComboBox
499 << mCentroidRadioVisible
500 << mCentroidRadioWhole
501 << mDirectSymbRadioBtnAbove
502 << mDirectSymbRadioBtnBelow
503 << mDirectSymbRadioBtnLR
504 << mUpsidedownRadioAll
505 << mUpsidedownRadioDefined
506 << mUpsidedownRadioOff
515 << radPolygonHorizontal
516 << radPolygonPerimeter
517 << radPolygonPerimeterCurved
518 << radPredefinedOrder
519 << mFieldExpressionWidget
520 << mCheckBoxSubstituteText;
521 connectValueChanged( widgets, SLOT( updatePreview() ) );
523 connect(
mQuadrantBtnGrp,
static_cast<void ( QButtonGroup::* )(
int )
>( &QButtonGroup::buttonClicked ),
this, &QgsTextFormatWidget::updatePreview );
526 whileBlocking( mOptionsTab )->setCurrentIndex( mLabelStackedWidget->currentIndex() );
541 toggleDDButtons(
true );
545 toggleDDButtons(
false );
546 delete mLabelingOptionsListWidget->takeItem( 6 );
547 delete mLabelingOptionsListWidget->takeItem( 5 );
548 mOptionsTab->removeTab( 6 );
549 mOptionsTab->removeTab( 5 );
551 frameLabelWith->hide();
552 mDirectSymbolsFrame->hide();
553 mFormatNumFrame->hide();
554 mFormatNumChkBx->hide();
555 mFormatNumDDBtn->hide();
556 mSubstitutionsFrame->hide();
557 mFontBoldBtn->hide();
558 mFontItalicBtn->hide();
564 void QgsTextFormatWidget::toggleDDButtons(
bool visible )
568 button->setVisible( visible );
574 mOptionsTab->setVisible( enabled );
575 mOptionsTab->setTabToolTip( 0, tr(
"Text" ) );
576 mOptionsTab->setTabToolTip( 1, tr(
"Formatting" ) );
577 mOptionsTab->setTabToolTip( 2, tr(
"Buffer" ) );
578 mOptionsTab->setTabToolTip( 3, tr(
"Background" ) );
579 mOptionsTab->setTabToolTip( 4, tr(
"Shadow" ) );
580 mOptionsTab->setTabToolTip( 5, tr(
"Placement" ) );
581 mOptionsTab->setTabToolTip( 6, tr(
"Rendering" ) );
583 mLabelingOptionsListFrame->setVisible( !enabled );
584 groupBox_mPreview->setVisible( !enabled );
588 void QgsTextFormatWidget::connectValueChanged(
const QList<QWidget *> &widgets,
const char *slot )
590 Q_FOREACH ( QWidget *widget, widgets )
594 connect( w, SIGNAL( changed() ),
this, slot );
598 connect( w, SIGNAL( fieldChanged( QString ) ),
this, slot );
600 else if (
QgsOpacityWidget *w = qobject_cast< QgsOpacityWidget *>( widget ) )
602 connect( w, SIGNAL( opacityChanged(
double ) ),
this, slot );
604 else if (
QgsScaleWidget *w = qobject_cast< QgsScaleWidget *>( widget ) )
606 connect( w, SIGNAL( scaleChanged(
double ) ),
this, slot );
610 connect( w, SIGNAL( changed() ),
this, slot );
612 else if ( QComboBox *w = qobject_cast<QComboBox *>( widget ) )
614 connect( w, SIGNAL( currentIndexChanged(
int ) ),
this, slot );
616 else if ( QSpinBox *w = qobject_cast<QSpinBox *>( widget ) )
618 connect( w, SIGNAL( valueChanged(
int ) ),
this, slot );
620 else if ( QDoubleSpinBox *w = qobject_cast<QDoubleSpinBox *>( widget ) )
622 connect( w, SIGNAL( valueChanged(
double ) ),
this, slot );
624 else if (
QgsColorButton *w = qobject_cast<QgsColorButton *>( widget ) )
626 connect( w, SIGNAL( colorChanged( QColor ) ),
this, slot );
628 else if ( QCheckBox *w = qobject_cast<QCheckBox *>( widget ) )
630 connect( w, SIGNAL( toggled(
bool ) ),
this, slot );
632 else if ( QRadioButton *w = qobject_cast<QRadioButton *>( widget ) )
634 connect( w, SIGNAL( toggled(
bool ) ),
this, slot );
636 else if ( QLineEdit *w = qobject_cast<QLineEdit *>( widget ) )
638 connect( w, SIGNAL( textEdited( QString ) ),
this, slot );
640 else if ( QSlider *w = qobject_cast<QSlider *>( widget ) )
642 connect( w, SIGNAL( valueChanged(
int ) ),
this, slot );
646 QgsLogger::warning( QStringLiteral(
"Could not create connection for widget %1" ).arg( widget->objectName() ) );
658 mBufferDrawChkBx->setChecked( buffer.
enabled() );
659 spinBufferSize->setValue( buffer.
size() );
660 mBufferUnitWidget->setUnit( buffer.
sizeUnit() );
663 mBufferOpacityWidget->setOpacity( buffer.
opacity() );
664 mBufferJoinStyleComboBox->setPenJoinStyle( buffer.
joinStyle() );
666 comboBufferBlendMode->setBlendMode( buffer.
blendMode() );
672 mBufferEffect->setEnabled(
false );
674 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
676 mFontSizeUnitWidget->setUnit( format.
sizeUnit() );
678 mRefFont = format.
font();
679 mFontSizeSpinBox->setValue( format.
size() );
680 btnTextColor->setColor( format.
color() );
681 mTextOpacityWidget->setOpacity( format.
opacity() );
682 comboBlendMode->setBlendMode( format.
blendMode() );
684 mFontWordSpacingSpinBox->setValue( format.
font().wordSpacing() );
685 mFontLetterSpacingSpinBox->setValue( format.
font().letterSpacing() );
688 updateFont( mRefFont );
691 mFontMissingLabel->setVisible( !format.
fontFound() );
694 QString missingTxt = tr(
"%1 not found. Default substituted." );
695 QString txtPrepend = tr(
"Chosen font" );
700 mFontMissingLabel->setText( missingTxt.arg( txtPrepend ) );
703 mLabelingOptionsListWidget->setCurrentRow( 0 );
705 mFontLineHeightSpinBox->setValue( format.
lineHeight() );
708 mShapeDrawChkBx->setChecked( background.
enabled() );
709 mShapeTypeCmbBx->blockSignals(
true );
710 mShapeTypeCmbBx->setCurrentIndex( background.
type() );
711 mShapeTypeCmbBx->blockSignals(
false );
712 mShapeSVGPathLineEdit->setText( background.
svgFile() );
714 mShapeSizeCmbBx->setCurrentIndex( background.
sizeType() );
715 mShapeSizeXSpnBx->setValue( background.
size().width() );
716 mShapeSizeYSpnBx->setValue( background.
size().height() );
717 mShapeSizeUnitWidget->setUnit( background.
sizeUnit() );
719 mShapeRotationCmbBx->setCurrentIndex( background.
rotationType() );
722 mShapeRotationDblSpnBx->setValue( background.
rotation() );
723 mShapeOffsetXSpnBx->setValue( background.
offset().x() );
724 mShapeOffsetYSpnBx->setValue( background.
offset().y() );
725 mShapeOffsetUnitWidget->setUnit( background.
offsetUnit() );
727 mShapeRadiusXDbSpnBx->setValue( background.
radii().width() );
728 mShapeRadiusYDbSpnBx->setValue( background.
radii().height() );
729 mShapeRadiusUnitWidget->setUnit( background.
radiiUnit() );
732 mShapeFillColorBtn->setColor( background.
fillColor() );
733 mShapeStrokeColorBtn->setColor( background.
strokeColor() );
734 mShapeStrokeWidthSpnBx->setValue( background.
strokeWidth() );
737 mShapePenStyleCmbBx->setPenJoinStyle( background.
joinStyle() );
739 mBackgroundOpacityWidget->setOpacity( background.
opacity() );
740 mShapeBlendCmbBx->setBlendMode( background.
blendMode() );
742 mLoadSvgParams =
false;
743 mShapeTypeCmbBx_currentIndexChanged( background.
type() );
750 mBackgroundEffect->setEnabled(
false );
752 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
755 mShadowDrawChkBx->setChecked( shadow.
enabled() );
757 mShadowOffsetAngleSpnBx->setValue( shadow.
offsetAngle() );
759 mShadowOffsetUnitWidget->setUnit( shadow.
offsetUnit() );
761 mShadowOffsetGlobalChkBx->setChecked( shadow.
offsetGlobal() );
763 mShadowRadiusDblSpnBx->setValue( shadow.
blurRadius() );
766 mShadowRadiusAlphaChkBx->setChecked( shadow.
blurAlphaOnly() );
767 mShadowOpacityWidget->setOpacity( shadow.
opacity() );
768 mShadowScaleSpnBx->setValue( shadow.
scale() );
770 mShadowColorBtn->setColor( shadow.
color() );
771 mShadowBlendCmbBx->setBlendMode( shadow.
blendMode() );
778 settings.
setValue( QStringLiteral(
"Windows/Labeling/FontPreviewSplitState" ), mFontPreviewSplitter->saveState() );
779 settings.
setValue( QStringLiteral(
"Windows/Labeling/OptionsSplitState" ), mLabelingOptionsSplitter->saveState() );
780 settings.
setValue( QStringLiteral(
"Windows/Labeling/Tab" ), mLabelingOptionsListWidget->currentRow() );
786 format.
setColor( btnTextColor->color() );
788 format.
setSize( mFontSizeSpinBox->value() );
790 format.
setOpacity( mTextOpacityWidget->opacity() );
798 buffer.
setEnabled( mBufferDrawChkBx->isChecked() );
799 buffer.
setSize( spinBufferSize->value() );
800 buffer.
setColor( btnBufferColor->color() );
801 buffer.
setOpacity( mBufferOpacityWidget->opacity() );
804 buffer.
setJoinStyle( mBufferJoinStyleComboBox->penJoinStyle() );
806 buffer.
setBlendMode( comboBufferBlendMode->blendMode() );
815 background.
setEnabled( mShapeDrawChkBx->isChecked() );
817 background.
setSvgFile( mShapeSVGPathLineEdit->text() );
819 background.
setSize( QSizeF( mShapeSizeXSpnBx->value(), mShapeSizeYSpnBx->value() ) );
820 background.
setSizeUnit( mShapeSizeUnitWidget->unit() );
823 background.
setRotation( mShapeRotationDblSpnBx->value() );
824 background.
setOffset( QPointF( mShapeOffsetXSpnBx->value(), mShapeOffsetYSpnBx->value() ) );
827 background.
setRadii( QSizeF( mShapeRadiusXDbSpnBx->value(), mShapeRadiusYDbSpnBx->value() ) );
828 background.
setRadiiUnit( mShapeRadiusUnitWidget->unit() );
836 background.
setJoinStyle( mShapePenStyleCmbBx->penJoinStyle() );
837 background.
setOpacity( mBackgroundOpacityWidget->opacity() );
838 background.
setBlendMode( mShapeBlendCmbBx->blendMode() );
847 shadow.
setEnabled( mShadowDrawChkBx->isChecked() );
858 shadow.
setOpacity( mShadowOpacityWidget->opacity() );
859 shadow.
setScale( mShadowScaleSpnBx->value() );
860 shadow.
setColor( mShadowColorBtn->color() );
872 void QgsTextFormatWidget::optionsStackedWidget_CurrentChanged(
int indx )
874 mLabelingOptionsListWidget->blockSignals(
true );
875 mLabelingOptionsListWidget->setCurrentRow( indx );
876 mLabelingOptionsListWidget->blockSignals(
false );
879 void QgsTextFormatWidget::collapseSample(
bool collapse )
883 QList<int> splitSizes = mFontPreviewSplitter->sizes();
884 if ( splitSizes[0] > groupBox_mPreview->height() )
886 int delta = splitSizes[0] - groupBox_mPreview->height();
887 splitSizes[0] -= delta;
888 splitSizes[1] += delta;
889 mFontPreviewSplitter->setSizes( splitSizes );
894 void QgsTextFormatWidget::changeTextColor(
const QColor &color )
900 void QgsTextFormatWidget::updateFont(
const QFont &font )
903 if ( font != mRefFont )
912 mDirectSymbLeftLineEdit->setFont( mRefFont );
913 mDirectSymbRightLineEdit->setFont( mRefFont );
915 blockFontChangeSignals(
true );
916 mFontFamilyCmbBx->setCurrentFont( mRefFont );
917 populateFontStyleComboBox();
918 int idx = mFontCapitalsComboBox->findData( QVariant( (
unsigned int ) mRefFont.capitalization() ) );
919 mFontCapitalsComboBox->setCurrentIndex( idx == -1 ? 0 : idx );
920 mFontUnderlineBtn->setChecked( mRefFont.underline() );
921 mFontStrikethroughBtn->setChecked( mRefFont.strikeOut() );
922 blockFontChangeSignals(
false );
930 void QgsTextFormatWidget::blockFontChangeSignals(
bool blk )
932 mFontFamilyCmbBx->blockSignals( blk );
933 mFontStyleComboBox->blockSignals( blk );
934 mFontCapitalsComboBox->blockSignals( blk );
935 mFontUnderlineBtn->blockSignals( blk );
936 mFontStrikethroughBtn->blockSignals( blk );
937 mFontWordSpacingSpinBox->blockSignals( blk );
938 mFontLetterSpacingSpinBox->blockSignals( blk );
941 void QgsTextFormatWidget::updatePreview()
953 lblFontPreview->setFormat(
format() );
956 void QgsTextFormatWidget::scrollPreview()
958 scrollArea_mPreview->ensureVisible( 0, 0, 0, 0 );
963 scrollArea_mPreview->widget()->setStyleSheet( QStringLiteral(
"background: rgb(%1, %2, %3);" ).arg( QString::number( color.red() ),
964 QString::number( color.green() ),
965 QString::number( color.blue() ) ) );
968 void QgsTextFormatWidget::changeBufferColor(
const QColor &color )
976 QWidget *curWdgt = stackedPlacement->currentWidget();
978 bool showLineFrame =
false;
979 bool showCentroidFrame =
false;
980 bool showQuadrantFrame =
false;
981 bool showFixedQuadrantFrame =
false;
982 bool showPlacementPriorityFrame =
false;
983 bool showOffsetTypeFrame =
false;
984 bool showOffsetFrame =
false;
985 bool showDistanceFrame =
false;
986 bool showRotationFrame =
false;
987 bool showMaxCharAngleFrame =
false;
989 bool enableMultiLinesFrame =
true;
991 if ( ( curWdgt == pagePoint && radAroundPoint->isChecked() )
992 || ( curWdgt == pagePolygon && radAroundCentroid->isChecked() ) )
994 showCentroidFrame = ( curWdgt == pagePolygon && radAroundCentroid->isChecked() );
995 showDistanceFrame =
true;
997 if ( curWdgt == pagePoint )
999 showQuadrantFrame =
true;
1002 else if ( ( curWdgt == pagePoint && radOverPoint->isChecked() )
1003 || ( curWdgt == pagePolygon && radOverCentroid->isChecked() ) )
1005 showCentroidFrame = ( curWdgt == pagePolygon && radOverCentroid->isChecked() );
1006 showQuadrantFrame =
true;
1007 showFixedQuadrantFrame =
true;
1008 showOffsetFrame =
true;
1009 showRotationFrame =
true;
1011 else if ( curWdgt == pagePoint && radPredefinedOrder->isChecked() )
1013 showDistanceFrame =
true;
1014 showPlacementPriorityFrame =
true;
1015 showOffsetTypeFrame =
true;
1017 else if ( ( curWdgt == pageLine && radLineParallel->isChecked() )
1018 || ( curWdgt == pagePolygon && radPolygonPerimeter->isChecked() )
1019 || ( curWdgt == pageLine && radLineCurved->isChecked() )
1020 || ( curWdgt == pagePolygon && radPolygonPerimeterCurved->isChecked() ) )
1022 showLineFrame =
true;
1023 showDistanceFrame =
true;
1026 bool offline = chkLineAbove->isChecked() || chkLineBelow->isChecked();
1027 chkLineOrientationDependent->setEnabled( offline );
1028 mPlacementDistanceFrame->setEnabled( offline );
1030 bool isCurved = ( curWdgt == pageLine && radLineCurved->isChecked() )
1031 || ( curWdgt == pagePolygon && radPolygonPerimeterCurved->isChecked() );
1032 showMaxCharAngleFrame = isCurved;
1034 enableMultiLinesFrame = !isCurved;
1037 mPlacementLineFrame->setVisible( showLineFrame );
1038 mPlacementCentroidFrame->setVisible( showCentroidFrame );
1039 mPlacementQuadrantFrame->setVisible( showQuadrantFrame );
1040 mPlacementFixedQuadrantFrame->setVisible( showFixedQuadrantFrame );
1041 mPlacementCartographicFrame->setVisible( showPlacementPriorityFrame );
1042 mPlacementOffsetFrame->setVisible( showOffsetFrame );
1043 mPlacementDistanceFrame->setVisible( showDistanceFrame );
1044 mPlacementOffsetTypeFrame->setVisible( showOffsetTypeFrame );
1045 mPlacementRotationFrame->setVisible( showRotationFrame );
1046 mPlacementRepeatDistanceFrame->setVisible( curWdgt == pageLine || ( curWdgt == pagePolygon &&
1047 ( radPolygonPerimeter->isChecked() || radPolygonPerimeterCurved->isChecked() ) ) );
1048 mPlacementMaxCharAngleFrame->setVisible( showMaxCharAngleFrame );
1050 mMultiLinesFrame->setEnabled( enableMultiLinesFrame );
1053 void QgsTextFormatWidget::populateFontCapitalsComboBox()
1055 mFontCapitalsComboBox->addItem( tr(
"No change" ), QVariant( 0 ) );
1056 mFontCapitalsComboBox->addItem( tr(
"All uppercase" ), QVariant( 1 ) );
1057 mFontCapitalsComboBox->addItem( tr(
"All lowercase" ), QVariant( 2 ) );
1061 mFontCapitalsComboBox->addItem( tr(
"Capitalize first letter" ), QVariant( 4 ) );
1064 void QgsTextFormatWidget::populateFontStyleComboBox()
1066 mFontStyleComboBox->clear();
1067 QStringList styles = mFontDB.styles( mRefFont.family() );
1068 Q_FOREACH (
const QString &style, styles )
1070 mFontStyleComboBox->addItem( style );
1073 QString targetStyle = mFontDB.styleString( mRefFont );
1074 if ( !styles.contains( targetStyle ) )
1076 QFont f = QFont( mRefFont.family() );
1077 targetStyle = QFontInfo( f ).styleName();
1078 mRefFont.setStyleName( targetStyle );
1081 int stylIndx = mFontStyleComboBox->findText( targetStyle );
1082 if ( stylIndx > -1 )
1087 mFontStyleComboBox->setCurrentIndex( curIndx );
1090 void QgsTextFormatWidget::mFontSizeSpinBox_valueChanged(
double d )
1092 mRefFont.setPointSizeF( d );
1093 updateFont( mRefFont );
1096 void QgsTextFormatWidget::mFontCapitalsComboBox_currentIndexChanged(
int index )
1098 int capitalsindex = mFontCapitalsComboBox->itemData( index ).toUInt();
1099 mRefFont.setCapitalization( ( QFont::Capitalization ) capitalsindex );
1100 updateFont( mRefFont );
1103 void QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged(
const QFont &f )
1105 mRefFont.setFamily( f.family() );
1106 updateFont( mRefFont );
1109 void QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged(
const QString &text )
1112 updateFont( mRefFont );
1115 void QgsTextFormatWidget::mFontUnderlineBtn_toggled(
bool ckd )
1117 mRefFont.setUnderline( ckd );
1118 updateFont( mRefFont );
1121 void QgsTextFormatWidget::mFontStrikethroughBtn_toggled(
bool ckd )
1123 mRefFont.setStrikeOut( ckd );
1124 updateFont( mRefFont );
1127 void QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged(
double spacing )
1129 mRefFont.setWordSpacing( spacing );
1130 updateFont( mRefFont );
1133 void QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged(
double spacing )
1135 mRefFont.setLetterSpacing( QFont::AbsoluteSpacing, spacing );
1136 updateFont( mRefFont );
1139 void QgsTextFormatWidget::mFontSizeUnitWidget_changed()
1144 mFontLimitPixelChkBox->setChecked(
false );
1150 mFontLimitPixelChkBox->setChecked(
true );
1152 updateFont( mRefFont );
1155 void QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged(
int px )
1158 mFontMaxPixelSpinBox->setMinimum( px );
1159 mFontMaxPixelSpinBox->update();
1162 void QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged(
int px )
1165 if ( px < mFontMinPixelSpinBox->value() )
1167 mFontMaxPixelSpinBox->blockSignals(
true );
1168 mFontMaxPixelSpinBox->setValue( mFontMinPixelSpinBox->value() );
1169 mFontMaxPixelSpinBox->blockSignals(
false );
1171 mFontMaxPixelSpinBox->setMinimum( mFontMinPixelSpinBox->value() );
1174 void QgsTextFormatWidget::mBufferUnitWidget_changed()
1176 updateFont( mRefFont );
1179 void QgsTextFormatWidget::mCoordXDDBtn_activated(
bool active )
1185 else if ( mCoordYDDBtn->isActive() )
1191 void QgsTextFormatWidget::mCoordYDDBtn_activated(
bool active )
1197 else if ( mCoordXDDBtn->isActive() )
1203 void QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged(
int index )
1210 showBackgroundPenStyle( isRect );
1211 showBackgroundRadius( isRect );
1213 mShapeSVGPathFrame->setVisible( isSVG );
1215 mShapeSizeYLabel->setVisible( !isSVG );
1216 mShapeSizeYSpnBx->setVisible( !isSVG );
1217 mShapeSizeYDDBtn->setVisible( !isSVG && mWidgetMode ==
Labeling );
1218 mShapeSizeXLabel->setText( tr(
"Size%1" ).arg( !isSVG ? tr(
" X" ) : QString() ) );
1221 mShapeFillColorBtn->setAllowOpacity( !isSVG );
1222 mShapeFillColorBtn->setButtonBackground();
1223 mShapeStrokeColorBtn->setAllowOpacity( !isSVG );
1224 mShapeStrokeColorBtn->setButtonBackground();
1227 mShapeSVGParamsBtn->setVisible( isSVG );
1230 updateSvgWidgets( mShapeSVGPathLineEdit->text() );
1234 mShapeFillColorLabel->setEnabled(
true );
1235 mShapeFillColorBtn->setEnabled(
true );
1236 mShapeFillColorDDBtn->setEnabled(
true );
1237 mShapeStrokeColorLabel->setEnabled(
true );
1238 mShapeStrokeColorBtn->setEnabled(
true );
1239 mShapeStrokeColorDDBtn->setEnabled(
true );
1240 mShapeStrokeWidthLabel->setEnabled(
true );
1241 mShapeStrokeWidthSpnBx->setEnabled(
true );
1242 mShapeStrokeWidthDDBtn->setEnabled(
true );
1246 mShapeStrokeWidthUnitWidget->setVisible( !isSVG );
1247 mShapeSVGUnitsLabel->setVisible( isSVG );
1248 mShapeStrokeUnitsDDBtn->setEnabled( !isSVG );
1251 void QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged(
const QString &text )
1253 updateSvgWidgets( text );
1258 int numOptionsChecked = ( chkLineAbove->isChecked() ? 1 : 0 ) +
1259 ( chkLineBelow->isChecked() ? 1 : 0 ) +
1260 ( chkLineOn->isChecked() ? 1 : 0 );
1262 if ( numOptionsChecked == 1 )
1265 chkLineAbove->setEnabled( !chkLineAbove->isChecked() );
1266 chkLineBelow->setEnabled( !chkLineBelow->isChecked() );
1267 chkLineOn->setEnabled( !chkLineOn->isChecked() );
1271 chkLineAbove->setEnabled(
true );
1272 chkLineBelow->setEnabled(
true );
1273 chkLineOn->setEnabled(
true );
1283 void QgsTextFormatWidget::previewScaleChanged(
double scale )
1285 lblFontPreview->setScale( scale );
1288 void QgsTextFormatWidget::updateSvgWidgets(
const QString &svgPath )
1290 if ( mShapeSVGPathLineEdit->text() != svgPath )
1292 mShapeSVGPathLineEdit->setText( svgPath );
1295 QString resolvedPath;
1296 bool validSVG =
true;
1297 if ( ! svgPath.startsWith( QLatin1String(
"base64:" ), Qt::CaseInsensitive ) )
1300 validSVG = QFileInfo::exists( resolvedPath );
1304 resolvedPath = svgPath;
1309 mShapeSVGPathLineEdit->setStyleSheet( !validSVG ? QStringLiteral(
"QLineEdit{ color: rgb(225, 0, 0); }" ) : QString() );
1310 mShapeSVGPathLineEdit->setToolTip( !validSVG ? tr(
"File not found" ) : resolvedPath );
1312 QColor fill, stroke;
1313 double strokeWidth = 0.0;
1314 bool fillParam =
false, strokeParam =
false, strokeWidthParam =
false;
1320 mShapeSVGParamsBtn->setEnabled( validSVG && ( fillParam || strokeParam || strokeWidthParam ) );
1322 mShapeFillColorLabel->setEnabled( validSVG && fillParam );
1323 mShapeFillColorBtn->setEnabled( validSVG && fillParam );
1324 mShapeFillColorDDBtn->setEnabled( validSVG && fillParam );
1325 if ( mLoadSvgParams && validSVG && fillParam )
1326 mShapeFillColorBtn->setColor( fill );
1328 mShapeStrokeColorLabel->setEnabled( validSVG && strokeParam );
1329 mShapeStrokeColorBtn->setEnabled( validSVG && strokeParam );
1330 mShapeStrokeColorDDBtn->setEnabled( validSVG && strokeParam );
1331 if ( mLoadSvgParams && validSVG && strokeParam )
1332 mShapeStrokeColorBtn->setColor( stroke );
1334 mShapeStrokeWidthLabel->setEnabled( validSVG && strokeWidthParam );
1335 mShapeStrokeWidthSpnBx->setEnabled( validSVG && strokeWidthParam );
1336 mShapeStrokeWidthDDBtn->setEnabled( validSVG && strokeWidthParam );
1337 if ( mLoadSvgParams && validSVG && strokeWidthParam )
1338 mShapeStrokeWidthSpnBx->setValue( strokeWidth );
1344 mShapeSVGUnitsLabel->setEnabled( validSVG && strokeWidthParam );
1347 void QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked()
1350 svgDlg.setWindowTitle( tr(
"Select SVG file" ) );
1353 if ( svgDlg.exec() == QDialog::Accepted )
1356 if ( !svgPath.isEmpty() )
1358 mShapeSVGPathLineEdit->setText( svgPath );
1364 void QgsTextFormatWidget::mShapeSVGParamsBtn_clicked()
1366 QString svgPath = mShapeSVGPathLineEdit->text();
1367 mLoadSvgParams =
true;
1368 updateSvgWidgets( svgPath );
1369 mLoadSvgParams =
false;
1372 void QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged(
int index )
1378 void QgsTextFormatWidget::mPreviewTextEdit_textChanged(
const QString &text )
1380 lblFontPreview->setText( text );
1384 void QgsTextFormatWidget::mPreviewTextBtn_clicked()
1386 mPreviewTextEdit->setText( QStringLiteral(
"Lorem Ipsum" ) );
1390 void QgsTextFormatWidget::mPreviewBackgroundBtn_colorChanged(
const QColor &color )
1395 void QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked()
1397 bool gotChar =
false;
1398 QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ) );
1403 if ( !dirSymb.isNull() )
1404 mDirectSymbLeftLineEdit->setText( QString( dirSymb ) );
1407 void QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked()
1409 bool gotChar =
false;
1410 QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ) );
1415 if ( !dirSymb.isNull() )
1416 mDirectSymbRightLineEdit->setText( QString( dirSymb ) );
1419 void QgsTextFormatWidget::mChkNoObstacle_toggled(
bool active )
1421 mPolygonObstacleTypeFrame->setEnabled( active );
1422 mObstaclePriorityFrame->setEnabled( active );
1425 void QgsTextFormatWidget::chkLineOrientationDependent_toggled(
bool active )
1429 chkLineAbove->setText( tr(
"Left of line" ) );
1430 chkLineBelow->setText( tr(
"Right of line" ) );
1434 chkLineAbove->setText( tr(
"Above line" ) );
1435 chkLineBelow->setText( tr(
"Below line" ) );
1440 void QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked()
1455 if ( dlg.exec() == QDialog::Accepted )
1462 void QgsTextFormatWidget::showBackgroundRadius(
bool show )
1464 mShapeRadiusLabel->setVisible( show );
1465 mShapeRadiusXDbSpnBx->setVisible( show );
1467 mShapeRadiusYDbSpnBx->setVisible( show );
1469 mShapeRadiusUnitWidget->setVisible( show );
1471 mShapeRadiusDDBtn->setVisible( show && mWidgetMode ==
Labeling );
1472 mShapeRadiusUnitsDDBtn->setVisible( show && mWidgetMode ==
Labeling );
1475 void QgsTextFormatWidget::showBackgroundPenStyle(
bool show )
1477 mShapePenStyleLabel->setVisible( show );
1478 mShapePenStyleCmbBx->setVisible( show );
1480 mShapePenStyleDDBtn->setVisible( show && mWidgetMode ==
Labeling );
1485 mCoordAlignmentFrame->setEnabled( enable );
1494 : QDialog( parent, fl )
1496 setWindowTitle( tr(
"Text Settings" ) );
1499 mFormatWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
1501 QVBoxLayout *layout =
new QVBoxLayout(
this );
1502 layout->addWidget( mFormatWidget );
1504 QDialogButtonBox *buttonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal,
this );
1505 layout->addWidget( buttonBox );
1507 setLayout( layout );
1510 restoreGeometry( settings.
value( QStringLiteral(
"Windows/TextFormatDialog/geometry" ) ).toByteArray() );
1512 connect( buttonBox->button( QDialogButtonBox::Ok ), &QAbstractButton::clicked,
this, &QDialog::accept );
1513 connect( buttonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked,
this, &QDialog::reject );
1524 return mFormatWidget->
format();
1536 return mFormatWidget->
format();
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the buffer.
static QgsSvgCache * svgCache()
Returns the application's SVG cache, used for caching SVG images and handling parameter replacement w...
QColor strokeColor() const
Returns the color used for outlining the background shape.
void setScale(int scale)
Sets the scaling used for the drop shadow (in percentage of original size).
Meters value as Map units.
void setLineHeight(double height)
Sets the line height for text.
void setRadiiUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shape's radii.
void setStrokeWidth(double width)
Sets the width of the shape's stroke (stroke).
RotationType
Methods for determining the rotation of the background shape.
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shadow offset distance.
void setOpacity(double opacity)
Sets the text's opacity.
void setStrokeWidthMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape stroke width.
void setOffsetUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shadow's offset.
QgsTextShadowSettings::ShadowPlacement shadowPlacement() const
Returns the placement for the drop shadow.
QSizeF radii() const
Returns the radii used for rounding the corners of shapes.
QSizeF size() const
Returns the size of the background shape.
double opacity() const
Returns the text's opacity.
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units used for the shape's size.
bool fontFound() const
Returns true if the specified font was found on the system, or false if the font was not found and a ...
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the drop shadow.
QPointF offset() const
Returns the offset used for drawing the background shape.
QColor fillColor() const
Returns the color used for filing the background shape.
QgsMapUnitScale strokeWidthMapUnitScale() const
Returns the map unit scale object for the shape stroke width.
void setDockMode(bool enabled)
Sets whether the widget should be shown in a compact dock mode.
This class is a composition of two QSettings instances:
A groupbox that collapses/expands when toggled and can save its collapsed and checked states...
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
ShadowPlacement
Placement positions for text shadow.
int scaleIconSize(int standardSize)
Scales an icon size to compensate for display pixel density, making the icon size hi-dpi friendly...
Place direction symbols on below label.
QgsTextShadowSettings & shadow()
Returns a reference to the text drop shadow settings.
double blurRadius() const
Returns the blur radius for the shadow.
double opacity() const
Returns the background shape's opacity.
static void warning(const QString &msg)
Goes to qWarning.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the size.
void setStrokeColor(const QColor &color)
Sets the color used for outlining the background shape.
void setSize(double size)
Sets the size of the buffer.
double strokeWidth() const
Returns the width of the shape's stroke (stroke).
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units used for the buffer size.
double offsetDistance() const
Returns the distance for offsetting the position of the shadow from the text.
QButtonGroup * mUpsidedownBtnGrp
Upside down labels button group.
void setFont(const QFont &font)
Sets the font used for rendering text.
void setJoinStyle(Qt::PenJoinStyle style)
Sets the join style used for drawing the buffer.
static bool isDefaultStack(QgsPaintEffect *effect)
Tests whether a paint effect matches the default effects stack.
void collapsedStateChanged(bool collapsed)
Signal emitted when groupbox collapsed/expanded state is changed, and when first shown.
Candidates are placed in predefined positions around a point. Preference is given to positions with g...
void setOffsetUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shape's offset.
QColor color() const
Returns the color that text will be rendered in.
void setFillBufferInterior(bool fill)
Sets whether the interior of the buffer will be filled in.
void setBlurRadius(double blurRadius)
Sets the blur radius for the shadow.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the buffer.
void setOpacity(double opacity)
Sets the shadow's opacity.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape size.
void setDockMode(bool dockMode) override
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs...
static QIcon getThemeIcon(const QString &name)
Helper to get a theme icon.
void updateWidgetForFormat(const QgsTextFormat &format)
Updates the widget's state to reflect the settings in a QgsTextFormat.
QgsTextFormat format() const
Returns the current formatting settings defined by the widget.
A dialog for selecting a single character from a single font.
void setBackground(const QgsTextBackgroundSettings &backgroundSettings)
Sets the text's background settings.q.
void setJoinStyle(Qt::PenJoinStyle style)
Sets the join style used for drawing the background shape.
Container for settings relating to a text background object.
A widget for customizing text formatting settings.
Percentage of another measurement (e.g., canvas size, feature size)
QgsMapUnitScale offsetMapUnitScale() const
Returns the map unit scale object for the shape offset.
void setRadiiMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape radii.
void setBlurRadiusUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shadow's blur radius.
void setBlurRadiusMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shadow blur radius.
QList< QgsUnitTypes::RenderUnit > RenderUnitList
List of render units.
Map canvas is a class for displaying all GIS data types on a canvas.
Show labeling settings in addition to text formatting settings.
ShapeType type() const
Returns the type of background shape (e.g., square, ellipse, SVG).
void setOffset(QPointF offset)
Sets the offset used for drawing the background shape.
virtual QgsPaintEffect * clone() const =0
Duplicates an effect by creating a deep copy of the effect.
Qt::PenJoinStyle joinStyle() const
Returns the buffer join style.
Arranges candidates following the curvature of a line feature. Applies to line layers only...
QgsUnitTypes::DistanceUnit mapUnits() const
Gets units of map's geographical coordinates - used for scale calculation.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the buffer size.
void saveGeometry(QWidget *widget, const QString &keyName)
Save the wigget geometry into settings.
Place direction symbols on left/right of label.
bool restoreGeometry(QWidget *widget, const QString &keyName)
Restore the wigget geometry from settings.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the background shape.
QgsMapUnitScale offsetMapUnitScale() const
Returns the map unit scale object for the shadow offset distance.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the text.
QColor color() const
Returns the color of the drop shadow.
void setSize(double size)
Sets the size for rendered text.
void setOffsetDistance(double distance)
Sets the distance for offsetting the position of the shadow from the text.
void widgetChanged()
Emitted when the text format defined by the widget changes.
static QgsPaintEffect * defaultStack()
Returns a new effect stack consisting of a sensible selection of default effects. ...
QgsMapUnitScale blurRadiusMapUnitScale() const
Returns the map unit scale object for the shadow blur radius.
Offset distance applies from point geometry.
Default mode, show text formatting settings only.
bool fillBufferInterior() const
Returns whether the interior of the buffer will be filled in.
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape offset.
void setBlurAlphaOnly(bool alphaOnly)
Sets whether only the alpha channel for the shadow should be blurred.
RotationType rotationType() const
Returns the method used for rotating the background shape.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the buffer size.
double scale() const
Returns the calculated map scale.
Show upside down for all labels, including dynamic ones.
QgsPaintEffect * paintEffect() const
Returns the current paint effect for the background shape.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the drop shadow.
void enableDataDefinedAlignment(bool enable)
Controls whether data defined alignment buttons are enabled.
void setColor(const QColor &color)
Sets the color for the drop shadow.
points (e.g., for font sizes)
void setEnabled(bool enabled)
Sets whether the text shadow will be drawn.
void setEnabled(bool enabled)
Sets whether the text buffer will be drawn.
void setFormat(const QgsTextFormat &format)
Sets the current formatting settings.
Arranges candidates in a circle around a point (or centroid of a polygon). Applies to point or polygo...
void setColor(const QColor &color)
Sets the color that text will be rendered in.
QgsMapUnitScale radiiMapUnitScale() const
Returns the map unit scale object for the shape radii.
QString svgFile() const
Returns the absolute path to the background SVG file, if set.
Qt::PenJoinStyle joinStyle() const
Returns the join style used for drawing the background shape.
void setNamedStyle(const QString &style)
Sets the named style for the font used for rendering text.
QgsTextBackgroundSettings & background()
Returns a reference to the text background settings.
QgsTextBufferSettings & buffer()
Returns a reference to the text buffer settings.
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the size of rendered text.
Upside-down labels (90 <= angle < 270) are shown upright.
SizeType
Methods for determining the background shape size.
double opacity() const
Returns the buffer opacity.
void updateLinePlacementOptions()
Updates line placement options to reflect current state of widget.
void setSize(QSizeF size)
Sets the size of the background shape.
QgsStringReplacementCollection mSubstitutions
Text substitution list.
void setSettingGroup(const QString &group)
Sets this to a defined string to share save/restore states across different parent dialogs...
void setRadii(QSizeF radii)
Sets the radii used for rounding the corners of shapes.
void setPreviewBackground(const QColor &color)
Sets the background color for the text preview widget.
QgsUnitTypes::RenderUnit strokeWidthUnit() const
Returns the units used for the shape's stroke width.
Offset distance applies from rendered symbol bounds.
void setSizeType(SizeType type)
Sets the method used to determine the size of the background shape (e.g., fixed size or buffer around...
const QChar & selectCharacter(bool *gotChar, const QFont &font, const QString &style)
void setType(ShapeType type)
Sets the type of background shape to draw (e.g., square, ellipse, SVG).
Place direction symbols on above label.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the background shape.
QgsTextFormat format() const
Returns the current formatting settings defined by the widget.
void containsParams(const QString &path, bool &hasFillParam, QColor &defaultFillColor, bool &hasStrokeParam, QColor &defaultStrokeColor, bool &hasStrokeWidthParam, double &defaultStrokeWidth) const
Tests if an svg file contains parameters for fill, stroke color, stroke width.
QgsUnitTypes::RenderUnit offsetUnit() const
Returns the units used for the shape's offset.
double rotation() const
Returns the rotation for the background shape, in degrees clockwise.
double lineHeight() const
Returns the line height for text.
QButtonGroup * mPlaceLineBtnGrp
Line placement button group.
void setEnabled(bool enabled)
Sets whether the text background will be drawn.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
int offsetAngle() const
Returns the angle for offsetting the position of the shadow from the text.
ShapeType
Background shape types.
QgsSvgSelectorWidget * svgSelector()
Returns pointer to the embedded SVG selector widget.
Arranges candidates over a point (or centroid of a polygon), or at a preset offset from the point...
QgsTextFormat format() const
Returns the current formatting settings defined by the widget.
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
~QgsTextFormatWidget() override
static bool fontFamilyMatchOnSystem(const QString &family, QString *chosen=nullptr, bool *match=nullptr)
Check whether font family is on system.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the size.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the buffer size.
QgsUnitTypes::RenderUnit offsetUnit() const
Returns the units used for the shadow's offset.
bool enabled() const
Returns whether the shadow is enabled.
QgsTextFormatWidget(const QgsTextFormat &format=QgsTextFormat(), QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr)
Constructor for QgsTextFormatWidget.
QButtonGroup * mPlacePolygonBtnGrp
Polygon placement button group.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
Container for settings relating to a text shadow.
A collection of string replacements (specified using QgsStringReplacement objects).
bool offsetGlobal() const
Returns true if the global shadow offset will be used.
QColor color() const
Returns the color of the buffer.
double size() const
Returns the size of the buffer.
QgsUnitTypes::RenderUnit radiiUnit() const
Returns the units used for the shape's radii.
Container for settings relating to a text buffer.
void setFillColor(const QColor &color)
Sets the color used for filing the background shape.
static bool updateFontViaStyle(QFont &f, const QString &fontstyle, bool fallback=false)
Updates font with named style and retain all font properties.
static QgsProject * instance()
Returns the QgsProject singleton instance.
double size() const
Returns the size for rendered text.
void setStrokeWidthUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shape's stroke width.
bool enabled() const
Returns whether the background is enabled.
int mMinPixelLimit
Pixel size font limit.
~QgsTextFormatDialog() override
SizeType sizeType() const
Returns the method used to determine the size of the background shape (e.g., fixed size or buffer aro...
void setSubstitutions(const QgsStringReplacementCollection &substitutions)
Sets the list of substitutions to show in the dialog.
QgsUnitTypes::RenderUnit blurRadiusUnit() const
Returns the units used for the shadow's blur radius.
bool enabled() const
Returns whether the buffer is enabled.
int scale() const
Returns the scaling used for the drop shadow (in percentage of original size).
Shape rotation is synced with text rotation.
QButtonGroup * mQuadrantBtnGrp
Quadrant button group.
void setShadowPlacement(QgsTextShadowSettings::ShadowPlacement placement)
Sets the placement for the drop shadow.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the text.
void setBuffer(const QgsTextBufferSettings &bufferSettings)
Sets the text's buffer settings.
void setShadow(const QgsTextShadowSettings &shadowSettings)
Sets the text's drop shadow settings.
A dialog which allows users to specify a list of substitutions to apply to a string, with options for exporting and importing substitution lists.
QgsPaintEffect * paintEffect() const
Returns the current paint effect for the buffer.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the shape size.
static QString svgSymbolNameToPath(const QString &name, const QgsPathResolver &pathResolver)
Determines an SVG symbol's path from its name.
Show upside down when rotation is layer- or data-defined.
void updatePlacementWidgets()
Updates label placement options to reflect current state of widget.
Container for all settings relating to text rendering.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the size of rendered text.
bool contains(const QString &key, QgsSettings::Section section=QgsSettings::NoSection) const
Returns true if there exists a setting called key; returns false otherwise.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the buffer.
void setSvgFile(const QString &file)
Sets the path to the background SVG file.
bool blurAlphaOnly() const
Returns whether only the alpha channel for the shadow will be blurred.
void setOffsetGlobal(bool global)
Sets whether the global shadow offset should be used.
QButtonGroup * mPlacePointBtnGrp
Point placement button group.
void setOpacity(double opacity)
Sets the buffer opacity.
Square - buffered sizes only.
QgsStringReplacementCollection substitutions
QgsTextFormatPanelWidget(const QgsTextFormat &format, QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr)
Constructor for QgsTextFormatPanelWidget.
QString namedStyle() const
Returns the named style for the font used for rendering text (e.g., "bold").
QFont font() const
Returns the font used for rendering text.
void setRotationType(RotationType type)
Sets the method used for rotating the background shape.
void setColor(const QColor &color)
Sets the color for the buffer.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units used for the shape's size.
QButtonGroup * mDirectSymbBtnGrp
Symbol direction button group.
double opacity() const
Returns the shadow's opacity.
void setOpacity(double opacity)
Sets the background shape's opacity.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the background shape.
QString resolvedFontFamily() const
Returns the family for the resolved font, ie if the specified font was not found on the system this w...
QgsTextFormatDialog(const QgsTextFormat &format, QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, Qt::WindowFlags fl=QgsGuiUtils::ModalDialogFlags)
Constructor for QgsTextFormatDialog.
void setOffsetAngle(int angle)
Sets the angle for offsetting the position of the shadow from the text.
Arranges candidates scattered throughout a polygon feature. Candidates are rotated to respect the pol...
void setRotation(double rotation)
Sets the rotation for the background shape, in degrees clockwise.