From: Diane Trout Date: Thu, 12 Oct 2006 23:52:19 +0000 (+0000) Subject: cleanup image save dialog aesthetics X-Git-Url: http://woldlab.caltech.edu/gitweb/?p=mussa.git;a=commitdiff_plain;h=29b215137640d0076ba94b360cadad22fe1c75c1 cleanup image save dialog aesthetics ticket:96 one of the problems is that when people try saving an image they couldn't find where the image was saved too. This is probably because they didn't set a file name and no errors were thrown. this patch ties the "save as" prompt to the save button, so once someone gets the pixel size right they have to chose a filename. I also fixed the problem where it wasn't loading the "lock aspect ratio" icon out of the resource file, and made a few other aesthetics updates. --- diff --git a/qui/ImageSaveDialog.cpp b/qui/ImageSaveDialog.cpp index 3c5b009..0357af4 100644 --- a/qui/ImageSaveDialog.cpp +++ b/qui/ImageSaveDialog.cpp @@ -1,10 +1,10 @@ #include #include -#include +#include +#include #include #include #include -//#include #include #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"); + } + } } diff --git a/qui/ImageSaveDialog.hpp b/qui/ImageSaveDialog.hpp index beda6ee..411bfe9 100644 --- a/qui/ImageSaveDialog.hpp +++ b/qui/ImageSaveDialog.hpp @@ -19,25 +19,22 @@ public: public slots: void accept(); void reject(); - // int exec(); - void promptFileDialog(); void setSize(int width, int height); -signals: - private: - void savePixmap(); + //! prompt user for file name and save image, if (endDialog) close dialog + /** if endDialog is true, we should close the dialog box, + * otherwise, keep the dialog box. (In case the user canceled out + * of save as. + */ + void savePixmap(bool &endDialog); QSize getOpenGlPixmapSize(); QPixmap renderOpenGlPixmap(); ImageScaler *imageScaler; - //QPixmap *pixmap; - QLabel *filePathLabel; - QPushButton *browseButton; QPushButton *saveButton; QPushButton *cancelButton; - QGLWidget *glwidget; - + QGLWidget *glwidget; }; #endif diff --git a/qui/ImageScaler.cpp b/qui/ImageScaler.cpp index dbf9d58..9593d7b 100644 --- a/qui/ImageScaler.cpp +++ b/qui/ImageScaler.cpp @@ -10,7 +10,7 @@ #include "ImageScaler.hpp" ImageScaler::ImageScaler(QWidget *parent) - : QWidget(parent) + : QFrame(parent) { lockAspectRatio = false; aspectRatio = 1.0; @@ -19,11 +19,10 @@ ImageScaler::ImageScaler(QWidget *parent) curWidth = 1; curHeight = 1; - //lockAspectAction = new QAction( - //lockAspectAction->setCheckable(true); - + setFrameStyle(QFrame::StyledPanel); + lockButton = new QCheckBox(); - lockButton->setIcon(QIcon(tr("icons/lock.png"))); + lockButton->setIcon(QIcon(":icons/lock.png")); lockButton->setToolTip(tr("Lock aspect ratio")); lockButton->setWhatsThis(tr("Lock aspect ratio")); connect(lockButton, SIGNAL(stateChanged(int)), diff --git a/qui/ImageScaler.hpp b/qui/ImageScaler.hpp index 86c2696..22a7377 100644 --- a/qui/ImageScaler.hpp +++ b/qui/ImageScaler.hpp @@ -1,14 +1,14 @@ #ifndef _IMAGESCALER_H_ #define _IMAGESCALER_H_ -#include +#include class QSpinBox; class QLabel; class QAction; class QCheckBox; -class ImageScaler : public QWidget +class ImageScaler : public QFrame { Q_OBJECT