mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-15 00:02:52 -04:00
[processing] make bunch of strings translatable (sorry translators)
This commit is contained in:
parent
f935316882
commit
bd13693ae3
@ -521,7 +521,7 @@ class GeoAlgorithm:
|
||||
for layer in wrongLayers:
|
||||
html += self.tr('<li>%s: <font size=3 face="Courier New" '
|
||||
'color="#ff0000">%s</font></li>\n') % \
|
||||
(layer.description, layer.value)
|
||||
(layer.description, layer.value)
|
||||
html += self.tr('</ul><p>The above files could not be opened, which '
|
||||
'probably indicates that they were not correctly '
|
||||
'produced by the executed algorithm</p>'
|
||||
@ -532,4 +532,4 @@ class GeoAlgorithm:
|
||||
def tr(self, string, context=''):
|
||||
if context == '':
|
||||
context = 'GeoAlgorithm'
|
||||
return QtCore.QCoreApplication.translate(context, string)
|
||||
return QCoreApplication.translate(context, string)
|
||||
|
@ -95,8 +95,8 @@ class Processing:
|
||||
Processing.updateAlgsList()
|
||||
except:
|
||||
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
|
||||
self.tr('Could not load provider: %s\n%s')
|
||||
% (provider.getDescription(), unicode(sys.exc_info()[1])))
|
||||
self.tr('Could not load provider: %s\n%s')
|
||||
% (provider.getDescription(), unicode(sys.exc_info()[1])))
|
||||
Processing.removeProvider(provider)
|
||||
|
||||
@staticmethod
|
||||
@ -284,16 +284,16 @@ class Processing:
|
||||
print 'Error: Wrong parameter value %s for parameter %s.' \
|
||||
% (value, name)
|
||||
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
|
||||
self.tr("Error in %s. Wrong parameter value %s for parameter %s.") \
|
||||
self.tr('Error in %s. Wrong parameter value %s for parameter %s.') \
|
||||
% (alg.name, value, name))
|
||||
return
|
||||
# fill any missing parameters with default values if allowed
|
||||
for param in alg.parameters:
|
||||
if param.name not in setParams:
|
||||
if not param.setValue(None):
|
||||
print ("Error: Missing parameter value for parameter %s." % (param.name))
|
||||
print ('Error: Missing parameter value for parameter %s.' % (param.name))
|
||||
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
|
||||
self.tr("Error in %s. Missing parameter value for parameter %s.") \
|
||||
self.tr('Error in %s. Missing parameter value for parameter %s.') \
|
||||
% (alg.name, param.name))
|
||||
return
|
||||
else:
|
||||
|
@ -364,7 +364,7 @@ class ParameterMultipleInput(ParameterDataObject):
|
||||
else:
|
||||
exts = dataobjects.getSupportedOutputVectorLayerExtensions()
|
||||
for i in range(len(exts)):
|
||||
exts[i] = self.tr('%s files(*.%s', 'ParameterMultipleInput') % (exts[i].upper(), exts[i].lower())
|
||||
exts[i] = self.tr('%s files(*.%s)', 'ParameterMultipleInput') % (exts[i].upper(), exts[i].lower())
|
||||
return ';;'.join(exts)
|
||||
|
||||
|
||||
@ -495,7 +495,7 @@ class ParameterRaster(ParameterDataObject):
|
||||
def getFileFilter(self):
|
||||
exts = dataobjects.getSupportedOutputRasterLayerExtensions()
|
||||
for i in range(len(exts)):
|
||||
exts[i] = self.tr('%s files(*.%s', 'ParameterRaster') % (exts[i].upper(), exts[i].lower())
|
||||
exts[i] = self.tr('%s files(*.%s)', 'ParameterRaster') % (exts[i].upper(), exts[i].lower())
|
||||
return ';;'.join(exts)
|
||||
|
||||
|
||||
@ -612,7 +612,7 @@ class ParameterTable(ParameterDataObject):
|
||||
def getFileFilter(self):
|
||||
exts = ['csv', 'dbf']
|
||||
for i in range(len(exts)):
|
||||
exts[i] = self.tr('%s files(*.%s', 'ParameterTable') % (exts[i].upper(), exts[i].lower())
|
||||
exts[i] = self.tr('%s files(*.%s)', 'ParameterTable') % (exts[i].upper(), exts[i].lower())
|
||||
return ';;'.join(exts)
|
||||
|
||||
|
||||
@ -721,5 +721,5 @@ class ParameterVector(ParameterDataObject):
|
||||
def getFileFilter(self):
|
||||
exts = dataobjects.getSupportedOutputVectorLayerExtensions()
|
||||
for i in range(len(exts)):
|
||||
exts[i] = self.tr('%s files(*.%s', 'ParameterVector') % (exts[i].upper(), exts[i].lower())
|
||||
exts[i] = self.tr('%s files(*.%s)', 'ParameterVector') % (exts[i].upper(), exts[i].lower())
|
||||
return ';;'.join(exts)
|
||||
|
@ -64,7 +64,7 @@ class AlgorithmExecutionDialog(QDialog):
|
||||
self.buttonBox.setOrientation(Qt.Horizontal)
|
||||
self.buttonBox.setStandardButtons(QDialogButtonBox.Close)
|
||||
self.runButton = QPushButton()
|
||||
self.runButton.setText('Run')
|
||||
self.runButton.setText(self.tr('Run'))
|
||||
self.buttonBox.addButton(self.runButton, QDialogButtonBox.ActionRole)
|
||||
self.runButton.clicked.connect(self.accept)
|
||||
self.setWindowTitle(self.alg.name)
|
||||
@ -78,11 +78,11 @@ class AlgorithmExecutionDialog(QDialog):
|
||||
self.verticalLayout.setMargin(9)
|
||||
self.tabWidget = QTabWidget()
|
||||
self.tabWidget.setMinimumWidth(300)
|
||||
self.tabWidget.addTab(self.mainWidget, 'Parameters')
|
||||
self.tabWidget.addTab(self.mainWidget, self.tr('Parameters'))
|
||||
self.verticalLayout.addWidget(self.tabWidget)
|
||||
self.logText = QTextEdit()
|
||||
self.logText.readOnly = True
|
||||
self.tabWidget.addTab(self.logText, 'Log')
|
||||
self.tabWidget.addTab(self.logText, self.tr('Log'))
|
||||
self.webView = QWebView()
|
||||
html = None
|
||||
url = None
|
||||
@ -93,15 +93,16 @@ class AlgorithmExecutionDialog(QDialog):
|
||||
else:
|
||||
url = QUrl(help)
|
||||
else:
|
||||
html = '<h2>Sorry, no help is available for this \
|
||||
algorithm.</h2>'
|
||||
html = self.tr('<h2>Sorry, no help is available for this '
|
||||
'algorithm.</h2>')
|
||||
try:
|
||||
if html:
|
||||
self.webView.setHtml(html)
|
||||
elif url:
|
||||
self.webView.load(url)
|
||||
except:
|
||||
self.webView.setHtml('<h2>Could not open help file :-( </h2>')
|
||||
self.webView.setHtml(
|
||||
self.tr('<h2>Could not open help file :-( </h2>'))
|
||||
self.tabWidget.addTab(self.webView, 'Help')
|
||||
self.verticalLayout.addWidget(self.progressLabel)
|
||||
self.verticalLayout.addWidget(self.progress)
|
||||
@ -195,17 +196,18 @@ class AlgorithmExecutionDialog(QDialog):
|
||||
try:
|
||||
self.setParamValues()
|
||||
if checkCRS and not self.alg.checkInputCRS():
|
||||
reply = QMessageBox.question(self, "Unmatching CRS's",
|
||||
'Layers do not all use the same CRS.\n'
|
||||
+ 'This can cause unexpected results.\n'
|
||||
+ 'Do you want to continue?',
|
||||
QMessageBox.Yes | QMessageBox.No,
|
||||
QMessageBox.No)
|
||||
reply = QMessageBox.question(self, self.tr("Unmatching CRS's"),
|
||||
self.tr('Layers do not all use the same CRS. This can '
|
||||
'cause unexpected results.\nDo you want to'
|
||||
'continue?'),
|
||||
QMessageBox.Yes | QMessageBox.No,
|
||||
QMessageBox.No)
|
||||
if reply == QMessageBox.No:
|
||||
return
|
||||
msg = self.alg.checkParameterValuesBeforeExecuting()
|
||||
if msg:
|
||||
QMessageBox.warning(self, 'Unable to execute algorithm', msg)
|
||||
QMessageBox.warning(
|
||||
self, self.tr('Unable to execute algorithm'), msg)
|
||||
return
|
||||
self.runButton.setEnabled(False)
|
||||
self.buttonBox.button(
|
||||
@ -221,10 +223,11 @@ class AlgorithmExecutionDialog(QDialog):
|
||||
|
||||
self.tabWidget.setCurrentIndex(1) # Log tab
|
||||
self.progress.setMaximum(0)
|
||||
self.progressLabel.setText('Processing algorithm...')
|
||||
self.progressLabel.setText(self.tr('Processing algorithm...'))
|
||||
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
|
||||
|
||||
self.setInfo('<b>Algorithm %s starting...</b>' % self.alg.name)
|
||||
self.setInfo(
|
||||
self.tr('<b>Algorithm %s starting...</b>') % self.alg.name)
|
||||
# make sure the log tab is visible before executing the algorithm
|
||||
try:
|
||||
self.repaint()
|
||||
@ -254,12 +257,13 @@ class AlgorithmExecutionDialog(QDialog):
|
||||
palette = ex.widget.palette()
|
||||
palette.setColor(QPalette.Base, QColor(255, 255, 0))
|
||||
ex.widget.setPalette(palette)
|
||||
self.progressLabel.setText('<b>Missing parameter value: '
|
||||
+ ex.parameter.description + '</b>')
|
||||
self.progressLabel.setText(
|
||||
self.tr('<b>Missing parameter value: %s</b>' % ex.parameter.description))
|
||||
return
|
||||
except:
|
||||
QMessageBox.critical(self, 'Unable to execute algorithm',
|
||||
'Wrong or missing parameter values')
|
||||
QMessageBox.critical(self,
|
||||
self.tr('Unable to execute algorithm'),
|
||||
self.tr('Wrong or missing parameter values'))
|
||||
|
||||
def finish(self):
|
||||
keepOpen = ProcessingConfig.getSetting(
|
||||
@ -274,8 +278,9 @@ class AlgorithmExecutionDialog(QDialog):
|
||||
else:
|
||||
self.resetGUI()
|
||||
if self.alg.getHTMLOutputsCount() > 0:
|
||||
self.setInfo('HTML output has been generated by this '
|
||||
+ 'algorithm.\nOpen the results dialog to check it.')
|
||||
self.setInfo(
|
||||
self.tr('HTML output has been generated by this algorithm.'
|
||||
'\nOpen the results dialog to check it.'))
|
||||
|
||||
def error(self, msg):
|
||||
QApplication.restoreOverrideCursor()
|
||||
|
@ -62,11 +62,11 @@ class BatchInputSelectionPanel(QtGui.QWidget):
|
||||
popupmenu = QtGui.QMenu()
|
||||
if not (isinstance(self.param, ParameterMultipleInput)
|
||||
and self.param.datatype == ParameterMultipleInput.TYPE_FILE):
|
||||
selectLayerAction = QtGui.QAction('Select from open layers',
|
||||
selectLayerAction = QtGui.QAction(self.tr('Select from open layers'),
|
||||
self.pushButton)
|
||||
selectLayerAction.triggered.connect(self.showLayerSelectionDialog)
|
||||
popupmenu.addAction(selectLayerAction)
|
||||
selectFileAction = QtGui.QAction('Select from filesystem',
|
||||
selectFileAction = QtGui.QAction(self.tr('Select from filesystem'),
|
||||
self.pushButton)
|
||||
selectFileAction.triggered.connect(self.showFileSelectionDialog)
|
||||
popupmenu.addAction(selectFileAction)
|
||||
@ -114,8 +114,8 @@ class BatchInputSelectionPanel(QtGui.QWidget):
|
||||
else:
|
||||
path = ''
|
||||
|
||||
ret = QtGui.QFileDialog.getOpenFileNames(self, 'Open file', path,
|
||||
'All files(*.*);;' + self.param.getFileFilter())
|
||||
ret = QtGui.QFileDialog.getOpenFileNames(self, self.tr('Open file'), path,
|
||||
self.tr('All files(*.*);;') + self.param.getFileFilter())
|
||||
if ret:
|
||||
files = list(ret)
|
||||
if len(files) == 1:
|
||||
|
@ -63,7 +63,7 @@ class BatchOutputSelectionPanel(QtGui.QWidget):
|
||||
|
||||
def showSelectionDialog(self):
|
||||
filefilter = self.output.getFileFilter(self.alg)
|
||||
filename = QtGui.QFileDialog.getSaveFileName(self, 'Save file', '',
|
||||
filename = QtGui.QFileDialog.getSaveFileName(self, self.tr('Save file'), '',
|
||||
filefilter)
|
||||
if filename:
|
||||
filename = unicode(filename)
|
||||
|
@ -63,11 +63,11 @@ class BatchProcessingDialog(AlgorithmExecutionDialog):
|
||||
AlgorithmExecutionDialog.__init__(self, alg, self.table)
|
||||
self.setWindowModality(1)
|
||||
self.resize(800, 500)
|
||||
self.setWindowTitle('Batch Processing - ' + self.alg.name)
|
||||
self.setWindowTitle(self.tr('Batch Processing - %s') % self.alg.name)
|
||||
for param in self.alg.parameters:
|
||||
if param.isAdvanced:
|
||||
self.advancedButton = QtGui.QPushButton()
|
||||
self.advancedButton.setText('Show advanced parameters')
|
||||
self.advancedButton.setText(self.tr('Show advanced parameters'))
|
||||
self.advancedButton.setMaximumWidth(150)
|
||||
self.buttonBox.addButton(self.advancedButton,
|
||||
QtGui.QDialogButtonBox.ActionRole)
|
||||
@ -75,11 +75,11 @@ class BatchProcessingDialog(AlgorithmExecutionDialog):
|
||||
self.showAdvancedParametersClicked)
|
||||
break
|
||||
self.addRowButton = QtGui.QPushButton()
|
||||
self.addRowButton.setText('Add row')
|
||||
self.addRowButton.setText(self.tr('Add row'))
|
||||
self.buttonBox.addButton(self.addRowButton,
|
||||
QtGui.QDialogButtonBox.ActionRole)
|
||||
self.deleteRowButton = QtGui.QPushButton()
|
||||
self.deleteRowButton.setText('Delete row')
|
||||
self.deleteRowButton.setText(self.tr('Delete row'))
|
||||
self.buttonBox.addButton(self.addRowButton,
|
||||
QtGui.QDialogButtonBox.ActionRole)
|
||||
self.buttonBox.addButton(self.deleteRowButton,
|
||||
@ -151,7 +151,7 @@ class BatchProcessingDialog(AlgorithmExecutionDialog):
|
||||
|
||||
if self.alg.getVisibleOutputsCount():
|
||||
self.table.setHorizontalHeaderItem(i,
|
||||
QtGui.QTableWidgetItem('Load in QGIS'))
|
||||
QtGui.QTableWidgetItem(self.tr('Load in QGIS')))
|
||||
|
||||
for i in range(3):
|
||||
self.addRow()
|
||||
@ -168,9 +168,8 @@ class BatchProcessingDialog(AlgorithmExecutionDialog):
|
||||
continue
|
||||
widget = self.table.cellWidget(row, col)
|
||||
if not self.setParameterValueFromWidget(param, widget, alg):
|
||||
self.progressLabel.setText('<b>Missing parameter value: '
|
||||
+ param.description + ' (row ' + str(row + 1)
|
||||
+ ')</b>')
|
||||
self.progressLabel.setText(
|
||||
self.tr('<b>Missing parameter value: %s (row %d)</b>') % (param.description, row + 1))
|
||||
self.algs = None
|
||||
return
|
||||
col += 1
|
||||
@ -184,9 +183,7 @@ class BatchProcessingDialog(AlgorithmExecutionDialog):
|
||||
col += 1
|
||||
else:
|
||||
self.progressLabel.setText(
|
||||
'<b>Wrong or missing parameter value: '
|
||||
+ out.description + ' (row ' + str(row + 1)
|
||||
+ ')</b>')
|
||||
self.tr('<b>Wrong or missing parameter value: %s (row %d)</b>') % (out.description, row + 1))
|
||||
self.algs = None
|
||||
return
|
||||
self.algs.append(alg)
|
||||
@ -206,13 +203,12 @@ class BatchProcessingDialog(AlgorithmExecutionDialog):
|
||||
except:
|
||||
pass
|
||||
for (i, alg) in enumerate(self.algs):
|
||||
self.setBaseText('Processing algorithm ' + str(i + 1) + '/'
|
||||
+ str(len(self.algs)) + '...')
|
||||
self.setInfo('<b>Algorithm %s starting...</b>' % alg.name)
|
||||
self.setBaseText(self.tr('Processing algorithm %d/%d...') %(i + 1, len(self.algs)))
|
||||
self.setInfo(self.tr('<b>Algorithm %s starting...</b>' % alg.name))
|
||||
if runalg(alg, self) and not self.canceled:
|
||||
if self.load[i]:
|
||||
handleAlgorithmResults(alg, self, False)
|
||||
self.setInfo('Algorithm %s correctly executed...' % alg.name)
|
||||
self.setInfo(self.tr('Algorithm %s correctly executed...') % alg.name)
|
||||
else:
|
||||
QApplication.restoreOverrideCursor()
|
||||
return
|
||||
@ -260,8 +256,8 @@ class BatchProcessingDialog(AlgorithmExecutionDialog):
|
||||
self.createSummaryTable()
|
||||
QApplication.restoreOverrideCursor()
|
||||
self.table.setEnabled(True)
|
||||
QMessageBox.information(self, 'Batch processing',
|
||||
'Batch processing successfully completed!')
|
||||
QMessageBox.information(self, self.tr('Batch processing'),
|
||||
self.tr('Batch processing successfully completed!'))
|
||||
|
||||
def setParameterValueFromWidget(self, param, widget, alg=None):
|
||||
if isinstance(param, (ParameterRaster, ParameterVector,
|
||||
@ -291,8 +287,8 @@ class BatchProcessingDialog(AlgorithmExecutionDialog):
|
||||
item = BatchInputSelectionPanel(param, row, col, self)
|
||||
elif isinstance(param, ParameterBoolean):
|
||||
item = QtGui.QComboBox()
|
||||
item.addItem('Yes')
|
||||
item.addItem('No')
|
||||
item.addItem(self.tr('Yes'))
|
||||
item.addItem(self.tr('No'))
|
||||
if param.default:
|
||||
item.setCurrentIndex(0)
|
||||
else:
|
||||
@ -341,17 +337,17 @@ class BatchProcessingDialog(AlgorithmExecutionDialog):
|
||||
|
||||
if self.alg.getVisibleOutputsCount():
|
||||
item = QtGui.QComboBox()
|
||||
item.addItem('Yes')
|
||||
item.addItem('No')
|
||||
item.addItem(self.tr('Yes'))
|
||||
item.addItem(self.tr('No'))
|
||||
item.setCurrentIndex(0)
|
||||
self.table.setCellWidget(self.table.rowCount() - 1, i, item)
|
||||
|
||||
def showAdvancedParametersClicked(self):
|
||||
self.showAdvanced = not self.showAdvanced
|
||||
if self.showAdvanced:
|
||||
self.advancedButton.setText('Hide advanced parameters')
|
||||
self.advancedButton.setText(self.tr('Hide advanced parameters'))
|
||||
else:
|
||||
self.advancedButton.setText('Show advanced parameters')
|
||||
self.advancedButton.setText(self.tr('Show advanced parameters'))
|
||||
i = 0
|
||||
for param in self.alg.parameters:
|
||||
if param.isAdvanced:
|
||||
|
@ -74,7 +74,7 @@ class ConfigDialog(QDialog, Ui_DlgConfig):
|
||||
settings = ProcessingConfig.getSettings()
|
||||
|
||||
rootItem = self.model.invisibleRootItem()
|
||||
priorityKeys = ['General', 'Models', 'Scripts']
|
||||
priorityKeys = [self.tr('General'), self.tr('Models'), self.tr('Scripts')]
|
||||
for group in priorityKeys:
|
||||
groupItem = QStandardItem(group)
|
||||
icon = ProcessingConfig.getGroupIcon(group)
|
||||
@ -141,7 +141,7 @@ class ConfigDialog(QDialog, Ui_DlgConfig):
|
||||
setting.value = value
|
||||
except ValueError:
|
||||
QMessageBox.critical(self, self.tr('Wrong value'),
|
||||
self.tr('Wrong parameter value:\n%1').arg(value))
|
||||
self.tr('Wrong parameter value:\n%1') % value)
|
||||
return
|
||||
else:
|
||||
setting.value = unicode(self.items[setting].text())
|
||||
|
@ -42,7 +42,7 @@ class CouldNotLoadResultsDialog(QtGui.QDialog):
|
||||
|
||||
def setupUi(self):
|
||||
self.resize(600, 350)
|
||||
self.setWindowTitle('Problem loading output layers')
|
||||
self.setWindowTitle(self.tr('Problem loading output layers'))
|
||||
layout = QVBoxLayout()
|
||||
browser = QtGui.QTextBrowser()
|
||||
browser.setOpenLinks(False)
|
||||
@ -50,7 +50,7 @@ class CouldNotLoadResultsDialog(QtGui.QDialog):
|
||||
html = self.alg.getPostProcessingErrorMessage(self.wrongLayers)
|
||||
browser.setHtml(html)
|
||||
button = QPushButton()
|
||||
button.setText('Close')
|
||||
button.setText(self.tr('Close'))
|
||||
button.clicked.connect(self.closeButtonPressed)
|
||||
buttonBox = QtGui.QDialogButtonBox()
|
||||
buttonBox.setOrientation(QtCore.Qt.Horizontal)
|
||||
|
@ -37,7 +37,7 @@ class CreateNewScriptAction(ToolboxAction):
|
||||
|
||||
def __init__(self, actionName, scriptType):
|
||||
self.name = actionName
|
||||
self.group = 'Tools'
|
||||
self.group = self.tr('Tools', 'CreateNewScriptAction')
|
||||
self.scriptType = scriptType
|
||||
|
||||
def getIcon(self):
|
||||
|
@ -53,7 +53,8 @@ class DeleteScriptAction(ContextAction):
|
||||
def execute(self, alg):
|
||||
reply = QMessageBox.question(None,
|
||||
self.tr('Confirmation', 'DeleteScriptAction'),
|
||||
self.tr('Are you sure you want to delete this script?', 'DeleteScriptAction'),
|
||||
self.tr('Are you sure you want to delete this script?',
|
||||
'DeleteScriptAction'),
|
||||
QMessageBox.Yes | QMessageBox.No,
|
||||
QMessageBox.No)
|
||||
if reply == QMessageBox.Yes:
|
||||
|
@ -51,7 +51,7 @@ class ExtentSelectionPanel(QtGui.QWidget):
|
||||
if self.canUseAutoExtent():
|
||||
if hasattr(self.text, 'setPlaceholderText'):
|
||||
self.text.setPlaceholderText(
|
||||
'[Leave blank to use min covering extent]')
|
||||
self.tr('[Leave blank to use min covering extent]'))
|
||||
self.horizontalLayout.addWidget(self.text)
|
||||
self.pushButton = QtGui.QPushButton()
|
||||
self.pushButton.setText('...')
|
||||
@ -74,17 +74,17 @@ class ExtentSelectionPanel(QtGui.QWidget):
|
||||
|
||||
def buttonPushed(self):
|
||||
popupmenu = QMenu()
|
||||
useLayerExtentAction = QtGui.QAction('Use layer/canvas extent',
|
||||
useLayerExtentAction = QtGui.QAction(self.tr('Use layer/canvas extent'),
|
||||
self.pushButton)
|
||||
useLayerExtentAction.triggered.connect(self.useLayerExtent)
|
||||
popupmenu.addAction(useLayerExtentAction)
|
||||
selectOnCanvasAction = QtGui.QAction('Select extent on canvas',
|
||||
selectOnCanvasAction = QtGui.QAction(self.tr('Select extent on canvas'),
|
||||
self.pushButton)
|
||||
selectOnCanvasAction.triggered.connect(self.selectOnCanvas)
|
||||
popupmenu.addAction(selectOnCanvasAction)
|
||||
if self.canUseAutoExtent():
|
||||
useMincoveringExtentAction = \
|
||||
QtGui.QAction('Use min covering extent from input layers',
|
||||
QtGui.QAction(self.tr('Use min covering extent from input layers'),
|
||||
self.pushButton)
|
||||
useMincoveringExtentAction.triggered.connect(
|
||||
self.useMinCoveringExtent)
|
||||
|
@ -44,7 +44,7 @@ class FileSelectionPanel(QtGui.QWidget):
|
||||
QtGui.QSizePolicy.Expanding)
|
||||
self.horizontalLayout.addWidget(self.text)
|
||||
self.pushButton = QtGui.QPushButton()
|
||||
self.pushButton.setText('...')
|
||||
self.pushButton.setText(self.tr('...'))
|
||||
self.pushButton.clicked.connect(self.showSelectionDialog)
|
||||
self.horizontalLayout.addWidget(self.pushButton)
|
||||
self.setLayout(self.horizontalLayout)
|
||||
@ -64,13 +64,13 @@ class FileSelectionPanel(QtGui.QWidget):
|
||||
|
||||
if self.isFolder:
|
||||
folder = QtGui.QFileDialog.getExistingDirectory(self,
|
||||
'Select folder', path)
|
||||
self.tr('Select folder'), path)
|
||||
if folder:
|
||||
self.text.setText(str(folder))
|
||||
settings.setValue('/Processing/LastInputPath',
|
||||
os.path.dirname(unicode(folder)))
|
||||
else:
|
||||
filenames = QtGui.QFileDialog.getOpenFileNames(self, 'Open file',
|
||||
filenames = QtGui.QFileDialog.getOpenFileNames(self, self.tr('Open file'),
|
||||
path, '*.' + self.ext)
|
||||
if filenames:
|
||||
self.text.setText(u';'.join(filenames))
|
||||
|
@ -42,7 +42,7 @@ class FixedTableDialog(QtGui.QDialog):
|
||||
|
||||
def setupUi(self):
|
||||
self.resize(600, 350)
|
||||
self.setWindowTitle('Fixed Table')
|
||||
self.setWindowTitle(self.tr('Fixed Table'))
|
||||
self.horizontalLayout = QtGui.QHBoxLayout()
|
||||
self.horizontalLayout.setSpacing(2)
|
||||
self.horizontalLayout.setMargin(0)
|
||||
@ -62,10 +62,10 @@ class FixedTableDialog(QtGui.QDialog):
|
||||
self.table.setRowHeight(i, 22)
|
||||
self.table.verticalHeader().setVisible(False)
|
||||
self.addRowButton = QtGui.QPushButton()
|
||||
self.addRowButton.setText('Add row')
|
||||
self.addRowButton.setText(self.tr('Add row'))
|
||||
self.addRowButton.setEnabled(not self.param.fixedNumOfRows)
|
||||
self.removeRowButton = QtGui.QPushButton()
|
||||
self.removeRowButton.setText('Remove row')
|
||||
self.removeRowButton.setText(self.tr('Remove row'))
|
||||
self.removeRowButton.setEnabled(not self.param.fixedNumOfRows)
|
||||
self.buttonBox.addButton(self.addRowButton,
|
||||
QtGui.QDialogButtonBox.ActionRole)
|
||||
@ -108,4 +108,4 @@ class FixedTableDialog(QtGui.QDialog):
|
||||
self.table.setRowHeight(self.table.rowCount() - 1, 22)
|
||||
for i in range(self.table.columnCount()):
|
||||
self.table.setItem(self.table.rowCount() - 1, i,
|
||||
QtGui.QTableWidgetItem('0'))
|
||||
QtGui.QTableWidgetItem('0'))
|
||||
|
@ -43,13 +43,12 @@ class FixedTablePanel(QtGui.QWidget):
|
||||
self.horizontalLayout.setSpacing(2)
|
||||
self.horizontalLayout.setMargin(0)
|
||||
self.label = QtGui.QLabel()
|
||||
self.label.setText('Fixed table ' + str(len(param.cols)) + ' X '
|
||||
+ str(param.numRows))
|
||||
self.label.setText(self.tr('Fixed table %dx%d' % (len(param.cols), param.numRows)))
|
||||
self.label.setSizePolicy(QtGui.QSizePolicy.Expanding,
|
||||
QtGui.QSizePolicy.Expanding)
|
||||
self.horizontalLayout.addWidget(self.label)
|
||||
self.pushButton = QtGui.QPushButton()
|
||||
self.pushButton.setText('...')
|
||||
self.pushButton.setText(self.tr('...'))
|
||||
self.pushButton.clicked.connect(self.showFixedTableDialog)
|
||||
self.horizontalLayout.addWidget(self.pushButton)
|
||||
self.setLayout(self.horizontalLayout)
|
||||
|
@ -44,8 +44,8 @@ from processing.gui.Help2Html import getDescription, ALG_DESC, ALG_VERSION, ALG_
|
||||
class GetScriptsAction(ToolboxAction):
|
||||
|
||||
def __init__(self):
|
||||
self.name = "Get scripts from on-line scripts collection"
|
||||
self.group = 'Tools'
|
||||
self.name = self.tr('Get scripts from on-line scripts collection', 'GetScriptsAction')
|
||||
self.group = self.tr('Tools', 'GetScriptsAction')
|
||||
|
||||
def getIcon(self):
|
||||
return QIcon(':/processing/images/script.png')
|
||||
@ -58,14 +58,16 @@ class GetScriptsAction(ToolboxAction):
|
||||
self.toolbox.updateProvider('script')
|
||||
|
||||
except HTTPError:
|
||||
QMessageBox.critical(iface.mainWindow(), "Connection problem", "Could not connect to scripts/models repository")
|
||||
QMessageBox.critical(iface.mainWindow(),
|
||||
self.tr('Connection problem', 'GetScriptsAction'),
|
||||
self.tr('Could not connect to scripts/models repository', 'GetScriptsAction'))
|
||||
|
||||
|
||||
class GetModelsAction(ToolboxAction):
|
||||
|
||||
def __init__(self):
|
||||
self.name = "Get models from on-line scripts collection"
|
||||
self.group = 'Tools'
|
||||
self.name = self.tr('Get models from on-line scripts collection', 'GetModelsAction')
|
||||
self.group = self.tr('Tools', 'GetModelsAction')
|
||||
|
||||
def getIcon(self):
|
||||
return QIcon(':/processing/images/model.png')
|
||||
@ -77,7 +79,9 @@ class GetModelsAction(ToolboxAction):
|
||||
if dlg.updateToolbox:
|
||||
self.toolbox.updateProvider('model')
|
||||
except HTTPError:
|
||||
QMessageBox.critical(iface.mainWindow(), "Connection problem", "Could not connect to scripts/models repository")
|
||||
QMessageBox.critical(iface.mainWindow(),
|
||||
self.tr('Connection problem', 'GetModelsAction'),
|
||||
self.tr('Could not connect to scripts/models repository', 'GetModelsAction'))
|
||||
|
||||
|
||||
def readUrl(url):
|
||||
@ -109,11 +113,11 @@ class GetScriptsAndModelsDialog(QDialog, Ui_DlgGetScriptsAndModels):
|
||||
self.resourceType = resourceType
|
||||
if self.resourceType == self.MODELS:
|
||||
self.folder = ModelerUtils.modelsFolder()
|
||||
self.urlBase = "https://raw.githubusercontent.com/qgis/QGIS-Processing/master/models/"
|
||||
self.urlBase = 'https://raw.githubusercontent.com/qgis/QGIS-Processing/master/models/'
|
||||
self.icon = QtGui.QIcon(os.path.dirname(__file__) + '/../images/model.png')
|
||||
else:
|
||||
self.folder = ScriptUtils.scriptsFolder()
|
||||
self.urlBase = "https://raw.githubusercontent.com/qgis/QGIS-Processing/master/scripts/"
|
||||
self.urlBase = 'https://raw.githubusercontent.com/qgis/QGIS-Processing/master/scripts/'
|
||||
self.icon = QtGui.QIcon(os.path.dirname(__file__) + '/../images/script.png')
|
||||
self.lastSelectedItem = None
|
||||
self.setupUi(self)
|
||||
@ -125,16 +129,16 @@ class GetScriptsAndModelsDialog(QDialog, Ui_DlgGetScriptsAndModels):
|
||||
|
||||
def populateTree(self):
|
||||
self.uptodateItem = QTreeWidgetItem()
|
||||
self.uptodateItem.setText(0, "Installed")
|
||||
self.uptodateItem.setText(0, self.tr('Installed'))
|
||||
self.toupdateItem = QTreeWidgetItem()
|
||||
self.toupdateItem.setText(0, "Upgradable")
|
||||
self.toupdateItem.setText(0, self.tr('Upgradable'))
|
||||
self.notinstalledItem = QTreeWidgetItem()
|
||||
self.notinstalledItem.setText(0, "Not installed")
|
||||
self.notinstalledItem.setText(0, self.tr('Not installed'))
|
||||
self.toupdateItem.setIcon(0, self.icon)
|
||||
self.uptodateItem.setIcon(0, self.icon)
|
||||
self.notinstalledItem.setIcon(0, self.icon)
|
||||
resources = readUrl(self.urlBase + "list.txt").splitlines()
|
||||
resources = [r.split(",") for r in resources]
|
||||
resources = readUrl(self.urlBase + 'list.txt').splitlines()
|
||||
resources = [r.split(',') for r in resources]
|
||||
for filename, version, name in resources:
|
||||
treeBranch = self.getTreeBranchForState(filename, float(version))
|
||||
item = TreeItem(filename, name, self.icon)
|
||||
@ -151,15 +155,15 @@ class GetScriptsAndModelsDialog(QDialog, Ui_DlgGetScriptsAndModels):
|
||||
def currentItemChanged(self, item, prev):
|
||||
if isinstance(item, TreeItem):
|
||||
try:
|
||||
url = self.urlBase + item.filename.replace(" ","%20") + ".help"
|
||||
url = self.urlBase + item.filename.replace(' ', '%20') + '.help'
|
||||
helpContent = readUrl(url)
|
||||
descriptions = json.loads(helpContent)
|
||||
html = "<h2>%s</h2>" % item.name
|
||||
html+="<p><b>Description:</b> " + getDescription(ALG_DESC, descriptions)+"</p>"
|
||||
html+="<p><b>Created by:</b> " + getDescription(ALG_CREATOR, descriptions)+"</p>"
|
||||
html+="<p><b>Version:</b> " + getDescription(ALG_VERSION, descriptions)+"</p>"
|
||||
html = '<h2>%s</h2>' % item.name
|
||||
html += self.tr('<p><b>Description:</b>%s</p>') % getDescription(ALG_DESC, descriptions)
|
||||
html += self.tr('<p><b>Created by:</b>%s') % getDescription(ALG_CREATOR, descriptions)
|
||||
html += self.tr('<p><b>Version:</b>%s') % getDescription(ALG_VERSION, descriptions)
|
||||
except HTTPError, e:
|
||||
html = "<h2>No detailed description available for this script</h2>"
|
||||
html = self.tr('<h2>No detailed description available for this script</h2>')
|
||||
self.webView.setHtml(html)
|
||||
else:
|
||||
self.webView.setHtml(self.HELP_TEXT)
|
||||
@ -168,7 +172,7 @@ class GetScriptsAndModelsDialog(QDialog, Ui_DlgGetScriptsAndModels):
|
||||
if not os.path.exists(os.path.join(self.folder, filename)):
|
||||
return self.notinstalledItem
|
||||
else:
|
||||
helpFile = os.path.join(self.folder, filename + ".help")
|
||||
helpFile = os.path.join(self.folder, filename + '.help')
|
||||
try:
|
||||
with open(helpFile) as f:
|
||||
helpContent = json.load(f)
|
||||
@ -199,16 +203,17 @@ class GetScriptsAndModelsDialog(QDialog, Ui_DlgGetScriptsAndModels):
|
||||
self.progressBar.setMaximum(len(toDownload))
|
||||
for i, filename in enumerate(toDownload):
|
||||
QCoreApplication.processEvents()
|
||||
url = self.urlBase + filename.replace(" ","%20")
|
||||
url = self.urlBase + filename.replace(' ','%20')
|
||||
try:
|
||||
code = readUrl(url)
|
||||
path = os.path.join(self.folder, filename)
|
||||
with open(path, "w") as f:
|
||||
with open(path, 'w') as f:
|
||||
f.write(code)
|
||||
self.progressBar.setValue(i + 1)
|
||||
except HTTPError:
|
||||
QMessageBox.critical(iface.mainWindow(), "Connection problem",
|
||||
"Could not download file :" + filename)
|
||||
QMessageBox.critical(iface.mainWindow(),
|
||||
self.tr('Connection problem'),
|
||||
self.tr('Could not download file: %s') % filename)
|
||||
return
|
||||
|
||||
|
||||
|
@ -68,20 +68,20 @@ def getHtmlFromHelpFile(alg, helpFile):
|
||||
|
||||
def getHtmlFromDescriptionsDict(alg, descriptions):
|
||||
|
||||
s = '<html><body><h2>Algorithm description</h2>\n'
|
||||
s = tr('<html><body><h2>Algorithm description</h2>\n')
|
||||
s += '<p>' + getDescription(ALG_DESC, descriptions) + '</p>\n'
|
||||
s += '<h2>Input parameters</h2>\n'
|
||||
s += tr('<h2>Input parameters</h2>\n')
|
||||
for param in alg.parameters:
|
||||
s += '<h3>' + param.description + '</h3>\n'
|
||||
s += '<p>' + getDescription(param.name, descriptions) + '</p>\n'
|
||||
s += '<h2>Outputs</h2>\n'
|
||||
s += tr('<h2>Outputs</h2>\n')
|
||||
for out in alg.outputs:
|
||||
s += '<h3>' + out.description + '</h3>\n'
|
||||
s += '<p>' + getDescription(out.name, descriptions) + '</p>\n'
|
||||
s += '<br>'
|
||||
s += '<p align="right">Algorithm author: ' + getDescription(ALG_CREATOR, descriptions) + '</p>'
|
||||
s += '<p align="right">Help author: ' + getDescription(ALG_HELP_CREATOR, descriptions) + '</p>'
|
||||
s += '<p align="right">Algorithm version: ' + getDescription(ALG_VERSION, descriptions) + '</p>'
|
||||
s += tr('<p align="right">Algorithm author: %s</p>') % getDescription(ALG_CREATOR, descriptions)
|
||||
s += tr('<p align="right">Help author: %s</p>') + getDescription(ALG_HELP_CREATOR, descriptions)
|
||||
s += tr('<p align="right">Algorithm version: %s</p>') + getDescription(ALG_VERSION, descriptions)
|
||||
s += '</body></html>'
|
||||
return s
|
||||
|
||||
@ -92,3 +92,5 @@ def getDescription(name, descriptions):
|
||||
else:
|
||||
return ''
|
||||
|
||||
def tr(string):
|
||||
return QtCore.QCoreApplication.translate('Help2Html', string)
|
||||
|
@ -58,7 +58,8 @@ class HelpEditionDialog(QDialog, Ui_DlgHelpEdition):
|
||||
with open(helpfile) as f:
|
||||
self.descriptions = json.load(f)
|
||||
except Exception, e:
|
||||
ProcessingLog.addToLog(ProcessingLog.LOG_WARNING, "Cannot open help file: " + helpfile)
|
||||
ProcessingLog.addToLog(ProcessingLog.LOG_WARNING,
|
||||
self.tr('Cannot open help file: %s') % helpfile)
|
||||
|
||||
self.currentName = self.ALG_DESC
|
||||
if self.ALG_DESC in self.descriptions:
|
||||
@ -82,32 +83,32 @@ class HelpEditionDialog(QDialog, Ui_DlgHelpEdition):
|
||||
with open(self.alg.descriptionFile + '.help', 'w') as f:
|
||||
json.dump(self.descriptions, f)
|
||||
except Exception, e:
|
||||
QMessageBox.warning(self, 'Error saving help file',
|
||||
'Help file could not be saved.\n'
|
||||
'Check that you have permission to modify the help\n'
|
||||
'file. You might not have permission if you are \n'
|
||||
'editing an example model or script, since they \n'
|
||||
'are stored on the installation folder')
|
||||
QMessageBox.warning(self, self.tr('Error saving help file'),
|
||||
self.tr('Help file could not be saved.\n'
|
||||
'Check that you have permission to modify the help\n'
|
||||
'file. You might not have permission if you are \n'
|
||||
'editing an example model or script, since they \n'
|
||||
'are stored on the installation folder'))
|
||||
|
||||
QDialog.accept(self)
|
||||
|
||||
def getHtml(self):
|
||||
s = '<h2>Algorithm description</h2>\n'
|
||||
s = self.tr('<h2>Algorithm description</h2>\n')
|
||||
s += '<p>' + self.getDescription(self.ALG_DESC) + '</p>\n'
|
||||
s += '<h2>Input parameters</h2>\n'
|
||||
s += self.tr('<h2>Input parameters</h2>\n')
|
||||
for param in self.alg.parameters:
|
||||
s += '<h3>' + param.description + '</h3>\n'
|
||||
s += '<p>' + self.getDescription(param.name) + '</p>\n'
|
||||
s += '<h2>Outputs</h2>\n'
|
||||
s += self.tr('<h2>Outputs</h2>\n')
|
||||
for out in self.alg.outputs:
|
||||
s += '<h3>' + out.description + '</h3>\n'
|
||||
s += '<p>' + self.getDescription(out.name) + '</p>\n'
|
||||
return s
|
||||
|
||||
def fillTree(self):
|
||||
item = TreeDescriptionItem('Algorithm description', self.ALG_DESC)
|
||||
item = TreeDescriptionItem(self.tr('Algorithm description'), self.ALG_DESC)
|
||||
self.tree.addTopLevelItem(item)
|
||||
parametersItem = TreeDescriptionItem('Input parameters', None)
|
||||
parametersItem = TreeDescriptionItem(self.tr('Input parameters'), None)
|
||||
self.tree.addTopLevelItem(parametersItem)
|
||||
for param in self.alg.parameters:
|
||||
item = TreeDescriptionItem(param.description, param.name)
|
||||
@ -117,12 +118,12 @@ class HelpEditionDialog(QDialog, Ui_DlgHelpEdition):
|
||||
for out in self.alg.outputs:
|
||||
item = TreeDescriptionItem(out.description, out.name)
|
||||
outputsItem.addChild(item)
|
||||
item = TreeDescriptionItem('Algorithm created by', self.ALG_CREATOR)
|
||||
item = TreeDescriptionItem(self.tr('Algorithm created by'), self.ALG_CREATOR)
|
||||
self.tree.addTopLevelItem(item)
|
||||
item = TreeDescriptionItem('Algorithm help written by',
|
||||
item = TreeDescriptionItem(self.tr('Algorithm help written by'),
|
||||
self.ALG_HELP_CREATOR)
|
||||
self.tree.addTopLevelItem(item)
|
||||
item = TreeDescriptionItem('Algorithm version',
|
||||
item = TreeDescriptionItem(self.tr('Algorithm version'),
|
||||
self.ALG_VERSION)
|
||||
self.tree.addTopLevelItem(item)
|
||||
|
||||
|
@ -77,7 +77,7 @@ class HistoryDialog(QDialog, Ui_DlgHistory):
|
||||
|
||||
def saveLog(self):
|
||||
fileName = QFileDialog.getSaveFileName(self,
|
||||
self.tr('Save file'), '.', 'Log files (*.log *.LOG)')
|
||||
self.tr('Save file'), '.', self.tr('Log files (*.log *.LOG)'))
|
||||
|
||||
if fileName == '':
|
||||
return
|
||||
|
@ -63,7 +63,7 @@ class InputLayerSelectorPanel(QtGui.QWidget):
|
||||
path = ''
|
||||
|
||||
filename = QtGui.QFileDialog.getOpenFileName(self, self.param.description, path,
|
||||
'All files(*.*);;' + self.param.getFileFilter())
|
||||
self.tr('All files(*.*);;') + self.param.getFileFilter())
|
||||
if filename:
|
||||
self.text.addItem(filename, filename)
|
||||
self.text.setCurrentIndex(self.text.count() - 1)
|
||||
|
@ -45,9 +45,8 @@ class MessageBarProgress:
|
||||
|
||||
def error(self, msg):
|
||||
iface.messageBar().clearWidgets()
|
||||
iface.messageBar().pushMessage("Error", msg,
|
||||
level = QgsMessageBar.CRITICAL,
|
||||
duration = 3)
|
||||
iface.messageBar().pushMessage(self.tr('Error'),
|
||||
msg, level=QgsMessageBar.CRITICAL, duration=3)
|
||||
|
||||
def setText(self, text):
|
||||
pass
|
||||
|
@ -36,21 +36,20 @@ class MissingDependencyDialog(QtGui.QDialog):
|
||||
def __init__(self, msg):
|
||||
QtGui.QDialog.__init__(self, None, QtCore.Qt.WindowSystemMenuHint
|
||||
| QtCore.Qt.WindowTitleHint)
|
||||
self.msg = \
|
||||
'<h3>Missing dependency.This algorithm cannot be run :-( </h3>' \
|
||||
+ msg
|
||||
self.msg = self.tr('<h3>Missing dependency.This algorithm cannot '
|
||||
'be run :-( </h3>\n%s') % msg
|
||||
self.setupUi()
|
||||
|
||||
def setupUi(self):
|
||||
self.resize(500, 300)
|
||||
self.setWindowTitle('Missing dependency')
|
||||
self.setWindowTitle(self.tr('Missing dependency'))
|
||||
layout = QVBoxLayout()
|
||||
browser = QtGui.QTextBrowser()
|
||||
browser.setOpenLinks(False)
|
||||
browser.anchorClicked.connect(self.linkClicked)
|
||||
browser.setHtml(self.msg)
|
||||
button = QPushButton()
|
||||
button.setText('Close')
|
||||
button.setText(self.tr('Close'))
|
||||
button.clicked.connect(self.closeButtonPressed)
|
||||
buttonBox = QtGui.QDialogButtonBox()
|
||||
buttonBox.setOrientation(QtCore.Qt.Horizontal)
|
||||
|
@ -42,7 +42,7 @@ class MultipleFileInputDialog(QtGui.QDialog):
|
||||
|
||||
def setupUi(self):
|
||||
self.resize(381, 320)
|
||||
self.setWindowTitle("Multiple selection")
|
||||
self.setWindowTitle(self.tr("Multiple selection"))
|
||||
self.horizontalLayout = QtGui.QHBoxLayout(self)
|
||||
self.horizontalLayout.setSpacing(2)
|
||||
self.horizontalLayout.setMargin(0)
|
||||
@ -92,7 +92,8 @@ class MultipleFileInputDialog(QtGui.QDialog):
|
||||
else :
|
||||
path = QtCore.QDir.currentPath()
|
||||
|
||||
filesOpened = QtGui.QFileDialog.getOpenFileNames( None, "Select the file(s) to use", path, "All files (*.*)" )
|
||||
filesOpened = QtGui.QFileDialog.getOpenFileNames(None,
|
||||
self.tr('Select the file(s) to use'), path, self.tr('All files (*.*)'))
|
||||
|
||||
lastfile = ""
|
||||
for item in filesOpened:
|
||||
|
@ -39,11 +39,11 @@ class MultipleFileInputPanel(QtGui.QWidget):
|
||||
self.horizontalLayout.setSpacing(2)
|
||||
self.horizontalLayout.setMargin(0)
|
||||
self.label = QtGui.QLabel()
|
||||
self.label.setText("0 elements selected")
|
||||
self.label.setText(self.tr('0 elements selected'))
|
||||
self.label.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
|
||||
self.horizontalLayout.addWidget(self.label)
|
||||
self.pushButton = QtGui.QPushButton()
|
||||
self.pushButton.setText("...")
|
||||
self.pushButton.setText(self.tr('...'))
|
||||
self.pushButton.clicked.connect(self.showSelectionDialog)
|
||||
self.horizontalLayout.addWidget(self.pushButton)
|
||||
self.setLayout(self.horizontalLayout)
|
||||
@ -51,11 +51,11 @@ class MultipleFileInputPanel(QtGui.QWidget):
|
||||
def setSelectedItems(self, selected):
|
||||
#no checking is performed!
|
||||
self.selectedoptions = selected
|
||||
self.label.setText(str(len(self.selectedoptions)) + " elements selected")
|
||||
self.label.setText(self.tr('%d elements selected') % len(self.selectedoptions))
|
||||
|
||||
def showSelectionDialog(self):
|
||||
dlg = MultipleFileInputDialog(self.selectedoptions)
|
||||
dlg.exec_()
|
||||
if dlg.selectedoptions != None:
|
||||
self.selectedoptions = dlg.selectedoptions
|
||||
self.label.setText(str(len(self.selectedoptions)) + " elements selected")
|
||||
self.label.setText(self.tr('%d elements selected') % len(self.selectedoptions))
|
||||
|
@ -36,10 +36,11 @@ class ParametersDialog(AlgorithmExecutionDialog):
|
||||
NOT_SELECTED = QtCore.QCoreApplication.translate('ParametersDialog', '[Not selected]')
|
||||
|
||||
def __init__(self, alg):
|
||||
AlgorithmExecutionDialog.__init__(self, alg, self.scrollArea)
|
||||
|
||||
self.paramTable = ParametersPanel(self, alg)
|
||||
self.scrollArea = QtGui.QScrollArea()
|
||||
self.scrollArea.setFrameShape(QtGui.QFrame.NoFrame);
|
||||
self.scrollArea.setWidget(self.paramTable)
|
||||
self.scrollArea.setWidgetResizable(True)
|
||||
AlgorithmExecutionDialog.__init__(self, alg, self.scrollArea)
|
||||
self.executed = False
|
||||
|
@ -71,7 +71,7 @@ from processing.tools import dataobjects
|
||||
|
||||
class ParametersPanel(QWidget):
|
||||
|
||||
NOT_SELECTED = '[Not selected]'
|
||||
NOT_SELECTED = QCoreApplication.translate('ParametersPanel', '[Not selected]')
|
||||
|
||||
def __init__(self, parent, alg):
|
||||
super(ParametersPanel, self).__init__(None)
|
||||
@ -96,7 +96,7 @@ class ParametersPanel(QWidget):
|
||||
for param in self.alg.parameters:
|
||||
if param.isAdvanced:
|
||||
self.advancedButton = QPushButton()
|
||||
self.advancedButton.setText('Show advanced parameters')
|
||||
self.advancedButton.setText(self.tr('Show advanced parameters'))
|
||||
self.advancedButton.setMaximumWidth(250)
|
||||
self.advancedButton.clicked.connect(
|
||||
self.showAdvancedParametersClicked)
|
||||
@ -110,7 +110,7 @@ class ParametersPanel(QWidget):
|
||||
desc += ' (xmin, xmax, ymin, ymax)'
|
||||
try:
|
||||
if param.optional:
|
||||
desc += ' [optional]'
|
||||
desc += self.tr(' [optional]')
|
||||
except:
|
||||
pass
|
||||
widget = self.getWidgetFromParameter(param)
|
||||
@ -126,7 +126,7 @@ class ParametersPanel(QWidget):
|
||||
icon = QIcon(os.path.dirname(__file__)
|
||||
+ '/../images/iterate.png')
|
||||
button.setIcon(icon)
|
||||
button.setToolTip('Iterate over this layer')
|
||||
button.setToolTip(self.tr('Iterate over this layer'))
|
||||
button.setCheckable(True)
|
||||
button.setMaximumWidth(30)
|
||||
button.setMaximumHeight(30)
|
||||
@ -169,7 +169,7 @@ class ParametersPanel(QWidget):
|
||||
self.verticalLayout.addWidget(widget)
|
||||
if isinstance(output, (OutputRaster, OutputVector, OutputTable)):
|
||||
check = QCheckBox()
|
||||
check.setText('Open output file after running algorithm')
|
||||
check.setText(self.tr('Open output file after running algorithm'))
|
||||
check.setChecked(True)
|
||||
self.verticalLayout.addWidget(check)
|
||||
self.checkBoxes[output.name] = check
|
||||
@ -181,9 +181,9 @@ class ParametersPanel(QWidget):
|
||||
def showAdvancedParametersClicked(self):
|
||||
self.showAdvanced = not self.showAdvanced
|
||||
if self.showAdvanced:
|
||||
self.advancedButton.setText('Hide advanced parameters')
|
||||
self.advancedButton.setText(self.tr('Hide advanced parameters'))
|
||||
else:
|
||||
self.advancedButton.setText('Show advanced parameters')
|
||||
self.advancedButton.setText(self.tr('Show advanced parameters'))
|
||||
for param in self.alg.parameters:
|
||||
if param.isAdvanced:
|
||||
self.labels[param.name].setVisible(self.showAdvanced)
|
||||
@ -280,7 +280,7 @@ class ParametersPanel(QWidget):
|
||||
layers = dataobjects.getTables()
|
||||
if len(layers) > 0:
|
||||
if param.optional:
|
||||
item.addItem("[not set]")
|
||||
item.addItem(self.tr("[not set]"))
|
||||
item.addItems(self.getFields(layers[0], param.datatype))
|
||||
elif isinstance(param, ParameterSelection):
|
||||
item = QComboBox()
|
||||
@ -343,7 +343,7 @@ class ParametersPanel(QWidget):
|
||||
widget = self.valueItems[child]
|
||||
widget.clear()
|
||||
if self.alg.getParameterFromName(child).optional:
|
||||
widget.addItem("[not set]")
|
||||
widget.addItem(self.tr("[not set]"))
|
||||
widget.addItems(self.getFields(layer,
|
||||
self.alg.getParameterFromName(child).datatype))
|
||||
|
||||
|
@ -27,6 +27,7 @@ __revision__ = '$Format:%H$'
|
||||
|
||||
import os
|
||||
from PyQt4.QtGui import *
|
||||
from PyQt4.QtCore import *
|
||||
from qgis.core import *
|
||||
from processing.gui.SilentProgress import SilentProgress
|
||||
from processing.core.ProcessingConfig import ProcessingConfig
|
||||
@ -45,7 +46,7 @@ def handleAlgorithmResults(alg, progress=None, showResults=True):
|
||||
htmlResults = False
|
||||
if progress is None:
|
||||
progress = SilentProgress()
|
||||
progress.setText('Loading resulting layers')
|
||||
progress.setText(QCoreApplication.translate('Postprocessing', 'Loading resulting layers'))
|
||||
i = 0
|
||||
for out in alg.outputs:
|
||||
progress.setPercentage(100 * i / float(len(alg.outputs)))
|
||||
|
@ -36,12 +36,12 @@ class RangePanel(QtGui.QWidget):
|
||||
self.horizontalLayout.setSpacing(2)
|
||||
self.horizontalLayout.setMargin(0)
|
||||
self.labelmin = QtGui.QLabel()
|
||||
self.labelmin.setText('Min')
|
||||
self.labelmin.setText(self.tr('Min'))
|
||||
self.textmin = QtGui.QLineEdit()
|
||||
self.textmin.setSizePolicy(QtGui.QSizePolicy.Expanding,
|
||||
QtGui.QSizePolicy.Expanding)
|
||||
self.labelmax = QtGui.QLabel()
|
||||
self.labelmax.setText('Max')
|
||||
self.labelmax.setText(self.tr('Max'))
|
||||
self.textmax = QtGui.QLineEdit()
|
||||
self.textmin.setText(param.default.split(',')[0])
|
||||
self.textmax.setText(param.default.split(',')[1])
|
||||
|
@ -48,8 +48,8 @@ class RenderingStyleFilePanel(QtGui.QWidget):
|
||||
self.setLayout(self.horizontalLayout)
|
||||
|
||||
def showSelectionDialog(self):
|
||||
filename = QtGui.QFileDialog.getOpenFileName(self, 'Select style file'
|
||||
, '', '*.qml')
|
||||
filename = QtGui.QFileDialog.getOpenFileName(self,
|
||||
self.tr('Select style file'), '', self.tr('QGIS Layer Style File (*.qml *.QML)'))
|
||||
if filename:
|
||||
self.text.setText(unicode(filename))
|
||||
|
||||
|
@ -64,9 +64,9 @@ def createTest(text):
|
||||
for out in alg.outputs:
|
||||
filename = (tokens[i])[1:-1]
|
||||
if tokens[i] == str(None):
|
||||
QtGui.QMessageBox.critical(None, 'Error',
|
||||
'Cannot create unit test for that algorithm \
|
||||
execution.\nThe output cannot be a temporary file')
|
||||
QtGui.QMessageBox.critical(None, tr('Error'),
|
||||
tr('Cannot create unit test for that algorithm execution. The '
|
||||
'output cannot be a temporary file'))
|
||||
return
|
||||
s += "\toutput=outputs['" + out.name + "']\n"
|
||||
if isinstance(out, (OutputNumber, OutputString)):
|
||||
@ -111,6 +111,9 @@ def createTest(text):
|
||||
dlg = ShowTestDialog(s)
|
||||
dlg.exec_()
|
||||
|
||||
def tr(string):
|
||||
return QCoreApplication.translate('TestTools', string)
|
||||
|
||||
|
||||
class ShowTestDialog(QtGui.QDialog):
|
||||
|
||||
@ -118,7 +121,7 @@ class ShowTestDialog(QtGui.QDialog):
|
||||
QtGui.QDialog.__init__(self)
|
||||
self.setModal(True)
|
||||
self.resize(600, 400)
|
||||
self.setWindowTitle('Unit test')
|
||||
self.setWindowTitle(self.tr('Unit test'))
|
||||
layout = QVBoxLayout()
|
||||
self.text = QtGui.QTextEdit()
|
||||
self.text.setEnabled(True)
|
||||
|
@ -36,23 +36,28 @@ from processing.modeler.ModelerUtils import ModelerUtils
|
||||
class AddModelFromFileAction(ToolboxAction):
|
||||
|
||||
def __init__(self):
|
||||
self.name = "Add model from file"
|
||||
self.group = 'Tools'
|
||||
self.name = self.tr('Add model from file', 'AddModelFromFileAction')
|
||||
self.group = self.tr('Tools', 'AddModelFromFileAction')
|
||||
|
||||
def getIcon(self):
|
||||
return QtGui.QIcon(os.path.dirname(__file__) + '/../images/model.png')
|
||||
|
||||
def execute(self):
|
||||
filename = QtGui.QFileDialog.getOpenFileName(self.toolbox, 'model files', None,
|
||||
'*.model')
|
||||
filename = QtGui.QFileDialog.getOpenFileName(self.toolbox,
|
||||
self.tr('Open model', 'AddModelFromFileAction'), None,
|
||||
self.tr('Processing model files (*.model *.MODEL)', 'AddModelFromFileAction'))
|
||||
if filename:
|
||||
try:
|
||||
ModelerAlgorithm.fromFile(filename)
|
||||
except WrongModelException:
|
||||
QtGui.QMessageBox.warning(self.toolbox, "Error reading model", "The selected file does not contain a valid model")
|
||||
QtGui.QMessageBox.warning(self.toolbox,
|
||||
self.tr('Error reading model', 'AddModelFromFileAction'),
|
||||
self.tr('The selected file does not contain a valid model', 'AddModelFromFileAction'))
|
||||
return
|
||||
except:
|
||||
QtGui.QMessageBox.warning(self.toolbox, "Error reading model", "Cannot read file")
|
||||
QtGui.QMessageBox.warning(self.toolbox,
|
||||
self.tr('Error reading model', 'AddModelFromFileAction'),
|
||||
self.tr('Cannot read file', 'AddModelFromFileAction'))
|
||||
destFilename = os.path.join(ModelerUtils.modelsFolder(), os.path.basename(filename))
|
||||
shutil.copyfile(filename,destFilename)
|
||||
self.toolbox.updateProvider('script')
|
||||
self.toolbox.updateProvider('model')
|
||||
|
@ -46,13 +46,15 @@ class CalculatorModelerAlgorithm(GeoAlgorithm):
|
||||
def defineCharacteristics(self):
|
||||
self.showInModeler = True
|
||||
self.showInToolbox = False
|
||||
self.name = 'Calculator'
|
||||
self.group = 'Modeler-only tools'
|
||||
self.addParameter(ParameterString(FORMULA, 'Formula', ''))
|
||||
self.name = self.tr('Calculator', 'CalculatorModelerAlgorithm')
|
||||
self.group = self.tr('Modeler-only tools', 'CalculatorModelerAlgorithm')
|
||||
self.addParameter(ParameterString(FORMULA,
|
||||
self.tr('Formula', 'CalculatorModelerAlgorithm'), ''))
|
||||
for i in range(AVAILABLE_VARIABLES):
|
||||
self.addParameter(ParameterNumber(NUMBER
|
||||
+ str(i), 'dummy'))
|
||||
self.addOutput(OutputNumber(RESULT, 'Result'))
|
||||
self.addOutput(OutputNumber(RESULT,
|
||||
self.tr('Result', 'CalculatorModelerAlgorithm')))
|
||||
|
||||
def processAlgorithm(self, progress):
|
||||
formula = self.getParameterValue(FORMULA)
|
||||
@ -64,7 +66,8 @@ class CalculatorModelerAlgorithm(GeoAlgorithm):
|
||||
result = eval(formula)
|
||||
self.setOutputValue(RESULT, result)
|
||||
except:
|
||||
raise GeoAlgorithmExecutionException('Wrong formula: ' + formula)
|
||||
raise GeoAlgorithmExecutionException(
|
||||
self.tr('Wrong formula: %s', 'CalculatorModelerAlgorithm') % formula)
|
||||
|
||||
def getCustomModelerParametersDialog(self, modelAlg, algIndex=None):
|
||||
return CalculatorModelerParametersDialog(self, modelAlg, algIndex)
|
||||
@ -82,21 +85,21 @@ class CalculatorModelerParametersDialog(ModelerParametersDialog):
|
||||
| QtGui.QDialogButtonBox.Ok)
|
||||
self.infoText = QtGui.QTextEdit()
|
||||
numbers = self.getAvailableValuesOfType(ParameterNumber, OutputNumber)
|
||||
text = ('You can refer to model values in you formula, using'
|
||||
'single-letter variables, as follows:\n')
|
||||
text = self.tr('You can refer to model values in you formula, using'
|
||||
'single-letter variables, as follows:\n', 'CalculatorModelerParametersDialog')
|
||||
ichar = 97
|
||||
if numbers:
|
||||
for number in numbers:
|
||||
text += chr(ichar) + '->' + self.resolveValueDescription(number) + '\n'
|
||||
ichar += 1
|
||||
else:
|
||||
text += "\n - No numerical variables are available."
|
||||
text += self.tr('\n - No numerical variables are available.', 'CalculatorModelerParametersDialog')
|
||||
self.infoText.setText(text)
|
||||
self.infoText.setEnabled(False)
|
||||
self.formulaText = QtGui.QLineEdit()
|
||||
if hasattr(self.formulaText, 'setPlaceholderText'):
|
||||
self.formulaText.setPlaceholderText('[Enter your formula here]')
|
||||
self.setWindowTitle("Calculator")
|
||||
self.formulaText.setPlaceholderText(self.tr('[Enter your formula here]', 'CalculatorModelerParametersDialog'))
|
||||
self.setWindowTitle(self.tr('Calculator', 'CalculatorModelerParametersDialog'))
|
||||
self.verticalLayout = QtGui.QVBoxLayout()
|
||||
self.verticalLayout.setSpacing(2)
|
||||
self.verticalLayout.setMargin(0)
|
||||
@ -113,7 +116,7 @@ class CalculatorModelerParametersDialog(ModelerParametersDialog):
|
||||
def createAlgorithm(self):
|
||||
alg = Algorithm('modelertools:calculator')
|
||||
alg.setName(self.model)
|
||||
alg.description = "Calculator"
|
||||
alg.description = self.tr('Calculator', 'CalculatorModelerParametersDialog')
|
||||
|
||||
formula = self.formulaText.text()
|
||||
alg.params[FORMULA] = formula
|
||||
|
@ -33,8 +33,8 @@ from processing.modeler.ModelerDialog import ModelerDialog
|
||||
class CreateNewModelAction(ToolboxAction):
|
||||
|
||||
def __init__(self):
|
||||
self.name = 'Create new model'
|
||||
self.group = 'Tools'
|
||||
self.name = self.tr('Create new model', 'CreateNewModelAction')
|
||||
self.group = self.tr('Tools', 'CreateNewModelAction')
|
||||
|
||||
def getIcon(self):
|
||||
return QtGui.QIcon(os.path.dirname(__file__) + '/../images/model.png')
|
||||
|
@ -34,14 +34,15 @@ from processing.modeler.ModelerAlgorithm import ModelerAlgorithm
|
||||
class DeleteModelAction(ContextAction):
|
||||
|
||||
def __init__(self):
|
||||
self.name = 'Delete model'
|
||||
self.name = self.tr('Delete model', 'DeleteModelAction')
|
||||
|
||||
def isEnabled(self):
|
||||
return isinstance(self.alg, ModelerAlgorithm)
|
||||
|
||||
def execute(self):
|
||||
reply = QtGui.QMessageBox.question(None, 'Confirmation',
|
||||
'Are you sure you want to delete this model?',
|
||||
reply = QtGui.QMessageBox.question(None,
|
||||
self.tr('Confirmation', 'DeleteModelAction'),
|
||||
self.tr('Are you sure you want to delete this model?', 'DeleteModelAction'),
|
||||
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
|
||||
QtGui.QMessageBox.No)
|
||||
if reply == QtGui.QMessageBox.Yes:
|
||||
|
@ -32,7 +32,7 @@ from processing.modeler.ModelerDialog import ModelerDialog
|
||||
class EditModelAction(ContextAction):
|
||||
|
||||
def __init__(self):
|
||||
self.name = 'Edit model'
|
||||
self.name = self.tr('Edit model', 'EditModelAction')
|
||||
|
||||
def isEnabled(self):
|
||||
return isinstance(self.alg, ModelerAlgorithm)
|
||||
|
@ -170,7 +170,7 @@ class ModelerAlgorithm(GeoAlgorithm):
|
||||
return newone
|
||||
|
||||
def __init__(self):
|
||||
self.name = "Model"
|
||||
self.name = self.tr('Model', 'ModelerAlgorithm')
|
||||
# The dialog where this model is being edited
|
||||
self.modelerdialog = None
|
||||
self.descriptionFile = None
|
||||
@ -330,8 +330,8 @@ class ModelerAlgorithm(GeoAlgorithm):
|
||||
# algorithms to skip some conversion routines
|
||||
if not param.setValue(value) and not isinstance(param,
|
||||
ParameterDataObject):
|
||||
raise GeoAlgorithmExecutionException('Wrong value: '
|
||||
+ str(value))
|
||||
raise GeoAlgorithmExecutionException(
|
||||
self.tr('Wrong value: %s', 'ModelerAlgorithm') % value)
|
||||
for out in algInstance.outputs:
|
||||
if not out.hidden:
|
||||
if out.name in alg.outputs:
|
||||
@ -424,9 +424,11 @@ class ModelerAlgorithm(GeoAlgorithm):
|
||||
break
|
||||
if canExecute:
|
||||
try:
|
||||
progress.setDebugInfo('Prepare algorithm: ' + alg.name)
|
||||
progress.setDebugInfo(
|
||||
self.tr('Prepare algorithm: %s', 'ModelerAlgorithm') % alg.name)
|
||||
self.prepareAlgorithm(alg)
|
||||
progress.setText('Running %s [%i/%i]' % ( alg.description, len(executed) + 1 ,len(toExecute)))
|
||||
progress.setText(
|
||||
self.tr('Running %s [%i/%i]', 'ModelerAlgorithm') % (alg.description, len(executed) + 1 ,len(toExecute)))
|
||||
progress.setDebugInfo('Parameters: ' + ', '.join([unicode(p).strip()
|
||||
+ '=' + unicode(p.value) for p in alg.algorithm.parameters]))
|
||||
t0 = time.time()
|
||||
@ -434,15 +436,14 @@ class ModelerAlgorithm(GeoAlgorithm):
|
||||
dt = time.time() - t0
|
||||
executed.append(alg.name)
|
||||
progress.setDebugInfo(
|
||||
'OK. Execution took %0.3f ms (%i outputs).'
|
||||
% (dt, len(alg.algorithm.outputs)))
|
||||
self.tr('OK. Execution took %0.3f ms (%i outputs).', 'ModelerAlgorithm') % (dt, len(alg.algorithm.outputs)))
|
||||
except GeoAlgorithmExecutionException, e:
|
||||
progress.setDebugInfo('Failed')
|
||||
progress.setDebugInfo(self.tr('Failed', 'ModelerAlgorithm'))
|
||||
raise GeoAlgorithmExecutionException(
|
||||
'Error executing algorithm %s\n%s' % (alg.description, e.msg))
|
||||
self.tr('Error executing algorithm %s\n%s', 'ModelerAlgorithm') % (alg.description, e.msg))
|
||||
|
||||
progress.setDebugInfo(
|
||||
'Model processed ok. Executed %i algorithms total' % len(executed))
|
||||
self.tr('Model processed ok. Executed %i algorithms total', 'ModelerAlgorithm') % len(executed))
|
||||
|
||||
|
||||
def getAsCommand(self):
|
||||
@ -558,8 +559,8 @@ class ModelerAlgorithm(GeoAlgorithm):
|
||||
if param:
|
||||
pass
|
||||
else:
|
||||
raise WrongModelException('Error in parameter line: '
|
||||
+ line)
|
||||
raise WrongModelException(
|
||||
self.tr('Error in parameter line: %s', 'ModelerAlgorithm') % line)
|
||||
line = lines.readline().strip('\n')
|
||||
tokens = line.split(',')
|
||||
model.addParameter(ModelerParameter(param, QtCore.QPointF(
|
||||
@ -621,8 +622,8 @@ class ModelerAlgorithm(GeoAlgorithm):
|
||||
model.addAlgorithm(modelAlg)
|
||||
modelAlgs.append(modelAlg.name)
|
||||
else:
|
||||
raise WrongModelException('Error in algorithm name: '
|
||||
+ algLine)
|
||||
raise WrongModelException(
|
||||
self.tr('Error in algorithm name: %s', 'ModelerAlgorithm') % algLine)
|
||||
line = lines.readline().strip('\n').strip('\r')
|
||||
for modelAlg in model.algs.values():
|
||||
for name, value in modelAlg.params.iteritems():
|
||||
@ -633,5 +634,4 @@ class ModelerAlgorithm(GeoAlgorithm):
|
||||
if isinstance(e, WrongModelException):
|
||||
raise e
|
||||
else:
|
||||
raise WrongModelException('Error in model definition line:'
|
||||
+ line.strip() + ' : ' + traceback.format_exc())
|
||||
raise WrongModelException(self.tr('Error in model definition line: %s\n%s', 'ModelerAlgorithm') % (line.strip(), traceback.format_exc()))
|
||||
|
@ -51,8 +51,8 @@ class ModelerAlgorithmProvider(AlgorithmProvider):
|
||||
def initializeSettings(self):
|
||||
AlgorithmProvider.initializeSettings(self)
|
||||
ProcessingConfig.addSetting(Setting(self.getDescription(),
|
||||
ModelerUtils.MODELS_FOLDER, 'Models folder'
|
||||
, ModelerUtils.modelsFolder()))
|
||||
ModelerUtils.MODELS_FOLDER, self.tr('Models folder', 'ModelerAlgorithmProvider'),
|
||||
ModelerUtils.modelsFolder()))
|
||||
|
||||
def setAlgsList(self, algs):
|
||||
ModelerUtils.allAlgs = algs
|
||||
@ -61,7 +61,7 @@ class ModelerAlgorithmProvider(AlgorithmProvider):
|
||||
return ModelerUtils.modelsFolder()
|
||||
|
||||
def getDescription(self):
|
||||
return 'Models'
|
||||
return self.tr('Models', 'ModelerAlgorithmProvider')
|
||||
|
||||
def getName(self):
|
||||
return 'model'
|
||||
@ -86,5 +86,4 @@ class ModelerAlgorithmProvider(AlgorithmProvider):
|
||||
self.algs.append(alg)
|
||||
except WrongModelException, e:
|
||||
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
|
||||
'Could not load model ' + descriptionFile + '\n'
|
||||
+ e.msg)
|
||||
self.tr('Could not load model %s\n%s', 'ModelerAlgorithmProvider') % (descriptionFile, e.msg))
|
||||
|
@ -166,9 +166,9 @@ class ModelerDialog(QDialog, Ui_DlgModeler):
|
||||
if hasattr(self.searchBox, 'setPlaceholderText'):
|
||||
self.searchBox.setPlaceholderText(self.tr('Search...'))
|
||||
if hasattr(self.textName, 'setPlaceholderText'):
|
||||
self.textName.setPlaceholderText('[Enter model name here]')
|
||||
self.textName.setPlaceholderText(self.tr('[Enter model name here]'))
|
||||
if hasattr(self.textGroup, 'setPlaceholderText'):
|
||||
self.textGroup.setPlaceholderText('[Enter group name here]')
|
||||
self.textGroup.setPlaceholderText(self.tr('[Enter group name here]'))
|
||||
|
||||
# Connect signals and slots
|
||||
self.inputsTree.doubleClicked.connect(self.addInput)
|
||||
@ -313,7 +313,7 @@ class ModelerDialog(QDialog, Ui_DlgModeler):
|
||||
def openModel(self):
|
||||
filename = unicode(QFileDialog.getOpenFileName(self,
|
||||
self.tr('Open Model'), ModelerUtils.modelsFolder(),
|
||||
self.tr('Processing models (*.model)')))
|
||||
self.tr('Processing models (*.model *.MODEL)')))
|
||||
if filename:
|
||||
try:
|
||||
alg = ModelerAlgorithm.fromFile(filename)
|
||||
@ -327,18 +327,16 @@ class ModelerDialog(QDialog, Ui_DlgModeler):
|
||||
self.hasChanged = False
|
||||
except WrongModelException, e:
|
||||
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
|
||||
'Could not load model ' + filename + '\n'
|
||||
+ e.msg)
|
||||
self.tr('Could not load model %s\n%s') % (filename, e.msg))
|
||||
QMessageBox.critical(self, self.tr('Could not open model'),
|
||||
self.tr('The selected model could not be loaded.\n'
|
||||
'See the log for more information.'))
|
||||
except Exception, e:
|
||||
ProcessingLog.addToLog(ProcessingLog.LOG_ERROR,
|
||||
'Could not load model ' + filename + '\n'
|
||||
+ e.args[0])
|
||||
self.tr('Could not load model %s\n%s') % (filename, e.args[0]))
|
||||
QMessageBox.critical(self, self.tr('Could not open model'),
|
||||
self.tr('The selected model could not be loaded.\n'
|
||||
'See the log for more information.'))
|
||||
self.tr('The selected model could not be loaded.\n'
|
||||
'See the log for more information.'))
|
||||
|
||||
def repaintModel(self):
|
||||
self.scene = ModelerScene()
|
||||
@ -483,7 +481,7 @@ class ModelerDialog(QDialog, Ui_DlgModeler):
|
||||
|
||||
if len(groups) > 0:
|
||||
mainItem = QTreeWidgetItem()
|
||||
mainItem.setText(0, 'Geoalgorithms')
|
||||
mainItem.setText(0, self.tr('Geoalgorithms'))
|
||||
mainItem.setIcon(0, GeoAlgorithm.getDefaultIcon())
|
||||
mainItem.setToolTip(0, mainItem.text(0))
|
||||
for (groupname, group) in groups.items():
|
||||
|
@ -46,7 +46,7 @@ class ModelerOnlyAlgorithmProvider(AlgorithmProvider):
|
||||
return 'modelertools'
|
||||
|
||||
def getDescription(self):
|
||||
return 'Modeler-only tools'
|
||||
return self.tr('Modeler-only tools', 'ModelerOnlyAlgorithmProvider')
|
||||
|
||||
def getIcon(self):
|
||||
return QIcon(os.path.dirname(__file__) + '/../images/model.png')
|
||||
|
@ -78,7 +78,7 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
self.setupUi()
|
||||
|
||||
def setupUi(self):
|
||||
self.setWindowTitle('Parameter definition')
|
||||
self.setWindowTitle(self.tr('Parameter definition'))
|
||||
|
||||
self.verticalLayout = QVBoxLayout(self)
|
||||
self.verticalLayout.setSpacing(40)
|
||||
@ -87,7 +87,7 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
self.horizontalLayout = QHBoxLayout(self)
|
||||
self.horizontalLayout.setSpacing(2)
|
||||
self.horizontalLayout.setMargin(0)
|
||||
self.label = QLabel('Parameter name')
|
||||
self.label = QLabel(self.tr('Parameter name'))
|
||||
self.horizontalLayout.addWidget(self.label)
|
||||
self.nameTextBox = QLineEdit()
|
||||
self.horizontalLayout.addWidget(self.nameTextBox)
|
||||
@ -107,7 +107,7 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
== ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN \
|
||||
or isinstance(self.param, ParameterBoolean):
|
||||
self.state = QCheckBox()
|
||||
self.state.setText('Checked')
|
||||
self.state.setText(self.tr('Checked'))
|
||||
self.state.setChecked(False)
|
||||
if self.param is not None:
|
||||
self.state.setChecked(True if self.param.value else False)
|
||||
@ -116,7 +116,7 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
elif self.paramType \
|
||||
== ModelerParameterDefinitionDialog.PARAMETER_TABLE_FIELD \
|
||||
or isinstance(self.param, ParameterTableField):
|
||||
self.horizontalLayout2.addWidget(QLabel('Parent layer'))
|
||||
self.horizontalLayout2.addWidget(QLabel(self.tr('Parent layer')))
|
||||
self.parentCombo = QComboBox()
|
||||
idx = 0
|
||||
for param in self.alg.inputs.values():
|
||||
@ -131,10 +131,10 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
elif self.paramType \
|
||||
== ModelerParameterDefinitionDialog.PARAMETER_RASTER \
|
||||
or isinstance(self.param, ParameterRaster):
|
||||
self.horizontalLayout2.addWidget(QLabel('Required'))
|
||||
self.horizontalLayout2.addWidget(QLabel(self.tr('Required')))
|
||||
self.yesNoCombo = QComboBox()
|
||||
self.yesNoCombo.addItem('Yes')
|
||||
self.yesNoCombo.addItem('No')
|
||||
self.yesNoCombo.addItem(self.tr('Yes'))
|
||||
self.yesNoCombo.addItem(self.tr('No'))
|
||||
if self.param is not None:
|
||||
self.yesNoCombo.setCurrentIndex(
|
||||
(1 if self.param.optional else 0))
|
||||
@ -143,10 +143,10 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
elif self.paramType \
|
||||
== ModelerParameterDefinitionDialog.PARAMETER_TABLE \
|
||||
or isinstance(self.param, ParameterTable):
|
||||
self.horizontalLayout2.addWidget(QLabel('Required'))
|
||||
self.horizontalLayout2.addWidget(QLabel(self.tr('Required')))
|
||||
self.yesNoCombo = QComboBox()
|
||||
self.yesNoCombo.addItem('Yes')
|
||||
self.yesNoCombo.addItem('No')
|
||||
self.yesNoCombo.addItem(self.tr('Yes'))
|
||||
self.yesNoCombo.addItem(self.tr('No'))
|
||||
if self.param is not None:
|
||||
self.yesNoCombo.setCurrentIndex(
|
||||
(1 if self.param.optional else 0))
|
||||
@ -155,17 +155,17 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
elif self.paramType \
|
||||
== ModelerParameterDefinitionDialog.PARAMETER_VECTOR \
|
||||
or isinstance(self.param, ParameterVector):
|
||||
self.horizontalLayout2.addWidget(QLabel('Required'))
|
||||
self.horizontalLayout2.addWidget(QLabel(self.tr('Required')))
|
||||
self.yesNoCombo = QComboBox()
|
||||
self.yesNoCombo.addItem('Yes')
|
||||
self.yesNoCombo.addItem('No')
|
||||
self.yesNoCombo.addItem(self.tr('Yes'))
|
||||
self.yesNoCombo.addItem(self.tr('No'))
|
||||
self.horizontalLayout2.addWidget(self.yesNoCombo)
|
||||
self.horizontalLayout3.addWidget(QLabel('Shape type'))
|
||||
self.horizontalLayout3.addWidget(QLabel(self.tr('Shape type')))
|
||||
self.shapetypeCombo = QComboBox()
|
||||
self.shapetypeCombo.addItem('Any')
|
||||
self.shapetypeCombo.addItem('Point')
|
||||
self.shapetypeCombo.addItem('Line')
|
||||
self.shapetypeCombo.addItem('Polygon')
|
||||
self.shapetypeCombo.addItem(self.tr('Any'))
|
||||
self.shapetypeCombo.addItem(self.tr('Point'))
|
||||
self.shapetypeCombo.addItem(self.tr('Line'))
|
||||
self.shapetypeCombo.addItem(self.tr('Polygon'))
|
||||
if self.param is not None:
|
||||
self.yesNoCombo.setCurrentIndex(
|
||||
(1 if self.param.optional else 0))
|
||||
@ -177,19 +177,19 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
elif self.paramType \
|
||||
== ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE \
|
||||
or isinstance(self.param, ParameterMultipleInput):
|
||||
self.horizontalLayout2.addWidget(QLabel('Mandatory'))
|
||||
self.horizontalLayout2.addWidget(QLabel(self.tr('Mandatory')))
|
||||
self.yesNoCombo = QComboBox()
|
||||
self.yesNoCombo.addItem('Yes')
|
||||
self.yesNoCombo.addItem('No')
|
||||
self.yesNoCombo.addItem(self.tr('Yes'))
|
||||
self.yesNoCombo.addItem(self.tr('No'))
|
||||
self.horizontalLayout2.addWidget(self.yesNoCombo)
|
||||
self.horizontalLayout3.addWidget(QLabel('Data type'))
|
||||
self.horizontalLayout3.addWidget(QLabel(self.tr('Data type')))
|
||||
self.datatypeCombo = QComboBox()
|
||||
self.datatypeCombo.addItem('Vector (any)')
|
||||
self.datatypeCombo.addItem('Vector (point)')
|
||||
self.datatypeCombo.addItem('Vector (line)')
|
||||
self.datatypeCombo.addItem('Vector (polygon)')
|
||||
self.datatypeCombo.addItem('Raster')
|
||||
self.datatypeCombo.addItem('Table')
|
||||
self.datatypeCombo.addItem(self.tr('Vector (any)'))
|
||||
self.datatypeCombo.addItem(self.tr('Vector (point)'))
|
||||
self.datatypeCombo.addItem(self.tr('Vector (line)'))
|
||||
self.datatypeCombo.addItem(self.tr('Vector (polygon)'))
|
||||
self.datatypeCombo.addItem(self.tr('Raster'))
|
||||
self.datatypeCombo.addItem(self.tr('Table'))
|
||||
if self.param is not None:
|
||||
self.yesNoCombo.setCurrentIndex(
|
||||
(1 if self.param.optional else 0))
|
||||
@ -200,15 +200,15 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
elif self.paramType \
|
||||
== ModelerParameterDefinitionDialog.PARAMETER_NUMBER \
|
||||
or isinstance(self.param, ParameterNumber):
|
||||
self.horizontalLayout2.addWidget(QLabel('Min/Max values'))
|
||||
self.horizontalLayout2.addWidget(QLabel(self.tr('Min/Max values')))
|
||||
self.minTextBox = QLineEdit()
|
||||
self.maxTextBox = QLineEdit()
|
||||
self.horizontalLayout2.addWidget(self.minTextBox)
|
||||
self.horizontalLayout2.addWidget(self.maxTextBox)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout2)
|
||||
self.horizontalLayout3.addWidget(QLabel('Default value'))
|
||||
self.horizontalLayout3.addWidget(QLabel(self.tr('Default value')))
|
||||
self.defaultTextBox = QLineEdit()
|
||||
self.defaultTextBox.setText('0')
|
||||
self.defaultTextBox.setText(self.tr('0'))
|
||||
if self.param is not None:
|
||||
self.defaultTextBox.setText(str(self.param.default))
|
||||
self.horizontalLayout3.addWidget(self.defaultTextBox)
|
||||
@ -216,7 +216,7 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
elif self.paramType \
|
||||
== ModelerParameterDefinitionDialog.PARAMETER_STRING \
|
||||
or isinstance(self.param, ParameterString):
|
||||
self.horizontalLayout2.addWidget(QLabel('Default value'))
|
||||
self.horizontalLayout2.addWidget(QLabel(self.tr('Default value')))
|
||||
self.defaultTextBox = QLineEdit()
|
||||
if self.param is not None:
|
||||
self.defaultTextBox.setText(self.param.default)
|
||||
@ -225,10 +225,10 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
elif self.paramType == \
|
||||
ModelerParameterDefinitionDialog.PARAMETER_FILE \
|
||||
or isinstance(self.param, ParameterFile):
|
||||
self.horizontalLayout2.addWidget(QLabel('Type'))
|
||||
self.horizontalLayout2.addWidget(QLabel(self.tr('Type')))
|
||||
self.fileFolderCombo = QComboBox()
|
||||
self.fileFolderCombo.addItem('File')
|
||||
self.fileFolderCombo.addItem('Folder')
|
||||
self.fileFolderCombo.addItem(self.tr('File'))
|
||||
self.fileFolderCombo.addItem(self.tr('Folder'))
|
||||
if self.param is not None:
|
||||
self.fileFolderCombo.setCurrentIndex(
|
||||
(1 if self.param.isFolder else 0))
|
||||
@ -250,8 +250,8 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
def okPressed(self):
|
||||
description = unicode(self.nameTextBox.text())
|
||||
if description.strip() == '':
|
||||
QMessageBox.warning(self, 'Unable to define parameter',
|
||||
'Invalid parameter name')
|
||||
QMessageBox.warning(self, self.tr('Unable to define parameter'),
|
||||
self.tr('Invalid parameter name'))
|
||||
return
|
||||
if self.param is None:
|
||||
validChars = \
|
||||
@ -270,8 +270,8 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
== ModelerParameterDefinitionDialog.PARAMETER_TABLE_FIELD \
|
||||
or isinstance(self.param, ParameterTableField):
|
||||
if self.parentCombo.currentIndex() < 0:
|
||||
QMessageBox.warning(self, 'Unable to define parameter',
|
||||
'Wrong or missing parameter values')
|
||||
QMessageBox.warning(self, self.tr('Unable to define parameter'),
|
||||
self.tr('Wrong or missing parameter values'))
|
||||
return
|
||||
parent = self.parentCombo.itemData(self.parentCombo.currentIndex())
|
||||
self.param = ParameterTableField(name, description, parent)
|
||||
@ -314,8 +314,8 @@ class ModelerParameterDefinitionDialog(QDialog):
|
||||
self.param = ParameterNumber(name, description, vmin, vmax,
|
||||
float(str(self.defaultTextBox.text())))
|
||||
except:
|
||||
QMessageBox.warning(self, 'Unable to define parameter',
|
||||
'Wrong or missing parameter values')
|
||||
QMessageBox.warning(self, self.tr('Unable to define parameter'),
|
||||
self.tr('Wrong or missing parameter values'))
|
||||
return
|
||||
elif self.paramType \
|
||||
== ModelerParameterDefinitionDialog.PARAMETER_STRING \
|
||||
|
@ -82,7 +82,7 @@ class ModelerParametersDialog(QDialog):
|
||||
hLayout = QHBoxLayout()
|
||||
hLayout.setSpacing(5)
|
||||
hLayout.setMargin(0)
|
||||
descriptionLabel = QLabel("Description")
|
||||
descriptionLabel = QLabel(self.tr("Description"))
|
||||
self.descriptionBox = QLineEdit()
|
||||
self.descriptionBox.setText(self._alg.name)
|
||||
hLayout.addWidget(descriptionLabel)
|
||||
@ -96,7 +96,7 @@ class ModelerParametersDialog(QDialog):
|
||||
for param in self._alg.parameters:
|
||||
if param.isAdvanced:
|
||||
self.advancedButton = QPushButton()
|
||||
self.advancedButton.setText('Show advanced parameters')
|
||||
self.advancedButton.setText(self.tr('Show advanced parameters'))
|
||||
self.advancedButton.setMaximumWidth(150)
|
||||
self.advancedButton.clicked.connect(
|
||||
self.showAdvancedParametersClicked)
|
||||
@ -141,7 +141,7 @@ class ModelerParametersDialog(QDialog):
|
||||
|
||||
label = QLabel(' ')
|
||||
self.verticalLayout.addWidget(label)
|
||||
label = QLabel('Parent algorithms')
|
||||
label = QLabel(self.tr('Parent algorithms'))
|
||||
self.dependenciesPanel = self.getDependenciesPanel()
|
||||
self.verticalLayout.addWidget(label)
|
||||
self.verticalLayout.addWidget(self.dependenciesPanel)
|
||||
@ -161,7 +161,7 @@ class ModelerParametersDialog(QDialog):
|
||||
self.scrollArea = QScrollArea()
|
||||
self.scrollArea.setWidget(self.paramPanel)
|
||||
self.scrollArea.setWidgetResizable(True)
|
||||
self.tabWidget.addTab(self.scrollArea, 'Parameters')
|
||||
self.tabWidget.addTab(self.scrollArea, self.tr('Parameters'))
|
||||
self.webView = QWebView()
|
||||
|
||||
html = None
|
||||
@ -173,15 +173,15 @@ class ModelerParametersDialog(QDialog):
|
||||
else:
|
||||
url = QUrl(help)
|
||||
else:
|
||||
html = '<h2>Sorry, no help is available for this \
|
||||
algorithm.</h2>'
|
||||
html = self.tr('<h2>Sorry, no help is available for this '
|
||||
'algorithm.</h2>')
|
||||
try:
|
||||
if html:
|
||||
self.webView.setHtml(html)
|
||||
elif url:
|
||||
self.webView.load(url)
|
||||
except:
|
||||
self.webView.setHtml('<h2>Could not open help file :-( </h2>')
|
||||
self.webView.setHtml(self.tr('<h2>Could not open help file :-( </h2>'))
|
||||
self.tabWidget.addTab(self.webView, 'Help')
|
||||
self.verticalLayout2.addWidget(self.tabWidget)
|
||||
self.verticalLayout2.addWidget(self.buttonBox)
|
||||
@ -207,9 +207,9 @@ class ModelerParametersDialog(QDialog):
|
||||
def showAdvancedParametersClicked(self):
|
||||
self.showAdvanced = not self.showAdvanced
|
||||
if self.showAdvanced:
|
||||
self.advancedButton.setText('Hide advanced parameters')
|
||||
self.advancedButton.setText(self.tr('Hide advanced parameters'))
|
||||
else:
|
||||
self.advancedButton.setText('Show advanced parameters')
|
||||
self.advancedButton.setText(self.tr('Show advanced parameters'))
|
||||
for param in self._alg.parameters:
|
||||
if param.isAdvanced:
|
||||
self.labels[param.name].setVisible(self.showAdvanced)
|
||||
@ -241,7 +241,7 @@ class ModelerParametersDialog(QDialog):
|
||||
return self.model.inputs[value.name].param.description
|
||||
else:
|
||||
alg = self.model.algs[value.alg]
|
||||
return "'%s' from algorithm '%s'" % (alg.algorithm.getOutputFromName(value.output).description, alg.description)
|
||||
return self.tr("'%s' from algorithm '%s'") % (alg.algorithm.getOutputFromName(value.output).description, alg.description)
|
||||
|
||||
|
||||
def getWidgetFromParameter(self, param):
|
||||
@ -628,8 +628,8 @@ class ModelerParametersDialog(QDialog):
|
||||
if self.alg is not None:
|
||||
self.close()
|
||||
else:
|
||||
QMessageBox.warning(self, 'Unable to add algorithm',
|
||||
'Wrong or missing parameter values')
|
||||
QMessageBox.warning(self, self.tr('Unable to add algorithm'),
|
||||
self.tr('Wrong or missing parameter values'))
|
||||
|
||||
def cancelPressed(self):
|
||||
self.alg = None
|
||||
|
@ -139,6 +139,3 @@ class ModelerScene(QtGui.QGraphicsScene):
|
||||
if mouseEvent.button() != QtCore.Qt.LeftButton:
|
||||
return
|
||||
super(ModelerScene, self).mousePressEvent(mouseEvent)
|
||||
|
||||
|
||||
|
||||
|
@ -39,7 +39,7 @@ class MultilineTextPanel(QtGui.QWidget):
|
||||
self.verticalLayout.setSpacing(2)
|
||||
self.verticalLayout.setMargin(0)
|
||||
self.combo = QtGui.QComboBox()
|
||||
self.combo.addItem('[Use text below]')
|
||||
self.combo.addItem(self.tr('[Use text below]'))
|
||||
for option in options:
|
||||
self.combo.addItem(option[0], option[1])
|
||||
self.combo.setSizePolicy(QtGui.QSizePolicy.Expanding,
|
||||
|
@ -43,14 +43,14 @@ class RasterLayerBoundsAlgorithm(GeoAlgorithm):
|
||||
def defineCharacteristics(self):
|
||||
self.showInModeler = True
|
||||
self.showInToolbox = False
|
||||
self.name = 'Raster layer bounds'
|
||||
self.group = 'Modeler-only tools'
|
||||
self.addParameter(ParameterRaster(self.LAYER, 'Layer'))
|
||||
self.addOutput(OutputNumber(self.XMIN, 'min X'))
|
||||
self.addOutput(OutputNumber(self.XMAX, 'max X'))
|
||||
self.addOutput(OutputNumber(self.YMIN, 'min Y'))
|
||||
self.addOutput(OutputNumber(self.YMAX, 'max Y'))
|
||||
self.addOutput(OutputExtent(self.EXTENT, 'Extent'))
|
||||
self.name = self.tr('Raster layer bounds', 'RasterLayerBoundsAlgorithm')
|
||||
self.group = self.tr('Modeler-only tools', 'RasterLayerBoundsAlgorithm')
|
||||
self.addParameter(ParameterRaster(self.LAYER, self.tr('Layer', 'RasterLayerBoundsAlgorithm')))
|
||||
self.addOutput(OutputNumber(self.XMIN, self.tr('min X', 'RasterLayerBoundsAlgorithm')))
|
||||
self.addOutput(OutputNumber(self.XMAX, self.tr('max X', 'RasterLayerBoundsAlgorithm')))
|
||||
self.addOutput(OutputNumber(self.YMIN, self.tr('min Y', 'RasterLayerBoundsAlgorithm')))
|
||||
self.addOutput(OutputNumber(self.YMAX, self.tr('max Y', 'RasterLayerBoundsAlgorithm')))
|
||||
self.addOutput(OutputExtent(self.EXTENT, self.tr('Extent', 'RasterLayerBoundsAlgorithm')))
|
||||
|
||||
def processAlgorithm(self, progress):
|
||||
uri = self.getParameterValue(self.LAYER)
|
||||
@ -63,4 +63,3 @@ class RasterLayerBoundsAlgorithm(GeoAlgorithm):
|
||||
layer.extent().xMaximum(),
|
||||
layer.extent().yMinimum(),
|
||||
layer.extent().yMaximum()))
|
||||
|
||||
|
@ -44,14 +44,14 @@ class VectorLayerBoundsAlgorithm(GeoAlgorithm):
|
||||
def defineCharacteristics(self):
|
||||
self.showInModeler = True
|
||||
self.showInToolbox = False
|
||||
self.name = 'Vector layer bounds'
|
||||
self.group = 'Modeler-only tools'
|
||||
self.addParameter(ParameterVector(self.LAYER, 'Layer'))
|
||||
self.addOutput(OutputNumber(self.XMIN, 'min X'))
|
||||
self.addOutput(OutputNumber(self.XMAX, 'max X'))
|
||||
self.addOutput(OutputNumber(self.YMIN, 'min Y'))
|
||||
self.addOutput(OutputNumber(self.YMAX, 'max Y'))
|
||||
self.addOutput(OutputExtent(self.EXTENT, 'Extent'))
|
||||
self.name = self.tr('Vector layer bounds', 'VectorLayerBoundsAlgorithm')
|
||||
self.group = self.tr('Modeler-only tools', 'VectorLayerBoundsAlgorithm')
|
||||
self.addParameter(ParameterVector(self.LAYER, self.tr('Layer', 'VectorLayerBoundsAlgorithm')))
|
||||
self.addOutput(OutputNumber(self.XMIN, self.tr('min X', 'VectorLayerBoundsAlgorithm')))
|
||||
self.addOutput(OutputNumber(self.XMAX, self.tr('max X', 'VectorLayerBoundsAlgorithm')))
|
||||
self.addOutput(OutputNumber(self.YMIN, self.tr('min Y', 'VectorLayerBoundsAlgorithm')))
|
||||
self.addOutput(OutputNumber(self.YMAX, self.tr('max Y', 'VectorLayerBoundsAlgorithm')))
|
||||
self.addOutput(OutputExtent(self.EXTENT, self.tr('Extent', 'VectorLayerBoundsAlgorithm')))
|
||||
|
||||
def processAlgorithm(self, progress):
|
||||
uri = self.getParameterValue(self.LAYER)
|
||||
|
@ -35,22 +35,25 @@ from processing.script.ScriptUtils import ScriptUtils
|
||||
class AddScriptFromFileAction(ToolboxAction):
|
||||
|
||||
def __init__(self):
|
||||
self.name = "Add script from file"
|
||||
self.group = 'Tools'
|
||||
self.name = self.tr('Add script from file', 'AddScriptFromFileAction')
|
||||
self.group = self.tr('Tools', 'AddScriptFromFileAction')
|
||||
|
||||
def getIcon(self):
|
||||
return QtGui.QIcon(':/processing/images/script.png')
|
||||
|
||||
def execute(self):
|
||||
filename = QtGui.QFileDialog.getOpenFileName(self.toolbox, 'Script files', None,
|
||||
'*.py')
|
||||
filename = QtGui.QFileDialog.getOpenFileName(self.toolbox,
|
||||
self.tr('Script files', 'AddScriptFromFileAction'), None,
|
||||
self.tr('Script files (*.py *.PY)', 'AddScriptFromFileAction'))
|
||||
if filename:
|
||||
try:
|
||||
script = ScriptAlgorithm(filename)
|
||||
except WrongScriptException:
|
||||
QtGui.QMessageBox.warning(self.toolbox, "Error reading script", "The selected file does not contain a valid script")
|
||||
QtGui.QMessageBox.warning(self.toolbox,
|
||||
self.tr('Error reading script', 'AddScriptFromFileAction'),
|
||||
self.tr('The selected file does not contain a valid script', 'AddScriptFromFileAction'))
|
||||
return
|
||||
destFilename = os.path.join(ScriptUtils.scriptsFolder(), os.path.basename(filename))
|
||||
with open(destFilename, "w") as f:
|
||||
with open(destFilename, 'w') as f:
|
||||
f.write(script.script)
|
||||
self.toolbox.updateProvider('script')
|
||||
self.toolbox.updateProvider('script')
|
||||
|
@ -87,7 +87,7 @@ class ScriptAlgorithm(GeoAlgorithm):
|
||||
self.silentOutputs = []
|
||||
filename = os.path.basename(self.descriptionFile)
|
||||
self.name = filename[:filename.rfind('.')].replace('_', ' ')
|
||||
self.group = 'User scripts'
|
||||
self.group = self.tr('User scripts', 'ScriptAlgorithm')
|
||||
lines = open(self.descriptionFile)
|
||||
line = lines.readline()
|
||||
while line != '':
|
||||
@ -95,21 +95,21 @@ class ScriptAlgorithm(GeoAlgorithm):
|
||||
try:
|
||||
self.processParameterLine(line.strip('\n'))
|
||||
except:
|
||||
raise WrongScriptException('Could not load script: '
|
||||
+ self.descriptionFile + '\n'
|
||||
+ 'Problem with line: ' + line)
|
||||
raise WrongScriptException(
|
||||
self.tr('Could not load script: %s\n'
|
||||
'Problem with line: %d', 'ScriptAlgorithm') % (self.descriptionFile, line))
|
||||
self.script += line
|
||||
line = lines.readline()
|
||||
lines.close()
|
||||
if self.group == '[Test scripts]':
|
||||
if self.group == self.tr('[Test scripts]', 'ScriptAlgorithm'):
|
||||
self.showInModeler = False
|
||||
self.showInToolbox = False
|
||||
|
||||
def defineCharacteristicsFromScript(self):
|
||||
lines = self.script.split('\n')
|
||||
self.silentOutputs = []
|
||||
self.name = '[Unnamed algorithm]'
|
||||
self.group = 'User scripts'
|
||||
self.name = self.tr('[Unnamed algorithm]', 'ScriptAlgorithm')
|
||||
self.group = self.tr('User scripts', 'ScriptAlgorithm')
|
||||
for line in lines:
|
||||
if line.startswith('##'):
|
||||
try:
|
||||
@ -228,10 +228,9 @@ class ScriptAlgorithm(GeoAlgorithm):
|
||||
out.description = desc
|
||||
self.addOutput(out)
|
||||
else:
|
||||
raise WrongScriptException('Could not load script:'
|
||||
+ self.descriptionFile or ''
|
||||
+ '.\n Problem with line "' + line + '"'
|
||||
)
|
||||
raise WrongScriptException(
|
||||
self.tr('Could not load script: %s.\n'
|
||||
'Problem with line %d', 'ScriptAlgorithm') % (self.descriptionFile or '', line))
|
||||
|
||||
def processDescriptionParameterLine(self, line):
|
||||
try:
|
||||
@ -244,10 +243,9 @@ class ScriptAlgorithm(GeoAlgorithm):
|
||||
else:
|
||||
self.addOutput(getOutputFromString(line))
|
||||
except Exception:
|
||||
raise WrongScriptException('Could not load script:'
|
||||
+ self.descriptionFile or ''
|
||||
+ '.\n Problem with line "' + line + '"'
|
||||
)
|
||||
raise WrongScriptException(
|
||||
self.tr('Could not load script: %s.\n'
|
||||
'Problem with line %d', 'ScriptAlgorithm') % (self.descriptionFile or '', line))
|
||||
|
||||
def processAlgorithm(self, progress):
|
||||
|
||||
|
@ -42,7 +42,7 @@ class ScriptAlgorithmProvider(AlgorithmProvider):
|
||||
|
||||
def __init__(self):
|
||||
AlgorithmProvider.__init__(self)
|
||||
self.actions.extend([CreateNewScriptAction('Create new script',
|
||||
self.actions.extend([CreateNewScriptAction(self.tr('Create new script', 'ScriptAlgorithmProvider'),
|
||||
CreateNewScriptAction.SCRIPT_PYTHON),
|
||||
AddScriptFromFileAction(),
|
||||
GetScriptsAction()])
|
||||
@ -54,7 +54,7 @@ class ScriptAlgorithmProvider(AlgorithmProvider):
|
||||
AlgorithmProvider.initializeSettings(self)
|
||||
ProcessingConfig.addSetting(Setting(self.getDescription(),
|
||||
ScriptUtils.SCRIPTS_FOLDER,
|
||||
'Scripts folder',
|
||||
self.tr('Scripts folder', 'ScriptAlgorithmProvider'),
|
||||
ScriptUtils.scriptsFolder()))
|
||||
|
||||
def unload(self):
|
||||
@ -68,10 +68,8 @@ class ScriptAlgorithmProvider(AlgorithmProvider):
|
||||
return 'script'
|
||||
|
||||
def getDescription(self):
|
||||
return 'Scripts'
|
||||
return self.tr('Scripts', 'ScriptAlgorithmProvider')
|
||||
|
||||
def _loadAlgorithms(self):
|
||||
folder = ScriptUtils.scriptsFolder()
|
||||
self.algs = ScriptUtils.loadFromFolder(folder)
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user