def processAlgorithm(self, progress):
		# Include must be done here to avoid cyclic import
		from sextante.core.Sextante import Sextante
		qgis = Sextante.getInterface()

		layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME))
		layername = layer.name()
		savename = self.getOutputValue(self.SAVENAME)

		index = self.getParameterValue(self.NEWTYPE)

		splitnodes = 0
		if index == 0:
			newtype = QGis.WKBPoint
		elif index == 1:
			newtype = QGis.WKBPoint
			splitnodes = 1
		elif index == 2:
			newtype = QGis.WKBLineString
		elif index == 3:
			newtype = QGis.WKBMultiLineString
		elif index == 4:
			newtype = QGis.WKBPolygon
		else:
			newtype = QGis.WKBPoint

		message = mmqgisx_geometry_convert(qgis, layername, newtype, splitnodes, savename, False)

		if message:
			raise GeoAlgorithmExecutionException(message)
	def processAlgorithm(self, progress):
		# Include must be done here to avoid cyclic import
		from sextante.core.Sextante import Sextante
		qgis = Sextante.getInterface()

		outfilename = self.getOutputValue(self.OUTFILENAME)
		layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME))
		layername = layer.name()

		if self.getParameterValue(self.FIELDDELIMITER) == 1:
			field_delimiter = "|"
		elif self.getParameterValue(self.FIELDDELIMITER) == 2:
			field_delimiter = " "
		else:
			field_delimiter = ","

		if self.getParameterValue(self.LINETERMINATOR) == 1:
			line_terminator = "\n"
		else:
			line_terminator = "\r\n"

		message = mmqgisx_attribute_export(qgis, outfilename, layername, None, 
			field_delimiter, line_terminator)

		if message:
			raise GeoAlgorithmExecutionException(message)
	def processAlgorithm(self, progress):
		# Include must be done here to avoid cyclic import
		from sextante.core.Sextante import Sextante
		qgis = Sextante.getInterface()

		layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME))
		layername = layer.name()

		node_filename = self.getOutputValue(self.NODEFILENAME)
		attribute_filename = self.getOutputValue(self.ATTRIBUTEFILENAME)
		print "Layer: " + str(layername)
		print "Nodes: " + str(node_filename)
		print "Attributes: " + str(attribute_filename)

		if self.getParameterValue(self.FIELDDELIMITER) == 1:
			field_delimiter = "|"
		elif self.getParameterValue(self.FIELDDELIMITER) == 2:
			field_delimiter = " "
		else:
			field_delimiter = ","

		if self.getParameterValue(self.LINETERMINATOR) == 1:
			line_terminator = "\n"
		else:
			line_terminator = "\r\n"

		message = mmqgisx_geometry_export_to_csv(qgis, layername, node_filename, attribute_filename,
			field_delimiter, line_terminator)

		if message:
			raise GeoAlgorithmExecutionException(message)
Esempio n. 4
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante
        qgis = Sextante.getInterface()

        layer = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.LAYERNAME))
        layername = layer.name()

        node_filename = self.getOutputValue(self.NODEFILENAME)
        attribute_filename = self.getOutputValue(self.ATTRIBUTEFILENAME)
        print "Layer: " + str(layername)
        print "Nodes: " + str(node_filename)
        print "Attributes: " + str(attribute_filename)

        if self.getParameterValue(self.FIELDDELIMITER) == 1:
            field_delimiter = "|"
        elif self.getParameterValue(self.FIELDDELIMITER) == 2:
            field_delimiter = " "
        else:
            field_delimiter = ","

        if self.getParameterValue(self.LINETERMINATOR) == 1:
            line_terminator = "\n"
        else:
            line_terminator = "\r\n"

        message = mmqgisx_geometry_export_to_csv(qgis, layername,
                                                 node_filename,
                                                 attribute_filename,
                                                 field_delimiter,
                                                 line_terminator)

        if message:
            raise GeoAlgorithmExecutionException(message)
Esempio n. 5
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante
        qgis = Sextante.getInterface()

        outfilename = self.getOutputValue(self.OUTFILENAME)
        layer = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.LAYERNAME))
        layername = layer.name()

        if self.getParameterValue(self.FIELDDELIMITER) == 1:
            field_delimiter = "|"
        elif self.getParameterValue(self.FIELDDELIMITER) == 2:
            field_delimiter = " "
        else:
            field_delimiter = ","

        if self.getParameterValue(self.LINETERMINATOR) == 1:
            line_terminator = "\n"
        else:
            line_terminator = "\r\n"

        message = mmqgisx_attribute_export(qgis, outfilename, layername, None,
                                           field_delimiter, line_terminator)

        if message:
            raise GeoAlgorithmExecutionException(message)
