Add CompatibleGeometryTypesRole to style model

This commit is contained in:
Nyall Dawson 2020-07-24 08:58:07 +10:00
parent 6245b552a4
commit d65b52db77
4 changed files with 54 additions and 3 deletions

View File

@ -43,6 +43,7 @@ instead.
SymbolTypeRole,
IsFavoriteRole,
LayerTypeRole,
CompatibleGeometryTypesRole,
};
explicit QgsStyleModel( QgsStyle *style, QObject *parent /TransferThis/ = 0 );

View File

@ -364,10 +364,49 @@ QVariant QgsStyleModel::data( const QModelIndex &index, int role ) const
case LayerTypeRole:
{
if ( entityType != QgsStyle::LabelSettingsEntity )
return QVariant();
switch ( entityType )
{
case QgsStyle::LabelSettingsEntity:
return mStyle->labelSettingsLayerType( name );
return mStyle->labelSettingsLayerType( name );
case QgsStyle::Symbol3DEntity:
case QgsStyle::SymbolEntity:
case QgsStyle::LegendPatchShapeEntity:
case QgsStyle::TagEntity:
case QgsStyle::ColorrampEntity:
case QgsStyle::SmartgroupEntity:
case QgsStyle::TextFormatEntity:
return QVariant();
}
return QVariant();
}
case CompatibleGeometryTypesRole:
{
switch ( entityType )
{
case QgsStyle::Symbol3DEntity:
{
QVariantList res;
const QList< QgsWkbTypes::GeometryType > types = mStyle->symbol3DCompatibleGeometryTypes( name );
res.reserve( types.size() );
for ( QgsWkbTypes::GeometryType type : types )
{
res << static_cast< int >( type );
}
return res;
}
case QgsStyle::LabelSettingsEntity:
case QgsStyle::SymbolEntity:
case QgsStyle::LegendPatchShapeEntity:
case QgsStyle::TagEntity:
case QgsStyle::ColorrampEntity:
case QgsStyle::SmartgroupEntity:
case QgsStyle::TextFormatEntity:
return QVariant();
}
return QVariant();
}
default:

View File

@ -63,6 +63,7 @@ class CORE_EXPORT QgsStyleModel: public QAbstractItemModel
SymbolTypeRole, //!< Symbol type (for symbol or legend patch shape entities)
IsFavoriteRole, //!< Whether entity is flagged as a favorite
LayerTypeRole, //!< Layer type (for label settings entities)
CompatibleGeometryTypesRole, //!< Compatible layer geometry types (for 3D symbols)
};
/**

View File

@ -54,6 +54,9 @@ class Dummy3dSymbol(QgsAbstract3DSymbol):
def writeXml(self, elem, context):
pass
def compatibleGeometryTypes(self):
return [int(QgsWkbTypes.PointGeometry), int(QgsWkbTypes.LineGeometry)]
def createMarkerSymbol():
symbol = QgsMarkerSymbol.createSimple({
@ -496,6 +499,13 @@ class TestQgsStyleModel(unittest.TestCase):
self.assertEqual(model.data(model.index(3, 0), QgsStyleModel.IsFavoriteRole), False)
self.assertEqual(model.data(model.index(4, 0), QgsStyleModel.IsFavoriteRole), False)
self.assertEqual(model.data(model.index(0, 0), QgsStyleModel.CompatibleGeometryTypesRole), [0, 1])
self.assertEqual(model.data(model.index(1, 0), QgsStyleModel.CompatibleGeometryTypesRole), [0, 1])
self.assertEqual(model.data(model.index(2, 0), QgsStyleModel.CompatibleGeometryTypesRole), [0, 1])
self.assertEqual(model.data(model.index(3, 0), QgsStyleModel.CompatibleGeometryTypesRole), [0, 1])
self.assertEqual(model.data(model.index(4, 0), QgsStyleModel.CompatibleGeometryTypesRole), [0, 1])
self.assertEqual(model.data(model.index(5, 0), QgsStyleModel.CompatibleGeometryTypesRole), None)
def test_mixed_style(self):
"""
Test style with both symbols and ramps