umbrello  26.08.2
Umbrello UML Modeller is a Unified Modelling Language (UML) diagram program based on KDE Technology
codeeditor.h
Go to the documentation of this file.
1 /*
2  SPDX-License-Identifier: GPL-2.0-or-later
3 
4  SPDX-FileCopyrightText: 2003 Brian Thomas <brian.thomas@gsfc.nasa.gov>
5  SPDX-FileCopyrightText: 2004-2022 Umbrello UML Modeller Authors <umbrello-devel@kde.org>
6 */
7 
8 #ifndef CODEEDITOR_H
9 #define CODEEDITOR_H
10 
11 #include "codeviewerstate.h"
12 #include "textblocklist.h"
13 
14 #include <QTextEdit>
15 #include <KTextEditor/Document>
16 #include <KTextEditor/Editor>
17 #include <KTextEditor/View>
18 
19 #include <QList>
20 #include <QString>
21 
22 class CodeViewerDialog;
23 class CodeComment;
24 class CodeDocument;
26 class CodeMethodBlock;
29 class QMenu;
30 class QLabel;
31 class TextBlock;
32 class UMLObject;
33 
34 struct ParaInfo
35 {
36  int start = 0; // this is a relative offset from the beginning of the tblock
37  int size = 0;
38  int end = 0;
39  QColor fgcolor;
40  QColor bgcolor;
41  bool isEditable = false;
42 };
43 
44 
46 {
47 public:
48  QList<ParaInfo*> m_paraList;
50  QString m_displayName;
53 
54  TextBlockInfo () { m_parent = nullptr; isClickable = false; isCodeAccessorMethod = false; }
55  void setParent(UMLObject *p = nullptr) { m_parent = p; }
56  UMLObject * parent() { return m_parent; }
57  void setDisplayName(const QString& name) { m_displayName = name; }
58  QString displayName() const { return m_displayName; }
59 };
60 
61 
62 class CodeEditor : public QTextEdit
63 {
64  Q_OBJECT
65 public:
66  explicit CodeEditor(const QString & text, CodeViewerDialog *parent = nullptr, CodeDocument *doc = nullptr);
67  explicit CodeEditor(CodeViewerDialog *parent = nullptr, CodeDocument *doc = nullptr);
68  ~CodeEditor();
69 
71 
72 protected:
73  bool close ();
74 
75  void appendText(TextBlock * tblock);
76  void appendText(HierarchicalCodeBlock * hblock);
78  void appendText(TextBlockList * items);
79  void appendText(CodeMethodBlock * mb);
80  void appendText(CodeComment *comment, TextBlock * parent, UMLObject *umlObj = nullptr, const QString & compName = QString());
82 
83  void rebuildView(int startCursorPos);
84 
85  void contextMenuEvent(QContextMenuEvent * event);
86  void contentsMouseMoveEvent(QMouseEvent * e);
87  void keyPressEvent(QKeyEvent * e);
88  void mouseDoubleClickEvent(QMouseEvent * e);
89 
90  void loadFromDocument();
91 
92  QMenu * createPopup();
93 
94 private:
95  QString m_parentDocName;
98 
101 
106 
110 
111  QMap<TextBlock*, TextBlockInfo*> m_tbInfoMap;
113 
114  void insertText(const QString & text, TextBlock * parent, bool isEditable = false,
115  const QColor & fgcolor = QColor("black"), const QColor & bgcolor = QColor("white"),
116  UMLObject *umlobj = nullptr, const QString & displayName = QString(), int startLine = -1);
117 
118  void editTextBlock(TextBlock * tBlock, int para);
119  void clearText();
120  QLabel * componentLabel();
121  bool paraIsNotSingleLine(int para);
122  void expandSelectedParagraph(int where);
123  void contractSelectedParagraph(int where);
124  void updateTextBlockFromText(TextBlock * block);
125 
126  void initText(CodeDocument * doc);
127  void init(CodeViewerDialog * parentDialog, CodeDocument * parentDoc);
128 
129  void changeTextBlockHighlighting(TextBlock * tb, bool selected);
130  void setParagraphBackgroundColor(int position, const QColor& color);
131  bool isParaEditable(int para);
132  bool textBlockIsClickable(UMLObject * obj);
133 
134  TextBlock* findTextBlockAt(int characterPos);
135 
136  void clicked(int para, int pos);
137 
138  static bool isNonBlank(const QString &str);
139 
140 public Q_SLOTS:
141  void insertParagraph(const QString & text, int para);
142  void removeParagraph(int para);
143  void changeHighlighting(int signal);
144  void changeShowHidden(int signal);
145  void slotRedrawText();
146 
147 protected Q_SLOTS:
149  void slotCopyTextBlock();
150  void slotCutTextBlock();
151  void slotPasteTextBlock();
156 
157 Q_SIGNALS:
158  // void sigNewLinePressed();
159  // void sigBackspacePressed();
160 
161 };
162 
163 #endif // CODEEDITOR_H
void setParagraphBackgroundColor(int position, const QColor &color)
Definition: codeeditor.cpp:1291
CodeDocument * m_parentDoc
Definition: codeeditor.h:96
bool isEditable
Definition: codeeditor.h:41
void changeHighlighting(int signal)
Definition: codeeditor.cpp:1315
Definition: codeeditor.h:45
configurable params for the code viewer tool
Definition: codeviewerstate.h:15
bool m_isHighlighted
Definition: codeeditor.h:104
bool m_showHiddenBlocks
Definition: codeeditor.h:105
int start
Definition: codeeditor.h:36
void slotPasteTextBlock()
Definition: codeeditor.cpp:879
void keyPressEvent(QKeyEvent *e)
Definition: codeeditor.cpp:193
int m_lastPara
Definition: codeeditor.h:99
bool m_newLinePressed
Definition: codeeditor.h:102
QString m_displayName
Definition: codeeditor.h:50
void slotChangeSelectedBlockCommentView()
Definition: codeeditor.cpp:670
void removeParagraph(int para)
Definition: codeeditor.cpp:628
bool paraIsNotSingleLine(int para)
Definition: codeeditor.cpp:1153
QList< ParaInfo * > m_paraList
Definition: codeeditor.h:48
void loadFromDocument()
Definition: codeeditor.cpp:211
TextBlockInfo()
Definition: codeeditor.h:54
TextBlockList m_textBlockList
Definition: codeeditor.h:112
Definition: codeclassfielddeclarationblock.h:25
UMLObject * m_parent
Definition: codeeditor.h:49
void slotRedrawText()
Definition: codeeditor.cpp:891
void clicked(int para, int pos)
Definition: codeeditor.cpp:118
CodeViewerDialog * m_parentDialog
Definition: codeeditor.h:97
void slotChangeSelectedBlockView()
Definition: codeeditor.cpp:657
The base class for UML objects.
Definition: umlobject.h:69
CodeEditor(const QString &text, CodeViewerDialog *parent=nullptr, CodeDocument *doc=nullptr)
Definition: codeeditor.cpp:56
void changeTextBlockHighlighting(TextBlock *tb, bool selected)
Definition: codeeditor.cpp:1255
void insertText(const QString &text, TextBlock *parent, bool isEditable=false, const QColor &fgcolor=QColor("black"), const QColor &bgcolor=QColor("white"), UMLObject *umlobj=nullptr, const QString &displayName=QString(), int startLine=-1)
Definition: codeeditor.cpp:249
bool close()
Definition: codeeditor.cpp:141
~CodeEditor()
Definition: codeeditor.cpp:74
QLabel * componentLabel()
Definition: codeeditor.cpp:108
int m_lastPos
Definition: codeeditor.h:100
Definition: codeblockwithcomments.h:19
void slotInsertCodeBlockAfterSelected()
Definition: codeeditor.cpp:706
UMLObject * parent()
Definition: codeeditor.h:56
bool isCodeAccessorMethod
Definition: codeeditor.h:52
void insertParagraph(const QString &text, int para)
Definition: codeeditor.cpp:618
void contractSelectedParagraph(int where)
Definition: codeeditor.cpp:1344
void editTextBlock(TextBlock *tBlock, int para)
Definition: codeeditor.cpp:155
void changeShowHidden(int signal)
Definition: codeeditor.cpp:1302
QMenu * createPopup()
Definition: codeeditor.cpp:741
bool textBlockIsClickable(UMLObject *obj)
Definition: codeeditor.cpp:639
void slotInsertCodeBlockBeforeSelected()
Definition: codeeditor.cpp:686
Settings::CodeViewerState state()
Definition: codeeditor.cpp:99
Definition: codemethodblock.h:25
void setParent(UMLObject *p=nullptr)
Definition: codeeditor.h:55
void setDisplayName(const QString &name)
Definition: codeeditor.h:57
Definition: codedocument.h:29
void slotCopyTextBlock()
Definition: codeeditor.cpp:832
Definition: codeeditor.h:62
int size
number of characters
Definition: codeeditor.h:37
QString m_parentDocName
Definition: codeeditor.h:95
TextBlock * m_selectedTextBlock
Definition: codeeditor.h:108
Definition: codeviewerdialog.h:22
void appendText(TextBlock *tblock)
Definition: codeeditor.cpp:550
void rebuildView(int startCursorPos)
Definition: codeeditor.cpp:1475
void initText(CodeDocument *doc)
QMap< TextBlock *, TextBlockInfo * > m_tbInfoMap
Definition: codeeditor.h:111
void clearText()
Definition: codeeditor.cpp:81
QList< TextBlock * > TextBlockList
Definition: textblocklist.h:12
TextBlock * findTextBlockAt(int characterPos)
Definition: codeeditor.cpp:1174
void contextMenuEvent(QContextMenuEvent *event)
Definition: codeeditor.cpp:730
Definition: hierarchicalcodeblock.h:20
Definition: textblock.h:22
void expandSelectedParagraph(int where)
Definition: codeeditor.cpp:1376
void slotCutTextBlock()
Definition: codeeditor.cpp:854
QColor bgcolor
Definition: codeeditor.h:40
Definition: codeeditor.h:34
QString displayName() const
Definition: codeeditor.h:58
void mouseDoubleClickEvent(QMouseEvent *e)
Definition: codeeditor.cpp:1405
QColor fgcolor
Definition: codeeditor.h:39
void init(CodeViewerDialog *parentDialog, CodeDocument *parentDoc)
Definition: codeeditor.cpp:901
static bool isNonBlank(const QString &str)
Definition: codeeditor.cpp:181
void contentsMouseMoveEvent(QMouseEvent *e)
Definition: codeeditor.cpp:1430
void slotCursorPositionChanged()
Definition: codeeditor.cpp:1012
TextBlock * m_lastTextBlockToBeEdited
Definition: codeeditor.h:109
Definition: codecomment.h:19
int end
end line number
Definition: codeeditor.h:38
void updateTextBlockFromText(TextBlock *block)
Definition: codeeditor.cpp:952
TextBlock * m_textBlockToPaste
Definition: codeeditor.h:107
bool isParaEditable(int para)
Definition: codeeditor.cpp:1201
bool m_backspacePressed
Definition: codeeditor.h:103
bool isClickable
Definition: codeeditor.h:51