Esempio n. 6
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante
        qgis = Sextante.getInterface()

        layer = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.LAYERNAME))
        layername = layer.name()

        table = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.INFILENAME))
        infilename = table.name()

        joinfield = self.getParameterValue(self.JOINFIELD)
        joinattribute = self.getParameterValue(self.JOINATTRIBUTE)

        outfilename = self.getOutputValue(self.OUTFILENAME)
        notfoundname = self.getOutputValue(self.NOTFOUNDNAME)

        message = mmqgisx_attribute_join(qgis, layername, infilename,
                                         joinfield, joinattribute, outfilename,
                                         notfoundname, False)

        if message:
            raise GeoAlgorithmExecutionException(message)
Esempio n. 7
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante

        qgis = Sextante.getInterface()

        table = QGisLayers.getObjectFromUri(self.getParameterValue(self.CSVNAME))
        csvname = table.name()

        params = [
            self.getParameterValue(self.ADDRESS),
            self.getParameterValue(self.CITY),
            self.getParameterValue(self.STATE),
            self.getParameterValue(self.COUNTRY),
        ]

        keys = []
        for param in params:
            if not (param in keys):
                keys.append(param)

        shapefilename = self.getOutputValue(self.SHAPEFILENAME)
        notfoundfile = self.getOutputValue(self.NOTFOUNDFILE)

        message = mmqgisx_geocode_google(qgis, csvname, shapefilename, notfoundfile, keys, False)

        if message:
            raise GeoAlgorithmExecutionException(message)
Esempio n. 8
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante
        qgis = Sextante.getInterface()

        layer = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.LAYERNAME))
        layername = layer.name()
        savename = self.getOutputValue(self.SAVENAME)

        index = self.getParameterValue(self.NEWTYPE)

        splitnodes = 0
        if index == 0:
            newtype = QGis.WKBPoint
        elif index == 1:
            newtype = QGis.WKBPoint
            splitnodes = 1
        elif index == 2:
            newtype = QGis.WKBLineString
        elif index == 3:
            newtype = QGis.WKBMultiLineString
        elif index == 4:
            newtype = QGis.WKBPolygon
        else:
            newtype = QGis.WKBPoint

        message = mmqgisx_geometry_convert(qgis, layername, newtype,
                                           splitnodes, savename, False)

        if message:
            raise GeoAlgorithmExecutionException(message)
Esempio n. 9
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante
        qgis = Sextante.getInterface()

        table = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.CSVNAME))
        csvname = table.name()

        params = [
            self.getParameterValue(self.ADDRESS),
            self.getParameterValue(self.CITY),
            self.getParameterValue(self.STATE),
            self.getParameterValue(self.COUNTRY)
        ]

        keys = []
        for param in params:
            if not (param in keys):
                keys.append(param)

        shapefilename = self.getOutputValue(self.SHAPEFILENAME)
        notfoundfile = self.getOutputValue(self.NOTFOUNDFILE)

        message = mmqgisx_geocode_google(qgis, csvname, shapefilename,
                                         notfoundfile, keys, False)

        if message:
            raise GeoAlgorithmExecutionException(message)
Esempio n. 10
0
 def setSessionProjectionFromProject(self, commands):
     if not GrassUtils.projectionSet:
         from sextante.core.Sextante import Sextante
         qgis = Sextante.getInterface()
         proj4 = qgis.mapCanvas().mapRenderer().destinationCrs().toProj4()
         command = "g.proj"
         command +=" -c"
         command +=" proj4=\""+proj4+"\""
         commands.append(command)
         GrassUtils.projectionSet = True
Esempio n. 11
0
 def setSessionProjectionFromProject(self, commands):
     if not GrassUtils.projectionSet:
         from sextante.core.Sextante import Sextante
         qgis = Sextante.getInterface()
         proj4 = qgis.mapCanvas().mapRenderer().destinationCrs().toProj4()
         command = "g.proj"
         command += " -c"
         command += " proj4=\"" + proj4 + "\""
         commands.append(command)
         GrassUtils.projectionSet = True
	def processAlgorithm(self, progress):
		# Include must be done here to avoid cyclic import
		from sextante.core.Sextante import Sextante
		qgis = Sextante.getInterface()

		layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME))

		savename = self.getOutputValue(self.SAVENAME)

		message = mmqgisx_voronoi_diagram(qgis, layer, savename, False)

		if message:
			raise GeoAlgorithmExecutionException(message)
