48#include <QButtonGroup> 
   53  , mMapCanvas( mapCanvas )
 
   57  setWidgetMode( 
Text );
 
 
   64  , mMapCanvas( mapCanvas )
 
   71  setWidgetMode( mode );
 
 
   74void QgsTextFormatWidget::initWidget()
 
   78  mGeometryGeneratorGroupBox->setCollapsed( 
true );
 
   80  connect( mShapeSVGPathLineEdit, &QLineEdit::textChanged, 
this, &QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged );
 
   81  connect( mFontSizeSpinBox, 
static_cast < void ( QDoubleSpinBox::* )( 
double ) 
> ( &QDoubleSpinBox::valueChanged ), 
this, &QgsTextFormatWidget::mFontSizeSpinBox_valueChanged );
 
   82  connect( mFontFamilyCmbBx, &QFontComboBox::currentFontChanged, 
this, &QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged );
 
   83  connect( mFontStyleComboBox, &QComboBox::currentTextChanged, 
this, &QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged );
 
   84  connect( mFontUnderlineBtn, &QToolButton::toggled, 
this, &QgsTextFormatWidget::mFontUnderlineBtn_toggled );
 
   85  connect( mFontStrikethroughBtn, &QToolButton::toggled, 
this, &QgsTextFormatWidget::mFontStrikethroughBtn_toggled );
 
   86  connect( mFontWordSpacingSpinBox, 
static_cast < void ( QDoubleSpinBox::* )( 
double ) 
> ( &QDoubleSpinBox::valueChanged ), 
this, &QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged );
 
   87  connect( mFontLetterSpacingSpinBox, 
static_cast < void ( QDoubleSpinBox::* )( 
double ) 
> ( &QDoubleSpinBox::valueChanged ), 
this, &QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged );
 
   89  connect( mFontMinPixelSpinBox, 
static_cast < void ( QSpinBox::* )( 
int ) 
> ( &QSpinBox::valueChanged ), 
this, &QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged );
 
   90  connect( mFontMaxPixelSpinBox, 
static_cast < void ( QSpinBox::* )( 
int ) 
> ( &QSpinBox::valueChanged ), 
this, &QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged );
 
   99  connect( mShapeTypeCmbBx, 
static_cast<void ( QComboBox::* )( 
int )
>( &QComboBox::currentIndexChanged ), 
this, &QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged );
 
  100  connect( mShapeRotationCmbBx, 
static_cast<void ( QComboBox::* )( 
int )
>( &QComboBox::currentIndexChanged ), 
this, &QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged );
 
  101  connect( mShapeSVGParamsBtn, &QPushButton::clicked, 
this, &QgsTextFormatWidget::mShapeSVGParamsBtn_clicked );
 
  102  connect( mShapeSVGSelectorBtn, &QPushButton::clicked, 
this, &QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked );
 
  103  connect( mPreviewTextEdit, &QLineEdit::textChanged, 
this, &QgsTextFormatWidget::mPreviewTextEdit_textChanged );
 
  104  connect( mPreviewTextBtn, &QToolButton::clicked, 
this, &QgsTextFormatWidget::mPreviewTextBtn_clicked );
 
  106  connect( mDirectSymbLeftToolBtn, &QToolButton::clicked, 
this, &QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked );
 
  107  connect( mDirectSymbRightToolBtn, &QToolButton::clicked, 
this, &QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked );
 
  108  connect( chkLineOrientationDependent, &QCheckBox::toggled, 
this, &QgsTextFormatWidget::chkLineOrientationDependent_toggled );
 
  109  connect( mToolButtonConfigureSubstitutes, &QToolButton::clicked, 
this, &QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked );
 
  110  connect( mKerningCheckBox, &QCheckBox::toggled, 
this, &QgsTextFormatWidget::kerningToggled );
 
  111  connect( mComboOverlapHandling, qOverload< int >( &QComboBox::currentIndexChanged ), 
this, &QgsTextFormatWidget::overlapModeChanged );
 
  114  mOptionsTab->setIconSize( QSize( iconSize, iconSize ) );
 
  115  mLabelingOptionsListWidget->setIconSize( QSize( iconSize, iconSize ) ) ;
 
  121  mPreviewTextBtn->setIconSize( QSize( iconSize16, iconSize16 ) );
 
  122  mPointOffsetAboveLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  123  mPointOffsetAbove->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  124  mPointOffsetAboveRight->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  125  mPointOffsetLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  126  mPointOffsetOver ->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  127  mPointOffsetRight->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  128  mPointOffsetBelowLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  129  mPointOffsetBelow->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  130  mPointOffsetBelowRight->setIconSize( QSize( iconSize32, iconSize18 ) );
 
  131  mLabelMinScale->setPixmap( 
QgsApplication::getThemeIcon( QStringLiteral( 
"/mActionZoomOut.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
 
  132  mLabelMaxScale->setPixmap( 
QgsApplication::getThemeIcon( QStringLiteral( 
"/mActionZoomIn.svg" ) ).pixmap( QSize( iconSize24, iconSize24 ) ) );
 
  135  mFontUnderlineBtn->setMinimumSize( buttonSize, buttonSize );
 
  136  mFontUnderlineBtn->setMaximumSize( buttonSize, buttonSize );
 
  137  mFontStrikethroughBtn->setMinimumSize( buttonSize, buttonSize );
 
  138  mFontStrikethroughBtn->setMaximumSize( buttonSize, buttonSize );
 
  139  mFontBoldBtn->setMinimumSize( buttonSize, buttonSize );
 
  140  mFontBoldBtn->setMaximumSize( buttonSize, buttonSize );
 
  141  mFontItalicBtn->setMinimumSize( buttonSize, buttonSize );
 
  142  mFontItalicBtn->setMaximumSize( buttonSize, buttonSize );
 
  144  mPreviewScaleComboBox->setMapCanvas( 
mMapCanvas );
 
  145  mPreviewScaleComboBox->setShowCurrentScaleButton( 
true );
 
  148  const auto unitWidgets = findChildren<QgsUnitSelectionWidget *>();
 
  186  mFontLineHeightSpinBox->setClearValue( 100.0 );
 
  187  mShapeRotationDblSpnBx->setClearValue( 0.0 );
 
  188  mShapeOffsetXSpnBx->setClearValue( 0.0 );
 
  189  mShapeOffsetYSpnBx->setClearValue( 0.0 );
 
  190  mPointOffsetXSpinBox->setClearValue( 0.0 );
 
  191  mPointOffsetYSpinBox->setClearValue( 0.0 );
 
  192  mPointAngleSpinBox->setClearValue( 0.0 );
 
  193  mFontLetterSpacingSpinBox->setClearValue( 0.0 );
 
  194  mFontWordSpacingSpinBox->setClearValue( 0.0 );
 
  195  mZIndexSpinBox->setClearValue( 0.0 );
 
  196  mLineDistanceSpnBx->setClearValue( 0.0 );
 
  197  mMaximumDistanceSpnBx->setMinimum( 0 );
 
  198  mMaximumDistanceSpnBx->setClearValue( 0.0, tr( 
"Not set" ) );
 
  199  mSpinStretch->setClearValue( 100 );
 
  200  mTabStopDistanceSpin->setMinimum( 0 );
 
  205      mFontLineHeightSpinBox->setClearValue( 100.0 );
 
  207      mFontLineHeightSpinBox->setClearValue( 10.0 );
 
  227  updateAvailableShadowPositions();
 
  230  mBackgroundMarkerSymbolButton->setDialogTitle( tr( 
"Background Symbol" ) );
 
  231  mBackgroundMarkerSymbolButton->registerExpressionContextGenerator( 
this );
 
  232  mBackgroundMarkerSymbolButton->setMapCanvas( 
mMapCanvas );
 
  234  mBackgroundFillSymbolButton->setDialogTitle( tr( 
"Background Symbol" ) );
 
  235  mBackgroundFillSymbolButton->registerExpressionContextGenerator( 
this );
 
  236  mBackgroundFillSymbolButton->setMapCanvas( 
mMapCanvas );
 
  240  mRefFont = lblFontPreview->font();
 
  243  connect( mShadowOffsetAngleDial, &QAbstractSlider::valueChanged, mShadowOffsetAngleSpnBx, &QSpinBox::setValue );
 
  244  connect( mShadowOffsetAngleSpnBx, 
static_cast < void ( QSpinBox::* )( 
int ) 
> ( &QSpinBox::valueChanged ), mShadowOffsetAngleDial, &QAbstractSlider::setValue );
 
  245  connect( mLimitLabelChkBox, &QAbstractButton::toggled, mLimitLabelSpinBox, &QWidget::setEnabled );
 
  246  connect( mCheckBoxSubstituteText, &QAbstractButton::toggled, mToolButtonConfigureSubstitutes, &QWidget::setEnabled );
 
  256  populateFontCapitalsComboBox();
 
  259  mPreviewBackgroundBtn->setColorDialogTitle( tr( 
"Select Fill Color" ) );
 
  260  mPreviewBackgroundBtn->setContext( QStringLiteral( 
"labeling" ) );
 
  261  mPreviewBackgroundBtn->setColor( QColor( 255, 255, 255 ) );
 
  262  btnTextColor->setColorDialogTitle( tr( 
"Select Text Color" ) );
 
  263  btnTextColor->setContext( QStringLiteral( 
"labeling" ) );
 
  264  btnTextColor->setDefaultColor( Qt::black );
 
  265  btnBufferColor->setColorDialogTitle( tr( 
"Select Buffer Color" ) );
 
  266  btnBufferColor->setContext( QStringLiteral( 
"labeling" ) );
 
  267  btnBufferColor->setDefaultColor( Qt::white );
 
  268  mShapeStrokeColorBtn->setColorDialogTitle( tr( 
"Select Stroke Color" ) );
 
  269  mShapeStrokeColorBtn->setContext( QStringLiteral( 
"labeling" ) );
 
  270  mShapeFillColorBtn->setColorDialogTitle( tr( 
"Select Fill Color" ) );
 
  271  mShapeFillColorBtn->setContext( QStringLiteral( 
"labeling" ) );
 
  272  mShadowColorBtn->setColorDialogTitle( tr( 
"Select Shadow Color" ) );
 
  273  mShadowColorBtn->setContext( QStringLiteral( 
"labeling" ) );
 
  274  mShadowColorBtn->setDefaultColor( Qt::black );
 
  276  mFontColorDDBtn->registerLinkedWidget( btnTextColor );
 
  277  mBufferColorDDBtn->registerLinkedWidget( btnBufferColor );
 
  278  mShapeStrokeColorDDBtn->registerLinkedWidget( mShapeStrokeColorBtn );
 
  279  mShapeFillColorDDBtn->registerLinkedWidget( mShapeFillColorBtn );
 
  280  mShadowColorDDBtn->registerLinkedWidget( mShadowColorBtn );
 
  321  const auto groupBoxes = findChildren<QgsCollapsibleGroupBox *>();
 
  324    grpbox->setSettingGroup( QStringLiteral( 
"mAdvLabelingDlg" ) );
 
  330  mLabelingOptionsListWidget->setAttribute( Qt::WA_MacShowFocusRect, 
false );
 
  335  QSizePolicy policy( mLabelingOptionsListFrame->sizePolicy() );
 
  336  policy.setHorizontalStretch( 0 );
 
  337  mLabelingOptionsListFrame->setSizePolicy( policy );
 
  338  if ( !settings.
contains( QStringLiteral( 
"/Windows/Labeling/OptionsSplitState" ) ) )
 
  341    QList<int> splitsizes;
 
  343    mLabelingOptionsSplitter->setSizes( splitsizes );
 
  347  connect( mLabelStackedWidget, &QStackedWidget::currentChanged, 
this, &QgsTextFormatWidget::optionsStackedWidget_CurrentChanged );
 
  350  mFontPreviewSplitter->restoreState( settings.
value( QStringLiteral( 
"Windows/Labeling/FontPreviewSplitState" ) ).toByteArray() );
 
  351  mLabelingOptionsSplitter->restoreState( settings.
value( QStringLiteral( 
"Windows/Labeling/OptionsSplitState" ) ).toByteArray() );
 
  353  mLabelingOptionsListWidget->setCurrentRow( settings.
value( QStringLiteral( 
"Windows/Labeling/Tab" ), 0 ).toInt() );
 
  357  mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
 
  361  mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
 
  365  mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
 
  367  overlapModeChanged();
 
  369#if defined(HAS_KDE_QT5_FONT_STRETCH_FIX) || (QT_VERSION >= QT_VERSION_CHECK(6, 3, 0)) 
  372  mLabelStretch->hide();
 
  373  mSpinStretch->hide();
 
  374  mFontStretchDDBtn->hide();
 
  379  QList<QWidget *> widgets;
 
  380  widgets << btnBufferColor
 
  382          << chkLabelPerFeaturePart
 
  386          << chkLineOrientationDependent
 
  388          << chkPreserveRotation
 
  390          << comboBufferBlendMode
 
  392          << mBufferJoinStyleComboBox
 
  393          << mBufferTranspFillChbx
 
  394          << mBufferOpacityWidget
 
  395          << mCentroidInsideCheckBox
 
  397          << mCoordRotationUnitComboBox
 
  399          << mDirectSymbLeftLineEdit
 
  400          << mDirectSymbRevChkBx
 
  401          << mDirectSymbRightLineEdit
 
  402          << mFitInsidePolygonCheckBox
 
  403          << mFontCapitalsComboBox
 
  404          << mFontLetterSpacingSpinBox
 
  405          << mFontLimitPixelChkBox
 
  406          << mFontLineHeightSpinBox
 
  407          << mLineHeightUnitWidget
 
  408          << mFontMaxPixelSpinBox
 
  409          << mFontMinPixelSpinBox
 
  410          << mFontMultiLineAlignComboBox
 
  412          << mFontStyleComboBox
 
  413          << mTextOrientationComboBox
 
  414          << mTextOpacityWidget
 
  416          << mFontWordSpacingSpinBox
 
  418          << mFormatNumDecimalsSpnBx
 
  419          << mFormatNumPlusSignChkBx
 
  421          << mLimitLabelSpinBox
 
  422          << mLineDistanceSpnBx
 
  423          << mLineDistanceUnitWidget
 
  424          << mMaximumDistanceSpnBx
 
  425          << mMaximumDistanceUnitWidget
 
  426          << mMaxCharAngleInDSpinBox
 
  427          << mMaxCharAngleOutDSpinBox
 
  429          << mOffsetTypeComboBox
 
  430          << mCheckAllowDegradedPlacement
 
  431          << mComboOverlapHandling
 
  432          << mPointAngleSpinBox
 
  433          << mPointOffsetUnitWidget
 
  434          << mPointOffsetXSpinBox
 
  435          << mPointOffsetYSpinBox
 
  436          << mPreviewBackgroundBtn
 
  439          << mRepeatDistanceSpinBox
 
  440          << mRepeatDistanceUnitWidget
 
  441          << mOverrunDistanceSpinBox
 
  442          << mOverrunDistanceUnitWidget
 
  443          << mScaleBasedVisibilityChkBx
 
  449          << mShadowOffsetAngleSpnBx
 
  450          << mShadowOffsetGlobalChkBx
 
  451          << mShadowOffsetSpnBx
 
  452          << mShadowOffsetUnitWidget
 
  453          << mShadowRadiusAlphaChkBx
 
  454          << mShadowRadiusDblSpnBx
 
  455          << mShadowRadiusUnitWidget
 
  457          << mShadowOpacityWidget
 
  460          << mShapeStrokeColorBtn
 
  461          << mShapeStrokeWidthSpnBx
 
  462          << mShapeStrokeWidthUnitWidget
 
  464          << mShapeFillColorBtn
 
  465          << mShapeOffsetXSpnBx
 
  466          << mShapeOffsetYSpnBx
 
  467          << mShapeOffsetUnitWidget
 
  468          << mShapeRadiusXDbSpnBx
 
  469          << mShapeRadiusYDbSpnBx
 
  470          << mShapeRotationCmbBx
 
  471          << mShapeRotationDblSpnBx
 
  472          << mShapeRadiusUnitWidget
 
  473          << mShapeSVGPathLineEdit
 
  475          << mShapeSizeUnitWidget
 
  478          << mBackgroundOpacityWidget
 
  483          << mAutoWrapLengthSpinBox
 
  484          << mAutoWrapTypeComboBox
 
  485          << mCentroidRadioVisible
 
  486          << mCentroidRadioWhole
 
  487          << mDirectSymbRadioBtnAbove
 
  488          << mDirectSymbRadioBtnBelow
 
  489          << mDirectSymbRadioBtnLR
 
  490          << mUpsidedownRadioAll
 
  491          << mUpsidedownRadioDefined
 
  492          << mUpsidedownRadioOff
 
  493          << mPlacementModeComboBox
 
  494          << mFieldExpressionWidget
 
  495          << mCheckBoxSubstituteText
 
  496          << mGeometryGeneratorGroupBox
 
  497          << mGeometryGenerator
 
  498          << mGeometryGeneratorType
 
  499          << mBackgroundMarkerSymbolButton
 
  500          << mBackgroundFillSymbolButton
 
  501          << mCalloutsDrawCheckBox
 
  502          << mCalloutStyleComboBox
 
  505          << mMaskJoinStyleComboBox
 
  506          << mMaskBufferSizeSpinBox
 
  507          << mMaskOpacityWidget
 
  508          << mCheckAllowLabelsOutsidePolygons
 
  509          << mHtmlFormattingCheckBox
 
  510          << mPrioritizationComboBox
 
  511          << mTabDistanceUnitWidget
 
  512          << mTabStopDistanceSpin;
 
  514  connectValueChanged( widgets );
 
  519  connect( mBufferDrawChkBx, &QCheckBox::stateChanged, 
this, [ = ]( 
int )
 
  521    updateBufferFrameStatus();
 
  524  connect( mShapeDrawChkBx, &QCheckBox::stateChanged, 
this, [ = ]( 
int )
 
  526    updateShapeFrameStatus();
 
  529  connect( mShadowDrawChkBx, &QCheckBox::stateChanged, 
this, [ = ]( 
int )
 
  531    updateShadowFrameStatus();
 
  534  connect( mCalloutsDrawCheckBox, &QCheckBox::stateChanged, 
this, [ = ]( 
int )
 
  536    updateCalloutFrameStatus();
 
  544  whileBlocking( mOptionsTab )->setCurrentIndex( mLabelStackedWidget->currentIndex() );
 
  545  mOptionsTab->tabBar()->setUsesScrollButtons( 
true );
 
  566      toggleDDButtons( 
true );
 
  573      const int prevIndex = mOptionsTab->currentIndex();
 
  574      toggleDDButtons( 
true );
 
  575      delete mLabelingOptionsListWidget->takeItem( 8 ); 
 
  576      delete mLabelingOptionsListWidget->takeItem( 7 ); 
 
  577      delete mLabelingOptionsListWidget->takeItem( 6 ); 
 
  578      delete mLabelingOptionsListWidget->takeItem( 3 ); 
 
  579      mOptionsTab->removeTab( 8 );
 
  580      mOptionsTab->removeTab( 7 );
 
  581      mOptionsTab->removeTab( 6 );
 
  582      mOptionsTab->removeTab( 3 );
 
  583      mLabelStackedWidget->removeWidget( mLabelPage_Rendering );
 
  584      mLabelStackedWidget->removeWidget( mLabelPage_Callouts );
 
  585      mLabelStackedWidget->removeWidget( mLabelPage_Mask );
 
  586      mLabelStackedWidget->removeWidget( mLabelPage_Placement );
 
  596          mLabelStackedWidget->setCurrentIndex( prevIndex - 1 );
 
  597          mOptionsTab->setCurrentIndex( prevIndex - 1 );
 
  604          mLabelStackedWidget->setCurrentIndex( 0 );
 
  605          mOptionsTab->setCurrentIndex( 0 );
 
  609      frameLabelWith->hide();
 
  610      mDirectSymbolsFrame->hide();
 
  611      mFormatNumFrame->hide();
 
  612      mFormatNumChkBx->hide();
 
  613      mFormatNumDDBtn->hide();
 
  614      mCheckBoxSubstituteText->hide();
 
  615      mToolButtonConfigureSubstitutes->hide();
 
  616      mLabelWrapOnCharacter->hide();
 
  617      wrapCharacterEdit->hide();
 
  618      mWrapCharDDBtn->hide();
 
  619      mLabelWrapLinesTo->hide();
 
  620      mAutoWrapLengthSpinBox->hide();
 
  621      mAutoWrapLengthDDBtn->hide();
 
  622      mAutoWrapTypeComboBox->hide();
 
  623      mFontMultiLineLabel->hide();
 
  624      mFontMultiLineAlignComboBox->hide();
 
  625      mFontMultiLineAlignDDBtn->hide();
 
  633void QgsTextFormatWidget::toggleDDButtons( 
bool visible )
 
  635  const auto buttons = findChildren< QgsPropertyOverrideButton * >();
 
  638#if defined(HAS_KDE_QT5_FONT_STRETCH_FIX) || (QT_VERSION >= QT_VERSION_CHECK(6, 3, 0)) 
  641    if ( button == mFontStretchDDBtn )
 
  644    button->setVisible( visible );
 
  650  mOptionsTab->setVisible( enabled );
 
  651  mOptionsTab->setTabToolTip( 0, tr( 
"Text" ) );
 
  652  mOptionsTab->setTabToolTip( 1, tr( 
"Formatting" ) );
 
  653  mOptionsTab->setTabToolTip( 2, tr( 
"Buffer" ) );
 
  654  mOptionsTab->setTabToolTip( 3, tr( 
"Mask" ) );
 
  655  mOptionsTab->setTabToolTip( 4, tr( 
"Background" ) );
 
  656  mOptionsTab->setTabToolTip( 5, tr( 
"Shadow" ) );
 
  657  mOptionsTab->setTabToolTip( 6, tr( 
"Callouts" ) );
 
  658  mOptionsTab->setTabToolTip( 7, tr( 
"Placement" ) );
 
  659  mOptionsTab->setTabToolTip( 8, tr( 
"Rendering" ) );
 
  661  mLabelingOptionsListFrame->setVisible( !enabled );
 
  662  groupBox_mPreview->setVisible( !enabled );
 
 
  666void QgsTextFormatWidget::connectValueChanged( 
const QList<QWidget *> &widgets )
 
  668  const auto constWidgets = widgets;
 
  669  for ( QWidget *widget : constWidgets )
 
  679    else if ( 
QgsOpacityWidget *w = qobject_cast< QgsOpacityWidget *>( widget ) )
 
  683    else if ( 
QgsScaleWidget *w = qobject_cast< QgsScaleWidget *>( widget ) )
 
  691    else if ( QComboBox *w = qobject_cast<QComboBox *>( widget ) )
 
  695    else if ( QSpinBox *w = qobject_cast<QSpinBox *>( widget ) )
 
  699    else if ( QDoubleSpinBox *w = qobject_cast<QDoubleSpinBox *>( widget ) )
 
  703    else if ( 
QgsColorButton *w = qobject_cast<QgsColorButton *>( widget ) )
 
  707    else if ( QCheckBox *w = qobject_cast<QCheckBox *>( widget ) )
 
  711    else if ( QRadioButton *w = qobject_cast<QRadioButton *>( widget ) )
 
  715    else if ( QLineEdit *w = qobject_cast<QLineEdit *>( widget ) )
 
  719    else if ( QSlider *w = qobject_cast<QSlider *>( widget ) )
 
  723    else if ( QGroupBox *w = qobject_cast<QGroupBox *>( widget ) )
 
  733      QgsLogger::warning( QStringLiteral( 
"Could not create connection for widget %1" ).arg( widget->objectName() ) );
 
  766  mDirectSymbDDBtn->registerCheckedWidget( mDirectSymbChkBx );
 
  774  mFormatNumDDBtn->registerCheckedWidget( mFormatNumChkBx );
 
  789  mEnableMaskDDBtn->registerCheckedWidget( mEnableMaskChkBx );
 
  797  mShapeDrawDDBtn->registerCheckedWidget( mShapeDrawChkBx );
 
  819  mShadowDrawDDBtn->registerCheckedWidget( mShadowDrawChkBx );
 
  862  updateDataDefinedAlignment();
 
  865  const QString ddScaleVisInfo = tr( 
"Value < 0 represents a scale closer than 1:1, e.g. -10 = 10:1<br>" 
  866                                     "Value of 0 disables the specific limit." );
 
  868  mScaleBasedVisibilityDDBtn->registerCheckedWidget( mScaleBasedVisibilityChkBx );
 
  870  mScaleBasedVisibilityMinDDBtn->setUsageInfo( ddScaleVisInfo );
 
  872  mScaleBasedVisibilityMaxDDBtn->setUsageInfo( ddScaleVisInfo );
 
  878    mMinScaleWidget->setPredefinedScales( scales );
 
  879    mMaxScaleWidget->setPredefinedScales( scales );
 
  884    mMinScaleWidget->updateScales();
 
  885    mMaxScaleWidget->updateScales();
 
  889  mFontLimitPixelDDBtn->registerCheckedWidget( mFontLimitPixelChkBox );
 
 
  910  if ( !mButtons.contains( key ) )
 
  915    mButtons[key] = button;
 
  932  mBufferDrawChkBx->setChecked( buffer.
enabled() );
 
  933  mBufferFrame->setEnabled( buffer.
enabled() );
 
  934  spinBufferSize->setValue( buffer.
size() );
 
  935  mBufferUnitWidget->setUnit( buffer.
sizeUnit() );
 
  937  btnBufferColor->setColor( buffer.
color() );
 
  938  mBufferOpacityWidget->setOpacity( buffer.
opacity() );
 
  939  mBufferJoinStyleComboBox->setPenJoinStyle( buffer.
joinStyle() );
 
  941  comboBufferBlendMode->setBlendMode( buffer.
blendMode() );
 
  943    mBufferEffect.reset( lPaintEffect->clone() );
 
  947    mBufferEffect->setEnabled( 
false );
 
  949  mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
 
  953  mEnableMaskChkBx->setChecked( mask.
enabled() );
 
  954  mMaskBufferSizeSpinBox->setValue( mask.
size() );
 
  955  mMaskBufferUnitWidget->setUnit( mask.
sizeUnit() );
 
  957  mMaskOpacityWidget->setOpacity( mask.
opacity() );
 
  958  mMaskJoinStyleComboBox->setPenJoinStyle( mask.
joinStyle() );
 
  960    mMaskEffect.reset( lPaintEffect->clone() );
 
  964    mMaskEffect->setEnabled( 
false );
 
  966  mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
 
  976  mTextOrientationComboBox->setCurrentIndex( mTextOrientationComboBox->findData( 
static_cast< int >( 
format.
orientation() ) ) );
 
  979  mFontWordSpacingSpinBox->setValue( 
format.
font().wordSpacing() );
 
  980  mFontLetterSpacingSpinBox->setValue( 
format.
font().letterSpacing() );
 
  989  updateFont( mRefFont );
 
  995    const QString missingTxt = tr( 
"%1 not found. Default substituted." );
 
  996    QString txtPrepend = tr( 
"Chosen font" );
 
 1001    mFontMissingLabel->setText( missingTxt.arg( txtPrepend ) );
 
 1004    mLabelingOptionsListWidget->setCurrentRow( 0 );
 
 1011  mShapeDrawChkBx->setChecked( background.
enabled() );
 
 1012  mShapeFrame->setEnabled( background.
enabled() );
 
 1013  mShapeTypeCmbBx->blockSignals( 
true );
 
 1014  mShapeTypeCmbBx->setCurrentIndex( mShapeTypeCmbBx->findData( background.
type() ) );
 
 1015  mShapeTypeCmbBx->blockSignals( 
false );
 
 1016  updateAvailableShadowPositions();
 
 1017  mShapeSVGPathLineEdit->setText( background.
svgFile() );
 
 1019  mShapeSizeCmbBx->setCurrentIndex( background.
sizeType() );
 
 1020  mShapeSizeXSpnBx->setValue( background.
size().width() );
 
 1021  mShapeSizeYSpnBx->setValue( background.
size().height() );
 
 1022  mShapeSizeUnitWidget->setUnit( background.
sizeUnit() );
 
 1024  mShapeRotationCmbBx->setCurrentIndex( background.
rotationType() );
 
 1027  mShapeRotationDblSpnBx->setValue( background.
rotation() );
 
 1028  mShapeOffsetXSpnBx->setValue( background.
offset().x() );
 
 1029  mShapeOffsetYSpnBx->setValue( background.
offset().y() );
 
 1030  mShapeOffsetUnitWidget->setUnit( background.
offsetUnit() );
 
 1032  mShapeRadiusXDbSpnBx->setValue( background.
radii().width() );
 
 1033  mShapeRadiusYDbSpnBx->setValue( background.
radii().height() );
 
 1034  mShapeRadiusUnitWidget->setUnit( background.
radiiUnit() );
 
 1037  mShapeFillColorBtn->setColor( background.
fillColor() );
 
 1038  mShapeStrokeColorBtn->setColor( background.
strokeColor() );
 
 1039  mShapeStrokeWidthSpnBx->setValue( background.
strokeWidth() );
 
 1043  mBackgroundOpacityWidget->setOpacity( background.
opacity() );
 
 1044  mShapeBlendCmbBx->setBlendMode( background.
blendMode() );
 
 1046  mLoadSvgParams = 
false;
 
 1047  mShapeTypeCmbBx_currentIndexChanged( background.
type() ); 
 
 1049  if ( 
auto *lPaintEffect = background.
paintEffect() )
 
 1050    mBackgroundEffect.reset( lPaintEffect->clone() );
 
 1054    mBackgroundEffect->setEnabled( 
false );
 
 1056  mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
 
 1062  mShadowDrawChkBx->setChecked( shadow.
enabled() );
 
 1063  mShadowFrame->setEnabled( shadow.
enabled() );
 
 1064  mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( shadow.
shadowPlacement() ) );
 
 1065  mShadowOffsetAngleSpnBx->setValue( shadow.
offsetAngle() );
 
 1067  mShadowOffsetUnitWidget->setUnit( shadow.
offsetUnit() );
 
 1069  mShadowOffsetGlobalChkBx->setChecked( shadow.
offsetGlobal() );
 
 1071  mShadowRadiusDblSpnBx->setValue( shadow.
blurRadius() );
 
 1074  mShadowRadiusAlphaChkBx->setChecked( shadow.
blurAlphaOnly() );
 
 1075  mShadowOpacityWidget->setOpacity( shadow.
opacity() );
 
 1076  mShadowScaleSpnBx->setValue( shadow.
scale() );
 
 1078  mShadowColorBtn->setColor( shadow.
color() );
 
 1079  mShadowBlendCmbBx->setBlendMode( shadow.
blendMode() );
 
 
 1091  settings.
setValue( QStringLiteral( 
"Windows/Labeling/FontPreviewSplitState" ), mFontPreviewSplitter->saveState() );
 
 1092  settings.
setValue( QStringLiteral( 
"Windows/Labeling/OptionsSplitState" ), mLabelingOptionsSplitter->saveState() );
 
 1094  int prevIndex = mLabelingOptionsListWidget->currentRow();
 
 1095  if ( mWidgetMode == 
Text )
 
 1097    switch ( prevIndex )
 
 1106  settings.
setValue( QStringLiteral( 
"Windows/Labeling/Tab" ), prevIndex );
 
 
 1133  buffer.
setEnabled( mBufferDrawChkBx->isChecked() );
 
 1134  buffer.
setSize( spinBufferSize->value() );
 
 1135  buffer.
setColor( btnBufferColor->color() );
 
 1136  buffer.
setOpacity( mBufferOpacityWidget->opacity() );
 
 1139  buffer.
setJoinStyle( mBufferJoinStyleComboBox->penJoinStyle() );
 
 1141  buffer.
setBlendMode( comboBufferBlendMode->blendMode() );
 
 1150  mask.
setEnabled( mEnableMaskChkBx->isChecked() );
 
 1151  mask.
setSize( mMaskBufferSizeSpinBox->value() );
 
 1152  mask.
setOpacity( mMaskOpacityWidget->opacity() );
 
 1153  mask.
setSizeUnit( mMaskBufferUnitWidget->unit() );
 
 1155  mask.
setJoinStyle( mMaskJoinStyleComboBox->penJoinStyle() );
 
 1165  background.
setEnabled( mShapeDrawChkBx->isChecked() );
 
 1167  background.
setSvgFile( mShapeSVGPathLineEdit->text() );
 
 1169  background.
setSize( QSizeF( mShapeSizeXSpnBx->value(), mShapeSizeYSpnBx->value() ) );
 
 1170  background.
setSizeUnit( mShapeSizeUnitWidget->unit() );
 
 1173  background.
setRotation( mShapeRotationDblSpnBx->value() );
 
 1174  background.
setOffset( QPointF( mShapeOffsetXSpnBx->value(), mShapeOffsetYSpnBx->value() ) );
 
 1177  background.
setRadii( QSizeF( mShapeRadiusXDbSpnBx->value(), mShapeRadiusYDbSpnBx->value() ) );
 
 1178  background.
setRadiiUnit( mShapeRadiusUnitWidget->unit() );
 
 1181  background.
setFillColor( mShapeFillColorBtn->color() );
 
 1186  background.
setOpacity( mBackgroundOpacityWidget->opacity() );
 
 1187  background.
setBlendMode( mShapeBlendCmbBx->blendMode() );
 
 1198  shadow.
setEnabled( mShadowDrawChkBx->isChecked() );
 
 1209  shadow.
setOpacity( mShadowOpacityWidget->opacity() );
 
 1210  shadow.
setScale( mShadowScaleSpnBx->value() );
 
 1211  shadow.
setColor( mShadowColorBtn->color() );
 
 1215  if ( includeDataDefinedProperties )
 
 
 1246  if ( mButtons.contains( key ) )
 
 
 1255void QgsTextFormatWidget::optionsStackedWidget_CurrentChanged( 
int indx )
 
 1257  mLabelingOptionsListWidget->blockSignals( 
true );
 
 1258  mLabelingOptionsListWidget->setCurrentRow( indx );
 
 1259  mLabelingOptionsListWidget->blockSignals( 
false );
 
 1268    mPreviewExpressionContext = *lExpressionContext;
 
 1273  const auto symbolButtonWidgets = findChildren<QgsSymbolButton *>();
 
 
 1281void QgsTextFormatWidget::collapseSample( 
bool collapse )
 
 1285    QList<int> splitSizes = mFontPreviewSplitter->sizes();
 
 1286    if ( splitSizes[0] > groupBox_mPreview->height() )
 
 1288      const int delta = splitSizes[0] - groupBox_mPreview->height();
 
 1289      splitSizes[0] -= delta;
 
 1290      splitSizes[1] += delta;
 
 1291      mFontPreviewSplitter->setSizes( splitSizes );
 
 1296void QgsTextFormatWidget::changeTextColor( 
const QColor &color )
 
 1302void QgsTextFormatWidget::updateFont( 
const QFont &newFont )
 
 1305  if ( newFont != mRefFont )
 
 1314  QFont symbolFont = mRefFont;
 
 1315  symbolFont.setPointSize( font().pointSize() );
 
 1316  mDirectSymbLeftLineEdit->setFont( symbolFont );
 
 1317  mDirectSymbRightLineEdit->setFont( symbolFont );
 
 1319  blockFontChangeSignals( 
true );
 
 1320  mFontFamilyCmbBx->setCurrentFont( symbolFont );
 
 1321  populateFontStyleComboBox();
 
 1322  mFontUnderlineBtn->setChecked( mRefFont.underline() );
 
 1323  mFontStrikethroughBtn->setChecked( mRefFont.strikeOut() );
 
 1324  mKerningCheckBox->setChecked( mRefFont.kerning() );
 
 1325  blockFontChangeSignals( 
false );
 
 1333void QgsTextFormatWidget::blockFontChangeSignals( 
bool blk )
 
 1335  mFontFamilyCmbBx->blockSignals( blk );
 
 1336  mFontStyleComboBox->blockSignals( blk );
 
 1337  mFontCapitalsComboBox->blockSignals( blk );
 
 1338  mFontUnderlineBtn->blockSignals( blk );
 
 1339  mFontStrikethroughBtn->blockSignals( blk );
 
 1340  mFontWordSpacingSpinBox->blockSignals( blk );
 
 1341  mFontLetterSpacingSpinBox->blockSignals( blk );
 
 1342  mKerningCheckBox->blockSignals( blk );
 
 1357  lblFontPreview->setFormat( 
format() );
 
 
 1360void QgsTextFormatWidget::scrollPreview()
 
 1362  scrollArea_mPreview->ensureVisible( 0, 0, 0, 0 );
 
 1367  mPreviewBackgroundColor = color;
 
 1369  scrollArea_mPreview->widget()->setStyleSheet( QStringLiteral( 
"background: rgb(%1, %2, %3);" ).arg( QString::number( color.red() ),
 
 1370      QString::number( color.green() ),
 
 1371      QString::number( color.blue() ) ) );
 
 
 1374void QgsTextFormatWidget::changeBufferColor( 
const QColor &color )
 
 1383  bool showLineFrame = 
false;
 
 1384  bool showCentroidFrame = 
false;
 
 1385  bool showQuadrantFrame = 
false;
 
 1386  bool showFixedQuadrantFrame = 
false;
 
 1387  bool showPlacementPriorityFrame = 
false;
 
 1388  bool showOffsetTypeFrame = 
false;
 
 1389  bool showOffsetFrame = 
false;
 
 1390  bool showDistanceFrame = 
false;
 
 1391  bool showMaximumDistanceFrame = 
false;
 
 1392  bool showPrioritizationFrame = 
false;
 
 1393  bool showRotationFrame = 
false;
 
 1394  bool showMaxCharAngleFrame = 
false;
 
 1399  bool enableMultiLinesFrame = 
true;
 
 1405    showDistanceFrame = 
true;
 
 1406    showMaximumDistanceFrame = 
true;
 
 1414    showQuadrantFrame = 
true;
 
 1415    showFixedQuadrantFrame = 
true;
 
 1416    showOffsetFrame = 
true;
 
 1417    showRotationFrame = 
true;
 
 1421    showDistanceFrame = 
true;
 
 1422    showMaximumDistanceFrame = 
true;
 
 1423    showPlacementPriorityFrame = 
true;
 
 1424    showPrioritizationFrame = 
true;
 
 1425    showOffsetTypeFrame  = 
true;
 
 1432    showLineFrame = 
true;
 
 1433    showDistanceFrame = 
true;
 
 1436    const bool offline = chkLineAbove->isChecked() || chkLineBelow->isChecked();
 
 1437    chkLineOrientationDependent->setEnabled( offline );
 
 1438    mPlacementDistanceFrame->setEnabled( offline );
 
 1442    showMaxCharAngleFrame = isCurved;
 
 1444    enableMultiLinesFrame = !isCurved;
 
 1449    showDistanceFrame = 
true;
 
 1452  mPlacementLineFrame->setVisible( showLineFrame );
 
 1453  mPlacementPolygonFrame->setVisible( showPolygonPlacementOptions );
 
 1454  mPlacementCentroidFrame->setVisible( showCentroidFrame );
 
 1455  mPlacementQuadrantFrame->setVisible( showQuadrantFrame );
 
 1456  mPlacementFixedQuadrantFrame->setVisible( showFixedQuadrantFrame );
 
 1457  mPlacementCartographicFrame->setVisible( showPlacementPriorityFrame );
 
 1458  mPlacementOffsetFrame->setVisible( showOffsetFrame );
 
 1459  mPlacementDistanceFrame->setVisible( showDistanceFrame );
 
 1460  mPlacementMaximumDistanceFrame->setVisible( showMaximumDistanceFrame );
 
 1461  mPlacementPrioritizationFrame->setVisible( showPrioritizationFrame );
 
 1462  mPlacementOffsetTypeFrame->setVisible( showOffsetTypeFrame );
 
 1463  mPlacementRotationFrame->setVisible( showRotationFrame );
 
 1468  mPlacementMaxCharAngleFrame->setVisible( showMaxCharAngleFrame );
 
 1470  mMultiLinesFrame->setEnabled( enableMultiLinesFrame );
 
 1474  switch ( currentPlacement )
 
 1478        helperText = tr( 
"Arranges label candidates in a clockwise circle around the feature, preferring placements to the top-right of the feature." );
 
 1480        helperText = tr( 
"Arranges label candidates in a cluster around the feature's centroid, preferring placements directly over the centroid." );
 
 1484        helperText = tr( 
"Arranges label candidates directly over the feature or at a preset offset from the feature." );
 
 1486        helperText = tr( 
"Arranges label candidates directly over the feature's centroid, or at a preset offset from the centroid." );
 
 1490        helperText = tr( 
"Arranges label candidates parallel to a generalised line representing the feature. Placements which fall over straighter portions of the line are preferred." );
 
 1492        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." );
 
 1496        helperText = tr( 
"Arranges candidates following the curvature of a line feature. Placements which fall over straighter portions of the line are preferred." );
 
 1500        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." );
 
 1502        helperText = tr( 
"Label candidates are arranged horizontally along the length of the feature." );
 
 1506        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." );
 
 1510        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." );
 
 1514        helperText = tr( 
"Arranges candidates following the curvature of the feature's perimeter. Placements which fall over straighter portions of the perimeter are preferred." );
 
 1518        helperText = tr( 
"Label candidates are placed outside of the features, preferring placements which give greatest visual association between the label and the feature." );
 
 1521  mPlacementModeDescriptionLabel->setText( QStringLiteral( 
"<i>%1</i>" ).arg( helperText ) );
 
 
 1524void QgsTextFormatWidget::populateFontCapitalsComboBox()
 
 1529#if defined(HAS_KDE_QT5_SMALL_CAPS_FIX) || QT_VERSION >= QT_VERSION_CHECK(6, 3, 0) 
 1539void QgsTextFormatWidget::populateFontStyleComboBox()
 
 1541  mFontStyleComboBox->clear();
 
 1542  const QStringList styles = mFontDB.styles( mRefFont.family() );
 
 1543  const auto constStyles = styles;
 
 1544  for ( 
const QString &style : constStyles )
 
 1546    mFontStyleComboBox->addItem( style );
 
 1549  QString targetStyle = mFontDB.styleString( mRefFont );
 
 1550  if ( !styles.contains( targetStyle ) )
 
 1553    targetStyle = QFontInfo( f ).styleName();
 
 1554    mRefFont.setStyleName( targetStyle );
 
 1557  const int stylIndx = mFontStyleComboBox->findText( targetStyle );
 
 1558  if ( stylIndx > -1 )
 
 1563  mFontStyleComboBox->setCurrentIndex( curIndx );
 
 1566void QgsTextFormatWidget::mFontSizeSpinBox_valueChanged( 
double d )
 
 1568  mRefFont.setPointSizeF( d );
 
 1569  updateFont( mRefFont );
 
 1572void QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged( 
const QFont &f )
 
 1575  updateFont( mRefFont );
 
 1578void QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged( 
const QString &text )
 
 1581  updateFont( mRefFont );
 
 1584void QgsTextFormatWidget::mFontUnderlineBtn_toggled( 
bool ckd )
 
 1586  mRefFont.setUnderline( ckd );
 
 1587  updateFont( mRefFont );
 
 1590void QgsTextFormatWidget::mFontStrikethroughBtn_toggled( 
bool ckd )
 
 1592  mRefFont.setStrikeOut( ckd );
 
 1593  updateFont( mRefFont );
 
 1596void QgsTextFormatWidget::kerningToggled( 
bool checked )
 
 1598  mRefFont.setKerning( checked );
 
 1599  updateFont( mRefFont );
 
 1602void QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged( 
double spacing )
 
 1604  mRefFont.setWordSpacing( spacing );
 
 1605  updateFont( mRefFont );
 
 1608void QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged( 
double spacing )
 
 1610  mRefFont.setLetterSpacing( QFont::AbsoluteSpacing, spacing );
 
 1611  updateFont( mRefFont );
 
 1614void QgsTextFormatWidget::mFontSizeUnitWidget_changed()
 
 1619    mFontLimitPixelChkBox->setChecked( 
false );
 
 1625    mFontLimitPixelChkBox->setChecked( 
true );
 
 1627  updateFont( mRefFont );
 
 1630void QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged( 
int px )
 
 1633  mFontMaxPixelSpinBox->setMinimum( px );
 
 1634  mFontMaxPixelSpinBox->update();
 
 1637void QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged( 
int px )
 
 1640  if ( px < mFontMinPixelSpinBox->value() )
 
 1642    mFontMaxPixelSpinBox->blockSignals( 
true );
 
 1643    mFontMaxPixelSpinBox->setValue( mFontMinPixelSpinBox->value() );
 
 1644    mFontMaxPixelSpinBox->blockSignals( 
false );
 
 1646  mFontMaxPixelSpinBox->setMinimum( mFontMinPixelSpinBox->value() );
 
 1649void QgsTextFormatWidget::mBufferUnitWidget_changed()
 
 1651  updateFont( mRefFont );
 
 1654void QgsTextFormatWidget::mMaskBufferUnitWidget_changed()
 
 1656  updateFont( mRefFont );
 
 1659void QgsTextFormatWidget::mCoordXDDBtn_changed()
 
 1661  updateDataDefinedAlignment();
 
 1664void QgsTextFormatWidget::mCoordXDDBtn_activated( 
bool isActive )
 
 1669  mCoordPointDDBtn->setActive( 
false );
 
 1672void QgsTextFormatWidget::mCoordYDDBtn_changed()
 
 1674  updateDataDefinedAlignment();
 
 1677void QgsTextFormatWidget::mCoordYDDBtn_activated( 
bool isActive )
 
 1682  mCoordPointDDBtn->setActive( 
false );
 
 1685void QgsTextFormatWidget::mCoordPointDDBtn_changed()
 
 1687  updateDataDefinedAlignment();
 
 1690void QgsTextFormatWidget::mCoordPointDDBtn_activated( 
bool isActive )
 
 1695  mCoordXDDBtn->setActive( 
false );
 
 1696  mCoordYDDBtn->setActive( 
false );
 
 1699void QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged( 
int )
 
 1707  showBackgroundRadius( isRect );
 
 1709  mShapeSVGPathFrame->setVisible( isSVG );
 
 1710  mBackgroundMarkerSymbolButton->setVisible( isMarker );
 
 1711  mBackgroundFillSymbolButton->setVisible( !isSVG && !isMarker );
 
 1715  mShapeSizeYLabel->setVisible( !isSVG && !isMarker );
 
 1716  mShapeSizeYSpnBx->setVisible( !isSVG && !isMarker );
 
 1717  mShapeSizeYDDBtn->setVisible( !isSVG && !isMarker );
 
 1718  mShapeSizeXLabel->setText( tr( 
"Size%1" ).arg( !isSVG && !isMarker ? tr( 
" X" ) : QString() ) );
 
 1721  mShapeFillColorBtn->setAllowOpacity( !isSVG );
 
 1722  mShapeFillColorBtn->setButtonBackground();
 
 1723  mShapeStrokeColorBtn->setAllowOpacity( !isSVG );
 
 1724  mShapeStrokeColorBtn->setButtonBackground();
 
 1727  mShapeFillColorLabel->setVisible( isSVG );
 
 1728  mShapeFillColorLabel->setEnabled( isSVG );
 
 1729  mShapeFillColorBtn->setVisible( isSVG );
 
 1730  mShapeFillColorBtn->setEnabled( isSVG );
 
 1731  mShapeFillColorDDBtn->setVisible( isSVG );
 
 1732  mShapeFillColorDDBtn->setEnabled( isSVG );
 
 1733  mShapeStrokeColorLabel->setVisible( isSVG );
 
 1734  mShapeStrokeColorLabel->setEnabled( isSVG );
 
 1735  mShapeStrokeColorBtn->setVisible( isSVG );
 
 1736  mShapeStrokeColorBtn->setEnabled( isSVG );
 
 1737  mShapeStrokeColorDDBtn->setVisible( isSVG );
 
 1738  mShapeStrokeColorDDBtn->setEnabled( isSVG );
 
 1739  mShapeStrokeWidthLabel->setVisible( isSVG );
 
 1740  mShapeStrokeWidthLabel->setEnabled( isSVG );
 
 1741  mShapeStrokeWidthSpnBx->setVisible( isSVG );
 
 1742  mShapeStrokeWidthSpnBx->setEnabled( isSVG );
 
 1743  mShapeStrokeWidthDDBtn->setVisible( isSVG );
 
 1744  mShapeStrokeWidthDDBtn->setEnabled( isSVG );
 
 1747  mShapeSVGParamsBtn->setVisible( isSVG );
 
 1750    updateSvgWidgets( mShapeSVGPathLineEdit->text() );
 
 1754  mShapeSVGUnitsLabel->setVisible( isSVG );
 
 1755  mShapeStrokeWidthUnitWidget->setVisible( 
false );
 
 1756  mShapeStrokeUnitsDDBtn->setVisible( 
false );
 
 1757  mShapeStrokeUnitsDDBtn->setEnabled( 
false );
 
 1759  updateAvailableShadowPositions();
 
 1762void QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged( 
const QString &text )
 
 1764  updateSvgWidgets( text );
 
 1769  const int numOptionsChecked = ( chkLineAbove->isChecked() ? 1 : 0 ) +
 
 1770                                ( chkLineBelow->isChecked() ? 1 : 0 ) +
 
 1771                                ( chkLineOn->isChecked() ? 1 : 0 );
 
 1773  if ( numOptionsChecked == 1 )
 
 1776    chkLineAbove->setEnabled( !chkLineAbove->isChecked() );
 
 1777    chkLineBelow->setEnabled( !chkLineBelow->isChecked() );
 
 1778    chkLineOn->setEnabled( !chkLineOn->isChecked() );
 
 1782    chkLineAbove->setEnabled( 
true );
 
 1783    chkLineBelow->setEnabled( 
true );
 
 1784    chkLineOn->setEnabled( 
true );
 
 
 1794void QgsTextFormatWidget::previewScaleChanged( 
double scale )
 
 1796  lblFontPreview->setScale( scale );
 
 1799void QgsTextFormatWidget::updateSvgWidgets( 
const QString &svgPath )
 
 1801  if ( mShapeSVGPathLineEdit->text() != svgPath )
 
 1803    mShapeSVGPathLineEdit->setText( svgPath );
 
 1806  QString resolvedPath;
 
 1807  bool validSVG = 
true;
 
 1808  if ( ! svgPath.startsWith( QLatin1String( 
"base64:" ), Qt::CaseInsensitive ) )
 
 1811    validSVG = QFileInfo::exists( resolvedPath );
 
 1815    resolvedPath = svgPath;
 
 1820  mShapeSVGPathLineEdit->setStyleSheet( !validSVG ? QStringLiteral( 
"QLineEdit{ color: rgb(225, 0, 0); }" ) : QString() );
 
 1821  mShapeSVGPathLineEdit->setToolTip( !validSVG ? tr( 
"File not found" ) : resolvedPath );
 
 1823  QColor fill, stroke;
 
 1824  double strokeWidth = 0.0;
 
 1825  bool fillParam = 
false, strokeParam = 
false, strokeWidthParam = 
false;
 
 1831  mShapeSVGParamsBtn->setEnabled( validSVG && ( fillParam || strokeParam || strokeWidthParam ) );
 
 1833  mShapeFillColorLabel->setEnabled( validSVG && fillParam );
 
 1834  mShapeFillColorBtn->setEnabled( validSVG && fillParam );
 
 1835  mShapeFillColorDDBtn->setEnabled( validSVG && fillParam );
 
 1836  if ( mLoadSvgParams && validSVG && fillParam )
 
 1837    mShapeFillColorBtn->setColor( fill );
 
 1839  mShapeStrokeColorLabel->setEnabled( validSVG && strokeParam );
 
 1840  mShapeStrokeColorBtn->setEnabled( validSVG && strokeParam );
 
 1841  mShapeStrokeColorDDBtn->setEnabled( validSVG && strokeParam );
 
 1842  if ( mLoadSvgParams && validSVG && strokeParam )
 
 1843    mShapeStrokeColorBtn->setColor( stroke );
 
 1845  mShapeStrokeWidthLabel->setEnabled( validSVG && strokeWidthParam );
 
 1846  mShapeStrokeWidthSpnBx->setEnabled( validSVG && strokeWidthParam );
 
 1847  mShapeStrokeWidthDDBtn->setEnabled( validSVG && strokeWidthParam );
 
 1848  if ( mLoadSvgParams && validSVG && strokeWidthParam )
 
 1849    mShapeStrokeWidthSpnBx->setValue( strokeWidth );
 
 1855  mShapeSVGUnitsLabel->setEnabled( validSVG && strokeWidthParam );
 
 1858void QgsTextFormatWidget::updateAvailableShadowPositions()
 
 1860  if ( mShadowUnderCmbBx->count() == 0
 
 1866    mShadowUnderCmbBx->clear();
 
 1874    mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( currentPlacement ) );
 
 1875    if ( mShadowUnderCmbBx->currentIndex() == -1 )
 
 1876      mShadowUnderCmbBx->setCurrentIndex( 0 );
 
 1880void QgsTextFormatWidget::updateProperty()
 
 1888void QgsTextFormatWidget::createAuxiliaryField()
 
 1920  property.setActive( 
true );
 
 1929void QgsTextFormatWidget::updateShapeFrameStatus()
 
 1931  mShapeFrame->setEnabled( mShapeDrawDDBtn->isActive() || mShapeDrawChkBx->isChecked() );
 
 1934void QgsTextFormatWidget::updateBufferFrameStatus()
 
 1936  mBufferFrame->setEnabled( mBufferDrawDDBtn->isActive() || mBufferDrawChkBx->isChecked() );
 
 1939void QgsTextFormatWidget::updateShadowFrameStatus()
 
 1941  mShadowFrame->setEnabled( mShadowDrawDDBtn->isActive() || mShadowDrawChkBx->isChecked() );
 
 1944void QgsTextFormatWidget::updateCalloutFrameStatus()
 
 1946  mCalloutFrame->setEnabled( mCalloutDrawDDBtn->isActive() || mCalloutsDrawCheckBox->isChecked() );
 
 1949void QgsTextFormatWidget::updateDataDefinedAlignment()
 
 1952  mCoordAlignmentFrame->setEnabled( ( mCoordXDDBtn->isActive() && mCoordYDDBtn->isActive() )
 
 1953                                    || mCoordPointDDBtn->isActive() );
 
 1956void QgsTextFormatWidget::overlapModeChanged()
 
 1958  QString description;
 
 1962      description = tr( 
"Overlapping labels will never be placed for the layer, even if it means some labels will be missing. (To see unplaced labels use the \"Show Unplaced Labels\" toolbar action.)" );
 
 1965      description = tr( 
"If a label cannot otherwise be placed for a feature then an overlapping label is permitted." );
 
 1968      description = tr( 
"Labels from this layer may freely overlap other labels or label obstacles without penalty." );
 
 1972  mOverlapModeDescriptionLabel->setText( QStringLiteral( 
"<i>%1</i>" ).arg( description ) );
 
 1977  if ( name.isEmpty() )
 
 
 2020  saveDlg.
setDefaultTags( mTextFormatsListWidget->currentTagFilter() );
 
 2021  if ( !saveDlg.exec() )
 
 2024  if ( saveDlg.
name().isEmpty() )
 
 2034    const int res = QMessageBox::warning( 
this, tr( 
"Save Text Format" ),
 
 2035                                          tr( 
"Format with name '%1' already exists. Overwrite?" )
 
 2036                                          .arg( saveDlg.
name() ),
 
 2037                                          QMessageBox::Yes | QMessageBox::No );
 
 2038    if ( res != QMessageBox::Yes )
 
 2045  const QStringList symbolTags = saveDlg.
tags().split( 
',' );
 
 
 2052void QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked()
 
 2055  svgDlg.setWindowTitle( tr( 
"Select SVG file" ) );
 
 2056  svgDlg.svgSelector()->setSvgPath( mShapeSVGPathLineEdit->text().trimmed() );
 
 2058  if ( svgDlg.exec() == QDialog::Accepted )
 
 2060    const QString svgPath = svgDlg.svgSelector()->currentSvgPath();
 
 2061    if ( !svgPath.isEmpty() )
 
 2063      mShapeSVGPathLineEdit->setText( svgPath );
 
 2069void QgsTextFormatWidget::mShapeSVGParamsBtn_clicked()
 
 2071  const QString svgPath = mShapeSVGPathLineEdit->text();
 
 2072  mLoadSvgParams = 
true;
 
 2073  updateSvgWidgets( svgPath );
 
 2074  mLoadSvgParams = 
false;
 
 2077void QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged( 
int index )
 
 2083void QgsTextFormatWidget::mPreviewTextEdit_textChanged( 
const QString &text )
 
 2085  lblFontPreview->setText( text );
 
 2089void QgsTextFormatWidget::mPreviewTextBtn_clicked()
 
 2091  mPreviewTextEdit->setText( QStringLiteral( 
"Lorem Ipsum" ) );
 
 2095void QgsTextFormatWidget::mPreviewBackgroundBtn_colorChanged( 
const QColor &color )
 
 2100void QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked()
 
 2102  bool gotChar = 
false;
 
 2104  const QChar initial = !mDirectSymbLeftLineEdit->text().isEmpty() ? mDirectSymbLeftLineEdit->text().at( 0 ) : QChar();
 
 2105  const QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
 
 2110  if ( !dirSymb.isNull() )
 
 2111    mDirectSymbLeftLineEdit->setText( QString( dirSymb ) );
 
 2114void QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked()
 
 2116  bool gotChar = 
false;
 
 2117  const QChar initial = !mDirectSymbRightLineEdit->text().isEmpty() ? mDirectSymbRightLineEdit->text().at( 0 ) : QChar();
 
 2118  const QChar dirSymb = mCharDlg->
selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
 
 2123  if ( !dirSymb.isNull() )
 
 2124    mDirectSymbRightLineEdit->setText( QString( dirSymb ) );
 
 2127void QgsTextFormatWidget::chkLineOrientationDependent_toggled( 
bool active )
 
 2131    chkLineAbove->setText( tr( 
"Left of line" ) );
 
 2132    chkLineBelow->setText( tr( 
"Right of line" ) );
 
 2136    chkLineAbove->setText( tr( 
"Above line" ) );
 
 2137    chkLineBelow->setText( tr( 
"Below line" ) );
 
 2142void QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked()
 
 2157  if ( dlg.exec() == QDialog::Accepted )
 
 2164void QgsTextFormatWidget::showBackgroundRadius( 
bool show )
 
 2166  mShapeRadiusLabel->setVisible( show );
 
 2167  mShapeRadiusXDbSpnBx->setVisible( show );
 
 2169  mShapeRadiusYDbSpnBx->setVisible( show );
 
 2171  mShapeRadiusUnitWidget->setVisible( show );
 
 2173  mShapeRadiusDDBtn->setVisible( show );
 
 2174  mShapeRadiusUnitsDDBtn->setVisible( show );
 
 2180    return *lExpressionContext;
 
 
 2207  if ( mGeometryGeneratorGroupBox->isChecked() )
 
 
 2221  : QDialog( parent, fl )
 
 2223  setWindowTitle( tr( 
"Text Settings" ) );
 
 2226  mFormatWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
 
 2228  QVBoxLayout *layout = 
new QVBoxLayout( 
this );
 
 2229  layout->addWidget( mFormatWidget );
 
 2231  mButtonBox = 
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, Qt::Horizontal, 
this );
 
 2232  layout->addWidget( mButtonBox );
 
 2234  setLayout( layout );
 
 2237  connect( mButtonBox->button( QDialogButtonBox::Ok ), &QAbstractButton::clicked, 
this, &QDialog::accept );
 
 2238  connect( mButtonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked, 
this, &QDialog::reject );
 
 2239  connect( mButtonBox->button( QDialogButtonBox::Help ), &QAbstractButton::clicked, 
this, &QgsTextFormatDialog::showHelp );
 
 
 2244  return mFormatWidget->
format();
 
 
 2247void QgsTextFormatDialog::showHelp()
 
 2249  QgsHelp::openHelp( QStringLiteral( 
"style_library/label_settings.html#formatting-the-label-text" ) );
 
 2265  mFormatWidget = qobject_cast< QgsTextFormatWidget * >( 
widget() );
 
 2268    if ( !mBlockSignals )
 
 
 2275  return mFormatWidget->
format();
 
 
 2280  mBlockSignals = 
true;
 
 2282  mBlockSignals = 
false;
 
 
@ FromPoint
Offset distance applies from point geometry.
 
@ FromSymbolBounds
Offset distance applies from rendered symbol bounds.
 
@ PreferCloser
Prefer closer labels, falling back to alternate positions before larger distances.
 
@ PreferPositionOrdering
Prefer labels follow position ordering, falling back to more distance labels before alternate positio...
 
LabelPlacement
Placement modes which determine how label candidates are generated for a feature.
 
@ OverPoint
Arranges candidates over a point (or centroid of a polygon), or at a preset offset from the point....
 
@ Curved
Arranges candidates following the curvature of a line feature. Applies to line layers only.
 
@ AroundPoint
Arranges candidates in a circle around a point (or centroid of a polygon). Applies to point or polygo...
 
@ Line
Arranges candidates parallel to a generalised line representing the feature or parallel to a polygon'...
 
@ Free
Arranges candidates scattered throughout a polygon feature. Candidates are rotated to respect the pol...
 
@ OrderedPositionsAroundPoint
Candidates are placed in predefined positions around a point. Preference is given to positions with g...
 
@ Horizontal
Arranges horizontal candidates scattered throughout a polygon feature. Applies to polygon layers only...
 
@ PerimeterCurved
Arranges candidates following the curvature of a polygon's boundary. Applies to polygon layers only.
 
@ OutsidePolygons
Candidates are placed outside of polygon boundaries. Applies to polygon layers only.
 
Capitalization
String capitalization options.
 
@ AllSmallCaps
Force all characters to small caps.
 
@ MixedCase
Mixed case, ie no change.
 
@ AllLowercase
Convert all characters to lowercase.
 
@ TitleCase
Simple title case conversion - does not fully grammatically parse the text and uses simple rules only...
 
@ SmallCaps
Mixed case small caps.
 
@ ForceFirstLetterToCapital
Convert just the first letter of each word to uppercase, leave the rest untouched.
 
@ AllUppercase
Convert all characters to uppercase.
 
TextOrientation
Text orientations.
 
@ Vertical
Vertically oriented text.
 
@ RotationBased
Horizontally or vertically oriented text based on rotation (only available for map labeling)
 
@ Horizontal
Horizontally oriented text.
 
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
 
@ Percentage
Percentage of another measurement (e.g., canvas size, feature size)
 
@ Millimeters
Millimeters.
 
@ Points
Points (e.g., for font sizes)
 
@ MetersInMapUnits
Meters value as Map units.
 
LabelOverlapHandling
Label overlap handling.
 
@ AllowOverlapAtNoCost
Labels may freely overlap other labels, at no cost.
 
@ AllowOverlapIfRequired
Avoids overlapping labels when possible, but permit overlaps if labels for features cannot otherwise ...
 
@ PreventOverlap
Do not allow labels to overlap other labels.
 
@ FlipUpsideDownLabels
Upside-down labels (90 <= angle < 270) are shown upright.
 
@ AlwaysAllowUpsideDown
Show upside down for all labels, including dynamic ones.
 
@ AllowUpsideDownWhenRotationIsDefined
Show upside down when rotation is layer- or data-defined.
 
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
 
static QgsSvgCache * svgCache()
Returns the application's SVG cache, used for caching SVG images and handling parameter replacement w...
 
static QString nameFromProperty(const QgsPropertyDefinition &def, bool joined=false)
Returns the name of the auxiliary field for a property definition.
 
bool addAuxiliaryField(const QgsPropertyDefinition &definition)
Adds an auxiliary field for the given property.
 
bool exists(const QgsPropertyDefinition &definition) const
Returns true if the property is stored in the layer already, false otherwise.
 
A dialog for selecting a single character from a single font.
 
QChar selectCharacter(bool *gotChar, const QFont &font, const QString &style, QChar initialSelection=QChar())
Opens the dialog modally and returns when the user has selected a character.
 
A QGIS expression editor based on QScintilla2.
 
void collapsedStateChanged(bool collapsed)
Signal emitted when groupbox collapsed/expanded state is changed, and when first shown.
 
A groupbox that collapses/expands when toggled and can save its collapsed and checked states.
 
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
 
static QgsExpressionContextScope * atlasScope(const QgsLayoutAtlas *atlas)
Creates a new scope which contains variables and functions relating to a QgsLayoutAtlas.
 
static QgsExpressionContextScope * mapSettingsScope(const QgsMapSettings &mapSettings)
Creates a new scope which contains variables and functions relating to a QgsMapSettings object.
 
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
 
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context.
 
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
 
void setOriginalValueVariable(const QVariant &value)
Sets the original value variable value for the context.
 
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
 
void setHighlightedVariables(const QStringList &variableNames)
Sets the list of variable names within the context intended to be highlighted to the user.
 
static const QString EXPR_ORIGINAL_VALUE
Inbuilt variable name for value original value variable.
 
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
 
QgsFillSymbol * clone() const override
Returns a deep copy of this symbol.
 
static QFont createFont(const QString &family, int pointSize=-1, int weight=-1, bool italic=false)
Creates a font with the specified family.
 
static bool fontFamilyMatchOnSystem(const QString &family, QString *chosen=nullptr, bool *match=nullptr)
Check whether font family is on system.
 
static bool updateFontViaStyle(QFont &f, const QString &fontstyle, bool fallback=false)
Updates font with named style and retain all font properties.
 
static void setFontFamily(QFont &font, const QString &family)
Sets the family for a font object.
 
static void enableAutoGeometryRestore(QWidget *widget, const QString &key=QString())
Register the widget to allow its position to be automatically saved and restored when open and closed...
 
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.
 
static QIcon iconForWkbType(Qgis::WkbType type)
Returns the icon for a vector layer whose geometry type is provided.
 
@ SymbolLeftRight
Place direction symbols on left/right of label.
 
@ SymbolAbove
Place direction symbols on above label.
 
@ SymbolBelow
Place direction symbols on below label.
 
static void warning(const QString &msg)
Goes to qWarning.
 
Map canvas is a class for displaying all GIS data types on a canvas.
 
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
 
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
 
Base class for all map layer types.
 
The QgsMapSettings class contains configuration for rendering of the map.
 
Qgis::DistanceUnit mapUnits() const
Returns the units of the map's geographical coordinates - used for scale calculation.
 
double scale() const
Returns the calculated map scale.
 
A marker symbol type, for rendering Point and MultiPoint geometries.
 
QgsMarkerSymbol * clone() const override
Returns a deep copy of this symbol.
 
A dialog to create a new auxiliary layer.
 
static QgsPaintEffect * defaultStack()
Returns a new effect stack consisting of a sensible selection of default effects.
 
static bool isDefaultStack(QgsPaintEffect *effect)
Tests whether a paint effect matches the default effects stack.
 
Property
Data definable properties.
 
@ PositionX
X-coordinate data defined label position.
 
@ LinePlacementOptions
Line placement flags.
 
@ FontSizeUnit
Font size units.
 
@ LabelRotation
Label rotation.
 
@ FontStyle
Font style name.
 
@ Italic
Use italic style.
 
@ ShapeOpacity
Shape opacity.
 
@ AllowDegradedPlacement
Allow degraded label placements.
 
@ MaskEnabled
Whether the mask is enabled.
 
@ PredefinedPositionOrder
 
@ OverlapHandling
Overlap handling technique.
 
@ PositionY
Y-coordinate data defined label position.
 
@ MaximumScale
Maximum map scale (ie most "zoomed in")
 
@ Vali
Vertical alignment for data defined label position (Bottom, Base, Half, Cap, Top)
 
@ MinimumScale
Minimum map scale (ie most "zoomed out")
 
@ FontStretchFactor
Font stretch factor, since QGIS 3.24.
 
@ PolygonLabelOutside
Whether labels outside a polygon feature are permitted, or should be forced.
 
@ BufferOpacity
Buffer opacity.
 
@ MaskJoinStyle
Mask join style.
 
@ Strikeout
Use strikeout.
 
@ LabelAllParts
Whether all parts of multi-part features should be labeled.
 
@ Underline
Use underline.
 
@ FontBlendMode
Text blend mode.
 
@ FontCase
Label text case.
 
@ Hali
Horizontal alignment for data defined label position (Left, Center, Right)
 
@ MaskOpacity
Mask opacity.
 
@ OverrunDistance
Distance which labels can extend past either end of linear features.
 
@ MaskBufferUnit
Mask buffer size unit.
 
@ FontOpacity
Text opacity.
 
@ FontWordSpacing
Word spacing.
 
@ CalloutDraw
Show callout.
 
@ MaskBufferSize
Mask buffer size.
 
@ FontLetterSpacing
Letter spacing.
 
@ TabStopDistance
Tab stop distance, since QGIS 3.38.
 
@ ShadowOpacity
Shadow opacity.
 
@ PositionPoint
Point-coordinate data defined label position.
 
@ MaximumDistance
Maximum distance of label from feature.
 
const QgsTextFormat & format() const
Returns the label text formatting settings, e.g., font settings, buffer settings, etc.
 
static const QgsPropertiesDefinition & propertyDefinitions()
Returns the labeling property definitions.
 
QgsStyle * styleAtPath(const QString &path)
Returns a reference to the style database associated with the project with matching file path.
 
QVector< double > mapScales() const
Returns the list of custom project map scales.
 
static QgsProject * instance()
Returns the QgsProject singleton instance.
 
const QgsProjectStyleSettings * styleSettings() const
Returns the project's style settings, which contains settings and properties relating to how a QgsPro...
 
const QgsProjectViewSettings * viewSettings() const
Returns the project's view settings, which contains settings and properties relating to how a QgsProj...
 
A grouped map of multiple QgsProperty objects, each referenced by a integer key value.
 
QSet< int > propertyKeys() const final
Returns a list of property keys contained within the collection.
 
void setProperty(int key, const QgsProperty &property)
Adds a property to the collection and takes ownership of it.
 
bool isActive(int key) const final
Returns true if the collection contains an active property with the specified key.
 
QgsProperty property(int key) const final
Returns a matching property from the collection, if one exists.
 
Definition for a property.
 
A store for object properties.
 
void setField(const QString &field)
Sets the field name the property references.
 
This class is a composition of two QSettings instances:
 
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
 
bool contains(const QString &key, QgsSettings::Section section=QgsSettings::NoSection) const
Returns true if there exists a setting called key; returns false otherwise.
 
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
 
A collection of string replacements (specified using QgsStringReplacement objects).
 
a dialog for setting properties of a newly saved style.
 
bool isFavorite() const
Returns true if the favorite is checked for the symbol.
 
QString name() const
Returns the entered name for the new symbol.
 
void setDefaultTags(const QString &tags)
Sets the default tags for the newly created item.
 
QString tags() const
Returns any tags entered for the new symbol (as a comma separated value list).
 
QgsStyle * destinationStyle()
Returns the destination style database.
 
QgsTextFormat textFormat(const QString &name) const
Returns the text format with the specified name.
 
QStringList textFormatNames() const
Returns a list of names of text formats in the style.
 
bool removeTextFormat(const QString &name)
Removes a text format from the style.
 
StyleEntity
Enum for Entities involved in a style.
 
@ LabelSettingsEntity
Label settings.
 
@ TextFormatEntity
Text formats.
 
@ SmartgroupEntity
Smart groups.
 
@ Symbol3DEntity
3D symbol entity
 
@ ColorrampEntity
Color ramps.
 
@ LegendPatchShapeEntity
Legend patch shape.
 
static QgsStyle * defaultStyle(bool initialize=true)
Returns the default application-wide style.
 
QStringList labelSettingsNames() const
Returns a list of names of label settings in the style.
 
static QgsTextFormat defaultTextFormatForProject(QgsProject *project, QgsStyle::TextFormatContext context=QgsStyle::TextFormatContext::Labeling)
Returns the default text format to use for new text based objects for the specified project,...
 
bool addTextFormat(const QString &name, const QgsTextFormat &format, bool update=false)
Adds a text format with the specified name to the style.
 
QgsPalLayerSettings labelSettings(const QString &name) const
Returns the label settings with the specified name.
 
bool saveTextFormat(const QString &name, const QgsTextFormat &format, bool favorite, const QStringList &tags)
Adds a text format to the database.
 
A dialog which allows users to specify a list of substitutions to apply to a string,...
 
void containsParams(const QString &path, bool &hasFillParam, QColor &defaultFillColor, bool &hasStrokeParam, QColor &defaultStrokeColor, bool &hasStrokeWidthParam, double &defaultStrokeWidth, bool blocking=false) const
Tests if an SVG file contains parameters for fill, stroke color, stroke width.
 
static QString svgSymbolNameToPath(const QString &name, const QgsPathResolver &pathResolver)
Determines an SVG symbol's path from its name.
 
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
 
QgsExpressionContext * expressionContext() const
Returns the expression context used for the widget, if set.
 
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the widget.
 
QgsMessageBar * messageBar() const
Returns the message bar associated with the widget.
 
static QgsSymbol * defaultSymbol(Qgis::GeometryType geomType)
Returns a new default symbol for the specified geometry type.
 
Container for settings relating to a text background object.
 
QgsMapUnitScale strokeWidthMapUnitScale() const
Returns the map unit scale object for the shape stroke width.
 
void setRadiiUnit(Qgis::RenderUnit units)
Sets the units used for the shape's radii.
 
void setFillSymbol(QgsFillSymbol *symbol)
Sets the current fill symbol for the background shape.
 
RotationType rotationType() const
Returns the method used for rotating the background shape.
 
QString svgFile() const
Returns the absolute path to the background SVG file, if set.
 
QSizeF size() const
Returns the size of the background shape.
 
QSizeF radii() const
Returns the radii used for rounding the corners of shapes.
 
QgsMapUnitScale radiiMapUnitScale() const
Returns the map unit scale object for the shape radii.
 
void setOpacity(double opacity)
Sets the background shape's opacity.
 
void setStrokeColor(const QColor &color)
Sets the color used for outlining the background shape.
 
Qgis::RenderUnit radiiUnit() const
Returns the units used for the shape's radii.
 
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape size.
 
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the background shape.
 
SizeType
Methods for determining the background shape size.
 
bool enabled() const
Returns whether the background is enabled.
 
double opacity() const
Returns the background shape's opacity.
 
void setStrokeWidthMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape stroke width.
 
double rotation() const
Returns the rotation for the background shape, in degrees clockwise.
 
QColor fillColor() const
Returns the color used for filing the background shape.
 
void setMarkerSymbol(QgsMarkerSymbol *symbol)
Sets the current marker symbol for the background shape.
 
void setRadii(QSizeF radii)
Sets the radii used for rounding the corners of shapes.
 
SizeType sizeType() const
Returns the method used to determine the size of the background shape (e.g., fixed size or buffer aro...
 
Qgis::RenderUnit strokeWidthUnit() const
Returns the units used for the shape's stroke width.
 
ShapeType type() const
Returns the type of background shape (e.g., square, ellipse, SVG).
 
double strokeWidth() const
Returns the width of the shape's stroke (stroke).
 
void setSizeType(SizeType type)
Sets the method used to determine the size of the background shape (e.g., fixed size or buffer around...
 
ShapeType
Background shape types.
 
@ ShapeMarkerSymbol
Marker symbol.
 
@ ShapeSquare
Square - buffered sizes only.
 
@ ShapeRectangle
Rectangle.
 
void setFillColor(const QColor &color)
Sets the color used for filing the background shape.
 
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the background shape.
 
void setSizeUnit(Qgis::RenderUnit unit)
Sets the units used for the shape's size.
 
Qgis::RenderUnit offsetUnit() const
Returns the units used for the shape's offset.
 
QColor strokeColor() const
Returns the color used for outlining the background shape.
 
void setRotationType(RotationType type)
Sets the method used for rotating the background shape.
 
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape offset.
 
QgsFillSymbol * fillSymbol() const
Returns the fill symbol to be rendered in the background.
 
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the background shape.
 
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the shape size.
 
void setType(ShapeType type)
Sets the type of background shape to draw (e.g., square, ellipse, SVG).
 
Qgis::RenderUnit sizeUnit() const
Returns the units used for the shape's size.
 
RotationType
Methods for determining the rotation of the background shape.
 
@ RotationSync
Shape rotation is synced with text rotation.
 
void setEnabled(bool enabled)
Sets whether the text background will be drawn.
 
QgsMarkerSymbol * markerSymbol() const
Returns the marker symbol to be rendered in the background.
 
void setRadiiMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape radii.
 
void setRotation(double rotation)
Sets the rotation for the background shape, in degrees clockwise.
 
void setStrokeWidthUnit(Qgis::RenderUnit units)
Sets the units used for the shape's stroke width.
 
void setOffsetUnit(Qgis::RenderUnit units)
Sets the units used for the shape's offset.
 
void setOffset(QPointF offset)
Sets the offset used for drawing the background shape.
 
void setSize(QSizeF size)
Sets the size of the background shape.
 
const QgsPaintEffect * paintEffect() const
Returns the current paint effect for the background shape.
 
void setSvgFile(const QString &file)
Sets the path to the background SVG file.
 
QgsMapUnitScale offsetMapUnitScale() const
Returns the map unit scale object for the shape offset.
 
void setStrokeWidth(double width)
Sets the width of the shape's stroke (stroke).
 
QPointF offset() const
Returns the offset used for drawing the background shape.
 
Container for settings relating to a text buffer.
 
void setFillBufferInterior(bool fill)
Sets whether the interior of the buffer will be filled in.
 
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the buffer.
 
Qgis::RenderUnit sizeUnit() const
Returns the units for the buffer size.
 
Qt::PenJoinStyle joinStyle() const
Returns the buffer join style.
 
double size() const
Returns the size of the buffer.
 
void setColor(const QColor &color)
Sets the color for the buffer.
 
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the buffer size.
 
void setOpacity(double opacity)
Sets the buffer opacity.
 
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the buffer size.
 
bool enabled() const
Returns whether the buffer is enabled.
 
double opacity() const
Returns the buffer opacity.
 
void setSizeUnit(Qgis::RenderUnit unit)
Sets the units used for the buffer size.
 
bool fillBufferInterior() const
Returns whether the interior of the buffer will be filled in.
 
void setEnabled(bool enabled)
Sets whether the text buffer will be drawn.
 
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the buffer.
 
const QgsPaintEffect * paintEffect() const
Returns the current paint effect for the buffer.
 
QColor color() const
Returns the color of the buffer.
 
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the buffer.
 
void setJoinStyle(Qt::PenJoinStyle style)
Sets the join style used for drawing the buffer.
 
void setSize(double size)
Sets the size of the buffer.
 
QgsTextFormat format() const
Returns the current formatting settings defined by the widget.
 
QDialogButtonBox * buttonBox() const
Returns a reference to the dialog's button box.
 
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the widget is shown, e.g., the associated map canvas and expression context...
 
QgsTextFormatDialog(const QgsTextFormat &format, QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, Qt::WindowFlags fl=QgsGuiUtils::ModalDialogFlags, QgsMapLayer *layer=nullptr)
Constructor for QgsTextFormatDialog.
 
void setFormat(const QgsTextFormat &format)
Sets the format to show in the widget.
 
QgsTextFormatPanelWidget(const QgsTextFormat &format, QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, QgsMapLayer *layer=nullptr)
Constructor for QgsTextFormatPanelWidget.
 
void setDockMode(bool dockMode) override
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs.
 
QgsTextFormat format() const
Returns the current formatting settings defined by the widget.
 
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the widget is shown, e.g., the associated map canvas and expression context...
 
A widget for customizing text formatting settings.
 
void updatePlacementWidgets()
Updates label placement options to reflect current state of widget.
 
QButtonGroup * mUpsidedownBtnGrp
Upside down labels button group.
 
int mMinPixelLimit
Pixel size font limit.
 
void setDockMode(bool enabled)
Sets whether the widget should be shown in a compact dock mode.
 
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(const QgsTextFormat &format=QgsTextFormat(), QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, QgsMapLayer *layer=nullptr)
Constructor for QgsTextFormatWidget.
 
~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.
 
Qgis::GeometryType mGeomType
Geometry type for layer, if known.
 
QButtonGroup * mDirectSymbBtnGrp
Symbol direction button group.
 
void updateWidgetForFormat(const QgsTextFormat &format)
Updates the widget's state to reflect the settings in a QgsTextFormat.
 
QList< QgsSymbolLayerReference > mMaskedSymbolLayers
 
void widgetChanged()
Emitted when the text format defined by the widget changes.
 
void setPreviewBackground(const QColor &color)
Sets the background color for the text preview widget.
 
QButtonGroup * mQuadrantBtnGrp
Quadrant button group.
 
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.
 
virtual void setFormatFromStyle(const QString &name, QgsStyle::StyleEntity type, const QString &stylePath)
Sets the current text settings from a style entry.
 
Qgis::GeometryType labelGeometryType() const
Returns the geometry type which will be used by the labeling engine when registering labels for the l...
 
QgsMapLayer * mLayer
Associated vector layer.
 
QgsStringReplacementCollection mSubstitutions
Text substitution list.
 
@ Text
Default mode, show text formatting settings only.
 
@ Labeling
Show labeling settings in addition to text formatting settings.
 
virtual void saveFormat()
Saves the current text settings to a style entry.
 
QgsPropertyCollection mDataDefinedProperties
Data defined properties as defined in the widget.
 
Container for all settings relating to text rendering.
 
void setColor(const QColor &color)
Sets the color that text will be rendered in.
 
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the text.
 
void setSize(double size)
Sets the size for rendered text.
 
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the size.
 
void setCapitalization(Qgis::Capitalization capitalization)
Sets the text capitalization style.
 
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the format's property collection, used for data defined overrides.
 
void setOrientation(Qgis::TextOrientation orientation)
Sets the orientation for the text.
 
void setFont(const QFont &font)
Sets the font used for rendering text.
 
double lineHeight() const
Returns the line height for text.
 
double tabStopDistance() const
Returns the distance for tab stops.
 
void setSizeUnit(Qgis::RenderUnit unit)
Sets the units for the size of rendered text.
 
int stretchFactor() const
Returns the text's stretch factor.
 
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the format's property collection, used for data defined overrides.
 
void setStretchFactor(int factor)
Sets the text's stretch factor.
 
void setShadow(const QgsTextShadowSettings &shadowSettings)
Sets the text's drop shadow settings.
 
void setMask(const QgsTextMaskSettings &maskSettings)
Sets the text's masking settings.
 
bool fontFound() const
Returns true if the specified font was found on the system, or false if the font was not found and a ...
 
void setPreviewBackgroundColor(const QColor &color)
Sets the background color that text will be rendered on for previews.
 
void setTabStopDistanceUnit(Qgis::RenderUnit unit)
Sets the unit used for the tab stop distance.
 
void setOpacity(double opacity)
Sets the text's opacity.
 
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the text.
 
void setAllowHtmlFormatting(bool allow)
Sets whether text should be treated as a HTML document and HTML tags should be used for formatting th...
 
void setLineHeightUnit(Qgis::RenderUnit unit)
Sets the unit for the line height for text.
 
Qgis::RenderUnit lineHeightUnit() const
Returns the units for the line height for text.
 
Qgis::Capitalization capitalization() const
Returns the text capitalization style.
 
QString resolvedFontFamily() const
Returns the family for the resolved font, ie if the specified font was not found on the system this w...
 
QgsTextMaskSettings & mask()
Returns a reference to the masking settings.
 
bool isValid() const
Returns true if the format is valid.
 
void setTabStopDistanceMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the tab stop distance.
 
void setBuffer(const QgsTextBufferSettings &bufferSettings)
Sets the text's buffer settings.
 
QgsTextBackgroundSettings & background()
Returns a reference to the text background settings.
 
Qgis::RenderUnit sizeUnit() const
Returns the units for the size of rendered text.
 
bool allowHtmlFormatting() const
Returns true if text should be treated as a HTML document and HTML tags should be used for formatting...
 
double opacity() const
Returns the text's opacity.
 
void setTabStopDistance(double distance)
Sets the distance for tab stops.
 
Qgis::TextOrientation orientation() const
Returns the orientation of the text.
 
QString namedStyle() const
Returns the named style for the font used for rendering text (e.g., "bold").
 
double size() const
Returns the size for rendered text.
 
QgsTextShadowSettings & shadow()
Returns a reference to the text drop shadow settings.
 
Qgis::RenderUnit tabStopDistanceUnit() const
Returns the units for the tab stop distance.
 
void setBackground(const QgsTextBackgroundSettings &backgroundSettings)
Sets the text's background settings.q.
 
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the size.
 
void setNamedStyle(const QString &style)
Sets the named style for the font used for rendering text.
 
QColor color() const
Returns the color that text will be rendered in.
 
QFont font() const
Returns the font used for rendering text.
 
QgsMapUnitScale tabStopDistanceMapUnitScale() const
Returns the map unit scale object for the tab stop distance.
 
QColor previewBackgroundColor() const
Returns the background color for text previews.
 
QgsTextBufferSettings & buffer()
Returns a reference to the text buffer settings.
 
void setLineHeight(double height)
Sets the line height for text.
 
Container for settings relating to a selective masking around a text.
 
void setEnabled(bool)
Returns whether the mask is enabled.
 
void setMaskedSymbolLayers(const QList< QgsSymbolLayerReference > &maskedLayers)
Sets the symbol layers that will be masked by this buffer.
 
Qgis::RenderUnit sizeUnit() const
Returns the units for the buffer size.
 
QList< QgsSymbolLayerReference > maskedSymbolLayers() const
Returns a list of references to symbol layers that are masked by this buffer.
 
void setSize(double size)
Sets the size of the buffer.
 
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the buffer size.
 
double size() const
Returns the size of the buffer.
 
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the buffer size.
 
QgsPaintEffect * paintEffect() const
Returns the current paint effect for the mask.
 
void setJoinStyle(Qt::PenJoinStyle style)
Sets the join style used for drawing the buffer.
 
double opacity() const
Returns the mask's opacity.
 
bool enabled() const
Returns whether the mask is enabled.
 
void setSizeUnit(Qgis::RenderUnit unit)
Sets the units used for the buffer size.
 
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the mask.
 
Qt::PenJoinStyle joinStyle() const
Returns the buffer join style.
 
void setOpacity(double opacity)
Sets the mask's opacity.
 
Container for settings relating to a text shadow.
 
int offsetAngle() const
Returns the angle for offsetting the position of the shadow from the text.
 
void setBlurRadiusMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shadow blur radius.
 
void setBlurRadiusUnit(Qgis::RenderUnit units)
Sets the units used for the shadow's blur radius.
 
bool enabled() const
Returns whether the shadow is enabled.
 
void setOffsetUnit(Qgis::RenderUnit units)
Sets the units used for the shadow's offset.
 
int scale() const
Returns the scaling used for the drop shadow (in percentage of original size).
 
Qgis::RenderUnit offsetUnit() const
Returns the units used for the shadow's offset.
 
void setShadowPlacement(QgsTextShadowSettings::ShadowPlacement placement)
Sets the placement for the drop shadow.
 
double opacity() const
Returns the shadow's opacity.
 
QgsMapUnitScale blurRadiusMapUnitScale() const
Returns the map unit scale object for the shadow blur radius.
 
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shadow offset distance.
 
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the drop shadow.
 
void setColor(const QColor &color)
Sets the color for the drop shadow.
 
QColor color() const
Returns the color of the drop shadow.
 
void setOffsetGlobal(bool global)
Sets whether the global shadow offset should be used.
 
ShadowPlacement
Placement positions for text shadow.
 
@ ShadowBuffer
Draw shadow under buffer.
 
@ ShadowShape
Draw shadow under background shape.
 
@ ShadowLowest
Draw shadow below all text components.
 
@ ShadowText
Draw shadow under text.
 
void setScale(int scale)
Sets the scaling used for the drop shadow (in percentage of original size).
 
void setBlurAlphaOnly(bool alphaOnly)
Sets whether only the alpha channel for the shadow should be blurred.
 
QgsTextShadowSettings::ShadowPlacement shadowPlacement() const
Returns the placement for the drop shadow.
 
Qgis::RenderUnit blurRadiusUnit() const
Returns the units used for the shadow's blur radius.
 
double offsetDistance() const
Returns the distance for offsetting the position of the shadow from the text.
 
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the drop shadow.
 
void setOffsetDistance(double distance)
Sets the distance for offsetting the position of the shadow from the text.
 
void setOpacity(double opacity)
Sets the shadow's opacity.
 
QgsMapUnitScale offsetMapUnitScale() const
Returns the map unit scale object for the shadow offset distance.
 
bool blurAlphaOnly() const
Returns whether only the alpha channel for the shadow will be blurred.
 
bool offsetGlobal() const
Returns true if the global shadow offset will be used.
 
void setOffsetAngle(int angle)
Sets the angle for offsetting the position of the shadow from the text.
 
double blurRadius() const
Returns the blur radius for the shadow.
 
void setBlurRadius(double blurRadius)
Sets the blur radius for the shadow.
 
void setEnabled(bool enabled)
Sets whether the text shadow will be drawn.
 
QList< Qgis::RenderUnit > RenderUnitList
List of render units.
 
Represents a vector layer which manages a vector based data sets.
 
QgsAuxiliaryLayer * auxiliaryLayer()
Returns the current auxiliary layer.
 
Q_INVOKABLE Qgis::GeometryType geometryType() const
Returns point, line or polygon.
 
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.