QString QgsAttributeAction::expandAction( QString action, const QgsAttributeMap &attributes, uint clickedOnValue ) { // This function currently replaces all %% characters in the action // with the value from values[clickedOnValue].second, and then // searches for all strings that go %attribite_name, where // attribute_name is found in values[x].first, and replaces any that // it finds by values[s].second. // Additional substitutions could include symbols for $CWD, $HOME, // etc (and their OSX and Windows equivalents) // This function will potentially fall apart if any of the // substitutions produce text that could match another // substitution. May be better to adopt a two pass approach - identify // all matches and their substitutions and then do a second pass // for the actual substitutions. QString expanded_action; if ( clickedOnValue >= 0 && attributes.contains( clickedOnValue ) ) expanded_action = action.replace( "%%", attributes[clickedOnValue].toString() ); else expanded_action = action; const QgsFieldMap &fields = mLayer->pendingFields(); for ( int i = 0; i < 4; i++ ) { for ( QgsAttributeMap::const_iterator it = attributes.begin(); it != attributes.end(); it++ ) { QgsFieldMap::const_iterator fit = fields.find( it.key() ); if ( fit == fields.constEnd() ) continue; QString to_replace; switch ( i ) { case 0: to_replace = "[%" + fit->name() + "]"; break; case 1: to_replace = "[%" + mLayer->attributeDisplayName( it.key() ) + "]"; break; case 2: to_replace = "%" + fit->name(); break; case 3: to_replace = "%" + mLayer->attributeDisplayName( it.key() ); break; } expanded_action = expanded_action.replace( to_replace, it.value().toString() ); } } return expanded_action; }
void QgsLabelingGui::populateFieldNames() { const QgsFieldMap& fields = mLayer->pendingFields(); QgsFieldMap::const_iterator it = fields.constBegin(); for ( ; it != fields.constEnd(); it++ ) { cboFieldName->addItem( it->name() ); } }
int QgsLabelDialog::fieldIndexFromName( QString name ) { const QgsFieldMap& fields = mLabel->fields(); for ( QgsFieldMap::const_iterator it = fields.begin(); it != fields.end(); ++it ) { if ( it->name() == name ) return it.key(); } return -1; }
void SaQueryBuilder::populateFields() { for ( QgsFieldMap::const_iterator it = mLayer->pendingFields().begin(); it != mLayer->pendingFields().end(); it++ ) { QStandardItem *myItem = new QStandardItem( it->name() ); myItem->setData( it.key() ); myItem->setEditable( false ); mModelFields->insertRow( mModelFields->rowCount(), myItem ); } // All fields get ... setup setupLstFieldsModel(); }
int QgsVectorDataProvider::fieldNameIndex( const QString& fieldName ) const { const QgsFieldMap &theFields = fields(); for ( QgsFieldMap::const_iterator it = theFields.constBegin(); it != theFields.constEnd(); ++it ) { if ( QString::compare( it->name(), fieldName, Qt::CaseInsensitive ) == 0 ) { return it.key(); } } return -1; }
void QgsSearchQueryBuilder::populateFields() { if ( !mLayer ) return; QgsDebugMsg( "entering." ); QRegExp reQuote( "[A-Za-z_][A-Za-z0-9_]*" ); const QgsFieldMap& fields = mLayer->pendingFields(); for ( QgsFieldMap::const_iterator it = fields.begin(); it != fields.end(); ++it ) { QString fieldName = it->name(); mFieldMap[fieldName] = it.key(); if ( !reQuote.exactMatch( fieldName ) ) // quote if necessary fieldName = QgsExpression::quotedColumnRef( fieldName ); QStandardItem *myItem = new QStandardItem( fieldName ); myItem->setEditable( false ); mModelFields->insertRow( mModelFields->rowCount(), myItem ); } }
int QgsSymbol::readFieldName( QDomNode &synode, QString name, const QgsVectorLayer &vl ) { QDomNode node = synode.namedItem( name + "name" ); if ( !node.isNull() ) { const QgsFieldMap &fields = vl.pendingFields(); QString name = node.toElement().text(); for ( QgsFieldMap::const_iterator it = fields.begin(); it != fields.end(); it++ ) if ( it->name() == name ) return it.key(); return -1; } node = synode.namedItem( name ); return node.isNull() ? -1 : node.toElement().text().toInt(); }
//! @note in raster props, this method is called sync() void QgsVectorLayerProperties::reset( void ) { QObject::disconnect( tblAttributes, SIGNAL( cellChanged( int, int ) ), this, SLOT( on_tblAttributes_cellChanged( int, int ) ) ); // populate the general information txtDisplayName->setText( layer->name() ); pbnQueryBuilder->setWhatsThis( tr( "This button opens the query " "builder and allows you to create a subset of features to display on " "the map canvas rather than displaying all features in the layer" ) ); txtSubsetSQL->setWhatsThis( tr( "The query used to limit the features in the " "layer is shown here. To enter or modify the query, click on the Query Builder button" ) ); //see if we are dealing with a pg layer here grpSubset->setEnabled( true ); txtSubsetSQL->setText( layer->subsetString() ); // if the user is allowed to type an adhoc query, the app will crash if the query // is bad. For this reason, the sql box is disabled and the query must be built // using the query builder, either by typing it in by hand or using the buttons, etc // on the builder. If the ability to enter a query directly into the box is required, // a mechanism to check it must be implemented. txtSubsetSQL->setEnabled( false ); pbnQueryBuilder->setEnabled( layer && layer->dataProvider() && layer->dataProvider()->supportsSubsetString() && !layer->isEditable() && layer->vectorJoins().size() < 1 ); if ( layer->isEditable() ) { pbnQueryBuilder->setToolTip( tr( "Stop editing mode to enable this." ) ); } //get field list for display field combo const QgsFieldMap& myFields = layer->pendingFields(); for ( QgsFieldMap::const_iterator it = myFields.begin(); it != myFields.end(); ++it ) { displayFieldComboBox->addItem( it->name() ); fieldComboBox->addItem( it->name() ); } setDisplayField( layer-> displayField() ); // set up the scale based layer visibility stuff.... chkUseScaleDependentRendering->setChecked( layer->hasScaleBasedVisibility() ); bool projectScales = QgsProject::instance()->readBoolEntry( "Scales", "/useProjectScales" ); if ( projectScales ) { QStringList scalesList = QgsProject::instance()->readListEntry( "Scales", "/ScalesList" ); cbMinimumScale->updateScales( scalesList ); cbMaximumScale->updateScales( scalesList ); } cbMinimumScale->setScale( 1.0 / layer->minimumScale() ); cbMaximumScale->setScale( 1.0 / layer->maximumScale() ); // symbology initialization if ( legendtypecombobox->count() == 0 ) { legendtypecombobox->addItem( tr( "Single Symbol" ) ); if ( myFields.size() > 0 ) { legendtypecombobox->addItem( tr( "Graduated Symbol" ) ); legendtypecombobox->addItem( tr( "Continuous Color" ) ); legendtypecombobox->addItem( tr( "Unique Value" ) ); } } // load appropriate symbology page (V1 or V2) updateSymbologyPage(); // reset fields in label dialog layer->label()->setFields( layer->pendingFields() ); actionDialog->init(); if ( layer->hasGeometryType() ) { labelDialog->init(); } labelCheckBox->setChecked( layer->hasLabelsEnabled() ); labelOptionsFrame->setEnabled( layer->hasLabelsEnabled() ); //set the transparency slider sliderTransparency->setValue( 255 - layer->getTransparency() ); //update the transparency percentage label sliderTransparency_valueChanged( 255 - layer->getTransparency() ); loadRows(); QObject::connect( tblAttributes, SIGNAL( cellChanged( int, int ) ), this, SLOT( on_tblAttributes_cellChanged( int, int ) ) ); QObject::connect( labelCheckBox, SIGNAL( clicked( bool ) ), this, SLOT( enableLabelOptions( bool ) ) ); } // reset()
void QgsSingleSymbolDialog::refreshMarkers() { QgsMarkerListModel *m = new QgsMarkerListModel( lstSymbols ); lstSymbols->setModel( m ); connect( lstSymbols->selectionModel(), SIGNAL( currentChanged( const QModelIndex &, const QModelIndex & ) ), this, SLOT( symbolChanged( const QModelIndex &, const QModelIndex & ) ) ); // Find out the numerical fields of mVectorLayer, and populate the ComboBoxes QgsVectorDataProvider *provider = mVectorLayer->dataProvider(); if ( provider ) { const QgsFieldMap & fields = provider->fields(); QString str; mRotationClassificationComboBox->addItem( DO_NOT_USE_STR, -1 ); mScaleClassificationComboBox->addItem( DO_NOT_USE_STR, -1 ); mSymbolComboBox->addItem( DO_NOT_USE_STR, -1 ); for ( QgsFieldMap::const_iterator it = fields.begin(); it != fields.end(); ++it ) { QVariant::Type type = ( *it ).type(); if ( type == QVariant::Int || type == QVariant::Double ) { mRotationClassificationComboBox->addItem( it->name(), it.key() ); mScaleClassificationComboBox->addItem( it->name(), it.key() ); } else if ( type == QVariant::String ) { mSymbolComboBox->addItem( it->name(), it.key() ); } } } else { QgsDebugMsg( "Warning, data provider is null" ); return; } // //set outline / line style // cboOutlineStyle->addItem( QIcon( QgsSymbologyUtils::char2LinePixmap( "SolidLine" ) ), "", "SolidLine" ); cboOutlineStyle->addItem( QIcon( QgsSymbologyUtils::char2LinePixmap( "NoPen" ) ), tr( "None" ), "NoPen" ); cboOutlineStyle->addItem( QIcon( QgsSymbologyUtils::char2LinePixmap( "DashLine" ) ), "", "DashLine" ); cboOutlineStyle->addItem( QIcon( QgsSymbologyUtils::char2LinePixmap( "DotLine" ) ), "", "DotLine" ); cboOutlineStyle->addItem( QIcon( QgsSymbologyUtils::char2LinePixmap( "DashDotLine" ) ), "" , "DashDotLine" ); cboOutlineStyle->addItem( QIcon( QgsSymbologyUtils::char2LinePixmap( "DashDotDotLine" ) ), "", "DashDotDotLine" ); // //set pattern icons and state // cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "SolidPattern" ) ), "", "SolidPattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "NoBrush" ) ), tr( "None" ), "NoBrush" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "HorPattern" ) ), "", "HorPattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "VerPattern" ) ), "", "VerPattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "CrossPattern" ) ), "", "CrossPattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "BDiagPattern" ) ), "", "BDiagPattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "FDiagPattern" ) ), "", "FDiagPattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "DiagCrossPattern" ) ), "", "DiagCrossPattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "Dense1Pattern" ) ), "", "Dense1Pattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "Dense2Pattern" ) ), "", "Dense2Pattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "Dense3Pattern" ) ), "", "Dense3Pattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "Dense4Pattern" ) ), "", "Dense4Pattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "Dense5Pattern" ) ), "", "Dense5Pattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "Dense6Pattern" ) ), "", "Dense6Pattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "Dense7Pattern" ) ), "", "Dense7Pattern" ); cboFillStyle->addItem( QIcon( QgsSymbologyUtils::char2PatternPixmap( "TexturePattern" ) ), tr( "Texture" ), "TexturePattern" ); if ( mVectorLayer && mVectorLayer->geometryType() != QGis::Point ) { mGroupPoint->setVisible( false ); mGroupPoint->setEnabled( false ); mGroupDrawingByField->setVisible( false ); mGroupDrawingByField->setEnabled( false ); } if ( mDisabled ) { unset(); } else { if ( mVectorLayer ) { const QgsSingleSymbolRenderer *renderer = dynamic_cast<const QgsSingleSymbolRenderer *>( mVectorLayer->renderer() ); if ( renderer ) { // Set from the existing renderer set( renderer->symbols().first() ); } else { // Take values from an example instance QgsSingleSymbolRenderer exampleRenderer = QgsSingleSymbolRenderer( mVectorLayer->geometryType() ); set( exampleRenderer.symbols().first() ); } } else { QgsDebugMsg( "Warning, layer is a null pointer" ); } } lstSymbols->blockSignals( false ); }
void QgsClipboard::replaceWithCopyOf( const QgsFieldMap& fields, QgsFeatureList& features ) { // Replace the QGis clipboard. mFeatureClipboard = features; QgsDebugMsg( "replaced QGis clipboard." ); // Replace the system clipboard. QStringList textLines; QStringList textFields; // first do the field names textFields += "wkt_geom"; for ( QgsFieldMap::const_iterator fit = fields.begin(); fit != fields.end(); ++fit ) { textFields += fit->name(); } textLines += textFields.join( "\t" ); textFields.clear(); // then the field contents for ( QgsFeatureList::iterator it = features.begin(); it != features.end(); ++it ) { QgsAttributeMap attributes = it->attributeMap(); // TODO: Set up Paste Transformations to specify the order in which fields are added. if ( it->geometry() ) textFields += it->geometry()->exportToWkt(); else { QSettings settings; textFields += settings.value( "qgis/nullValue", "NULL" ).toString(); } // QgsDebugMsg("about to traverse fields."); // for ( QgsAttributeMap::iterator it2 = attributes.begin(); it2 != attributes.end(); ++it2 ) { // QgsDebugMsg(QString("inspecting field '%1'.").arg(it2->toString())); textFields += it2->toString(); } textLines += textFields.join( "\t" ); textFields.clear(); } QString textCopy = textLines.join( "\n" ); QClipboard *cb = QApplication::clipboard(); // Copy text into the clipboard // With qgis running under Linux, but with a Windows based X // server (Xwin32), ::Selection was necessary to get the data into // the Windows clipboard (which seems contrary to the Qt // docs). With a Linux X server, ::Clipboard was required. // The simple solution was to put the text into both clipboards. // The ::Selection setText() below one may need placing inside so // #ifdef so that it doesn't get compiled under Windows. cb->setText( textCopy, QClipboard::Selection ); cb->setText( textCopy, QClipboard::Clipboard ); QgsDebugMsg( QString( "replaced system clipboard with: %1." ).arg( textCopy ) ); }
//! @note in raster props, this method is called sync() void QgsVectorLayerProperties::reset( void ) { // populate the general information txtDisplayName->setText( layer->name() ); pbnQueryBuilder->setWhatsThis( tr( "This button opens the PostgreSQL query " "builder and allows you to create a subset of features to display on " "the map canvas rather than displaying all features in the layer" ) ); txtSubsetSQL->setWhatsThis( tr( "The query used to limit the features in the " "layer is shown here. This is currently only supported for PostgreSQL " "layers. To enter or modify the query, click on the Query Builder button" ) ); //see if we are dealing with a pg layer here if ( layer->providerType() == "postgres" ) { grpSubset->setEnabled( true ); txtSubsetSQL->setText( layer->subsetString() ); // if the user is allowed to type an adhoc query, the app will crash if the query // is bad. For this reason, the sql box is disabled and the query must be built // using the query builder, either by typing it in by hand or using the buttons, etc // on the builder. If the ability to enter a query directly into the box is required, // a mechanism to check it must be implemented. txtSubsetSQL->setEnabled( false ); pbnQueryBuilder->setEnabled( true ); } else { grpSubset->setEnabled( false ); } //get field list for display field combo const QgsFieldMap& myFields = layer->pendingFields(); for ( QgsFieldMap::const_iterator it = myFields.begin(); it != myFields.end(); ++it ) { displayFieldComboBox->addItem( it->name() ); } displayFieldComboBox->setCurrentIndex( displayFieldComboBox->findText( layer->displayField() ) ); // set up the scale based layer visibility stuff.... chkUseScaleDependentRendering->setChecked( layer->hasScaleBasedVisibility() ); spinMinimumScale->setValue(( int )layer->minimumScale() ); spinMaximumScale->setValue(( int )layer->maximumScale() ); // symbology initialization if ( legendtypecombobox->count() == 0 ) { legendtypecombobox->addItem( tr( "Single Symbol" ) ); if ( myFields.size() > 0 ) { legendtypecombobox->addItem( tr( "Graduated Symbol" ) ); legendtypecombobox->addItem( tr( "Continuous Color" ) ); legendtypecombobox->addItem( tr( "Unique Value" ) ); } } //find out the type of renderer in the vectorlayer, create a dialog with these settings and add it to the form delete mRendererDialog; mRendererDialog = 0; QString rtype = layer->renderer()->name(); if ( rtype == "Single Symbol" ) { mRendererDialog = new QgsSingleSymbolDialog( layer ); legendtypecombobox->setCurrentIndex( 0 ); } else if ( rtype == "Graduated Symbol" ) { mRendererDialog = new QgsGraduatedSymbolDialog( layer ); legendtypecombobox->setCurrentIndex( 1 ); } else if ( rtype == "Continuous Color" ) { mRendererDialog = new QgsContinuousColorDialog( layer ); legendtypecombobox->setCurrentIndex( 2 ); } else if ( rtype == "Unique Value" ) { mRendererDialog = new QgsUniqueValueDialog( layer ); legendtypecombobox->setCurrentIndex( 3 ); } if ( mRendererDialog ) { widgetStackRenderers->addWidget( mRendererDialog ); widgetStackRenderers->setCurrentWidget( mRendererDialog ); } QObject::connect( legendtypecombobox, SIGNAL( activated( const QString & ) ), this, SLOT( alterLayerDialog( const QString & ) ) ); // reset fields in label dialog layer->label()->setFields( layer->pendingFields() ); //set the metadata contents QString myStyle = QgsApplication::reportStyleSheet(); teMetadata->clear(); teMetadata->document()->setDefaultStyleSheet( myStyle ); teMetadata->setHtml( metadata() ); actionDialog->init(); labelDialog->init(); labelCheckBox->setChecked( layer->hasLabelsEnabled() ); labelOptionsFrame->setEnabled ( layer->hasLabelsEnabled() ); //set the transparency slider sliderTransparency->setValue( 255 - layer->getTransparency() ); //update the transparency percentage label sliderTransparency_valueChanged( 255 - layer->getTransparency() ); loadRows(); } // reset()