28
28
import os
29
29
from PyQt4 import QtGui , QtCore
30
30
from processing .parameters .ParameterMultipleInput import ParameterMultipleInput
31
+ from processing .gui .MultipleInputDialog import MultipleInputDialog
32
+ from processing .tools import dataobjects
33
+ from processing .parameters .ParameterRaster import ParameterRaster
34
+ from processing .parameters .ParameterVector import ParameterVector
35
+ from processing .parameters .ParameterTable import ParameterTable
31
36
32
37
33
38
class BatchInputSelectionPanel (QtGui .QWidget ):
@@ -49,11 +54,55 @@ def __init__(self, param, row, col, batchDialog, parent=None):
49
54
self .horizontalLayout .addWidget (self .text )
50
55
self .pushButton = QtGui .QPushButton ()
51
56
self .pushButton .setText ('...' )
52
- self .pushButton .clicked .connect (self .showSelectionDialog )
57
+ self .pushButton .clicked .connect (self .showPopupMenu )
53
58
self .horizontalLayout .addWidget (self .pushButton )
54
59
self .setLayout (self .horizontalLayout )
60
+
61
+ def showPopupMenu (self ):
62
+ popupmenu = QtGui .QMenu ()
63
+ if not (isinstance (self .param , ParameterMultipleInput )
64
+ and self .param .datatype == ParameterMultipleInput .TYPE_FILE ):
65
+ selectLayerAction = QtGui .QAction ('Select from open layers' ,
66
+ self .pushButton )
67
+ selectLayerAction .triggered .connect (self .showLayerSelectionDialog )
68
+ popupmenu .addAction (selectLayerAction )
69
+ selectFileAction = QtGui .QAction ('Select from filesystem' ,
70
+ self .pushButton )
71
+ selectFileAction .triggered .connect (self .showFileSelectionDialog )
72
+ popupmenu .addAction (selectFileAction )
73
+ popupmenu .exec_ (QtGui .QCursor .pos ())
55
74
56
- def showSelectionDialog (self ):
75
+ def showLayerSelectionDialog (self ):
76
+ if (isinstance (self .param , ParameterRaster )
77
+ or (isinstance (self .param , ParameterMultipleInput )
78
+ and self .param .datatype == ParameterMultipleInput .TYPE_RASTER )):
79
+ layers = dataobjects .getRasterLayers ()
80
+ elif isinstance (self .param , ParameterTable ):
81
+ layers = dataobjects .getTables ()
82
+ else :
83
+ if isinstance (self .param , ParameterVector ):
84
+ datatype = self .param .shapetype
85
+ else :
86
+ datatype = [self .param .datatype ]
87
+ layers = dataobjects .getVectorLayers (datatype )
88
+ dlg = MultipleInputDialog ([layer .name () for layer in layers ])
89
+ dlg .exec_ ()
90
+ if dlg .selectedoptions is not None :
91
+ selected = dlg .selectedoptions
92
+ if len (selected ) == 1 :
93
+ self .text .setText (layers [selected [0 ]])
94
+ else :
95
+ if isinstance (self .param , ParameterMultipleInput ):
96
+ self .text .setText (';' .join (layers [idx ].name () for idx in selected ))
97
+ else :
98
+ rowdif = len (layers ) - (self .table .rowCount () - self .row )
99
+ for i in range (rowdif ):
100
+ self .batchDialog .addRow ()
101
+ for i , layeridx in enumerate (selected ):
102
+ self .table .cellWidget (i + self .row ,
103
+ self .col ).setText (layers [layeridx ].name ())
104
+
105
+ def showFileSelectionDialog (self ):
57
106
settings = QtCore .QSettings ()
58
107
text = unicode (self .text .text ())
59
108
if os .path .isdir (text ):
@@ -72,7 +121,7 @@ def showSelectionDialog(self):
72
121
if len (files ) == 1 :
73
122
settings .setValue ('/Processing/LastInputPath' ,
74
123
os .path .dirname (unicode (files [0 ])))
75
- self .text .setText (str ( files [0 ]) )
124
+ self .text .setText (files [0 ])
76
125
else :
77
126
settings .setValue ('/Processing/LastInputPath' ,
78
127
os .path .dirname (unicode (files [0 ])))
@@ -82,9 +131,9 @@ def showSelectionDialog(self):
82
131
rowdif = len (files ) - (self .table .rowCount () - self .row )
83
132
for i in range (rowdif ):
84
133
self .batchDialog .addRow ()
85
- for i in range ( len ( files ) ):
134
+ for i , f in enumerate ( files ):
86
135
self .table .cellWidget (i + self .row ,
87
- self .col ).setText (files [ i ] )
136
+ self .col ).setText (f )
88
137
89
138
def setText (self , text ):
90
139
return self .text .setText (text )
0 commit comments