@@ -152,6 +152,39 @@ bool QgsGrassModule::inExecPath ( QString file )
152
152
return true ;
153
153
}
154
154
155
+ QStringList QgsGrassModule::execArguments ( QString module )
156
+ {
157
+ QString exe;
158
+ QStringList arguments;
159
+
160
+ exe = QgsGrassModule::findExec ( module );
161
+ if ( exe.isNull () )
162
+ {
163
+ return arguments;
164
+ }
165
+
166
+ #if defined(WIN32)
167
+ QFileInfo fi ( exe );
168
+ if ( fi.isExecutable () )
169
+ {
170
+ arguments.append (exe);
171
+ }
172
+ else // script
173
+ {
174
+ QString cmd = QgsApplication::applicationDirPath () + " /msys/bin/sh" ;
175
+ arguments.append ( cmd );
176
+
177
+ // Important! Otherwise it does not find DLL even if it is in PATH
178
+ arguments.append ( " --login" );
179
+ arguments.append ( exe );
180
+ }
181
+ #else
182
+ arguments.append (exe);
183
+ #endif
184
+
185
+ return arguments;
186
+ }
187
+
155
188
QgsGrassModule::QgsGrassModule ( QgsGrassTools *tools, QgisApp *qgisApp, QgisIface *iface,
156
189
QString path, QWidget * parent, const char * name, Qt::WFlags f )
157
190
:QgsGrassModuleBase ( ), mSuccess(false )
@@ -324,40 +357,17 @@ QgsGrassModuleStandardOptions::QgsGrassModuleStandardOptions (
324
357
mXName = xname;
325
358
mParent = parent;
326
359
327
- QString exe ;
360
+ QStringList arguments = QgsGrassModule::execArguments ( mXName ) ;
328
361
329
- #if defined(WIN32)
330
- exe = QgsGrassModule::findExec ( xname );
331
- if ( exe.isNull () )
362
+ if ( arguments.size () == 0 )
332
363
{
333
364
QMessageBox::warning ( 0 , " Warning" , " Cannot find module "
334
- + xname );
365
+ + mXName );
335
366
return ;
336
367
}
337
- #else
338
- exe = mXName ;
339
- #endif
340
368
341
- QString cmd;
342
- QStringList arguments;
343
-
344
- #if defined(WIN32)
345
- QFileInfo fi ( exe );
346
- if ( fi.isExecutable () )
347
- {
348
- cmd = exe;
349
- }
350
- else // script
351
- {
352
- cmd = QgsApplication::applicationDirPath () + " /msys/bin/sh" ;
369
+ QString cmd = arguments.takeFirst ();
353
370
354
- // Important! Otherwise it does not find DLL even if it is in PATH
355
- arguments.append ( " --login" );
356
- arguments.append ( exe );
357
- }
358
- #else
359
- cmd = exe;
360
- #endif
361
371
arguments.append ( " --interface-description" );
362
372
363
373
QProcess process ( this );
@@ -1098,21 +1108,36 @@ void QgsGrassModule::run()
1098
1108
// -> necessary to pass region as enviroment variable
1099
1109
// but the feature is available in GRASS 6.1 only since 23.3.2006
1100
1110
1101
- QStringList env;
1102
-
1103
1111
if ( resetRegion )
1104
1112
{
1113
+ QStringList env;
1105
1114
env = QProcess::systemEnvironment ();
1106
1115
QString reg = QgsGrass::regionString ( &tempWindow );
1107
1116
std::cerr << " reg: " << reg.ascii () << std::endl;
1108
1117
env.append ( " GRASS_REGION=" + reg );
1118
+ mProcess .setEnvironment ( env );
1109
1119
}
1110
- mProcess .setEnvironment ( env );
1111
1120
1112
- mProcess . start ( mXName , arguments );
1121
+ QStringList execArguments = QgsGrassModule::execArguments ( mXName );
1113
1122
1114
- if ( resetRegion )
1123
+ if ( execArguments.size () == 0 )
1124
+ {
1125
+ QMessageBox::warning ( 0 , " Warning" , " Cannot find module "
1126
+ + mXName );
1127
+ return ;
1128
+ }
1129
+
1130
+ QString cmd = execArguments.takeFirst ();
1131
+ execArguments += arguments;
1132
+
1133
+ mProcess .start ( cmd, execArguments );
1134
+
1135
+ mProcess .waitForStarted ();
1136
+ if ( mProcess .state () != QProcess::Running )
1115
1137
{
1138
+ QMessageBox::warning ( 0 , " Warning" , " Cannot start module: "
1139
+ + mProcess .errorString () );
1140
+ return ;
1116
1141
}
1117
1142
1118
1143
mTabWidget ->setCurrentPage (1 );
0 commit comments