Subversion Repositories public iLand

Rev

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