fb2code.hpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 = 0);
  31. bool isModified() const { return document()->isModified(); }
  32. signals:
  33. void status(const QString &text);
  34. protected:
  35. void resizeEvent(QResizeEvent *event);
  36. private slots:
  37. void clipboardDataChanged();
  38. void updateLineNumberAreaWidth(int newBlockCount);
  39. void highlightCurrentLine();
  40. void updateLineNumberArea(const QRect &, int);
  41. void find();
  42. void validate();
  43. void zoomIn();
  44. void zoomOut();
  45. void zoomReset();
  46. private:
  47. class LineNumberArea : public QWidget
  48. {
  49. public:
  50. LineNumberArea(FbCodeEdit *parent) : QWidget(parent) { editor = parent; }
  51. QSize sizeHint() const { return QSize(editor->lineNumberAreaWidth(), 0); }
  52. protected:
  53. void paintEvent(QPaintEvent *event) { editor->lineNumberAreaPaintEvent(event); }
  54. private:
  55. FbCodeEdit *editor;
  56. };
  57. private:
  58. void lineNumberAreaPaintEvent(QPaintEvent *event);
  59. int lineNumberAreaWidth();
  60. void setZoomRatio(qreal ratio);
  61. void setCursor(int line, int column);
  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