2012-10-05 23:28:47 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
"""
|
|
|
|
***************************************************************************
|
|
|
|
BatchInputSelectionPanel.py
|
|
|
|
---------------------
|
|
|
|
Date : August 2012
|
|
|
|
Copyright : (C) 2012 by Victor Olaya
|
|
|
|
Email : volayaf at gmail dot com
|
|
|
|
***************************************************************************
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
***************************************************************************
|
|
|
|
"""
|
|
|
|
|
|
|
|
__author__ = 'Victor Olaya'
|
|
|
|
__date__ = 'August 2012'
|
|
|
|
__copyright__ = '(C) 2012, Victor Olaya'
|
2013-10-01 20:52:22 +03:00
|
|
|
|
2012-10-05 23:28:47 +02:00
|
|
|
# This will get replaced with a git SHA1 when you do a git archive
|
2013-10-01 20:52:22 +03:00
|
|
|
|
2012-10-05 23:28:47 +02:00
|
|
|
__revision__ = '$Format:%H$'
|
2013-05-24 00:38:29 +02:00
|
|
|
|
2013-03-15 09:32:15 +01:00
|
|
|
import os
|
2014-11-12 19:36:12 +02:00
|
|
|
|
fix python pep8 warnings and fix some revealed errors
pep8 --ignore=E111,E128,E201,E202,E203,E211,E221,E222,E225,E226,E227,E231,E241,E261,E265,E272,E302,E303,E501,E701 \
--exclude="ui_*.py,debian/*,python/ext-libs/*" \
.
2015-02-01 14:15:42 +01:00
|
|
|
from PyQt4.QtCore import QSettings
|
|
|
|
from PyQt4.QtGui import QWidget, QHBoxLayout, QMenu, QPushButton, QLineEdit, QSizePolicy, QAction, QCursor, QFileDialog
|
2014-11-12 19:36:12 +02:00
|
|
|
|
2014-04-14 08:56:00 +02:00
|
|
|
from processing.gui.MultipleInputDialog import MultipleInputDialog
|
2014-11-12 19:36:12 +02:00
|
|
|
|
|
|
|
from processing.core.parameters import ParameterMultipleInput
|
2014-07-14 14:19:09 +02:00
|
|
|
from processing.core.parameters import ParameterRaster
|
|
|
|
from processing.core.parameters import ParameterVector
|
|
|
|
from processing.core.parameters import ParameterTable
|
2012-09-15 18:25:25 +03:00
|
|
|
|
2014-11-12 19:36:12 +02:00
|
|
|
from processing.tools import dataobjects
|
|
|
|
|
2012-09-15 18:25:25 +03:00
|
|
|
|
2014-11-12 19:36:12 +02:00
|
|
|
class BatchInputSelectionPanel(QWidget):
|
2012-09-15 18:25:25 +03:00
|
|
|
|
2014-11-12 19:36:12 +02:00
|
|
|
def __init__(self, param, row, col, panel):
|
|
|
|
super(BatchInputSelectionPanel, self).__init__(None)
|
2012-09-15 18:25:25 +03:00
|
|
|
self.param = param
|
2014-11-12 19:36:12 +02:00
|
|
|
self.panel = panel
|
|
|
|
self.table = self.panel.tblParameters
|
2012-09-15 18:25:25 +03:00
|
|
|
self.row = row
|
|
|
|
self.col = col
|
2014-11-12 19:36:12 +02:00
|
|
|
self.horizontalLayout = QHBoxLayout(self)
|
2014-06-18 11:55:18 +02:00
|
|
|
self.horizontalLayout.setSpacing(0)
|
2012-09-15 18:25:25 +03:00
|
|
|
self.horizontalLayout.setMargin(0)
|
2014-11-12 19:36:12 +02:00
|
|
|
self.text = QLineEdit()
|
2013-10-01 20:52:22 +03:00
|
|
|
self.text.setText('')
|
2014-11-12 19:36:12 +02:00
|
|
|
self.text.setSizePolicy(QSizePolicy.Expanding,
|
|
|
|
QSizePolicy.Expanding)
|
2012-09-15 18:25:25 +03:00
|
|
|
self.horizontalLayout.addWidget(self.text)
|
2014-11-12 19:36:12 +02:00
|
|
|
self.pushButton = QPushButton()
|
2013-10-01 20:52:22 +03:00
|
|
|
self.pushButton.setText('...')
|
2014-04-19 22:04:24 +02:00
|
|
|
self.pushButton.clicked.connect(self.showPopupMenu)
|
2012-09-15 18:25:25 +03:00
|
|
|
self.horizontalLayout.addWidget(self.pushButton)
|
|
|
|
self.setLayout(self.horizontalLayout)
|
2014-04-19 22:04:24 +02:00
|
|
|
|
2014-04-14 08:56:00 +02:00
|
|
|
def showPopupMenu(self):
|
2014-11-12 19:36:12 +02:00
|
|
|
popupmenu = QMenu()
|
|
|
|
|
|
|
|
if not (isinstance(self.param, ParameterMultipleInput) and
|
|
|
|
self.param.datatype == ParameterMultipleInput.TYPE_FILE):
|
|
|
|
selectLayerAction = QAction(
|
|
|
|
self.tr('Select from open layers'), self.pushButton)
|
2014-04-14 08:56:00 +02:00
|
|
|
selectLayerAction.triggered.connect(self.showLayerSelectionDialog)
|
|
|
|
popupmenu.addAction(selectLayerAction)
|
2014-11-12 19:36:12 +02:00
|
|
|
|
|
|
|
selectFileAction = QAction(
|
|
|
|
self.tr('Select from filesystem'), self.pushButton)
|
2014-04-14 08:56:00 +02:00
|
|
|
selectFileAction.triggered.connect(self.showFileSelectionDialog)
|
|
|
|
popupmenu.addAction(selectFileAction)
|
2014-11-12 19:36:12 +02:00
|
|
|
|
|
|
|
popupmenu.exec_(QCursor.pos())
|
2012-09-15 18:25:25 +03:00
|
|
|
|
2014-04-14 08:56:00 +02:00
|
|
|
def showLayerSelectionDialog(self):
|
2014-11-12 19:36:12 +02:00
|
|
|
if (isinstance(self.param, ParameterRaster) or
|
|
|
|
(isinstance(self.param, ParameterMultipleInput) and
|
|
|
|
self.param.datatype == ParameterMultipleInput.TYPE_RASTER)):
|
2014-04-19 22:04:24 +02:00
|
|
|
layers = dataobjects.getRasterLayers()
|
2014-04-14 08:56:00 +02:00
|
|
|
elif isinstance(self.param, ParameterTable):
|
2014-04-19 22:04:24 +02:00
|
|
|
layers = dataobjects.getTables()
|
2014-04-14 08:56:00 +02:00
|
|
|
else:
|
|
|
|
if isinstance(self.param, ParameterVector):
|
|
|
|
datatype = self.param.shapetype
|
|
|
|
else:
|
|
|
|
datatype = [self.param.datatype]
|
2014-04-19 22:04:24 +02:00
|
|
|
layers = dataobjects.getVectorLayers(datatype)
|
2014-11-12 19:36:12 +02:00
|
|
|
|
2014-04-14 08:56:00 +02:00
|
|
|
dlg = MultipleInputDialog([layer.name() for layer in layers])
|
|
|
|
dlg.exec_()
|
2014-04-19 22:04:24 +02:00
|
|
|
if dlg.selectedoptions is not None:
|
|
|
|
selected = dlg.selectedoptions
|
2014-04-14 08:56:00 +02:00
|
|
|
if len(selected) == 1:
|
2014-05-19 19:49:44 +02:00
|
|
|
self.text.setText(layers[selected[0]].name())
|
2014-04-19 22:04:24 +02:00
|
|
|
else:
|
2014-04-14 08:56:00 +02:00
|
|
|
if isinstance(self.param, ParameterMultipleInput):
|
|
|
|
self.text.setText(';'.join(layers[idx].name() for idx in selected))
|
|
|
|
else:
|
2014-06-28 16:59:53 +02:00
|
|
|
rowdif = len(selected) - (self.table.rowCount() - self.row)
|
2014-04-14 08:56:00 +02:00
|
|
|
for i in range(rowdif):
|
2014-12-11 11:43:47 +02:00
|
|
|
self.panel.addRow()
|
2014-04-14 08:56:00 +02:00
|
|
|
for i, layeridx in enumerate(selected):
|
|
|
|
self.table.cellWidget(i + self.row,
|
|
|
|
self.col).setText(layers[layeridx].name())
|
2014-04-19 22:04:24 +02:00
|
|
|
|
2014-04-14 08:56:00 +02:00
|
|
|
def showFileSelectionDialog(self):
|
2014-11-12 19:36:12 +02:00
|
|
|
settings = QSettings()
|
2013-06-03 21:25:22 +02:00
|
|
|
text = unicode(self.text.text())
|
2013-03-15 09:32:15 +01:00
|
|
|
if os.path.isdir(text):
|
|
|
|
path = text
|
|
|
|
elif os.path.isdir(os.path.dirname(text)):
|
|
|
|
path = os.path.dirname(text)
|
2013-10-01 20:52:22 +03:00
|
|
|
elif settings.contains('/Processing/LastInputPath'):
|
|
|
|
path = unicode(settings.value('/Processing/LastInputPath'))
|
2013-03-15 09:32:15 +01:00
|
|
|
else:
|
2013-10-01 20:52:22 +03:00
|
|
|
path = ''
|
2013-03-26 14:15:12 +01:00
|
|
|
|
2014-11-12 19:36:12 +02:00
|
|
|
ret = QFileDialog.getOpenFileNames(self, self.tr('Open file'), path,
|
2014-10-03 21:56:24 +03:00
|
|
|
self.tr('All files(*.*);;') + self.param.getFileFilter())
|
2013-03-26 14:15:12 +01:00
|
|
|
if ret:
|
|
|
|
files = list(ret)
|
2015-01-20 12:36:46 +01:00
|
|
|
settings.setValue('/Processing/LastInputPath',
|
fix python pep8 warnings and fix some revealed errors
pep8 --ignore=E111,E128,E201,E202,E203,E211,E221,E222,E225,E226,E227,E231,E241,E261,E265,E272,E302,E303,E501,E701 \
--exclude="ui_*.py,debian/*,python/ext-libs/*" \
.
2015-02-01 14:15:42 +01:00
|
|
|
os.path.dirname(unicode(files[0])))
|
2015-01-20 12:36:46 +01:00
|
|
|
for i, filename in enumerate(files):
|
2015-01-22 20:53:45 +01:00
|
|
|
files[i] = dataobjects.getRasterSublayer(filename, self.param)
|
2015-01-20 12:36:46 +01:00
|
|
|
if len(files) == 1:
|
2014-04-14 08:56:00 +02:00
|
|
|
self.text.setText(files[0])
|
2012-09-15 18:25:25 +03:00
|
|
|
else:
|
|
|
|
if isinstance(self.param, ParameterMultipleInput):
|
2013-10-01 20:52:22 +03:00
|
|
|
self.text.setText(';'.join(unicode(f) for f in files))
|
2012-09-15 18:25:25 +03:00
|
|
|
else:
|
|
|
|
rowdif = len(files) - (self.table.rowCount() - self.row)
|
|
|
|
for i in range(rowdif):
|
2014-12-11 11:43:47 +02:00
|
|
|
self.panel.addRow()
|
2014-04-14 08:56:00 +02:00
|
|
|
for i, f in enumerate(files):
|
2013-10-01 20:52:22 +03:00
|
|
|
self.table.cellWidget(i + self.row,
|
2014-04-14 08:56:00 +02:00
|
|
|
self.col).setText(f)
|
2012-09-15 18:25:25 +03:00
|
|
|
|
|
|
|
def setText(self, text):
|
|
|
|
return self.text.setText(text)
|
|
|
|
|
|
|
|
def getText(self):
|
|
|
|
return self.text.text()
|