Esempio n. 13
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante
        qgis = Sextante.getInterface()

        layer = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.LAYERNAME))

        savename = self.getOutputValue(self.SAVENAME)

        message = mmqgisx_voronoi_diagram(qgis, layer, savename, False)

        if message:
            raise GeoAlgorithmExecutionException(message)
	def processAlgorithm(self, progress):
		# Include must be done here to avoid cyclic import
		from sextante.core.Sextante import Sextante
		qgis = Sextante.getInterface()

		layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME))
		layername = layer.name()

		attribute = self.getParameterValue(self.ATTRIBUTE)
		savename = self.getOutputValue(self.SAVENAME)

		message = mmqgisx_text_to_float(qgis, layername, [ attribute ], savename, False)

		if message:
			raise GeoAlgorithmExecutionException(message)
	def processAlgorithm(self, progress):
		# Include must be done here to avoid cyclic import
		from sextante.core.Sextante import Sextante
		qgis = Sextante.getInterface()

		layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME))
		layername = layer.name()
		hspacing = self.getParameterValue(self.HSPACING)
		vspacing = self.getParameterValue(self.VSPACING)
		savename = self.getOutputValue(self.SAVENAME)

		message = mmqgisx_gridify_layer(qgis, layername, hspacing, vspacing, savename, False)

		if message:
			raise GeoAlgorithmExecutionException(message)
	def processAlgorithm(self, progress):
		# Include must be done here to avoid cyclic import
		from sextante.core.Sextante import Sextante
		qgis = Sextante.getInterface()

		layersource = QGisLayers.getObjectFromUri(self.getParameterValue(self.SOURCENAME))	
		layerdest = QGisLayers.getObjectFromUri(self.getParameterValue(self.DESTNAME))		

		nameattribute = self.getParameterValue(self.NAMEATTRIBUTE)
		units = self.unitlist[self.getParameterValue(self.UNITS)]
		addlines = self.getParameterValue(self.SHAPETYPE)
		savename = self.getOutputValue(self.SAVENAME)

		message = mmqgisx_hub_distance(qgis, layersource, layerdest, nameattribute, units, addlines, savename, False)

		if message:
			raise GeoAlgorithmExecutionException(message)
	def processAlgorithm(self, progress):
		# Include must be done here to avoid cyclic import
		from sextante.core.Sextante import Sextante
		qgis = Sextante.getInterface()

		hublayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.HUBNAME))		
		spokelayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.SPOKENAME))
		
		hubattribute = self.getParameterValue(self.HUBATTRIBUTE)
		spokeattribute = self.getParameterValue(self.SPOKEATTRIBUTE)

		savename = self.getOutputValue(self.SAVENAME)

		message = mmqgisx_hub_lines(qgis, hublayer, hubattribute, spokelayer, spokeattribute, savename, False)

		if message:
			raise GeoAlgorithmExecutionException(message)
Esempio n. 18
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante
        qgis = Sextante.getInterface()

        layer = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.LAYERNAME))
        layername = layer.name()

        attribute = self.getParameterValue(self.ATTRIBUTE)
        savename = self.getOutputValue(self.SAVENAME)

        message = mmqgisx_text_to_float(qgis, layername, [attribute], savename,
                                        False)

        if message:
            raise GeoAlgorithmExecutionException(message)
Esempio n. 19
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante
        qgis = Sextante.getInterface()

        layer = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.LAYERNAME))
        layername = layer.name()
        hspacing = self.getParameterValue(self.HSPACING)
        vspacing = self.getParameterValue(self.VSPACING)
        savename = self.getOutputValue(self.SAVENAME)

        message = mmqgisx_gridify_layer(qgis, layername, hspacing, vspacing,
                                        savename, False)

        if message:
            raise GeoAlgorithmExecutionException(message)
	def processAlgorithm(self, progress):
		# Include must be done here to avoid cyclic import
		from sextante.core.Sextante import Sextante
		qgis = Sextante.getInterface()

		layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME))
		layername = layer.name()

		attribute = self.getParameterValue(self.ATTRIBUTE)
		comparison = self.comparisons [ self.getParameterValue(self.COMPARISON) ]
		# print str(self.getParameterValue(self.COMPARISON)) + ": " + str(comparison)
		comparisonvalue = self.getParameterValue(self.COMPARISONVALUE)
		savename = self.getOutputValue(self.SAVENAME)

		message = mmqgisx_select(qgis, layername, attribute, comparisonvalue, comparison, savename, False)

		if message:
			raise GeoAlgorithmExecutionException(message)
