cleanup image save dialog aesthetics
[mussa.git] / qui / ImageSaveDialog.cpp
index 3c5b0095f071b558884e6dd3c3cb5dda913897ea..0357af402dc97c7585c1a2995b4d8053d045c8c1 100644 (file)
@@ -1,10 +1,10 @@
 #include <QDialog>
 #include <QFileDialog>
-#include <QGridLayout>
+#include <QVBoxLayout>
+#include <QHBoxLayout>
 #include <QLabel>
 #include <QPixmap>
 #include <QPushButton>
-//#include <QVBoxLayout>
 #include <QGLWidget>
 
 #include "ImageSaveDialog.hpp"
@@ -15,7 +15,7 @@
 ImageSaveDialog::ImageSaveDialog(QGLWidget *newglwidget, QWidget *parent)
   : QDialog(parent)
 {
-  setWindowTitle(tr("Save Mussa Image"));
+  setWindowTitle(tr("Mussa Save Image"));
 
   // Init
   glwidget = newglwidget;
@@ -30,16 +30,6 @@ ImageSaveDialog::ImageSaveDialog(QGLWidget *newglwidget, QWidget *parent)
     imageScaler->setHeight(tmpSize.height());
   }
   
-  // File Path Label
-  filePathLabel = new QLabel();
-  filePathLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
-  filePathLabel->setMinimumWidth(30);
-
-  // Browse Button
-  browseButton = new QPushButton(tr("Browse..."));
-  connect(browseButton, SIGNAL(clicked()),
-         this, SLOT(promptFileDialog()));
-
   // Save Button
   saveButton = new QPushButton(tr("Save"));
   saveButton->setDefault(true);
@@ -52,26 +42,35 @@ ImageSaveDialog::ImageSaveDialog(QGLWidget *newglwidget, QWidget *parent)
          this, SLOT(reject()));
 
   // Layout
-  QGridLayout *layout = new QGridLayout;
-  layout->addWidget(imageScaler, 0, 0, 1, 0, Qt::AlignCenter);
-  layout->addWidget(filePathLabel, 1, 0);
-  layout->addWidget(browseButton, 1, 1);
-  layout->addWidget(saveButton, 2, 0);
-  layout->addWidget(cancelButton, 2, 1);
+  QHBoxLayout *button_layout = new QHBoxLayout;
+  button_layout->addStretch(1);
+  button_layout->addWidget(saveButton);
+  button_layout->addWidget(cancelButton);
+  
+  QHBoxLayout *image_centerer = new QHBoxLayout;
+  image_centerer->addStretch(1);
+  image_centerer->addWidget(imageScaler);
+  image_centerer->addStretch(1);
+  QVBoxLayout *layout = new QVBoxLayout;
+  
+  layout->addStretch(1);
+  layout->addLayout(image_centerer);
+  layout->addStretch(1);
+  layout->addLayout(button_layout);
   setLayout(layout);
 }
 
-
 void ImageSaveDialog::accept()
 {
-  std::cout << "Accepted!\n";
-  savePixmap();
-  done(1);
+  bool endDialog = true;
+  savePixmap(endDialog);
+  if (endDialog) {
+    done(1);
+  }
 }
 
 void ImageSaveDialog::reject()
 {
-  std::cout << "Rejected!\n";
   done(0);
 }
 
@@ -81,32 +80,6 @@ void ImageSaveDialog::setSize(int width, int height)
   imageScaler->setHeight(height);
 }
 
-//int ImageSaveDialog::exec()
-//{
-//  if (glwidget)
-//  {
-//    QSize tmpSize;
-//    tmpSize = glwidget->size();
-//    imageScaler->setWidth(tmpSize.width());
-//    imageScaler->setHeight(tmpSize.height());
-//  }
-//  return QDialog::exec();
-//}
-
-
-void ImageSaveDialog::promptFileDialog()
-{
-  QString filePath;
-  filePath = QFileDialog::getSaveFileName(this,
-                                         "Choose a filename to save image",
-                                         ".",
-                                         "Images (*.png *.jpg)");
-  if (filePath.isEmpty())
-    return;
-
-  filePathLabel->setText(filePath);
-}
-
 QSize ImageSaveDialog::getOpenGlPixmapSize()
 {
   int width = imageScaler->getWidth();
@@ -135,25 +108,33 @@ QPixmap ImageSaveDialog::renderOpenGlPixmap()
   return QPixmap();
 }
 
-void ImageSaveDialog::savePixmap()
+void ImageSaveDialog::savePixmap(bool &endDialog)
 {
   QString filePath;
-  filePath = filePathLabel->text();
-  
-  if (filePath.isEmpty())
-    //FIXME: Include prompt telling user of failure
-    return;
-
-  QPixmap pixmap;
-  pixmap = renderOpenGlPixmap();
+  filePath = QFileDialog::getSaveFileName(this,
+            "Choose a filename to save image",
+            ".",
+            "Images (*.png *.jpg)");  
+
+  if (filePath.isNull()) {
+    // user canceled
+    endDialog = false;;
+  } else if (filePath.isEmpty()) {
+    // somethings wrong
+    endDialog = false;
+  } else {
+    QPixmap pixmap;
+    pixmap = renderOpenGlPixmap();
   
-  //Save pixelmap to file!
-  if (filePath.endsWith(".png"))
-    pixmap.save(filePath, "PNG");
-  else if (filePath.endsWith(".jpg"))
-    pixmap.save(filePath, "JPG");
-  else
-    //FIXME: Include prompt telling user of failure
-    return;
-  return;
+    endDialog = true;
+    //Save pixelmap to file!
+    if (filePath.endsWith(".png"))
+      pixmap.save(filePath, "PNG");
+    else if (filePath.endsWith(".jpg"))
+      pixmap.save(filePath, "JPG");
+    else {
+      filePath.append(".png");
+      pixmap.save(filePath, "PNG");
+    }
+  }
 }