Skip to content

Commit 100d702

Browse files
committedDec 30, 2011
[FEATURE] add uuid generator widget
1 parent d7b1499 commit 100d702

File tree

8 files changed

+112
-30
lines changed

8 files changed

+112
-30
lines changed
 

‎python/core/qgsvectorlayer.sip

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public:
6868
Calendar, /* calendar widget @added in 1.5 */
6969
DialRange, /* dial range @added in 1.5 */
7070
ValueRelation, /* value map from an table @added in 1.8 */
71+
UuidGenerator, /* uuid generator - readonly and automatically intialized @added in 1.9 */
7172
};
7273

7374
struct RangeData {

‎src/app/qgsattributetypedialog.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,10 @@ void QgsAttributeTypeDialog::setPageForEditType( QgsVectorLayer::EditType editTy
279279
case QgsVectorLayer::ValueRelation:
280280
setPage( 12 );
281281
break;
282+
283+
case QgsVectorLayer::UuidGenerator:
284+
setPage( 13 );
285+
break;
282286
}
283287
}
284288

@@ -419,7 +423,7 @@ void QgsAttributeTypeDialog::setIndex( int index, QgsVectorLayer::EditType editT
419423
break;
420424

421425
case QgsVectorLayer::UniqueValuesEditable:
422-
editableUniqueValues->setChecked( editType == QgsVectorLayer::UniqueValuesEditable );
426+
editableUniqueValues->setChecked( true );
423427
break;
424428

425429
case QgsVectorLayer::ValueRelation:
@@ -440,6 +444,7 @@ void QgsAttributeTypeDialog::setIndex( int index, QgsVectorLayer::EditType editT
440444
case QgsVectorLayer::Hidden:
441445
case QgsVectorLayer::TextEdit:
442446
case QgsVectorLayer::Calendar:
447+
case QgsVectorLayer::UuidGenerator:
443448
break;
444449
}
445450
}
@@ -600,6 +605,9 @@ void QgsAttributeTypeDialog::accept()
600605
mValueRelationData.mAllowNull = valueRelationAllowNull->isChecked();
601606
mValueRelationData.mOrderByValue = valueRelationOrderByValue->isChecked();
602607
break;
608+
case 13:
609+
mEditType = QgsVectorLayer::UuidGenerator;
610+
break;
603611
}
604612

605613
QDialog::accept();

‎src/app/qgsvectorlayerproperties.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@ void QgsVectorLayerProperties::attributeTypeDialog( )
310310
case QgsVectorLayer::Immutable:
311311
case QgsVectorLayer::Hidden:
312312
case QgsVectorLayer::Calendar:
313+
case QgsVectorLayer::UuidGenerator:
313314
break;
314315
}
315316

@@ -583,6 +584,7 @@ void QgsVectorLayerProperties::setupEditTypes()
583584
editTypeMap.insert( QgsVectorLayer::TextEdit, tr( "Text edit" ) );
584585
editTypeMap.insert( QgsVectorLayer::Calendar, tr( "Calendar" ) );
585586
editTypeMap.insert( QgsVectorLayer::ValueRelation, tr( "Value relation" ) );
587+
editTypeMap.insert( QgsVectorLayer::UuidGenerator, tr( "UUID generator" ) );
586588
}
587589

588590
QString QgsVectorLayerProperties::editTypeButtonText( QgsVectorLayer::EditType type )
@@ -690,6 +692,7 @@ void QgsVectorLayerProperties::apply()
690692
case QgsVectorLayer::Hidden:
691693
case QgsVectorLayer::TextEdit:
692694
case QgsVectorLayer::Calendar:
695+
case QgsVectorLayer::UuidGenerator:
693696
break;
694697
}
695698
}

‎src/core/qgsvectorlayer.cpp

Lines changed: 51 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3048,37 +3048,61 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage
30483048
EditType editType = ( EditType ) editTypeElement.attribute( "type" ).toInt();
30493049
mEditTypes.insert( name, editType );
30503050

