Parcourir la source

Ajout de la possibilité de naviguer entre les images grâce aux flèches

Rémi Synave il y a 2 ans
Parent
commit
95bd83d096
2 fichiers modifiés avec 93 ajouts et 38 suppressions
  1. 86 35
      dsl/MainWindow.cpp
  2. 7 3
      dsl/MainWindow.hpp

+ 86 - 35
dsl/MainWindow.cpp

@@ -18,14 +18,15 @@
 
 MainWindow::MainWindow ()
 {
+  
   createActions ();
   createMenus ();
 
-  filename = NULL;
+  openedImage = -1;
   directoryname = NULL;
-  prefix = NULL;
-  filenames = new QList< QString* >();
-  filenames->clear();
+  suffix = NULL;
+  filenameToSave = NULL;
+  filenames = NULL;
 
   setWindowTitle (tr ("DSL - Draw Strength Line"));
 
@@ -44,14 +45,22 @@ MainWindow::MainWindow ()
 void
 MainWindow::openFile ()
 {
-  filename = new QString(QFileDialog::getOpenFileName (this,
-						       QObject::tr ("Open image file"),
-						       QDir::currentPath (),
-						       QObject::tr("Images files (*.jpg *.png);;All files (*.*)")));
-
-  if(!filename->isEmpty()) {
-    QDir::setCurrent(QString(*filename).remove(QUrl(*filename).fileName()));
-    wa->loadImage (filename->toStdString ());
+  QString filename = QFileDialog::getOpenFileName (this,
+						   QObject::tr ("Open image file"),
+						   QDir::currentPath (),
+						   QObject::tr("Images files (*.jpg *.png);;All files (*.*)"));
+
+  if(!filename.isEmpty()) {
+    delete filenames;
+    filenames = new QList < QString* >();
+    delete filenameToSave;
+    filenameToSave = NULL;
+    delete suffix;
+    suffix = NULL;
+    filenames->append(new QString(filename));
+    openedImage = 0;
+    QDir::setCurrent(QString(*(filenames->at(openedImage))).remove(QUrl(*(filenames->at(openedImage))).fileName()));
+    wa->loadImage (filenames->at(openedImage)->toStdString ());
     wa->repaint();
     setFixedSize (wa->geometry().width(), wa->geometry().height()+wa->geometry().y());
   }
@@ -64,63 +73,105 @@ MainWindow::openDir ()
 								 QObject::tr ("Open directory"),
 								 QDir::currentPath (),
 								 QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks));
-  
-  qDebug() << "Chemin du répertoire : " << *directoryname << Qt::endl;
 
   if(!directoryname->isEmpty()) {
     bool ok;
-    QString prefix = QInputDialog::getText(this, tr("Prefix for your json files"),
-					   tr("Prefix to use :"), QLineEdit::Normal,
-					   QDir::home().dirName()+"_", &ok);
-    qDebug() << "Prefix received : " << prefix << Qt::endl;
+    suffix = new QString(QInputDialog::getText(this, tr("Suffix for your json files"),
+					       tr("Suffix to use :"), QLineEdit::Normal,
+					       "_"+QDir::home().dirName(), &ok));
 
-    filenames->clear();
+    if(ok){
+      delete filenames;
+      filenames = new QList < QString* >();
     
-    QDirIterator it(*directoryname);
-    while (it.hasNext()) {
-      filenames->append( new QString(it.next()) );
+      QDirIterator it(*directoryname);
+      while (it.hasNext()) {
+	QString next(it.next());
+	if(next.endsWith(".png") || next.endsWith(".jpg"))
+	  filenames->append( new QString(next) );
+      }
     }
+  }
 
-    for (int i=0 ; i<filenames->size() ; i++)
-      qDebug() << *(filenames->at(i)) << Qt::endl;
+  if(filenames->size()>0){
+    delete filenameToSave;
+    filenameToSave = NULL;
+    openedImage = 0;
+    QDir::setCurrent(QString(*(filenames->at(openedImage))).remove(QUrl(*(filenames->at(openedImage))).fileName()));
+    wa->loadImage (filenames->at(openedImage)->toStdString ());
+    wa->repaint();
+    setFixedSize (wa->geometry().width(), wa->geometry().height()+wa->geometry().y());
   }
 
+  
+
 }
 
 void
 MainWindow::save ()
 {
-  QString fileToSave = QFileDialog::getSaveFileName (this,
-						   QObject::tr ("Save file"),
-						   QDir::currentPath ().append("/").append(QFileInfo(*filename).baseName()).append(".json"),
-						   QObject::tr("JSON file (*.json);;All files (*.*)"));
-  if(!fileToSave.endsWith(".json"))
-    fileToSave.append(".json");
-  wa->saveStrengthLine (fileToSave.toStdString ());
+  if(suffix != NULL){
+    QString toSave =  QDir::currentPath ().append("/").append(QFileInfo(*(filenames->at(openedImage))).baseName().append(*suffix).append(".json"));
+    wa->saveStrengthLine (toSave.toStdString ());
+  }
+  else{
+    if(filenameToSave == NULL)
+      filenameToSave = new QString(QFileDialog::getSaveFileName (this,
+								 QObject::tr ("Save file"),
+								 QDir::currentPath ().append("/").append(QFileInfo(*(filenames->at(openedImage))).baseName()).append(".json"),
+								 QObject::tr("JSON file (*.json);;All files (*.*)")));
+    if(filenameToSave != NULL){
+      if(!filenameToSave->endsWith(".json"))
+	filenameToSave->append(".json");
+      wa->saveStrengthLine (filenameToSave->toStdString ());
+    }
+  }
 }
 
 void
 MainWindow::firstImage ()
 {
-  qDebug() << "First image" << Qt::endl;
+  if(filenames->size() > 1){
+    openedImage = 0;
+    loadImage();
+  }
 }
 
 void
 MainWindow::previousImage ()
 {
-  qDebug() << "Previous image" << Qt::endl;
+  if(filenames->size() > 1){
+    openedImage = (openedImage-1+filenames->size())%(filenames->size());
+    loadImage();
+  }
 }
 
 void
 MainWindow::nextImage ()
 {
-  qDebug() << "Next image" << Qt::endl;
+  if(filenames->size() > 1){
+    openedImage = (openedImage+1)%(filenames->size());
+    loadImage();
+  }
 }
 
 void
 MainWindow::lastImage ()
 {
-  qDebug() << "Last image" << Qt::endl;
+  if(filenames->size() > 1){
+    openedImage = filenames->size()-1;
+    loadImage();
+  }
+}
+
+void
+MainWindow::loadImage()
+{
+  delete filenameToSave;
+  filenameToSave = NULL;
+  wa->loadImage (filenames->at(openedImage)->toStdString ());
+  wa->repaint();
+  setFixedSize (wa->geometry().width(), wa->geometry().height()+wa->geometry().y());
 }
 
 

+ 7 - 3
dsl/MainWindow.hpp

@@ -29,13 +29,17 @@ private:
 
   WorkArea *wa;
 
-  QString *filename;
-  QString *directoryname;
-  QString *prefix;
   QList< QString* > *filenames;
+  int openedImage;
+  QString *directoryname;
+  QString *suffix;
+  QString *filenameToSave;
 
   void createActions ();
   void createMenus ();
+  void loadImage ();
+
+		     
 
 		     
 private slots: