@@ -3251,7 +3251,7 @@ QgsFontMarkerSymbolLayerWidget::QgsFontMarkerSymbolLayerWidget( QgsVectorLayer *
3251
3251
mOffsetUnitWidget ->setUnits ( QgsUnitTypes::RenderUnitList () << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
3252
3252
<< QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
3253
3253
3254
- widgetChar = new CharacterWidget;
3254
+ widgetChar = new CharacterWidget () ;
3255
3255
scrollArea->setWidget ( widgetChar );
3256
3256
3257
3257
btnColor->setAllowOpacity ( true );
@@ -3284,6 +3284,8 @@ QgsFontMarkerSymbolLayerWidget::QgsFontMarkerSymbolLayerWidget( QgsVectorLayer *
3284
3284
connect ( spinOffsetX, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this , &QgsFontMarkerSymbolLayerWidget::setOffset );
3285
3285
connect ( spinOffsetY, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this , &QgsFontMarkerSymbolLayerWidget::setOffset );
3286
3286
connect ( widgetChar, &CharacterWidget::characterSelected, this , &QgsFontMarkerSymbolLayerWidget::setCharacter );
3287
+ connect ( mCharLineEdit , &QLineEdit::textChanged, this , &QgsFontMarkerSymbolLayerWidget::setCharacterFromText );
3288
+
3287
3289
connect ( this , &QgsSymbolLayerWidget::changed, this , &QgsFontMarkerSymbolLayerWidget::updateAssistantSymbol );
3288
3290
}
3289
3291
@@ -3308,6 +3310,7 @@ void QgsFontMarkerSymbolLayerWidget::setSymbolLayer( QgsSymbolLayer *layer )
3308
3310
widgetChar->setFont ( layerFont );
3309
3311
widgetChar->setCharacter ( mLayer ->character () );
3310
3312
widgetChar->blockSignals ( false );
3313
+ whileBlocking ( mCharLineEdit )->setText ( mLayer ->character () );
3311
3314
3312
3315
// block
3313
3316
whileBlocking ( spinOffsetX )->setValue ( mLayer ->offset ().x () );
@@ -3385,9 +3388,40 @@ void QgsFontMarkerSymbolLayerWidget::setAngle( double angle )
3385
3388
emit changed ();
3386
3389
}
3387
3390
3391
+ void QgsFontMarkerSymbolLayerWidget::setCharacterFromText ( const QString &text )
3392
+ {
3393
+ if ( text.isEmpty () )
3394
+ return ;
3395
+
3396
+ // take the last character of a string for a better experience when users cycle through several characters on their keyboard
3397
+ QChar chr = text.back ();
3398
+ if ( text.contains ( QRegularExpression ( QStringLiteral ( " ^0x[0-9a-fA-F]{1,4}$" ) ) ) )
3399
+ {
3400
+ bool ok = false ;
3401
+ unsigned int value = text.toUInt ( &ok, 0 );
3402
+ if ( ok )
3403
+ chr = QChar ( value );
3404
+ }
3405
+ else if ( text.contains ( QRegularExpression ( QStringLiteral ( " ^[0-9]{1,}$" ) ) ) )
3406
+ {
3407
+ bool ok = false ;
3408
+ unsigned int value = text.toUInt ( &ok, 10 );
3409
+ if ( ok )
3410
+ chr = QChar ( value );
3411
+ }
3412
+
3413
+ if ( chr != mLayer ->character () )
3414
+ {
3415
+ mLayer ->setCharacter ( chr );
3416
+ whileBlocking ( widgetChar )->setCharacter ( mLayer ->character () );
3417
+ emit changed ();
3418
+ }
3419
+ }
3420
+
3388
3421
void QgsFontMarkerSymbolLayerWidget::setCharacter ( QChar chr )
3389
3422
{
3390
3423
mLayer ->setCharacter ( chr );
3424
+ whileBlocking ( mCharLineEdit )->setText ( chr );
3391
3425
emit changed ();
3392
3426
}
3393
3427
0 commit comments