fb2code.hpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #ifndef FB2CODE_H
  2. #define FB2CODE_H
  3. #include <QByteArray>
  4. #include <QObject>
  5. #include <QPlainTextEdit>
  6. #include <QTextCharFormat>
  7. #include <QColor>
  8. #include <QTextEdit>
  9. #include <QToolBar>
  10. #include "fb2mode.h"
  11. QT_BEGIN_NAMESPACE
  12. class QPaintEvent;
  13. class QResizeEvent;
  14. class QSize;
  15. class QWidget;
  16. QT_END_NAMESPACE
  17. class FbCodeEdit : public QPlainTextEdit
  18. {
  19. Q_OBJECT
  20. public:
  21. FbCodeEdit(QWidget *parent = 0);
  22. QAction * act(Fb::Actions index) const;
  23. void setAction(Fb::Actions index, QAction *action);
  24. void connectActions(QToolBar *tool);
  25. void disconnectActions();
  26. QString text() const { return toPlainText(); }
  27. bool read(QIODevice *device);
  28. void load(const QByteArray data)
  29. { setPlainText(QString::fromUtf8(data.data())); }
  30. bool findText(const QString &exp, QTextDocument::FindFlags options = {});
  31. bool isModified() const { return document()->isModified(); }
  32. void setCursor(int line, int column);
  33. signals:
  34. void status(const QString &text);
  35. protected:
  36. void resizeEvent(QResizeEvent *event);
  37. private slots:
  38. void clipboardDataChanged();
  39. void updateLineNumberAreaWidth(int newBlockCount);
  40. void highlightCurrentLine();
  41. void updateLineNumberArea(const QRect &, int);
  42. void find();
  43. void validate();
  44. void zoomIn();
  45. void zoomOut();
  46. void zoomReset();
  47. private:
  48. class LineNumberArea : public QWidget
  49. {
  50. public:
  51. LineNumberArea(FbCodeEdit *parent) : QWidget(parent) { editor = parent; }
  52. QSize sizeHint() const { return QSize(editor->lineNumberAreaWidth(), 0); }
  53. protected:
  54. void paintEvent(QPaintEvent *event) { editor->lineNumberAreaPaintEvent(event); }
  55. private:
  56. FbCodeEdit *editor;
  57. };
  58. private:
  59. void lineNumberAreaPaintEvent(QPaintEvent *event);
  60. int lineNumberAreaWidth();
  61. void setZoomRatio(qreal ratio);
  62. private:
  63. QWidget *lineNumberArea;
  64. FbActionMap m_actions;
  65. qreal zoomRatio;
  66. static qreal baseFontSize;
  67. static qreal zoomRatioMin;
  68. static qreal zoomRatioMax;
  69. friend class FbCodeEdit::LineNumberArea;
  70. };
  71. #endif // FB2CODE_H