fb2view.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #ifndef FB2VIEW_H
  2. #define FB2VIEW_H
  3. #include <QMap>
  4. #include <QNetworkAccessManager>
  5. #include <QResizeEvent>
  6. #include <QTimer>
  7. #include <QThread>
  8. #include <QWebView>
  9. class Fb2NetworkAccessManager : public QNetworkAccessManager
  10. {
  11. Q_OBJECT
  12. public:
  13. explicit Fb2NetworkAccessManager(QObject *parent = 0);
  14. void insert(const QString &file, const QByteArray &data);
  15. protected:
  16. virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData = 0);
  17. private:
  18. QMap<QString, QByteArray> m_images;
  19. };
  20. class Fb2BaseWebView : public QWebView
  21. {
  22. Q_OBJECT
  23. public:
  24. Fb2BaseWebView(QWidget* parent = 0)
  25. : QWebView(parent)
  26. {
  27. m_timer.setInterval(100);
  28. m_timer.setSingleShot(true);
  29. connect(&m_timer, SIGNAL(timeout()), SLOT(doResize()));
  30. }
  31. protected slots:
  32. void doResize() {
  33. QResizeEvent event(size(), m_size);
  34. QWebView::resizeEvent(&event);
  35. QWebView::update();
  36. }
  37. protected:
  38. void resizeEvent(QResizeEvent* event) {
  39. if (!m_timer.isActive()) m_size = event->oldSize();
  40. m_timer.start();
  41. }
  42. private:
  43. QTimer m_timer;
  44. QSize m_size;
  45. };
  46. class Fb2WebView : public Fb2BaseWebView
  47. {
  48. Q_OBJECT
  49. public:
  50. explicit Fb2WebView(QWidget *parent = 0);
  51. bool load(const QString &filename);
  52. signals:
  53. public slots:
  54. void image(QString file, QByteArray data);
  55. void html(QString html);
  56. void zoomIn();
  57. void zoomOut();
  58. void zoomOrig();
  59. private:
  60. Fb2NetworkAccessManager m_network;
  61. QThread *m_thread;
  62. };
  63. #endif // FB2VIEW_H