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 );
114 const auto unitWidgets = findChildren<QgsUnitSelectionWidget *>();
117 unitWidget->setMapCanvas( mMapCanvas );
143 mFontLineHeightSpinBox->setClearValue( 1.0 );
144 mShapeRotationDblSpnBx->setClearValue( 0.0 );
145 mShapeOffsetXSpnBx->setClearValue( 0.0 );
146 mShapeOffsetYSpnBx->setClearValue( 0.0 );
147 mPointOffsetXSpinBox->setClearValue( 0.0 );
148 mPointOffsetYSpinBox->setClearValue( 0.0 );
149 mPointAngleSpinBox->setClearValue( 0.0 );
150 mFontLetterSpacingSpinBox->setClearValue( 0.0 );
151 mFontWordSpacingSpinBox->setClearValue( 0.0 );
152 mZIndexSpinBox->setClearValue( 0.0 );
153 mLineDistanceSpnBx->setClearValue( 0.0 );
163 mRefFont = lblFontPreview->font();
166 connect( mShadowOffsetAngleDial, &QAbstractSlider::valueChanged, mShadowOffsetAngleSpnBx, &QSpinBox::setValue );
167 connect( mShadowOffsetAngleSpnBx, static_cast <
void ( QSpinBox::* )(
int ) > ( &QSpinBox::valueChanged ), mShadowOffsetAngleDial, &QAbstractSlider::setValue );
168 connect( mLimitLabelChkBox, &QAbstractButton::toggled, mLimitLabelSpinBox, &QWidget::setEnabled );
169 connect( mCheckBoxSubstituteText, &QAbstractButton::toggled, mToolButtonConfigureSubstitutes, &QWidget::setEnabled );
176 populateFontCapitalsComboBox();
179 mPreviewBackgroundBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
180 mPreviewBackgroundBtn->setContext( QStringLiteral(
"labeling" ) );
181 mPreviewBackgroundBtn->setColor( QColor( 255, 255, 255 ) );
182 btnTextColor->setColorDialogTitle( tr(
"Select Text Color" ) );
183 btnTextColor->setContext( QStringLiteral(
"labeling" ) );
184 btnTextColor->setDefaultColor( Qt::black );
185 btnBufferColor->setColorDialogTitle( tr(
"Select Buffer Color" ) );
186 btnBufferColor->setContext( QStringLiteral(
"labeling" ) );
187 btnBufferColor->setDefaultColor( Qt::white );
188 mShapeStrokeColorBtn->setColorDialogTitle( tr(
"Select Stroke Color" ) );
189 mShapeStrokeColorBtn->setContext( QStringLiteral(
"labeling" ) );
190 mShapeFillColorBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
191 mShapeFillColorBtn->setContext( QStringLiteral(
"labeling" ) );
192 mShadowColorBtn->setColorDialogTitle( tr(
"Select Shadow Color" ) );
193 mShadowColorBtn->setContext( QStringLiteral(
"labeling" ) );
194 mShadowColorBtn->setDefaultColor( Qt::black );
196 mFontColorDDBtn->registerLinkedWidget( btnTextColor );
197 mBufferColorDDBtn->registerLinkedWidget( btnBufferColor );
198 mShapeStrokeColorDDBtn->registerLinkedWidget( mShapeStrokeColorBtn );
199 mShapeFillColorDDBtn->registerLinkedWidget( mShapeFillColorBtn );
200 mShadowColorDDBtn->registerLinkedWidget( mShadowColorBtn );
264 const auto groupBoxes = findChildren<QgsCollapsibleGroupBox *>();
267 grpbox->setSettingGroup( QStringLiteral(
"mAdvLabelingDlg" ) );
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() );
307 QList<QWidget *> widgets;
308 widgets << btnBufferColor
310 << chkLabelPerFeaturePart
314 << chkLineOrientationDependent
316 << chkPreserveRotation
318 << comboBufferBlendMode
320 << mBufferBlendModeDDBtn
324 << mBufferJoinStyleComboBox
325 << mBufferJoinStyleDDBtn
327 << mBufferOpacityDDBtn
328 << mBufferTranspFillChbx
329 << mBufferOpacityWidget
332 << mCentroidInsideCheckBox
334 << mCoordAlignmentHDDBtn
335 << mCoordAlignmentVDDBtn
336 << mCoordRotationDDBtn
341 << mDirectSymbLeftDDBtn
342 << mDirectSymbLeftLineEdit
343 << mDirectSymbPlacementDDBtn
344 << mDirectSymbRevChkBx
345 << mDirectSymbRevDDBtn
346 << mDirectSymbRightDDBtn
347 << mDirectSymbRightLineEdit
348 << mFitInsidePolygonCheckBox
349 << mFontBlendModeDDBtn
351 << mFontCapitalsComboBox
356 << mFontLetterSpacingDDBtn
357 << mFontLetterSpacingSpinBox
358 << mFontLimitPixelChkBox
359 << mFontLimitPixelDDBtn
360 << mFontLineHeightDDBtn
361 << mFontLineHeightSpinBox
362 << mFontMaxPixelDDBtn
363 << mFontMaxPixelSpinBox
364 << mFontMinPixelDDBtn
365 << mFontMinPixelSpinBox
366 << mFontMultiLineAlignComboBox
367 << mFontMultiLineAlignDDBtn
370 << mFontStrikeoutDDBtn
371 << mFontStyleComboBox
374 << mTextOpacityWidget
375 << mFontUnderlineDDBtn
377 << mFontWordSpacingDDBtn
378 << mFontWordSpacingSpinBox
381 << mFormatNumDecimalsDDBtn
382 << mFormatNumDecimalsSpnBx
383 << mFormatNumPlusSignChkBx
384 << mFormatNumPlusSignDDBtn
387 << mLimitLabelSpinBox
388 << mLineDistanceDDBtn
389 << mLineDistanceSpnBx
390 << mLineDistanceUnitDDBtn
391 << mLineDistanceUnitWidget
392 << mMaxCharAngleDDBtn
393 << mMaxCharAngleInDSpinBox
394 << mMaxCharAngleOutDSpinBox
396 << mObstacleFactorDDBtn
397 << mObstacleFactorSlider
398 << mObstacleTypeComboBox
399 << mOffsetTypeComboBox
400 << mPalShowAllLabelsForLayerChkBx
401 << mPointAngleSpinBox
403 << mPointOffsetUnitsDDBtn
404 << mPointOffsetUnitWidget
405 << mPointOffsetXSpinBox
406 << mPointOffsetYSpinBox
407 << mPointPositionOrderDDBtn
408 << mPointQuadOffsetDDBtn
409 << mPreviewBackgroundBtn
413 << mRepeatDistanceDDBtn
414 << mRepeatDistanceSpinBox
415 << mRepeatDistanceUnitDDBtn
416 << mRepeatDistanceUnitWidget
417 << mScaleBasedVisibilityChkBx
418 << mScaleBasedVisibilityDDBtn
419 << mScaleBasedVisibilityMaxDDBtn
421 << mScaleBasedVisibilityMinDDBtn
429 << mShadowOffsetAngleDDBtn
430 << mShadowOffsetAngleSpnBx
431 << mShadowOffsetDDBtn
432 << mShadowOffsetGlobalChkBx
433 << mShadowOffsetSpnBx
434 << mShadowOffsetUnitsDDBtn
435 << mShadowOffsetUnitWidget
436 << mShadowRadiusAlphaChkBx
437 << mShadowRadiusDDBtn
438 << mShadowRadiusDblSpnBx
439 << mShadowRadiusUnitsDDBtn
440 << mShadowRadiusUnitWidget
443 << mShadowOpacityDDBtn
444 << mShadowOpacityWidget
448 << mShapeBlendModeDDBtn
449 << mShapeStrokeColorBtn
450 << mShapeStrokeColorDDBtn
451 << mShapeStrokeUnitsDDBtn
452 << mShapeStrokeWidthDDBtn
453 << mShapeStrokeWidthSpnBx
454 << mShapeStrokeWidthUnitWidget
457 << mShapeFillColorBtn
458 << mShapeFillColorDDBtn
460 << mShapeOffsetUnitsDDBtn
461 << mShapeOffsetXSpnBx
462 << mShapeOffsetYSpnBx
463 << mShapeOffsetUnitWidget
464 << mShapePenStyleCmbBx
465 << mShapePenStyleDDBtn
467 << mShapeRadiusUnitsDDBtn
468 << mShapeRadiusXDbSpnBx
469 << mShapeRadiusYDbSpnBx
470 << mShapeRotationCmbBx
471 << mShapeRotationDDBtn
472 << mShapeRotationDblSpnBx
473 << mShapeRotationTypeDDBtn
474 << mShapeRadiusUnitWidget
475 << mShapeSVGPathDDBtn
476 << mShapeSVGPathLineEdit
478 << mShapeSizeTypeDDBtn
479 << mShapeSizeUnitsDDBtn
480 << mShapeSizeUnitWidget
485 << mShapeOpacityDDBtn
486 << mBackgroundOpacityWidget
491 << mAutoWrapLengthDDBtn
496 << mAutoWrapLengthSpinBox
497 << mAutoWrapTypeComboBox
498 << mCentroidRadioVisible
499 << mCentroidRadioWhole
500 << mDirectSymbRadioBtnAbove
501 << mDirectSymbRadioBtnBelow
502 << mDirectSymbRadioBtnLR
503 << mUpsidedownRadioAll
504 << mUpsidedownRadioDefined
505 << mUpsidedownRadioOff
514 << radPolygonHorizontal
515 << radPolygonPerimeter
516 << radPolygonPerimeterCurved
517 << radPredefinedOrder
518 << mFieldExpressionWidget
519 << mCheckBoxSubstituteText
520 << mGeometryGeneratorGroupBox
521 << mGeometryGenerator
522 << mGeometryGeneratorType
523 << mLinePlacementFlagsDDBtn;
524 connectValueChanged( widgets, SLOT( updatePreview() ) );
526 connect(
mQuadrantBtnGrp,
static_cast<void ( QButtonGroup::* )(
int )
>( &QButtonGroup::buttonClicked ),
this, &QgsTextFormatWidget::updatePreview );
528 mGeometryGeneratorType->addItem(
QgsApplication::getThemeIcon( QStringLiteral(
"/mIconPolygonLayer.svg" ) ), tr(
"Polygon / MultiPolygon" ), QgsWkbTypes::GeometryType::PolygonGeometry );
529 mGeometryGeneratorType->addItem(
QgsApplication::getThemeIcon( QStringLiteral(
"/mIconLineLayer.svg" ) ), tr(
"LineString / MultiLineString" ), QgsWkbTypes::GeometryType::LineGeometry );
530 mGeometryGeneratorType->addItem(
QgsApplication::getThemeIcon( QStringLiteral(
"/mIconPointLayer.svg" ) ), tr(
"Point / MultiPoint" ), QgsWkbTypes::GeometryType::PointGeometry );
533 whileBlocking( mOptionsTab )->setCurrentIndex( mLabelStackedWidget->currentIndex() );
548 toggleDDButtons(
true );
552 toggleDDButtons(
false );
553 delete mLabelingOptionsListWidget->takeItem( 6 );
554 delete mLabelingOptionsListWidget->takeItem( 5 );
555 mOptionsTab->removeTab( 6 );
556 mOptionsTab->removeTab( 5 );
558 frameLabelWith->hide();
559 mDirectSymbolsFrame->hide();
560 mFormatNumFrame->hide();
561 mFormatNumChkBx->hide();
562 mFormatNumDDBtn->hide();
563 mSubstitutionsFrame->hide();
564 mFontBoldBtn->hide();
565 mFontItalicBtn->hide();
571 void QgsTextFormatWidget::toggleDDButtons(
bool visible )
573 const auto buttons = findChildren< QgsPropertyOverrideButton * >();
576 button->setVisible( visible );
582 mOptionsTab->setVisible( enabled );
583 mOptionsTab->setTabToolTip( 0, tr(
"Text" ) );
584 mOptionsTab->setTabToolTip( 1, tr(
"Formatting" ) );
585 mOptionsTab->setTabToolTip( 2, tr(
"Buffer" ) );
586 mOptionsTab->setTabToolTip( 3, tr(
"Background" ) );
587 mOptionsTab->setTabToolTip( 4, tr(
"Shadow" ) );
588 mOptionsTab->setTabToolTip( 5, tr(
"Placement" ) );
589 mOptionsTab->setTabToolTip( 6, tr(
"Rendering" ) );
591 mLabelingOptionsListFrame->setVisible( !enabled );
592 groupBox_mPreview->setVisible( !enabled );
596 void QgsTextFormatWidget::connectValueChanged(
const QList<QWidget *> &widgets,
const char *slot )
598 const auto constWidgets = widgets;
599 for ( QWidget *widget : constWidgets )
603 connect( w, SIGNAL( changed() ),
this, slot );
607 connect( w, SIGNAL( fieldChanged( QString ) ),
this, slot );
609 else if (
QgsOpacityWidget *w = qobject_cast< QgsOpacityWidget *>( widget ) )
611 connect( w, SIGNAL( opacityChanged(
double ) ),
this, slot );
613 else if (
QgsScaleWidget *w = qobject_cast< QgsScaleWidget *>( widget ) )
615 connect( w, SIGNAL( scaleChanged(
double ) ),
this, slot );
619 connect( w, SIGNAL( changed() ),
this, slot );
621 else if ( QComboBox *w = qobject_cast<QComboBox *>( widget ) )
623 connect( w, SIGNAL( currentIndexChanged(
int ) ),
this, slot );
625 else if ( QSpinBox *w = qobject_cast<QSpinBox *>( widget ) )
627 connect( w, SIGNAL( valueChanged(
int ) ),
this, slot );
629 else if ( QDoubleSpinBox *w = qobject_cast<QDoubleSpinBox *>( widget ) )
631 connect( w, SIGNAL( valueChanged(
double ) ),
this, slot );
633 else if (
QgsColorButton *w = qobject_cast<QgsColorButton *>( widget ) )
635 connect( w, SIGNAL( colorChanged( QColor ) ),
this, slot );
637 else if ( QCheckBox *w = qobject_cast<QCheckBox *>( widget ) )
639 connect( w, SIGNAL( toggled(
bool ) ),
this, slot );
641 else if ( QRadioButton *w = qobject_cast<QRadioButton *>( widget ) )
643 connect( w, SIGNAL( toggled(
bool ) ),
this, slot );
645 else if ( QLineEdit *w = qobject_cast<QLineEdit *>( widget ) )
647 connect( w, SIGNAL( textEdited( QString ) ),
this, slot );
649 else if ( QSlider *w = qobject_cast<QSlider *>( widget ) )
651 connect( w, SIGNAL( valueChanged(
int ) ),
this, slot );
653 else if ( QGroupBox *w = qobject_cast<QGroupBox *>( widget ) )
655 connect( w, SIGNAL( toggled(
bool ) ),
this, slot );
659 connect( w, SIGNAL( textChanged() ),
this, slot );
663 QgsLogger::warning( QStringLiteral(
"Could not create connection for widget %1" ).arg( widget->objectName() ) );
675 mBufferDrawChkBx->setChecked( buffer.
enabled() );
676 spinBufferSize->setValue( buffer.
size() );
677 mBufferUnitWidget->setUnit( buffer.
sizeUnit() );
680 mBufferOpacityWidget->setOpacity( buffer.
opacity() );
681 mBufferJoinStyleComboBox->setPenJoinStyle( buffer.
joinStyle() );
683 comboBufferBlendMode->setBlendMode( buffer.
blendMode() );
689 mBufferEffect->setEnabled(
false );
691 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
693 mFontSizeUnitWidget->setUnit( format.
sizeUnit() );
695 mRefFont = format.
font();
696 mFontSizeSpinBox->setValue( format.
size() );
697 btnTextColor->setColor( format.
color() );
698 mTextOpacityWidget->setOpacity( format.
opacity() );
699 comboBlendMode->setBlendMode( format.
blendMode() );
701 mFontWordSpacingSpinBox->setValue( format.
font().wordSpacing() );
702 mFontLetterSpacingSpinBox->setValue( format.
font().letterSpacing() );
705 updateFont( mRefFont );
708 mFontMissingLabel->setVisible( !format.
fontFound() );
711 QString missingTxt = tr(
"%1 not found. Default substituted." );
712 QString txtPrepend = tr(
"Chosen font" );
717 mFontMissingLabel->setText( missingTxt.arg( txtPrepend ) );
720 mLabelingOptionsListWidget->setCurrentRow( 0 );
722 mFontLineHeightSpinBox->setValue( format.
lineHeight() );
725 mShapeDrawChkBx->setChecked( background.
enabled() );
726 mShapeTypeCmbBx->blockSignals(
true );
727 mShapeTypeCmbBx->setCurrentIndex( background.
type() );
728 mShapeTypeCmbBx->blockSignals(
false );
729 mShapeSVGPathLineEdit->setText( background.
svgFile() );
731 mShapeSizeCmbBx->setCurrentIndex( background.
sizeType() );
732 mShapeSizeXSpnBx->setValue( background.
size().width() );
733 mShapeSizeYSpnBx->setValue( background.
size().height() );
734 mShapeSizeUnitWidget->setUnit( background.
sizeUnit() );
736 mShapeRotationCmbBx->setCurrentIndex( background.
rotationType() );
739 mShapeRotationDblSpnBx->setValue( background.
rotation() );
740 mShapeOffsetXSpnBx->setValue( background.
offset().x() );
741 mShapeOffsetYSpnBx->setValue( background.
offset().y() );
742 mShapeOffsetUnitWidget->setUnit( background.
offsetUnit() );
744 mShapeRadiusXDbSpnBx->setValue( background.
radii().width() );
745 mShapeRadiusYDbSpnBx->setValue( background.
radii().height() );
746 mShapeRadiusUnitWidget->setUnit( background.
radiiUnit() );
749 mShapeFillColorBtn->setColor( background.
fillColor() );
750 mShapeStrokeColorBtn->setColor( background.
strokeColor() );
751 mShapeStrokeWidthSpnBx->setValue( background.
strokeWidth() );
754 mShapePenStyleCmbBx->setPenJoinStyle( background.
joinStyle() );
756 mBackgroundOpacityWidget->setOpacity( background.
opacity() );
757 mShapeBlendCmbBx->setBlendMode( background.
blendMode() );
759 mLoadSvgParams =
false;
760 mShapeTypeCmbBx_currentIndexChanged( background.
type() );
767 mBackgroundEffect->setEnabled(
false );
769 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
772 mShadowDrawChkBx->setChecked( shadow.
enabled() );
774 mShadowOffsetAngleSpnBx->setValue( shadow.
offsetAngle() );
776 mShadowOffsetUnitWidget->setUnit( shadow.
offsetUnit() );
778 mShadowOffsetGlobalChkBx->setChecked( shadow.
offsetGlobal() );
780 mShadowRadiusDblSpnBx->setValue( shadow.
blurRadius() );
783 mShadowRadiusAlphaChkBx->setChecked( shadow.
blurAlphaOnly() );
784 mShadowOpacityWidget->setOpacity( shadow.
opacity() );
785 mShadowScaleSpnBx->setValue( shadow.
scale() );
787 mShadowColorBtn->setColor( shadow.
color() );
788 mShadowBlendCmbBx->setBlendMode( shadow.
blendMode() );
795 settings.
setValue( QStringLiteral(
"Windows/Labeling/FontPreviewSplitState" ), mFontPreviewSplitter->saveState() );
796 settings.
setValue( QStringLiteral(
"Windows/Labeling/OptionsSplitState" ), mLabelingOptionsSplitter->saveState() );
797 settings.
setValue( QStringLiteral(
"Windows/Labeling/Tab" ), mLabelingOptionsListWidget->currentRow() );
803 format.
setColor( btnTextColor->color() );
805 format.
setSize( mFontSizeSpinBox->value() );
807 format.
setOpacity( mTextOpacityWidget->opacity() );
815 buffer.
setEnabled( mBufferDrawChkBx->isChecked() );
816 buffer.
setSize( spinBufferSize->value() );
817 buffer.
setColor( btnBufferColor->color() );
818 buffer.
setOpacity( mBufferOpacityWidget->opacity() );
821 buffer.
setJoinStyle( mBufferJoinStyleComboBox->penJoinStyle() );
823 buffer.
setBlendMode( comboBufferBlendMode->blendMode() );
832 background.
setEnabled( mShapeDrawChkBx->isChecked() );
834 background.
setSvgFile( mShapeSVGPathLineEdit->text() );
836 background.
setSize( QSizeF( mShapeSizeXSpnBx->value(), mShapeSizeYSpnBx->value() ) );
837 background.
setSizeUnit( mShapeSizeUnitWidget->unit() );
840 background.
setRotation( mShapeRotationDblSpnBx->value() );
841 background.
setOffset( QPointF( mShapeOffsetXSpnBx->value(), mShapeOffsetYSpnBx->value() ) );
844 background.
setRadii( QSizeF( mShapeRadiusXDbSpnBx->value(), mShapeRadiusYDbSpnBx->value() ) );
845 background.
setRadiiUnit( mShapeRadiusUnitWidget->unit() );
853 background.
setJoinStyle( mShapePenStyleCmbBx->penJoinStyle() );
854 background.
setOpacity( mBackgroundOpacityWidget->opacity() );
855 background.
setBlendMode( mShapeBlendCmbBx->blendMode() );
864 shadow.
setEnabled( mShadowDrawChkBx->isChecked() );
875 shadow.
setOpacity( mShadowOpacityWidget->opacity() );
876 shadow.
setScale( mShadowScaleSpnBx->value() );
877 shadow.
setColor( mShadowColorBtn->color() );
889 void QgsTextFormatWidget::optionsStackedWidget_CurrentChanged(
int indx )
891 mLabelingOptionsListWidget->blockSignals(
true );
892 mLabelingOptionsListWidget->setCurrentRow( indx );
893 mLabelingOptionsListWidget->blockSignals(
false );
896 void QgsTextFormatWidget::collapseSample(
bool collapse )
900 QList<int> splitSizes = mFontPreviewSplitter->sizes();
901 if ( splitSizes[0] > groupBox_mPreview->height() )
903 int delta = splitSizes[0] - groupBox_mPreview->height();
904 splitSizes[0] -= delta;
905 splitSizes[1] += delta;
906 mFontPreviewSplitter->setSizes( splitSizes );
911 void QgsTextFormatWidget::changeTextColor(
const QColor &color )
917 void QgsTextFormatWidget::updateFont(
const QFont &font )
920 if ( font != mRefFont )
929 mDirectSymbLeftLineEdit->setFont( mRefFont );
930 mDirectSymbRightLineEdit->setFont( mRefFont );
932 blockFontChangeSignals(
true );
933 mFontFamilyCmbBx->setCurrentFont( mRefFont );
934 populateFontStyleComboBox();
935 int idx = mFontCapitalsComboBox->findData( QVariant( (
unsigned int ) mRefFont.capitalization() ) );
936 mFontCapitalsComboBox->setCurrentIndex( idx == -1 ? 0 : idx );
937 mFontUnderlineBtn->setChecked( mRefFont.underline() );
938 mFontStrikethroughBtn->setChecked( mRefFont.strikeOut() );
939 blockFontChangeSignals(
false );
947 void QgsTextFormatWidget::blockFontChangeSignals(
bool blk )
949 mFontFamilyCmbBx->blockSignals( blk );
950 mFontStyleComboBox->blockSignals( blk );
951 mFontCapitalsComboBox->blockSignals( blk );
952 mFontUnderlineBtn->blockSignals( blk );
953 mFontStrikethroughBtn->blockSignals( blk );
954 mFontWordSpacingSpinBox->blockSignals( blk );
955 mFontLetterSpacingSpinBox->blockSignals( blk );
958 void QgsTextFormatWidget::updatePreview()
970 lblFontPreview->setFormat(
format() );
973 void QgsTextFormatWidget::scrollPreview()
975 scrollArea_mPreview->ensureVisible( 0, 0, 0, 0 );
980 scrollArea_mPreview->widget()->setStyleSheet( QStringLiteral(
"background: rgb(%1, %2, %3);" ).arg( QString::number( color.red() ),
981 QString::number( color.green() ),
982 QString::number( color.blue() ) ) );
985 void QgsTextFormatWidget::changeBufferColor(
const QColor &color )
993 QWidget *curWdgt = stackedPlacement->currentWidget();
995 bool showLineFrame =
false;
996 bool showCentroidFrame =
false;
997 bool showQuadrantFrame =
false;
998 bool showFixedQuadrantFrame =
false;
999 bool showPlacementPriorityFrame =
false;
1000 bool showOffsetTypeFrame =
false;
1001 bool showOffsetFrame =
false;
1002 bool showDistanceFrame =
false;
1003 bool showRotationFrame =
false;
1004 bool showMaxCharAngleFrame =
false;
1006 bool enableMultiLinesFrame =
true;
1008 if ( ( curWdgt == pagePoint && radAroundPoint->isChecked() )
1009 || ( curWdgt == pagePolygon && radAroundCentroid->isChecked() ) )
1011 showCentroidFrame = ( curWdgt == pagePolygon && radAroundCentroid->isChecked() );
1012 showDistanceFrame =
true;
1014 if ( curWdgt == pagePoint )
1016 showQuadrantFrame =
true;
1019 else if ( ( curWdgt == pagePoint && radOverPoint->isChecked() )
1020 || ( curWdgt == pagePolygon && radOverCentroid->isChecked() ) )
1022 showCentroidFrame = ( curWdgt == pagePolygon && radOverCentroid->isChecked() );
1023 showQuadrantFrame =
true;
1024 showFixedQuadrantFrame =
true;
1025 showOffsetFrame =
true;
1026 showRotationFrame =
true;
1028 else if ( curWdgt == pagePoint && radPredefinedOrder->isChecked() )
1030 showDistanceFrame =
true;
1031 showPlacementPriorityFrame =
true;
1032 showOffsetTypeFrame =
true;
1034 else if ( ( curWdgt == pageLine && radLineParallel->isChecked() )
1035 || ( curWdgt == pagePolygon && radPolygonPerimeter->isChecked() )
1036 || ( curWdgt == pageLine && radLineCurved->isChecked() )
1037 || ( curWdgt == pagePolygon && radPolygonPerimeterCurved->isChecked() ) )
1039 showLineFrame =
true;
1040 showDistanceFrame =
true;
1043 bool offline = chkLineAbove->isChecked() || chkLineBelow->isChecked();
1044 chkLineOrientationDependent->setEnabled( offline );
1045 mPlacementDistanceFrame->setEnabled( offline );
1047 bool isCurved = ( curWdgt == pageLine && radLineCurved->isChecked() )
1048 || ( curWdgt == pagePolygon && radPolygonPerimeterCurved->isChecked() );
1049 showMaxCharAngleFrame = isCurved;
1051 enableMultiLinesFrame = !isCurved;
1054 mPlacementLineFrame->setVisible( showLineFrame );
1055 mPlacementCentroidFrame->setVisible( showCentroidFrame );
1056 mPlacementQuadrantFrame->setVisible( showQuadrantFrame );
1057 mPlacementFixedQuadrantFrame->setVisible( showFixedQuadrantFrame );
1058 mPlacementCartographicFrame->setVisible( showPlacementPriorityFrame );
1059 mPlacementOffsetFrame->setVisible( showOffsetFrame );
1060 mPlacementDistanceFrame->setVisible( showDistanceFrame );
1061 mPlacementOffsetTypeFrame->setVisible( showOffsetTypeFrame );
1062 mPlacementRotationFrame->setVisible( showRotationFrame );
1063 mPlacementRepeatDistanceFrame->setVisible( curWdgt == pageLine || ( curWdgt == pagePolygon &&
1064 ( radPolygonPerimeter->isChecked() || radPolygonPerimeterCurved->isChecked() ) ) );
1065 mPlacementMaxCharAngleFrame->setVisible( showMaxCharAngleFrame );
1067 mMultiLinesFrame->setEnabled( enableMultiLinesFrame );
1070 void QgsTextFormatWidget::populateFontCapitalsComboBox()
1072 mFontCapitalsComboBox->addItem( tr(
"No change" ), QVariant( 0 ) );
1073 mFontCapitalsComboBox->addItem( tr(
"All uppercase" ), QVariant( 1 ) );
1074 mFontCapitalsComboBox->addItem( tr(
"All lowercase" ), QVariant( 2 ) );
1078 mFontCapitalsComboBox->addItem( tr(
"Capitalize first letter" ), QVariant( 4 ) );
1081 void QgsTextFormatWidget::populateFontStyleComboBox()
1083 mFontStyleComboBox->clear();
1084 QStringList styles = mFontDB.styles( mRefFont.family() );
1085 const auto constStyles = styles;
1086 for (
const QString &style : constStyles )
1088 mFontStyleComboBox->addItem( style );
1091 QString targetStyle = mFontDB.styleString( mRefFont );
1092 if ( !styles.contains( targetStyle ) )
1094 QFont f = QFont( mRefFont.family() );
1095 targetStyle = QFontInfo( f ).styleName();
1096 mRefFont.setStyleName( targetStyle );
1099 int stylIndx = mFontStyleComboBox->findText( targetStyle );
1100 if ( stylIndx > -1 )
1105 mFontStyleComboBox->setCurrentIndex( curIndx );
1108 void QgsTextFormatWidget::mFontSizeSpinBox_valueChanged(
double d )
1110 mRefFont.setPointSizeF( d );
1111 updateFont( mRefFont );
1114 void QgsTextFormatWidget::mFontCapitalsComboBox_currentIndexChanged(
int index )
1116 int capitalsindex = mFontCapitalsComboBox->itemData( index ).toInt();
1117 mRefFont.setCapitalization( ( QFont::Capitalization ) capitalsindex );
1118 updateFont( mRefFont );
1121 void QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged(
const QFont &f )
1123 mRefFont.setFamily( f.family() );
1124 updateFont( mRefFont );
1127 void QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged(
const QString &text )
1130 updateFont( mRefFont );
1133 void QgsTextFormatWidget::mFontUnderlineBtn_toggled(
bool ckd )
1135 mRefFont.setUnderline( ckd );
1136 updateFont( mRefFont );
1139 void QgsTextFormatWidget::mFontStrikethroughBtn_toggled(
bool ckd )
1141 mRefFont.setStrikeOut( ckd );
1142 updateFont( mRefFont );
1145 void QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged(
double spacing )
1147 mRefFont.setWordSpacing( spacing );
1148 updateFont( mRefFont );
1151 void QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged(
double spacing )
1153 mRefFont.setLetterSpacing( QFont::AbsoluteSpacing, spacing );
1154 updateFont( mRefFont );
1157 void QgsTextFormatWidget::mFontSizeUnitWidget_changed()
1162 mFontLimitPixelChkBox->setChecked(
false );
1168 mFontLimitPixelChkBox->setChecked(
true );
1170 updateFont( mRefFont );
1173 void QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged(
int px )
1176 mFontMaxPixelSpinBox->setMinimum( px );
1177 mFontMaxPixelSpinBox->update();
1180 void QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged(
int px )
1183 if ( px < mFontMinPixelSpinBox->value() )
1185 mFontMaxPixelSpinBox->blockSignals(
true );
1186 mFontMaxPixelSpinBox->setValue( mFontMinPixelSpinBox->value() );
1187 mFontMaxPixelSpinBox->blockSignals(
false );
1189 mFontMaxPixelSpinBox->setMinimum( mFontMinPixelSpinBox->value() );
1192 void QgsTextFormatWidget::mBufferUnitWidget_changed()
1194 updateFont( mRefFont );
1197 void QgsTextFormatWidget::mCoordXDDBtn_activated(
bool active )
1203 else if ( mCoordYDDBtn->isActive() )
1209 void QgsTextFormatWidget::mCoordYDDBtn_activated(
bool active )
1215 else if ( mCoordXDDBtn->isActive() )
1221 void QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged(
int index )
1228 showBackgroundPenStyle( isRect );
1229 showBackgroundRadius( isRect );
1231 mShapeSVGPathFrame->setVisible( isSVG );
1233 mShapeSizeYLabel->setVisible( !isSVG );
1234 mShapeSizeYSpnBx->setVisible( !isSVG );
1235 mShapeSizeYDDBtn->setVisible( !isSVG && mWidgetMode ==
Labeling );
1236 mShapeSizeXLabel->setText( tr(
"Size%1" ).arg( !isSVG ? tr(
" X" ) : QString() ) );
1239 mShapeFillColorBtn->setAllowOpacity( !isSVG );
1240 mShapeFillColorBtn->setButtonBackground();
1241 mShapeStrokeColorBtn->setAllowOpacity( !isSVG );
1242 mShapeStrokeColorBtn->setButtonBackground();
1245 mShapeSVGParamsBtn->setVisible( isSVG );
1248 updateSvgWidgets( mShapeSVGPathLineEdit->text() );
1252 mShapeFillColorLabel->setEnabled(
true );
1253 mShapeFillColorBtn->setEnabled(
true );
1254 mShapeFillColorDDBtn->setEnabled(
true );
1255 mShapeStrokeColorLabel->setEnabled(
true );
1256 mShapeStrokeColorBtn->setEnabled(
true );
1257 mShapeStrokeColorDDBtn->setEnabled(
true );
1258 mShapeStrokeWidthLabel->setEnabled(
true );
1259 mShapeStrokeWidthSpnBx->setEnabled(
true );
1260 mShapeStrokeWidthDDBtn->setEnabled(
true );
1264 mShapeStrokeWidthUnitWidget->setVisible( !isSVG );
1265 mShapeSVGUnitsLabel->setVisible( isSVG );
1266 mShapeStrokeUnitsDDBtn->setEnabled( !isSVG );
1269 void QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged(
const QString &text )
1271 updateSvgWidgets( text );
1276 int numOptionsChecked = ( chkLineAbove->isChecked() ? 1 : 0 ) +
1277 ( chkLineBelow->isChecked() ? 1 : 0 ) +
1278 ( chkLineOn->isChecked() ? 1 : 0 );
1280 if ( numOptionsChecked == 1 )
1283 chkLineAbove->setEnabled( !chkLineAbove->isChecked() );
1284 chkLineBelow->setEnabled( !chkLineBelow->isChecked() );
1285 chkLineOn->setEnabled( !chkLineOn->isChecked() );
1289 chkLineAbove->setEnabled(
true );
1290 chkLineBelow->setEnabled(
true );
1291 chkLineOn->setEnabled(
true );
1301 void QgsTextFormatWidget::previewScaleChanged(
double scale )
1303 lblFontPreview->setScale( scale );
1306 void QgsTextFormatWidget::updateSvgWidgets(
const QString &svgPath )
1308 if ( mShapeSVGPathLineEdit->text() != svgPath )
1310 mShapeSVGPathLineEdit->setText( svgPath );
1313 QString resolvedPath;
1314 bool validSVG =
true;
1315 if ( ! svgPath.startsWith( QLatin1String(
"base64:" ), Qt::CaseInsensitive ) )
1318 validSVG = QFileInfo::exists( resolvedPath );
1322 resolvedPath = svgPath;
1327 mShapeSVGPathLineEdit->setStyleSheet( !validSVG ? QStringLiteral(
"QLineEdit{ color: rgb(225, 0, 0); }" ) : QString() );
1328 mShapeSVGPathLineEdit->setToolTip( !validSVG ? tr(
"File not found" ) : resolvedPath );
1330 QColor fill, stroke;
1331 double strokeWidth = 0.0;
1332 bool fillParam =
false, strokeParam =
false, strokeWidthParam =
false;
1338 mShapeSVGParamsBtn->setEnabled( validSVG && ( fillParam || strokeParam || strokeWidthParam ) );
1340 mShapeFillColorLabel->setEnabled( validSVG && fillParam );
1341 mShapeFillColorBtn->setEnabled( validSVG && fillParam );
1342 mShapeFillColorDDBtn->setEnabled( validSVG && fillParam );
1343 if ( mLoadSvgParams && validSVG && fillParam )
1344 mShapeFillColorBtn->setColor( fill );
1346 mShapeStrokeColorLabel->setEnabled( validSVG && strokeParam );
1347 mShapeStrokeColorBtn->setEnabled( validSVG && strokeParam );
1348 mShapeStrokeColorDDBtn->setEnabled( validSVG && strokeParam );
1349 if ( mLoadSvgParams && validSVG && strokeParam )
1350 mShapeStrokeColorBtn->setColor( stroke );
1352 mShapeStrokeWidthLabel->setEnabled( validSVG && strokeWidthParam );
1353 mShapeStrokeWidthSpnBx->setEnabled( validSVG && strokeWidthParam );
1354 mShapeStrokeWidthDDBtn->setEnabled( validSVG && strokeWidthParam );
1355 if ( mLoadSvgParams && validSVG && strokeWidthParam )
1356 mShapeStrokeWidthSpnBx->setValue( strokeWidth );
1362 mShapeSVGUnitsLabel->setEnabled( validSVG && strokeWidthParam );
1365 void QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked()
1368 svgDlg.setWindowTitle( tr(
"Select SVG file" ) );
1371 if ( svgDlg.exec() == QDialog::Accepted )
1374 if ( !svgPath.isEmpty() )
1376 mShapeSVGPathLineEdit->setText( svgPath );
1382 void QgsTextFormatWidget::mShapeSVGParamsBtn_clicked()
1384 QString svgPath = mShapeSVGPathLineEdit->text();
1385 mLoadSvgParams =
true;
1386 updateSvgWidgets( svgPath );
1387 mLoadSvgParams =
false;
1390 void QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged(
int index )
1396 void QgsTextFormatWidget::mPreviewTextEdit_textChanged(
const QString &text )
1398 lblFontPreview->setText( text );
1402 void QgsTextFormatWidget::mPreviewTextBtn_clicked()
1404 mPreviewTextEdit->setText( QStringLiteral(
"Lorem Ipsum" ) );
1408 void QgsTextFormatWidget::mPreviewBackgroundBtn_colorChanged(
const QColor &color )
1413 void QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked()
1415 bool gotChar =
false;
1417 const QChar initial = !mDirectSymbLeftLineEdit->text().isEmpty() ? mDirectSymbLeftLineEdit->text().at( 0 ) : QChar();
1418 QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
1423 if ( !dirSymb.isNull() )
1424 mDirectSymbLeftLineEdit->setText( QString( dirSymb ) );
1427 void QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked()
1429 bool gotChar =
false;
1430 const QChar initial = !mDirectSymbRightLineEdit->text().isEmpty() ? mDirectSymbRightLineEdit->text().at( 0 ) : QChar();
1431 QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
1436 if ( !dirSymb.isNull() )
1437 mDirectSymbRightLineEdit->setText( QString( dirSymb ) );
1440 void QgsTextFormatWidget::mChkNoObstacle_toggled(
bool active )
1442 mPolygonObstacleTypeFrame->setEnabled( active );
1443 mObstaclePriorityFrame->setEnabled( active );
1446 void QgsTextFormatWidget::chkLineOrientationDependent_toggled(
bool active )
1450 chkLineAbove->setText( tr(
"Left of line" ) );
1451 chkLineBelow->setText( tr(
"Right of line" ) );
1455 chkLineAbove->setText( tr(
"Above line" ) );
1456 chkLineBelow->setText( tr(
"Below line" ) );
1461 void QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked()
1476 if ( dlg.exec() == QDialog::Accepted )
1483 void QgsTextFormatWidget::showBackgroundRadius(
bool show )
1485 mShapeRadiusLabel->setVisible( show );
1486 mShapeRadiusXDbSpnBx->setVisible( show );
1488 mShapeRadiusYDbSpnBx->setVisible( show );
1490 mShapeRadiusUnitWidget->setVisible( show );
1492 mShapeRadiusDDBtn->setVisible( show && mWidgetMode ==
Labeling );
1493 mShapeRadiusUnitsDDBtn->setVisible( show && mWidgetMode ==
Labeling );
1496 void QgsTextFormatWidget::showBackgroundPenStyle(
bool show )
1498 mShapePenStyleLabel->setVisible( show );
1499 mShapePenStyleCmbBx->setVisible( show );
1501 mShapePenStyleDDBtn->setVisible( show && mWidgetMode ==
Labeling );
1506 mCoordAlignmentFrame->setEnabled( enable );
1515 : QDialog( parent, fl )
1517 setWindowTitle( tr(
"Text Settings" ) );
1520 mFormatWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
1522 QVBoxLayout *layout =
new QVBoxLayout(
this );
1523 layout->addWidget( mFormatWidget );
1525 QDialogButtonBox *buttonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal,
this );
1526 layout->addWidget( buttonBox );
1528 setLayout( layout );
1531 restoreGeometry( settings.
value( QStringLiteral(
"Windows/TextFormatDialog/geometry" ) ).toByteArray() );
1533 connect( buttonBox->button( QDialogButtonBox::Ok ), &QAbstractButton::clicked,
this, &QDialog::accept );
1534 connect( buttonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked,
this, &QDialog::reject );
1545 return mFormatWidget->
format();
1557 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.
Arranges candidates over a point (or centroid of a polygon), or at a preset offset from the point...
QgsTextShadowSettings & shadow()
Returns a reference to the text drop shadow settings.
double blurRadius() const
Returns the blur radius for the shadow.
Arranges candidates following the curvature of a line feature. Applies to line layers only...
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).
A QGIS expression editor based on QScintilla2.
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 horizontal candidates scattered throughout a polygon feature. Applies to polygon 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.
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.
void enableDataDefinedAlignment(bool enable)
Controls whether data defined alignment buttons are enabled.
void setColor(const QColor &color)
Sets the color for the drop shadow.
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 setRadii(QSizeF radii)
Sets the radii used for rounding the corners of shapes.
QSize iconSize(bool dockableToolbar)
Returns the user-preferred size of a window's toolbar icons.
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...
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 parallel to a generalised line representing the feature or parallel to a polygon'...
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.
Points (e.g., for font sizes)
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.
Arranges candidates following the curvature of a polygon's boundary. Applies to polygon layers only...
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.