示例#1
0
 def testSetCurrentLayer(self):
     view = QgsLayerTreeView()
     view.setModel(self.model)
     current_layer_changed_spy = QSignalSpy(view.currentLayerChanged)
     self.assertFalse(view.currentLayer())
     view.setCurrentLayer(self.layer3)
     self.assertEqual(view.currentLayer(), self.layer3)
     self.assertEqual(len(current_layer_changed_spy), 1)
     view.setCurrentLayer(self.layer)
     self.assertEqual(view.currentLayer(), self.layer)
     self.assertEqual(len(current_layer_changed_spy), 2)
     view.setCurrentLayer(None)
     self.assertFalse(view.currentLayer())
     self.assertEqual(len(current_layer_changed_spy), 3)
 def testSetCurrentLayer(self):
     view = QgsLayerTreeView()
     view.setModel(self.model)
     current_layer_changed_spy = QSignalSpy(view.currentLayerChanged)
     self.assertFalse(view.currentLayer())
     view.setCurrentLayer(self.layer3)
     self.assertEqual(view.currentLayer(), self.layer3)
     self.assertEqual(len(current_layer_changed_spy), 1)
     view.setCurrentLayer(self.layer)
     self.assertEqual(view.currentLayer(), self.layer)
     self.assertEqual(len(current_layer_changed_spy), 2)
     view.setCurrentLayer(None)
     self.assertFalse(view.currentLayer())
     self.assertEqual(len(current_layer_changed_spy), 3)
示例#3
0
    def testSetCurrentLayer(self):

        view = QgsLayerTreeView()
        view.setModel(self.model)
        if USE_MODEL_TESTER:
            proxy_tester = QAbstractItemModelTester(view.model())
        current_layer_changed_spy = QSignalSpy(view.currentLayerChanged)
        self.assertFalse(view.currentLayer())
        view.setCurrentLayer(self.layer3)
        self.assertEqual(view.currentLayer(), self.layer3)
        self.assertEqual(len(current_layer_changed_spy), 1)
        view.setCurrentLayer(self.layer)
        self.assertEqual(view.currentLayer(), self.layer)
        self.assertEqual(len(current_layer_changed_spy), 2)
        view.setCurrentLayer(None)
        self.assertFalse(view.currentLayer())
        self.assertEqual(len(current_layer_changed_spy), 3)
