fb2view.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #ifndef FB2VIEW_H
  2. #define FB2VIEW_H
  3. #include <QByteArray>
  4. #include <QHash>
  5. #include <QResizeEvent>
  6. #include <QTemporaryFile>
  7. #include <QTimer>
  8. #include <QThread>
  9. #include <QWebElement>
  10. #include <QWebView>
  11. class Fb2BaseWebView : public QWebView
  12. {
  13. Q_OBJECT
  14. public:
  15. Fb2BaseWebView(QWidget* parent = 0)
  16. : QWebView(parent), m_empty(true)
  17. {
  18. m_timer.setInterval(100);
  19. m_timer.setSingleShot(true);
  20. connect(&m_timer, SIGNAL(timeout()), SLOT(doResize()));
  21. }
  22. protected slots:
  23. void doResize() {
  24. QResizeEvent event(size(), m_size);
  25. QWebView::resizeEvent(&event);
  26. QWebView::update();
  27. }
  28. protected:
  29. void resizeEvent(QResizeEvent* event) {
  30. if (m_empty) return QWebView::resizeEvent(event);
  31. if (!m_timer.isActive()) m_size = event->oldSize();
  32. m_timer.start();
  33. }
  34. protected:
  35. bool m_empty;
  36. private:
  37. QTimer m_timer;
  38. QSize m_size;
  39. };
  40. class Fb2WebPage : public QWebPage
  41. {
  42. Q_OBJECT
  43. public:
  44. explicit Fb2WebPage(QObject *parent = 0);
  45. protected:
  46. virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);
  47. };
  48. class Fb2WebView : public Fb2BaseWebView
  49. {
  50. Q_OBJECT
  51. public:
  52. explicit Fb2WebView(QWidget *parent = 0);
  53. virtual ~Fb2WebView();
  54. void load(const QString &filename);
  55. bool save(QIODevice *device);
  56. bool save(QString *string);
  57. QString fileName(const QString &path);
  58. QString fileData(const QString &name);
  59. QString toBodyXml();
  60. bool UndoEnabled();
  61. bool RedoEnabled();
  62. bool CutEnabled();
  63. bool CopyEnabled();
  64. bool BoldChecked();
  65. bool ItalicChecked();
  66. bool StrikeChecked();
  67. bool SubChecked();
  68. bool SupChecked();
  69. signals:
  70. public slots:
  71. QString temp(QString name);
  72. void data(QString name, QByteArray data);
  73. void html(QString name, QString html);
  74. void linkHovered(const QString &link, const QString &title, const QString &textContent);
  75. void zoomIn();
  76. void zoomOut();
  77. void zoomOrig();
  78. private slots:
  79. void fixContents();
  80. private:
  81. QTemporaryFile * file(const QString &name);
  82. QWebElement doc();
  83. private:
  84. typedef QHash<QString, QTemporaryFile*> TemporaryHash;
  85. TemporaryHash m_files;
  86. QThread *m_thread;
  87. };
  88. #endif // FB2VIEW_H