#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#define NUMBER_OF_BUTTONS 4
#define TOP_MARGIN 150
#define SIDE_MARGIN 150
#define MIN_SIZE_OPTION_BUTTON 150

#include <QMainWindow>
#include <QMouseEvent>
#include <QDragEnterEvent>


class MainWindowController;

namespace Ui {
class MainWindow;
}

/*!
 * \brief The MainWindow class.
 */
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:

    /*!
     * \brief MainWindow contructor.
     * \param parent Main window parent widget.
     */
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();    

    /*!
     * \brief showError Shows error messages.
     * \param numErrors Number of messages.
     * \param errors Messages.
     */
    void showError(int numErrors, QString errors);

    /*!
     * \brief getCurrentPosition Returns the position of the main window.
     * \return Current position.
     */
    QPoint getCurrentPosition() const;

private slots:

    /*!
     * \brief on_menuBtn_clicked This slot is executed when home button is clicked.
     */
    void on_menuBtn_clicked();

    /*!
     * \brief on_infoBtn_clicked This slot is executed when information button is clicked.
     */
    void on_infoBtn_clicked();

    /*!
     * \brief on_inkBtn_clicked This slot is executed when home button is clicked.
     */
    void on_inkBtn_clicked();

    /*!
     * \brief on_editBtn_clicked This slot is executed when edit button is clicked.
     */
    void on_editBtn_clicked();

    /*!
     * \brief on_settingsBtn_clicked This slot is executed when settings button is clicked.
     */
    void on_settingsBtn_clicked();

    /*!
     * \brief on_helpBtn_clicked This slot is executed when help button is clicked.
     */
    void on_helpBtn_clicked();

    /*!
     * \brief moveEvent This slot is executed when the main window is moved.
     * \param event Move Event.
     */
    void moveEvent(QMoveEvent *event);

    /*!
     * \brief on_editBtnUp_clicked  This slot is executed when edit button is clicked.
     */
    void on_editBtnUp_clicked();

    /*!
     * \brief on_editBtnDown_clicked  This slot is executed when edit button is clicked.
     */
    void on_editBtnDown_clicked();

    /*!
     * \brief on_infoBtnUp_clicked This slot is executed when information button is clicked.
     */
    void on_infoBtnUp_clicked();

    /*!
     * \brief on_infoBtnDown_clicked This slot is executed when information button is clicked.
     */
    void on_infoBtnDown_clicked();

    /*!
     * \brief on_menuBtnUp_clicked This slot is executed when menu button is clicked.
     */
    void on_menuBtnUp_clicked();

    /*!
     * \brief on_menuBtnDown_clicked This slot is executed when menu button is clicked.
     */
    void on_menuBtnDown_clicked();

    /*!
     * \brief on_inkBtnUp_clicked This slot is executed when ink button is clicked.
     */
    void on_inkBtnUp_clicked();

    /*!
     * \brief on_inkBtnDown_clicked This slot is executed when ink button is clicked.
     */
    void on_inkBtnDown_clicked();

    /*!
     * \brief on_startBtn_clicked This slot is executed when start button is clicked.
     */
    void on_startBtn_clicked();

    /*!
     * \brief closeEvent This slot is executed when main window is closed.
     * \param e Close event.
     */
    void closeEvent(QCloseEvent *e);

private:

    /*!
     * \brief ui
     */
    Ui::MainWindow *ui;

    /*!
     * \brief controller Main window controller.
     */
    MainWindowController *controller;

    /*!
     * \brief currentPosition Main window position.
     */
    QPoint currentPosition;
};

#endif // MAINWINDOW_H
