@@ -316,6 +316,7 @@ void QgsFieldsProperties::loadRows()
316
316
void QgsFieldsProperties::setRow ( int row, int idx, const QgsField &field )
317
317
{
318
318
mAttributesList ->setItem ( row, attrIdCol, new QTableWidgetItem ( QString::number ( idx ) ) );
319
+ mIndexedWidgets .insert ( idx, mAttributesList ->item ( row, 0 ) );
319
320
mAttributesList ->setItem ( row, attrNameCol, new QTableWidgetItem ( field.name () ) );
320
321
mAttributesList ->setItem ( row, attrTypeCol, new QTableWidgetItem ( field.typeName () ) );
321
322
mAttributesList ->setItem ( row, attrLengthCol, new QTableWidgetItem ( QString::number ( field.length () ) ) );
@@ -325,10 +326,14 @@ void QgsFieldsProperties::setRow( int row, int idx, const QgsField &field )
325
326
for ( int i = 0 ; i < attrEditTypeCol; i++ )
326
327
mAttributesList ->item ( row, i )->setFlags ( mAttributesList ->item ( row, i )->flags () & ~Qt::ItemIsEditable );
327
328
328
- QPushButton *pb = new QPushButton ( editTypeButtonText ( mLayer ->editType ( idx ) ) );
329
+ FieldConfig cfg ( mLayer , idx );
330
+ cfg.mEditType = mLayer ->editType ( idx );
331
+ QPushButton *pb = new QPushButton ( editTypeButtonText ( cfg.mEditType ) );
329
332
mAttributesList ->setCellWidget ( row, attrEditTypeCol, pb );
330
333
connect ( pb, SIGNAL ( pressed () ), this , SLOT ( attributeTypeDialog ( ) ) );
331
- mButtonMap .insert ( idx, pb );
334
+
335
+ cfg.mButton = pb;
336
+ setConfigForRow ( row, cfg );
332
337
333
338
// set the alias for the attribute
334
339
mAttributesList ->setItem ( row, attrAliasCol, new QTableWidgetItem ( mLayer ->attributeAlias ( idx ) ) );
@@ -455,56 +460,66 @@ void QgsFieldsProperties::attributeTypeDialog()
455
460
if ( !pb )
456
461
return ;
457
462
458
- int index = mButtonMap .key ( pb, -1 );
463
+ FieldConfig cfg;
464
+ int index = -1 ;
465
+ int row = -1 ;
466
+
467
+ foreach ( QTableWidgetItem* wdg, mIndexedWidgets )
468
+ {
469
+ cfg = wdg->data ( Qt::UserRole ).value <FieldConfig>();
470
+ if ( cfg.mButton == pb )
471
+ {
472
+ index = mIndexedWidgets .indexOf ( wdg );
473
+ row = wdg->row ();
474
+ break ;
475
+ }
476
+ }
477
+
459
478
if ( index == -1 )
460
479
return ;
461
480
462
481
QgsAttributeTypeDialog attributeTypeDialog ( mLayer );
463
482
464
- attributeTypeDialog.setValueMap ( mValueMaps . value ( index, mLayer -> valueMap ( index ) ) );
465
- attributeTypeDialog.setRange ( mRanges . value ( index, mLayer -> range ( index ) ) );
466
- attributeTypeDialog.setValueRelation ( mValueRelationData . value ( index, mLayer -> valueRelation ( index ) ) );
483
+ attributeTypeDialog.setValueMap ( cfg. mValueMap );
484
+ attributeTypeDialog.setRange ( cfg. mRange );
485
+ attributeTypeDialog.setValueRelation ( cfg. mValueRelationData );
467
486
468
- QPair<QString, QString> checkStates = mCheckedStates . value ( index, mLayer -> checkedState ( index ) ) ;
487
+ QPair<QString, QString> checkStates = cfg. mCheckedState ;
469
488
attributeTypeDialog.setCheckedState ( checkStates.first , checkStates.second );
470
489
471
- attributeTypeDialog.setDateFormat ( mDateFormat . value ( index, mLayer -> dateFormat ( index ) ) );
472
- attributeTypeDialog.setWidgetSize ( mWidgetSize . value ( index, mLayer -> widgetSize ( index ) ) );
473
- attributeTypeDialog.setFieldEditable ( mFieldEditables . value ( index, mLayer -> fieldEditable ( index ) ) );
490
+ attributeTypeDialog.setDateFormat ( cfg. mDateFormat );
491
+ attributeTypeDialog.setWidgetSize ( cfg. mWidgetSize );
492
+ attributeTypeDialog.setFieldEditable ( cfg. mEditable );
474
493
475
- attributeTypeDialog.setIndex ( index, mEditTypeMap . value ( index, mLayer -> editType ( index ) ) );
494
+ attributeTypeDialog.setIndex ( index, cfg. mEditType );
476
495
477
496
if ( !attributeTypeDialog.exec () )
478
497
return ;
479
498
480
- QgsVectorLayer::EditType editType = attributeTypeDialog.editType ();
481
- mEditTypeMap . insert ( index, editType );
499
+ cfg. mEditType = attributeTypeDialog.editType ();
500
+ cfg. mEditable = attributeTypeDialog. fieldEditable ( );
482
501
483
- bool isFieldEditable = attributeTypeDialog.fieldEditable ();
484
- mFieldEditables .insert ( index, isFieldEditable );
485
-
486
- QString buttonText;
487
- switch ( editType )
502
+ switch ( cfg.mEditType )
488
503
{
489
504
case QgsVectorLayer::ValueMap:
490
- mValueMaps . insert ( index, attributeTypeDialog.valueMap () );
505
+ cfg. mValueMap = attributeTypeDialog.valueMap ();
491
506
break ;
492
507
case QgsVectorLayer::EditRange:
493
508
case QgsVectorLayer::SliderRange:
494
509
case QgsVectorLayer::DialRange:
495
- mRanges . insert ( index, attributeTypeDialog.rangeData () );
510
+ cfg. mRange = attributeTypeDialog.rangeData ();
496
511
break ;
497
512
case QgsVectorLayer::CheckBox:
498
- mCheckedStates . insert ( index, attributeTypeDialog.checkedState () );
513
+ cfg. mCheckedState = attributeTypeDialog.checkedState ();
499
514
break ;
500
515
case QgsVectorLayer::ValueRelation:
501
- mValueRelationData . insert ( index, attributeTypeDialog.valueRelationData () );
516
+ cfg. mValueRelationData = attributeTypeDialog.valueRelationData ();
502
517
break ;
503
518
case QgsVectorLayer::Calendar:
504
- mDateFormat . insert ( index, attributeTypeDialog.dateFormat () );
519
+ cfg. mDateFormat = attributeTypeDialog.dateFormat ();
505
520
break ;
506
521
case QgsVectorLayer::Photo:
507
- mWidgetSize . insert ( index, attributeTypeDialog.widgetSize () );
522
+ cfg. mWidgetSize = attributeTypeDialog.widgetSize ();
508
523
break ;
509
524
case QgsVectorLayer::LineEdit:
510
525
case QgsVectorLayer::TextEdit:
@@ -521,7 +536,9 @@ void QgsFieldsProperties::attributeTypeDialog()
521
536
break ;
522
537
}
523
538
524
- pb->setText ( editTypeButtonText ( editType ) );
539
+ setConfigForRow ( row, cfg );
540
+
541
+ pb->setText ( editTypeButtonText ( cfg.mEditType ) );
525
542
}
526
543
527
544
@@ -533,7 +550,6 @@ void QgsFieldsProperties::attributeAdded( int idx )
533
550
int row = mAttributesList ->rowCount ();
534
551
mAttributesList ->insertRow ( row );
535
552
setRow ( row, idx, fields[idx] );
536
- mIndexedWidgets .insert ( idx, mAttributesList ->item ( row, 0 ) );
537
553
538
554
for ( int i = idx; i < mIndexedWidgets .count (); i++ )
539
555
{
@@ -594,6 +610,36 @@ void QgsFieldsProperties::editingToggled()
594
610
updateButtons ();
595
611
}
596
612
613
+ QgsFieldsProperties::FieldConfig QgsFieldsProperties::configForRow ( int row )
614
+ {
615
+ foreach ( QTableWidgetItem* wdg , mIndexedWidgets )
616
+ {
617
+ if ( wdg->row () == row )
618
+ {
619
+ return wdg->data ( Qt::UserRole ).value <FieldConfig>();
620
+ }
621
+ }
622
+
623
+ // Should never get here
624
+ Q_ASSERT ( false );
625
+ return FieldConfig ();
626
+ }
627
+
628
+ void QgsFieldsProperties::setConfigForRow ( int row, QgsFieldsProperties::FieldConfig cfg )
629
+ {
630
+ foreach ( QTableWidgetItem* wdg , mIndexedWidgets )
631
+ {
632
+ if ( wdg->row () == row )
633
+ {
634
+ wdg->setData ( Qt::UserRole, QVariant::fromValue<FieldConfig>( cfg ) );
635
+ return ;
636
+ }
637
+ }
638
+
639
+ // Should never get here
640
+ Q_ASSERT ( false );
641
+ }
642
+
597
643
void QgsFieldsProperties::on_mAddAttributeButton_clicked ()
598
644
{
599
645
QgsAddAttrDialog dialog ( mLayer , this );
@@ -790,63 +836,42 @@ void QgsFieldsProperties::apply()
790
836
for ( int i = 0 ; i < mAttributesList ->rowCount (); i++ )
791
837
{
792
838
int idx = mAttributesList ->item ( i, attrIdCol )->text ().toInt ();
839
+ FieldConfig cfg = configForRow ( i );
793
840
794
841
QPushButton *pb = qobject_cast<QPushButton *>( mAttributesList ->cellWidget ( i, attrEditTypeCol ) );
795
842
if ( !pb )
796
843
continue ;
797
844
798
- QgsVectorLayer::EditType editType = editTypeFromButtonText ( pb->text () );
799
- mLayer ->setEditType ( idx, editType );
845
+ mLayer ->setEditType ( idx, cfg.mEditType );
800
846
801
- if ( mFieldEditables .contains ( idx ) )
802
- mLayer ->setFieldEditable ( idx, mFieldEditables [idx] );
847
+ mLayer ->setFieldEditable ( idx, cfg.mEditable );
803
848
804
- switch ( editType )
849
+ switch ( cfg. mEditType )
805
850
{
806
851
case QgsVectorLayer::ValueMap:
807
- if ( mValueMaps .contains ( idx ) )
808
- {
809
- QMap<QString, QVariant> &map = mLayer ->valueMap ( idx );
810
- map.clear ();
811
- map = mValueMaps [idx];
812
- }
852
+ mLayer ->valueMap ( idx ) = cfg.mValueMap ;
813
853
break ;
814
854
815
855
case QgsVectorLayer::EditRange:
816
856
case QgsVectorLayer::SliderRange:
817
857
case QgsVectorLayer::DialRange:
818
- if ( mRanges .contains ( idx ) )
819
- {
820
- mLayer ->range ( idx ) = mRanges [idx];
821
- }
858
+ mLayer ->range ( idx ) = cfg.mRange ;
822
859
break ;
823
860
824
861
case QgsVectorLayer::CheckBox:
825
- if ( mCheckedStates .contains ( idx ) )
826
- {
827
- mLayer ->setCheckedState ( idx, mCheckedStates [idx].first , mCheckedStates [idx].second );
828
- }
862
+ mLayer ->setCheckedState ( idx, cfg.mCheckedState .first , cfg.mCheckedState .second );
829
863
break ;
830
864
831
865
case QgsVectorLayer::ValueRelation:
832
- if ( mValueRelationData .contains ( idx ) )
833
- {
834
- mLayer ->valueRelation ( idx ) = mValueRelationData [idx];
835
- }
866
+ mLayer ->valueRelation ( idx ) = cfg.mValueRelationData ;
836
867
break ;
837
868
838
869
case QgsVectorLayer::Calendar:
839
- if ( mDateFormat .contains ( idx ) )
840
- {
841
- mLayer ->dateFormat ( idx ) = mDateFormat [idx];
842
- }
870
+ mLayer ->dateFormat ( idx ) = cfg.mDateFormat ;
843
871
break ;
844
872
845
873
case QgsVectorLayer::Photo:
846
- if ( mWidgetSize .contains ( idx ) )
847
- {
848
- mLayer ->widgetSize ( idx ) = mWidgetSize [idx];
849
- }
874
+ mLayer ->widgetSize ( idx ) = cfg.mWidgetSize ;
850
875
break ;
851
876
852
877
case QgsVectorLayer::LineEdit:
@@ -890,3 +915,22 @@ void QgsFieldsProperties::apply()
890
915
mLayer ->setExcludeAttributesWMS ( excludeAttributesWMS );
891
916
mLayer ->setExcludeAttributesWFS ( excludeAttributesWFS );
892
917
}
918
+
919
+
920
+ QgsFieldsProperties::FieldConfig::FieldConfig ()
921
+ : mButton( NULL )
922
+ {
923
+ }
924
+
925
+ QgsFieldsProperties::FieldConfig::FieldConfig ( QgsVectorLayer* layer, int idx )
926
+ : mButton( NULL )
927
+ {
928
+ mEditable = layer->fieldEditable ( idx );
929
+ mValueRelationData = layer->valueRelation ( idx );
930
+ mValueMap = layer->valueMap ( idx );
931
+ mRange = layer->range ( idx );
932
+ mCheckedState = layer->checkedState ( idx );
933
+ mEditType = layer->editType ( idx );
934
+ mDateFormat = layer->dateFormat ( idx );
935
+ mWidgetSize = layer->widgetSize ( idx );
936
+ }
0 commit comments