void QgsDataDefinedButton::init( const QgsVectorLayer* vl, const QgsDataDefined* datadefined, const DataTypes& datatypes, const QString& description ) { mVectorLayer = vl; // construct default property if none or incorrect passed in if ( !datadefined ) { mProperty.insert( "active", "0" ); mProperty.insert( "useexpr", "0" ); mProperty.insert( "expression", QString() ); mProperty.insert( "field", QString() ); } else { mProperty.insert( "active", datadefined->isActive() ? "1" : "0" ); mProperty.insert( "useexpr", datadefined->useExpression() ? "1" : "0" ); mProperty.insert( "expression", datadefined->expressionString() ); mProperty.insert( "field", datadefined->field() ); } mDataTypes = datatypes; mFieldNameList.clear(); mFieldTypeList.clear(); mInputDescription = description; mFullDescription.clear(); mUsageInfo.clear(); mCurrentDefinition.clear(); // set up data types string mDataTypesString.clear(); QStringList ts; if ( mDataTypes.testFlag( String ) ) { ts << tr( "string" ); } if ( mDataTypes.testFlag( Int ) ) { ts << tr( "int" ); } if ( mDataTypes.testFlag( Double ) ) { ts << tr( "double" ); } if ( !ts.isEmpty() ) { mDataTypesString = ts.join( ", " ); mActionDataTypes->setText( tr( "Field type: " ) + mDataTypesString ); } updateFieldLists(); updateGui(); }
void QgsPropertyOverrideButton::init( int propertyKey, const QgsProperty &property, const QgsPropertyDefinition &definition, const QgsVectorLayer *layer, bool auxiliaryStorageEnabled ) { mVectorLayer = layer; mAuxiliaryStorageEnabled = auxiliaryStorageEnabled; setToProperty( property ); mPropertyKey = propertyKey; mDefinition = definition; mDataTypes = mDefinition.dataType(); mInputDescription = mDefinition.helpText(); mFullDescription.clear(); mUsageInfo.clear(); // set up data types string mDataTypesString.clear(); QStringList ts; switch ( mDataTypes ) { case QgsPropertyDefinition::DataTypeBoolean: ts << tr( "boolean" ); FALLTHROUGH case QgsPropertyDefinition::DataTypeNumeric: ts << tr( "int" ); ts << tr( "double" ); FALLTHROUGH case QgsPropertyDefinition::DataTypeString: ts << tr( "string" ); break; } if ( !ts.isEmpty() ) { mDataTypesString = ts.join( QStringLiteral( ", " ) ); mActionDataTypes->setText( tr( "Field type: " ) + mDataTypesString ); } updateFieldLists(); updateGui(); updateSiblingWidgets( isActive() ); }
void QgsDelimitedTextSourceSelect::updateFieldsAndEnable() { updateFieldLists(); enableAccept(); }
void QgsPropertyOverrideButton::aboutToShowMenu() { mDefineMenu->clear(); // update fields so that changes made to layer's fields are reflected updateFieldLists(); bool hasExp = !mExpressionString.isEmpty(); QString ddTitle = tr( "Data defined override" ); QAction *ddTitleAct = mDefineMenu->addAction( ddTitle ); QFont titlefont = ddTitleAct->font(); titlefont.setItalic( true ); ddTitleAct->setFont( titlefont ); ddTitleAct->setEnabled( false ); bool addActiveAction = false; if ( mProperty.propertyType() == QgsProperty::ExpressionBasedProperty && hasExp ) { QgsExpression exp( mExpressionString ); // whether expression is parse-able addActiveAction = !exp.hasParserError(); } else if ( mProperty.propertyType() == QgsProperty::FieldBasedProperty ) { // whether field exists addActiveAction = mFieldNameList.contains( mFieldName ); } if ( addActiveAction ) { ddTitleAct->setText( ddTitle + " (" + ( mProperty.propertyType() == QgsProperty::ExpressionBasedProperty ? tr( "expression" ) : tr( "field" ) ) + ')' ); mDefineMenu->addAction( mActionActive ); mActionActive->setText( mProperty.isActive() ? tr( "Deactivate" ) : tr( "Activate" ) ); mActionActive->setData( QVariant( !mProperty.isActive() ) ); } if ( !mFullDescription.isEmpty() ) { mDefineMenu->addAction( mActionDescription ); } mDefineMenu->addSeparator(); // deactivate button if field already exists if ( mAuxiliaryStorageEnabled && mVectorLayer ) { mDefineMenu->addAction( mActionCreateAuxiliaryField ); const QgsAuxiliaryLayer *alayer = mVectorLayer->auxiliaryLayer(); mActionCreateAuxiliaryField->setEnabled( true ); mActionCreateAuxiliaryField->setChecked( false ); int index = mVectorLayer->fields().indexFromName( mFieldName ); int srcIndex; if ( index >= 0 && alayer && mVectorLayer->isAuxiliaryField( index, srcIndex ) ) { mActionCreateAuxiliaryField->setEnabled( false ); mActionCreateAuxiliaryField->setChecked( true ); } } bool fieldActive = false; if ( !mDataTypesString.isEmpty() ) { QAction *fieldTitleAct = mDefineMenu->addAction( tr( "Attribute field" ) ); fieldTitleAct->setFont( titlefont ); fieldTitleAct->setEnabled( false ); mDefineMenu->addAction( mActionDataTypes ); mFieldsMenu->clear(); if ( !mFieldNameList.isEmpty() ) { for ( int j = 0; j < mFieldNameList.count(); ++j ) { QString fldname = mFieldNameList.at( j ); QAction *act = mFieldsMenu->addAction( fldname + " (" + mFieldTypeList.at( j ) + ')' ); act->setData( QVariant( fldname ) ); if ( mFieldName == fldname ) { act->setCheckable( true ); act->setChecked( mProperty.propertyType() == QgsProperty::FieldBasedProperty ); fieldActive = mProperty.propertyType() == QgsProperty::FieldBasedProperty; } } } else { QAction *act = mFieldsMenu->addAction( tr( "No matching field types found" ) ); act->setEnabled( false ); } mDefineMenu->addSeparator(); } mFieldsMenu->menuAction()->setCheckable( true ); mFieldsMenu->menuAction()->setChecked( fieldActive && mProperty.propertyType() == QgsProperty::FieldBasedProperty && !mProperty.transformer() ); QAction *exprTitleAct = mDefineMenu->addAction( tr( "Expression" ) ); exprTitleAct->setFont( titlefont ); exprTitleAct->setEnabled( false ); mVariablesMenu->clear(); bool variableActive = false; if ( mExpressionContextGenerator ) { QgsExpressionContext context = mExpressionContextGenerator->createExpressionContext(); QStringList variables = context.variableNames(); Q_FOREACH ( const QString &variable, variables ) { if ( context.isReadOnly( variable ) ) //only want to show user-set variables continue; if ( variable.startsWith( '_' ) ) //no hidden variables continue; QAction *act = mVariablesMenu->addAction( variable ); act->setData( QVariant( variable ) ); if ( mProperty.propertyType() == QgsProperty::ExpressionBasedProperty && hasExp && mExpressionString == '@' + variable ) { act->setCheckable( true ); act->setChecked( true ); variableActive = true; } } } if ( mVariablesMenu->actions().isEmpty() ) { QAction *act = mVariablesMenu->addAction( tr( "No variables set" ) ); act->setEnabled( false ); } mDefineMenu->addAction( mActionVariables ); mVariablesMenu->menuAction()->setCheckable( true ); mVariablesMenu->menuAction()->setChecked( variableActive && !mProperty.transformer() ); if ( hasExp ) { QString expString = mExpressionString; if ( expString.length() > 35 ) { expString.truncate( 35 ); expString.append( QChar( 0x2026 ) ); } expString.prepend( tr( "Current: " ) ); if ( !mActionExpression ) { mActionExpression = new QAction( expString, this ); mActionExpression->setCheckable( true ); } else { mActionExpression->setText( expString ); } mDefineMenu->addAction( mActionExpression ); mActionExpression->setChecked( mProperty.propertyType() == QgsProperty::ExpressionBasedProperty && !variableActive && !mProperty.transformer() ); mDefineMenu->addAction( mActionExpDialog ); mDefineMenu->addAction( mActionCopyExpr ); mDefineMenu->addAction( mActionPasteExpr ); mDefineMenu->addAction( mActionClearExpr ); } else { mDefineMenu->addAction( mActionExpDialog ); mDefineMenu->addAction( mActionPasteExpr ); } if ( !mDefinition.name().isEmpty() && mDefinition.supportsAssistant() ) { mDefineMenu->addSeparator(); mActionAssistant->setCheckable( mProperty.transformer() ); mActionAssistant->setChecked( mProperty.transformer() ); mDefineMenu->addAction( mActionAssistant ); } }
void QgsDataDefinedButton::aboutToShowMenu() { mDefineMenu->clear(); // update fields so that changes made to layer's fields are reflected updateFieldLists(); bool hasExp = !getExpression().isEmpty(); bool hasField = !getField().isEmpty(); QString ddTitle = tr( "Data defined override" ); QAction* ddTitleAct = mDefineMenu->addAction( ddTitle ); QFont titlefont = ddTitleAct->font(); titlefont.setItalic( true ); ddTitleAct->setFont( titlefont ); ddTitleAct->setEnabled( false ); bool addActiveAction = false; if ( useExpression() && hasExp ) { QgsExpression exp( getExpression() ); // whether expression is parse-able addActiveAction = !exp.hasParserError(); } else if ( !useExpression() && hasField ) { // whether field exists addActiveAction = mFieldNameList.contains( getField() ); } if ( addActiveAction ) { ddTitleAct->setText( ddTitle + " (" + ( useExpression() ? tr( "expression" ) : tr( "field" ) ) + ')' ); mDefineMenu->addAction( mActionActive ); mActionActive->setText( isActive() ? tr( "Deactivate" ) : tr( "Activate" ) ); mActionActive->setData( QVariant( isActive() ? false : true ) ); } if ( !mFullDescription.isEmpty() ) { mDefineMenu->addAction( mActionDescription ); } mDefineMenu->addSeparator(); bool fieldActive = false; if ( !mDataTypesString.isEmpty() ) { QAction* fieldTitleAct = mDefineMenu->addAction( tr( "Attribute field" ) ); fieldTitleAct->setFont( titlefont ); fieldTitleAct->setEnabled( false ); mDefineMenu->addAction( mActionDataTypes ); mFieldsMenu->clear(); if ( !mFieldNameList.isEmpty() ) { for ( int j = 0; j < mFieldNameList.count(); ++j ) { QString fldname = mFieldNameList.at( j ); QAction* act = mFieldsMenu->addAction( fldname + " (" + mFieldTypeList.at( j ) + ')' ); act->setData( QVariant( fldname ) ); if ( getField() == fldname ) { act->setCheckable( true ); act->setChecked( !useExpression() ); fieldActive = !useExpression(); } } } else { QAction* act = mFieldsMenu->addAction( tr( "No matching field types found" ) ); act->setEnabled( false ); } mDefineMenu->addSeparator(); } mFieldsMenu->menuAction()->setCheckable( true ); mFieldsMenu->menuAction()->setChecked( fieldActive ); QAction* exprTitleAct = mDefineMenu->addAction( tr( "Expression" ) ); exprTitleAct->setFont( titlefont ); exprTitleAct->setEnabled( false ); mVariablesMenu->clear(); bool variableActive = false; if ( mExpressionContextGenerator ) { QgsExpressionContext context = mExpressionContextGenerator->createExpressionContext(); QStringList variables = context.variableNames(); Q_FOREACH ( const QString& variable, variables ) { if ( context.isReadOnly( variable ) ) //only want to show user-set variables continue; if ( variable.startsWith( '_' ) ) //no hidden variables continue; QAction* act = mVariablesMenu->addAction( variable ); act->setData( QVariant( variable ) ); if ( useExpression() && hasExp && getExpression() == '@' + variable ) { act->setCheckable( true ); act->setChecked( true ); variableActive = true; } } } if ( mVariablesMenu->actions().isEmpty() ) { QAction* act = mVariablesMenu->addAction( tr( "No variables set" ) ); act->setEnabled( false ); } mDefineMenu->addAction( mActionVariables ); mVariablesMenu->menuAction()->setCheckable( true ); mVariablesMenu->menuAction()->setChecked( variableActive ); if ( hasExp ) { QString expString = getExpression(); if ( expString.length() > 35 ) { expString.truncate( 35 ); expString.append( "..." ); } expString.prepend( tr( "Current: " ) ); if ( !mActionExpression ) { mActionExpression = new QAction( expString, this ); mActionExpression->setCheckable( true ); } else { mActionExpression->setText( expString ); } mDefineMenu->addAction( mActionExpression ); mActionExpression->setChecked( useExpression() && !variableActive ); mDefineMenu->addAction( mActionExpDialog ); mDefineMenu->addAction( mActionCopyExpr ); mDefineMenu->addAction( mActionPasteExpr ); mDefineMenu->addAction( mActionClearExpr ); } else { mDefineMenu->addAction( mActionExpDialog ); mDefineMenu->addAction( mActionPasteExpr ); } if ( mAssistant.data() ) { mDefineMenu->addSeparator(); mDefineMenu->addAction( mActionAssistant ); } }