/* SPDX-FileCopyrightText: 2016 Volker Krause SPDX-License-Identifier: MIT */ #ifndef CODEEDITOR_H #define CODEEDITOR_H #include #include namespace KSyntaxHighlighting { class SyntaxHighlighter; } class CodeEditorSidebar; class CodeEditor : public QPlainTextEdit { Q_OBJECT public: explicit CodeEditor(QWidget *parent = nullptr); ~CodeEditor() override; void openFile(const QString &fileName); protected: void contextMenuEvent(QContextMenuEvent *event) override; void resizeEvent(QResizeEvent *event) override; private: friend class CodeEditorSidebar; void setTheme(const KSyntaxHighlighting::Theme &theme); int sidebarWidth() const; void sidebarPaintEvent(QPaintEvent *event); void updateSidebarGeometry(); void updateSidebarArea(const QRect &rect, int dy); void highlightCurrentLine(); QTextBlock blockAtPosition(int y) const; bool isFoldable(const QTextBlock &block) const; bool isFolded(const QTextBlock &block) const; void toggleFold(const QTextBlock &block); KSyntaxHighlighting::Repository m_repository; KSyntaxHighlighting::SyntaxHighlighter *m_highlighter; CodeEditorSidebar *m_sideBar; }; #endif // CODEEDITOR_H