/***************************************************************************
                         qgslayoutimageexportoptionsdialog.h
                         -------------------------------------
    begin                : December 2017
    copyright            : (C) 2017 by Nyall Dawson
    email                : nyall dot dawson at gmail dot com
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef QGSLAYOUTIMAGEEXPORTOPTIONSDIALOG_H
#define QGSLAYOUTIMAGEEXPORTOPTIONSDIALOG_H

#include <QDialog>
#include "ui_qgslayoutimageexportoptions.h"


/**
 * A dialog for customising the properties of an exported image file.
 * \since QGIS 3.0
*/
class QgsLayoutImageExportOptionsDialog: public QDialog, private Ui::QgsLayoutImageExportOptionsDialog
{
    Q_OBJECT

  public:

    /**
     * Constructor for QgsLayoutImageExportOptionsDialog
     * \param parent parent widget
     * \param flags window flags
     */
    QgsLayoutImageExportOptionsDialog( QWidget *parent = nullptr, Qt::WindowFlags flags = 0 );

    /**
     * Sets the initial resolution displayed in the dialog.
     * \param resolution default resolution in DPI
     * \see resolution()
     */
    void setResolution( double resolution );

    /**
     * Returns the selected resolution from the dialog.
     * \returns image resolution in DPI
     * \see setResolution()
     */
    double resolution() const;

    /**
     * Sets the target image size. This is used to calculate the default size in pixels
     * and also for determining the image's width to height ratio.
     * \param size image size
     */
    void setImageSize( QSizeF size );

    /**
     * Returns the user-set image width in pixels.
     * \see imageHeight
     */
    int imageWidth() const;

    /**
     * Returns the user-set image height in pixels.
     * \see imageWidth
     */
    int imageHeight() const;

    /**
     * Sets whether the crop to contents option should be checked in the dialog
     * \param crop set to true to check crop to contents
     * \see cropToContents()
     */
    void setCropToContents( bool crop );

    /**
     * Returns whether the crop to contents option is checked in the dialog.
     * \see setCropToContents()
     */
    bool cropToContents() const;

    /**
     * Sets whether the generate world file option should be checked.
     * \see generateWorldFile()
     */
    void setGenerateWorldFile( bool generate );

    /**
     * Returns whether the generate world file option is checked in the dialog.
     * \see setGenerateWorldFile()
     */
    bool generateWorldFile() const;

    /**
     * Sets whether antialiasing should be used in the export.
     * \see antialiasing()
     */
    void setAntialiasing( bool antialias );

    /**
     * Returns whether antialiasing should be used in the export.
     * \see setAntialiasing()
     */
    bool antialiasing() const;

    /**
     * Fetches the current crop to contents margin values, in pixels.
     * \param topMargin destination for top margin
     * \param rightMargin destination for right margin
     * \param bottomMargin destination for bottom margin
     * \param leftMargin destination for left margin
     */
    void getCropMargins( int &topMargin, int &rightMargin, int &bottomMargin, int &leftMargin ) const;

    /**
     * Sets the current crop to contents margin values, in pixels.
     * \param topMargin top margin
     * \param rightMargin right margin
     * \param bottomMargin bottom margin
     * \param leftMargin left margin
     */
    void setCropMargins( int topMargin, int rightMargin, int bottomMargin, int leftMargin );

  private slots:

    void mWidthSpinBox_valueChanged( int value );
    void mHeightSpinBox_valueChanged( int value );
    void mResolutionSpinBox_valueChanged( int value );
    void clipToContentsToggled( bool state );

  private:

    QSizeF mImageSize;


};

#endif // QGSLAYOUTIMAGEEXPORTOPTIONSDIALOG_H