From 437cb85cd5590eb3525cbb5be4c120a5841fa26e Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Thu, 23 Jun 2016 12:50:38 +0200 Subject: [PATCH] Left align mapped values Fix #15101 --- .../core/qgseditorwidgetfactory.sip | 10 +++++++++ .../attributetable/qgsattributetablemodel.cpp | 21 +++++++------------ .../attributetable/qgsfeaturelistmodel.cpp | 4 ++++ .../core/qgseditorwidgetfactory.cpp | 15 +++++++++++++ .../core/qgseditorwidgetfactory.h | 10 +++++++++ .../editorwidgets/qgsdatetimeeditfactory.cpp | 9 ++++++++ .../editorwidgets/qgsdatetimeeditfactory.h | 1 + .../qgsvaluemapwidgetfactory.cpp | 9 ++++++++ .../editorwidgets/qgsvaluemapwidgetfactory.h | 1 + .../qgsvaluerelationwidgetfactory.cpp | 11 ++++++++++ .../qgsvaluerelationwidgetfactory.h | 1 + 11 files changed, 78 insertions(+), 14 deletions(-) diff --git a/python/gui/editorwidgets/core/qgseditorwidgetfactory.sip b/python/gui/editorwidgets/core/qgseditorwidgetfactory.sip index 08e58e9d7a1..81a90234056 100644 --- a/python/gui/editorwidgets/core/qgseditorwidgetfactory.sip +++ b/python/gui/editorwidgets/core/qgseditorwidgetfactory.sip @@ -123,6 +123,16 @@ class QgsEditorWidgetFactory */ virtual QString representValue( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config, const QVariant& cache, const QVariant& value ) const; + /** + * Return the alignment for a particular field. By default this will consider the field type but can be overwritten if mapped + * values are represented. + * @param vl The vector layer. + * @param fieldIdx The index of the field. + * @param config The editor widget config. + * @return The alignment flag, normally Qt::AlignRight or Qt::AlignLeft + */ + virtual Qt::AlignmentFlag alignmentFlag( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config ) const; + /** * Create a cache for a given field. * diff --git a/src/gui/attributetable/qgsattributetablemodel.cpp b/src/gui/attributetable/qgsattributetablemodel.cpp index 01a04ad00fc..393cdc1e7af 100644 --- a/src/gui/attributetable/qgsattributetablemodel.cpp +++ b/src/gui/attributetable/qgsattributetablemodel.cpp @@ -579,25 +579,18 @@ QVariant QgsAttributeTableModel::data( const QModelIndex &index, int role ) cons if ( role == FieldIndexRole ) return fieldId; - QgsField field = layer()->fields().at( fieldId ); - - QVariant::Type fldType = field.type(); - bool fldRightAlign = ( fldType == QVariant::Int || fldType == QVariant::Double || fldType == QVariant::LongLong - || fldType == QVariant::DateTime || fldType == QVariant::Date || fldType == QVariant::Time ); - - if ( role == Qt::TextAlignmentRole ) - { - if ( fldRightAlign ) - return QVariant( Qt::AlignRight ); - else - return QVariant( Qt::AlignLeft ); - } - if ( role == SortRole ) { return mSortCache[rowId]; } + QgsField field = layer()->fields().at( fieldId ); + + if ( role == Qt::TextAlignmentRole ) + { + return mWidgetFactories.at( index.column() )->alignmentFlag( layer(), fieldId, mWidgetConfigs.at( index.column() ) ); + } + if ( mFeat.id() != rowId || !mFeat.isValid() ) { if ( !loadFeatureAtId( rowId ) ) diff --git a/src/gui/attributetable/qgsfeaturelistmodel.cpp b/src/gui/attributetable/qgsfeaturelistmodel.cpp index 89a92d540fa..a9bb666c7b0 100644 --- a/src/gui/attributetable/qgsfeaturelistmodel.cpp +++ b/src/gui/attributetable/qgsfeaturelistmodel.cpp @@ -134,6 +134,10 @@ QVariant QgsFeatureListModel::data( const QModelIndex &index, int role ) const return QVariant::fromValue( feat ); } + else if ( role == Qt::TextAlignmentRole ) + { + return Qt::AlignLeft; + } return sourceModel()->data( mapToSource( index ), role ); } diff --git a/src/gui/editorwidgets/core/qgseditorwidgetfactory.cpp b/src/gui/editorwidgets/core/qgseditorwidgetfactory.cpp index 329bf8bcd0c..cf2c064ac70 100644 --- a/src/gui/editorwidgets/core/qgseditorwidgetfactory.cpp +++ b/src/gui/editorwidgets/core/qgseditorwidgetfactory.cpp @@ -16,6 +16,7 @@ #include "qgseditorwidgetfactory.h" #include "qgsdefaultsearchwidgetwrapper.h" #include "qgssearchwidgetwrapper.h" +#include "qgsfield.h" #include @@ -69,6 +70,20 @@ QString QgsEditorWidgetFactory::representValue( QgsVectorLayer* vl, int fieldIdx return vl->fields().at( fieldIdx ).displayString( value ); } +Qt::AlignmentFlag QgsEditorWidgetFactory::alignmentFlag( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config ) const +{ + Q_UNUSED( config ); + + QVariant::Type fldType = vl->fields().at( fieldIdx ).type(); + bool alignRight = ( fldType == QVariant::Int || fldType == QVariant::Double || fldType == QVariant::LongLong + || fldType == QVariant::DateTime || fldType == QVariant::Date || fldType == QVariant::Time ); + + if ( alignRight ) + return Qt::AlignRight; + else + return Qt::AlignLeft; +} + QVariant QgsEditorWidgetFactory::createCache( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config ) { Q_UNUSED( vl ) diff --git a/src/gui/editorwidgets/core/qgseditorwidgetfactory.h b/src/gui/editorwidgets/core/qgseditorwidgetfactory.h index aaeb2daaede..660f4dcba85 100644 --- a/src/gui/editorwidgets/core/qgseditorwidgetfactory.h +++ b/src/gui/editorwidgets/core/qgseditorwidgetfactory.h @@ -138,6 +138,16 @@ class GUI_EXPORT QgsEditorWidgetFactory */ virtual QString representValue( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config, const QVariant& cache, const QVariant& value ) const; + /** + * Return the alignment for a particular field. By default this will consider the field type but can be overwritten if mapped + * values are represented. + * @param vl The vector layer. + * @param fieldIdx The index of the field. + * @param config The editor widget config. + * @return The alignment flag, normally Qt::AlignRight or Qt::AlignLeft + */ + virtual Qt::AlignmentFlag alignmentFlag( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config ) const; + /** * Create a cache for a given field. * diff --git a/src/gui/editorwidgets/qgsdatetimeeditfactory.cpp b/src/gui/editorwidgets/qgsdatetimeeditfactory.cpp index 51ee66852e2..454c7cf40f1 100644 --- a/src/gui/editorwidgets/qgsdatetimeeditfactory.cpp +++ b/src/gui/editorwidgets/qgsdatetimeeditfactory.cpp @@ -97,6 +97,15 @@ QString QgsDateTimeEditFactory::representValue( QgsVectorLayer* vl, int fieldIdx return result; } +Qt::AlignmentFlag QgsDateTimeEditFactory::alignmentFlag( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config ) const +{ + Q_UNUSED( vl ); + Q_UNUSED( fieldIdx ); + Q_UNUSED( config ); + + return Qt::AlignLeft; +} + QMap QgsDateTimeEditFactory::supportedWidgetTypes() { QMap map = QMap(); diff --git a/src/gui/editorwidgets/qgsdatetimeeditfactory.h b/src/gui/editorwidgets/qgsdatetimeeditfactory.h index bfb0e9df73d..b8a2ad9276a 100644 --- a/src/gui/editorwidgets/qgsdatetimeeditfactory.h +++ b/src/gui/editorwidgets/qgsdatetimeeditfactory.h @@ -39,6 +39,7 @@ class GUI_EXPORT QgsDateTimeEditFactory : public QgsEditorWidgetFactory QgsEditorWidgetConfig readConfig( const QDomElement &configElement, QgsVectorLayer *layer, int fieldIdx ) override; void writeConfig( const QgsEditorWidgetConfig& config, QDomElement& configElement, QDomDocument& doc, const QgsVectorLayer* layer, int fieldIdx ) override; QString representValue( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config, const QVariant& cache, const QVariant& value ) const override; + Qt::AlignmentFlag alignmentFlag( QgsVectorLayer *vl, int fieldIdx, const QgsEditorWidgetConfig &config ) const override; virtual QMap supportedWidgetTypes() override; }; diff --git a/src/gui/editorwidgets/qgsvaluemapwidgetfactory.cpp b/src/gui/editorwidgets/qgsvaluemapwidgetfactory.cpp index cf12f065683..6e4c742e076 100644 --- a/src/gui/editorwidgets/qgsvaluemapwidgetfactory.cpp +++ b/src/gui/editorwidgets/qgsvaluemapwidgetfactory.cpp @@ -89,6 +89,15 @@ QString QgsValueMapWidgetFactory::representValue( QgsVectorLayer* vl, int fieldI return config.key( value, QVariant( QString( "(%1)" ).arg( value.toString() ) ).toString() ); } +Qt::AlignmentFlag QgsValueMapWidgetFactory::alignmentFlag( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config ) const +{ + Q_UNUSED( vl ); + Q_UNUSED( fieldIdx ); + Q_UNUSED( config ); + + return Qt::AlignLeft; +} + QMap QgsValueMapWidgetFactory::supportedWidgetTypes() { QMap map = QMap(); diff --git a/src/gui/editorwidgets/qgsvaluemapwidgetfactory.h b/src/gui/editorwidgets/qgsvaluemapwidgetfactory.h index 2bb600d91f6..37476b522da 100644 --- a/src/gui/editorwidgets/qgsvaluemapwidgetfactory.h +++ b/src/gui/editorwidgets/qgsvaluemapwidgetfactory.h @@ -35,6 +35,7 @@ class GUI_EXPORT QgsValueMapWidgetFactory : public QgsEditorWidgetFactory QgsEditorWidgetConfig readConfig( const QDomElement& configElement, QgsVectorLayer* layer, int fieldIdx ) override; void writeConfig( const QgsEditorWidgetConfig& config, QDomElement& configElement, QDomDocument& doc, const QgsVectorLayer* layer, int fieldIdx ) override; QString representValue( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config, const QVariant& cache, const QVariant& value ) const override; + Qt::AlignmentFlag alignmentFlag( QgsVectorLayer *vl, int fieldIdx, const QgsEditorWidgetConfig &config ) const override; virtual QMap supportedWidgetTypes() override; }; diff --git a/src/gui/editorwidgets/qgsvaluerelationwidgetfactory.cpp b/src/gui/editorwidgets/qgsvaluerelationwidgetfactory.cpp index 8b337cf3d96..ad9912cd349 100644 --- a/src/gui/editorwidgets/qgsvaluerelationwidgetfactory.cpp +++ b/src/gui/editorwidgets/qgsvaluerelationwidgetfactory.cpp @@ -130,6 +130,17 @@ QString QgsValueRelationWidgetFactory::representValue( QgsVectorLayer* vl, int f return QString( "(%1)" ).arg( value.toString() ); } +Qt::AlignmentFlag QgsValueRelationWidgetFactory::alignmentFlag( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config ) const +{ + Q_UNUSED( vl ); + Q_UNUSED( fieldIdx ); + Q_UNUSED( config ); + + QgsDebugMsg( "Entered" ); + + return Qt::AlignLeft; +} + QVariant QgsValueRelationWidgetFactory::createCache( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config ) { Q_UNUSED( vl ) diff --git a/src/gui/editorwidgets/qgsvaluerelationwidgetfactory.h b/src/gui/editorwidgets/qgsvaluerelationwidgetfactory.h index 281e4a6091b..b6315b02d0c 100644 --- a/src/gui/editorwidgets/qgsvaluerelationwidgetfactory.h +++ b/src/gui/editorwidgets/qgsvaluerelationwidgetfactory.h @@ -38,6 +38,7 @@ class GUI_EXPORT QgsValueRelationWidgetFactory : public QgsEditorWidgetFactory QgsEditorWidgetConfig readConfig( const QDomElement& configElement, QgsVectorLayer* layer, int fieldIdx ) override; void writeConfig( const QgsEditorWidgetConfig& config, QDomElement& configElement, QDomDocument& doc, const QgsVectorLayer* layer, int fieldIdx ) override; QString representValue( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config, const QVariant& cache, const QVariant& value ) const override; + Qt::AlignmentFlag alignmentFlag( QgsVectorLayer *vl, int fieldIdx, const QgsEditorWidgetConfig &config ) const override; QVariant createCache( QgsVectorLayer* vl, int fieldIdx, const QgsEditorWidgetConfig& config ) override; };