class AuxiliaryLegend(QDockWidget):

    currentLayerChanged = pyqtSignal("QgsMapLayer")
    currentLayerQgis = pyqtSignal("QgsMapLayer")
    syncGroupLayer = pyqtSignal()
    addSelectedLayersQgis = pyqtSignal()
    removeLayer = pyqtSignal("QgsMapLayer")
    needSelectLayer = pyqtSignal()
    closed = pyqtSignal()

    def __init__(self, parent, numWin):
        def setTreeView():
            def setModel():
                self.model = QgsLayerTreeModel(ltg)
                self.model.setFlag(QgsLayerTreeModel.AllowNodeReorder)
                self.model.setFlag(QgsLayerTreeModel.AllowNodeChangeVisibility,
                                   True)
                self.tview.setModel(self.model)

            self.tview = QgsLayerTreeView(self)
            self.tview.setSelectionMode(QAbstractItemView.ExtendedSelection)
            setModel()
            self.tview.currentLayerChanged.connect(
                self.currentLayerChanged.emit)

        def setupUi():
            self.setAllowedAreas(Qt.LeftDockWidgetArea)
            winLegend.setWindowFlags(Qt.Widget)
            toolBar.setFloatable(False)
            toolBar.setMovable(False)
            winLegend.addToolBar(toolBar)
            self.setWidget(winLegend)

        def addActions():
            actn = QAction(winLegend)
            actn.setIcon(qgis.utils.iface.actionShowSelectedLayers().icon())
            actn.setIconText('Show selected layers')
            actn.setObjectName('showLayer')
            actn.triggered.connect(self.onAction)
            toolBar.addAction(actn)

            actn = QAction(winLegend)
            actn.setIcon(qgis.utils.iface.actionHideSelectedLayers().icon())
            actn.setIconText('Hide selected layers')
            actn.setObjectName('hideLayer')
            actn.triggered.connect(self.onAction)
            toolBar.addAction(actn)

            actn = QAction(winLegend)
            actn.setIcon(qgis.utils.iface.actionRemoveLayer().icon())
            actn.setIconText('Remove selected layers')
            actn.setObjectName('removeLayer')
            actn.triggered.connect(self.onAction)
            toolBar.addAction(actn)

            toolBar.addSeparator()

            actn = QAction(winLegend)
            actn.setIcon(qgis.utils.iface.actionDuplicateLayer().icon())
            actn.setIconText('Add selected layers from main map')
            actn.setObjectName('addLayer')
            actn.triggered.connect(self.onAction)
            toolBar.addAction(actn)

            actn = QAction(winLegend)
            actn.setIcon(
                QIcon(
                    os.path.join(os.path.dirname(__file__),
                                 'mActionCurrentLayer.png')))
            actn.setIconText('Current layer for main map')
            actn.setObjectName('currentLayer')
            actn.triggered.connect(self.onAction)
            toolBar.addAction(actn)

            actn = QAction(winLegend)
            actn.setIcon(
                QIcon(
                    os.path.join(os.path.dirname(__file__),
                                 'mActionAddGroup.png')))
            actn.setObjectName('syncGroup')
            actn.triggered.connect(self.onAction)
            toolBar.addAction(actn)

        super(AuxiliaryLegend, self).__init__("#%d - Layers" % numWin, parent)

        ltg = parent.ltg
        self.tview = self.model = self.bridge = None
        self.textSync = "Sync with group(main map) for new layers"
        self.actSync = None
        setTreeView()

        winLegend = QMainWindow(self)
        toolBar = QToolBar(winLegend)
        setupUi()
        addActions()
        self.addNameSyncGroup("None")
        winLegend.setCentralWidget(self.tview)

    def addNameSyncGroup(self, name):
        act = self.findChild(QAction, 'syncGroup')
        text = "%s -> %s" % (self.textSync, name)
        act.setIconText(text)

    def setBridge(self, canvas):
        ltg = self.model.rootGroup()
        self.bridge = QgsLayerTreeMapCanvasBridge(
            ltg, canvas)  # Need wait populate ltg

    def clearBridge(self):
        if not self.bridge is None:
            self.bridge.clear()

    def closeEvent(self, event):
        event.accept()
        self.closed.emit()

    @pyqtSlot()
    def onAction(self):
        nameSender = self.sender().objectName()

        if nameSender in ('showLayer', 'hideLayer', 'removeLayer'):
            nodes = self.tview.selectedLayerNodes()
            if len(nodes) == 0:
                self.needSelectLayer.emit()
                return

            if nameSender in ('showLayer', 'hideLayer'):
                checked = Qt.Checked if nameSender == 'showLayer' else Qt.Unchecked
                map(lambda item: item.setVisible(checked), nodes)
            else:
                ltg = self.model.rootGroup()
                for node in nodes:
                    self.removeLayer.emit(node.layer())
                    ltg.removeChildNode(node)

        # addLayer, currentLayer
        else:
            if nameSender == 'addLayer':
                self.addSelectedLayersQgis.emit()
            elif nameSender == 'currentLayer':
                self.currentLayerQgis.emit(self.tview.currentLayer())
            else:
                self.syncGroupLayer.emit()
