Subversion Repositories public iLand

Rev

Rev 779 | Rev 837 | 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
776 werner 46
    bool isPaused(); ///< returns true if the model is currently paused
632 werner 47
    // simulation length
497 werner 48
    int currentYear() const; ///< return current year of the model
498 werner 49
    int totalYears() const { return mYearsToRun; } ///< returns total number of years to simulate
632 werner 50
    // error handling
51
    void throwError(const QString msg);
161 werner 52
    // dynamic outputs (variable fields)
802 werner 53
    void setDynamicOutputEnabled(bool enabled) { mDynamicOutputEnabled = enabled; }
161 werner 54
    void setupDynamicOutput(QString fieldList);
55
    QString dynamicOutput();
514 werner 56
    // some informational services
57
    QHash<QString, QString> availableSpecies();
58
 
590 werner 59
    void saveScreenshot(QString file_name); ///< saves a screenshot of the central view widget to 'file_name'
649 werner 60
    void addGrid(const FloatGrid *grid, const QString &name, const GridViewType view_type, double min_value, double max_value);
596 werner 61
    void paintMap(MapGrid *map, double min_value, double max_value);
646 werner 62
 
647 werner 63
    void addLayers(const LayeredGridBase *layers, const QString &name);
634 werner 64
    void setViewport(QPointF center_point, double scale_px_per_m);
222 werner 65
signals:
776 werner 66
    void finished(QString errorMessage); ///< model has finished run (errorMessage is empty in case of success)
67
    void year(int year); ///< signal indicating a year of the simulation has been processed
68
    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
69
    void stateChanged(); ///< is emitted when model started/stopped/paused
128 Werner 70
public slots:
71
    void setFileName(QString initFileName); ///< set project file name
72
    void create(); ///< create the model
73
    void destroy(); ///< delete the model
222 werner 74
    void run(int years); ///< run the model
223 werner 75
    bool runYear(); ///< runs a single time step
222 werner 76
    bool pause(); ///< pause execution, and if paused, continue to run. returns state *after* change, i.e. true=now in paused mode
776 werner 77
    bool continueRun(); ///< continues execution if simulation was paused
222 werner 78
    void cancel(); ///< cancel execution of the model
652 werner 79
    void repaint(); ///< force a repaint of the main drawing window
223 werner 80
private slots:
81
    void runloop();
128 Werner 82
private:
776 werner 83
    bool internalRun(); ///< runs the main loop
84
    void internalStop(); ///< save outputs, stop the model execution
802 werner 85
    void fetchDynamicOutput(); ///< execute the dynamic output and fetch data
590 werner 86
    MainWindow *mViewerWindow;
128 Werner 87
    Model *mModel;
223 werner 88
    bool mPaused;
225 werner 89
    bool mRunning;
90
    bool mFinished;
91
    bool mCanceled;
223 werner 92
    int mYearsToRun;
128 Werner 93
    QString mInitFile;
802 werner 94
    bool mDynamicOutputEnabled;
161 werner 95
    QStringList mDynFieldList;
96
    QStringList mDynData;
97
 
105 Werner 98
};
99
 
100
#endif // MODELCONTROLLER_H