Skip to content
Permalink
Browse files

Move method for detecting project colors to QgsProperty

  • Loading branch information
nyalldawson committed Jan 12, 2019
1 parent da53f14 commit ac10769809432a4df4f02dc66d36a74508e3cea8
@@ -311,6 +311,13 @@ Returns true if preparation was successful.
%Docstring
Returns the set of any fields referenced by the property for a specified
expression context.
%End

bool isProjectColor() const;
%Docstring
Returns true if the property is set to a linked project color.

.. versionadded:: 3.6
%End

QVariant value( const QgsExpressionContext &context, const QVariant &defaultValue = QVariant(), bool *ok /Out/ = 0 ) const;
@@ -418,6 +418,13 @@ QSet<QString> QgsProperty::referencedFields( const QgsExpressionContext &context
return QSet<QString>();
}

bool QgsProperty::isProjectColor() const
{
QRegularExpression rx( QStringLiteral( "^project_color\\('.*'\\)$" ) );
return d->type == QgsProperty::ExpressionBasedProperty && !d->expressionString.isEmpty()
&& rx.match( d->expressionString ).hasMatch();
}

QVariant QgsProperty::propertyValue( const QgsExpressionContext &context, const QVariant &defaultValue, bool *ok ) const
{
if ( ok )
@@ -352,6 +352,13 @@ class CORE_EXPORT QgsProperty
*/
QSet< QString > referencedFields( const QgsExpressionContext &context = QgsExpressionContext() ) const;

/**
* Returns true if the property is set to a linked project color.
*
* \since QGIS 3.6
*/
bool isProjectColor() const;

/**
* Calculates the current value of the property, including any transforms which are set for the property
* \param context QgsExpressionContext to evaluate the property for. The variables and functions contained
@@ -854,13 +854,7 @@ void QgsPropertyOverrideButton::updateSiblingWidgets( bool state )
{
if ( state && mFlags & FlagDisableCheckedWidgetOnlyWhenProjectColorSet )
{
state = false;
QRegularExpression rx( QStringLiteral( "^project_color\\('.*'\\)$" ) );
if ( mProperty.propertyType() == QgsProperty::ExpressionBasedProperty && !mExpressionString.isEmpty()
&& rx.match( mExpressionString ).hasMatch() )
{
state = true;
}
state = mProperty.isProjectColor();
}

Q_FOREACH ( const SiblingWidget &sw, mSiblingWidgets )
@@ -92,6 +92,7 @@ class TestQgsProperty : public QObject
void collectionStack(); //test for QgsPropertyCollectionStack
void curveTransform();
void asVariant();
void isProjectColor();

private:

@@ -1778,6 +1779,22 @@ void TestQgsProperty::asVariant()
QCOMPARE( fromVar.field(), QStringLiteral( "field1" ) );
}

void TestQgsProperty::isProjectColor()
{
QgsProperty p = QgsProperty::fromValue( 3, true );
QVERIFY( !p.isProjectColor() );
p = QgsProperty::fromField( QStringLiteral( "blah" ), true );
QVERIFY( !p.isProjectColor() );
p = QgsProperty::fromExpression( QStringLiteral( "1+2" ), true );
QVERIFY( !p.isProjectColor() );
p = QgsProperty::fromExpression( QStringLiteral( "project_color('mine')" ), true );
QVERIFY( p.isProjectColor() );
p = QgsProperty::fromExpression( QStringLiteral( "project_color('burnt pineapple Skin 76')" ), true );
QVERIFY( p.isProjectColor() );
p.setActive( false );
QVERIFY( p.isProjectColor() );
}

void TestQgsProperty::checkCurveResult( const QList<QgsPointXY> &controlPoints, const QVector<double> &x, const QVector<double> &y )
{
// build transform

0 comments on commit ac10769

Please sign in to comment.
You can’t perform that action at this time.