Esempio n. 21
0
 def fillCombo(self):
     self.combo.clear()
     #add algorithms
     for providerName in Sextante.algs.keys():
         provider = Sextante.algs[providerName]            
         algs = provider.values()            
         for alg in algs:
             self.combo.addItem("SEXTANTE algorithm: " + alg.name)        
     #add functions
     for command in dir(self.commands):
         if isinstance(self.commands.__dict__.get(command), types.FunctionType):
             self.combo.addItem("Command: " + command);    
     #add menu entries
     menuActions = []
     actions = Sextante.getInterface().mainWindow().menuBar().actions()
     for action in actions:
         menuActions.extend(self.getActions(action))
     for action in menuActions:
         self.combo.addItem("Menu action: " + unicode(action.text()))
 def fillCombo(self):
     self.combo.clear()
     #add algorithms
     for providerName in Sextante.algs.keys():
         provider = Sextante.algs[providerName]
         algs = provider.values()
         for alg in algs:
             self.combo.addItem("SEXTANTE algorithm: " + alg.name)
     #add functions
     for command in dir(self.commands):
         if isinstance(self.commands.__dict__.get(command), types.FunctionType):
             self.combo.addItem("Command: " + command);
     #add menu entries
     menuActions = []
     actions = Sextante.getInterface().mainWindow().menuBar().actions()
     for action in actions:
         menuActions.extend(self.getActions(action))
     for action in menuActions:
         self.combo.addItem("Menu action: " + unicode(action.text()))
	def processAlgorithm(self, progress):
		# Include must be done here to avoid cyclic import
		from sextante.core.Sextante import Sextante
		qgis = Sextante.getInterface()

		table = QGisLayers.getObjectFromUri(self.getParameterValue(self.NODEFILENAME))
		node_filename = table.name()

		longitude = self.getParameterValue(self.LONGITUDE)
		latitude = self.getParameterValue(self.LATITUDE)
		shapeid = self.getParameterValue(self.SHAPEID)
		geometrytype = self.geotypes[self.getParameterValue(self.GEOMETRYTYPE)]
		shapefilename = self.getOutputValue(self.SHAPEFILENAME)

		message = mmqgisx_geometry_import_from_csv(qgis, node_filename, longitude, latitude, 
			shapeid, geometrytype, shapefilename, False)

		if message:
			raise GeoAlgorithmExecutionException(message)
Esempio n. 24
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante
        qgis = Sextante.getInterface()

        hublayer = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.HUBNAME))
        spokelayer = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.SPOKENAME))

        hubattribute = self.getParameterValue(self.HUBATTRIBUTE)
        spokeattribute = self.getParameterValue(self.SPOKEATTRIBUTE)

        savename = self.getOutputValue(self.SAVENAME)

        message = mmqgisx_hub_lines(qgis, hublayer, hubattribute, spokelayer,
                                    spokeattribute, savename, False)

        if message:
            raise GeoAlgorithmExecutionException(message)
Esempio n. 25
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante
        qgis = Sextante.getInterface()

        layer = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.LAYERNAME))
        layername = layer.name()

        attribute = self.getParameterValue(self.ATTRIBUTE)
        comparison = self.comparisons[self.getParameterValue(self.COMPARISON)]
        # print str(self.getParameterValue(self.COMPARISON)) + ": " + str(comparison)
        comparisonvalue = self.getParameterValue(self.COMPARISONVALUE)
        savename = self.getOutputValue(self.SAVENAME)

        message = mmqgisx_select(qgis, layername, attribute, comparisonvalue,
                                 comparison, savename, False)

        if message:
            raise GeoAlgorithmExecutionException(message)
	def processAlgorithm(self, progress):
		# Include must be done here to avoid cyclic import
		from sextante.core.Sextante import Sextante
		qgis = Sextante.getInterface()

		savename = self.getOutputValue(self.SAVENAME)
		hspacing = self.getParameterValue(self.HSPACING)
		vspacing = self.getParameterValue(self.VSPACING)
		width = self.getParameterValue(self.WIDTH)
		height = self.getParameterValue(self.HEIGHT)
		centerx = self.getParameterValue(self.CENTERX)
		centery = self.getParameterValue(self.CENTERY)
		originx = centerx - (width / 2.0)
		originy = centery - (height / 2.0)
		gridtype = self.gridtype_options[self.getParameterValue(self.GRIDTYPE)]

		message = mmqgisx_grid(qgis, savename, hspacing, vspacing, width, 
			height, originx, originy, gridtype, 0)

		if message:
			raise GeoAlgorithmExecutionException(message)
