author | leseb <leseb> | 2002-03-29 22:02:09 (UTC) |
---|---|---|
committer | leseb <leseb> | 2002-03-29 22:02:09 (UTC) |
commit | be017d10da4ccd54b2b3ce030d2ccdc3d0825d62 (patch) (side-by-side diff) | |
tree | d41ddf0ce779d358a9a9bd78c4c32c8de36fce50 /noncore | |
parent | 1c3f2b3a329eac52d2a735d818cd70101376999f (diff) | |
download | opie-be017d10da4ccd54b2b3ce030d2ccdc3d0825d62.zip opie-be017d10da4ccd54b2b3ce030d2ccdc3d0825d62.tar.gz opie-be017d10da4ccd54b2b3ce030d2ccdc3d0825d62.tar.bz2 |
Add image preview in import dialog
-rw-r--r-- | noncore/graphics/drawpad/drawpad.h | 2 | ||||
-rw-r--r-- | noncore/graphics/drawpad/importdialog.cpp | 70 | ||||
-rw-r--r-- | noncore/graphics/drawpad/importdialog.h | 9 |
3 files changed, 80 insertions, 1 deletions
diff --git a/noncore/graphics/drawpad/drawpad.h b/noncore/graphics/drawpad/drawpad.h index fbe67b8..62a73c9 100644 --- a/noncore/graphics/drawpad/drawpad.h +++ b/noncore/graphics/drawpad/drawpad.h @@ -9,26 +9,26 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef DRAWPAD_H #define DRAWPAD_H #include <qmainwindow.h> #include <qpen.h> -class Tool; class DrawPadCanvas; +class Tool; class QAction; class QColor; class QToolButton; class QWidgetStack; class DrawPad : public QMainWindow { Q_OBJECT public: DrawPad(QWidget* parent = 0, const char* name = 0); diff --git a/noncore/graphics/drawpad/importdialog.cpp b/noncore/graphics/drawpad/importdialog.cpp index 7722417..dc78bf3 100644 --- a/noncore/graphics/drawpad/importdialog.cpp +++ b/noncore/graphics/drawpad/importdialog.cpp @@ -7,35 +7,105 @@ * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "importdialog.h" #include <qpe/applnk.h> #include <qpe/fileselector.h> +#include <qcheckbox.h> +#include <qimage.h> +#include <qlabel.h> #include <qlayout.h> +#include <qpushbutton.h> ImportDialog::ImportDialog(QWidget* parent, const char* name) : QDialog(parent, name, true) { setCaption(tr("Import")); m_pFileSelector = new FileSelector("image/*", this, "fileselector"); + connect(m_pFileSelector, SIGNAL(fileSelected(const DocLnk&)), this, SLOT(fileChanged())); m_pFileSelector->setNewVisible(false); m_pFileSelector->setCloseVisible(false); + m_pPreviewLabel = new QLabel(this); + m_pPreviewLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken); + m_pPreviewLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + m_pPreviewLabel->setFixedSize(114, 114); + m_pPreviewLabel->setBackgroundMode(QWidget:: PaletteMid); + + m_pAutomaticPreviewCheckBox = new QCheckBox(tr("Automatic preview"), this); + m_pAutomaticPreviewCheckBox->setChecked(true); + + QPushButton* previewPushButton = new QPushButton(tr("Preview"), this); + connect(previewPushButton, SIGNAL(clicked()), this, SLOT(preview())); + QVBoxLayout* mainLayout = new QVBoxLayout(this, 4, 4); + QHBoxLayout* previewLayout = new QHBoxLayout(4); + QVBoxLayout* previewSecondLayout = new QVBoxLayout(4); + + previewSecondLayout->addWidget(m_pAutomaticPreviewCheckBox); + previewSecondLayout->addWidget(previewPushButton); + previewSecondLayout->addStretch(); + + previewLayout->addWidget(m_pPreviewLabel); + previewLayout->addLayout(previewSecondLayout); + mainLayout->addWidget(m_pFileSelector); + mainLayout->addLayout(previewLayout); + + preview(); } ImportDialog::~ImportDialog() { } const DocLnk* ImportDialog::selected() { return m_pFileSelector->selected(); } + +void ImportDialog::fileChanged() +{ + if (m_pAutomaticPreviewCheckBox->isChecked()) { + preview(); + } +} + +void ImportDialog::preview() +{ + const DocLnk* docLnk = m_pFileSelector->selected(); + + if (docLnk) { + QImage image(docLnk->file()); + + int previewWidth = m_pPreviewLabel->contentsRect().width(); + int previewHeight = m_pPreviewLabel->contentsRect().height(); + + float widthScale = 1.0; + float heightScale = 1.0; + + if (previewWidth < image.width()) { + widthScale = (float)previewWidth / float(image.width()); + } + + if (previewHeight < image.height()) { + heightScale = (float)previewHeight / float(image.height()); + } + + float scale = (widthScale < heightScale ? widthScale : heightScale); + QImage previewImage = image.smoothScale((int)(image.width() * scale) , (int)(image.height() * scale)); + + QPixmap previewPixmap; + previewPixmap.convertFromImage(previewImage); + + m_pPreviewLabel->setPixmap(previewPixmap); + + delete docLnk; + } +} diff --git a/noncore/graphics/drawpad/importdialog.h b/noncore/graphics/drawpad/importdialog.h index 1c67145..ef51d7c 100644 --- a/noncore/graphics/drawpad/importdialog.h +++ b/noncore/graphics/drawpad/importdialog.h @@ -10,27 +10,36 @@ * (at your option) any later version. * * * ***************************************************************************/ #ifndef IMPORTDIALOG_H #define IMPORTDIALOG_H #include <qdialog.h> class DocLnk; class FileSelector; +class QCheckBox; +class QLabel; + class ImportDialog : public QDialog { Q_OBJECT public: ImportDialog(QWidget* parent = 0, const char* name = 0); ~ImportDialog(); const DocLnk* selected(); +private slots: + void fileChanged(); + void preview(); + private: FileSelector* m_pFileSelector; + QLabel* m_pPreviewLabel; + QCheckBox* m_pAutomaticPreviewCheckBox; }; #endif // IMPORTDIALOG_H |