Subversion Repositories public iLand

Rev

Rev 1221 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/********************************************************************************************
**    iLand - an individual based forest landscape and disturbance model
**    http://iland.boku.ac.at
**    Copyright (C) 2009-  Werner Rammer, Rupert Seidl
**
**    This program is free software: you can redistribute it and/or modify
**    it under the terms of the GNU General Public License as published by
**    the Free Software Foundation, either version 3 of the License, or
**    (at your option) any later version.
**
**    This program is distributed in the hope that it will be useful,
**    but WITHOUT ANY WARRANTY; without even the implied warranty of
**    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
**    GNU General Public License for more details.
**
**    You should have received a copy of the GNU General Public License
**    along with this program.  If not, see <http://www.gnu.org/licenses/>.
********************************************************************************************/


#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#if QT_VERSION < 0x050000
#include <QtGui>
#else
#include <QtWidgets>
#endif
#include <vector>

#include "grid.h"
#include "tree.h"

#include "modelcontroller.h"
#include "paintarea.h"
#include "viewport.h"

class QQuickView;
class Model;
class Tree;
class ResourceUnit;
class MapGrid;
class LayeredGridBase;
class Colors;


namespace Ui
{
    class MainWindowClass;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    // logging
    static QPlainTextEdit* logSpace() { return mLogSpace; }
    static QTextStream* logStream() { return mLogStream;}
    ~MainWindow();
    Ui::MainWindowClass *uiclass() {return ui; }
    Colors *ruler() { return mRulerColors; }
public slots:
    void repaint(); ///< force a repaint of the main drawing area
    void yearSimulated(int year);
    void modelFinished(QString errorMessage);
    void checkModelState();
    void bufferedLog(bool bufferLog);
    QImage screenshot(); ///< craete a screenshot of the main painting area
    void paintGrid(MapGrid *map_grid,
                   const QString &name=QString(),
                   const GridViewType view_type=GridViewRainbow,
                   double min_val=0., double max_val=1.);
    void paintGrid(const FloatGrid *grid,
                   const QString &name=QString(),
                   const GridViewType view_type=GridViewRainbow,
                   double min_val=0., double max_val=1.);
    void addLayers(const LayeredGridBase *layer, const QString &name);
    void removeLayers(const LayeredGridBase *layer);
    void setViewport(QPointF center_point, double scale_px_per_m); /// set the viewport (like interactive with mouse)
    void setUIshortcuts(QVariantMap shortcuts);

protected:
     void closeEvent(QCloseEvent *event);

private:
    Ui::MainWindowClass *ui;
    ModelController mRemoteControl;
    QLabel *mStatusLabel;
    QQuickView *mRuler;
    Colors *mRulerColors;
    // setup
    void labelMessage(const QString message) { if (mStatusLabel) mStatusLabel->setText(message);}
    void setupModel();
    void readwriteCycle();
    // paint
    void updatePaintGridList();
    /// PaintObject stores what kind of object to paint during next repaint
    PaintObject mPaintNext;
    QMap<QString, PaintObject> mPaintList;
    void paintGrid(QPainter &painter, PaintObject &object);

    static QPlainTextEdit *mLogSpace;
    static QTextStream *mLogStream;
    void loadPicusIniFile(const QString &fileName);
    // painter functions
    void paintFON(QPainter &painter, QRect rect); ///< general paint function (GUI driven)
    void paintMapGrid(QPainter &painter, MapGrid *map_grid, const FloatGrid *float_grid, const GridViewType view_type, double min_val=0., double max_val=1.); ///< paint a map grid (controller driver)
    Viewport vp;
    QString dumpTreelist();
    void applyCycles(int cycle_count=1);

    void showTreeDetails(Tree* tree);
    void showResourceUnitDetails(const ResourceUnit *ru);
    bool showABEDetails(const QPointF &coord);

    void readSettings();
    void writeSettings();
    // logging and outputs
    void setupFileLogging(const bool do_start);
    void batchLog(const QString s); ///< logging function for batch mode
    // visualization helper grid
    Grid<float> mRegenerationGrid;
    //recent file menu
    void recentFileMenu();
    QList<QString> mRecentFileList;

private slots:
    void automaticRun(); ///< automatically start a simulation...

    void on_actionWarning_triggered() { on_actionDebug_triggered(); }
    void on_actionError_triggered() { on_actionDebug_triggered(); }
    void on_actionInfo_triggered() { on_actionDebug_triggered(); }
    void on_actionDebug_triggered();
    void on_actionSnag_Dynamics_triggered();
    void on_action_debugEstablishment_triggered();
    void on_selectJavaScript_clicked();
    void on_actionClearDebugOutput_triggered();
    void on_pbLogFilterClear_clicked();
    void on_pbFilterExecute_clicked();
    void on_pbLogClearText_clicked();
    void on_pbLogToClipboard_clicked();
    void on_actionDaily_responses_Output_triggered();
    void on_actionAbout_triggered();
    void on_actionOnline_ressources_triggered();
    void on_actionTimers_triggered();
    void on_actionOutput_table_description_triggered();
    void on_actionWater_Output_triggered();
    void on_actionStop_triggered();
    void on_actionPause_triggered();
    void on_scriptCommand_returnPressed();
    void on_reloadJavaScript_clicked();
    void on_actionShow_Debug_Messages_triggered(bool checked);
    void on_actionDynamic_Output_triggered();
    void on_pbExecExpression_clicked();
    void on_pbCalculateExpression_clicked();
    void on_actionReload_triggered();
    void on_actionRun_one_year_triggered();
    void on_actionTree_NPP_triggered();
    void on_actionSelect_Data_Types_triggered();
    void on_actionTree_Growth_triggered();
    void on_actionTree_Partition_triggered();
    void on_action_debugSapling_triggered();
    void on_actionModelRun_triggered();
    void on_actionModelDestroy_triggered();
    void on_actionModelCreate_triggered();
    void on_actionFON_grid_triggered();
    void on_actionTreelist_triggered();
    void on_actionImageToClipboard_triggered();
    void on_openFile_clicked();
    void on_pbSetAsDebug_clicked();


    void on_actionEdit_XML_settings_triggered();

    void repaintArea(QPainter &painter);
    void mouseClick(const QPoint& pos);
    void mouseMove(const QPoint& pos);
    void mouseDrag(const QPoint& from, const QPoint &to, const Qt::MouseButton button);
    void mouseWheel(const QPoint& pos, int steps);
    void on_visFon_toggled();
    void on_visDomGrid_toggled();
    void on_visImpact_toggled();
    void on_visImpact_clicked() { on_visFon_toggled(); } // force repeaint
    void on_visSeeds_clicked() { on_visFon_toggled(); } // force repeaint
    void on_visRegeneration_clicked() { on_visFon_toggled(); } // force repeaint
    void on_visRegenNew_clicked()    { on_visFon_toggled();    }
    void on_actionPerformance_triggered();
    void on_scriptCommandHistory_currentIndexChanged(int index);
    void on_paintGridBox_currentIndexChanged(int index);
    void on_actionTest_triggered();
    void on_pbReloadQml_clicked();
    void on_actionExit_triggered();
    void on_actionOpen_triggered();
    //recent file menu
    void menuRecent_Files();
    void on_saveFile_clicked();
    void on_lJSShortcuts_linkActivated(const QString &link);

};

#endif // MAINWINDOW_H