| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #ifndef VIMAGEPREVIEWER_H
- #define VIMAGEPREVIEWER_H
- #include <QObject>
- #include <QString>
- #include <QTextBlock>
- #include <QHash>
- class VMdEdit;
- class QTimer;
- class QTextDocument;
- class VFile;
- class VDownloader;
- class VImagePreviewer : public QObject
- {
- Q_OBJECT
- public:
- explicit VImagePreviewer(VMdEdit *p_edit, int p_timeToPreview);
- void disableImagePreview();
- void enableImagePreview();
- bool isPreviewEnabled();
- bool isImagePreviewBlock(const QTextBlock &p_block);
- QImage fetchCachedImageFromPreviewBlock(QTextBlock &p_block);
- // Clear the m_imageCache and all the preview blocks.
- // Then re-preview all the blocks.
- void refresh();
- void update();
- private slots:
- void timerTimeout();
- void handleContentChange(int p_position, int p_charsRemoved, int p_charsAdded);
- void imageDownloaded(const QByteArray &p_data, const QString &p_url);
- private:
- struct ImageInfo
- {
- ImageInfo(const QString &p_name, int p_width)
- : m_name(p_name), m_width(p_width)
- {
- }
- QString m_name;
- int m_width;
- };
- void previewImages();
- bool isValidImagePreviewBlock(QTextBlock &p_block);
- // Fetch the image link's URL if there is only one link.
- QString fetchImageUrlToPreview(const QString &p_text);
- // Fetch teh image's full path if there is only one image link.
- QString fetchImagePathToPreview(const QString &p_text);
- // Try to preview the image of @p_block.
- // Return the next block to process.
- QTextBlock previewImageOfOneBlock(QTextBlock &p_block);
- // Insert a new block to preview image.
- QTextBlock insertImagePreviewBlock(QTextBlock &p_block, const QString &p_imagePath);
- // @p_block is the image block. Update it to preview @p_imagePath.
- void updateImagePreviewBlock(QTextBlock &p_block, const QString &p_imagePath);
- void removeBlock(QTextBlock &p_block);
- // Corrupted image preview block: ObjectReplacementCharacter mixed with other
- // non-space characters.
- // Remove the ObjectReplacementCharacter chars.
- void clearCorruptedImagePreviewBlock(QTextBlock &p_block);
- void clearAllImagePreviewBlocks();
- QTextImageFormat fetchFormatFromPreviewBlock(QTextBlock &p_block);
- QString fetchImagePathFromPreviewBlock(QTextBlock &p_block);
- void updateFormatInPreviewBlock(QTextBlock &p_block,
- const QTextImageFormat &p_format);
- // Look up m_imageCache to get the resource name in QTextDocument's cache.
- // If there is none, insert it.
- QString imageCacheResourceName(const QString &p_imagePath);
- QString imagePathToCacheResourceName(const QString &p_imagePath);
- // Return true if and only if there is update.
- bool updateImageWidth(QTextImageFormat &p_format);
- VMdEdit *m_edit;
- QTextDocument *m_document;
- VFile *m_file;
- QTimer *m_timer;
- bool m_enablePreview;
- bool m_isPreviewing;
- bool m_requestCearBlocks;
- bool m_requestRefreshBlocks;
- bool m_updatePending;
- // Map from image full path to QUrl identifier in the QTextDocument's cache.
- QHash<QString, ImageInfo> m_imageCache;;
- VDownloader *m_downloader;
- // The preview width.
- int m_imageWidth;
- static const int c_minImageWidth;
- };
- #endif // VIMAGEPREVIEWER_H
|