Skip to content

Commit e863e7d

Browse files
author
jef
committed
attribute editor fixes:
- in attribute table: set minimum width of editor to columns width and height of filename widget to two times the lineedit height - fix non-editable unique value editor (was editable) - fix enum support - add support for symbology-ng categories git-svn-id: http://svn.osgeo.org/qgis/trunk@12545 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent cace1e2 commit e863e7d

File tree

4 files changed

+90
-52
lines changed

4 files changed

+90
-52
lines changed

src/app/attributetable/qgsattributetabledelegate.cpp

+17-3
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,25 @@ QWidget *QgsAttributeTableDelegate::createEditor(
5959
const QModelIndex &index ) const
6060
{
6161
QgsVectorLayer *vl = layer( index.model() );
62-
if ( vl == NULL )
62+
if ( !vl )
6363
return NULL;
6464

65-
return QgsAttributeEditor::createAttributeEditor( parent, 0, vl, fieldIdx( index ), index.model()->data( index, Qt::EditRole ) );
65+
QWidget *w = QgsAttributeEditor::createAttributeEditor( parent, 0, vl, fieldIdx( index ), index.model()->data( index, Qt::EditRole ) );
66+
67+
if ( parent )
68+
{
69+
QgsAttributeTableView *tv = dynamic_cast<QgsAttributeTableView *>( parent->parentWidget() );
70+
w->setMinimumWidth( tv->columnWidth( index.column() ) );
71+
72+
if ( vl->editType( fieldIdx( index ) ) == QgsVectorLayer::FileName )
73+
{
74+
QLineEdit *le = w->findChild<QLineEdit*>();
75+
le->adjustSize();
76+
w->setMinimumHeight( le->height()*2 ); // FIXME: there must be a better way to do this
77+
}
78+
}
79+
80+
return w;
6681
}
6782

6883
void QgsAttributeTableDelegate::setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const
@@ -85,7 +100,6 @@ void QgsAttributeTableDelegate::setEditorData( QWidget *editor, const QModelInde
85100
return;
86101

87102
QgsAttributeEditor::setValue( editor, vl, fieldIdx( index ), index.model()->data( index, Qt::EditRole ) );
88-
editor->adjustSize();
89103
}
90104

91105
void QgsAttributeTableDelegate::paint( QPainter * painter,

src/app/attributetable/qgsattributetabledelegate.h

-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ class QgsAttributeTableDelegate : public QItemDelegate
6666
* @param index index of field which is to be retrieved
6767
*/
6868
void setEditorData( QWidget *editor, const QModelIndex &index ) const;
69-
7069
};
7170

7271
#endif //QGSATTRIBUTETABLEDELEGATE_H

src/app/qgsattributeeditor.cpp

+18-6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <qgsvectorlayer.h>
2121
#include <qgsvectordataprovider.h>
2222
#include <qgsuniquevaluerenderer.h>
23+
#include <qgscategorizedsymbolrendererv2.h>
2324
#include <qgssymbol.h>
2425

2526
#include <QPushButton>
@@ -88,10 +89,10 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
8889
QComboBox *cb = comboBox( editor, parent );
8990
if ( cb )
9091
{
91-
cb->setEditable( true );
92+
cb->setEditable( false );
9293

9394
for ( QList<QVariant>::iterator it = values.begin(); it != values.end(); it++ )
94-
cb->addItem( it->toString() );
95+
cb->addItem( it->toString(), it->toString() );
9596

9697
myWidget = cb;
9798
}
@@ -109,7 +110,7 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
109110
QStringList::const_iterator s_it = enumValues.constBegin();
110111
for ( ; s_it != enumValues.constEnd(); ++s_it )
111112
{
112-
cb->addItem( *s_it );
113+
cb->addItem( *s_it, *s_it );
113114
}
114115

115116
myWidget = cb;
@@ -136,14 +137,11 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
136137

137138
case QgsVectorLayer::Classification:
138139
{
139-
int classificationField = -1;
140140
QMap<QString, QString> classes;
141141

142142
const QgsUniqueValueRenderer *uvr = dynamic_cast<const QgsUniqueValueRenderer *>( vl->renderer() );
143143
if ( uvr )
144144
{
145-
classificationField = uvr->classificationField();
146-
147145
const QList<QgsSymbol *> symbols = uvr->symbols();
148146

149147
for ( int i = 0; i < symbols.size(); i++ )
@@ -158,6 +156,20 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
158156
}
159157
}
160158

