Exemplo n.º 1
0
    def _layerTreeChanged(self):
        """
        Re-populate layers for dropdowns dynamically when layers were 
        added/removed.
        """

        # First get all point layers in map canvas
        layer_names = []
        root = self.project.layerTreeRoot()
        for child in root.children():
            if isinstance(child, QgsLayerTreeLayer):
                layer = child.layer()
                # Handle weird project startup behaviour of QGIS (apparently
                # doesn't find layers on project startup and throws AttributeError)
                try:
                    if layer.type(
                    ) == QgsMapLayer.VectorLayer and layer.wkbType(
                    ) == QgsWkbTypes.Type(1):
                        layer_names.append(layer.name())
                except AttributeError:
                    continue

        comboboxes = [
            self.start_layer_combo, self.end_layer_combo,
            self.access_layer_combo, self.matrix_start_combo,
            self.matrix_end_combo
        ]

        for box in comboboxes:
            old_text = box.currentText()
            box.clear()
            for layer in layer_names:
                box.addItem(layer)
            new_text_id = box.findText(old_text)
            box.setCurrentIndex(new_text_id)