width: view.width
height: view.height
+ Label {
+ width: view.width - 10
+ height: view.height
+ anchors.centerIn: parent
+ visible: item.error
+ text: qsTr("Failed to load preview");
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ font.pixelSize: 32
+ }
+
QuillItem {
+ id: item
source: url
mimeType: mime
width: view.width - 10
height: view.height
anchors.centerIn: parent
- // TODO: does not work because of preloading
- // onError: showError(qsTr("Failed to load image"));
- }
+ visible: !item.error
+ }
}
}
#include <QDir>
QuillItem::QuillItem(QDeclarativeItem *parent) :
- QDeclarativeItem(parent), m_file(0) {
+ QDeclarativeItem(parent), m_file(0), m_error(false) {
setFlag(QGraphicsItem::ItemHasNoContents, false);
emit mimeTypeChanged();
}
+bool QuillItem::error() const {
+ return m_error;
+}
+
void QuillItem::recreate() {
+ if (m_error) {
+ m_error = false;
+ emit errorChanged();
+ }
+
if (m_file) {
m_file->deleteLater();
}
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(QString, err.errorData()));
m_file->deleteLater(); m_file = 0;
+
+ if (!m_error) {
+ m_error = true;
+
+ emit errorChanged();
+ }
+
return true;
}
Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged);
Q_PROPERTY(QString mimeType READ mimeType WRITE setMimeType NOTIFY mimeTypeChanged);
+ Q_PROPERTY(bool error READ error NOTIFY errorChanged);
public:
QuillItem(QDeclarativeItem *parent = 0);
virtual void componentComplete();
+ bool error() const;
+
signals:
void sourceChanged();
void error(const QString& err);
void mimeTypeChanged();
+ void errorChanged();
private slots:
void fileLoaded();
QuillFile *m_file;
QUrl m_url;
QString m_type;
+ bool m_error;
};
#endif /* QUILL_ITEM_H */