3051-
if ( editType == ValueMap && editTypeNode.hasChildNodes() )
3051+
switch ( editType )
30523052
{
3053-
mValueMaps.insert( name, QMap<QString, QVariant>() );
3053+
case ValueMap:
3054+
if ( editTypeNode.hasChildNodes() )
3055+
{
3056+
mValueMaps.insert( name, QMap<QString, QVariant>() );
3057+
3058+
QDomNodeList valueMapNodes = editTypeNode.childNodes();
3059+
for ( int j = 0; j < valueMapNodes.size(); j++ )
3060+
{
3061+
QDomElement value = valueMapNodes.at( j ).toElement();
3062+
mValueMaps[ name ].insert( value.attribute( "key" ), value.attribute( "value" ) );
3063+
}
3064+
}
3065+
break;
30543066

3055-
QDomNodeList valueMapNodes = editTypeNode.childNodes();
3056-
for ( int j = 0; j < valueMapNodes.size(); j++ )
3067+
case EditRange:
3068+
case SliderRange:
3069+
case DialRange:
30573070
{
3058-
QDomElement value = valueMapNodes.at( j ).toElement();
3059-
mValueMaps[ name ].insert( value.attribute( "key" ), value.attribute( "value" ) );
3071+
QVariant min = editTypeElement.attribute( "min" );
3072+
QVariant max = editTypeElement.attribute( "max" );
3073+
QVariant step = editTypeElement.attribute( "step" );
3074+
3075+
mRanges[ name ] = RangeData( min, max, step );
30603076
}
3061-
}
3062-
else if ( editType == EditRange || editType == SliderRange )
3063-
{
3064-
QVariant min = editTypeElement.attribute( "min" );
3065-
QVariant max = editTypeElement.attribute( "max" );
3066-
QVariant step = editTypeElement.attribute( "step" );
3077+
break;
30673078

3068-
mRanges[ name ] = RangeData( min, max, step );
3069-
}
3070-
else if ( editType == CheckBox )
3071-
{
3072-
mCheckedStates[ name ] = QPair<QString, QString>( editTypeElement.attribute( "checked" ), editTypeElement.attribute( "unchecked" ) );
3073-
}
3074-
else if ( editType == ValueRelation )
3075-
{
3076-
QString id = editTypeElement.attribute( "layer" );
3077-
QString key = editTypeElement.attribute( "key" );
3078-
QString value = editTypeElement.attribute( "value" );
3079-
bool allowNull = editTypeElement.attribute( "allowNull" ) == "true";
3080-
bool orderByValue = editTypeElement.attribute( "orderByValue" ) == "true";
3081-
mValueRelations[ name ] = ValueRelationData( id, key, value, allowNull, orderByValue );
3079+
case CheckBox:
3080+
mCheckedStates[ name ] = QPair<QString, QString>( editTypeElement.attribute( "checked" ), editTypeElement.attribute( "unchecked" ) );
3081+
break;
3082+
3083+
case ValueRelation:
3084+
{
3085+
QString id = editTypeElement.attribute( "layer" );
3086+
QString key = editTypeElement.attribute( "key" );
3087+
QString value = editTypeElement.attribute( "value" );
3088+
bool allowNull = editTypeElement.attribute( "allowNull" ) == "true";
3089+
bool orderByValue = editTypeElement.attribute( "orderByValue" ) == "true";
3090+
mValueRelations[ name ] = ValueRelationData( id, key, value, allowNull, orderByValue );
3091+
}
3092+
break;
3093+
3094+
case Classification:
3095+
case FileName:
3096+
case Immutable:
3097+
case Hidden:
3098+
case LineEdit:
3099+
case TextEdit:
3100+
case Calendar:
3101+
case Enumeration:
3102+
case UniqueValues:
3103+
case UniqueValuesEditable:
3104+
case UuidGenerator:
3105+
break;
30823106
}
30833107
}
30843108
}
@@ -3297,6 +3321,7 @@ bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString&
32973321
case Calendar:
32983322
case Enumeration:
32993323
case Immutable:
3324+
case UuidGenerator:
33003325
break;
33013326
}
33023327

‎src/core/qgsvectorlayer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
105105
Calendar, /* calendar widget @added in 1.5 */
106106
DialRange, /* dial range @added in 1.5 */
107107
ValueRelation, /* value map from an table @added in 1.8 */
108+
UuidGenerator, /* uuid generator - readonly and automatically intialized @added in 1.9 */
108109
};
109110

110111
struct RangeData

‎src/gui/qgsattributeeditor.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <qgslonglongvalidator.h>
2525
#include <qgsfieldvalidator.h>
2626
#include <qgsmaplayerregistry.h>
27+
#include <qgslogger.h>
2728

2829
#include <QPushButton>
2930
#include <QLineEdit>
@@ -40,6 +41,7 @@
4041
#include <QDialogButtonBox>
4142
#include <QSettings>
4243
#include <QDir>
44+
#include <QUuid>
4345

