Skip to content

Commit 4d3cdec

Browse files
author
brushtyler
committed
fixed #3662 and #3663
git-svn-id: http://svn.osgeo.org/qgis/trunk@15698 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 29679dd commit 4d3cdec

File tree

2 files changed

+71
-76
lines changed

2 files changed

+71
-76
lines changed

python/plugins/GdalTools/tools/doClipper.py

+29-64
Original file line numberDiff line numberDiff line change
@@ -16,76 +16,53 @@ def __init__(self, iface):
1616
self.canvas = self.iface.mapCanvas()
1717

1818
self.setupUi(self)
19-
BasePluginWidget.__init__(self, self.iface, "gdal_merge.py", None, self.iface.mainWindow())
19+
BasePluginWidget.__init__(self, self.iface, "gdal_translate", None, self.iface.mainWindow())
2020

2121
self.extentSelector.setCanvas(self.canvas)
2222
self.outputFormat = Utils.fillRasterOutputFormat()
2323

24-
self.inputFiles = QStringList()
25-
self.warningDialog = QErrorMessage(self)
26-
2724
self.setParamsStatus(
2825
[
26+
(self.inputLayerCombo, [SIGNAL("currentIndexChanged(int)"), SIGNAL("editTextChanged(const QString &)")] ),
2927
(self.outputFileEdit, SIGNAL("textChanged(const QString &)")),
3028
(self.noDataSpin, SIGNAL("valueChanged(int)"), self.noDataCheck),
31-
(self.pctCheck, SIGNAL("stateChanged(int)")),
3229
( self.extentSelector, [SIGNAL("selectionStarted()"), SIGNAL("newExtentDefined()")] )
3330
]
3431
)
3532

33+
self.connect(self.selectInputFileButton, SIGNAL("clicked()"), self.fillInputFileEdit)
3634
self.connect(self.selectOutputFileButton, SIGNAL("clicked()"), self.fillOutputFileEdit)
3735
self.connect(self.extentSelector, SIGNAL("newExtentDefined()"), self.checkRun)
3836
self.connect(self.extentSelector, SIGNAL("selectionStarted()"), self.checkRun)
3937

4038
def show_(self):
41-
self.connect(self.canvas, SIGNAL("layersChanged()"), self.fillInputFiles)
4239
self.extentSelector.start()
4340
BasePluginWidget.show_(self)
4441

45-
self.fillInputFiles()
46-
self.checkRun()
47-
4842
def onClosing(self):
49-
self.disconnect(self.canvas, SIGNAL("layersChanged()"), self.fillInputFiles)
5043
self.extentSelector.stop()
5144
BasePluginWidget.onClosing(self)
5245

53-
def fillInputFiles(self):
54-
self.inputFiles = QStringList()
55-
56-
# Reversed list to have the topmost layer as the last one in the list
57-
# because "In areas of overlap, the last image will be copied over
58-
# earlier ones" (see http://www.gdal.org/gdal_merge.html).
59-
for i in range(self.canvas.layerCount()-1, -1, -1):
60-
layer = self.canvas.layer(i)
61-
# only raster layers, but not WMS ones
62-
if layer.type() != layer.RasterLayer:
63-
continue
64-
if layer.usesProvider() and layer.providerKey() != 'gdal':
65-
continue
66-
67-
# do not use the output file as input
68-
if layer.source() == self.outputFileEdit.text():
69-
continue
70-
self.inputFiles << layer.source()
71-
72-
if self.inputFiles.isEmpty():
73-
self.extentSelector.stop()
46+
def checkRun(self):
47+
self.base.enableRun( self.extentSelector.getExtent() != None )
7448

75-
if self.isVisible() and self.warningDialog.isHidden():
76-
msg = QString( self.tr("No active raster layers. You must add almost one raster layer to continue.") )
77-
self.warningDialog.showMessage(msg)
49+
def onLayersChanged(self):
50+
self.fillInputLayerCombo()
7851

79-
# refresh command when there are no active layers
80-
self.someValueChanged()
81-
else:
82-
self.warningDialog.hide()
83-
self.extentSelector.start()
52+
def fillInputLayerCombo(self):
53+
self.inputLayerCombo.clear()
54+
( self.layers, names ) = Utils.LayerRegistry.instance().getRasterLayers()
55+
self.inputLayerCombo.addItems( names )
8456

85-
self.checkRun()
57+
def fillInputFileEdit( self ):
58+
lastUsedFilter = Utils.FileFilter.lastUsedRasterFilter()
59+
inputFile = Utils.FileDialog.getOpenFileName( self, self.tr( "Select the input file for Translate" ), Utils.FileFilter.allRastersFilter(), lastUsedFilter )
60+
if inputFile.isEmpty():
61+
return
62+
Utils.FileFilter.setLastUsedRasterFilter( lastUsedFilter )
8663

87-
def checkRun(self):
88-
self.base.enableRun( not self.inputFiles.isEmpty() and self.extentSelector.getExtent() != None )
64+
self.inputLayerCombo.setCurrentIndex(-1)
65+
self.inputLayerCombo.setEditText( inputFile )
8966

9067
def fillOutputFileEdit(self):
9168
lastUsedFilter = Utils.FileFilter.lastUsedRasterFilter()
@@ -95,48 +72,36 @@ def fillOutputFileEdit(self):
9572
Utils.FileFilter.setLastUsedRasterFilter(lastUsedFilter)
9673

