def main_histogram(self): """ Display the histogram of the working image """ self.set_working_message(True) if ProcessingManager().processings: message = "Veuillez fermer les vues de traitement avant de lancer l'histogramme de l'image de travail" QtGui.QMessageBox.warning(self, "Attention", message) else: if not self.dock_histo_opened: self.hist = TerreImageHistogram_multiband( ProcessingManager().working_layer, self.canvas) self.histodockwidget = Terre_Image_Dock_widget( "Histogrammes", self.iface.mainWindow()) self.histodockwidget.setObjectName("Histogrammes") self.histodockwidget.setWidget(self.hist) self.iface.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.histodockwidget) QtCore.QObject.connect( self.hist, QtCore.SIGNAL("threshold(PyQt_PyObject)"), self.histogram_threshold) QtCore.QObject.connect(self.histodockwidget, QtCore.SIGNAL("closed(PyQt_PyObject)"), self.histogram_closed) self.dock_histo_opened = True self.set_working_message(False)
def main_histogram(self): """ Display the histogram of the working image """ self.set_working_message(True) if not self.dock_histo_opened: self.hist = TerreImageHistogram_multiband( ProcessingManager().working_layer, self.canvas) self.histodockwidget = Terre_Image_Dock_widget( "Histogrammes", self.iface.mainWindow()) self.histodockwidget.setObjectName("Histogrammes") self.histodockwidget.setWidget(self.hist) self.iface.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.histodockwidget) QtCore.QObject.connect(self.hist, QtCore.SIGNAL("threshold(PyQt_PyObject)"), self.histogram_threshold) QtCore.QObject.connect(self.histodockwidget, QtCore.SIGNAL("closed(PyQt_PyObject)"), self.histogram_closed) self.dock_histo_opened = True self.set_working_message(False)
def do_manage_histograms(self, text_changed): logger.debug("text changed histogram: {}".format(text_changed)) if text_changed == "Image de travail": self.main_histogram() elif text_changed != "Histogrammes" and text_changed != "": # find the layer corresponding to the name process = ProcessingManager().processing_from_name(text_changed) if process: process = process[0] specific_band = -1 if text_changed == "Couleurs naturelles": logger.debug("text changed couleurs naturelles") self.set_working_message(True) if not process.histogram: hist = TerreImageHistogram_multiband( ProcessingManager().working_layer, self.canvas, 3, process) process.histogram = hist self.histogram(process.output_working_layer, process, specific_band, hist) else: logger.debug("working layer") bs = ["rouge", "verte", "bleue", "pir", "nir"] corres = { "rouge": process.layer.red, "verte": process.layer.green, "bleue": process.layer.blue, "pir": process.layer.pir, "mir": process.layer.mir } logger.debug("corres: " + str(corres)) for item in bs: if item in text_changed: logger.debug("bande à afficher : " + str(corres[item])) specific_band = corres[item] logger.debug("specific band: " + str(specific_band)) if not process.histogram: # display the histogram of the layer hist = self.histogram(process.output_working_layer, process, specific_band) process.histogram = hist else: hist = self.histogram(process.output_working_layer, process, specific_band, process.histogram) self.comboBox_histogrammes.setCurrentIndex(0)
def main_histogram(self): """ Display the histogram of the working image """ self.set_working_message(True) if not self.dock_histo_opened: self.hist = TerreImageHistogram_multiband(ProcessingManager().working_layer, self.canvas) self.histodockwidget = Terre_Image_Dock_widget("Histogrammes", self.iface.mainWindow()) self.histodockwidget.setObjectName("Histogrammes") self.histodockwidget.setWidget(self.hist) self.iface.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.histodockwidget) QtCore.QObject.connect(self.hist, QtCore.SIGNAL("threshold(PyQt_PyObject)"), self.histogram_threshold) QtCore.QObject.connect(self.histodockwidget, QtCore.SIGNAL("closed(PyQt_PyObject)"), self.histogram_closed) self.dock_histo_opened = True self.set_working_message(False)
def main_histogram(self): """ Display the histogram of the working image """ self.set_working_message(True) if ProcessingManager().processings: message ="Veuillez fermer les vues de traitement avant de lancer l'histogramme de l'image de travail" QtGui.QMessageBox.warning(self, "Attention", message) else: if not self.dock_histo_opened: self.hist = TerreImageHistogram_multiband(ProcessingManager().working_layer, self.canvas) self.histodockwidget = Terre_Image_Dock_widget("Histogrammes", self.iface.mainWindow()) self.histodockwidget.setObjectName("Histogrammes") self.histodockwidget.setWidget(self.hist) self.iface.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.histodockwidget) QtCore.QObject.connect(self.hist, QtCore.SIGNAL("threshold(PyQt_PyObject)"), self.histogram_threshold) QtCore.QObject.connect(self.histodockwidget, QtCore.SIGNAL("closed(PyQt_PyObject)"), self.histogram_closed) self.dock_histo_opened = True self.set_working_message(False)
class QGISEducationWidget(QtGui.QWidget, Ui_QGISEducation): """ Main widget """ __pyqtSignals__ = ("valueChanged()") def __init__(self, iface, working_dir): self.iface = iface self.canvas = self.iface.mapCanvas() QtGui.QWidget.__init__(self) self.setupUi(self) self.setupUi_extra() self.qgis_education_manager = TerreImageManager(self.iface) #working dir self.qgis_education_manager.working_directory = working_dir self.lineEdit_working_dir.setText(working_dir) # todo remove this init self.qgis_education_manager.classif_tool.set_layers( ProcessingManager().get_qgis_working_layers(), ProcessingManager().working_layer.get_qgis_layer(), ProcessingManager().working_layer.band_invert) self.qgis_education_manager.classif_tool.set_directory(working_dir) self.qgis_education_manager.classif_tool.setupUi() logger.debug("Manager 1 {}".format(id(self.qgis_education_manager))) self.lineEdit_working_dir.setText( self.qgis_education_manager.working_directory) logger.debug("Before connecting toto titi") self.qgis_education_manager.processings_updated.connect( self.set_combobox_histograms) logger.debug("After connecting toto titi") QtCore.QObject.connect(QgsMapLayerRegistry.instance(), QtCore.SIGNAL("layerWillBeRemoved(QString)"), self.layer_deleted) self.dock_histo_opened = False def setupUi_extra(self): """ Initialize the interface """ self.toolbar = self.iface.addToolBar(u'TerrImage') self.toolbar.setObjectName(u'TerrImage') #processings itemProcessing = [ "Traitements...", "NDVI", "NDTI", "Indice de brillance", "Angle Spectral" ] # toolbar self.toolButton_processing = QtGui.QToolButton() self.toolButton_processing.setMenu(QtGui.QMenu()) self.toolButton_processing.setPopupMode( QtGui.QToolButton.MenuButtonPopup) # self.iface.addToolBarWidget(self.toolButton_processing) self.toolbar.addWidget(self.toolButton_processing) m = self.toolButton_processing.menu() for index, item in enumerate(itemProcessing): self.comboBox_processing.insertItem(index, item) # toolbar #if index > 0: action_p = QtGui.QAction( QtGui.QIcon(":/plugins/qgiseducation/img/mAction.png"), item, self.iface.mainWindow()) action_p.setWhatsThis(item) m.addAction(action_p) if index == 0: self.toolButton_processing.setDefaultAction(action_p) self.comboBox_processing.currentIndexChanged[str].connect( self.do_manage_processing) self.toolButton_processing.triggered.connect( self.do_manage_actions_for_processing) # fill histograms self.toolButton_histograms = QtGui.QToolButton() self.toolButton_histograms.setMenu(QtGui.QMenu()) self.toolButton_histograms.setPopupMode( QtGui.QToolButton.MenuButtonPopup) # self.iface.addToolBarWidget(self.toolButton_histograms) self.toolbar.addWidget(self.toolButton_histograms) m2 = self.toolButton_histograms.menu() itemHistogrammes = ["Histogrammes", "Image de travail"] for index, item in enumerate(itemHistogrammes): self.comboBox_histogrammes.insertItem(index, item) # toolbar #if index > 0: action_h = QtGui.QAction( QtGui.QIcon( ":/plugins/qgiseducation/img/mActionFullHistogramStretch.png" ), item, self.iface.mainWindow()) action_h.setWhatsThis(item) m2.addAction(action_h) if index == 0: self.toolButton_histograms.setDefaultAction(action_h) # self.comboBox_histogrammes.highlighted.connect(self.set_combobox_histograms) # self.toolButton_histograms.triggered.connect(self.set_combobox_histograms) self.comboBox_histogrammes.currentIndexChanged[str].connect( self.do_manage_histograms) self.toolButton_histograms.triggered.connect( self.do_manage_actions_for_histogram) # widget puttons signal connections self.pushButton_kmeans.clicked.connect(self.kmeans) self.pushButton_profil_spectral.clicked.connect(self.display_values) self.pushButton_working_dir.clicked.connect(self.define_working_dir) self.pushButton_status.clicked.connect(self.status) self.pushButton_status.hide() self.pushButton_histogramme.hide() self.pushButton_histogramme.clicked.connect(self.main_histogram) self.pushButton_plugin_classification.clicked.connect( self.plugin_classification) self.pushButton_kmz.clicked.connect(self.export_kmz) QtCore.QObject.connect(self.tabWidget, QtCore.SIGNAL("currentChanged(int)"), self.display_metadata) # hide information labels self.label_a_s.hide() self.label_a_s_img.hide() self.label_a_s_img.setPixmap( QtGui.QPixmap(":/plugins/qgiseducation/img/legende.png")) self.label_travail_en_cours.hide() self.label_travail_en_cours.setTextFormat(1) self.label_travail_en_cours.setText( '<html><b><font size="4" color="red">Travail en cours...</font></b></html>' ) # toolbar self.toolButton_display_bands = QtGui.QToolButton() self.toolButton_display_bands.setMenu(QtGui.QMenu()) self.toolButton_display_bands.setPopupMode( QtGui.QToolButton.MenuButtonPopup) # self.iface.addToolBarWidget(self.toolButton_display_bands) self.toolbar.addWidget(self.toolButton_display_bands) action_ps = QtGui.QAction( QtGui.QIcon(":/plugins/qgiseducation/img/mIconTableLayer.png"), "Profil Spectral", self.iface.mainWindow()) action_ps.setWhatsThis(u"Profil spectral") self.toolbar.addAction(action_ps) action_ps.triggered.connect(self.display_values) # toolbar classif self.toolButton_classif = QtGui.QToolButton() self.toolButton_classif.setMenu(QtGui.QMenu()) self.toolButton_classif.setPopupMode(QtGui.QToolButton.MenuButtonPopup) # self.iface.addToolBarWidget(self.toolButton_histograms) self.toolbar.addWidget(self.toolButton_classif) m4 = self.toolButton_classif.menu() action_classif_ns = QtGui.QAction( QtGui.QIcon( ":/plugins/qgiseducation/img/rendererCategorizedSymbol.png"), u"Classification non supervisée", self.iface.mainWindow()) action_classif_ns.setWhatsThis(u"Classification non supervisée") m4.addAction(action_classif_ns) action_classif_ns.triggered.connect(self.kmeans_menu) action_classif_s = QtGui.QAction( QtGui.QIcon( ":/plugins/qgiseducation/img/rendererCategorizedSymbol.png"), u"Classification supervisée", self.iface.mainWindow()) action_classif_s.setWhatsThis(u"Classification supervisée") m4.addAction(action_classif_s) self.toolButton_classif.setDefaultAction(action_classif_ns) action_classif_s.triggered.connect(self.plugin_classification) action_kmz = QtGui.QAction( QtGui.QIcon(":/plugins/qgiseducation/img/mMapserverExport.png"), "Export KMZ", self.iface.mainWindow()) action_kmz.setWhatsThis(u"Export KMZ") self.toolbar.addAction(action_kmz) action_kmz.triggered.connect(self.export_kmz) def status(self): """ Function for debug """ logger.info("############# Status #############") logger.info(self.qgis_education_manager) logger.info( "self.qgis_education_manager.mirror_map_tool.dockableMirrors {} \n" .format( str(self.qgis_education_manager.mirror_map_tool.dockableMirrors ))) logger.info(ProcessingManager()) logger.info(ProcessingManager().get_processings_name()) logger.info("layers value tool ") logger.info(self.qgis_education_manager.value_tool.layers_to_display) logger.info("##########################") def plugin_classification(self): """ Opens the classification plugin """ self.qgis_education_manager.classif_tool.show() self.qgis_education_manager.classif_tool.update_layers( ProcessingManager().get_qgis_working_layers()) def main_histogram(self): """ Display the histogram of the working image """ self.set_working_message(True) if ProcessingManager().processings: message = "Veuillez fermer les vues de traitement avant de lancer l'histogramme de l'image de travail" QtGui.QMessageBox.warning(self, "Attention", message) else: if not self.dock_histo_opened: self.hist = TerreImageHistogram_multiband( ProcessingManager().working_layer, self.canvas) self.histodockwidget = Terre_Image_Dock_widget( "Histogrammes", self.iface.mainWindow()) self.histodockwidget.setObjectName("Histogrammes") self.histodockwidget.setWidget(self.hist) self.iface.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.histodockwidget) QtCore.QObject.connect( self.hist, QtCore.SIGNAL("threshold(PyQt_PyObject)"), self.histogram_threshold) QtCore.QObject.connect(self.histodockwidget, QtCore.SIGNAL("closed(PyQt_PyObject)"), self.histogram_closed) self.dock_histo_opened = True self.set_working_message(False) def histogram_closed(self): """ Called when the dock of the main histogram is closed. Set histogram flag to false """ self.dock_histo_opened = False def histogram(self, layer_source, processing=None, specific_band=-1, hist=None): """ Display the histogram of the specific processing """ logger.debug("self.histogram") self.set_working_message(True) if hist is None: hist = TerreImageHistogram_monoband(layer_source, self.canvas, processing, specific_band) if hist.dock_opened is False: histodockwidget = Terre_Image_Dock_widget("Histogrammes", self.iface.mainWindow()) histodockwidget.setObjectName("Histogrammes") histodockwidget.setWidget(hist) histodockwidget.setFloating(True) histodockwidget.setAllowedAreas(QtCore.Qt.NoDockWidgetArea) QtCore.QObject.connect(hist, QtCore.SIGNAL("threshold(PyQt_PyObject)"), self.threshold_on_histogram) self.iface.addDockWidget(QtCore.Qt.BottomDockWidgetArea, histodockwidget) QtCore.QObject.connect(histodockwidget, QtCore.SIGNAL("closed(PyQt_PyObject)"), self.histogram_monoband_closed) hist.dock_opened = True hist.set_dock(histodockwidget) self.set_working_message(False) return hist def histogram_monoband_closed(self): """ Called when the dock is closed. Set histogram flag to false """ logger.info("QObject.sender() " + str(QtCore.QObject.sender(self))) logger.debug(QtCore.QObject.sender(self).widget()) QtCore.QObject.sender(self).widget().dock_opened = False def threshold_on_histogram(self, forms): logger.debug("QObject.sender() " + str(QtCore.QObject.sender(self))) logger.debug("do processing args " + str(forms)) who = QtCore.QObject.sender(self) if "Seuillage" in ProcessingManager().get_processings_name(): processings_seuillage = ProcessingManager().processing_from_name( "Seuillage") if processings_seuillage: processings_seuillage[0].mirror.close() try: QgsMapLayerRegistry.instance().removeMapLayer( processings_seuillage[0].output_working_layer. qgis_layer.id()) except RuntimeError: pass self.set_working_message(True) my_processing = TerreImageProcessing( self.iface, self.qgis_education_manager.working_directory, who.layer, self.qgis_education_manager.mirror_map_tool, "Seuillage", forms) self.qgis_education_manager.value_tool.set_layers( ProcessingManager().get_working_layers()) self.set_working_message(False) def histogram_threshold(self, forms): logger.debug("educationwidget forms: " + str(forms)) self.do_manage_processing("Seuillage", args=forms) def do_manage_actions_for_histogram(self, action): """ Calls do_manage_processing with action name """ histogram_name = action.text() self.do_manage_histograms(histogram_name) def do_manage_histograms(self, text_changed): logger.debug("text changed histogram: {}".format(text_changed)) if text_changed == "Image de travail": self.main_histogram() elif text_changed != "Histogrammes" and text_changed != "": # find the layer corresponding to the name process = ProcessingManager().processing_from_name(text_changed) if process: process = process[0] specific_band = -1 if text_changed == "Couleurs naturelles": logger.debug("text changed couleurs naturelles") self.set_working_message(True) if not process.histogram: hist = TerreImageHistogram_multiband( ProcessingManager().working_layer, self.canvas, 3, process) process.histogram = hist self.histogram(process.output_working_layer, process, specific_band, hist) else: logger.debug("working layer") bs = ["rouge", "verte", "bleue", "pir", "nir"] corres = { "rouge": process.layer.red, "verte": process.layer.green, "bleue": process.layer.blue, "pir": process.layer.pir, "mir": process.layer.mir } logger.debug("corres: " + str(corres)) for item in bs: if item in text_changed: logger.debug("bande à afficher : " + str(corres[item])) specific_band = corres[item] logger.debug("specific band: " + str(specific_band)) if not process.histogram: # display the histogram of the layer hist = self.histogram(process.output_working_layer, process, specific_band) process.histogram = hist else: hist = self.histogram(process.output_working_layer, process, specific_band, process.histogram) self.comboBox_histogrammes.setCurrentIndex(0) def define_working_dir(self): output_dir = terre_image_utils.getOutputDirectory(self) self.qgis_education_manager.working_directory = output_dir def do_manage_actions_for_processing(self, action): """ Calls do_manage_processing with action name """ processing_name = action.text() self.do_manage_processing(processing_name) def do_manage_processing(self, text_changed, args=None): if text_changed == "Angle Spectral": for item in self.iface.mapCanvas().scene().items(): if isinstance(item, QgsRubberBand): item.reset(QGis.Point) processings_spectral_angle = ProcessingManager( ).processing_from_name("Angle Spectral") if processings_spectral_angle: processings_spectral_angle[0].mirror.close() ProcessingManager().remove_processing( processings_spectral_angle) if text_changed == "Seuillage": if "Seuillage" in ProcessingManager().get_processings_name(): processings_seuillage = ProcessingManager( ).processing_from_name("Seuillage") if processings_seuillage: processings_seuillage[0].mirror.close() ProcessingManager().remove_processing( processings_seuillage) do_it = True logger.debug("do processing args: " + str(args)) if text_changed: if not text_changed == "Traitements...": if text_changed in ["NDVI", "NDTI", "Indice de brillance"]: if text_changed in ProcessingManager( ).get_processings_name(): do_it = False if text_changed in ["Seuillage", "Angle Spectral"]: p = [ process.processing_name for process in ProcessingManager().processings if process.processing_name == text_changed ] if p: process = p[0] try: QgsMapLayerRegistry.instance().removeMapLayer( process.get_output_working_layer( ).qgis_layer.id()) except AttributeError: logger.error( u'Failed to delete {}'.format(process)) if text_changed == "Angle Spectral": widget = self.iface.messageBar().createMessage( "Terre Image", "Cliquez sur un point de l'image pour en obtenir son angle spectral..." ) self.iface.messageBar().pushWidget( widget, QgsMessageBar.INFO) self.label_travail_en_cours.show() if do_it: if not text_changed == "Angle Spectral": self.set_working_message(True) logger.debug("text changed: " + text_changed) my_processing = TerreImageProcessing( self.iface, self.qgis_education_manager.working_directory, ProcessingManager().working_layer, self.qgis_education_manager.mirror_map_tool, text_changed, args) if text_changed == "Angle Spectral": self.label_a_s.show() self.label_a_s_img.show() QtCore.QObject.connect(my_processing, QtCore.SIGNAL("display_ok()"), lambda who=my_processing: self. processing_end_display(who)) if not text_changed == "Angle Spectral": self.set_combobox_histograms() self.qgis_education_manager.value_tool.set_layers( ProcessingManager().get_working_layers()) self.set_working_message(False) self.comboBox_processing.setCurrentIndex(0) def processing_end_display(self, my_processing): logger.info("processing_end_display") self.set_combobox_histograms() self.qgis_education_manager.value_tool.set_layers( ProcessingManager().get_working_layers()) self.set_working_message(False) def set_comboBox_sprectral_band_display(self): """ Creates the list of available display """ m3 = self.toolButton_display_bands.menu() if ProcessingManager().working_layer: bands = ProcessingManager().working_layer.bands corres = { 'red': "Afficher la bande rouge", 'green': "Afficher la bande verte", 'blue': "Afficher la bande bleue", 'pir': "Afficher la bande pir", 'mir': "Afficher la bande mir" } self.comboBox_sprectral_band_display.clear() self.comboBox_sprectral_band_display.insertItem( 0, "Affichage des bandes spectrales...") if ProcessingManager().working_layer.has_natural_colors(): logger.debug("couleurs naturelles") text = "Afficher en couleurs naturelles" self.comboBox_sprectral_band_display.insertItem(1, text) action_d = QtGui.QAction( QtGui.QIcon( ":/plugins/qgiseducation/img/mActionInOverview.png"), text, self.iface.mainWindow()) action_d.setWhatsThis(text) m3.addAction(action_d) for i in range( ProcessingManager().working_layer.get_band_number()): y = [x for x in bands if bands[x] == i + 1] if y: text = corres[y[0]] self.comboBox_sprectral_band_display.insertItem( i + 2, text) action_d = QtGui.QAction( QtGui.QIcon( ":/plugins/qgiseducation/img/mActionInOverview.png" ), text, self.iface.mainWindow()) action_d.setWhatsThis(text) m3.addAction(action_d) if i == 0: self.toolButton_display_bands.setDefaultAction( action_d) self.comboBox_sprectral_band_display.currentIndexChanged[ str].connect(self.do_manage_sprectral_band_display) self.toolButton_display_bands.triggered.connect( self.do_manage_actions_for_display) def set_combobox_histograms(self): """ Updates the list of available histograms """ if self.qgis_education_manager: if ProcessingManager().working_layer: process = ["Histogrammes", "Image de travail"] + [ x for x in ProcessingManager().get_processings_name() if x not in ["KMEANS", "Seuillage"] ] logger.debug("process {}".format(process)) self.comboBox_histogrammes.clear() m2 = self.toolButton_histograms.menu() m2.clear() for i, item in enumerate(process): self.comboBox_histogrammes.insertItem(i, process[i]) action_h = QtGui.QAction( QtGui.QIcon( ":/plugins/qgiseducation/img/mActionFullHistogramStretch.png" ), item, self.iface.mainWindow()) action_h.setWhatsThis(item) m2.addAction(action_h) if i == 0: self.toolButton_histograms.setDefaultAction(action_h) logger.debug("Connect combo box histogram") def do_manage_actions_for_display(self, action): """ Calls do_manage_processing with action name """ band_name = action.text() self.do_manage_sprectral_band_display(band_name) def do_manage_sprectral_band_display(self, text_changed): logger.debug("Combobox histogram changed") do_it = True if text_changed and text_changed != "Affichage des bandes spectrales...": band_to_display = None corres = { 'nat': "Afficher en couleurs naturelles", 'red': "Afficher la bande rouge", 'green': "Afficher la bande verte", 'blue': "Afficher la bande bleue", 'pir': "Afficher la bande pir", 'mir': "Afficher la bande mir" } corres_name_view = { 'nat': "Couleurs naturelles", 'red': "Bande rouge", 'green': "Bande verte", 'blue': "Bande bleue", 'pir': "Bande pir", 'mir': "Bande mir" } for key in corres: if corres[key] == text_changed: who = key logger.debug("do_manage_sprectral_band_display who: " + str(who)) if corres_name_view[who] in ProcessingManager( ).get_processings_name(): do_it = False if do_it: my_processing = TerreImageDisplay( self.iface, self.qgis_education_manager.working_directory, ProcessingManager().working_layer, self.qgis_education_manager.mirror_map_tool, who) self.set_combobox_histograms() break self.comboBox_sprectral_band_display.setCurrentIndex(0) def display_values(self): self.qgis_education_manager.display_values() def kmeans_menu(self): self.kmeans(True) def kmeans(self, menu=False): self.set_working_message(True) if ProcessingManager().working_layer == None: logger.debug("Aucune layer selectionnée") else: if menu: nb_class = None else: nb_class = self.spinBox_kmeans.value() logger.debug("nb_class from spinbox: " + str(nb_class)) my_processing = TerreImageProcessing( self.iface, self.qgis_education_manager.working_directory, ProcessingManager().working_layer, self.qgis_education_manager.mirror_map_tool, "KMEANS", nb_class) self.set_combobox_histograms() self.qgis_education_manager.value_tool.set_layers( ProcessingManager().get_working_layers()) self.set_working_message(False) def export_kmz(self): self.set_working_message(True) files_to_export = ProcessingManager().get_layers_for_kmz() kmz = terre_image_processing.export_kmz( files_to_export, self.qgis_education_manager.working_directory) self.set_working_message(False) def display_metadata(self): sat = ProcessingManager().working_layer.type list_to_display = terre_image_utils.get_info_from_metadata( ProcessingManager().working_layer.source_file, sat) # QTreeWidget self.treeWidget.clear() header = QtGui.QTreeWidgetItem([u"Métadonnée", "Valeur"]) self.treeWidget.setHeaderItem(header) root = QtGui.QTreeWidgetItem(self.treeWidget, ["Image de travail"]) for key, value in list_to_display: A = QtGui.QTreeWidgetItem(root, [key, value]) self.treeWidget.resizeColumnToContents(0) self.treeWidget.resizeColumnToContents(1) # A = QtGui.QTreeWidgetItem(root, ["A"]) # # barA = QtGui.QTreeWidgetItem(A, ["bar", "i", "ii"]) # bazA = QtGui.QTreeWidgetItem(A, ["baz", "a", "b"]) root.setExpanded(True) def layer_deleted(self, layer_id): logger.debug("Layer deleted") # logger.debug( str(layer_id) + " deleted") layer_id = layer_id.encode('utf-8') if "Angle_Spectral" in str(layer_id): # delete rubberband for item in self.iface.mapCanvas().scene().items(): if isinstance(item, QgsRubberBand): item.reset(QGis.Point) # hide legend self.label_a_s.hide() self.label_a_s_img.hide() logger.debug("Disconnect interface if layer is working layer") if self.qgis_education_manager: # logger.debug( "ProcessingManager().working_layer.get_qgis_layer().id(): " + str(ProcessingManager().working_layer.get_qgis_layer().id())) if ProcessingManager().working_layer and ProcessingManager( ).working_layer.get_qgis_layer(): if ProcessingManager().working_layer.get_qgis_layer().id( ) == layer_id: self.disconnect_interface() logger.debug("Empty processing manager") ProcessingManager().remove_process_from_layer_id(layer_id) ProcessingManager().remove_displays_from_layer_id(layer_id) try: self.qgis_education_manager.value_tool.set_layers( ProcessingManager().get_working_layers()) except AttributeError: pass logger.debug("Update combobox") self.set_combobox_histograms() def disconnect_interface(self): logger.debug("Disconnect interface") if self.qgis_education_manager: self.qgis_education_manager.disconnect() logger.debug("Disconnect qgis eduction manager") # histograms try: self.hist.close() self.hist = None logger.debug("Close histograms") except AttributeError: pass # rubberband if self.dock_histo_opened: # remove the dockwidget from iface self.iface.removeDockWidget(self.histodockwidget) # disable working layer self.qgis_education_manager = None self.emit(QtCore.SIGNAL("terminated()")) def set_working_message(self, set=True): if set: widget = self.iface.messageBar().createMessage( "Terre Image", "Travail en cours...") self.iface.messageBar().pushWidget(widget, QgsMessageBar.INFO) self.iface.mainWindow().statusBar().showMessage( "Terre Image : Travail en cours...") self.label_travail_en_cours.show() else: self.iface.messageBar().popWidget() self.iface.messageBar().clearWidgets() self.iface.mainWindow().statusBar().clearMessage() self.label_travail_en_cours.hide() def disconnectP(self): """ Disconnection of signals, go back to the main interface """ self.iface.mainWindow().statusBar().showMessage("")
class QGISEducationWidget(QtGui.QWidget, Ui_QGISEducation, QtCore.QObject): """ Main widget """ __pyqtSignals__ = ("valueChanged()") def __init__(self, iface): self.iface = iface self.canvas = self.iface.mapCanvas() QtGui.QWidget.__init__(self) QtCore.QObject.__init__(self) self.setupUi(self) self.setupUi_extra() self.qgis_education_manager = TerreImageManager(self.iface) self.lineEdit_working_dir.setText(self.qgis_education_manager.working_directory) QtCore.QObject.connect(QgsMapLayerRegistry.instance(), QtCore.SIGNAL("layerWillBeRemoved(QString)"), self.layer_deleted) self.dock_histo_opened = False def setupUi_extra(self): """ Initialize the interface """ self.toolbar = self.iface.addToolBar(u'TerrImage') self.toolbar.setObjectName(u'TerrImage') #processings itemProcessing = [ "Traitements...", "NDVI", "NDTI", "Indice de brillance", "Angle Spectral" ] # toolbar self.toolButton_processing = QtGui.QToolButton() self.toolButton_processing.setMenu(QtGui.QMenu()) self.toolButton_processing.setPopupMode(QtGui.QToolButton.MenuButtonPopup) # self.iface.addToolBarWidget(self.toolButton_processing) self.toolbar.addWidget(self.toolButton_processing) m = self.toolButton_processing.menu() for index, item in enumerate(itemProcessing): self.comboBox_processing.insertItem(index, item) # toolbar #if index > 0: action_p = QtGui.QAction(QtGui.QIcon(":/plugins/qgiseducation/img/mAction.png"), item, self.iface.mainWindow()) action_p.setWhatsThis(item) m.addAction(action_p) if index == 0: self.toolButton_processing.setDefaultAction(action_p) self.comboBox_processing.currentIndexChanged[str].connect(self.do_manage_processing) self.toolButton_processing.triggered.connect(self.do_manage_actions_for_processing) # fill histograms self.toolButton_histograms = QtGui.QToolButton() self.toolButton_histograms.setMenu(QtGui.QMenu()) self.toolButton_histograms.setPopupMode(QtGui.QToolButton.MenuButtonPopup) # self.iface.addToolBarWidget(self.toolButton_histograms) self.toolbar.addWidget(self.toolButton_histograms) m2 = self.toolButton_histograms.menu() itemHistogrammes = [ "Histogrammes", "Image de travail" ] for index, item in enumerate(itemHistogrammes): self.comboBox_histogrammes.insertItem(index, item) # toolbar #if index > 0: action_h = QtGui.QAction( QtGui.QIcon(":/plugins/qgiseducation/img/mActionFullHistogramStretch.png"), item, self.iface.mainWindow()) action_h.setWhatsThis(item) m2.addAction(action_h) if index == 0: self.toolButton_histograms.setDefaultAction(action_h) self.comboBox_histogrammes.currentIndexChanged[str].connect(self.do_manage_histograms) self.toolButton_histograms.triggered.connect(self.do_manage_actions_for_histogram) # widget puttons signal connections self.pushButton_kmeans.clicked.connect(self.kmeans) self.pushButton_profil_spectral.clicked.connect(self.display_values) self.pushButton_working_dir.clicked.connect(self.define_working_dir) self.pushButton_status.clicked.connect(self.status) self.pushButton_status.hide() self.pushButton_histogramme.hide() self.pushButton_histogramme.clicked.connect(self.main_histogram) self.pushButton_plugin_classification.clicked.connect(self.plugin_classification) self.pushButton_kmz.clicked.connect(self.export_kmz) QtCore.QObject.connect(self.tabWidget, QtCore.SIGNAL("currentChanged(int)"), self.display_metadata) # hide information labels self.label_a_s.hide() self.label_a_s_img.hide() self.label_a_s_img.setPixmap(QtGui.QPixmap(":/plugins/qgiseducation/img/legende.png")) self.label_travail_en_cours.hide() self.label_travail_en_cours.setTextFormat(1) self.label_travail_en_cours.setText('<html><b><font size="4" color="red">Travail en cours...</font></b></html>') # toolbar self.toolButton_display_bands = QtGui.QToolButton() self.toolButton_display_bands.setMenu(QtGui.QMenu()) self.toolButton_display_bands.setPopupMode(QtGui.QToolButton.MenuButtonPopup) # self.iface.addToolBarWidget(self.toolButton_display_bands) self.toolbar.addWidget(self.toolButton_display_bands) action_ps = QtGui.QAction(QtGui.QIcon(":/plugins/qgiseducation/img/mIconTableLayer.png"), "Profil Spectral", self.iface.mainWindow()) action_ps.setWhatsThis(u"Profil spectral") self.toolbar.addAction(action_ps) action_ps.triggered.connect(self.display_values) # toolbar classif self.toolButton_classif = QtGui.QToolButton() self.toolButton_classif.setMenu(QtGui.QMenu()) self.toolButton_classif.setPopupMode(QtGui.QToolButton.MenuButtonPopup) # self.iface.addToolBarWidget(self.toolButton_histograms) self.toolbar.addWidget(self.toolButton_classif) m4 = self.toolButton_classif.menu() action_classif_ns = QtGui.QAction(QtGui.QIcon(":/plugins/qgiseducation/img/rendererCategorizedSymbol.png"), u"Classification non supervisée", self.iface.mainWindow()) action_classif_ns.setWhatsThis(u"Classification non supervisée") m4.addAction(action_classif_ns) action_classif_ns.triggered.connect(self.kmeans_menu) action_classif_s = QtGui.QAction(QtGui.QIcon(":/plugins/qgiseducation/img/rendererCategorizedSymbol.png"), u"Classification supervisée", self.iface.mainWindow()) action_classif_s.setWhatsThis(u"Classification supervisée") m4.addAction(action_classif_s) self.toolButton_classif.setDefaultAction(action_classif_ns) action_classif_s.triggered.connect(self.plugin_classification) action_kmz = QtGui.QAction(QtGui.QIcon(":/plugins/qgiseducation/img/mMapserverExport.png"), "Export KMZ", self.iface.mainWindow()) action_kmz.setWhatsThis(u"Export KMZ") self.toolbar.addAction(action_kmz) action_kmz.triggered.connect(self.export_kmz) action_info = QtGui.QAction(QtGui.QIcon(":/plugins/qgiseducation/img/mActionContextHelp.png"), "Information", self.iface.mainWindow()) action_info.setWhatsThis(u"Information") self.toolbar.addAction(action_info) action_settings = QtGui.QAction(QtGui.QIcon(":/plugins/qgiseducation/img/mActionOptions.png"), "Configuration", self.iface.mainWindow()) action_settings.setWhatsThis(u"Configuration") self.toolbar.addAction(action_settings) def status(self): """ Function for debug """ print "############# Status #############" print(self.qgis_education_manager) print("self.qgis_education_manager.mirror_map_tool.dockableMirrors " + str(self.qgis_education_manager.mirror_map_tool.dockableMirrors)) + "\n" print ProcessingManager() print ProcessingManager().get_processings_name() print "layers value tool " print self.qgis_education_manager.value_tool.layers_to_display print "##########################" def plugin_classification(self): """ Opens the classification plugin """ self.qgis_education_manager.classif_tool.show() self.qgis_education_manager.classif_tool.update_layers(ProcessingManager().get_qgis_working_layers()) def main_histogram(self): """ Display the histogram of the working image """ self.set_working_message(True) if not self.dock_histo_opened: self.hist = TerreImageHistogram_multiband(ProcessingManager().working_layer, self.canvas) self.histodockwidget = Terre_Image_Dock_widget("Histogrammes", self.iface.mainWindow()) self.histodockwidget.setObjectName("Histogrammes") self.histodockwidget.setWidget(self.hist) self.iface.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.histodockwidget) QtCore.QObject.connect(self.hist, QtCore.SIGNAL("threshold(PyQt_PyObject)"), self.histogram_threshold) QtCore.QObject.connect(self.histodockwidget, QtCore.SIGNAL("closed(PyQt_PyObject)"), self.histogram_closed) self.dock_histo_opened = True self.set_working_message(False) def histogram_closed(self): """ Called when the dock of the main histogram is closed. Set histogram flag to false """ self.dock_histo_opened = False def histogram(self, layer_source, processing=None, specific_band=-1, hist=None): """ Display the histogram of the specific processing """ logger.debug("self.histogram") self.set_working_message(True) if hist is None: hist = TerreImageHistogram_monoband(layer_source, self.canvas, processing, specific_band) if hist.dock_opened is False: histodockwidget = Terre_Image_Dock_widget("Histogrammes", self.iface.mainWindow()) histodockwidget.setObjectName("Histogrammes") histodockwidget.setWidget(hist) histodockwidget.setFloating(True) histodockwidget.setAllowedAreas(QtCore.Qt.NoDockWidgetArea) QtCore.QObject.connect(hist, QtCore.SIGNAL("threshold(PyQt_PyObject)"), self.threshold_on_histogram) self.iface.addDockWidget(QtCore.Qt.BottomDockWidgetArea, histodockwidget) QtCore.QObject.connect(histodockwidget, QtCore.SIGNAL("closed(PyQt_PyObject)"), self.histogram_monoband_closed) hist.dock_opened = True hist.set_dock(histodockwidget) self.set_working_message(False) return hist def histogram_monoband_closed(self): """ Called when the dock is closed. Set histogram flag to false """ logger.info("QObject.sender() " + str(QtCore.QObject.sender(self))) logger.debug(QtCore.QObject.sender(self).widget()) QtCore.QObject.sender(self).widget().dock_opened = False def threshold_on_histogram(self, forms): logger.debug("QObject.sender() " + str(QtCore.QObject.sender(self))) logger.debug("do processing args " + str(forms)) who = QtCore.QObject.sender(self) if "Seuillage" in ProcessingManager().get_processings_name(): processings_seuillage = ProcessingManager().processing_from_name("Seuillage") if processings_seuillage: processings_seuillage[0].mirror.close() try : QgsMapLayerRegistry.instance().removeMapLayer(processings_seuillage[0].output_working_layer.qgis_layer.id()) except RuntimeError: pass self.set_working_message(True) my_processing = TerreImageProcessing(self.iface, self.qgis_education_manager.working_directory, who.layer, self.qgis_education_manager.mirror_map_tool, "Seuillage", forms) self.qgis_education_manager.value_tool.set_layers(ProcessingManager().get_working_layers()) self.set_working_message(False) def histogram_threshold(self, forms): logger.debug("educationwidget forms: " + str(forms)) self.do_manage_processing("Seuillage", args=forms) def do_manage_actions_for_histogram(self, action): """ Calls do_manage_processing with action name """ histogram_name = action.text() self.do_manage_histograms(histogram_name) def do_manage_histograms(self, text_changed): logger.debug("text changed histogram: " + text_changed) if text_changed == "Image de travail": self.main_histogram() elif text_changed != "Histogrammes" and text_changed != "": # find the layer corresponding to the name process = ProcessingManager().processing_from_name(text_changed) if process : process = process[0] specific_band = -1 if text_changed == "Couleurs naturelles": logger.debug("text changed couleurs naturelles") self.set_working_message(True) if not process.histogram: hist = TerreImageHistogram_multiband(ProcessingManager().working_layer, self.canvas, 3, process) process.histogram = hist self.histogram(process.output_working_layer, process, specific_band, hist) else: logger.debug("working layer") bs = ["rouge", "verte", "bleue", "pir", "nir"] corres = {"rouge":process.layer.red, "verte":process.layer.green, "bleue":process.layer.blue, "pir":process.layer.pir, "mir":process.layer.mir} logger.debug("corres: " + str(corres)) for item in bs: if item in text_changed: logger.debug("bande à afficher : " + str(corres[item])) specific_band = corres[item] logger.debug("specific band: " + str(specific_band)) if not process.histogram: # display the histogram of the layer hist = self.histogram(process.output_working_layer, process, specific_band) process.histogram = hist else : hist = self.histogram(process.output_working_layer, process, specific_band, process.histogram) self.comboBox_histogrammes.setCurrentIndex(0) def define_working_dir(self): output_dir = terre_image_utils.getOutputDirectory(self) self.qgis_education_manager.working_directory = output_dir def do_manage_actions_for_processing(self, action): """ Calls do_manage_processing with action name """ processing_name = action.text() self.do_manage_processing(processing_name) def do_manage_processing(self, text_changed, args=None): if text_changed == "Angle Spectral": for item in self.iface.mapCanvas().scene().items(): if isinstance(item, QgsRubberBand): item.reset(QGis.Point) processings_spectral_angle = ProcessingManager().processing_from_name("Angle Spectral") if processings_spectral_angle: processings_spectral_angle[0].mirror.close() ProcessingManager().remove_processing(processings_spectral_angle) if text_changed == "Seuillage": if "Seuillage" in ProcessingManager().get_processings_name(): processings_seuillage = ProcessingManager().processing_from_name("Seuillage") if processings_seuillage: processings_seuillage[0].mirror.close() ProcessingManager().remove_processing(processings_seuillage) do_it = True logger.debug("do processing args: " + str(args)) if text_changed: if not text_changed == "Traitements...": if text_changed in ["NDVI", "NDTI", "Indice de brillance"]: if text_changed in ProcessingManager().get_processings_name() : do_it = False if text_changed in [ "Seuillage", "Angle Spectral" ]: p = [process.processing_name for process in ProcessingManager().processings if process.processing_name == text_changed] if p: process = p[0] try: QgsMapLayerRegistry.instance().removeMapLayer(process.get_output_working_layer().qgis_layer.id()) except AttributeError: print 'Failed to delete ', process if text_changed == "Angle Spectral": widget = self.iface.messageBar().createMessage("Terre Image", "Cliquez sur un point de l'image pour en obtenir son angle spectral...") self.iface.messageBar().pushWidget(widget, QgsMessageBar.INFO) self.label_travail_en_cours.show() if do_it: if not text_changed == "Angle Spectral": self.set_working_message(True) logger.debug("text changed: " + text_changed) my_processing = TerreImageProcessing(self.iface, self.qgis_education_manager.working_directory, ProcessingManager().working_layer, self.qgis_education_manager.mirror_map_tool, text_changed, args) if text_changed == "Angle Spectral": self.label_a_s.show() self.label_a_s_img.show() QtCore.QObject.connect(my_processing, QtCore.SIGNAL("display_ok()"), lambda who=my_processing: self.processing_end_display(who)) if not text_changed == "Angle Spectral": self.set_combobox_histograms() self.qgis_education_manager.value_tool.set_layers(ProcessingManager().get_working_layers()) self.set_working_message(False) self.comboBox_processing.setCurrentIndex(0) def processing_end_display(self, my_processing): logger.debug("processing_end_display") self.set_combobox_histograms() self.qgis_education_manager.value_tool.set_layers(ProcessingManager().get_working_layers()) self.set_working_message(False) def set_comboBox_sprectral_band_display(self): """ Creates the list of available display """ m3 = self.toolButton_display_bands.menu() if ProcessingManager().working_layer: bands = ProcessingManager().working_layer.bands corres = { 'red':"Afficher la bande rouge", 'green':"Afficher la bande verte", 'blue':"Afficher la bande bleue", 'pir':"Afficher la bande pir", 'mir':"Afficher la bande mir" } self.comboBox_sprectral_band_display.clear() self.comboBox_sprectral_band_display.insertItem(0, "Affichage des bandes spectrales...") if ProcessingManager().working_layer.has_natural_colors(): logger.debug("couleurs naturelles") self.comboBox_sprectral_band_display.insertItem(1, "Afficher en couleurs naturelles") for i in range(ProcessingManager().working_layer.get_band_number()): y = [x for x in bands if bands[x] == i + 1] if y: text = corres[y[0]] self.comboBox_sprectral_band_display.insertItem(i + 2, text) action_d = QtGui.QAction( QtGui.QIcon(":/plugins/qgiseducation/img/mActionInOverview.png"), text, self.iface.mainWindow()) action_d.setWhatsThis(text) m3.addAction(action_d) if i == 0: self.toolButton_display_bands.setDefaultAction(action_d) self.comboBox_sprectral_band_display.currentIndexChanged[str].connect(self.do_manage_sprectral_band_display) self.toolButton_display_bands.triggered.connect(self.do_manage_actions_for_display) def set_combobox_histograms(self): """ Updates the list of available histograms """ if self.qgis_education_manager: if ProcessingManager().working_layer: process = ["Histogrammes", "Image de travail"] + [x for x in ProcessingManager().get_processings_name() if x not in ["KMEANS", "Seuillage"]] logger.debug("process: " + str(process)) self.comboBox_histogrammes.clear() m2 = self.toolButton_histograms.menu() m2.clear() for i, item in enumerate(process): self.comboBox_histogrammes.insertItem(i, process[i]) action_h = QtGui.QAction(QtGui.QIcon(":/plugins/qgiseducation/img/mActionFullHistogramStretch.png"), item, self.iface.mainWindow()) action_h.setWhatsThis(item) m2.addAction(action_h) if i == 0: self.toolButton_histograms.setDefaultAction(action_h) self.comboBox_histogrammes.currentIndexChanged[str].connect(self.do_manage_histograms) def do_manage_actions_for_display(self, action): """ Calls do_manage_processing with action name """ band_name = action.text() self.do_manage_sprectral_band_display(band_name) def do_manage_sprectral_band_display(self, text_changed): do_it = True if text_changed and text_changed != "Affichage des bandes spectrales...": band_to_display = None corres = {'nat': "Afficher en couleurs naturelles", 'red': "Afficher la bande rouge", 'green': "Afficher la bande verte", 'blue': "Afficher la bande bleue", 'pir': "Afficher la bande pir", 'mir':"Afficher la bande mir"} corres_name_view = {'nat': "Couleurs naturelles", 'red': "Bande rouge", 'green': "Bande verte", 'blue': "Bande bleue", 'pir': "Bande pir", 'mir': "Bande mir"} for key in corres: if corres[key] == text_changed : who = key logger.debug("do_manage_sprectral_band_display who: " + str(who)) if corres_name_view[who] in ProcessingManager().get_processings_name() : do_it = False if do_it: my_processing = TerreImageDisplay(self.iface, self.qgis_education_manager.working_directory, ProcessingManager().working_layer, self.qgis_education_manager.mirror_map_tool, who) self.set_combobox_histograms() break self.comboBox_sprectral_band_display.setCurrentIndex(0) def display_values(self): self.qgis_education_manager.display_values() def kmeans_menu(self): self.kmeans(True) def kmeans(self, menu = False): self.set_working_message(True) if ProcessingManager().working_layer == None : logger.debug("Aucune layer selectionnée") else: if menu: nb_class = None else: nb_class = self.spinBox_kmeans.value() logger.debug("nb_class from spinbox: " + str(nb_class)) my_processing = TerreImageProcessing(self.iface, self.qgis_education_manager.working_directory, ProcessingManager().working_layer, self.qgis_education_manager.mirror_map_tool, "KMEANS", nb_class) self.set_combobox_histograms() self.qgis_education_manager.value_tool.set_layers(ProcessingManager().get_working_layers()) self.set_working_message(False) def export_kmz(self): self.set_working_message(True) files_to_export = ProcessingManager().get_layers_for_kmz() kmz = terre_image_processing.export_kmz(files_to_export, self.qgis_education_manager.working_directory) self.set_working_message(False) def display_metadata(self): # get image size and resolution dataset = gdal.Open(ProcessingManager().working_layer.source_file) if dataset is not None: total_size_x = dataset.RasterXSize total_size_y = dataset.RasterYSize geotransform = dataset.GetGeoTransform() pixel_size_x = geotransform[1] pixel_size_y = geotransform[5] list_to_display = [(u"Satellite", ProcessingManager().working_layer.type), (u"Lieu", "TO BE DEFINED"), (u"Lignes", str(total_size_x)), (u"Colonnes", str(total_size_y)), (u"Résolution", "TOBEDEFINED" + str(pixel_size_x))] # QTreeWidget self.treeWidget.clear() header = QtGui.QTreeWidgetItem([u"Métadonnée", "Valeur"]) self.treeWidget.setHeaderItem(header) root = QtGui.QTreeWidgetItem(self.treeWidget, ["Image de travail"]) for key, value in list_to_display: A = QtGui.QTreeWidgetItem(root, [key, str(value)]) self.treeWidget.resizeColumnToContents(0) self.treeWidget.resizeColumnToContents(1) # A = QtGui.QTreeWidgetItem(root, ["A"]) # # barA = QtGui.QTreeWidgetItem(A, ["bar", "i", "ii"]) # bazA = QtGui.QTreeWidgetItem(A, ["baz", "a", "b"]) root.setExpanded(True) def layer_deleted(self, layer_id): # logger.debug( str(layer_id) + " deleted") # print str(layer_id) + " deleted" layer_id = layer_id.encode('utf-8') if "Angle_Spectral" in str(layer_id): # delete rubberband for item in self.iface.mapCanvas().scene().items(): if isinstance(item, QgsRubberBand): item.reset(QGis.Point) # hide legend self.label_a_s.hide() self.label_a_s_img.hide() if self.qgis_education_manager: # logger.debug( "ProcessingManager().working_layer.get_qgis_layer().id(): " + str(ProcessingManager().working_layer.get_qgis_layer().id())) if ProcessingManager().working_layer.get_qgis_layer().id() == layer_id: self.disconnect_interface() ProcessingManager().remove_process_from_layer_id(layer_id) ProcessingManager().remove_displays_from_layer_id(layer_id) try: self.qgis_education_manager.value_tool.set_layers(ProcessingManager().get_working_layers()) except AttributeError: pass self.set_combobox_histograms() def disconnect_interface(self): if self.qgis_education_manager: self.qgis_education_manager.disconnect() # histograms try: self.hist.close() self.hist = None except AttributeError: pass # rubberband if self.dock_histo_opened: # remove the dockwidget from iface self.iface.removeDockWidget(self.histodockwidget) # disable working layer self.qgis_education_manager = None self.emit(QtCore.SIGNAL("terminated()")) def set_working_message(self, set=True): if set: widget = self.iface.messageBar().createMessage("Terre Image", "Travail en cours...") self.iface.messageBar().pushWidget(widget, QgsMessageBar.INFO) self.iface.mainWindow().statusBar().showMessage("Terre Image : Travail en cours...") self.label_travail_en_cours.show() else: self.iface.messageBar().popWidget() self.iface.messageBar().clearWidgets() self.iface.mainWindow().statusBar().clearMessage() self.label_travail_en_cours.hide() def disconnectP(self): """ Disconnection of signals, go back to the main interface """ self.iface.mainWindow().statusBar().showMessage("")