From be78db060fc70a36babb3818d43b6a1bc473c879 Mon Sep 17 00:00:00 2001 From: Ernie Pasveer Date: Sat, 2 Oct 2021 12:19:49 -0500 Subject: [PATCH] Only add syntax highlighying for C/C++ files. --- src/SeerEditorWidget.h | 211 ++++++++++++++--------------- src/SeerEditorWidgetSourceArea.cpp | 23 +++- 2 files changed, 122 insertions(+), 112 deletions(-) diff --git a/src/SeerEditorWidget.h b/src/SeerEditorWidget.h index 5cf01aa..a729a0c 100644 --- a/src/SeerEditorWidget.h +++ b/src/SeerEditorWidget.h @@ -19,161 +19,161 @@ class SeerEditorWidgetSourceArea : public QPlainTextEdit { public: SeerEditorWidgetSourceArea (QWidget* parent = 0); - void enableLineNumberArea (bool flag); - bool lineNumberAreaEnabled () const; + void enableLineNumberArea (bool flag); + bool lineNumberAreaEnabled () const; - void enableBreakPointArea (bool flag); - bool breakPointAreaEnabled () const; + void enableBreakPointArea (bool flag); + bool breakPointAreaEnabled () const; - void enableMiniMapArea (bool flag); - bool miniMapAreaEnabled () const; + void enableMiniMapArea (bool flag); + bool miniMapAreaEnabled () const; - void lineNumberAreaPaintEvent (QPaintEvent* event); - int lineNumberAreaWidth (); + void lineNumberAreaPaintEvent (QPaintEvent* event); + int lineNumberAreaWidth (); - void breakPointAreaPaintEvent (QPaintEvent* event); - int breakPointAreaWidth (); + void breakPointAreaPaintEvent (QPaintEvent* event); + int breakPointAreaWidth (); - void miniMapAreaPaintEvent (QPaintEvent* event); - int miniMapAreaWidth (); + void miniMapAreaPaintEvent (QPaintEvent* event); + int miniMapAreaWidth (); - bool isOpen () const; - void open (const QString& fullname, const QString& file); - const QString& fullname () const; - const QString& file () const; - void close (); - void setCurrentLine (int lineno); - void scrollToLine (int lineno); + bool isOpen () const; + void open (const QString& fullname, const QString& file); + const QString& fullname () const; + const QString& file () const; + void close (); + void setCurrentLine (int lineno); + void scrollToLine (int lineno); - void clearCurrentLines (); - void addCurrentLine (int lineno); + void clearCurrentLines (); + void addCurrentLine (int lineno); - void clearBreakpoints (); - void addBreakpoint (int number, int lineno, bool enabled); - bool hasBreakpointNumber (int number) const; - bool hasBreakpointLine (int lineno) const; - const QVector& breakpointNumbers () const; - const QVector& breakpointLines () const; - const QVector& breakpointEnableds () const; - int breakpointLineToNumber (int lineno) const; - bool breakpointLineEnabled (int lineno) const; + void clearBreakpoints (); + void addBreakpoint (int number, int lineno, bool enabled); + bool hasBreakpointNumber (int number) const; + bool hasBreakpointLine (int lineno) const; + const QVector& breakpointNumbers () const; + const QVector& breakpointLines () const; + const QVector& breakpointEnableds () const; + int breakpointLineToNumber (int lineno) const; + bool breakpointLineEnabled (int lineno) const; - void showContextMenu (QMouseEvent* event); - void showContextMenu (QContextMenuEvent* event); - void showContextMenu (const QPoint& pos, const QPoint& globalPos); - void setQuickBreakpoint (QMouseEvent* event); + void showContextMenu (QMouseEvent* event); + void showContextMenu (QContextMenuEvent* event); + void showContextMenu (const QPoint& pos, const QPoint& globalPos); + void setQuickBreakpoint (QMouseEvent* event); - void clearExpression (); + void clearExpression (); signals: - void insertBreakpoint (QString breakpoint); - void deleteBreakpoints (QString breakpoints); - void enableBreakpoints (QString breakpoints); - void disableBreakpoints (QString breakpoints); - void runToLine (QString fullname, int lineno); - void addVariableExpression (QString expression); - void refreshVariableValues (); - void evaluateVariableExpression (int expressionid, QString expression); - void addMemoryVisualize (QString expression); - void showSearchBar (bool flag); + void insertBreakpoint (QString breakpoint); + void deleteBreakpoints (QString breakpoints); + void enableBreakpoints (QString breakpoints); + void disableBreakpoints (QString breakpoints); + void runToLine (QString fullname, int lineno); + void addVariableExpression (QString expression); + void refreshVariableValues (); + void evaluateVariableExpression (int expressionid, QString expression); + void addMemoryVisualize (QString expression); + void showSearchBar (bool flag); public slots: - void handleText (const QString& text); + void handleText (const QString& text); protected: - void resizeEvent (QResizeEvent* event); - void contextMenuEvent (QContextMenuEvent* event); - void keyPressEvent (QKeyEvent* event); - void mouseReleaseEvent (QMouseEvent* event); - bool event (QEvent* event); + void resizeEvent (QResizeEvent* event); + void contextMenuEvent (QContextMenuEvent* event); + void keyPressEvent (QKeyEvent* event); + void mouseReleaseEvent (QMouseEvent* event); + bool event (QEvent* event); private slots: - void highlightCurrentLines (); - void highlightCurrentLine (); - void unhighlightCurrentLine (); + void highlightCurrentLines (); + void highlightCurrentLine (); + void unhighlightCurrentLine (); - void updateMarginAreasWidth (int newBlockCount); - void updateLineNumberArea (const QRect& rect, int dy); - void updateBreakPointArea (const QRect& rect, int dy); - void updateMiniMapArea (const QRect& rect, int dy); + void updateMarginAreasWidth (int newBlockCount); + void updateLineNumberArea (const QRect& rect, int dy); + void updateBreakPointArea (const QRect& rect, int dy); + void updateMiniMapArea (const QRect& rect, int dy); private: - QString _fullname; - QString _file; - bool _enableLineNumberArea; - bool _enableBreakPointArea; - bool _enableMiniMapArea; - QVector _breakpointsNumbers; - QVector _breakpointsLineNumbers; - QVector _breakpointsEnableds; - QVector _currentLineCursors; + QString _fullname; + QString _file; + bool _enableLineNumberArea; + bool _enableBreakPointArea; + bool _enableMiniMapArea; + QVector _breakpointsNumbers; + QVector _breakpointsLineNumbers; + QVector _breakpointsEnableds; + QVector _currentLineCursors; - QTextCursor _selectedExpressionCursor; - int _selectedExpressionId; - QString _selectedExpressionName; - QString _selectedExpressionValue; - bool _ctrlKeyPressed; + QTextCursor _selectedExpressionCursor; + int _selectedExpressionId; + QString _selectedExpressionName; + QString _selectedExpressionValue; + bool _ctrlKeyPressed; - QWidget* _lineNumberArea; - QWidget* _breakPointArea; - QWidget* _miniMapArea; + QWidget* _lineNumberArea; + QWidget* _breakPointArea; + QWidget* _miniMapArea; - QPixmap* _miniMapPixmap; - SeerCppSourceHighlighter* _sourceHighlighter; + QPixmap* _miniMapPixmap; + SeerCppSourceHighlighter* _sourceHighlighter; }; class SeerEditorWidgetLineNumberArea : public QWidget { public: SeerEditorWidgetLineNumberArea (SeerEditorWidgetSourceArea* editorWidget); - QSize sizeHint () const override; + QSize sizeHint () const override; protected: - void paintEvent (QPaintEvent* event) override; - void mouseDoubleClickEvent (QMouseEvent* event) override; - void mouseMoveEvent (QMouseEvent* event) override; - void mousePressEvent (QMouseEvent* event) override; - void mouseReleaseEvent (QMouseEvent* event) override; + void paintEvent (QPaintEvent* event) override; + void mouseDoubleClickEvent (QMouseEvent* event) override; + void mouseMoveEvent (QMouseEvent* event) override; + void mousePressEvent (QMouseEvent* event) override; + void mouseReleaseEvent (QMouseEvent* event) override; private: - SeerEditorWidgetSourceArea* _editorWidget; + SeerEditorWidgetSourceArea* _editorWidget; }; class SeerEditorWidgetBreakPointArea : public QWidget { public: SeerEditorWidgetBreakPointArea (SeerEditorWidgetSourceArea* editorWidget); - QSize sizeHint () const override; + QSize sizeHint () const override; protected: - void paintEvent (QPaintEvent* event) override; - void mouseDoubleClickEvent (QMouseEvent* event) override; - void mouseMoveEvent (QMouseEvent* event) override; - void mousePressEvent (QMouseEvent* event) override; - void mouseReleaseEvent (QMouseEvent* event) override; + void paintEvent (QPaintEvent* event) override; + void mouseDoubleClickEvent (QMouseEvent* event) override; + void mouseMoveEvent (QMouseEvent* event) override; + void mousePressEvent (QMouseEvent* event) override; + void mouseReleaseEvent (QMouseEvent* event) override; private: - SeerEditorWidgetSourceArea* _editorWidget; + SeerEditorWidgetSourceArea* _editorWidget; }; class SeerEditorWidgetMiniMapArea : public QWidget { public: SeerEditorWidgetMiniMapArea (SeerEditorWidgetSourceArea* editorWidget); - QSize sizeHint () const override; + QSize sizeHint () const override; protected: - void paintEvent (QPaintEvent* event) override; - void mouseDoubleClickEvent (QMouseEvent* event) override; - void mouseMoveEvent (QMouseEvent* event) override; - void mousePressEvent (QMouseEvent* event) override; - void mouseReleaseEvent (QMouseEvent* event) override; + void paintEvent (QPaintEvent* event) override; + void mouseDoubleClickEvent (QMouseEvent* event) override; + void mouseMoveEvent (QMouseEvent* event) override; + void mousePressEvent (QMouseEvent* event) override; + void mouseReleaseEvent (QMouseEvent* event) override; private: - SeerEditorWidgetSourceArea* _editorWidget; + SeerEditorWidgetSourceArea* _editorWidget; }; #include "ui_SeerEditorWidget.h" @@ -186,16 +186,15 @@ class SeerEditorWidget : public QWidget, protected Ui::SeerEditorWidgetForm { explicit SeerEditorWidget (QWidget* parent = 0); ~SeerEditorWidget (); - SeerEditorWidgetSourceArea* sourceArea (); + SeerEditorWidgetSourceArea* sourceArea (); - void handleLineNumberLineEdit (); - void handleSearchTextLineEdit (); - void handleSearchDownToolButton (); - void handleSearchUpToolButton (); - void handleCloseToolButton (); + void handleLineNumberLineEdit (); + void handleSearchTextLineEdit (); + void handleSearchDownToolButton (); + void handleSearchUpToolButton (); + void handleCloseToolButton (); public slots: - void showSearchBar (bool flag); + void showSearchBar (bool flag); }; - diff --git a/src/SeerEditorWidgetSourceArea.cpp b/src/SeerEditorWidgetSourceArea.cpp index 895204c..593fee9 100644 --- a/src/SeerEditorWidgetSourceArea.cpp +++ b/src/SeerEditorWidgetSourceArea.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include SeerEditorWidgetSourceArea::SeerEditorWidgetSourceArea(QWidget *parent) : QPlainTextEdit(parent) { @@ -27,6 +28,7 @@ SeerEditorWidgetSourceArea::SeerEditorWidgetSourceArea(QWidget *parent) : QPlain _enableBreakPointArea = false; _enableMiniMapArea = false; _ctrlKeyPressed = false; + _sourceHighlighter = 0; //QFont font("Monospace"); //font.setStyleHint(QFont::TypeWriter); @@ -34,7 +36,6 @@ SeerEditorWidgetSourceArea::SeerEditorWidgetSourceArea(QWidget *parent) : QPlain font.setStyleHint(QFont::Monospace); setFont(font); - _sourceHighlighter = new SeerCppSourceHighlighter(document()); setReadOnly(true); setTextInteractionFlags(textInteractionFlags() | Qt::TextSelectableByKeyboard); @@ -586,26 +587,36 @@ void SeerEditorWidgetSourceArea::open (const QString& fullname, const QString& f QTextStream stream(&inputFile); QString line = stream.readLine(); - QString document; + QString text; while (!line.isNull()) { - if (document != "") { - document += "\n"; + if (text != "") { + text += "\n"; } - document += line; + text += line; line = stream.readLine(); }; // Put the contents in the editor. - setPlainText(document); + setPlainText(text); // Set the text cursor to the first line. QTextCursor cursor = textCursor(); cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1); setTextCursor(cursor); + + // Add a syntax highlighter for C++ files. + if (_sourceHighlighter) { + delete _sourceHighlighter; + } + + QRegExp cpp_re("(?:.c|.cpp|.CPP|.cxx|.CXX|.h|.H|.hpp|.hxx|.Hxx|.HXX)$"); + if (_fullname.contains(cpp_re)) { + _sourceHighlighter = new SeerCppSourceHighlighter(document()); + } } const QString& SeerEditorWidgetSourceArea::fullname () const {