def cleanupConfigAndGui( self ): missedLayers = utils.layersWithoutReports( self.cfgRoot ) if len( missedLayers ) > 0: self.lstLayers.blockSignals( True ) for lay in missedLayers: utils.removeLayerFromConfig( self.cfgRoot, lay ) items = self.lstLayers.findItems( lay, Qt.MatchExactly, 0 ) items[ 0 ].setCheckState( 0, Qt.Unchecked ) self.lstLayers.blockSignals( False )
def readConfigurationFile( self, fileName ): fl = QFile( fileName ) if not fl.open( QIODevice.ReadOnly | QIODevice.Text ): QMessageBox.warning( self, self.tr( "Load error" ), self.tr( "Cannot read file %1:\n%2." ) .arg( fileName ) .arg( fl.errorString() ) ) return self.config = QDomDocument() setOk, errorString, errorLine, errorColumn = self.config.setContent( fl, True ) if not setOk: QMessageBox.warning( self, self.tr( "Load error" ), self.tr( "Parse error at line %1, column %2:\n%3" ) .arg( errorLine ) .arg( errorColumn ) .arg( errorString ) ) self.config = None fl.close() return fl.close() # parse configuration and update UI self.cfgRoot = self.config.documentElement() self.lstLayers.blockSignals( True ) missedLayers = [] child = self.cfgRoot.firstChildElement() while not child.isNull(): items = self.lstLayers.findItems( child.attribute( "name" ), Qt.MatchExactly, 0 ) if len( items ) > 0: items[ 0 ].setCheckState( 0, Qt.Checked ) else: missedLayers.append( child.attribute( "name" ) ) child = child.nextSiblingElement() self.lstLayers.blockSignals( False ) # config cleanup if len( missedLayers ) > 0: for lay in missedLayers: utils.removeLayerFromConfig( self.cfgRoot, lay ) self.btnSaveConfig.setEnabled( True ) self.lstLayers.setEnabled( True ) self.lblProfilePath.setText( self.tr( "Config file: %1" ).arg( fileName ) )
def toggleLayer( self, item, column ): if self.config: if item.checkState( 0 ) == Qt.Checked: utils.addLayerToConfig( self.config, self.cfgRoot, item.text( 0 ) ) layerElement = utils.findLayerInConfig( self.cfgRoot, item.text( 0 ) ) vLayer = utils.getVectorLayerByName( item.text( 0 ) ) vProvider = vLayer.dataProvider() # check layer renderer and determine classification field fieldName = None fieldIndex = None if vLayer.isUsingRendererV2(): renderer = vLayer.rendererV2() rendererType = renderer.type() if rendererType in [ "categorizedSymbol", "Unique Value" ]: fieldName = renderer.classAttribute() fieldIndex = utils.fieldIndexByName( vProvider, fieldName ) elif rendererType in [ "singleSymbol", "Single Symbol" ]: fieldIndex = 0 fieldName = utils.fieldNameByIndex( vProvider, fieldIndex ) else: print "Invalid renderer type! Skip this layer..." item.setCheckState( 0, Qt.Unchecked ) return else: renderer = vLayer.renderer() rendererType = renderer.name() if rendererType in [ "categorizedSymbol", "Unique Value" ]: fieldIndex = renderer.classificationField() fieldName = utils.fieldNameByIndex( vProvider, fieldIndex ) elif rendererType in [ "singleSymbol", "Single Symbol" ]: fieldIndex = 0 fieldName = utils.fieldNameByIndex( vProvider, fieldIndex ) else: print "Invalid renderer type! Skip this layer..." item.setCheckState( 0, Qt.Unchecked ) return d = layersettingsdialog.LayerSettingsDialog( self, vLayer ) d.setAreasReport( utils.hasReport( layerElement, "area" ) ) d.setObjectsReport( utils.hasReport( layerElement, "objects" ) ) tmp = utils.labelFieldName( layerElement ) if tmp.isEmpty(): d.setLabelField( fieldName ) else: d.setLabelField( tmp ) d.setComment( utils.layerComment( layerElement ) ) if not d.exec_() == QDialog.Accepted: item.setCheckState( 0, Qt.Unchecked ) return # update layer config if necessary if d.areasReport(): utils.addLayerReport( self.config, layerElement, "area" ) else: utils.removeLayerReport( layerElement, "area" ) if d.objectsReport(): utils.addLayerReport( self.config, layerElement, "objects" ) else: utils.removeLayerReport( layerElement, "objects" ) utils.setLabelFieldName( self.config, layerElement, d.getLabelField() ) utils.setLayerComment( self.config, layerElement, d.getComment() ) else: utils.removeLayerFromConfig( self.cfgRoot, item.text( 0 ) )