9774
self.outputFormat = Utils.fillRasterOutputFormat(lastUsedFilter, outputFile)
98-
99-
# do not use the output file as input
100-
if self.inputFiles.contains(outputFile):
101-
self.inputFiles.removeAt( self.inputFiles.indexOf(outputFile) )
10275
self.outputFileEdit.setText(outputFile)
10376

10477
def getArguments(self):
10578
arguments = QStringList()
10679
if self.noDataCheck.isChecked():
107-
arguments << "-n"
80+
arguments << "-a_nodata"
10881
arguments << str(self.noDataSpin.value())
109-
if self.pctCheck.isChecked():
110-
arguments << "-pct"
11182
if self.extentSelector.isCoordsValid():
11283
rect = self.extentSelector.getExtent()
11384
if rect != None:
114-
arguments << "-ul_lr"
85+
arguments << "-projwin"
11586
arguments << str(rect.xMinimum())
11687
arguments << str(rect.yMaximum())
11788
arguments << str(rect.xMaximum())
11889
arguments << str(rect.yMinimum())
119-
if not self.outputFileEdit.text().isEmpty():
90+
if not self.getOutputFileName().isEmpty():
12091
arguments << "-of"
12192
arguments << self.outputFormat
122-
if not self.outputFileEdit.text().isEmpty():
123-
arguments << "-o"
124-
arguments << self.outputFileEdit.text()
125-
126-
if self.pctCheck.isChecked() and len(self.inputFiles) > 1:
127-
# The topmost layer in the TOC is the last one in the list (see above),
128-
# but I want to grab the pseudocolor table from the first image (the
129-
# topmost layer in the TOC).
130-
# Workaround: duplicate the last layer inserting it also as the first
131-
# one to grab the pseudocolor table from it.
132-
arguments << self.inputFiles[ len(self.inputFiles)-1 ]
133-
134-
arguments << self.inputFiles
93+
arguments << self.getInputFileName()
94+
arguments << self.getOutputFileName()
13595
return arguments
13696

13797
def getOutputFileName(self):
13898
return self.outputFileEdit.text()
13999

100+
def getInputFileName(self):
101+
if self.inputLayerCombo.currentIndex() >= 0:
102+
return self.layers[self.inputLayerCombo.currentIndex()].source()
103+
return self.inputLayerCombo.currentText()
104+
140105
def addLayerIntoCanvas(self, fileInfo):
141106
self.iface.addRasterLayer(fileInfo.filePath())
142107

python/plugins/GdalTools/tools/widgetClipper.ui

+42-12
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<x>0</x>
88
<y>0</y>
99
<width>338</width>
10-
<height>165</height>
10+
<height>172</height>
1111
</rect>
1212
</property>
1313
<property name="sizePolicy">
@@ -22,7 +22,7 @@
2222
<layout class="QVBoxLayout" name="verticalLayout">
2323
<item>
2424
<layout class="QGridLayout" name="gridLayout">
25-
<item row="0" column="0">
25+
<item row="1" column="0">
2626
<widget class="QLabel" name="label_2">
2727
<property name="text">
2828
<string>&amp;Output file</string>
@@ -32,7 +32,7 @@
3232
</property>
3333
</widget>
3434
</item>
35-
<item row="0" column="1">
35+
<item row="1" column="1">
3636
<layout class="QHBoxLayout" name="horizontalLayout_2">
3737
<item>
3838
<widget class="QLineEdit" name="outputFileEdit">
@@ -53,20 +53,57 @@
5353
</item>
5454
</layout>
5555
</item>
56-
<item row="1" column="0">
56+
<item row="2" column="0">
5757
<widget class="QCheckBox" name="noDataCheck">
5858
<property name="text">
5959
<string>&amp;No data value</string>
6060
</property>
6161
</widget>
6262
</item>
63-
<item row="1" column="1">
63+
<item row="2" column="1">
6464
<widget class="QSpinBox" name="noDataSpin">
6565
<property name="maximum">
6666
<number>65000</number>
6767
</property>
6868
</widget>
6969
</item>
70+
<item row="0" column="1">
71+
<layout class="QHBoxLayout" name="horizontalLayout">
72+
<item>
73+
<widget class="QComboBox" name="inputLayerCombo">
74+
<property name="sizePolicy">
75+
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
76+
<horstretch>0</horstretch>
77+
<verstretch>0</verstretch>
78+
</sizepolicy>
79+
</property>
80+
<property name="editable">
81+
<bool>true</bool>
82+
</property>
83+
<property name="insertPolicy">
84+
<enum>QComboBox::NoInsert</enum>
85+
</property>
86+
</widget>
87+
</item>
88+
<item>
89+
<widget class="QPushButton" name="selectInputFileButton">
90+
<property name="text">
91+
<string>Select...</string>
92+
</property>
93+
</widget>
94+
</item>
95+
</layout>
96+
</item>
97+
<item row="0" column="0">
98+
<widget class="QLabel" name="label_3">
99+
<property name="text">
100+
<string>&amp;Input file</string>
101+
</property>
102+
<property name="buddy">
103+
<cstring>selectInputFileButton</cstring>
104+
</property>
105+
</widget>
106+
</item>
70107
</layout>
71108
</item>
72109
<item>
@@ -81,13 +118,6 @@
81118
</layout>
82119
</widget>
83120
</item>
84-
<item>
85-
<widget class="QCheckBox" name="pctCheck">
86-
<property name="text">
87-
<string>Grab pseudocolor table from the first image</string>
88-
</property>
89-
</widget>
90-
</item>
91121
</layout>
92122
</widget>
93123
<customwidgets>

0 commit comments

Comments
 (0)