159+
const QgsCategorizedSymbolRendererV2 *csr = dynamic_cast<const QgsCategorizedSymbolRendererV2 *>( vl->rendererV2() );
160+
if ( csr )
161+
{
162+
const QgsCategoryList &categories = (( QgsCategorizedSymbolRendererV2 * )csr )->categories(); // FIXME: QgsCategorizedSymbolRendererV2::categories() should be const
163+
for ( int i = 0; i < categories.size(); i++ )
164+
{
165+
QString label = categories[i].label();
166+
QString value = categories[i].value().toString();
167+
if ( label.isEmpty() )
168+
label = value;
169+
classes.insert( label, value );
170+
}
171+
}
172+
161173
QComboBox *cb = comboBox( editor, parent );
162174
if ( cb )
163175
{

src/app/qgsattributetypedialog.cpp

+55-42
Original file line numberDiff line numberDiff line change
@@ -344,61 +344,74 @@ void QgsAttributeTypeDialog::setIndex( int index, int editTypeInt )
344344
//setPageForIndex( index );
345345
setPageForEditType( editType );
346346

347-
if ( editType == QgsVectorLayer::ValueMap )
347+
switch ( editType )
348348
{
349-
350-
tableWidget->clearContents();
351-
for ( int i = tableWidget->rowCount() - 1; i > 0; i-- )
349+
case QgsVectorLayer::ValueMap:
352350
{
353-
tableWidget->removeRow( i );
354-
}
355351

356-
// if some value map already present use it
357-
QMap<QString, QVariant> map;
358-
if ( !mValueMap.empty() )
359-
{
360-
map = mValueMap;
361-
}
362-
else
363-
{
364-
map = mLayer->valueMap( index );
365-
}
352+
tableWidget->clearContents();
353+
for ( int i = tableWidget->rowCount() - 1; i > 0; i-- )
354+
{
355+
tableWidget->removeRow( i );
356+
}
366357

367-
int row = 0;
368-
for ( QMap<QString, QVariant>::iterator mit = map.begin(); mit != map.end(); mit++, row++ )
369-
{
370-
tableWidget->insertRow( row );
371-
if ( mit.value().isNull() )
358+
// if some value map already present use it
359+
QMap<QString, QVariant> map;
360+
if ( !mValueMap.empty() )
372361
{
373-
tableWidget->setItem( row, 0, new QTableWidgetItem( mit.key() ) );
362+
map = mValueMap;
374363
}
375364
else
376365
{
377-
tableWidget->setItem( row, 0, new QTableWidgetItem( mit.value().toString() ) );
378-
tableWidget->setItem( row, 1, new QTableWidgetItem( mit.key() ) );
366+
map = mLayer->valueMap( index );
367+
}
368+
369+
int row = 0;
370+
for ( QMap<QString, QVariant>::iterator mit = map.begin(); mit != map.end(); mit++, row++ )
371+
{
372+
tableWidget->insertRow( row );
373+
if ( mit.value().isNull() )
374+
{
375+
tableWidget->setItem( row, 0, new QTableWidgetItem( mit.key() ) );
376+
}
377+
else
378+
{
379+
tableWidget->setItem( row, 0, new QTableWidgetItem( mit.value().toString() ) );
380+
tableWidget->setItem( row, 1, new QTableWidgetItem( mit.key() ) );
381+
}
379382
}
380-
}
381383

382-
}
383-
else if ( editType == QgsVectorLayer::EditRange ||
384-
editType == QgsVectorLayer::SliderRange )
385-
{
386-
if ( mLayer->pendingFields()[mIndex].type() != QVariant::Int )
387-
{
388-
minimumSpinBox->setValue( mLayer->range( index ).mMin.toInt() );
389-
maximumSpinBox->setValue( mLayer->range( index ).mMax.toInt() );
390-
stepSpinBox->setValue( mLayer->range( index ).mStep.toInt() );
391384
}
392-
else if ( mLayer->pendingFields()[mIndex].type() == QVariant::Double )
385+
break;
386+
387+
case QgsVectorLayer::EditRange:
388+
case QgsVectorLayer::SliderRange:
393389
{
394-
minimumDoubleSpinBox->setValue( mLayer->range( index ).mMin.toDouble() );
395-
maximumDoubleSpinBox->setValue( mLayer->range( index ).mMax.toDouble() );
396-
stepDoubleSpinBox->setValue( mLayer->range( index ).mStep.toDouble() );
390+
if ( mLayer->pendingFields()[mIndex].type() != QVariant::Int )
391+
{
392+
minimumSpinBox->setValue( mLayer->range( index ).mMin.toInt() );
393+
maximumSpinBox->setValue( mLayer->range( index ).mMax.toInt() );
394+
stepSpinBox->setValue( mLayer->range( index ).mStep.toInt() );
395+
}
396+
else if ( mLayer->pendingFields()[mIndex].type() == QVariant::Double )
397+
{
398+
minimumDoubleSpinBox->setValue( mLayer->range( index ).mMin.toDouble() );
399+
maximumDoubleSpinBox->setValue( mLayer->range( index ).mMax.toDouble() );
400+
stepDoubleSpinBox->setValue( mLayer->range( index ).mStep.toDouble() );
401+
}
402+
if ( editType == QgsVectorLayer::EditRange )
403+
editableRadioButton->setChecked( true );
404+
else //slider range
405+
sliderRadioButton->setChecked( true );
397406
}
398-
if ( editType == QgsVectorLayer::EditRange )
399-
editableRadioButton->setChecked( true );
400-
else //slider range
401-
sliderRadioButton->setChecked( true );
407+
break;
408+
409+
case QgsVectorLayer::UniqueValuesEditable:
410+
editableUniqueValues->setChecked( editType == QgsVectorLayer::UniqueValuesEditable );
411+
break;
412+
413+
default:
414+
break;
402415
}
403416
}
404417

0 commit comments

Comments
 (0)