Subversion Repositories public iLand

Rev

Rev 1221 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1221 Rev 1222
1
Redirecting to URL 'https://iland.boku.ac.at/svn/iland/tags/release_1.0/src/core/modelcontroller.h':
1
Redirecting to URL 'https://iland.boku.ac.at/svn/iland/tags/release_1.0/src/core/modelcontroller.h':
2
/********************************************************************************************
2
/********************************************************************************************
3
**    iLand - an individual based forest landscape and disturbance model
3
**    iLand - an individual based forest landscape and disturbance model
4
**    http://iland.boku.ac.at
4
**    http://iland.boku.ac.at
5
**    Copyright (C) 2009-  Werner Rammer, Rupert Seidl
5
**    Copyright (C) 2009-  Werner Rammer, Rupert Seidl
6
**
6
**
7
**    This program is free software: you can redistribute it and/or modify
7
**    This program is free software: you can redistribute it and/or modify
8
**    it under the terms of the GNU General Public License as published by
8
**    it under the terms of the GNU General Public License as published by
9
**    the Free Software Foundation, either version 3 of the License, or
9
**    the Free Software Foundation, either version 3 of the License, or
10
**    (at your option) any later version.
10
**    (at your option) any later version.
11
**
11
**
12
**    This program is distributed in the hope that it will be useful,
12
**    This program is distributed in the hope that it will be useful,
13
**    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
**    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
**    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
**    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
**    GNU General Public License for more details.
15
**    GNU General Public License for more details.
16
**
16
**
17
**    You should have received a copy of the GNU General Public License
17
**    You should have received a copy of the GNU General Public License
18
**    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
**    along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
********************************************************************************************/
19
********************************************************************************************/
20
20
21
#ifndef MODELCONTROLLER_H
21
#ifndef MODELCONTROLLER_H
22
#define MODELCONTROLLER_H
22
#define MODELCONTROLLER_H
23
#include <QObject>
23
#include <QObject>
24
#include <QHash>
24
#include <QHash>
25
#include "grid.h"
25
#include "grid.h"
26
#include "layeredgrid.h"
26
#include "layeredgrid.h"
27
class Model;
27
class Model;
28
class MainWindow;
28
class MainWindow;
29
class MapGrid;
29
class MapGrid;
30
class Species;
30
class Species;
31
31
32
class ModelController: public QObject
32
class ModelController: public QObject
33
{
33
{
34
    Q_OBJECT
34
    Q_OBJECT
35
public:
35
public:
36
    ModelController();
36
    ModelController();
37
    ~ModelController();
37
    ~ModelController();
38
    void setMainWindow(MainWindow *mw) { mViewerWindow = mw; }
38
    void setMainWindow(MainWindow *mw) { mViewerWindow = mw; }
39
    MainWindow *mainWindow() { return mViewerWindow; }
39
    MainWindow *mainWindow() { return mViewerWindow; }
40
    void connectSignals(); // connect signal/slots to the main window if available
40
    void connectSignals(); // connect signal/slots to the main window if available
41
    Model *model() const { return mModel; }
41
    Model *model() const { return mModel; }
42
    // bool checkers...
42
    // bool checkers...
43
    bool canCreate(); ///< return true if the model can be created (settings loaded and model does not exist)
43
    bool canCreate(); ///< return true if the model can be created (settings loaded and model does not exist)
44
    bool canDestroy(); ///< model may be destroyed
44
    bool canDestroy(); ///< model may be destroyed
45
    bool canRun(); ///< model may be run
45
    bool canRun(); ///< model may be run
46
    bool isRunning(); ///< model is running
46
    bool isRunning(); ///< model is running
47
    bool isFinished(); ///< returns true if there is a valid model state, but the run is finished
47
    bool isFinished(); ///< returns true if there is a valid model state, but the run is finished
48
    bool isPaused(); ///< returns true if the model is currently paused
48
    bool isPaused(); ///< returns true if the model is currently paused
49
    bool hasError() { return mHasError; } ///< returns true if an error occured during the last operation
49
    bool hasError() { return mHasError; } ///< returns true if an error occured during the last operation
50
    QString lastError() { return mLastError; } ///< error message of the last received error
50
    QString lastError() { return mLastError; } ///< error message of the last received error
51
    // simulation length
51
    // simulation length
52
    int currentYear() const; ///< return current year of the model
52
    int currentYear() const; ///< return current year of the model
53
    int totalYears() const { return mYearsToRun; } ///< returns total number of years to simulate
53
    int totalYears() const { return mYearsToRun; } ///< returns total number of years to simulate
54
    // error handling
54
    // error handling
55
    void throwError(const QString msg);
55
    void throwError(const QString msg);
56
    // dynamic outputs (variable fields)
56
    // dynamic outputs (variable fields)
57
    void setDynamicOutputEnabled(bool enabled) { mDynamicOutputEnabled = enabled; }
57
    void setDynamicOutputEnabled(bool enabled) { mDynamicOutputEnabled = enabled; }
58
    void setupDynamicOutput(QString fieldList);
58
    void setupDynamicOutput(QString fieldList);
59
    QString dynamicOutput();
59
    QString dynamicOutput();
60
    // some informational services
60
    // some informational services
61
    QList<const Species *> availableSpecies();
61
    QList<const Species *> availableSpecies();
62
    void setLoadedJavascriptFile(QString filename) { mLastLoadedJSFile = filename; }
62
    void setLoadedJavascriptFile(QString filename) { mLastLoadedJSFile = filename; }
63
    QString loadedJavascriptFile() const { return mLastLoadedJSFile; }
63
    QString loadedJavascriptFile() const { return mLastLoadedJSFile; }
64
64
65
65
66
    void saveScreenshot(QString file_name); ///< saves a screenshot of the central view widget to 'file_name'
66
    void saveScreenshot(QString file_name); ///< saves a screenshot of the central view widget to 'file_name'
67
    void addGrid(const FloatGrid *grid, const QString &name, const GridViewType view_type, double min_value, double max_value);
67
    void addGrid(const FloatGrid *grid, const QString &name, const GridViewType view_type, double min_value, double max_value);
68
    void paintMap(MapGrid *map, double min_value, double max_value);
68
    void paintMap(MapGrid *map, double min_value, double max_value);
69
69
70
    void addLayers(const LayeredGridBase *layers, const QString &name);
70
    void addLayers(const LayeredGridBase *layers, const QString &name);
71
    void removeLayers(const LayeredGridBase *layers);
71
    void removeLayers(const LayeredGridBase *layers);
72
    void setViewport(QPointF center_point, double scale_px_per_m);
72
    void setViewport(QPointF center_point, double scale_px_per_m);
73
73
74
    void setUIShortcuts(QVariantMap shortcuts);
74
    void setUIShortcuts(QVariantMap shortcuts);
75
signals:
75
signals:
76
    void finished(QString errorMessage); ///< model has finished run (errorMessage is empty in case of success)
76
    void finished(QString errorMessage); ///< model has finished run (errorMessage is empty in case of success)
77
    void year(int year); ///< signal indicating a year of the simulation has been processed
77
    void year(int year); ///< signal indicating a year of the simulation has been processed
78
    void bufferLogs(bool do_buffer); ///< signal indicating that logs should be buffered (true, model run mode) or that buffering should stop (false) for "interactive" mode
78
    void bufferLogs(bool do_buffer); ///< signal indicating that logs should be buffered (true, model run mode) or that buffering should stop (false) for "interactive" mode
79
    void stateChanged(); ///< is emitted when model started/stopped/paused
79
    void stateChanged(); ///< is emitted when model started/stopped/paused
80
public slots:
80
public slots:
81
    void setFileName(QString initFileName); ///< set project file name
81
    void setFileName(QString initFileName); ///< set project file name
82
    void create(); ///< create the model
82
    void create(); ///< create the model
83
    void destroy(); ///< delete the model
83
    void destroy(); ///< delete the model
84
    void run(int years); ///< run the model
84
    void run(int years); ///< run the model
85
    bool runYear(); ///< runs a single time step
85
    bool runYear(); ///< runs a single time step
86
    bool pause(); ///< pause execution, and if paused, continue to run. returns state *after* change, i.e. true=now in paused mode
86
    bool pause(); ///< pause execution, and if paused, continue to run. returns state *after* change, i.e. true=now in paused mode
87
    bool continueRun(); ///< continues execution if simulation was paused
87
    bool continueRun(); ///< continues execution if simulation was paused
88
    void cancel(); ///< cancel execution of the model
88
    void cancel(); ///< cancel execution of the model
89
    void repaint(); ///< force a repaint of the main drawing window
89
    void repaint(); ///< force a repaint of the main drawing window
90
private slots:
90
private slots:
91
    void runloop();
91
    void runloop();
92
private:
92
private:
93
    bool internalRun(); ///< runs the main loop
93
    bool internalRun(); ///< runs the main loop
94
    void internalStop(); ///< save outputs, stop the model execution
94
    void internalStop(); ///< save outputs, stop the model execution
95
    void fetchDynamicOutput(); ///< execute the dynamic output and fetch data
95
    void fetchDynamicOutput(); ///< execute the dynamic output and fetch data
96
    void saveDebugOutputs(); ///< save debug outputs to file
96
    void saveDebugOutputs(); ///< save debug outputs to file
97
    MainWindow *mViewerWindow;
97
    MainWindow *mViewerWindow;
98
    Model *mModel;
98
    Model *mModel;
99
    bool mPaused;
99
    bool mPaused;
100
    bool mRunning;
100
    bool mRunning;
101
    bool mFinished;
101
    bool mFinished;
102
    bool mCanceled;
102
    bool mCanceled;
103
    bool mHasError;
103
    bool mHasError;
104
    QString mLastError;
104
    QString mLastError;
105
    int mYearsToRun;
105
    int mYearsToRun;
106
    QString mInitFile;
106
    QString mInitFile;
107
    bool mDynamicOutputEnabled;
107
    bool mDynamicOutputEnabled;
108
    QStringList mDynFieldList;
108
    QStringList mDynFieldList;
109
    QStringList mDynData;
109
    QStringList mDynData;
110
    QString mLastLoadedJSFile;
110
    QString mLastLoadedJSFile;
111
111
112
};
112
};
113
113
114
#endif // MODELCONTROLLER_H
114
#endif // MODELCONTROLLER_H
115
 
115