Rev 835 | Rev 891 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 835 | Rev 837 | ||
---|---|---|---|
Line 47... | Line 47... | ||
47 | ModelController::ModelController() |
47 | ModelController::ModelController() |
48 | {
|
48 | {
|
49 | mModel = NULL; |
49 | mModel = NULL; |
50 | mPaused = false; |
50 | mPaused = false; |
51 | mRunning = false; |
51 | mRunning = false; |
- | 52 | mHasError = false; |
|
52 | mYearsToRun = 0; |
53 | mYearsToRun = 0; |
53 | mViewerWindow = 0; |
54 | mViewerWindow = 0; |
54 | mDynamicOutputEnabled = false; |
55 | mDynamicOutputEnabled = false; |
55 | }
|
56 | }
|
56 | 57 | ||
Line 130... | Line 131... | ||
130 | try { |
131 | try { |
131 | GlobalSettings::instance()->loadProjectFile(mInitFile); |
132 | GlobalSettings::instance()->loadProjectFile(mInitFile); |
132 | } catch(const IException &e) { |
133 | } catch(const IException &e) { |
133 | QString error_msg = e.message(); |
134 | QString error_msg = e.message(); |
134 | Helper::msg(error_msg); |
135 | Helper::msg(error_msg); |
- | 136 | mHasError = true; |
|
- | 137 | mLastError = error_msg; |
|
135 | qDebug() << error_msg; |
138 | qDebug() << error_msg; |
136 | }
|
139 | }
|
137 | }
|
140 | }
|
138 | 141 | ||
139 | void ModelController::create() |
142 | void ModelController::create() |
Line 141... | Line 144... | ||
141 | if (!canCreate()) |
144 | if (!canCreate()) |
142 | return; |
145 | return; |
143 | emit bufferLogs(true); |
146 | emit bufferLogs(true); |
144 | 147 | ||
145 | try { |
148 | try { |
- | 149 | mHasError = false; |
|
146 | DebugTimer::clearAllTimers(); |
150 | DebugTimer::clearAllTimers(); |
147 | mModel = new Model(); |
151 | mModel = new Model(); |
148 | mModel->loadProject(); |
152 | mModel->loadProject(); |
149 | if (!mModel->isSetup()) |
- | |
- | 153 | if (!mModel->isSetup()) { |
|
- | 154 | mHasError = true; |
|
- | 155 | mLastError = "An error occured during the loading of the project. Please check the logs."; |
|
150 | return; |
156 | return; |
- | 157 | }
|
|
151 | 158 | ||
152 | // reset clock...
|
159 | // reset clock...
|
153 | GlobalSettings::instance()->setCurrentYear(1); // reset clock |
160 | GlobalSettings::instance()->setCurrentYear(1); // reset clock |
154 | // initialization of trees, output on startup
|
161 | // initialization of trees, output on startup
|
155 | mModel->beforeRun(); |
162 | mModel->beforeRun(); |
156 | } catch(const IException &e) { |
163 | } catch(const IException &e) { |
157 | QString error_msg = e.message(); |
164 | QString error_msg = e.message(); |
158 | Helper::msg(error_msg); |
165 | Helper::msg(error_msg); |
- | 166 | mLastError = error_msg; |
|
- | 167 | mHasError = true; |
|
159 | qDebug() << error_msg; |
168 | qDebug() << error_msg; |
160 | }
|
169 | }
|
161 | emit bufferLogs(false); |
170 | emit bufferLogs(false); |
162 | 171 | ||
163 | qDebug() << "Model created."; |
172 | qDebug() << "Model created."; |
Line 182... | Line 191... | ||
182 | // QCoreApplication::processEvents();
|
191 | // QCoreApplication::processEvents();
|
183 | #endif
|
192 | #endif
|
184 | if (mPaused) |
193 | if (mPaused) |
185 | return; |
194 | return; |
186 | bool doStop = false; |
195 | bool doStop = false; |
187 | bool hasError = false; |
- | |
- | 196 | mHasError = false; |
|
188 | if (GlobalSettings::instance()->currentYear()<=1) { |
197 | if (GlobalSettings::instance()->currentYear()<=1) { |
189 | sLastTime = QTime::currentTime(); // reset clock at the beginning of the simulation |
198 | sLastTime = QTime::currentTime(); // reset clock at the beginning of the simulation |
190 | }
|
199 | }
|
191 | 200 | ||
192 | if (!mCanceled && GlobalSettings::instance()->currentYear() < mYearsToRun) { |
201 | if (!mCanceled && GlobalSettings::instance()->currentYear() < mYearsToRun) { |
193 | emit bufferLogs(true); |
202 | emit bufferLogs(true); |
194 | 203 | ||
195 | hasError = runYear(); // do the work! |
- | |
- | 204 | mHasError = runYear(); // do the work! |
|
196 | 205 | ||
197 | mRunning = true; |
206 | mRunning = true; |
198 | emit year(GlobalSettings::instance()->currentYear()); |
207 | emit year(GlobalSettings::instance()->currentYear()); |
199 | if (!hasError) { |
- | |
- | 208 | if (!mHasError) { |
|
200 | int elapsed = sLastTime.msecsTo(QTime::currentTime()); |
209 | int elapsed = sLastTime.msecsTo(QTime::currentTime()); |
201 | int time=0; |
210 | int time=0; |
202 | if (currentYear()%50==0 && elapsed>10000) |
211 | if (currentYear()%50==0 && elapsed>10000) |
203 | time = 100; // a 100ms pause... |
212 | time = 100; // a 100ms pause... |
204 | if (currentYear()%100==0 && elapsed>10000) { |
213 | if (currentYear()%100==0 && elapsed>10000) { |
Line 208... | Line 217... | ||
208 | sLastTime = QTime::currentTime(); // reset clock |
217 | sLastTime = QTime::currentTime(); // reset clock |
209 | qDebug() << "--- little break ---- (after " << elapsed << "ms)."; |
218 | qDebug() << "--- little break ---- (after " << elapsed << "ms)."; |
210 | //QTimer::singleShot(time,this, SLOT(runloop()));
|
219 | //QTimer::singleShot(time,this, SLOT(runloop()));
|
211 | }
|
220 | }
|
212 | 221 | ||
213 | }
|
- | |
214 | else
|
- | |
- | 222 | } else { |
|
215 | doStop = true; // an error occured |
223 | doStop = true; // an error occured |
- | 224 | mLastError = "An error occured while running the model. Please check the logs."; |
|
- | 225 | mHasError = true; |
|
- | 226 | }
|
|
216 | 227 | ||
217 | } else { |
228 | } else { |
218 | doStop = true; // all years simulated |
229 | doStop = true; // all years simulated |
219 | }
|
230 | }
|
220 | 231 | ||
Line 337... | Line 348... | ||
337 | void ModelController::throwError(const QString msg) |
348 | void ModelController::throwError(const QString msg) |
338 | {
|
349 | {
|
339 | QMutexLocker lock(&error_mutex); // serialize access |
350 | QMutexLocker lock(&error_mutex); // serialize access |
340 | qDebug() << "ModelController: throwError reached:"; |
351 | qDebug() << "ModelController: throwError reached:"; |
341 | qDebug() << msg; |
352 | qDebug() << msg; |
- | 353 | mLastError = msg; |
|
- | 354 | mHasError = true; |
|
342 | emit bufferLogs(false); |
355 | emit bufferLogs(false); |
343 | emit bufferLogs(true); // start buffering again |
356 | emit bufferLogs(true); // start buffering again |
344 | 357 | ||
345 | throw IException(msg); // raise error again |
358 | throw IException(msg); // raise error again |
346 | 359 |