mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-11-04 00:04:25 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from qgis.utils import iface
 | 
						|
from PyQt4 import QtGui
 | 
						|
from processing.core.Processing import Processing
 | 
						|
from processing.gui.MessageDialog import MessageDialog
 | 
						|
from processing.gui.AlgorithmDialog import AlgorithmDialog
 | 
						|
 | 
						|
algorithmsToolbar = None
 | 
						|
 | 
						|
 | 
						|
def addAlgorithmEntry(algname, menuName, submenuName, actionText=None, icon=None, addButton=False):
 | 
						|
    alg = Processing.getAlgorithm(algname)
 | 
						|
    if alg is None:
 | 
						|
        return
 | 
						|
    if menuName:
 | 
						|
        menu = getMenu(menuName, iface.mainWindow().menuBar())
 | 
						|
        submenu = getMenu(submenuName, menu)
 | 
						|
        action = QtGui.QAction(icon or alg.getIcon(), actionText or alg.name, iface.mainWindow())
 | 
						|
        action.triggered.connect(lambda: _executeAlgorithm(alg))
 | 
						|
        submenu.addAction(action)
 | 
						|
    if addButton:
 | 
						|
        global algorithmsToolbar
 | 
						|
        if algorithmsToolbar is None:
 | 
						|
            algorithmsToolbar = iface.addToolBar("ProcessingAlgorithms")
 | 
						|
        algorithmsToolbar.addAction(action)
 | 
						|
 | 
						|
 | 
						|
def _executeAlgorithm(alg):
 | 
						|
    message = alg.checkBeforeOpeningParametersDialog()
 | 
						|
    if message:
 | 
						|
        dlg = MessageDialog()
 | 
						|
        dlg.setTitle(tr('Missing dependency'))
 | 
						|
        dlg.setMessage(
 | 
						|
            tr('<h3>Missing dependency. This algorithm cannot '
 | 
						|
               'be run :-( </h3>\n%s') % message)
 | 
						|
        dlg.exec_()
 | 
						|
        return
 | 
						|
    alg = alg.getCopy()
 | 
						|
    dlg = alg.getCustomParametersDialog()
 | 
						|
    if not dlg:
 | 
						|
        dlg = AlgorithmDialog(alg)
 | 
						|
    canvas = iface.mapCanvas()
 | 
						|
    prevMapTool = canvas.mapTool()
 | 
						|
    dlg.show()
 | 
						|
    dlg.exec_()
 | 
						|
    if canvas.mapTool() != prevMapTool:
 | 
						|
        try:
 | 
						|
            canvas.mapTool().reset()
 | 
						|
        except:
 | 
						|
            pass
 | 
						|
        canvas.setMapTool(prevMapTool)
 | 
						|
 | 
						|
 | 
						|
def getMenu(name, parent):
 | 
						|
    menus = [c for c in parent.children() if isinstance(c, QtGui.QMenu)]
 | 
						|
    menusDict = {m.title(): m for m in menus}
 | 
						|
    if name in menusDict:
 | 
						|
        return menusDict[name]
 | 
						|
    else:
 | 
						|
        menu = QtGui.QMenu(name, parent)
 | 
						|
        parent.addMenu(menu)
 | 
						|
        return menu
 |