00001 #include <QtGui>
00002 #include "linkgrid.h"
00003 #include "../../pihmRasterLIBS/lsm.h"
00004 #include "../../pihmRasterLIBS/flood.h"
00005 #include "../../pihmRasterLIBS/setdir.h"
00006 #include "../../pihmRasterLIBS/aread8.h"
00007 #include "../../pihmRasterLIBS/streamSegmentation.h"
00008
00009 #include "../../pihmLIBS/helpDialog/helpdialog.h"
00010
00011 #include <fstream>
00012 using namespace std;
00013
00014 LinkGridDlg::LinkGridDlg(QWidget *parent)
00015 {
00016 setupUi(this);
00017 connect(inputSTRBrowseButton, SIGNAL(clicked()), this, SLOT(inputSTRBrowse()));
00018 connect(inputFDRBrowseButton, SIGNAL(clicked()), this, SLOT(inputFDRBrowse()));
00019 connect(outputBrowseButton, SIGNAL(clicked()), this, SLOT(outputBrowse()));
00020 connect(runButton, SIGNAL(clicked()), this, SLOT(run()));
00021 connect(helpButton, SIGNAL(clicked()), this, SLOT(help()));
00022 connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
00023 }
00024
00025 void LinkGridDlg::inputSTRBrowse()
00026 {
00027 QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","Stream Grid File(*.adf *.asc)");
00028 inputSTRFileLineEdit->setText(str);
00029 }
00030
00031 void LinkGridDlg::inputFDRBrowse()
00032 {
00033 QString str = QFileDialog::getOpenFileName(this, "Choose File", "~/","Flow Dir Grid File(*.adf *.asc)");
00034 inputFDRFileLineEdit->setText(str);
00035 }
00036
00037 void LinkGridDlg::outputBrowse()
00038 {
00039 QString temp = QFileDialog::getSaveFileName(this, "Choose File", "~/","Link Grid File(*.adf *.asc)");
00040 QString tmp = temp;
00041 if(!(tmp.toLower()).endsWith(".asc")){
00042 tmp.append(".asc");
00043 temp = tmp;
00044 }
00045
00046 outputFileLineEdit->setText(temp);
00047 }
00048
00049
00050 void LinkGridDlg::run()
00051 {
00052 QString logFileName("c:\log.html");
00053 ofstream log;
00054 log.open(logFileName.ascii());
00055 log<<"<html><body><font size=3 color=black><p> Verifying Files...</p></font></body></html>";
00056 log.close();
00057 messageLog->setSource(logFileName);
00058 messageLog->setFocus();
00059 messageLog->setModified(TRUE);
00060
00061 QString inputSTRFileName((inputSTRFileLineEdit->text()));
00062 QString inputFDRFileName((inputFDRFileLineEdit->text()));
00063 QString outputFileName((outputFileLineEdit->text()));
00064
00065 ifstream STRinFile; STRinFile.open((inputSTRFileLineEdit->text()).ascii());
00066 ifstream FDRinFile; FDRinFile.open((inputFDRFileLineEdit->text()).ascii());
00067 ofstream outFile; outFile.open((outputFileLineEdit->text()).ascii());
00068 int runFlag = 1;
00069
00070 log.open(logFileName.ascii(), ios::app);
00071 if(inputSTRFileName.length()==0){
00072 log<<"<p><font size=3 color=red> Error! Please input Stream Grid Input File</p>";
00073 runFlag = 0;
00074 }
00075 else{
00076 log<<"</p><p>Checking... "<<inputSTRFileName.ascii()<<"... ";
00077 if(STRinFile == NULL){
00078 log<<"<font size=3 color=red> Error!</p>";
00079 qWarning("\n%s doesn't exist!", (inputSTRFileLineEdit->text()).ascii());
00080 runFlag = 0;
00081 }
00082 else
00083 log<<"Done!</p>";
00084 }
00085 log.close();
00086 messageLog->reload();
00087 QApplication::processEvents();
00088
00089 log.open(logFileName.ascii(), ios::app);
00090 if(inputFDRFileName.length()==0){
00091 log<<"<p><font size=3 color=red> Error! Please input Flow Dir. Grid Input File</p>";
00092 runFlag = 0;
00093 }
00094 else{
00095 log<<"</p><p>Checking... "<<inputFDRFileName.ascii()<<"... ";
00096 if(FDRinFile == NULL){
00097 log<<"<font size=3 color=red> Error!</p>";
00098 qWarning("\n%s doesn't exist!", (inputFDRFileLineEdit->text()).ascii());
00099 runFlag = 0;
00100 }
00101 else
00102 log<<"Done!</p>";
00103 }
00104 log.close();
00105 messageLog->reload();
00106 QApplication::processEvents();
00107
00108 log.open(logFileName.ascii(), ios::app);
00109 if(outputFileName.length()==0){
00110 log<<"<p><font size=3 color=red> Error! Please input Link Grid Output File</p>";
00111 runFlag = 0;
00112 }
00113 else{
00114 log<<"</p><p>Checking... "<<outputFileName.ascii()<<"... ";
00115 if(outFile == NULL){
00116 log<<"<font size=3 color=red> Error!</p>";
00117 qWarning("\nCan not open output file name");
00118 runFlag = 0;
00119 }
00120 else
00121 log<<"Done!</p>";
00122 }
00123 log.close();
00124 messageLog->reload();
00125 QApplication::processEvents();
00126
00127 if(runFlag == 1){
00128
00129 log.open(logFileName.ascii(), ios::app);
00130 log<<"<p>Running...";
00131 log.close();
00132 messageLog->reload();
00133 QApplication::processEvents();
00134
00135 int err1 = streamSegmentation((char *)inputSTRFileName.ascii(), (char *)inputFDRFileName.ascii(), (char *)outputFileName.ascii(), "node.dat" );
00136
00137 log.open(logFileName.ascii(), ios::app);
00138 log<<" Done!</p>";
00139 log.close();
00140 messageLog->reload();
00141 QApplication::processEvents();
00142
00143 if(showSG_DFrame->isChecked() == 1){
00144
00145 applicationPointer->addRasterLayer(QStringList(outputFileName));
00146 }
00147 }
00148 }
00149
00150 void LinkGridDlg::help()
00151 {
00152 helpDialog* hlpDlg = new helpDialog(this, "Link Grid", 1, "helpFiles/linkgrid.html", "Help :: Link Grid");
00153 hlpDlg->show();
00154
00155 }
00156
00157 void LinkGridDlg::setApplicationPointer(QgisApp* appPtr){
00158 applicationPointer = appPtr;
00159 }