Rev 652 | Rev 776 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | |||
671 | werner | 2 | /******************************************************************************************** |
3 | ** iLand - an individual based forest landscape and disturbance model |
||
4 | ** http://iland.boku.ac.at |
||
5 | ** Copyright (C) 2009- Werner Rammer, Rupert Seidl |
||
6 | ** |
||
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 |
||
9 | ** the Free Software Foundation, either version 3 of the License, or |
||
10 | ** (at your option) any later version. |
||
11 | ** |
||
12 | ** This program is distributed in the hope that it will be useful, |
||
13 | ** but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
14 | ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
15 | ** GNU General Public License for more details. |
||
16 | ** |
||
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/>. |
||
19 | ********************************************************************************************/ |
||
20 | |||
105 | Werner | 21 | #ifndef MODELCONTROLLER_H |
22 | #define MODELCONTROLLER_H |
||
128 | Werner | 23 | #include <QObject> |
514 | werner | 24 | #include <QHash> |
642 | werner | 25 | #include "grid.h" |
646 | werner | 26 | #include "layeredgrid.h" |
128 | Werner | 27 | class Model; |
590 | werner | 28 | class MainWindow; |
596 | werner | 29 | class MapGrid; |
30 | |||
128 | Werner | 31 | class ModelController: public QObject |
105 | Werner | 32 | { |
128 | Werner | 33 | Q_OBJECT |
105 | Werner | 34 | public: |
35 | ModelController(); |
||
128 | Werner | 36 | ~ModelController(); |
590 | werner | 37 | void setMainWindow(MainWindow *mw) { mViewerWindow = mw; } |
38 | void connectSignals(); // connect signal/slots to the main window if available |
||
128 | Werner | 39 | Model *model() const { return mModel; } |
40 | // bool checkers... |
||
145 | Werner | 41 | bool canCreate(); ///< return true if the model can be created (settings loaded and model does not exist) |
42 | bool canDestroy(); ///< model may be destroyed |
||
43 | bool canRun(); ///< model may be run |
||
161 | werner | 44 | bool isRunning(); ///< model is running |
225 | werner | 45 | bool isFinished(); ///< returns true if there is a valid model state, but the run is finished |
632 | werner | 46 | // simulation length |
497 | werner | 47 | int currentYear() const; ///< return current year of the model |
498 | werner | 48 | int totalYears() const { return mYearsToRun; } ///< returns total number of years to simulate |
632 | werner | 49 | // error handling |
50 | void throwError(const QString msg); |
||
161 | werner | 51 | // dynamic outputs (variable fields) |
52 | void setupDynamicOutput(QString fieldList); |
||
53 | QString dynamicOutput(); |
||
514 | werner | 54 | // some informational services |
55 | QHash<QString, QString> availableSpecies(); |
||
56 | |||
590 | werner | 57 | void saveScreenshot(QString file_name); ///< saves a screenshot of the central view widget to 'file_name' |
649 | werner | 58 | void addGrid(const FloatGrid *grid, const QString &name, const GridViewType view_type, double min_value, double max_value); |
596 | werner | 59 | void paintMap(MapGrid *map, double min_value, double max_value); |
646 | werner | 60 | |
647 | werner | 61 | void addLayers(const LayeredGridBase *layers, const QString &name); |
634 | werner | 62 | void setViewport(QPointF center_point, double scale_px_per_m); |
222 | werner | 63 | signals: |
64 | void finished(QString errorMessage); |
||
65 | void year(int year); |
||
590 | werner | 66 | void bufferLogs(bool do_buffer); |
128 | Werner | 67 | public slots: |
68 | void setFileName(QString initFileName); ///< set project file name |
||
69 | void create(); ///< create the model |
||
70 | void destroy(); ///< delete the model |
||
222 | werner | 71 | void run(int years); ///< run the model |
223 | werner | 72 | bool runYear(); ///< runs a single time step |
222 | werner | 73 | bool pause(); ///< pause execution, and if paused, continue to run. returns state *after* change, i.e. true=now in paused mode |
74 | void cancel(); ///< cancel execution of the model |
||
652 | werner | 75 | void repaint(); ///< force a repaint of the main drawing window |
223 | werner | 76 | private slots: |
77 | void runloop(); |
||
128 | Werner | 78 | private: |
161 | werner | 79 | void fetchDynamicOutput(); |
590 | werner | 80 | MainWindow *mViewerWindow; |
128 | Werner | 81 | Model *mModel; |
223 | werner | 82 | bool mPaused; |
225 | werner | 83 | bool mRunning; |
84 | bool mFinished; |
||
85 | bool mCanceled; |
||
223 | werner | 86 | int mYearsToRun; |
128 | Werner | 87 | QString mInitFile; |
161 | werner | 88 | QStringList mDynFieldList; |
89 | QStringList mDynData; |
||
90 | |||
105 | Werner | 91 | }; |
92 | |||
93 | #endif // MODELCONTROLLER_H |