pktools  2.6.7
Processing Kernel for geospatial data
mainwindow.cpp
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 #include "mainwindow.h"
21 #include "ui_mainwindow.h"
22 #include <QFileDialog>
23 #include <QStandardItemModel>
24 #include <QMessageBox>
25 #include <QProcess>
26 
27 MainWindow::MainWindow(QWidget *parent) :
28  QMainWindow(parent),
29  ui(new Ui::MainWindow)
30 {
31  ui->setupUi(this);
32  QStringList formatlist;
33  formatlist << "SQLite" << "ESRI Shapefile";
34  ui->f->addItems(formatlist);
35  setDefaults();
36 }
37 
38 MainWindow::~MainWindow()
39 {
40  delete ui;
41 }
42 
43 void MainWindow::setDefaults()
44 {
45  //tab input/output
46  ui->input->clear();
47  ui->reference->clear();
48  ui->msknodata->setText("0");
49  ui->output->clear();
50  ui->confusion->setChecked(false);
51 }
52 
53 void MainWindow::on_actionReference_triggered()
54 {
55  QString qsreference= QFileDialog::getOpenFileName(this, "Reference");
56  ui->reference->setText(qsreference);
57 }
58 
59 void MainWindow::on_actionMask_triggered()
60 {
61  QString qsmask = QFileDialog::getOpenFileName(this, "Mask");
62  ui->mask->setText(qsmask);
63 }
64 
65 void MainWindow::on_actionOutput_triggered()
66 {
67  QString qsoutput = QFileDialog::getSaveFileName(this,"Output image","","*.*");
68  ui->output->setText(qsoutput);
69 }
70 
71 void MainWindow::on_actionInput_triggered()
72 {
73  QString qsinput = QFileDialog::getOpenFileName(this, "Input");
74  ui->input->setText(qsinput);
75 }
76 
77 void MainWindow::on_toolButton_input_clicked()
78 {
79  on_actionInput_triggered();
80 }
81 
82 void MainWindow::on_toolButton_mask_clicked()
83 {
84  on_actionMask_triggered();
85 }
86 
87 void MainWindow::on_toolButton_output_clicked()
88 {
89  on_actionOutput_triggered();
90 }
91 
92 void MainWindow::on_toolButton_reference_clicked()
93 {
94  on_actionReference_triggered();
95 }
96 
97 void MainWindow::setClassTable(const QStringList &labels)
98 {
99  QStandardItemModel *model = new QStandardItemModel(labels.size(),2,this); //nlabel rows and 2 columns
100  model->setHorizontalHeaderItem(0, new QStandardItem(QString("label name")));
101  model->setHorizontalHeaderItem(1, new QStandardItem(QString("class nr")));
102  for(int ilabel=0;ilabel<labels.size();++ilabel){
103  QStandardItem *firstCol = new QStandardItem(QString(labels[ilabel]));
104  model->setItem(ilabel,0,firstCol);
105  QStandardItem *secondCol = new QStandardItem(QString::number(ilabel+1));
106  model->setItem(ilabel,1,secondCol);
107  }
108  ui->tableView_labels->setModel(model);
109 }
110 
111 void MainWindow::on_pushButton_run_clicked()
112 {
113  try{
114  ui->commandLineEdit->clear();
115  ui->consoleEdit->clear();
116  QString program = "pkdiff";
117  if(ui->input->text().isEmpty()){
118  MainWindow::on_actionInput_triggered();
119  if(ui->input->text().isEmpty()){
120  QString qsError="No input raster dataset selected";
121  throw(qsError);
122  }
123  }
124  if(ui->reference->text().isEmpty()){
125  MainWindow::on_actionReference_triggered();
126  if(ui->reference->text().isEmpty()){
127  QString qsError="No reference vector file selected";
128  throw(qsError);
129  }
130  }
131  for(int irow=0;irow<ui->tableView_labels->model()->rowCount();++irow){
132  QString qsOption;
133  qsOption+=" --class ";
134  qsOption+=ui->tableView_labels->model()->data(ui->tableView_labels->model()->index(irow,0)).toString();
135  qsOption+=" --reclass ";
136  qsOption+=ui->tableView_labels->model()->data(ui->tableView_labels->model()->index(irow,1)).toString();
137  program+=qsOption;
138  }
139 
140  QList<QComboBox*> qcomboBoxList = this->findChildren<QComboBox *>();
141 
142  for(QList<QComboBox*>::ConstIterator qcbit=qcomboBoxList.begin();qcbit!=qcomboBoxList.end();++qcbit){
143  QString qsOption;
144  qsOption+=" --";
145  qsOption+=(*qcbit)->objectName();
146  program+=qsOption;
147  program+=" ";
148  program+=(*qcbit)->currentText();
149  }
150 
151  QList<QLineEdit*> qlineEditList = this->findChildren<QLineEdit *>();
152 
153  for(QList<QLineEdit*>::ConstIterator qlbit=qlineEditList.begin();qlbit!=qlineEditList.end();++qlbit){
154  if(!((*qlbit)->text().isEmpty())){
155  QString qsOption;
156  qsOption+=" --";
157  qsOption+=(*qlbit)->objectName();
158  qsOption+=" ";
159  qsOption+=(*qlbit)->text();
160  program+=qsOption;
161  }
162  }
163 
164  if(ui->confusion->isChecked())
165  program+=" --confusion";
166 
167  ui->commandLineEdit->setText(program);
168 
169 // QProcess *myProcess = new QProcess(parent);
170  QProcess *myProcess = new QProcess(this);
171  myProcess->start(program);
172  myProcess->setProcessChannelMode(QProcess::MergedChannels);
173  this->setCursor(Qt::WaitCursor);
174  myProcess->waitForFinished(-1);
175  this->setCursor(Qt::ArrowCursor);
176  QMessageBox msgBox;
177  QString p_stderr = myProcess->readAllStandardError();
178  if(!p_stderr.isEmpty()){
179  msgBox.setText(p_stderr);
180  msgBox.exec();
181  }
182  QString p_stdout = myProcess->readAll();
183  ui->consoleEdit->insertPlainText(p_stdout);
184  delete myProcess;
185  }
186  catch(QString qsError){
187  QMessageBox msgBox;
188  msgBox.setText(qsError);
189  msgBox.exec();
190  }
191 }
192 
193 void MainWindow::on_pushButton_restore_clicked()
194 {
195  setDefaults();
196 }
197 
198 void MainWindow::on_commandLinkButtonPrepareTable_clicked()
199 {
200  int nclass=ui->nclass->text().toInt();
201  QStringList labels;
202  for(int iclass=1;iclass<=nclass;++iclass){
203  QString lstring="label";
204  lstring+=QString::number(iclass);
205  labels << lstring;
206  }
207  setClassTable(labels);
208 }
Definition: mainwindow.h:27