pktools  2.6.7
Processing Kernel for geospatial data
mainwindow.cc
1 /**********************************************************************
2 mainwindow.cpp: GUI for pktools
3 Copyright (C) 2008-2014 Pieter Kempeneers
4 
5 This file is part of pktools
6 
7 pktools is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11 
12 pktools is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with pktools. If not, see <http://www.gnu.org/licenses/>.
19 ***********************************************************************/
20 
21 #include "mainwindow.h"
22 #include "ui_mainwindow.h"
23 #include <QFileDialog>
24 #include <QProcess>
25 #include <QMessageBox>
26 #include <QShortcut>
27 
28 MainWindow::MainWindow(QWidget *parent) :
29  QMainWindow(parent),
30  ui(new Ui::MainWindow)
31 {
32  ui->setupUi(this);
33  QStringList resamplelist;
34  resamplelist << "near" << "bilinear";
35  ui->resample->addItems(resamplelist);
36  QStringList crulelist;
37  crulelist << "overwrite" << "maxndvi" << "maxband" <<"minband" << "mean" << "mode" << "median" << "sum";
38  ui->crule->addItems(crulelist);
39  QStringList interleavedlist;
40  interleavedlist << "BAND" << "LINE" << "PIXEL" <<"BSQ";
41  ui->interleaved->addItems(interleavedlist);
42  QStringList compressedlist;
43  compressedlist << "NONE" << "LZW" << "PACKBITS" <<"DEFLATE";
44  ui->compressed->addItems(compressedlist);
45  QStringList otypelist;
46  otypelist << "" << "Byte" << "Int16" << "UInt16" << "UInt32" << "Int32" << "Float32" << "Float64" << "CInt16" << "CInt32" << "CFloat32" << "CFloat64";
47  ui->otype->addItems(otypelist);
48  QStringList oformatlist;
49  oformatlist << "" << "GTiff" << "HFA" << "ENVI";
50  ui->oformat->addItems(oformatlist);
51  setDefaults();
52 
53  ui->listWidget_input->setSelectionMode(QAbstractItemView::ExtendedSelection);
54  //pressing DEL activates the slots only when list widget has focus
55  QShortcut* shortcutDel = new QShortcut(QKeySequence(Qt::Key_Delete), ui->listWidget_input);
56  connect(shortcutDel, SIGNAL(activated()), this, SLOT(deleteItemInput()));
57  //pressing Backspace activates the slots only when list widget has focus
58  QShortcut* shortcutBackspace = new QShortcut(QKeySequence(Qt::Key_Backspace), ui->listWidget_input);
59  connect(shortcutBackspace, SIGNAL(activated()), this, SLOT(deleteItemInput()));
60 
61 }
62 
63 MainWindow::~MainWindow()
64 {
65  delete ui;
66 }
67 
68 void MainWindow::deleteItemInput()
69 {
70  qDeleteAll(ui->listWidget_input->selectedItems());
71 // delete ui->listWidget_input->currentItem();
72 }
73 
74 void MainWindow::setDefaults()
75 {
76  //input
77  ui->listWidget_input->clear();
78  ui->ulx->clear();
79  ui->uly->clear();
80  ui->lrx->clear();
81  ui->lry->clear();
82  ui->extent->clear();
83  //composit
84  ui->resample->setCurrentIndex(0);
85  ui->crule->setCurrentIndex(0);
86  ui->cband->setText("0");
87  ui->bndnodata->setText("0");
88  ui->srcnodata->setText("0");
89  ui->min->clear();
90  ui->max->clear();
91  //output
92  ui->output->clear();
93  ui->a_srs->clear();
94  ui->otype->setCurrentIndex(0);
95  ui->oformat->setCurrentIndex(0);
96  ui->ct->clear();
97  ui->dx->clear();
98  ui->dy->clear();
99  ui->interleaved->setCurrentIndex(0);
100  ui->tiled->setChecked(false);
101  ui->compressed->setCurrentIndex(0);
102  ui->dstnodata->clear();
103  ui->file->clear();
104 }
105 
106 void MainWindow::on_toolButton_input_clicked()
107 {
108  on_actionInput_image_triggered();
109 }
110 
111 void MainWindow::on_toolButton_output_clicked()
112 {
113  on_actionOutput_image_triggered();
114 }
115 
116 void MainWindow::on_toolButton_file_clicked()
117 {
118  on_actionSelection_Info_file_triggered();
119 }
120 
121 void MainWindow::on_toolButton_ct_clicked()
122 {
123  QString qsctfilename=QFileDialog::getSaveFileName(this,"Color table ASCII","","*.*");
124  ui->ct->setText(qsctfilename);
125 }
126 
127 void MainWindow::on_toolButton_defaults_clicked()
128 {
129  setDefaults();
130 }
131 
132 void MainWindow::on_actionInput_image_triggered()
133 {
134  QFileDialog dialog(this);
135  dialog.setDirectory(QDir::homePath());
136  dialog.setFileMode(QFileDialog::ExistingFiles);
137  QStringList fileNames;
138  if (dialog.exec())
139  fileNames = dialog.selectedFiles();
140  ui->listWidget_input->addItems(fileNames);
141 }
142 
143 void MainWindow::on_actionOutput_image_triggered()
144 {
145  QString outputfilename=QFileDialog::getSaveFileName(this,"Output image","","*.*");
146  ui->output->setText(outputfilename);
147 }
148 
149 void MainWindow::on_actionSelection_Info_file_triggered()
150 {
151  QString infofilename=QFileDialog::getSaveFileName(this,"Selection info image","","*.*");
152  ui->file->setText(infofilename);
153 }
154 
155 void MainWindow::on_actionQuit_triggered()
156 {
157  close();
158 }
159 
160 
161 void MainWindow::on_toolButton_Run_clicked()
162 {
163  try{
164  ui->commandLineEdit->clear();
165  ui->consoleEdit->clear();
166 
167  QString program = "pkcomposite";
168 
169  if(ui->listWidget_input->count()<1)
170  MainWindow::on_actionInput_image_triggered();
171  if(ui->listWidget_input->count()<1){
172  QString qsError="No input image file selected";
173  throw(qsError);
174  }
175 
176  for(int i = 0; i < ui->listWidget_input->count(); ++i)
177  {
178  QListWidgetItem* item = ui->listWidget_input->item(i);
179  program+=" --input "+item->text();
180  }
181 
182  if(ui->output->text().isEmpty())
183  MainWindow::on_actionOutput_image_triggered();
184  if(ui->output->text().isEmpty()){
185  QString qsError="No output image file selected";
186  throw(qsError);
187  }
188 
189  program+=" --resample "+ui->resample->currentText();
190  program+=" --crule "+ui->crule->currentText();
191  if(!ui->otype->currentText().isEmpty())
192  program+=" --otype "+ui->otype->currentText();
193  if(!ui->oformat->currentText().isEmpty())
194  program+=" --oformat "+ui->oformat->currentText();
195  program+=" -co COMPRESS="+ui->compressed->currentText();
196  program+=" -co INTERLEAVE="+ui->interleaved->currentText();
197  if(ui->tiled->isChecked())
198  program+=" -co TILED=YES";
199 
200 // QList<QCheckBox*> qcheckBoxList = this->findChildren<QCheckBox *>();
201 
202 // for(QList<QCheckBox*>::ConstIterator qcbit=qcheckBoxList.begin();qcbit!=qcheckBoxList.end();++qcbit){
203 // if((*qcbit)->isChecked()){
204 // QString qsOption;
205 // qsOption+=" --";
206 // qsOption+=(*qcbit)->objectName();
207 // program+=qsOption;
208 // }
209 // }
210 
211  QList<QLineEdit*> qlineEditList = this->findChildren<QLineEdit *>();
212 
213  for(QList<QLineEdit*>::ConstIterator qlbit=qlineEditList.begin();qlbit!=qlineEditList.end();++qlbit){
214  if(!((*qlbit)->text().isEmpty())){
215  QString qsOption;
216  qsOption+=" --";
217  qsOption+=(*qlbit)->objectName();
218  qsOption+=" ";
219  qsOption+=(*qlbit)->text();
220  program+=qsOption;
221  }
222  }
223 
224  ui->commandLineEdit->insert(program);
225 
226 // QProcess *myProcess = new QProcess(parent);
227  QProcess *myProcess = new QProcess(this);
228  myProcess->start(program);
229  myProcess->setProcessChannelMode(QProcess::MergedChannels);
230  this->setCursor(Qt::WaitCursor);
231  myProcess->waitForFinished(-1);
232  this->setCursor(Qt::ArrowCursor);
233  QString p_stderr = myProcess->readAllStandardError();
234  if(!p_stderr.isEmpty()){
235  QMessageBox msgBox;
236  msgBox.setText(p_stderr);
237  msgBox.exec();
238  }
239  QString p_stdout = myProcess->readAll();
240  ui->consoleEdit->insertPlainText(p_stdout);
241  delete myProcess;
242  }
243  catch(QString qsError){
244  QMessageBox msgBox;
245  msgBox.setText(qsError);
246  msgBox.exec();
247  }
248 }
249 
250 void MainWindow::on_toolButton_extent_clicked()
251 {
252  on_actionExtent_triggered();
253 }
254 
255 void MainWindow::on_actionExtent_triggered()
256 {
257  QString qsextent = QFileDialog::getOpenFileName(this, "extent");
258  ui->extent->setText(qsextent);
259 }
Definition: mainwindow.h:27