4446
void QgsAttributeEditor::selectFileName()
4547
{
@@ -268,7 +270,6 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
268270
}
269271
break;
270272

271-
272273
case QgsVectorLayer::DialRange:
273274
case QgsVectorLayer::SliderRange:
274275
case QgsVectorLayer::EditRange:
@@ -365,6 +366,7 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
365366

366367
case QgsVectorLayer::LineEdit:
367368
case QgsVectorLayer::TextEdit:
369+
case QgsVectorLayer::UuidGenerator:
368370
case QgsVectorLayer::UniqueValuesEditable:
369371
case QgsVectorLayer::Immutable:
370372
{
@@ -404,6 +406,11 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
404406
le->setCompleter( c );
405407
}
406408

409+
if ( editType == QgsVectorLayer::UuidGenerator )
410+
{
411+
le->setReadOnly( true );
412+
}
413+
407414
le->setValidator( new QgsFieldValidator( le, field ) );
408415
myWidget = le;
409416
}
@@ -735,6 +742,7 @@ bool QgsAttributeEditor::setValue( QWidget *editor, QgsVectorLayer *vl, int idx,
735742
case QgsVectorLayer::LineEdit:
736743
case QgsVectorLayer::UniqueValuesEditable:
737744
case QgsVectorLayer::Immutable:
745+
case QgsVectorLayer::UuidGenerator:
738746
default:
739747
{
740748
QLineEdit *le = qobject_cast<QLineEdit *>( editor );
@@ -745,12 +753,18 @@ bool QgsAttributeEditor::setValue( QWidget *editor, QgsVectorLayer *vl, int idx,
745753

746754
QString text;
747755
if ( value.isNull() )
756+
{
748757
if ( myFieldType == QVariant::Int || myFieldType == QVariant::Double || myFieldType == QVariant::LongLong )
749758
text = "";
759+
else if ( editType == QgsVectorLayer::UuidGenerator )
760+
text = QUuid::createUuid().toString();
750761
else
751762
text = nullValue;
763+
}
752764
else
765+
{
753766
text = value.toString();
767+
}
754768

755769
if ( le )
756770
le->setText( text );

‎src/providers/postgres/qgspostgresprovider.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1736,6 +1736,7 @@ bool QgsPostgresProvider::loadFields()
17361736
fieldTypeName == "geometry" ||
17371737
fieldTypeName == "money" ||
17381738
fieldTypeName == "ltree" ||
1739+
fieldTypeName == "uuid" ||
17391740
fieldTypeName.startsWith( "time" ) ||
17401741
fieldTypeName.startsWith( "date" ) )
17411742
{

‎src/ui/qgsattributetypeedit.ui

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@
8181
<string>Value relation</string>
8282
</property>
8383
</item>
84+
<item>
85+
<property name="text">
86+
<string>UUID generator</string>
87+
</property>
88+
</item>
8489
</widget>
8590
</item>
8691
<item>
@@ -92,7 +97,7 @@
9297
</sizepolicy>
9398
</property>
9499
<property name="currentIndex">
95-
<number>12</number>
100+
<number>0</number>
96101
</property>
97102
<widget class="QWidget" name="lineEditPage">
98103
<layout class="QVBoxLayout" name="verticalLayout_1">
@@ -596,7 +601,7 @@
596601
</item>
597602
</layout>
598603
</widget>
599-
<widget class="QWidget" name="page">
604+
<widget class="QWidget" name="valueRelationPage">
600605
<layout class="QGridLayout" name="gridLayout_3">
601606
<item row="1" column="0">
602607
<widget class="QLabel" name="label_5">
@@ -679,6 +684,30 @@
679684
</item>
680685
</layout>
681686
</widget>
687+
<widget class="QWidget" name="uuidGenPage">
688+
<layout class="QVBoxLayout" name="verticalLayout_14">
689+
<item>
690+
<widget class="QLabel" name="label_9">
691+
<property name="text">
692+
<string>Read-only field that generates a UUID if empty.</string>
693+
</property>
694+
</widget>
695+
</item>
696+
<item>
697+
<spacer name="verticalSpacer_11">
698+
<property name="orientation">
699+
<enum>Qt::Vertical</enum>
700+
</property>
701+
<property name="sizeHint" stdset="0">
702+
<size>
703+
<width>20</width>
704+
<height>294</height>
705+
</size>
706+
</property>
707+
</spacer>
708+
</item>
709+
</layout>
710+
</widget>
682711
</widget>
683712
</item>
684713
<item>

0 commit comments

Comments
 (0)
Please sign in to comment.