Mercurial > hg > svgui
comparison widgets/ImageDialog.cpp @ 305:013a37723c0a
* Add support for remote files to image layer
| author | Chris Cannam | 
|---|---|
| date | Fri, 05 Oct 2007 15:52:52 +0000 | 
| parents | 4b7e8da8f069 | 
| children | e251c3599ea8 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 304:4b7e8da8f069 | 305:013a37723c0a | 
|---|---|
| 21 #include <QDialogButtonBox> | 21 #include <QDialogButtonBox> | 
| 22 #include <QPushButton> | 22 #include <QPushButton> | 
| 23 #include <QGroupBox> | 23 #include <QGroupBox> | 
| 24 #include <QDesktopWidget> | 24 #include <QDesktopWidget> | 
| 25 #include <QApplication> | 25 #include <QApplication> | 
| 26 | 26 #include <QUrl> | 
| 27 #include <QMessageBox> | |
| 28 | |
| 29 #include "data/fileio/RemoteFile.h" | |
| 27 #include "data/fileio/FileFinder.h" | 30 #include "data/fileio/FileFinder.h" | 
| 31 | |
| 32 #include <iostream> | |
| 28 | 33 | 
| 29 ImageDialog::ImageDialog(QString title, | 34 ImageDialog::ImageDialog(QString title, | 
| 30 QString image, | 35 QString image, | 
| 31 QString label, | 36 QString label, | 
| 32 QWidget *parent) : | 37 QWidget *parent) : | 
| 33 QDialog(parent), | 38 QDialog(parent), | 
| 34 m_imagePreview(0) | 39 m_imagePreview(0), | 
| 40 m_remoteFile(0) | |
| 35 { | 41 { | 
| 36 setWindowTitle(title); | 42 setWindowTitle(title); | 
| 37 | 43 | 
| 38 QGridLayout *grid = new QGridLayout; | 44 QGridLayout *grid = new QGridLayout; | 
| 39 setLayout(grid); | 45 setLayout(grid); | 
| 50 m_labelEdit = new QLineEdit; | 56 m_labelEdit = new QLineEdit; | 
| 51 subgrid->addWidget(m_labelEdit, row, 1, 1, 2); | 57 subgrid->addWidget(m_labelEdit, row, 1, 1, 2); | 
| 52 | 58 | 
| 53 ++row; | 59 ++row; | 
| 54 | 60 | 
| 55 subgrid->addWidget(new QLabel(tr("File:")), row, 0); | 61 subgrid->addWidget(new QLabel(tr("File or URL:")), row, 0); | 
| 56 | 62 | 
| 57 m_imageEdit = new QLineEdit; | 63 m_imageEdit = new QLineEdit; | 
| 58 subgrid->addWidget(m_imageEdit, row, 1, 1, 1); | 64 subgrid->addWidget(m_imageEdit, row, 1, 1, 1); | 
| 65 | |
| 59 connect(m_imageEdit, SIGNAL(textEdited(const QString &)), | 66 connect(m_imageEdit, SIGNAL(textEdited(const QString &)), | 
| 60 this, SLOT(imageEditEdited(const QString &))); | 67 this, SLOT(imageEditEdited(const QString &))); | 
| 68 connect(m_imageEdit, SIGNAL(editingFinished()), | |
| 69 this, SLOT(imageEditEdited())); | |
| 61 | 70 | 
| 62 QPushButton *browse = new QPushButton(tr("Browse...")); | 71 QPushButton *browse = new QPushButton(tr("Browse...")); | 
| 63 connect(browse, SIGNAL(clicked()), this, SLOT(browseClicked())); | 72 connect(browse, SIGNAL(clicked()), this, SLOT(browseClicked())); | 
| 64 subgrid->addWidget(browse, row, 2, 1, 1); | 73 subgrid->addWidget(browse, row, 2, 1, 1); | 
| 65 | 74 | 
| 98 if (label != "") setLabel(label); | 107 if (label != "") setLabel(label); | 
| 99 } | 108 } | 
| 100 | 109 | 
| 101 ImageDialog::~ImageDialog() | 110 ImageDialog::~ImageDialog() | 
| 102 { | 111 { | 
| 112 delete m_remoteFile; | |
| 103 } | 113 } | 
| 104 | 114 | 
| 105 QString | 115 QString | 
| 106 ImageDialog::getImage() | 116 ImageDialog::getImage() | 
| 107 { | 117 { | 
| 138 { | 148 { | 
| 139 updatePreview(); | 149 updatePreview(); | 
| 140 } | 150 } | 
| 141 | 151 | 
| 142 void | 152 void | 
| 143 ImageDialog::imageEditEdited(const QString &) | 153 ImageDialog::imageEditEdited(const QString &s) | 
| 154 { | |
| 155 if (s.startsWith("http:") || s.startsWith("ftp:")) { | |
| 156 return; | |
| 157 } | |
| 158 updatePreview(); | |
| 159 } | |
| 160 | |
| 161 void | |
| 162 ImageDialog::imageEditEdited() | |
| 144 { | 163 { | 
| 145 updatePreview(); | 164 updatePreview(); | 
| 146 } | 165 } | 
| 147 | 166 | 
| 148 void | 167 void | 
| 153 QString img = m_imageEdit->text(); | 172 QString img = m_imageEdit->text(); | 
| 154 | 173 | 
| 155 m_okButton->setEnabled(img != ""); | 174 m_okButton->setEnabled(img != ""); | 
| 156 | 175 | 
| 157 if (img != m_loadedImageFile) { | 176 if (img != m_loadedImageFile) { | 
| 158 m_loadedImage = QPixmap(img); | 177 | 
| 178 QString fileName = img; | |
| 179 delete m_remoteFile; | |
| 180 m_remoteFile = 0; | |
| 181 | |
| 182 if (RemoteFile::isRemote(fileName)) { | |
| 183 QUrl url(fileName); | |
| 184 if (!RemoteFile::canHandleScheme(url)) { | |
| 185 QMessageBox::critical(this, tr("Unsupported scheme in URL"), | |
| 186 tr("The URL scheme \"%1\" is not supported") | |
| 187 .arg(url.scheme())); | |
| 188 } else { | |
| 189 m_remoteFile = new RemoteFile(url); | |
| 190 m_remoteFile->wait(); | |
| 191 if (!m_remoteFile->isOK()) { | |
| 192 QMessageBox::critical(this, tr("File download failed"), | |
| 193 tr("Failed to download URL \"%1\": %2") | |
| 194 .arg(url.toString()).arg(m_remoteFile->getErrorString())); | |
| 195 delete m_remoteFile; | |
| 196 m_remoteFile = 0; | |
| 197 } else { | |
| 198 fileName = m_remoteFile->getLocalFilename(); | |
| 199 } | |
| 200 } | |
| 201 } | |
| 202 | |
| 203 // std::cerr << "image filename: \"" << fileName.toStdString() << "\"" << std::endl; | |
| 204 | |
| 205 m_loadedImage = QPixmap(fileName); | |
| 159 m_loadedImageFile = img; | 206 m_loadedImageFile = img; | 
| 160 } | 207 } | 
| 161 | 208 | 
| 162 QSize sz(m_imagePreview->size()); | 209 QSize sz(m_imagePreview->size()); | 
| 163 int m = m_imagePreview->margin() * 2; | 210 int m = m_imagePreview->margin() * 2; | 