class AuxiliaryLegend( QDockWidget ):

  currentLayerChanged = pyqtSignal( "QgsMapLayer" )
  currentLayerQgis = pyqtSignal( "QgsMapLayer" )
  syncGroupLayer = pyqtSignal()
  addSelectedLayersQgis = pyqtSignal()
  removeLayer = pyqtSignal( "QgsMapLayer" )
  needSelectLayer = pyqtSignal()
  closed = pyqtSignal()

  def __init__( self, parent, numWin ):
    def setTreeView():
      def setModel():
        self.model = QgsLayerTreeModel( ltg )
        self.model.setFlag( QgsLayerTreeModel.AllowNodeReorder )
        self.model.setFlag( QgsLayerTreeModel.AllowNodeChangeVisibility, True )
        self.tview.setModel( self.model )

      self.tview = QgsLayerTreeView( self )
      self.tview.setSelectionMode( QAbstractItemView.ExtendedSelection )
      setModel()
      self.tview.currentLayerChanged.connect( self.currentLayerChanged.emit )

    def setupUi():
      self.setAllowedAreas( Qt.LeftDockWidgetArea )
      winLegend.setWindowFlags( Qt.Widget )
      toolBar.setFloatable( False )
      toolBar.setMovable( False )
      winLegend.addToolBar( toolBar )
      self.setWidget( winLegend )

    def addActions():
      actn = QAction( winLegend )
      actn.setIcon( qgis.utils.iface.actionShowSelectedLayers().icon() )
      actn.setIconText( 'Show selected layers')
      actn.setObjectName( 'showLayer')
      actn.triggered.connect( self.onAction )
      toolBar.addAction( actn )

      actn = QAction( winLegend )
      actn.setIcon( qgis.utils.iface.actionHideSelectedLayers().icon() )
      actn.setIconText( 'Hide selected layers')
      actn.setObjectName( 'hideLayer')
      actn.triggered.connect( self.onAction )
      toolBar.addAction( actn )

      actn = QAction( winLegend )
      actn.setIcon( qgis.utils.iface.actionRemoveLayer().icon() )
      actn.setIconText( 'Remove selected layers')
      actn.setObjectName( 'removeLayer')
      actn.triggered.connect( self.onAction )
      toolBar.addAction( actn )

      toolBar.addSeparator()

      actn = QAction( winLegend )
      actn.setIcon( qgis.utils.iface.actionDuplicateLayer().icon() )
      actn.setIconText( 'Add selected layers from main map')
      actn.setObjectName( 'addLayer')
      actn.triggered.connect( self.onAction )
      toolBar.addAction( actn )

      actn = QAction( winLegend )
      actn.setIcon( QIcon( os.path.join( os.path.dirname(__file__), 'mActionCurrentLayer.png' ) ) )
      actn.setIconText( 'Current layer for main map')
      actn.setObjectName( 'currentLayer')
      actn.triggered.connect( self.onAction )
      toolBar.addAction( actn )

      actn = QAction( winLegend )
      actn.setIcon( QIcon( os.path.join( os.path.dirname(__file__), 'mActionAddGroup.png' ) ) )
      actn.setObjectName( 'syncGroup' )
      actn.triggered.connect( self.onAction )
      toolBar.addAction( actn )


    super( AuxiliaryLegend, self ).__init__( "#%d - Layers" % numWin, parent )

    ltg = parent.ltg    
    self.tview = self.model = self.bridge = None
    self.textSync = "Sync with group(main map) for new layers"
    self.actSync = None
    setTreeView()

    winLegend = QMainWindow( self )
    toolBar = QToolBar( winLegend )
    setupUi()
    addActions()
    self.addNameSyncGroup( "None" )
    winLegend.setCentralWidget( self.tview )

  def addNameSyncGroup(self, name):
    act = self.findChild( QAction, 'syncGroup' )
    text = "%s -> %s" % ( self.textSync, name )
    act.setIconText( text )

  def setBridge(self, canvas):
    ltg = self.model.rootGroup() 
    self.bridge = QgsLayerTreeMapCanvasBridge( ltg, canvas ) # Need wait populate ltg

  def clearBridge(self):
    if not self.bridge is None:
      self.bridge.clear()

  def closeEvent(self, event):
    event.accept()
    self.closed.emit()

  @pyqtSlot()
  def onAction(self):
    nameSender = self.sender().objectName()

    if nameSender in ( 'showLayer', 'hideLayer', 'removeLayer'):
      nodes = self.tview.selectedLayerNodes()
      if len( nodes ) == 0:
        self.needSelectLayer.emit()
        return
      
      if nameSender in ( 'showLayer', 'hideLayer'):
        checked = Qt.Checked if nameSender == 'showLayer' else Qt.Unchecked
        map( lambda item: item.setVisible( checked ), nodes )
      else:
        ltg = self.model.rootGroup()
        for node in nodes:
          self.removeLayer.emit( node.layer() )
          ltg.removeChildNode( node )

    # addLayer, currentLayer
    else: 
      if nameSender == 'addLayer':
        self.addSelectedLayersQgis.emit()
      elif nameSender == 'currentLayer':
        self.currentLayerQgis.emit( self.tview.currentLayer() )
      else:
        self.syncGroupLayer.emit()