@@ -29,6 +29,7 @@ QgsValueMapConfigDlg::QgsValueMapConfigDlg( QgsVectorLayer* vl, int fieldIdx, QW
2929
3030 tableWidget->insertRow ( 0 );
3131
32+ connect ( addNullButton, SIGNAL ( clicked () ), this , SLOT ( addNullButtonPushed () ) );
3233 connect ( removeSelectedButton, SIGNAL ( clicked () ), this , SLOT ( removeSelectedButtonPushed () ) );
3334 connect ( loadFromLayerButton, SIGNAL ( clicked () ), this , SLOT ( loadFromLayerButtonPushed () ) );
3435 connect ( loadFromCSVButton, SIGNAL ( clicked () ), this , SLOT ( loadFromCSVButtonPushed () ) );
@@ -38,6 +39,7 @@ QgsValueMapConfigDlg::QgsValueMapConfigDlg( QgsVectorLayer* vl, int fieldIdx, QW
3839QgsEditorWidgetConfig QgsValueMapConfigDlg::config ()
3940{
4041 QgsEditorWidgetConfig cfg;
42+ QSettings settings;
4143
4244 // store data to map
4345 for ( int i = 0 ; i < tableWidget->rowCount () - 1 ; i++ )
@@ -48,13 +50,17 @@ QgsEditorWidgetConfig QgsValueMapConfigDlg::config()
4850 if ( !ki )
4951 continue ;
5052
53+ QString ks = ki->text ();
54+ if (( ks == settings.value ( " qgis/nullValue" , " NULL" ).toString () ) && !( ki->flags () & Qt::ItemIsEditable ) )
55+ ks = VALUEMAP_NULL_TEXT;
56+
5157 if ( !vi || vi->text ().isNull () )
5258 {
53- cfg.insert ( ki-> text (), ki-> text () );
59+ cfg.insert ( ks, ks );
5460 }
5561 else
5662 {
57- cfg.insert ( vi->text (), ki-> text () );
63+ cfg.insert ( vi->text (), ks );
5864 }
5965 }
6066
@@ -72,16 +78,10 @@ void QgsValueMapConfigDlg::setConfig( const QgsEditorWidgetConfig& config )
7278 int row = 0 ;
7379 for ( QgsEditorWidgetConfig::ConstIterator mit = config.begin (); mit != config.end (); mit++, row++ )
7480 {
75- tableWidget->insertRow ( row );
7681 if ( mit.value ().isNull () )
77- {
78- tableWidget->setItem ( row, 0 , new QTableWidgetItem ( mit.key () ) );
79- }
82+ setRow ( row, mit.key (), QString () );
8083 else
81- {
82- tableWidget->setItem ( row, 0 , new QTableWidgetItem ( mit.value ().toString () ) );
83- tableWidget->setItem ( row, 1 , new QTableWidgetItem ( mit.key () ) );
84- }
84+ setRow ( row, mit.value ().toString (), mit.key () );
8585 }
8686}
8787
@@ -129,27 +129,47 @@ void QgsValueMapConfigDlg::updateMap( const QMap<QString, QVariant> &map, bool i
129129
130130 if ( insertNull )
131131 {
132- QSettings settings;
133- tableWidget->setItem ( row, 0 , new QTableWidgetItem ( settings.value ( " qgis/nullValue" , " NULL" ).toString () ) );
134- tableWidget->setItem ( row, 1 , new QTableWidgetItem ( " <NULL>" ) );
132+ setRow ( row, VALUEMAP_NULL_TEXT, " <NULL>" );
135133 ++row;
136134 }
137135
138136 for ( QMap<QString, QVariant>::const_iterator mit = map.begin (); mit != map.end (); ++mit, ++row )
139137 {
140- tableWidget->insertRow ( row );
141138 if ( mit.value ().isNull () )
142- {
143- tableWidget->setItem ( row, 0 , new QTableWidgetItem ( mit.key () ) );
144- }
139+ setRow ( row, mit.key (), QString () );
145140 else
146- {
147- tableWidget->setItem ( row, 0 , new QTableWidgetItem ( mit.key () ) );
148- tableWidget->setItem ( row, 1 , new QTableWidgetItem ( mit.value ().toString () ) );
149- }
141+ setRow ( row, mit.key (), mit.value ().toString () );
150142 }
151143}
152144
145+ void QgsValueMapConfigDlg::setRow ( int row, const QString value, const QString description )
146+ {
147+ QSettings settings;
148+ QTableWidgetItem* valueCell;
149+ QTableWidgetItem* descriptionCell = new QTableWidgetItem ( description );
150+ tableWidget->insertRow ( row );
151+ if ( value == QString ( VALUEMAP_NULL_TEXT ) )
152+ {
153+ QFont cellFont;
154+ cellFont.setItalic ( true );
155+ valueCell = new QTableWidgetItem ( settings.value ( " qgis/nullValue" , " NULL" ).toString () );
156+ valueCell->setFont ( cellFont );
157+ valueCell->setFlags ( Qt::ItemIsSelectable | Qt::ItemIsEnabled );
158+ descriptionCell->setFont ( cellFont );
159+ }
160+ else
161+ {
162+ valueCell = new QTableWidgetItem ( value );
163+ }
164+ tableWidget->setItem ( row, 0 , valueCell );
165+ tableWidget->setItem ( row, 1 , descriptionCell );
166+ }
167+
168+ void QgsValueMapConfigDlg::addNullButtonPushed ()
169+ {
170+ setRow ( tableWidget->rowCount () - 1 , VALUEMAP_NULL_TEXT, " <NULL>" );
171+ }
172+
153173void QgsValueMapConfigDlg::loadFromLayerButtonPushed ()
154174{
155175 QgsAttributeTypeLoadDialog layerDialog ( layer () );
@@ -161,6 +181,8 @@ void QgsValueMapConfigDlg::loadFromLayerButtonPushed()
161181
162182void QgsValueMapConfigDlg::loadFromCSVButtonPushed ()
163183{
184+ QSettings settings;
185+
164186 QString fileName = QFileDialog::getOpenFileName ( nullptr , tr ( " Select a file" ), QDir::homePath () );
165187 if ( fileName.isNull () )
166188 return ;
@@ -217,6 +239,9 @@ void QgsValueMapConfigDlg::loadFromCSVButtonPushed()
217239 val = val.mid ( 1 , val.length () - 2 );
218240 }
219241
242+ if ( key == settings.value ( " qgis/nullValue" , " NULL" ).toString () )
243+ key = QString ( VALUEMAP_NULL_TEXT );
244+
220245 map[ key ] = val;
221246 }
222247
0 commit comments