#include #include #include #include #include #include #include #include #include #include #include #include #include #include "Experiment.hpp" Experiment::Experiment ():QMainWindow() { createActions (); createMenus (); filenames = NULL; filenames_json = NULL; suffix = NULL; setWindowTitle (tr ("DSL - Draw Strength Line")); QScreen *screen = QGuiApplication::primaryScreen (); QRect screenGeometry = screen->geometry (); screenWidth = screenGeometry.width () - 200; screenHeight = screenGeometry.height () - 200; QWidget *central= new QWidget(this); setCentralWidget (central); setContentsMargins(0, 0, 0, 0); QVBoxLayout *layoutV = new QVBoxLayout(central); layoutV->setSpacing(0); layoutV->setContentsMargins(0, 0, 0, 0); central->setLayout(layoutV); // First line of the interface QHBoxLayout *layoutH1 = new QHBoxLayout(central); layoutH1->setSpacing(0); layoutH1->setContentsMargins(0, 0, 0, 0); layoutV->addLayout(layoutH1); waLeft = new WorkArea (((screenWidth-spaceInBetween)/2), screenHeight, central); waLeft->setContentsMargins(0, 0, 0, 0); layoutH1->addWidget(waLeft); QWidget *w1SpaceInBetween = new QWidget(central); w1SpaceInBetween->setContentsMargins(0, 0, 0, 0); w1SpaceInBetween->setFixedSize(spaceInBetween,0); layoutH1->addWidget(w1SpaceInBetween); waRight = new WorkArea (((screenWidth-spaceInBetween)/2), screenHeight, central); waRight->setContentsMargins(0, 0, 0, 0); layoutH1->addWidget(waRight); // second line of interface QWidget *hSpaceInBetween = new QWidget(central); hSpaceInBetween->setContentsMargins(0, 0, 0, 0); hSpaceInBetween->setFixedSize(0, spaceInBetween); layoutV->addWidget(hSpaceInBetween); // third line of interface QHBoxLayout *layoutH2 = new QHBoxLayout(central); layoutH2->setSpacing(0); layoutH2->setContentsMargins(0, 0, 0, 0); layoutV->addLayout(layoutH2); leftButton = new QPushButton("Image de gauche", central); leftButton->setFixedHeight(30); connect(leftButton, SIGNAL(clicked(bool)), this, SLOT(leftImage())); layoutH2->addWidget(leftButton); QWidget *w2SpaceInBetween = new QWidget(); w2SpaceInBetween->setContentsMargins(0, 0, 0, 0); w2SpaceInBetween->setFixedSize(spaceInBetween,0); layoutH2->addWidget(w2SpaceInBetween); rightButton = new QPushButton("Image de droite", central); rightButton->setFixedHeight(30); connect(rightButton, SIGNAL(clicked(bool)), this, SLOT(rightImage())); layoutH2->addWidget(rightButton); // Fourth line of the interface progressBar = new QProgressBar(central); progressBar->setFixedHeight(20); progressBar->setRange(0, maxProgressBar); progressBar->setValue(0); // connect(progressBar, SIGNAL(valueChanged(int)), this, SLOT(progressBarValueChanged(int))); layoutV->addWidget(progressBar); timer = new QTimer(central); timer->setSingleShot(false); timer->setInterval(time); // connect(timer, SIGNAL(timeout()), this, SLOT(ticTimer())); setFixedSize (screenWidth, screenHeight); /*timer->start();*/ } void Experiment::open () { QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"), QDir::currentPath (), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); QString* directoryname = new QString(dir); QDir::setCurrent(*directoryname); if(!dir.isEmpty()) { bool ok; suffix = new QString(QInputDialog::getText(this, tr("Your ID"), tr("ID to use :"), QLineEdit::Normal, "_"+QDir::home().dirName(), &ok)); if(ok) { delete filenames; delete filenames_json; filenames = new QStringList(); filenames_json = new QStringList(); QDirIterator it(*directoryname, {"*.jpg", "*.png"}, QDir::Files); while (it.hasNext()) { filenames->append( it.next() ); } for(int i = 0 ; isize() ; i++) { QString jsonFile(QDir::currentPath ().append("/").append(QFileInfo(filenames->at(i)).baseName().append(*suffix_IA).append(".json"))); if(! (QFile(jsonFile).exists()) ) { qDebug() << "ATTENTION !!!! " << jsonFile << " file missing"; ok=false; }else{ filenames_json->append(jsonFile); } } if(!ok) std::exit(EXIT_FAILURE); std::srand(static_cast(std::time(nullptr)+std::rand())); for(int i = 0 ; isize()*2 ; i++) { int rand1 = std::rand()%filenames->size(); int rand2 = std::rand()%filenames->size(); filenames->swapItemsAt(rand1, rand2); filenames_json->swapItemsAt(rand1, rand2); } openedImage = -1; } } openNext(); } void Experiment::leftImage(){ qDebug() << "Clic sur image gauche" << Qt::endl; progressBar->setValue(0); openNext(); } void Experiment::rightImage(){ qDebug() << "Clic sur image droite" << Qt::endl; progressBar->setValue(0); openNext(); } /*void Experiment::progressBarValueChanged(int value){ if(value == maxProgressBar ){ qDebug() << "That's all folks !" << Qt::endl; QApplication::quit(); } }*/ /*void Experiment::ticTimer(){ progressBar->setValue(progressBar->value()+time); }*/ void Experiment::openNext (){ openedImage = openedImage+1; progressBar->setValue((int)((openedImage+1.0)/(filenames->size())*100.0)); if(openedImage >= filenames->size()) { qDebug() << "That's all folks !" << Qt::endl; QApplication::quit(); } else { waLeft->loadImage (filenames->at(openedImage).toStdString ()); waRight->loadImage (filenames->at(openedImage).toStdString ()); std::srand(static_cast(std::time(nullptr)+std::rand())); if((std::rand()%2) == 0) { waLeft->loadSL (filenames_json->at(openedImage).toStdString ()); for(int i = 0 ; i < waLeft->getNumberOfLines() ; i++) waRight->addRandomSL(); } else { waRight->loadSL (filenames_json->at(openedImage).toStdString ()); for(int i = 0 ; i < waRight->getNumberOfLines() ; i++) waLeft->addRandomSL(); } /*waLeft->loadImage (image.toStdString ()); waRight->loadImage (image.toStdString ()); waLeft->loadSL(leftSL.toStdString()); waRight->loadSL(rightSL.toStdString()); waRight->addRandomSL();*/ waLeft->setReadOnly(true); waRight->setReadOnly(true); waLeft->repaint(); waRight->repaint(); setFixedSize (waLeft->geometry().width()*2+spaceInBetween, waLeft->geometry().height()+waLeft->geometry().y()+spaceInBetween+leftButton->geometry().height()+22); // +22 ??!! } } void Experiment::createActions () { openAct = new QAction (tr ("&Open directory"), this); openAct->setShortcuts (QKeySequence::Open); connect (openAct, &QAction::triggered, this, &Experiment::open); exitAct = new QAction (tr ("E&xit"), this); exitAct->setShortcuts (QKeySequence::Quit); connect (exitAct, &QAction::triggered, this, &QWidget::close); } void Experiment::createMenus () { fileMenu = menuBar ()->addMenu (tr ("&File")); fileMenu->addAction (openAct); fileMenu->addSeparator (); fileMenu->addAction (exitAct); }