/** mainwindow.h - Qt main window
 *
 * bsAniPic - http://www.buckosoft.com/bsAniPic/
 *
 * Copyright(c) BuckoSoft, 2017.
 * Released under GNU GPL v3 https://www.gnu.org/licenses/gpl-3.0.en.html
 */

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTime>
#include <QTimer>
#include <QThread>

namespace Ui {
class MainWindow;
}

class DirMan;
class Config;
class AnimationOptions;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    virtual ~MainWindow();

protected:
    void showEvent(QShowEvent *ev);
    void closeEvent(QCloseEvent *event) override;
    void wheelEvent(QWheelEvent* event) override;
    void resizeEvent(QResizeEvent* event) override;
    void keyPressEvent(QKeyEvent* event) override;
    void changeEvent(QEvent* event) override;

signals:
      void window_loaded();

private slots:
    void on_horizontalSlider_valueChanged(int value);
    void onImageClicked(Qt::MouseButtons buttons);

    void onWindowLoaded();
    void openRecentDirectory();

    void on_actionOpen_Directory_triggered();

    void on_actionExit_triggered();

    void on_actionGo_triggered();

    void on_actionConfigure_triggered();

    void on_timer();

    void on_actionRefresh_triggered();

private:

    void activateDirectory();
    void resizeMainWindow();
    void setNumberOfImages(int i);
    void displayCurrentImage();
    void displayMainImage(const QImage* image);
    void updateSliderLabelValue();
    void readSettings();
    void writeSettings();
    void updateMRUActions();
    void onKeyGoTo();
    void on_animationOptions();
    void on_setLeftMarker();
    void on_setRightMarker();

    void stopAnimation();
private:
    Ui::MainWindow *ui;
    bool        isFocused;
    QTime       activatedTime;

    QString     currentDirectory;
    int         currentImage;
    int         animateDir;
    DirMan*     dirMan;
    QTimer      timer;

    enum { MaxRecentFiles = 20 };
    QAction*    recentFileActions[MaxRecentFiles];
    Config*     config;
    AnimationOptions* animateOptions;
    QAction*    goAction;   // shadow from gui. we don't own this
    QIcon   goIcon;
    QIcon   stopIcon;
    bool        virgin;     // have we been displayed yet?
    int         leftMarker;
    int         rightMarker;
};

#endif // MAINWINDOW_H
