28 #include "qgssettings.h" 
   43 #include <QButtonGroup> 
   44 #include <QMessageBox> 
   48   , mMapCanvas( mapCanvas )
 
   52   setWidgetMode( 
Text );
 
   59   , mMapCanvas( mapCanvas )
 
   66   setWidgetMode( mode );
 
   69 void QgsTextFormatWidget::initWidget()
 
   73   mGeometryGeneratorGroupBox->setCollapsed( 
true );
 
   75   connect( mShapeSVGPathLineEdit, &QLineEdit::textChanged, 
this, &QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged );
 
   76   connect( mFontSizeSpinBox, 
static_cast < void ( QDoubleSpinBox::* )( 
double ) 
> ( &QDoubleSpinBox::valueChanged ), 
this, &QgsTextFormatWidget::mFontSizeSpinBox_valueChanged );
 
   77   connect( mFontFamilyCmbBx, &QFontComboBox::currentFontChanged, 
this, &QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged );
 
   78   connect( mFontStyleComboBox, &QComboBox::currentTextChanged, 
this, &QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged );
 
   79   connect( mFontUnderlineBtn, &QToolButton::toggled, 
this, &QgsTextFormatWidget::mFontUnderlineBtn_toggled );
 
   80   connect( mFontStrikethroughBtn, &QToolButton::toggled, 
this, &QgsTextFormatWidget::mFontStrikethroughBtn_toggled );
 
   81   connect( mFontWordSpacingSpinBox, 
static_cast < void ( QDoubleSpinBox::* )( 
double ) 
> ( &QDoubleSpinBox::valueChanged ), 
this, &QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged );
 
   82   connect( mFontLetterSpacingSpinBox, 
static_cast < void ( QDoubleSpinBox::* )( 
double ) 
> ( &QDoubleSpinBox::valueChanged ), 
this, &QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged );
 
   84   connect( mFontMinPixelSpinBox, 
static_cast < void ( QSpinBox::* )( 
int ) 
> ( &QSpinBox::valueChanged ), 
this, &QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged );
 
   85   connect( mFontMaxPixelSpinBox, 
static_cast < void ( QSpinBox::* )( 
int ) 
> ( &QSpinBox::valueChanged ), 
this, &QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged );
 
   90   connect( mShapeTypeCmbBx, 
static_cast<void ( QComboBox::* )( 
int )
>( &QComboBox::currentIndexChanged ), 
this, &QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged );
 
   91   connect( mShapeRotationCmbBx, 
static_cast<void ( QComboBox::* )( 
int )
>( &QComboBox::currentIndexChanged ), 
this, &QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged );
 
   92   connect( mShapeSVGParamsBtn, &QPushButton::clicked, 
this, &QgsTextFormatWidget::mShapeSVGParamsBtn_clicked );
 
   93   connect( mShapeSVGSelectorBtn, &QPushButton::clicked, 
this, &QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked );
 
   94   connect( mPreviewTextEdit, &QLineEdit::textChanged, 
this, &QgsTextFormatWidget::mPreviewTextEdit_textChanged );
 
   95   connect( mPreviewTextBtn, &QToolButton::clicked, 
this, &QgsTextFormatWidget::mPreviewTextBtn_clicked );
 
   97   connect( mDirectSymbLeftToolBtn, &QToolButton::clicked, 
this, &QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked );
 
   98   connect( mDirectSymbRightToolBtn, &QToolButton::clicked, 
this, &QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked );
 
   99   connect( chkLineOrientationDependent, &QCheckBox::toggled, 
this, &QgsTextFormatWidget::chkLineOrientationDependent_toggled );
 
  100   connect( mToolButtonConfigureSubstitutes, &QToolButton::clicked, 
this, &QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked );
 
  101   connect( mKerningCheckBox, &QCheckBox::toggled, 
this, &QgsTextFormatWidget::kerningToggled );
 
  111   mPreviewTextBtn->setIconSize( QSize( iconSize16, iconSize16 ) );
 
  112   mPointOffsetAboveLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  113   mPointOffsetAbove->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  114   mPointOffsetAboveRight->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  115   mPointOffsetLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  116   mPointOffsetOver ->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  117   mPointOffsetRight->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  118   mPointOffsetBelowLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  119   mPointOffsetBelow->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  120   mPointOffsetBelowRight->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  121   mLabelMinScale->setPixmap( 
QgsApplication::getThemeIcon( QStringLiteral( 
"/mActionZoomOut.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
 
  122   mLabelMaxScale->setPixmap( 
QgsApplication::getThemeIcon( QStringLiteral( 
"/mActionZoomIn.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
 
  125   mFontUnderlineBtn->setMinimumSize( buttonSize, buttonSize );
 
  126   mFontUnderlineBtn->setMaximumSize( buttonSize, buttonSize );
 
  127   mFontStrikethroughBtn->setMinimumSize( buttonSize, buttonSize );
 
  128   mFontStrikethroughBtn->setMaximumSize( buttonSize, buttonSize );
 
  129   mFontBoldBtn->setMinimumSize( buttonSize, buttonSize );
 
  130   mFontBoldBtn->setMaximumSize( buttonSize, buttonSize );
 
  131   mFontItalicBtn->setMinimumSize( buttonSize, buttonSize );
 
  132   mFontItalicBtn->setMaximumSize( buttonSize, buttonSize );
 
  134   mPreviewScaleComboBox->setMapCanvas( 
mMapCanvas );
 
  135   mPreviewScaleComboBox->setShowCurrentScaleButton( 
true );
 
  138   const auto unitWidgets = findChildren<QgsUnitSelectionWidget *>();
 
  169   mFontLineHeightSpinBox->setClearValue( 1.0 );
 
  170   mShapeRotationDblSpnBx->setClearValue( 0.0 );
 
  171   mShapeOffsetXSpnBx->setClearValue( 0.0 );
 
  172   mShapeOffsetYSpnBx->setClearValue( 0.0 );
 
  173   mPointOffsetXSpinBox->setClearValue( 0.0 );
 
  174   mPointOffsetYSpinBox->setClearValue( 0.0 );
 
  175   mPointAngleSpinBox->setClearValue( 0.0 );
 
  176   mFontLetterSpacingSpinBox->setClearValue( 0.0 );
 
  177   mFontWordSpacingSpinBox->setClearValue( 0.0 );
 
  178   mZIndexSpinBox->setClearValue( 0.0 );
 
  179   mLineDistanceSpnBx->setClearValue( 0.0 );
 
  191   updateAvailableShadowPositions();
 
  194   mBackgroundMarkerSymbolButton->setDialogTitle( tr( 
"Background Symbol" ) );
 
  195   mBackgroundMarkerSymbolButton->registerExpressionContextGenerator( 
this );
 
  196   mBackgroundMarkerSymbolButton->setMapCanvas( 
mMapCanvas );
 
  198   mBackgroundFillSymbolButton->setDialogTitle( tr( 
"Background Symbol" ) );
 
  199   mBackgroundFillSymbolButton->registerExpressionContextGenerator( 
this );
 
  200   mBackgroundFillSymbolButton->setMapCanvas( 
mMapCanvas );
 
  204   mRefFont = lblFontPreview->font();
 
  207   connect( mShadowOffsetAngleDial, &QAbstractSlider::valueChanged, mShadowOffsetAngleSpnBx, &QSpinBox::setValue );
 
  208   connect( mShadowOffsetAngleSpnBx, 
static_cast < void ( QSpinBox::* )( 
int ) 
> ( &QSpinBox::valueChanged ), mShadowOffsetAngleDial, &QAbstractSlider::setValue );
 
  209   connect( mLimitLabelChkBox, &QAbstractButton::toggled, mLimitLabelSpinBox, &QWidget::setEnabled );
 
  210   connect( mCheckBoxSubstituteText, &QAbstractButton::toggled, mToolButtonConfigureSubstitutes, &QWidget::setEnabled );
 
  220   populateFontCapitalsComboBox();
 
  223   mPreviewBackgroundBtn->setColorDialogTitle( tr( 
"Select Fill Color" ) );
 
  224   mPreviewBackgroundBtn->setContext( QStringLiteral( 
"labeling" ) );
 
  225   mPreviewBackgroundBtn->setColor( QColor( 255, 255, 255 ) );
 
  226   btnTextColor->setColorDialogTitle( tr( 
"Select Text Color" ) );
 
  227   btnTextColor->setContext( QStringLiteral( 
"labeling" ) );
 
  228   btnTextColor->setDefaultColor( Qt::black );
 
  229   btnBufferColor->setColorDialogTitle( tr( 
"Select Buffer Color" ) );
 
  230   btnBufferColor->setContext( QStringLiteral( 
"labeling" ) );
 
  231   btnBufferColor->setDefaultColor( Qt::white );
 
  232   mShapeStrokeColorBtn->setColorDialogTitle( tr( 
"Select Stroke Color" ) );
 
  233   mShapeStrokeColorBtn->setContext( QStringLiteral( 
"labeling" ) );
 
  234   mShapeFillColorBtn->setColorDialogTitle( tr( 
"Select Fill Color" ) );
 
  235   mShapeFillColorBtn->setContext( QStringLiteral( 
"labeling" ) );
 
  236   mShadowColorBtn->setColorDialogTitle( tr( 
"Select Shadow Color" ) );
 
  237   mShadowColorBtn->setContext( QStringLiteral( 
"labeling" ) );
 
  238   mShadowColorBtn->setDefaultColor( Qt::black );
 
  240   mFontColorDDBtn->registerLinkedWidget( btnTextColor );
 
  241   mBufferColorDDBtn->registerLinkedWidget( btnBufferColor );
 
  242   mShapeStrokeColorDDBtn->registerLinkedWidget( mShapeStrokeColorBtn );
 
  243   mShapeFillColorDDBtn->registerLinkedWidget( mShapeFillColorBtn );
 
  244   mShadowColorDDBtn->registerLinkedWidget( mShadowColorBtn );
 
  285   const auto groupBoxes = findChildren<QgsCollapsibleGroupBox *>();
 
  288     grpbox->setSettingGroup( QStringLiteral( 
"mAdvLabelingDlg" ) );
 
  294   mLabelingOptionsListWidget->setAttribute( Qt::WA_MacShowFocusRect, 
false );
 
  296   QgsSettings settings;
 
  299   QSizePolicy policy( mLabelingOptionsListFrame->sizePolicy() );
 
  300   policy.setHorizontalStretch( 0 );
 
  301   mLabelingOptionsListFrame->setSizePolicy( policy );
 
  302   if ( !settings.contains( QStringLiteral( 
"/Windows/Labeling/OptionsSplitState" ) ) )
 
  305     QList<int> splitsizes;
 
  307     mLabelingOptionsSplitter->setSizes( splitsizes );
 
  311   connect( mLabelStackedWidget, &QStackedWidget::currentChanged, 
this, &QgsTextFormatWidget::optionsStackedWidget_CurrentChanged );
 
  314   mFontPreviewSplitter->restoreState( settings.value( QStringLiteral( 
"Windows/Labeling/FontPreviewSplitState" ) ).toByteArray() );
 
  315   mLabelingOptionsSplitter->restoreState( settings.value( QStringLiteral( 
"Windows/Labeling/OptionsSplitState" ) ).toByteArray() );
 
  317   mLabelingOptionsListWidget->setCurrentRow( settings.value( QStringLiteral( 
"Windows/Labeling/Tab" ), 0 ).toInt() );
 
  321   mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
 
  325   mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
 
  329   mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
 
  333   QList<QWidget *> widgets;
 
  334   widgets << btnBufferColor
 
  336           << chkLabelPerFeaturePart
 
  340           << chkLineOrientationDependent
 
  342           << chkPreserveRotation
 
  344           << comboBufferBlendMode
 
  346           << mBufferJoinStyleComboBox
 
  347           << mBufferTranspFillChbx
 
  348           << mBufferOpacityWidget
 
  349           << mCentroidInsideCheckBox
 
  352           << mDirectSymbLeftLineEdit
 
  353           << mDirectSymbRevChkBx
 
  354           << mDirectSymbRightLineEdit
 
  355           << mFitInsidePolygonCheckBox
 
  356           << mFontCapitalsComboBox
 
  357           << mFontLetterSpacingSpinBox
 
  358           << mFontLimitPixelChkBox
 
  359           << mFontLineHeightSpinBox
 
  360           << mFontMaxPixelSpinBox
 
  361           << mFontMinPixelSpinBox
 
  362           << mFontMultiLineAlignComboBox
 
  364           << mFontStyleComboBox
 
  365           << mTextOrientationComboBox
 
  366           << mTextOpacityWidget
 
  367           << mFontWordSpacingSpinBox
 
  369           << mFormatNumDecimalsSpnBx
 
  370           << mFormatNumPlusSignChkBx
 
  372           << mLimitLabelSpinBox
 
  373           << mLineDistanceSpnBx
 
  374           << mLineDistanceUnitWidget
 
  375           << mMaxCharAngleInDSpinBox
 
  376           << mMaxCharAngleOutDSpinBox
 
  378           << mOffsetTypeComboBox
 
  379           << mPalShowAllLabelsForLayerChkBx
 
  380           << mPointAngleSpinBox
 
  381           << mPointOffsetUnitWidget
 
  382           << mPointOffsetXSpinBox
 
  383           << mPointOffsetYSpinBox
 
  384           << mPreviewBackgroundBtn
 
  387           << mRepeatDistanceSpinBox
 
  388           << mRepeatDistanceUnitWidget
 
  389           << mOverrunDistanceSpinBox
 
  390           << mOverrunDistanceUnitWidget
 
  391           << mScaleBasedVisibilityChkBx
 
  397           << mShadowOffsetAngleSpnBx
 
  398           << mShadowOffsetGlobalChkBx
 
  399           << mShadowOffsetSpnBx
 
  400           << mShadowOffsetUnitWidget
 
  401           << mShadowRadiusAlphaChkBx
 
  402           << mShadowRadiusDblSpnBx
 
  403           << mShadowRadiusUnitWidget
 
  405           << mShadowOpacityWidget
 
  408           << mShapeStrokeColorBtn
 
  409           << mShapeStrokeWidthSpnBx
 
  410           << mShapeStrokeWidthUnitWidget
 
  412           << mShapeFillColorBtn
 
  413           << mShapeOffsetXSpnBx
 
  414           << mShapeOffsetYSpnBx
 
  415           << mShapeOffsetUnitWidget
 
  416           << mShapeRadiusXDbSpnBx
 
  417           << mShapeRadiusYDbSpnBx
 
  418           << mShapeRotationCmbBx
 
  419           << mShapeRotationDblSpnBx
 
  420           << mShapeRadiusUnitWidget
 
  421           << mShapeSVGPathLineEdit
 
  423           << mShapeSizeUnitWidget
 
  426           << mBackgroundOpacityWidget
 
  431           << mAutoWrapLengthSpinBox
 
  432           << mAutoWrapTypeComboBox
 
  433           << mCentroidRadioVisible
 
  434           << mCentroidRadioWhole
 
  435           << mDirectSymbRadioBtnAbove
 
  436           << mDirectSymbRadioBtnBelow
 
  437           << mDirectSymbRadioBtnLR
 
  438           << mUpsidedownRadioAll
 
  439           << mUpsidedownRadioDefined
 
  440           << mUpsidedownRadioOff
 
  441           << mPlacementModeComboBox
 
  442           << mFieldExpressionWidget
 
  443           << mCheckBoxSubstituteText
 
  444           << mGeometryGeneratorGroupBox
 
  445           << mGeometryGenerator
 
  446           << mGeometryGeneratorType
 
  447           << mBackgroundMarkerSymbolButton
 
  448           << mBackgroundFillSymbolButton
 
  449           << mCalloutsDrawCheckBox
 
  450           << mCalloutStyleComboBox
 
  453           << mMaskJoinStyleComboBox
 
  454           << mMaskBufferSizeSpinBox
 
  455           << mMaskOpacityWidget
 
  456           << mCheckAllowLabelsOutsidePolygons
 
  457           << mHtmlFormattingCheckBox;
 
  464   connect( mBufferDrawChkBx, &QCheckBox::stateChanged, 
this, [ = ]( 
int )
 
  466     updateBufferFrameStatus();
 
  469   connect( mShapeDrawChkBx, &QCheckBox::stateChanged, 
this, [ = ]( 
int )
 
  471     updateShapeFrameStatus();
 
  474   connect( mShadowDrawChkBx, &QCheckBox::stateChanged, 
this, [ = ]( 
int )
 
  476     updateShadowFrameStatus();
 
  479   connect( mCalloutsDrawCheckBox, &QCheckBox::stateChanged, 
this, [ = ]( 
int )
 
  481     updateCalloutFrameStatus();
 
  489   whileBlocking( mOptionsTab )->setCurrentIndex( mLabelStackedWidget->currentIndex() );
 
  490   mOptionsTab->tabBar()->setUsesScrollButtons( 
true );
 
  511       toggleDDButtons( 
true );
 
  518       const int prevIndex = mOptionsTab->currentIndex();
 
  519       toggleDDButtons( 
true );
 
  520       delete mLabelingOptionsListWidget->takeItem( 8 ); 
 
  521       delete mLabelingOptionsListWidget->takeItem( 7 ); 
 
  522       delete mLabelingOptionsListWidget->takeItem( 6 ); 
 
  523       delete mLabelingOptionsListWidget->takeItem( 3 ); 
 
  524       mOptionsTab->removeTab( 8 );
 
  525       mOptionsTab->removeTab( 7 );
 
  526       mOptionsTab->removeTab( 6 );
 
  527       mOptionsTab->removeTab( 3 );
 
  528       mLabelStackedWidget->removeWidget( mLabelPage_Rendering );
 
  529       mLabelStackedWidget->removeWidget( mLabelPage_Callouts );
 
  530       mLabelStackedWidget->removeWidget( mLabelPage_Mask );
 
  531       mLabelStackedWidget->removeWidget( mLabelPage_Placement );
 
  541           mLabelStackedWidget->setCurrentIndex( prevIndex - 1 );
 
  542           mOptionsTab->setCurrentIndex( prevIndex - 1 );
 
  549           mLabelStackedWidget->setCurrentIndex( 0 );
 
  550           mOptionsTab->setCurrentIndex( 0 );
 
  554       frameLabelWith->hide();
 
  555       mDirectSymbolsFrame->hide();
 
  556       mFormatNumFrame->hide();
 
  557       mFormatNumChkBx->hide();
 
  558       mFormatNumDDBtn->hide();
 
  559       mCheckBoxSubstituteText->hide();
 
  560       mToolButtonConfigureSubstitutes->hide();
 
  561       mLabelWrapOnCharacter->hide();
 
  562       wrapCharacterEdit->hide();
 
  563       mWrapCharDDBtn->hide();
 
  564       mLabelWrapLinesTo->hide();
 
  565       mAutoWrapLengthSpinBox->hide();
 
  566       mAutoWrapLengthDDBtn->hide();
 
  567       mAutoWrapTypeComboBox->hide();
 
  568       mFontMultiLineLabel->hide();
 
  569       mFontMultiLineAlignComboBox->hide();
 
  570       mFontMultiLineAlignDDBtn->hide();
 
  578 void QgsTextFormatWidget::toggleDDButtons( 
bool visible )
 
  580   const auto buttons = findChildren< QgsPropertyOverrideButton * >();
 
  583     button->setVisible( visible );
 
  589   mOptionsTab->setVisible( enabled );
 
  590   mOptionsTab->setTabToolTip( 0, tr( 
"Text" ) );
 
  591   mOptionsTab->setTabToolTip( 1, tr( 
"Formatting" ) );
 
  592   mOptionsTab->setTabToolTip( 2, tr( 
"Buffer" ) );
 
  593   mOptionsTab->setTabToolTip( 3, tr( 
"Mask" ) );
 
  594   mOptionsTab->setTabToolTip( 4, tr( 
"Background" ) );
 
  595   mOptionsTab->setTabToolTip( 5, tr( 
"Shadow" ) );
 
  596   mOptionsTab->setTabToolTip( 6, tr( 
"Callouts" ) );
 
  597   mOptionsTab->setTabToolTip( 7, tr( 
"Placement" ) );
 
  598   mOptionsTab->setTabToolTip( 8, tr( 
"Rendering" ) );
 
  600   mLabelingOptionsListFrame->setVisible( !enabled );
 
  601   groupBox_mPreview->setVisible( !enabled );
 
  605 void QgsTextFormatWidget::connectValueChanged( 
const QList<QWidget *> &widgets, 
const char *slot )
 
  607   const auto constWidgets = widgets;
 
  608   for ( QWidget *widget : constWidgets )
 
  612       connect( w, SIGNAL( changed() ), 
this, slot );
 
  616       connect( w, SIGNAL( fieldChanged( QString ) ), 
this,  slot );
 
  618     else if ( 
QgsOpacityWidget *w = qobject_cast< QgsOpacityWidget *>( widget ) )
 
  620       connect( w, SIGNAL( opacityChanged( 
double ) ), 
this,  slot );
 
  622     else if ( 
QgsScaleWidget *w = qobject_cast< QgsScaleWidget *>( widget ) )
 
  624       connect( w, SIGNAL( scaleChanged( 
double ) ), 
this,  slot );
 
  628       connect( w, SIGNAL( changed() ), 
this,  slot );
 
  630     else if ( QComboBox *w = qobject_cast<QComboBox *>( widget ) )
 
  632       connect( w, SIGNAL( currentIndexChanged( 
int ) ), 
this, slot );
 
  634     else if ( QSpinBox *w = qobject_cast<QSpinBox *>( widget ) )
 
  636       connect( w, SIGNAL( valueChanged( 
int ) ), 
this, slot );
 
  638     else if ( QDoubleSpinBox *w = qobject_cast<QDoubleSpinBox *>( widget ) )
 
  640       connect( w, SIGNAL( valueChanged( 
double ) ), 
this, slot );
 
  642     else if ( 
QgsColorButton *w = qobject_cast<QgsColorButton *>( widget ) )
 
  644       connect( w, SIGNAL( colorChanged( QColor ) ), 
this, slot );
 
  646     else if ( QCheckBox *w = qobject_cast<QCheckBox *>( widget ) )
 
  648       connect( w, SIGNAL( toggled( 
bool ) ), 
this, slot );
 
  650     else if ( QRadioButton *w = qobject_cast<QRadioButton *>( widget ) )
 
  652       connect( w, SIGNAL( toggled( 
bool ) ), 
this, slot );
 
  654     else if ( QLineEdit *w = qobject_cast<QLineEdit *>( widget ) )
 
  656       connect( w, SIGNAL( textEdited( QString ) ), 
this, slot );
 
  658     else if ( QSlider *w = qobject_cast<QSlider *>( widget ) )
 
  660       connect( w, SIGNAL( valueChanged( 
int ) ), 
this, slot );
 
  662     else if ( QGroupBox *w = qobject_cast<QGroupBox *>( widget ) )
 
  664       connect( w, SIGNAL( toggled( 
bool ) ), 
this, slot );
 
  668       connect( w, SIGNAL( textChanged() ), 
this, slot );
 
  672       QgsLogger::warning( QStringLiteral( 
"Could not create connection for widget %1" ).arg( widget->objectName() ) );
 
  703   mDirectSymbDDBtn->registerCheckedWidget( mDirectSymbChkBx );
 
  711   mFormatNumDDBtn->registerCheckedWidget( mFormatNumChkBx );
 
  726   mEnableMaskDDBtn->registerCheckedWidget( mEnableMaskChkBx );
 
  734   mShapeDrawDDBtn->registerCheckedWidget( mShapeDrawChkBx );
 
  756   mShadowDrawDDBtn->registerCheckedWidget( mShadowDrawChkBx );
 
  796   QString ddScaleVisInfo = tr( 
"Value < 0 represents a scale closer than 1:1, e.g. -10 = 10:1<br>" 
  797                                "Value of 0 disables the specific limit." );
 
  799   mScaleBasedVisibilityDDBtn->registerCheckedWidget( mScaleBasedVisibilityChkBx );
 
  801   mScaleBasedVisibilityMinDDBtn->setUsageInfo( ddScaleVisInfo );
 
  803   mScaleBasedVisibilityMaxDDBtn->setUsageInfo( ddScaleVisInfo );
 
  806   mFontLimitPixelDDBtn->registerCheckedWidget( mFontLimitPixelChkBox );
 
  825   if ( !mButtons.contains( key ) )
 
  830     mButtons[key] = button;
 
  847   mBufferDrawChkBx->setChecked( buffer.
enabled() );
 
  848   mBufferFrame->setEnabled( buffer.
enabled() );
 
  849   spinBufferSize->setValue( buffer.
size() );
 
  850   mBufferUnitWidget->setUnit( buffer.
sizeUnit() );
 
  852   btnBufferColor->setColor( buffer.
color() );
 
  853   mBufferOpacityWidget->setOpacity( buffer.
opacity() );
 
  854   mBufferJoinStyleComboBox->setPenJoinStyle( buffer.
joinStyle() );
 
  856   comboBufferBlendMode->setBlendMode( buffer.
blendMode() );
 
  858     mBufferEffect.reset( lPaintEffect->clone() );
 
  862     mBufferEffect->setEnabled( 
false );
 
  864   mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
 
  868   mEnableMaskChkBx->setChecked( mask.
enabled() );
 
  869   mMaskBufferSizeSpinBox->setValue( mask.
size() );
 
  870   mMaskBufferUnitWidget->setUnit( mask.
sizeUnit() );
 
  872   mMaskOpacityWidget->setOpacity( mask.
opacity() );
 
  873   mMaskJoinStyleComboBox->setPenJoinStyle( mask.
joinStyle() );
 
  875     mMaskEffect.reset( lPaintEffect->clone() );
 
  879     mMaskEffect->setEnabled( 
false );
 
  881   mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
 
  890   mTextOrientationComboBox->setCurrentIndex( mTextOrientationComboBox->findData( 
format.
orientation() ) );
 
  893   mFontWordSpacingSpinBox->setValue( 
format.
font().wordSpacing() );
 
  894   mFontLetterSpacingSpinBox->setValue( 
format.
font().letterSpacing() );
 
  899   updateFont( mRefFont );
 
  905     QString missingTxt = tr( 
"%1 not found. Default substituted." );
 
  906     QString txtPrepend = tr( 
"Chosen font" );
 
  911     mFontMissingLabel->setText( missingTxt.arg( txtPrepend ) );
 
  914     mLabelingOptionsListWidget->setCurrentRow( 0 );
 
  920   mShapeDrawChkBx->setChecked( background.
enabled() );
 
  921   mShapeFrame->setEnabled( background.
enabled() );
 
  922   mShapeTypeCmbBx->blockSignals( 
true );
 
  923   mShapeTypeCmbBx->setCurrentIndex( mShapeTypeCmbBx->findData( background.
type() ) );
 
  924   mShapeTypeCmbBx->blockSignals( 
false );
 
  925   updateAvailableShadowPositions();
 
  926   mShapeSVGPathLineEdit->setText( background.
svgFile() );
 
  928   mShapeSizeCmbBx->setCurrentIndex( background.
sizeType() );
 
  929   mShapeSizeXSpnBx->setValue( background.
size().width() );
 
  930   mShapeSizeYSpnBx->setValue( background.
size().height() );
 
  931   mShapeSizeUnitWidget->setUnit( background.
sizeUnit() );
 
  933   mShapeRotationCmbBx->setCurrentIndex( background.
rotationType() );
 
  936   mShapeRotationDblSpnBx->setValue( background.
rotation() );
 
  937   mShapeOffsetXSpnBx->setValue( background.
offset().x() );
 
  938   mShapeOffsetYSpnBx->setValue( background.
offset().y() );
 
  939   mShapeOffsetUnitWidget->setUnit( background.
offsetUnit() );
 
  941   mShapeRadiusXDbSpnBx->setValue( background.
radii().width() );
 
  942   mShapeRadiusYDbSpnBx->setValue( background.
radii().height() );
 
  943   mShapeRadiusUnitWidget->setUnit( background.
radiiUnit() );
 
  946   mShapeFillColorBtn->setColor( background.
fillColor() );
 
  947   mShapeStrokeColorBtn->setColor( background.
strokeColor() );
 
  948   mShapeStrokeWidthSpnBx->setValue( background.
strokeWidth() );
 
  952   mBackgroundOpacityWidget->setOpacity( background.
opacity() );
 
  953   mShapeBlendCmbBx->setBlendMode( background.
blendMode() );
 
  955   mLoadSvgParams = 
false;
 
  956   mShapeTypeCmbBx_currentIndexChanged( background.
type() ); 
 
  958   if ( 
auto *lPaintEffect = background.
paintEffect() )
 
  959     mBackgroundEffect.reset( lPaintEffect->clone() );
 
  963     mBackgroundEffect->setEnabled( 
false );
 
  965   mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
 
  971   mShadowDrawChkBx->setChecked( shadow.
enabled() );
 
  972   mShadowFrame->setEnabled( shadow.
enabled() );
 
  973   mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( shadow.
shadowPlacement() ) );
 
  974   mShadowOffsetAngleSpnBx->setValue( shadow.
offsetAngle() );
 
  976   mShadowOffsetUnitWidget->setUnit( shadow.
offsetUnit() );
 
  978   mShadowOffsetGlobalChkBx->setChecked( shadow.
offsetGlobal() );
 
  980   mShadowRadiusDblSpnBx->setValue( shadow.
blurRadius() );
 
  983   mShadowRadiusAlphaChkBx->setChecked( shadow.
blurAlphaOnly() );
 
  984   mShadowOpacityWidget->setOpacity( shadow.
opacity() );
 
  985   mShadowScaleSpnBx->setValue( shadow.
scale() );
 
  987   mShadowColorBtn->setColor( shadow.
color() );
 
  988   mShadowBlendCmbBx->setBlendMode( shadow.
blendMode() );
 
  999   QgsSettings settings;
 
 1000   settings.setValue( QStringLiteral( 
"Windows/Labeling/FontPreviewSplitState" ), mFontPreviewSplitter->saveState() );
 
 1001   settings.setValue( QStringLiteral( 
"Windows/Labeling/OptionsSplitState" ), mLabelingOptionsSplitter->saveState() );
 
 1003   int prevIndex = mLabelingOptionsListWidget->currentRow();
 
 1004   if ( mWidgetMode == 
Text )
 
 1006     switch ( prevIndex )
 
 1015   settings.setValue( QStringLiteral( 
"Windows/Labeling/Tab" ), prevIndex );
 
 1037   buffer.
setEnabled( mBufferDrawChkBx->isChecked() );
 
 1038   buffer.
setSize( spinBufferSize->value() );
 
 1039   buffer.
setColor( btnBufferColor->color() );
 
 1040   buffer.
setOpacity( mBufferOpacityWidget->opacity() );
 
 1043   buffer.
setJoinStyle( mBufferJoinStyleComboBox->penJoinStyle() );
 
 1045   buffer.
setBlendMode( comboBufferBlendMode->blendMode() );
 
 1054   mask.
setEnabled( mEnableMaskChkBx->isChecked() );
 
 1055   mask.
setSize( mMaskBufferSizeSpinBox->value() );
 
 1056   mask.
setOpacity( mMaskOpacityWidget->opacity() );
 
 1057   mask.
setSizeUnit( mMaskBufferUnitWidget->unit() );
 
 1059   mask.
setJoinStyle( mMaskJoinStyleComboBox->penJoinStyle() );
 
 1069   background.
setEnabled( mShapeDrawChkBx->isChecked() );
 
 1071   background.
setSvgFile( mShapeSVGPathLineEdit->text() );
 
 1073   background.
setSize( QSizeF( mShapeSizeXSpnBx->value(), mShapeSizeYSpnBx->value() ) );
 
 1074   background.
setSizeUnit( mShapeSizeUnitWidget->unit() );
 
 1077   background.
setRotation( mShapeRotationDblSpnBx->value() );
 
 1078   background.
setOffset( QPointF( mShapeOffsetXSpnBx->value(), mShapeOffsetYSpnBx->value() ) );
 
 1081   background.
setRadii( QSizeF( mShapeRadiusXDbSpnBx->value(), mShapeRadiusYDbSpnBx->value() ) );
 
 1082   background.
setRadiiUnit( mShapeRadiusUnitWidget->unit() );
 
 1085   background.
setFillColor( mShapeFillColorBtn->color() );
 
 1090   background.
setOpacity( mBackgroundOpacityWidget->opacity() );
 
 1091   background.
setBlendMode( mShapeBlendCmbBx->blendMode() );
 
 1102   shadow.
setEnabled( mShadowDrawChkBx->isChecked() );
 
 1113   shadow.
setOpacity( mShadowOpacityWidget->opacity() );
 
 1114   shadow.
setScale( mShadowScaleSpnBx->value() );
 
 1115   shadow.
setColor( mShadowColorBtn->color() );
 
 1119   if ( includeDataDefinedProperties )
 
 1150   if ( mButtons.contains( key ) )
 
 1162 void QgsTextFormatWidget::optionsStackedWidget_CurrentChanged( 
int indx )
 
 1164   mLabelingOptionsListWidget->blockSignals( 
true );
 
 1165   mLabelingOptionsListWidget->setCurrentRow( indx );
 
 1166   mLabelingOptionsListWidget->blockSignals( 
false );
 
 1175     mPreviewExpressionContext = *lExpressionContext;
 
 1180   const auto symbolButtonWidgets = findChildren<QgsSymbolButton *>();
 
 1188 void QgsTextFormatWidget::collapseSample( 
bool collapse )
 
 1192     QList<int> splitSizes = mFontPreviewSplitter->sizes();
 
 1193     if ( splitSizes[0] > groupBox_mPreview->height() )
 
 1195       int delta = splitSizes[0] - groupBox_mPreview->height();
 
 1196       splitSizes[0] -= delta;
 
 1197       splitSizes[1] += delta;
 
 1198       mFontPreviewSplitter->setSizes( splitSizes );
 
 1203 void QgsTextFormatWidget::changeTextColor( 
const QColor &color )
 
 1209 void QgsTextFormatWidget::updateFont( 
const QFont &font )
 
 1212   if ( font != mRefFont )
 
 1221   mDirectSymbLeftLineEdit->setFont( mRefFont );
 
 1222   mDirectSymbRightLineEdit->setFont( mRefFont );
 
 1224   blockFontChangeSignals( 
true );
 
 1225   mFontFamilyCmbBx->setCurrentFont( mRefFont );
 
 1226   populateFontStyleComboBox();
 
 1227   mFontUnderlineBtn->setChecked( mRefFont.underline() );
 
 1228   mFontStrikethroughBtn->setChecked( mRefFont.strikeOut() );
 
 1229   mKerningCheckBox->setChecked( mRefFont.kerning() );
 
 1230   blockFontChangeSignals( 
false );
 
 1238 void QgsTextFormatWidget::blockFontChangeSignals( 
bool blk )
 
 1240   mFontFamilyCmbBx->blockSignals( blk );
 
 1241   mFontStyleComboBox->blockSignals( blk );
 
 1242   mFontCapitalsComboBox->blockSignals( blk );
 
 1243   mFontUnderlineBtn->blockSignals( blk );
 
 1244   mFontStrikethroughBtn->blockSignals( blk );
 
 1245   mFontWordSpacingSpinBox->blockSignals( blk );
 
 1246   mFontLetterSpacingSpinBox->blockSignals( blk );
 
 1247   mKerningCheckBox->blockSignals( blk );
 
 1262   lblFontPreview->setFormat( 
format() );
 
 1265 void QgsTextFormatWidget::scrollPreview()
 
 1267   scrollArea_mPreview->ensureVisible( 0, 0, 0, 0 );
 
 1272   mPreviewBackgroundColor = color;
 
 1274   scrollArea_mPreview->widget()->setStyleSheet( QStringLiteral( 
"background: rgb(%1, %2, %3);" ).arg( QString::number( color.red() ),
 
 1275       QString::number( color.green() ),
 
 1276       QString::number( color.blue() ) ) );
 
 1279 void QgsTextFormatWidget::changeBufferColor( 
const QColor &color )
 
 1288   bool showLineFrame = 
false;
 
 1289   bool showCentroidFrame = 
false;
 
 1290   bool showQuadrantFrame = 
false;
 
 1291   bool showFixedQuadrantFrame = 
false;
 
 1292   bool showPlacementPriorityFrame = 
false;
 
 1293   bool showOffsetTypeFrame = 
false;
 
 1294   bool showOffsetFrame = 
false;
 
 1295   bool showDistanceFrame = 
false;
 
 1296   bool showRotationFrame = 
false;
 
 1297   bool showMaxCharAngleFrame = 
false;
 
 1302   bool enableMultiLinesFrame = 
true;
 
 1308     showDistanceFrame = 
true;
 
 1316     showQuadrantFrame = 
true;
 
 1317     showFixedQuadrantFrame = 
true;
 
 1318     showOffsetFrame = 
true;
 
 1319     showRotationFrame = 
true;
 
 1323     showDistanceFrame = 
true;
 
 1324     showPlacementPriorityFrame = 
true;
 
 1325     showOffsetTypeFrame  = 
true;
 
 1332     showLineFrame = 
true;
 
 1333     showDistanceFrame = 
true;
 
 1336     bool offline = chkLineAbove->isChecked() || chkLineBelow->isChecked();
 
 1337     chkLineOrientationDependent->setEnabled( offline );
 
 1338     mPlacementDistanceFrame->setEnabled( offline );
 
 1342     showMaxCharAngleFrame = isCurved;
 
 1344     enableMultiLinesFrame = !isCurved;
 
 1349     showDistanceFrame = 
true;
 
 1352   mPlacementLineFrame->setVisible( showLineFrame );
 
 1353   mPlacementPolygonFrame->setVisible( showPolygonPlacementOptions );
 
 1354   mPlacementCentroidFrame->setVisible( showCentroidFrame );
 
 1355   mPlacementQuadrantFrame->setVisible( showQuadrantFrame );
 
 1356   mPlacementFixedQuadrantFrame->setVisible( showFixedQuadrantFrame );
 
 1357   mPlacementCartographicFrame->setVisible( showPlacementPriorityFrame );
 
 1358   mPlacementOffsetFrame->setVisible( showOffsetFrame );
 
 1359   mPlacementDistanceFrame->setVisible( showDistanceFrame );
 
 1360   mPlacementOffsetTypeFrame->setVisible( showOffsetTypeFrame );
 
 1361   mPlacementRotationFrame->setVisible( showRotationFrame );
 
 1366   mPlacementMaxCharAngleFrame->setVisible( showMaxCharAngleFrame );
 
 1368   mMultiLinesFrame->setEnabled( enableMultiLinesFrame );
 
 1372   switch ( currentPlacement )
 
 1376         helperText = tr( 
"Arranges label candidates in a clockwise circle around the feature, preferring placements to the top-right of the feature." );
 
 1378         helperText = tr( 
"Arranges label candidates in a cluster around the feature's centroid, preferring placements directly over the centroid." );
 
 1382         helperText = tr( 
"Arranges label candidates directly over the feature or at a preset offset from the feature." );
 
 1384         helperText = tr( 
"Arranges label candidates directly over the feature's centroid, or at a preset offset from the centroid." );
 
 1388         helperText = tr( 
"Arranges label candidates parallel to a generalised line representing the feature. Placements which fall over straighter portions of the line are preferred." );
 
 1390         helperText = tr( 
"Arranges label candidates parallel to a generalised line representing the polygon's perimeter. Placements which fall over straighter portions of the perimeter are preferred." );
 
 1394         helperText = tr( 
"Arranges candidates following the curvature of a line feature. Placements which fall over straighter portions of the line are preferred." );
 
 1398         helperText = tr( 
"Arranges label candidates scattered throughout the polygon. Labels will always be placed horizontally, with placements further from the edges of the polygon preferred." );
 
 1400         helperText = tr( 
"Label candidates are arranged horizontally along the length of the feature." );
 
 1404         helperText = tr( 
"Arranges label candidates scattered throughout the polygon. Labels are rotated to respect the polygon's orientation, with placements further from the edges of the polygon preferred." );
 
 1408         helperText = tr( 
"Label candidates are placed in predefined positions around the features. Preference is given to positions with greatest cartographic appeal, e.g., top right and bottom right of the feature." );
 
 1412         helperText = tr( 
"Arranges candidates following the curvature of the feature's perimeter. Placements which fall over straighter portions of the perimeter are preferred." );
 
 1416         helperText = tr( 
"Label candidates are placed outside of the features, preferring placements which give greatest visual association between the label and the feature." );
 
 1419   mPlacementModeDescriptionLabel->setText( QStringLiteral( 
"<i>%1</i>" ).arg( helperText ) );
 
 1422 void QgsTextFormatWidget::populateFontCapitalsComboBox()
 
 1434 void QgsTextFormatWidget::populateFontStyleComboBox()
 
 1436   mFontStyleComboBox->clear();
 
 1437   QStringList styles = mFontDB.styles( mRefFont.family() );
 
 1438   const auto constStyles = styles;
 
 1439   for ( 
const QString &style : constStyles )
 
 1441     mFontStyleComboBox->addItem( style );
 
 1444   QString targetStyle = mFontDB.styleString( mRefFont );
 
 1445   if ( !styles.contains( targetStyle ) )
 
 1447     QFont f = QFont( mRefFont.family() );
 
 1448     targetStyle = QFontInfo( f ).styleName();
 
 1449     mRefFont.setStyleName( targetStyle );
 
 1452   int stylIndx = mFontStyleComboBox->findText( targetStyle );
 
 1453   if ( stylIndx > -1 )
 
 1458   mFontStyleComboBox->setCurrentIndex( curIndx );
 
 1461 void QgsTextFormatWidget::mFontSizeSpinBox_valueChanged( 
double d )
 
 1463   mRefFont.setPointSizeF( d );
 
 1464   updateFont( mRefFont );
 
 1467 void QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged( 
const QFont &f )
 
 1469   mRefFont.setFamily( f.family() );
 
 1470   updateFont( mRefFont );
 
 1473 void QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged( 
const QString &text )
 
 1476   updateFont( mRefFont );
 
 1479 void QgsTextFormatWidget::mFontUnderlineBtn_toggled( 
bool ckd )
 
 1481   mRefFont.setUnderline( ckd );
 
 1482   updateFont( mRefFont );
 
 1485 void QgsTextFormatWidget::mFontStrikethroughBtn_toggled( 
bool ckd )
 
 1487   mRefFont.setStrikeOut( ckd );
 
 1488   updateFont( mRefFont );
 
 1491 void QgsTextFormatWidget::kerningToggled( 
bool checked )
 
 1493   mRefFont.setKerning( checked );
 
 1494   updateFont( mRefFont );
 
 1497 void QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged( 
double spacing )
 
 1499   mRefFont.setWordSpacing( spacing );
 
 1500   updateFont( mRefFont );
 
 1503 void QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged( 
double spacing )
 
 1505   mRefFont.setLetterSpacing( QFont::AbsoluteSpacing, spacing );
 
 1506   updateFont( mRefFont );
 
 1509 void QgsTextFormatWidget::mFontSizeUnitWidget_changed()
 
 1514     mFontLimitPixelChkBox->setChecked( 
false );
 
 1520     mFontLimitPixelChkBox->setChecked( 
true );
 
 1522   updateFont( mRefFont );
 
 1525 void QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged( 
int px )
 
 1528   mFontMaxPixelSpinBox->setMinimum( px );
 
 1529   mFontMaxPixelSpinBox->update();
 
 1532 void QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged( 
int px )
 
 1535   if ( px < mFontMinPixelSpinBox->value() )
 
 1537     mFontMaxPixelSpinBox->blockSignals( 
true );
 
 1538     mFontMaxPixelSpinBox->setValue( mFontMinPixelSpinBox->value() );
 
 1539     mFontMaxPixelSpinBox->blockSignals( 
false );
 
 1541   mFontMaxPixelSpinBox->setMinimum( mFontMinPixelSpinBox->value() );
 
 1544 void QgsTextFormatWidget::mBufferUnitWidget_changed()
 
 1546   updateFont( mRefFont );
 
 1549 void QgsTextFormatWidget::mMaskBufferUnitWidget_changed()
 
 1551   updateFont( mRefFont );
 
 1554 void QgsTextFormatWidget::mCoordXDDBtn_changed( )
 
 1556   if ( !mCoordXDDBtn->isActive() ) 
 
 1560   else if ( mCoordYDDBtn->isActive() )
 
 1566 void QgsTextFormatWidget::mCoordYDDBtn_changed( )
 
 1568   if ( !mCoordYDDBtn->isActive() ) 
 
 1572   else if ( mCoordXDDBtn->isActive() )
 
 1578 void QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged( 
int )
 
 1586   showBackgroundRadius( isRect );
 
 1588   mShapeSVGPathFrame->setVisible( isSVG );
 
 1589   mBackgroundMarkerSymbolButton->setVisible( isMarker );
 
 1590   mBackgroundFillSymbolButton->setVisible( !isSVG && !isMarker );
 
 1594   mShapeSizeYLabel->setVisible( !isSVG && !isMarker );
 
 1595   mShapeSizeYSpnBx->setVisible( !isSVG && !isMarker );
 
 1596   mShapeSizeYDDBtn->setVisible( !isSVG && !isMarker );
 
 1597   mShapeSizeXLabel->setText( tr( 
"Size%1" ).arg( !isSVG && !isMarker ? tr( 
" X" ) : QString() ) );
 
 1600   mShapeFillColorBtn->setAllowOpacity( !isSVG );
 
 1601   mShapeFillColorBtn->setButtonBackground();
 
 1602   mShapeStrokeColorBtn->setAllowOpacity( !isSVG );
 
 1603   mShapeStrokeColorBtn->setButtonBackground();
 
 1606   mShapeFillColorLabel->setVisible( isSVG );
 
 1607   mShapeFillColorLabel->setEnabled( isSVG );
 
 1608   mShapeFillColorBtn->setVisible( isSVG );
 
 1609   mShapeFillColorBtn->setEnabled( isSVG );
 
 1610   mShapeFillColorDDBtn->setVisible( isSVG );
 
 1611   mShapeFillColorDDBtn->setEnabled( isSVG );
 
 1612   mShapeStrokeColorLabel->setVisible( isSVG );
 
 1613   mShapeStrokeColorLabel->setEnabled( isSVG );
 
 1614   mShapeStrokeColorBtn->setVisible( isSVG );
 
 1615   mShapeStrokeColorBtn->setEnabled( isSVG );
 
 1616   mShapeStrokeColorDDBtn->setVisible( isSVG );
 
 1617   mShapeStrokeColorDDBtn->setEnabled( isSVG );
 
 1618   mShapeStrokeWidthLabel->setVisible( isSVG );
 
 1619   mShapeStrokeWidthLabel->setEnabled( isSVG );
 
 1620   mShapeStrokeWidthSpnBx->setVisible( isSVG );
 
 1621   mShapeStrokeWidthSpnBx->setEnabled( isSVG );
 
 1622   mShapeStrokeWidthDDBtn->setVisible( isSVG );
 
 1623   mShapeStrokeWidthDDBtn->setEnabled( isSVG );
 
 1626   mShapeSVGParamsBtn->setVisible( isSVG );
 
 1629     updateSvgWidgets( mShapeSVGPathLineEdit->text() );
 
 1633   mShapeSVGUnitsLabel->setVisible( isSVG );
 
 1634   mShapeStrokeWidthUnitWidget->setVisible( 
false );
 
 1635   mShapeStrokeUnitsDDBtn->setVisible( 
false );
 
 1636   mShapeStrokeUnitsDDBtn->setEnabled( 
false );
 
 1638   updateAvailableShadowPositions();
 
 1641 void QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged( 
const QString &text )
 
 1643   updateSvgWidgets( text );
 
 1648   int numOptionsChecked = ( chkLineAbove->isChecked() ? 1 : 0 ) +
 
 1649                           ( chkLineBelow->isChecked() ? 1 : 0 ) +
 
 1650                           ( chkLineOn->isChecked() ? 1 : 0 );
 
 1652   if ( numOptionsChecked == 1 )
 
 1655     chkLineAbove->setEnabled( !chkLineAbove->isChecked() );
 
 1656     chkLineBelow->setEnabled( !chkLineBelow->isChecked() );
 
 1657     chkLineOn->setEnabled( !chkLineOn->isChecked() );
 
 1661     chkLineAbove->setEnabled( 
true );
 
 1662     chkLineBelow->setEnabled( 
true );
 
 1663     chkLineOn->setEnabled( 
true );
 
 1673 void QgsTextFormatWidget::previewScaleChanged( 
double scale )
 
 1675   lblFontPreview->setScale( scale );
 
 1678 void QgsTextFormatWidget::updateSvgWidgets( 
const QString &svgPath )
 
 1680   if ( mShapeSVGPathLineEdit->text() != svgPath )
 
 1682     mShapeSVGPathLineEdit->setText( svgPath );
 
 1685   QString resolvedPath;
 
 1686   bool validSVG = 
true;
 
 1687   if ( ! svgPath.startsWith( QLatin1String( 
"base64:" ), Qt::CaseInsensitive ) )
 
 1690     validSVG = QFileInfo::exists( resolvedPath );
 
 1694     resolvedPath = svgPath;
 
 1699   mShapeSVGPathLineEdit->setStyleSheet( !validSVG ? QStringLiteral( 
"QLineEdit{ color: rgb(225, 0, 0); }" ) : QString() );
 
 1700   mShapeSVGPathLineEdit->setToolTip( !validSVG ? tr( 
"File not found" ) : resolvedPath );
 
 1702   QColor fill, stroke;
 
 1703   double strokeWidth = 0.0;
 
 1704   bool fillParam = 
false, strokeParam = 
false, strokeWidthParam = 
false;
 
 1710   mShapeSVGParamsBtn->setEnabled( validSVG && ( fillParam || strokeParam || strokeWidthParam ) );
 
 1712   mShapeFillColorLabel->setEnabled( validSVG && fillParam );
 
 1713   mShapeFillColorBtn->setEnabled( validSVG && fillParam );
 
 1714   mShapeFillColorDDBtn->setEnabled( validSVG && fillParam );
 
 1715   if ( mLoadSvgParams && validSVG && fillParam )
 
 1716     mShapeFillColorBtn->setColor( fill );
 
 1718   mShapeStrokeColorLabel->setEnabled( validSVG && strokeParam );
 
 1719   mShapeStrokeColorBtn->setEnabled( validSVG && strokeParam );
 
 1720   mShapeStrokeColorDDBtn->setEnabled( validSVG && strokeParam );
 
 1721   if ( mLoadSvgParams && validSVG && strokeParam )
 
 1722     mShapeStrokeColorBtn->setColor( stroke );
 
 1724   mShapeStrokeWidthLabel->setEnabled( validSVG && strokeWidthParam );
 
 1725   mShapeStrokeWidthSpnBx->setEnabled( validSVG && strokeWidthParam );
 
 1726   mShapeStrokeWidthDDBtn->setEnabled( validSVG && strokeWidthParam );
 
 1727   if ( mLoadSvgParams && validSVG && strokeWidthParam )
 
 1728     mShapeStrokeWidthSpnBx->setValue( strokeWidth );
 
 1734   mShapeSVGUnitsLabel->setEnabled( validSVG && strokeWidthParam );
 
 1737 void QgsTextFormatWidget::updateAvailableShadowPositions()
 
 1739   if ( mShadowUnderCmbBx->count() == 0
 
 1745     mShadowUnderCmbBx->clear();
 
 1753     mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( currentPlacement ) );
 
 1754     if ( mShadowUnderCmbBx->currentIndex() == -1 )
 
 1755       mShadowUnderCmbBx->setCurrentIndex( 0 );
 
 1759 void QgsTextFormatWidget::updateProperty()
 
 1767 void QgsTextFormatWidget::createAuxiliaryField()
 
 1794   property.setActive( 
true );
 
 1803 void QgsTextFormatWidget::updateShapeFrameStatus()
 
 1805   mShapeFrame->setEnabled( mShapeDrawDDBtn->isActive() || mShapeDrawChkBx->isChecked() );
 
 1808 void QgsTextFormatWidget::updateBufferFrameStatus()
 
 1810   mBufferFrame->setEnabled( mBufferDrawDDBtn->isActive() || mBufferDrawChkBx->isChecked() );
 
 1813 void QgsTextFormatWidget::updateShadowFrameStatus()
 
 1815   mShadowFrame->setEnabled( mShadowDrawDDBtn->isActive() || mShadowDrawChkBx->isChecked() );
 
 1818 void QgsTextFormatWidget::updateCalloutFrameStatus()
 
 1820   mCalloutFrame->setEnabled( mCalloutDrawDDBtn->isActive() || mCalloutsDrawCheckBox->isChecked() );
 
 1864   saveDlg.
setDefaultTags( mTextFormatsListWidget->currentTagFilter() );
 
 1865   if ( !saveDlg.exec() )
 
 1868   if ( saveDlg.
name().isEmpty() )
 
 1874     int res = QMessageBox::warning( 
this, tr( 
"Save Text Format" ),
 
 1875                                     tr( 
"Format with name '%1' already exists. Overwrite?" )
 
 1876                                     .arg( saveDlg.
name() ),
 
 1877                                     QMessageBox::Yes | QMessageBox::No );
 
 1878     if ( res != QMessageBox::Yes )
 
 1885   QStringList symbolTags = saveDlg.
tags().split( 
',' );
 
 1892 void QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked()
 
 1895   svgDlg.setWindowTitle( tr( 
"Select SVG file" ) );
 
 1896   svgDlg.svgSelector()->setSvgPath( mShapeSVGPathLineEdit->text().trimmed() );
 
 1898   if ( svgDlg.exec() == QDialog::Accepted )
 
 1900     QString svgPath = svgDlg.svgSelector()->currentSvgPath();
 
 1901     if ( !svgPath.isEmpty() )
 
 1903       mShapeSVGPathLineEdit->setText( svgPath );
 
 1909 void QgsTextFormatWidget::mShapeSVGParamsBtn_clicked()
 
 1911   QString svgPath = mShapeSVGPathLineEdit->text();
 
 1912   mLoadSvgParams = 
true;
 
 1913   updateSvgWidgets( svgPath );
 
 1914   mLoadSvgParams = 
false;
 
 1917 void QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged( 
int index )
 
 1923 void QgsTextFormatWidget::mPreviewTextEdit_textChanged( 
const QString &text )
 
 1925   lblFontPreview->setText( text );
 
 1929 void QgsTextFormatWidget::mPreviewTextBtn_clicked()
 
 1931   mPreviewTextEdit->setText( QStringLiteral( 
"Lorem Ipsum" ) );
 
 1935 void QgsTextFormatWidget::mPreviewBackgroundBtn_colorChanged( 
const QColor &color )
 
 1940 void QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked()
 
 1942   bool gotChar = 
false;
 
 1944   const QChar initial = !mDirectSymbLeftLineEdit->text().isEmpty() ? mDirectSymbLeftLineEdit->text().at( 0 ) : QChar();
 
 1945   QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
 
 1950   if ( !dirSymb.isNull() )
 
 1951     mDirectSymbLeftLineEdit->setText( QString( dirSymb ) );
 
 1954 void QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked()
 
 1956   bool gotChar = 
false;
 
 1957   const QChar initial = !mDirectSymbRightLineEdit->text().isEmpty() ? mDirectSymbRightLineEdit->text().at( 0 ) : QChar();
 
 1958   QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
 
 1963   if ( !dirSymb.isNull() )
 
 1964     mDirectSymbRightLineEdit->setText( QString( dirSymb ) );
 
 1967 void QgsTextFormatWidget::chkLineOrientationDependent_toggled( 
bool active )
 
 1971     chkLineAbove->setText( tr( 
"Left of line" ) );
 
 1972     chkLineBelow->setText( tr( 
"Right of line" ) );
 
 1976     chkLineAbove->setText( tr( 
"Above line" ) );
 
 1977     chkLineBelow->setText( tr( 
"Below line" ) );
 
 1982 void QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked()
 
 1997   if ( dlg.exec() == QDialog::Accepted )
 
 2004 void QgsTextFormatWidget::showBackgroundRadius( 
bool show )
 
 2006   mShapeRadiusLabel->setVisible( show );
 
 2007   mShapeRadiusXDbSpnBx->setVisible( show );
 
 2009   mShapeRadiusYDbSpnBx->setVisible( show );
 
 2011   mShapeRadiusUnitWidget->setVisible( show );
 
 2013   mShapeRadiusDDBtn->setVisible( show );
 
 2014   mShapeRadiusUnitsDDBtn->setVisible( show );
 
 2019   mCoordAlignmentFrame->setEnabled( enable );
 
 2025     return *lExpressionContext;
 
 2046   if ( mGeometryGeneratorGroupBox->isChecked() )
 
 2060   : QDialog( parent, fl )
 
 2062   setWindowTitle( tr( 
"Text Settings" ) );
 
 2065   mFormatWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
 
 2067   QVBoxLayout *layout = 
new QVBoxLayout( 
this );
 
 2068   layout->addWidget( mFormatWidget );
 
 2070   mButtonBox = 
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, Qt::Horizontal, 
this );
 
 2071   layout->addWidget( mButtonBox );
 
 2073   setLayout( layout );
 
 2076   connect( mButtonBox->button( QDialogButtonBox::Ok ), &QAbstractButton::clicked, 
this, &QDialog::accept );
 
 2077   connect( mButtonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked, 
this, &QDialog::reject );
 
 2078   connect( mButtonBox->button( QDialogButtonBox::Help ), &QAbstractButton::clicked, 
this, &QgsTextFormatDialog::showHelp );
 
 2083   return mFormatWidget->
format();
 
 2086 void QgsTextFormatDialog::showHelp()
 
 2088   QgsHelp::openHelp( QStringLiteral( 
"style_library/label_settings.html#formatting-the-label-text" ) );
 
 2104   mFormatWidget = qobject_cast< QgsTextFormatWidget * >( 
widget() );
 
 2107     if ( !mBlockSignals )
 
 2114   return mFormatWidget->
format();
 
 2119   mBlockSignals = 
true;
 
 2121   mBlockSignals = 
false;
 
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
static QgsSvgCache * svgCache()
Returns the application's SVG cache, used for caching SVG images and handling parameter replacement w...
bool addAuxiliaryField(const QgsPropertyDefinition &definition)
Adds an auxiliary field for the given property.
static QString nameFromProperty(const QgsPropertyDefinition &def, bool joined=false)
Returns the name of the auxiliary field for a property definition.
bool exists(const QgsPropertyDefinition &definition) const
Returns true if the property is stored in the layer already, false otherwise.
A dialog for selecting a single character from a single font.
QChar selectCharacter(bool *gotChar, const QFont &font, const QString &style, QChar initialSelection=QChar())
Opens the dialog modally and returns when the user has selected a character.
A QGIS expression editor based on QScintilla2.
void collapsedStateChanged(bool collapsed)
Signal emitted when groupbox collapsed/expanded state is changed, and when first shown.
A groupbox that collapses/expands when toggled and can save its collapsed and checked states.
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
static QgsExpressionContextScope * atlasScope(const QgsLayoutAtlas *atlas)
Creates a new scope which contains variables and functions relating to a QgsLayoutAtlas.
static QgsExpressionContextScope * mapSettingsScope(const QgsMapSettings &mapSettings)
Creates a new scope which contains variables and functions relating to a QgsMapSettings object.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void setOriginalValueVariable(const QVariant &value)
Sets the original value variable value for the context.
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
void setHighlightedVariables(const QStringList &variableNames)
Sets the list of variable names within the context intended to be highlighted to the user.
static const QString EXPR_ORIGINAL_VALUE
Inbuilt variable name for value original value variable.
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
QgsFillSymbol * clone() const override
Returns a deep copy of this symbol.
static bool fontFamilyMatchOnSystem(const QString &family, QString *chosen=nullptr, bool *match=nullptr)
Check whether font family is on system.
static bool updateFontViaStyle(QFont &f, const QString &fontstyle, bool fallback=false)
Updates font with named style and retain all font properties.
static QgsGui * instance()
Returns a pointer to the singleton instance.
static void enableAutoGeometryRestore(QWidget *widget, const QString &key=QString())
Register the widget to allow its position to be automatically saved and restored when open and closed...
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.
static QIcon iconForWkbType(QgsWkbTypes::Type type)
Returns the icon for a vector layer whose geometry type is provided.
@ SymbolLeftRight
Place direction symbols on left/right of label.
@ SymbolAbove
Place direction symbols on above label.
@ SymbolBelow
Place direction symbols on below label.
static void warning(const QString &msg)
Goes to qWarning.
Map canvas is a class for displaying all GIS data types on a canvas.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
double scale() const
Returns the calculated map scale.
QgsUnitTypes::DistanceUnit mapUnits() const
Returns the units of the map's geographical coordinates - used for scale calculation.
A marker symbol type, for rendering Point and MultiPoint geometries.
QgsMarkerSymbol * clone() const override
Returns a deep copy of this symbol.
A dialog to create a new auxiliary layer.
static QgsPaintEffect * defaultStack()
Returns a new effect stack consisting of a sensible selection of default effects.
static bool isDefaultStack(QgsPaintEffect *effect)
Tests whether a paint effect matches the default effects stack.
@ ShowDefined
Show upside down when rotation is layer- or data-defined.
@ Upright
Upside-down labels (90 <= angle < 270) are shown upright.
@ ShowAll
Show upside down for all labels, including dynamic ones.
Placement
Placement modes which determine how label candidates are generated for a feature.
@ PerimeterCurved
Arranges candidates following the curvature of a polygon's boundary. Applies to polygon layers only.
@ Curved
Arranges candidates following the curvature of a line feature. Applies to line layers only.
@ Horizontal
Arranges horizontal candidates scattered throughout a polygon feature. Applies to polygon layers only...
@ Free
Arranges candidates scattered throughout a polygon feature. Candidates are rotated to respect the pol...
@ OverPoint
Arranges candidates over a point (or centroid of a polygon), or at a preset offset from the point....
@ AroundPoint
Arranges candidates in a circle around a point (or centroid of a polygon). Applies to point or polygo...
@ Line
Arranges candidates parallel to a generalised line representing the feature or parallel to a polygon'...
@ OrderedPositionsAroundPoint
Candidates are placed in predefined positions around a point. Preference is given to positions with g...
@ OutsidePolygons
Candidates are placed outside of polygon boundaries. Applies to polygon layers only....
Property
Data definable properties.
@ MaskEnabled
Whether the mask is enabled.
@ LabelRotation
Label rotation.
@ PositionY
Y-coordinate data defined label position.
@ OverrunDistance
Distance which labels can extend past either end of linear features.
@ Strikeout
Use strikeout.
@ FontStyle
Font style name.
@ PositionX
X-coordinate data defined label position.
@ CalloutDraw
Show callout.
@ Underline
Use underline.
@ FontLetterSpacing
Letter spacing.
@ MaskJoinStyle
Mask join style.
@ Hali
Horizontal alignment for data defined label position (Left, Center, Right)
@ MaskBufferUnit
Mask buffer size unit.
@ LabelAllParts
Whether all parts of multi-part features should be labeled.
@ ShadowOpacity
Shadow opacity.
@ BufferOpacity
Buffer opacity.
@ ShapeOpacity
Shape opacity.
@ FontSizeUnit
Font size units.
@ Italic
Use italic style.
@ PredefinedPositionOrder
@ FontWordSpacing
Word spacing.
@ MaskBufferSize
Mask buffer size.
@ MinimumScale
Minimum map scale (ie most "zoomed out")
@ FontBlendMode
Text blend mode.
@ MaximumScale
Maximum map scale (ie most "zoomed in")
@ MaskOpacity
Mask opacity.
@ PolygonLabelOutside
Whether labels outside a polygon feature are permitted, or should be forced (since QGIS 3....
@ FontCase
Label text case.
@ LinePlacementOptions
Line placement flags.
@ Vali
Vertical alignment for data defined label position (Bottom, Base, Half, Cap, Top)
@ FontOpacity
Text opacity.
@ FromPoint
Offset distance applies from point geometry.
@ FromSymbolBounds
Offset distance applies from rendered symbol bounds.
const QgsTextFormat & format() const
Returns the label text formatting settings, e.g., font settings, buffer settings, etc.
static const QgsPropertiesDefinition & propertyDefinitions()
Returns the labeling property definitions.
static QgsProject * instance()
Returns the QgsProject singleton instance.
A grouped map of multiple QgsProperty objects, each referenced by a integer key value.
QgsProperty property(int key) const override
Returns a matching property from the collection, if one exists.
void setProperty(int key, const QgsProperty &property)
Adds a property to the collection and takes ownership of it.
QSet< int > propertyKeys() const override
Returns a list of property keys contained within the collection.
bool isActive(int key) const override
Returns true if the collection contains an active property with the specified key.
Definition for a property.
A store for object properties.
void setField(const QString &field)
Sets the field name the property references.
void setActive(bool active)
Sets whether the property is currently active.
A collection of string replacements (specified using QgsStringReplacement objects).
Capitalization
Capitalization options.
@ MixedCase
Mixed case, ie no change.
@ AllLowercase
Convert all characters to lowercase.
@ TitleCase
Simple title case conversion - does not fully grammatically parse the text and uses simple rules only...
@ AllUppercase
Convert all characters to uppercase.
@ ForceFirstLetterToCapital
Convert just the first letter of each word to uppercase, leave the rest untouched.
a dialog for setting properties of a newly saved style.
bool isFavorite() const
Returns true if the favorite is checked for the symbol.
QString name() const
Returns the entered name for the new symbol.
void setDefaultTags(const QString &tags)
Sets the default tags for the newly created item.
QString tags() const
Returns any tags entered for the new symbol (as a comma separated value list).
QgsTextFormat textFormat(const QString &name) const
Returns the text format with the specified name.
QgsTextFormat defaultTextFormat(QgsStyle::TextFormatContext context=QgsStyle::TextFormatContext::Labeling) const
Returns the default text format to use for new text based objects in the specified context.
QStringList textFormatNames() const
Returns a list of names of text formats in the style.
bool removeTextFormat(const QString &name)
Removes a text format from the style.
StyleEntity
Enum for Entities involved in a style.
@ LabelSettingsEntity
Label settings.
@ TextFormatEntity
Text formats.
@ SmartgroupEntity
Smart groups.
@ Symbol3DEntity
3D symbol entity (since QGIS 3.14)
@ ColorrampEntity
Color ramps.
@ LegendPatchShapeEntity
Legend patch shape (since QGIS 3.14)
static QgsStyle * defaultStyle()
Returns default application-wide style.
bool addTextFormat(const QString &name, const QgsTextFormat &format, bool update=false)
Adds a text format with the specified name to the style.
QgsPalLayerSettings labelSettings(const QString &name) const
Returns the label settings with the specified name.
bool saveTextFormat(const QString &name, const QgsTextFormat &format, bool favorite, const QStringList &tags)
Adds a text format to the database.
A dialog which allows users to specify a list of substitutions to apply to a string,...
void containsParams(const QString &path, bool &hasFillParam, QColor &defaultFillColor, bool &hasStrokeParam, QColor &defaultStrokeColor, bool &hasStrokeWidthParam, double &defaultStrokeWidth, bool blocking=false) const
Tests if an SVG file contains parameters for fill, stroke color, stroke width.
static QString svgSymbolNameToPath(const QString &name, const QgsPathResolver &pathResolver)
Determines an SVG symbol's path from its name.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
QgsExpressionContext * expressionContext() const
Returns the expression context used for the widget, if set.
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the widget.
QgsMessageBar * messageBar() const
Returns the message bar associated with the widget.
static QgsSymbol * defaultSymbol(QgsWkbTypes::GeometryType geomType)
Returns a new default symbol for the specified geometry type.
Container for settings relating to a text background object.
QgsMapUnitScale strokeWidthMapUnitScale() const
Returns the map unit scale object for the shape stroke width.
void setFillSymbol(QgsFillSymbol *symbol)
Sets the current fill symbol for the background shape.
RotationType rotationType() const
Returns the method used for rotating the background shape.
QString svgFile() const
Returns the absolute path to the background SVG file, if set.
QSizeF size() const
Returns the size of the background shape.
QSizeF radii() const
Returns the radii used for rounding the corners of shapes.
QgsMapUnitScale radiiMapUnitScale() const
Returns the map unit scale object for the shape radii.
void setOpacity(double opacity)
Sets the background shape's opacity.
void setStrokeColor(const QColor &color)
Sets the color used for outlining the background shape.
QgsUnitTypes::RenderUnit strokeWidthUnit() const
Returns the units used for the shape's stroke width.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape size.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the background shape.
SizeType
Methods for determining the background shape size.
bool enabled() const
Returns whether the background is enabled.
void setRadiiUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shape's radii.
double opacity() const
Returns the background shape's opacity.
void setStrokeWidthMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape stroke width.
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.
QColor fillColor() const
Returns the color used for filing the background shape.
void setMarkerSymbol(QgsMarkerSymbol *symbol)
Sets the current marker symbol for the background shape.
void setRadii(QSizeF radii)
Sets the radii used for rounding the corners of shapes.
SizeType sizeType() const
Returns the method used to determine the size of the background shape (e.g., fixed size or buffer aro...
ShapeType type() const
Returns the type of background shape (e.g., square, ellipse, SVG).
double strokeWidth() const
Returns the width of the shape's stroke (stroke).
void setSizeType(SizeType type)
Sets the method used to determine the size of the background shape (e.g., fixed size or buffer around...
ShapeType
Background shape types.
@ ShapeMarkerSymbol
Marker symbol.
@ ShapeSquare
Square - buffered sizes only.
@ ShapeRectangle
Rectangle.
void setFillColor(const QColor &color)
Sets the color used for filing the background shape.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the background shape.
void setStrokeWidthUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shape's stroke width.
QColor strokeColor() const
Returns the color used for outlining the background shape.
void setRotationType(RotationType type)
Sets the method used for rotating the background shape.
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape offset.
QgsFillSymbol * fillSymbol() const
Returns the fill symbol to be rendered in the background.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the background shape.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the shape size.
void setType(ShapeType type)
Sets the type of background shape to draw (e.g., square, ellipse, SVG).
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units used for the shape's size.
RotationType
Methods for determining the rotation of the background shape.
@ RotationSync
Shape rotation is synced with text rotation.
QgsUnitTypes::RenderUnit radiiUnit() const
Returns the units used for the shape's radii.
void setEnabled(bool enabled)
Sets whether the text background will be drawn.
QgsMarkerSymbol * markerSymbol() const
Returns the marker symbol to be rendered in the background.
void setRadiiMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape radii.
void setRotation(double rotation)
Sets the rotation for the background shape, in degrees clockwise.
void setOffset(QPointF offset)
Sets the offset used for drawing the background shape.
void setSize(QSizeF size)
Sets the size of the background shape.
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units used for the shape's size.
const QgsPaintEffect * paintEffect() const
Returns the current paint effect for the background shape.
void setSvgFile(const QString &file)
Sets the path to the background SVG file.
QgsMapUnitScale offsetMapUnitScale() const
Returns the map unit scale object for the shape offset.
void setStrokeWidth(double width)
Sets the width of the shape's stroke (stroke).
QPointF offset() const
Returns the offset used for drawing the background shape.
void setOffsetUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shape's offset.
Container for settings relating to a text buffer.
void setFillBufferInterior(bool fill)
Sets whether the interior of the buffer will be filled in.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the buffer.
Qt::PenJoinStyle joinStyle() const
Returns the buffer join style.
double size() const
Returns the size of the buffer.
void setColor(const QColor &color)
Sets the color for the buffer.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the buffer size.
void setOpacity(double opacity)
Sets the buffer opacity.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the buffer size.
bool enabled() const
Returns whether the buffer is enabled.
double opacity() const
Returns the buffer opacity.
bool fillBufferInterior() const
Returns whether the interior of the buffer will be filled in.
void setEnabled(bool enabled)
Sets whether the text buffer will be drawn.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the buffer size.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the buffer.
const QgsPaintEffect * paintEffect() const
Returns the current paint effect for the buffer.
QColor color() const
Returns the color of the buffer.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the buffer.
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units used for the buffer size.
void setJoinStyle(Qt::PenJoinStyle style)
Sets the join style used for drawing the buffer.
void setSize(double size)
Sets the size of the buffer.
QgsTextFormatDialog(const QgsTextFormat &format, QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, Qt::WindowFlags fl=QgsGuiUtils::ModalDialogFlags, QgsVectorLayer *layer=nullptr)
Constructor for QgsTextFormatDialog.
QgsTextFormat format() const
Returns the current formatting settings defined by the widget.
QDialogButtonBox * buttonBox() const
Returns a reference to the dialog's button box.
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the widget is shown, e.g., the associated map canvas and expression context...
void setFormat(const QgsTextFormat &format)
Sets the format to show in the widget.
void setDockMode(bool dockMode) override
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs.
QgsTextFormat format() const
Returns the current formatting settings defined by the widget.
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the widget is shown, e.g., the associated map canvas and expression context...
QgsTextFormatPanelWidget(const QgsTextFormat &format, QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, QgsVectorLayer *layer=nullptr)
Constructor for QgsTextFormatPanelWidget.
A widget for customizing text formatting settings.
void updatePlacementWidgets()
Updates label placement options to reflect current state of widget.
QButtonGroup * mUpsidedownBtnGrp
Upside down labels button group.
QgsTextFormatWidget(const QgsTextFormat &format=QgsTextFormat(), QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, QgsVectorLayer *layer=nullptr)
Constructor for QgsTextFormatWidget.
int mMinPixelLimit
Pixel size font limit.
void setDockMode(bool enabled)
Sets whether the widget should be shown in a compact dock mode.
void enableDataDefinedAlignment(bool enable)
Controls whether data defined alignment buttons are enabled.
QgsMapCanvas * mMapCanvas
Associated map canvas.
QgsSymbolWidgetContext context() const
Returns the context in which the widget is shown, e.g., the associated map canvas and expression cont...
~QgsTextFormatWidget() override
void deactivateField(QgsPalLayerSettings::Property key)
Deactivate a field from data defined properties and update the corresponding button.
void setFormat(const QgsTextFormat &format)
Sets the current formatting settings.
virtual void setFormatFromStyle(const QString &name, QgsStyle::StyleEntity type)
Sets the current text settings from a style entry.
QButtonGroup * mDirectSymbBtnGrp
Symbol direction button group.
void updateWidgetForFormat(const QgsTextFormat &format)
Updates the widget's state to reflect the settings in a QgsTextFormat.
QList< QgsSymbolLayerReference > mMaskedSymbolLayers
void widgetChanged()
Emitted when the text format defined by the widget changes.
void setPreviewBackground(const QColor &color)
Sets the background color for the text preview widget.
QButtonGroup * mQuadrantBtnGrp
Quadrant button group.
QgsWkbTypes::GeometryType labelGeometryType() const
Returns the geometry type which will be used by the labeling engine when registering labels for the l...
QgsWkbTypes::GeometryType mGeomType
Geometry type for layer, if known.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
QgsSymbolWidgetContext mContext
Context in which widget is shown.
void updateLinePlacementOptions()
Updates line placement options to reflect current state of widget.
void populateDataDefinedButtons()
Sets up connections required for data defined buttons, or updates the existing definition of these bu...
virtual void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the widget is shown, e.g., the associated map canvas and expression context...
void updatePreview()
Updates the text preview.
void auxiliaryFieldCreated()
Emitted when an auxiliary field is created in the widget.
QgsStringReplacementCollection mSubstitutions
Text substitution list.
@ Text
Default mode, show text formatting settings only.
@ Labeling
Show labeling settings in addition to text formatting settings.
virtual void saveFormat()
Saves the current text settings to a style entry.
QgsPropertyCollection mDataDefinedProperties
Data defined properties as defined in the widget.
QgsVectorLayer * mLayer
Associated vector layer.
Container for all settings relating to text rendering.
void setColor(const QColor &color)
Sets the color that text will be rendered in.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the text.
void setSize(double size)
Sets the size for rendered text.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the size.
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the format's property collection, used for data defined overrides.
void setFont(const QFont &font)
Sets the font used for rendering text.
double lineHeight() const
Returns the line height for text.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the size of rendered text.
void setOrientation(TextOrientation orientation)
Sets the orientation for the text.
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the format's property collection, used for data defined overrides.
void setShadow(const QgsTextShadowSettings &shadowSettings)
Sets the text's drop shadow settings.
void setMask(const QgsTextMaskSettings &maskSettings)
Sets the text's masking settings.
bool fontFound() const
Returns true if the specified font was found on the system, or false if the font was not found and a ...
void setPreviewBackgroundColor(const QColor &color)
Sets the background color that text will be rendered on for previews.
void setOpacity(double opacity)
Sets the text's opacity.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the text.
TextOrientation orientation() const
Returns the orientation of the text.
void setAllowHtmlFormatting(bool allow)
Sets whether text should be treated as a HTML document and HTML tags should be used for formatting th...
QString resolvedFontFamily() const
Returns the family for the resolved font, ie if the specified font was not found on the system this w...
QgsTextMaskSettings & mask()
Returns a reference to the masking settings.
bool isValid() const
Returns true if the format is valid.
void setCapitalization(QgsStringUtils::Capitalization capitalization)
Sets the text capitalization style.
void setBuffer(const QgsTextBufferSettings &bufferSettings)
Sets the text's buffer settings.
QgsTextBackgroundSettings & background()
Returns a reference to the text background settings.
TextOrientation
Text orientation.
@ HorizontalOrientation
Vertically oriented text.
@ RotationBasedOrientation
Horizontally or vertically oriented text based on rotation (only available for map labeling)
@ VerticalOrientation
Horizontally oriented text.
bool allowHtmlFormatting() const
Returns true if text should be treated as a HTML document and HTML tags should be used for formatting...
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the size of rendered text.
double opacity() const
Returns the text's opacity.
QString namedStyle() const
Returns the named style for the font used for rendering text (e.g., "bold").
double size() const
Returns the size for rendered text.
QgsTextShadowSettings & shadow()
Returns a reference to the text drop shadow settings.
void setBackground(const QgsTextBackgroundSettings &backgroundSettings)
Sets the text's background settings.q.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the size.
void setNamedStyle(const QString &style)
Sets the named style for the font used for rendering text.
QgsStringUtils::Capitalization capitalization() const
Returns the text capitalization style.
QColor color() const
Returns the color that text will be rendered in.
QFont font() const
Returns the font used for rendering text.
QColor previewBackgroundColor() const
Returns the background color for text previews.
QgsTextBufferSettings & buffer()
Returns a reference to the text buffer settings.
void setLineHeight(double height)
Sets the line height for text.
Container for settings relating to a selective masking around a text.
void setEnabled(bool)
Returns whether the mask is enabled.
void setMaskedSymbolLayers(const QList< QgsSymbolLayerReference > &maskedLayers)
Sets the symbol layers that will be masked by this buffer.
QList< QgsSymbolLayerReference > maskedSymbolLayers() const
Returns a list of references to symbol layers that are masked by this buffer.
void setSize(double size)
Sets the size of the buffer.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the buffer size.
double size() const
Returns the size of the buffer.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the buffer size.
void setSizeUnit(QgsUnitTypes::RenderUnit unit)
Sets the units used for the buffer size.
QgsPaintEffect * paintEffect() const
Returns the current paint effect for the mask.
void setJoinStyle(Qt::PenJoinStyle style)
Sets the join style used for drawing the buffer.
QgsUnitTypes::RenderUnit sizeUnit() const
Returns the units for the buffer size.
double opacity() const
Returns the mask's opacity.
bool enabled() const
Returns whether the mask is enabled.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the mask.
Qt::PenJoinStyle joinStyle() const
Returns the buffer join style.
void setOpacity(double opacity)
Sets the mask's opacity.
Container for settings relating to a text shadow.
int offsetAngle() const
Returns the angle for offsetting the position of the shadow from the text.
void setBlurRadiusMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shadow blur radius.
bool enabled() const
Returns whether the shadow is enabled.
int scale() const
Returns the scaling used for the drop shadow (in percentage of original size).
void setShadowPlacement(QgsTextShadowSettings::ShadowPlacement placement)
Sets the placement for the drop shadow.
double opacity() const
Returns the shadow's opacity.
QgsMapUnitScale blurRadiusMapUnitScale() const
Returns the map unit scale object for the shadow blur radius.
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shadow offset distance.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the drop shadow.
void setColor(const QColor &color)
Sets the color for the drop shadow.
QColor color() const
Returns the color of the drop shadow.
void setOffsetGlobal(bool global)
Sets whether the global shadow offset should be used.
ShadowPlacement
Placement positions for text shadow.
@ ShadowBuffer
Draw shadow under buffer.
@ ShadowShape
Draw shadow under background shape.
@ ShadowLowest
Draw shadow below all text components.
@ ShadowText
Draw shadow under text.
void setScale(int scale)
Sets the scaling used for the drop shadow (in percentage of original size).
void setBlurAlphaOnly(bool alphaOnly)
Sets whether only the alpha channel for the shadow should be blurred.
QgsTextShadowSettings::ShadowPlacement shadowPlacement() const
Returns the placement for the drop shadow.
double offsetDistance() const
Returns the distance for offsetting the position of the shadow from the text.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the drop shadow.
void setOffsetDistance(double distance)
Sets the distance for offsetting the position of the shadow from the text.
void setOpacity(double opacity)
Sets the shadow's opacity.
QgsMapUnitScale offsetMapUnitScale() const
Returns the map unit scale object for the shadow offset distance.
QgsUnitTypes::RenderUnit blurRadiusUnit() const
Returns the units used for the shadow's blur radius.
bool blurAlphaOnly() const
Returns whether only the alpha channel for the shadow will be blurred.
bool offsetGlobal() const
Returns true if the global shadow offset will be used.
void setOffsetAngle(int angle)
Sets the angle for offsetting the position of the shadow from the text.
QgsUnitTypes::RenderUnit offsetUnit() const
Returns the units used for the shadow's offset.
void setBlurRadiusUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shadow's blur radius.
double blurRadius() const
Returns the blur radius for the shadow.
void setBlurRadius(double blurRadius)
Sets the blur radius for the shadow.
void setOffsetUnit(QgsUnitTypes::RenderUnit units)
Sets the units used for the shadow's offset.
void setEnabled(bool enabled)
Sets whether the text shadow will be drawn.
QList< QgsUnitTypes::RenderUnit > RenderUnitList
List of render units.
@ RenderMetersInMapUnits
Meters value as Map units.
@ RenderPercentage
Percentage of another measurement (e.g., canvas size, feature size)
@ RenderPoints
Points (e.g., for font sizes)
@ RenderMillimeters
Millimeters.
@ RenderMapUnits
Map units.
Represents a vector layer which manages a vector based data sets.
Q_INVOKABLE QgsWkbTypes::GeometryType geometryType() const
Returns point, line or polygon.
QgsAuxiliaryLayer * auxiliaryLayer()
Returns the current auxiliary layer.
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
QSize iconSize(bool dockableToolbar)
Returns the user-preferred size of a window's toolbar icons.
int scaleIconSize(int standardSize)
Scales an icon size to compensate for display pixel density, making the icon size hi-dpi friendly,...
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.