Пример #1
0
 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 )
Пример #2
0
  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 ) )
Пример #3
0
  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 ) )