diff widgets/ImageDialog.cpp @ 303:46faec7aae12

* Phase 1 of an image layer.
author Chris Cannam
date Thu, 04 Oct 2007 16:34:11 +0000
parents
children 4b7e8da8f069
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/widgets/ImageDialog.cpp	Thu Oct 04 16:34:11 2007 +0000
@@ -0,0 +1,176 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    Sonic Visualiser
+    An audio file viewer and annotation editor.
+    Centre for Digital Music, Queen Mary, University of London.
+    This file copyright 2007 QMUL.
+    
+    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.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#include "ImageDialog.h"
+
+#include <QLineEdit>
+#include <QGridLayout>
+#include <QLabel>
+#include <QDialogButtonBox>
+#include <QPushButton>
+#include <QGroupBox>
+
+#include "data/fileio/FileFinder.h"
+
+ImageDialog::ImageDialog(QString title,
+                         QString image,
+                         QString label,
+                         QWidget *parent) :
+    QDialog(parent),
+    m_imagePreview(0)
+{
+    setWindowTitle(title);
+    
+    QGridLayout *grid = new QGridLayout;
+    setLayout(grid);
+
+    QGroupBox *databox = new QGroupBox(tr("Image"));
+
+    QGridLayout *subgrid = new QGridLayout;
+    databox->setLayout(subgrid);
+
+    int row = 0;
+
+    subgrid->addWidget(new QLabel(tr("Label:")), row, 0);
+
+    m_labelEdit = new QLineEdit;
+    subgrid->addWidget(m_labelEdit, row, 1, 1, 2);
+
+    ++row;
+
+    subgrid->addWidget(new QLabel(tr("File:")), row, 0);
+
+    m_imageEdit = new QLineEdit;
+    m_imageEdit->setReadOnly(true);
+    subgrid->addWidget(m_imageEdit, row, 1, 1, 1);
+
+    QPushButton *browse = new QPushButton(tr("Browse..."));
+    connect(browse, SIGNAL(clicked()), this, SLOT(browseClicked()));
+    subgrid->addWidget(browse, row, 2, 1, 1);
+
+    ++row;
+
+    QGroupBox *previewbox = new QGroupBox(tr("Preview"));
+    
+    subgrid = new QGridLayout;
+    previewbox->setLayout(subgrid);
+
+    m_imagePreview = new QLabel;
+    m_imagePreview->setAlignment(Qt::AlignCenter);
+    subgrid->addWidget(m_imagePreview, 0, 0);
+
+    m_imagePreview->setMinimumSize(QSize(100, 100));
+
+    grid->addWidget(databox, 0, 0);
+    grid->addWidget(previewbox, 1, 0);
+
+    grid->setRowStretch(1, 10);
+
+    QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok |
+                                                QDialogButtonBox::Cancel);
+    grid->addWidget(bb, 2, 0, 1, 1);
+    connect(bb, SIGNAL(accepted()), this, SLOT(accept()));
+    connect(bb, SIGNAL(rejected()), this, SLOT(reject()));
+
+    m_okButton = bb->button(QDialogButtonBox::Ok);
+    m_okButton->setEnabled(false);
+
+    if (image != "") setImage(image);
+    if (label != "") setLabel(label);
+}
+
+ImageDialog::~ImageDialog()
+{
+}
+
+QString
+ImageDialog::getImage()
+{
+    return m_loadedImageFile;
+}
+
+QPixmap
+ImageDialog::getPixmap()
+{
+    return m_loadedImage;
+}
+
+QString
+ImageDialog::getLabel()
+{
+    return m_labelEdit->text();
+}
+
+void
+ImageDialog::setImage(QString image)
+{
+    m_imageEdit->setText(image);
+    updatePreview();
+}
+
+void
+ImageDialog::setLabel(QString label)
+{
+    m_labelEdit->setText(label);
+}
+
+void
+ImageDialog::resizeEvent(QResizeEvent *)
+{
+    updatePreview();
+}
+
+void
+ImageDialog::updatePreview()
+{
+    if (!m_imagePreview) return;
+
+    QString img = m_imageEdit->text();
+
+    if (img != m_loadedImageFile) {
+        m_loadedImage = QPixmap(img);
+        m_loadedImageFile = img;
+    }
+
+    QSize sz(m_imagePreview->size());
+    int m = m_imagePreview->margin() * 2;
+    sz -= QSize(m, m);
+
+    if (m_loadedImage.isNull()) {
+        m_imagePreview->setPixmap(QPixmap());
+        m_okButton->setEnabled(false);
+    } else {
+        m_imagePreview->setPixmap(m_loadedImage.scaled
+                                  (sz,
+                                   Qt::KeepAspectRatio,
+                                   Qt::SmoothTransformation));
+        m_okButton->setEnabled(true);
+    }
+}
+
+void
+ImageDialog::browseClicked()
+{
+    QString file =
+        FileFinder::getInstance()->getOpenFileName(FileFinder::ImageFile);
+
+    if (file != "") {
+        setImage(file);
+        emit imageChanged(file);
+    }
+}
+
+
+