Esempio n. 27
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante
        qgis = Sextante.getInterface()

        savename = self.getOutputValue(self.SAVENAME)
        hspacing = self.getParameterValue(self.HSPACING)
        vspacing = self.getParameterValue(self.VSPACING)
        width = self.getParameterValue(self.WIDTH)
        height = self.getParameterValue(self.HEIGHT)
        centerx = self.getParameterValue(self.CENTERX)
        centery = self.getParameterValue(self.CENTERY)
        originx = centerx - (width / 2.0)
        originy = centery - (height / 2.0)
        gridtype = self.gridtype_options[self.getParameterValue(self.GRIDTYPE)]

        message = mmqgisx_grid(qgis, savename, hspacing, vspacing, width,
                               height, originx, originy, gridtype, 0)

        if message:
            raise GeoAlgorithmExecutionException(message)
Esempio n. 28
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante
        qgis = Sextante.getInterface()

        layersource = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.SOURCENAME))
        layerdest = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.DESTNAME))

        nameattribute = self.getParameterValue(self.NAMEATTRIBUTE)
        units = self.unitlist[self.getParameterValue(self.UNITS)]
        addlines = self.getParameterValue(self.SHAPETYPE)
        savename = self.getOutputValue(self.SAVENAME)

        message = mmqgisx_hub_distance(qgis, layersource, layerdest,
                                       nameattribute, units, addlines,
                                       savename, False)

        if message:
            raise GeoAlgorithmExecutionException(message)
	def processAlgorithm(self, progress):
		# Include must be done here to avoid cyclic import
		from sextante.core.Sextante import Sextante
		qgis = Sextante.getInterface()

		layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME))
		layername = layer.name()

		table = QGisLayers.getObjectFromUri(self.getParameterValue(self.INFILENAME))
		infilename = table.name()

		joinfield = self.getParameterValue(self.JOINFIELD)
		joinattribute = self.getParameterValue(self.JOINATTRIBUTE)

		outfilename = self.getOutputValue(self.OUTFILENAME)
		notfoundname = self.getOutputValue(self.NOTFOUNDNAME)

		message = mmqgisx_attribute_join(qgis, layername, infilename, joinfield, 
			joinattribute, outfilename, notfoundname, False)

		if message:
			raise GeoAlgorithmExecutionException(message)
Esempio n. 30
0
    def processAlgorithm(self, progress):
        # Include must be done here to avoid cyclic import
        from sextante.core.Sextante import Sextante
        qgis = Sextante.getInterface()

        table = QGisLayers.getObjectFromUri(
            self.getParameterValue(self.NODEFILENAME))
        node_filename = table.name()

        longitude = self.getParameterValue(self.LONGITUDE)
        latitude = self.getParameterValue(self.LATITUDE)
        shapeid = self.getParameterValue(self.SHAPEID)
        geometrytype = self.geotypes[self.getParameterValue(self.GEOMETRYTYPE)]
        shapefilename = self.getOutputValue(self.SHAPEFILENAME)

        message = mmqgisx_geometry_import_from_csv(qgis, node_filename,
                                                   longitude, latitude,
                                                   shapeid, geometrytype,
                                                   shapefilename, False)

        if message:
            raise GeoAlgorithmExecutionException(message)
