17
17
18
18
#include " qgslabelpropertydialog.h"
19
19
#include < qgsdatadefined.h>
20
+ #include < qgsfontutils.h>
21
+ #include < qgslogger.h>
20
22
#include " qgsmaplayerregistry.h"
21
23
#include " qgsmaprenderer.h"
22
24
#include " qgsvectorlayer.h"
25
+
23
26
#include < QColorDialog>
24
- #include < QFontDialog >
27
+ #include < QFontDatabase >
25
28
26
- QgsLabelPropertyDialog::QgsLabelPropertyDialog ( const QString& layerId, int featureId, const QString& labelText, QgsMapRenderer* renderer, QWidget * parent, Qt::WindowFlags f ):
27
- QDialog( parent, f ), mMapRenderer( renderer ), mCurLabelField( -1 )
29
+ QgsLabelPropertyDialog::QgsLabelPropertyDialog ( const QString& layerId, int featureId, const QFont& labelFont, const QString& labelText, QgsMapRenderer* renderer, QWidget * parent, Qt::WindowFlags f ):
30
+ QDialog( parent, f ), mMapRenderer( renderer ), mLabelFont( labelFont ), mCurLabelField( -1 )
28
31
{
29
32
setupUi ( this );
30
33
fillHaliComboBox ();
@@ -99,10 +102,11 @@ void QgsLabelPropertyDialog::init( const QString& layerId, int featureId, const
99
102
}
100
103
101
104
// get attributes of the feature and fill data defined values
102
- mLabelFont = layerSettings.textFont ;
103
105
104
- // set all the gui elements to the default values
105
- mFontSizeSpinBox ->setValue ( layerSettings.textFont .pointSizeF () );
106
+ // font is set directly from QgsLabelPosition
107
+ updateFont ( mLabelFont , false );
108
+
109
+ // set all the gui elements to the default layer-level values
106
110
mBufferColorButton ->setColor ( layerSettings.textColor );
107
111
mLabelDistanceSpinBox ->setValue ( layerSettings.dist );
108
112
mBufferSizeSpinBox ->setValue ( layerSettings.bufferSize );
@@ -115,14 +119,16 @@ void QgsLabelPropertyDialog::init( const QString& layerId, int featureId, const
115
119
116
120
disableGuiElements ();
117
121
118
- bool fontEditing = false ;
119
-
120
122
mDataDefinedProperties = layerSettings.dataDefinedProperties ;
121
123
QMap< QgsPalLayerSettings::DataDefinedProperties, QgsDataDefined* >::const_iterator propIt = mDataDefinedProperties .constBegin ();
122
124
123
125
for ( ; propIt != mDataDefinedProperties .constEnd (); ++propIt )
124
126
{
125
127
QgsDataDefined* dd = propIt.value ();
128
+ if ( !dd )
129
+ {
130
+ continue ;
131
+ }
126
132
QString ddField = dd->field ();
127
133
if ( !dd->isActive () || dd->useExpression () || ddField.isEmpty () )
128
134
{
@@ -135,6 +141,8 @@ void QgsLabelPropertyDialog::init( const QString& layerId, int featureId, const
135
141
continue ;
136
142
}
137
143
144
+ QgsDebugMsg ( QString ( " ddField: %1" ).arg ( ddField ) );
145
+
138
146
bool ok = false ;
139
147
switch ( propIt.key () )
140
148
{
@@ -169,18 +177,6 @@ void QgsLabelPropertyDialog::init( const QString& layerId, int featureId, const
169
177
}
170
178
break ;
171
179
}
172
- case QgsPalLayerSettings::Size:
173
- {
174
- mFontSizeSpinBox ->setEnabled ( true );
175
- double fontSize = mCurLabelFeat .attribute ( ddIndx ).toDouble ( &ok );
176
- if ( ok )
177
- {
178
- mLabelFont .setPointSizeF ( fontSize );
179
- mFontSizeSpinBox ->setValue ( fontSize );
180
- fontEditing = true ;
181
- }
182
- break ;
183
- }
184
180
case QgsPalLayerSettings::BufferSize:
185
181
{
186
182
mBufferSizeSpinBox ->setEnabled ( true );
@@ -249,31 +245,31 @@ void QgsLabelPropertyDialog::init( const QString& layerId, int featureId, const
249
245
}
250
246
251
247
// font related properties
252
- case QgsPalLayerSettings::Bold:
253
- mLabelFont .setBold ( mCurLabelFeat .attribute ( ddIndx ).toBool () );
254
- fontEditing = true ;
248
+ case QgsPalLayerSettings::Family:
249
+ mFontFamilyCmbBx ->setEnabled ( true );
255
250
break ;
256
- case QgsPalLayerSettings::Italic:
257
- mLabelFont .setItalic ( mCurLabelFeat .attribute ( ddIndx ).toBool () );
258
- fontEditing = true ;
251
+ case QgsPalLayerSettings::FontStyle:
252
+ mFontStyleCmbBx ->setEnabled ( true );
259
253
break ;
260
254
case QgsPalLayerSettings::Underline:
261
- mLabelFont .setUnderline ( mCurLabelFeat .attribute ( ddIndx ).toBool () );
262
- fontEditing = true ;
255
+ mFontUnderlineBtn ->setEnabled ( true );
263
256
break ;
264
257
case QgsPalLayerSettings::Strikeout:
265
- mLabelFont .setStrikeOut ( mCurLabelFeat .attribute ( ddIndx ).toBool () );
266
- fontEditing = true ;
258
+ mFontStrikethroughBtn ->setEnabled ( true );
267
259
break ;
268
- case QgsPalLayerSettings::Family:
269
- mLabelFont .setFamily ( mCurLabelFeat .attribute ( ddIndx ).toString () );
270
- fontEditing = true ;
260
+ case QgsPalLayerSettings::Bold:
261
+ mFontBoldBtn ->setEnabled ( true );
262
+ break ;
263
+ case QgsPalLayerSettings::Italic:
264
+ mFontItalicBtn ->setEnabled ( true );
265
+ break ;
266
+ case QgsPalLayerSettings::Size:
267
+ mFontSizeSpinBox ->setEnabled ( true );
271
268
break ;
272
269
default :
273
270
break ;
274
271
}
275
272
}
276
- mFontPushButton ->setEnabled ( fontEditing );
277
273
blockElementSignals ( false );
278
274
}
279
275
@@ -283,9 +279,14 @@ void QgsLabelPropertyDialog::disableGuiElements()
283
279
mAlwaysShowChkbx ->setEnabled ( false );
284
280
mMinScaleSpinBox ->setEnabled ( false );
285
281
mMaxScaleSpinBox ->setEnabled ( false );
282
+ mFontFamilyCmbBx ->setEnabled ( false );
283
+ mFontStyleCmbBx ->setEnabled ( false );
284
+ mFontUnderlineBtn ->setEnabled ( false );
285
+ mFontStrikethroughBtn ->setEnabled ( false );
286
+ mFontBoldBtn ->setEnabled ( false );
287
+ mFontItalicBtn ->setEnabled ( false );
286
288
mFontSizeSpinBox ->setEnabled ( false );
287
289
mBufferSizeSpinBox ->setEnabled ( false );
288
- mFontPushButton ->setEnabled ( false );
289
290
mFontColorButton ->setEnabled ( false );
290
291
mBufferColorButton ->setEnabled ( false );
291
292
mLabelDistanceSpinBox ->setEnabled ( false );
@@ -302,9 +303,14 @@ void QgsLabelPropertyDialog::blockElementSignals( bool block )
302
303
mAlwaysShowChkbx ->blockSignals ( block );
303
304
mMinScaleSpinBox ->blockSignals ( block );
304
305
mMaxScaleSpinBox ->blockSignals ( block );
306
+ mFontFamilyCmbBx ->blockSignals ( block );
307
+ mFontStyleCmbBx ->blockSignals ( block );
308
+ mFontUnderlineBtn ->blockSignals ( block );
309
+ mFontStrikethroughBtn ->blockSignals ( block );
310
+ mFontBoldBtn ->blockSignals ( block );
311
+ mFontItalicBtn ->blockSignals ( block );
305
312
mFontSizeSpinBox ->blockSignals ( block );
306
313
mBufferSizeSpinBox ->blockSignals ( block );
307
- mFontPushButton ->blockSignals ( block );
308
314
mFontColorButton ->blockSignals ( block );
309
315
mBufferColorButton ->blockSignals ( block );
310
316
mLabelDistanceSpinBox ->blockSignals ( block );
@@ -315,6 +321,45 @@ void QgsLabelPropertyDialog::blockElementSignals( bool block )
315
321
mRotationSpinBox ->blockSignals ( block );
316
322
}
317
323
324
+ void QgsLabelPropertyDialog::updateFont ( const QFont& font, bool block )
325
+ {
326
+ // update background reference font
327
+ if ( font != mLabelFont )
328
+ {
329
+ mLabelFont = font;
330
+ }
331
+
332
+ if ( block )
333
+ blockElementSignals ( true );
334
+ mFontFamilyCmbBx ->setCurrentFont ( mLabelFont );
335
+ populateFontStyleComboBox ();
336
+ mFontUnderlineBtn ->setChecked ( mLabelFont .underline () );
337
+ mFontStrikethroughBtn ->setChecked ( mLabelFont .strikeOut () );
338
+ mFontBoldBtn ->setChecked ( mLabelFont .bold () );
339
+ mFontItalicBtn ->setChecked ( mLabelFont .italic () );
340
+ mFontSizeSpinBox ->setValue ( mLabelFont .pointSizeF () );
341
+ if ( block )
342
+ blockElementSignals ( false );
343
+ }
344
+
345
+ void QgsLabelPropertyDialog::populateFontStyleComboBox ()
346
+ {
347
+ mFontStyleCmbBx ->clear ();
348
+ foreach ( const QString &style, mFontDB .styles ( mLabelFont .family () ) )
349
+ {
350
+ mFontStyleCmbBx ->addItem ( style );
351
+ }
352
+
353
+ int curIndx = 0 ;
354
+ int stylIndx = mFontStyleCmbBx ->findText ( mFontDB .styleString ( mLabelFont ) );
355
+ if ( stylIndx > -1 )
356
+ {
357
+ curIndx = stylIndx;
358
+ }
359
+
360
+ mFontStyleCmbBx ->setCurrentIndex ( curIndx );
361
+ }
362
+
318
363
void QgsLabelPropertyDialog::fillHaliComboBox ()
319
364
{
320
365
mHaliComboBox ->addItem ( " Left" );
@@ -365,6 +410,48 @@ void QgsLabelPropertyDialog::on_mYCoordSpinBox_valueChanged( double d )
365
410
insertChangedValue ( QgsPalLayerSettings::PositionY, d );
366
411
}
367
412
413
+ void QgsLabelPropertyDialog::on_mFontFamilyCmbBx_currentFontChanged ( const QFont& f )
414
+ {
415
+ mLabelFont .setFamily ( f.family () );
416
+ updateFont ( mLabelFont );
417
+ insertChangedValue ( QgsPalLayerSettings::Family, f.family () );
418
+ }
419
+
420
+ void QgsLabelPropertyDialog::on_mFontStyleCmbBx_currentIndexChanged ( const QString & text )
421
+ {
422
+ QgsFontUtils::updateFontViaStyle ( mLabelFont , text );
423
+ updateFont ( mLabelFont );
424
+ insertChangedValue ( QgsPalLayerSettings::FontStyle, text );
425
+ }
426
+
427
+ void QgsLabelPropertyDialog::on_mFontUnderlineBtn_toggled ( bool ckd )
428
+ {
429
+ mLabelFont .setUnderline ( ckd );
430
+ updateFont ( mLabelFont );
431
+ insertChangedValue ( QgsPalLayerSettings::Underline, ckd );
432
+ }
433
+
434
+ void QgsLabelPropertyDialog::on_mFontStrikethroughBtn_toggled ( bool ckd )
435
+ {
436
+ mLabelFont .setStrikeOut ( ckd );
437
+ updateFont ( mLabelFont );
438
+ insertChangedValue ( QgsPalLayerSettings::Strikeout, ckd );
439
+ }
440
+
441
+ void QgsLabelPropertyDialog::on_mFontBoldBtn_toggled ( bool ckd )
442
+ {
443
+ mLabelFont .setBold ( ckd );
444
+ updateFont ( mLabelFont );
445
+ insertChangedValue ( QgsPalLayerSettings::Bold, ckd );
446
+ }
447
+
448
+ void QgsLabelPropertyDialog::on_mFontItalicBtn_toggled ( bool ckd )
449
+ {
450
+ mLabelFont .setItalic ( ckd );
451
+ updateFont ( mLabelFont );
452
+ insertChangedValue ( QgsPalLayerSettings::Italic, ckd );
453
+ }
454
+
368
455
void QgsLabelPropertyDialog::on_mFontSizeSpinBox_valueChanged ( double d )
369
456
{
370
457
insertChangedValue ( QgsPalLayerSettings::Size, d );
@@ -380,25 +467,6 @@ void QgsLabelPropertyDialog::on_mRotationSpinBox_valueChanged( double d )
380
467
insertChangedValue ( QgsPalLayerSettings::Rotation, d );
381
468
}
382
469
383
- void QgsLabelPropertyDialog::on_mFontPushButton_clicked ()
384
- {
385
- bool ok;
386
- #if defined(Q_WS_MAC) && QT_VERSION >= 0x040500 && defined(QT_MAC_USE_COCOA)
387
- // Native Mac dialog works only for Qt Carbon
388
- mLabelFont = QFontDialog::getFont ( &ok, mLabelFont , 0 , tr ( " Label font" ), QFontDialog::DontUseNativeDialog );
389
- #else
390
- mLabelFont = QFontDialog::getFont ( &ok, mLabelFont , 0 , tr ( " Label font" ) );
391
- #endif
392
- if ( ok )
393
- {
394
- insertChangedValue ( QgsPalLayerSettings::Size, mLabelFont .pointSizeF () );
395
- insertChangedValue ( QgsPalLayerSettings::Bold, mLabelFont .bold () );
396
- insertChangedValue ( QgsPalLayerSettings::Italic, mLabelFont .italic () );
397
- insertChangedValue ( QgsPalLayerSettings::Underline, mLabelFont .underline () );
398
- insertChangedValue ( QgsPalLayerSettings::Strikeout, mLabelFont .strikeOut () );
399
- }
400
- }
401
-
402
470
void QgsLabelPropertyDialog::on_mFontColorButton_colorChanged ( const QColor &color )
403
471
{
404
472
insertChangedValue ( QgsPalLayerSettings::Color, color.name () );
0 commit comments