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