bool PictureContent::loadPhoto(const QString & fileName, bool keepRatio, bool setName) { dropNetworkConnection(); delete m_photo; m_cachedPhoto = QPixmap(); m_opaquePhoto = false; m_photo = 0; m_fileUrl = QString(); m_netWidth = 0; m_netHeight = 0; m_photo = new CPixmap(fileName); if (m_photo->isNull()) { delete m_photo; m_photo = 0; return false; } m_opaquePhoto = !m_photo->hasAlpha(); m_fileUrl = fileName; if (keepRatio) resetContentsRatio(); if (setName) { QString string = QFileInfo(fileName).fileName().section('.', 0, 0); string = string.mid(0, 10); setFrameText(string + tr("...")); } applyPostLoadEffects(); // notify image change emit contentChanged(); return true; }
PictureContent::~PictureContent() { dropNetworkConnection(); delete m_watcherTimer; delete m_watcher; delete m_photo; }
bool PictureContent::loadFromNetwork(const QString & url, QNetworkReply * reply, const QString & title, int width, int height) { dropNetworkConnection(); delete m_photo; m_cachedPhoto = QPixmap(); m_opaquePhoto = false; m_photo = 0; m_fileUrl = url; m_netWidth = width; m_netHeight = height; // start a download if not passed as a paramenter if (!reply) { // the QNAM will be auto-deleted on closure QNetworkAccessManager * nam = new QNetworkAccessManager(this); QNetworkRequest request(url); m_netReply = nam->get(request); } else m_netReply = reply; // set title if (!title.isEmpty()) { setFrameTextEnabled(true); setFrameText(title); } #if QT_VERSION >= 0x040600 // Immediate Decode: just handle the reply if done if (m_netReply->isFinished()) return slotLoadNetworkData(); #else // No Precaching ensures signals to be emitted later #endif // Deferred Decode: listen to the network job setAcceptHoverEvents(false); setControlsVisible(false); m_progress = 0.01; connect(m_netReply, SIGNAL(finished()), this, SLOT(slotLoadNetworkData())); connect(m_netReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(slotNetworkError())); connect(m_netReply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(slotNetworkProgress(qint64,qint64))); // reset size, if got the network one if (m_netWidth > 0 && m_netHeight > 0) resetContentsRatio(); return true; }
bool PictureContent::loadPixmap(const QPixmap & pixmap, const QString & title) { dropNetworkConnection(); delete m_photo; m_cachedPhoto = QPixmap(); m_opaquePhoto = false; m_photo = 0; m_fileUrl = QString(); m_netWidth = 0; m_netHeight = 0; m_photo = new CPixmap(pixmap.toImage()); m_opaquePhoto = !pixmap.hasAlpha(); m_fileUrl = QString("data:/"); resetContentsRatio(); setFrameTextEnabled(!title.isEmpty()); setFrameText(title); applyPostLoadEffects(); // notify image change emit contentChanged(); return true; }