class CommanderWindow(QtGui.QDialog):
    def __init__(self, parent, canvas):
        self.canvas = canvas
        QtGui.QDialog.__init__(self, parent, Qt.FramelessWindowHint)
        #self.setModal(True)
        self.commands = imp.load_source("commands", self.commandsFile())
        self.initGui()

    def commandsFolder(self):
        folder = unicode(os.path.join(SextanteUtils.userFolder(), "commander"))
        mkdir(folder)
        return os.path.abspath(folder)

    def commandsFile(self):
        f = os.path.join(self.commandsFolder(), "commands.py")
        if not os.path.exists(f):
            out = open(f, "w")
            out.write("from qgis.core import *\n")
            out.write("import sextante\n\n")
            out.write("def removeall():\n")
            out.write("\tmapreg = QgsMapLayerRegistry.instance()\n")
            out.write("\tmapreg.removeAllMapLayers()\n\n")
            out.write("def load(*args):\n")
            out.write("\tsextante.load(args[0])\n")
            out.close()
        return f

    def algsListHasChanged(self):
        self.fillCombo()

    def initGui(self):
        self.combo= ExtendedComboBox()
        self.fillCombo()

        self.combo.setEditable(True)
        self.label = QtGui.QLabel("Enter command:")
        self.errorLabel = QtGui.QLabel("Enter command:")
        self.vlayout = QtGui.QVBoxLayout()
        self.vlayout.setSpacing(2)
        self.vlayout.setMargin(0)
        self.vlayout.addSpacerItem(QtGui.QSpacerItem(0, OFFSET, QSizePolicy.Maximum, QSizePolicy.Expanding));
        self.hlayout = QtGui.QHBoxLayout()
        self.hlayout.addWidget(self.label)
        #self.hlayout.addWidget(self.errorLabel)
        self.vlayout.addLayout(self.hlayout)
        self.hlayout2 = QtGui.QHBoxLayout()
        self.hlayout2.addWidget(self.combo)
        self.vlayout.addLayout(self.hlayout2)
        self.vlayout.addSpacerItem(QtGui.QSpacerItem(0, OFFSET, QSizePolicy.Maximum, QSizePolicy.Expanding));
        self.setLayout(self.vlayout)
        self.combo.lineEdit().returnPressed.connect(self.run)
        self.prepareGui()

    def fillCombo(self):
        self.combo.clear()
        #add algorithms
        for providerName in Sextante.algs.keys():
            provider = Sextante.algs[providerName]
            algs = provider.values()
            for alg in algs:
                self.combo.addItem("SEXTANTE algorithm: " + alg.name)
        #add functions
        for command in dir(self.commands):
            if isinstance(self.commands.__dict__.get(command), types.FunctionType):
                self.combo.addItem("Command: " + command);
        #add menu entries
        menuActions = []
        actions = Sextante.getInterface().mainWindow().menuBar().actions()
        for action in actions:
            menuActions.extend(self.getActions(action))
        for action in menuActions:
            self.combo.addItem("Menu action: " + unicode(action.text()))


    def prepareGui(self):
        self.combo.setEditText("")
        self.combo.setMaximumSize(QtCore.QSize(self.canvas.rect().width()  - 2 * OFFSET, ITEMHEIGHT))
        self.combo.view().setStyleSheet("min-height: 150px")
        self.combo.setFocus(Qt.OtherFocusReason)
        self.label.setMaximumSize(self.combo.maximumSize())
        self.label.setVisible(False)
        self.adjustSize()
        pt = self.canvas.rect().topLeft()
        absolutePt = self.canvas.mapToGlobal(pt)
        self.move(absolutePt)
        self.resize(self.canvas.rect().width(), HEIGHT)
        self.setStyleSheet("CommanderWindow { background-color: #e7f5fe; border: 1px solid #b9cfe4; }")


    def getActions(self, action):
        menuActions = []
        menu = action.menu()
        if menu is None:
            menuActions.append(action)
            return menuActions
        else:
            actions = menu.actions()
            for subaction in actions:
                if subaction.menu() is not None:
                    menuActions.extend(self.getActions(subaction))
                elif not subaction.isSeparator():
                    menuActions.append(subaction)

        return menuActions

    def run(self):
        s = unicode(self.combo.currentText())
        if s.startswith("SEXTANTE algorithm: "):
            algName = s[len("SEXTANTE algorithm: "):]
            alg = Sextante.getAlgorithmFromFullName(algName)
            if alg is not None:
                self.close()
                self.runAlgorithm(alg)
        elif s.startswith("Command: "):
            command = s[len("Command: "):]
            try:
                self.runCommand(command)
                self.close()
            except Exception, e:
                self.label.setVisible(True)
                self.label.setText("Error:" +  unicode(e) )

        elif s.startswith("Menu action: "):
            actionName = s[len("Menu action: "):]
            menuActions = []
            actions = Sextante.getInterface().mainWindow().menuBar().actions()
            for action in actions:
                menuActions.extend(self.getActions(action))
            for action in menuActions:
                if action.text() == actionName:
                    self.close()
                    action.trigger()
                    return