#ifndef MAINWINDOW_H
#define MAINWINDOW_H

 #include <QMainWindow>

 class QAction;
 class QFile;
 class QVBoxLayout;
 class QHBoxLayout;
 class QLabel;
 class QLayout;
 class QPushButton;

 class MainWindow : public QMainWindow
 {
     Q_OBJECT

 public:
     explicit MainWindow();
     ~MainWindow();

 private slots:
     void training();
     void trainModel(const bool);
     bool testModel();
     void serIn();
     void serDir();
     void PRcount();
     void files(const bool , const bool , const bool, const bool);
     void makeHOG(const int, const int, const int, const int);
     void paint(const int, const int, const int, const int);
     void getFilesTr();
     void getFilesSDir();
     void getFilesSImg();
     void getFileNameFromInt(int);
     void useImage(int);
     void usingModel();
     void menu2();
     void makeModel();
     void wash(int** , int**, int** ,int, int, int, int, int, int**, bool);
     void exit();

 private:
     void createActions();
     void createStatusBar();

     QWidget *window;
     QLabel *labelIm;
     QPixmap *image;
     QImage *curImage;
     QFile *inFile;
     QFile *outFile;
     int *curHist;
     struct model* myModel;
     std::vector< std::vector<double> > trainFeatures;
     std::vector<int> trainLabels;
     QString *curFile;
     QString curInFile;
     QString curModelFile;
     QString curOutFile;
     QString curCat;
     QString msg1;
     QString msg2;
     QString msg3;
     QString msg4;

     QVBoxLayout *mainLayout;
     QHBoxLayout *layout1;
     QHBoxLayout *layout2;
     QPushButton *button0;
     QPushButton *button1;
     QPushButton *button2;
     QPushButton *button3;
     QPushButton *button4;
     QPushButton *button5;
     QPushButton *button6;

     QAction *useAct;
     QAction *PRAct;
     QAction *trainAct;
     QAction *retrainAct;
     QAction *serImAct;
     QAction *serDirAct;
     QAction *exitAct;

 };

 #endif
