def addAlgorithmEntry(alg, menuName, submenuName, actionText=None, icon=None, addButton=False): if actionText is None: if (QgsGui.higFlags() & QgsGui.HigMenuTextIsTitleCase) and not (alg.flags() & QgsProcessingAlgorithm.FlagDisplayNameIsLiteral): alg_title = QgsStringUtils.capitalize(alg.displayName(), QgsStringUtils.TitleCase) else: alg_title = alg.displayName() actionText = alg_title + QCoreApplication.translate('Processing', '…') action = QAction(icon or alg.icon(), actionText, iface.mainWindow()) alg_id = alg.id() action.setData(alg_id) action.triggered.connect(lambda: _executeAlgorithm(alg_id)) action.setObjectName("mProcessingUserMenu_%s" % alg_id) if menuName: menu = getMenu(menuName, iface.mainWindow().menuBar()) submenu = getMenu(submenuName, menu) submenu.addAction(action) if addButton: global algorithmsToolbar if algorithmsToolbar is None: algorithmsToolbar = iface.addToolBar(QCoreApplication.translate('MainWindow', 'Processing Algorithms')) algorithmsToolbar.setObjectName("ProcessingAlgorithms") algorithmsToolbar.setToolTip(QCoreApplication.translate('MainWindow', 'Processing Algorithms Toolbar')) algorithmsToolbar.addAction(action)
def addAlgorithmEntry(alg, menuName, submenuName, actionText=None, icon=None, addButton=False): if actionText is None: actionText = QgsStringUtils.capitalize( alg.displayName(), QgsStringUtils.TitleCase) + QCoreApplication.translate( 'Processing', '…') action = QAction(icon or alg.icon(), actionText, iface.mainWindow()) action.setData(alg.id()) action.triggered.connect(lambda: _executeAlgorithm(alg)) action.setObjectName("mProcessingUserMenu_%s" % alg.id()) if menuName: menu = getMenu(menuName, iface.mainWindow().menuBar()) submenu = getMenu(submenuName, menu) submenu.addAction(action) if addButton: global algorithmsToolbar if algorithmsToolbar is None: algorithmsToolbar = iface.addToolBar( QCoreApplication.translate('MainWindow', 'Processing Algorithms')) algorithmsToolbar.setToolTip( QCoreApplication.translate('MainWindow', 'Processing Algorithms Toolbar')) algorithmsToolbar.addAction(action)
def addToolBarButton(algId, toolbar, icon=None, tooltip=None): alg = QgsApplication.processingRegistry().algorithmById(algId) if alg is None or alg.id() != algId: assert False, algId if tooltip is None: if (QgsGui.higFlags() & QgsGui.HigMenuTextIsTitleCase) and not ( alg.flags() & QgsProcessingAlgorithm.FlagDisplayNameIsLiteral): tooltip = QgsStringUtils.capitalize(alg.displayName(), QgsStringUtils.TitleCase) else: tooltip = alg.displayName() action = QAction(icon or alg.icon(), tooltip, iface.mainWindow()) algId = alg.id() action.setData(algId) action.triggered.connect(lambda: _executeAlgorithm(algId)) action.setObjectName("mProcessingAlg_%s" % algId) if toolbar: toolbar.addAction(action) else: QgsMessageLog.logMessage( Processing.tr('Toolbar "{}" not found').format( toolbar.windowTitle), Processing.tr('Processing'))
def create_menu_action(parent_menu: QMenu, title: str, relation: QgsRelation, slot, data=None): # add legend context menu entry action = QAction(title, parent_menu) action.setData(relation.id()) action.triggered.connect( lambda: slot(relation, relation.referencedLayer().selectedFeatures(), data)) parent_menu.addAction(action)
def add_layer_tree_action(self, title: str, relation: QgsRelation, slot, data=None) -> QAction: # add legend context menu entry layer_tree_action = QAction(title, self.iface.mainWindow()) self.iface.addCustomActionForLayerType(layer_tree_action, None, QgsMapLayer.VectorLayer, False) self.iface.addCustomActionForLayer(layer_tree_action, relation.referencedLayer()) layer_tree_action.setData(relation.id()) layer_tree_action.triggered.connect( lambda: slot(relation, relation.referencedLayer().selectedFeatures(), data)) self.layer_tree_actions.append(layer_tree_action)
def addAlgorithmEntry(alg, menuName, submenuName, actionText=None, icon=None, addButton=False): if actionText is None: actionText = QgsStringUtils.capitalize(alg.displayName(), QgsStringUtils.TitleCase) + QCoreApplication.translate('Processing', '…') action = QAction(icon or alg.icon(), actionText, iface.mainWindow()) action.setData(alg.id()) action.triggered.connect(lambda: _executeAlgorithm(alg)) action.setObjectName("mProcessingUserMenu_%s" % alg.id()) if menuName: menu = getMenu(menuName, iface.mainWindow().menuBar()) submenu = getMenu(submenuName, menu) submenu.addAction(action) if addButton: global algorithmsToolbar if algorithmsToolbar is None: algorithmsToolbar = iface.addToolBar(QCoreApplication.translate('MainWindow', 'Processing Algorithms')) algorithmsToolbar.setToolTip(QCoreApplication.translate('MainWindow', 'Processing Algorithms Toolbar')) algorithmsToolbar.addAction(action)
def create_tools(self): """ Creates all map tools ands add them to the QGIS interface """ action_single_point_templated_marker = QAction( GuiUtils.get_icon('single_point_templated_marker.svg'), self.tr('Single Point Templated Marker')) action_single_point_templated_marker.setCheckable(True) self.tools[SinglePointTemplatedMarkerTool. ID] = SinglePointTemplatedMarkerTool( self.iface.mapCanvas(), self.iface.cadDockWidget(), self.iface, action_single_point_templated_marker) self.tools[SinglePointTemplatedMarkerTool.ID].setAction( action_single_point_templated_marker) action_single_point_templated_marker.triggered.connect( partial(self.switch_tool, SinglePointTemplatedMarkerTool.ID)) action_single_point_templated_marker.setData( SinglePointTemplatedMarkerTool.ID) self.toolbar.addAction(action_single_point_templated_marker) self.actions.append(action_single_point_templated_marker) self.get_map_tool_action_group().addAction( action_single_point_templated_marker) # single point at center of line tool action_single_point_at_center_of_line = QAction( GuiUtils.get_icon('marker_at_center_of_line.svg'), self.tr('Single Point Templated Marker Via Two Points')) action_single_point_at_center_of_line.setCheckable(True) self.tools[ TwoPointTemplatedMarkerTool.ID] = TwoPointTemplatedMarkerTool( self.iface.mapCanvas(), self.iface.cadDockWidget(), self.iface, action_single_point_at_center_of_line) self.tools[TwoPointTemplatedMarkerTool.ID].setAction( action_single_point_at_center_of_line) action_single_point_at_center_of_line.triggered.connect( partial(self.switch_tool, TwoPointTemplatedMarkerTool.ID)) action_single_point_at_center_of_line.setData( TwoPointTemplatedMarkerTool.ID) self.toolbar.addAction(action_single_point_at_center_of_line) self.actions.append(action_single_point_at_center_of_line) self.get_map_tool_action_group().addAction( action_single_point_at_center_of_line) # multi point tool action_multi_point_templated_marker = QAction( GuiUtils.get_icon('multi_point_templated_marker.svg'), self.tr('Multiple Point Templated Marker Along LineString')) action_multi_point_templated_marker.setCheckable(True) self.tools[ MultiPointTemplatedMarkerTool.ID] = MultiPointTemplatedMarkerTool( self.iface.mapCanvas(), self.iface.cadDockWidget(), self.iface, action_multi_point_templated_marker) self.tools[MultiPointTemplatedMarkerTool.ID].setAction( action_multi_point_templated_marker) action_multi_point_templated_marker.triggered.connect( partial(self.switch_tool, MultiPointTemplatedMarkerTool.ID)) action_multi_point_templated_marker.setData( MultiPointTemplatedMarkerTool.ID) self.toolbar.addAction(action_multi_point_templated_marker) self.actions.append(action_multi_point_templated_marker) self.get_map_tool_action_group().addAction( action_single_point_templated_marker) # multi at center of segment point tool action_multi_point_center_segment_templated_marker = QAction( GuiUtils.get_icon('multi_point_templated_marker_at_center.svg'), self.tr('Multiple Point Templated Marker At Center Of Segments')) action_multi_point_center_segment_templated_marker.setCheckable(True) self.tools[MultiPointSegmentCenterTemplatedMarkerTool. ID] = MultiPointSegmentCenterTemplatedMarkerTool( self.iface.mapCanvas(), self.iface.cadDockWidget(), self.iface, action_multi_point_center_segment_templated_marker) self.tools[MultiPointSegmentCenterTemplatedMarkerTool.ID].setAction( action_multi_point_center_segment_templated_marker) action_multi_point_center_segment_templated_marker.triggered.connect( partial(self.switch_tool, MultiPointSegmentCenterTemplatedMarkerTool.ID)) action_multi_point_center_segment_templated_marker.setData( MultiPointSegmentCenterTemplatedMarkerTool.ID) self.toolbar.addAction( action_multi_point_center_segment_templated_marker) self.actions.append(action_multi_point_center_segment_templated_marker) self.get_map_tool_action_group().addAction( action_single_point_templated_marker) self.enable_actions_for_layer(self.iface.activeLayer())
def update_layers(self): if self.tabWidget.currentIndex() != 2: return if self.layerSelection.currentIndex() == 3: # by selection string self.selectionStringLineEdit.setEnabled(True) else: self.selectionStringLineEdit.setEnabled(False) if self.layerSelection.currentIndex() == 0: # visible layers layers = self.activeRasterLayers(0) elif self.layerSelection.currentIndex() == 3: # by selection string layers = self.activeRasterLayers(3) else: layers = self.activeRasterLayers(1) # All layers self.selectionTable.blockSignals(True) self.selectionTable.clearContents() self.selectionTable.setRowCount(len(layers)) self.selectionTable.horizontalHeader().resizeSection(0, 20) self.selectionTable.horizontalHeader().resizeSection(2, 20) j = 0 for layer in layers: item = QTableWidgetItem() item.setFlags(item.flags() | Qt.ItemIsUserCheckable) if self.layerSelection.currentIndex() != 2: item.setFlags(item.flags() & ~Qt.ItemIsEnabled) item.setCheckState(Qt.Checked) else: # manual selection if layer.id() in self.layersSelected: item.setCheckState(Qt.Checked) else: item.setCheckState(Qt.Unchecked) self.selectionTable.setItem(j, 0, item) item = QTableWidgetItem(layer.name()) item.setData(Qt.UserRole, layer.id()) self.selectionTable.setItem(j, 1, item) activeBands = self.activeBandsForRaster(layer) button = QToolButton() button.setIcon(QIcon(':/plugins/mutant/img/bands.jpg')) # button.setIconSize(QtCore.QSize(400, 400)) button.setPopupMode(QToolButton.InstantPopup) group = QActionGroup(button) group.setExclusive(False) group.triggered.connect(self.bandSelected) if self.bandSelection.currentIndex( ) == 2 and layer.bandCount() > 1: menu = QMenu() menu.installEventFilter(self) for iband in range(1, layer.bandCount() + 1): action = QAction(str(layer.bandName(iband)), group) action.setData([layer.id(), iband, j, False]) action.setCheckable(True) action.setChecked(iband in activeBands) menu.addAction(action) if layer.bandCount() > 1: action = QAction(str(self.tr("All")), group) action.setData([layer.id(), -1, j, True]) action.setCheckable(False) menu.addAction(action) action = QAction(str(self.tr("None")), group) action.setData([layer.id(), -1, j, False]) action.setCheckable(False) menu.addAction(action) button.setMenu(menu) else: button.setEnabled(False) self.selectionTable.setCellWidget(j, 2, button) item = QTableWidgetItem(str(activeBands)) item.setToolTip(str(activeBands)) self.selectionTable.setItem(j, 3, item) j += 1 self.selectionTable.blockSignals(False)