WSF
Editor.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef EDITOR_HPP
13#define EDITOR_HPP
14
15#include <string>
16
17#include <QPlainTextEdit>
18#include <QTextEdit>
19#include <QTimer>
20#include <QWidget>
21
22#include "Signals.hpp"
23
24class QTextCursor;
25class QTextDocument;
26class UtTextDocumentRange;
27class UtTextRange;
28
29#include "ViExport.hpp"
30
31namespace wizard
32{
33class Editor;
34class EditorDock;
35class EditorManager;
36class FindTextRequest;
37class Project;
38class ScriptDebugger;
39class TextSource;
40
41class EditorMargin : public QWidget
42{
43public:
44 explicit EditorMargin(Editor* aP);
45
46 void paintEvent(QPaintEvent*) override;
47
48 QSize sizeHint() const override { return QSize(30, 0); }
49 void mouseMoveEvent(QMouseEvent* e) override;
50 void mousePressEvent(QMouseEvent* e) override;
51 void leaveEvent(QEvent*) override;
52 void contextMenuEvent(QContextMenuEvent*) override;
54};
55
56class VI_EXPORT Editor : public QPlainTextEdit
57{
58public:
59 friend class EditorMargin;
60
61 Editor(QWidget* aParent, Project* aProject, TextSource* aTextSource, EditorManager* aManagerPtr);
62 ~Editor() override;
63
64 void Initialize();
65
66 void PrintFile();
67 void DeleteLine();
68 virtual void Paste();
69 void FindNextAction();
70 void FindPreviousAction();
71 void GoToLineAction();
72 virtual void LoadSettings();
73
74 bool ReplaceFoundText();
75 void Replace(const UtTextRange& aRange, const std::string aText);
76 std::string GetSelectedText();
77 bool SearchNext(const FindTextRequest& aFindRequest, QTextCursor* aCursorPtr = nullptr);
78 bool SearchNextNoWrap(const FindTextRequest& aFindRequest,
79 QTextCursor* aCursorPtr = nullptr,
80 int aLowerBound = -1,
81 int aUpperBound = -1);
82 bool SearchPrevious(const FindTextRequest& aFindRequest);
83 bool GetSelectionRange(UtTextDocumentRange& aRange);
84 void SetSelection(const UtTextRange& aRange);
85
86 void GetCurrentPosition(size_t& aOffset, size_t& aLine, size_t& aColumn);
87 std::string GetLineText(const size_t& aLine);
88 bool TextIsSelected();
89
90 void GetLineColumn(const size_t& aOffset, size_t& aLine, size_t& aColumn);
91 QPoint GetPoint(const size_t aOffset);
92 size_t GetOffset(const size_t aLine, const size_t aColumn);
93 int GetLineHeight(const int aLine);
94 TextSource* GetSource() { return mSourcePtr; }
95 Project* GetProject() { return mProjectPtr; }
96 size_t GetPosition(size_t aLine, size_t aColumn);
97 size_t GetPosition(const QPoint& aPoint);
98
99 std::string RangeText(size_t aStart, size_t aEnd);
100 void RequestCloseAction();
101
102 virtual void BeginNonUserAction() { ++mNonUserAction; }
103 virtual void EndNonUserAction() { --mNonUserAction; }
104 virtual bool ExecutingNonUserAction() { return 0 != mNonUserAction; }
105 virtual void ReloadComplete() {}
106
107 void RecordCurrentLocation(bool aForceNewEntry = true);
108 void GoToLine(size_t aLine);
109 void GoToRange(const UtTextRange& aRange);
110
111 void CopyLine();
112 void CutLine();
113
114 QString ToPlainText();
115 static std::string ToAscii(const QString& aText);
116
117 virtual void UpdateStyle() {}
118 static void UpdateStyleFromArray(const QVector<QTextCharFormat>& aFormatChanges,
119 const QTextBlock& firstBlk,
120 int aLastBlockNumber,
121 int startPos,
122 int endPos);
123
124 void SetGlobalReadOnly(bool aIsGlobalReadOnly);
125
126 void Unindent();
127 void Indent();
128 void SetManager(EditorManager* aManagerPtr);
129 virtual int MarginWidth();
130 int LineNumberWidth();
131
132 void BuildTitleBarMenu(QMenu& aMenu);
133
134 bool AcceptsClose();
135
136 QString GetShortName(bool aTrim = true) const;
137
138 // This will split a string into a string list that
139 // 1. records white space
140 // 2. separates comment blocks
141 // 3. has identifiable executable tokens by using Empty
142 static QStringList Split(const QString& aStr);
143
144 // Looks at a token string list created by Split and starting from aStart (inclusive) finds the next
145 // useful data token, and returns its index.
146 static int FindNextValidToken(const QStringList& aList, int aStart);
147
148 void mousePressEvent(QMouseEvent* aEvent) override;
149
152 const EditorDock* GetDock() const noexcept;
155 EditorDock* GetDock() noexcept;
156
157public slots:
158 void DebugRunStateChange(wizard::ScriptDebugger* aDebuggerPtr, bool aIsRunning);
159 void TextModified();
160
161protected:
162 void keyPressEvent(QKeyEvent* e) override;
163 EditorManager* Manager() { return mManagerPtr; }
164 bool FoldingEnabled() { return mFoldingEnabled; }
165 void RedrawMargin();
166 QTimer& DeferUpdateTimer() { return mDeferredUpdateSelectionsTimer; }
167 EditorMargin* Margin() { return mMarginWidget; }
168 virtual void PaintMargin(QPaintEvent* event);
169 virtual void OnCursorPositionChanged();
170 void GetCursorPoint(int& aX, int& aY, int& aLineHeight);
171 virtual void OnUpdateRequest(const QRect&, int);
172 virtual void DocContentsChange(int aFrom, int aCharsRemoves, int aCharsAdded);
173 void AddCurrentLineSelection(QList<QTextEdit::ExtraSelection>& aSelections);
174 bool event(QEvent* e) override;
175 void UpdateMarginGeometry();
176
177 static const int cSYMBOL_MARGIN_WIDTH = 16;
178 void focusInEvent(QFocusEvent* e) override;
179
180private:
181 virtual void UpdateAutoComplete() {}
182
183
184 void EnsureCurrentLineVisible();
185
186 void UpdateMarginViewport();
187 void OnUndoAvailable(bool aAvailable);
188 void OnRedoAvailable(bool aAvailable);
189 void OnModificationChanged(bool aIsModified);
190 void OnTextChanged();
191
192 int SpaceFromIndent(int aIndentSize) const;
193 int LineSpaceFromIndent(int aIndentSize, size_t aLine) const;
194 bool SameWhitespaceOffset(size_t aFirstLine, size_t aLastLine, int aIndentSize) const;
195
196 virtual void UpdateExtraSelections();
197 void wheelEvent(QWheelEvent* e) override;
198 void resizeEvent(QResizeEvent* e) override;
199 void showEvent(QShowEvent* e) override;
200 void closeEvent(QCloseEvent* e) override;
201 virtual void marginMouseMoveEvent(QMouseEvent*) {}
202 virtual void marginLeaveEvent(QEvent*) {}
203 virtual void marginMousePressEvent(QMouseEvent* e) {}
204 virtual void marginContextMenuEvent(QContextMenuEvent*) {}
205
206 Project* mProjectPtr;
207 TextSource* mSourcePtr;
208
209 EditorManager* mManagerPtr;
210 bool mFoldingEnabled;
211 bool mUndoEnabled;
212 bool mRedoEnabled;
213 bool mGlobalReadOnly;
214 bool mSendModified;
215 bool mInitalized;
216 int mNonUserAction;
217 EditorMargin* mMarginWidget;
218
219 QTimer mDeferredUpdateSelectionsTimer;
220
221 UtCallbackHolder mCallbacks;
222};
223} // namespace wizard
224
225#endif // EDITOR_HPP
#define VI_EXPORT
Definition ViExport.hpp:38
A wkf::DockWidget containing a wizard::Editor.
Definition EditorDock.hpp:32
Definition EditorManager.hpp:41
void leaveEvent(QEvent *) override
Definition Editor.cpp:1327
void paintEvent(QPaintEvent *) override
Definition Editor.cpp:1316
QSize sizeHint() const override
Definition Editor.hpp:48
void contextMenuEvent(QContextMenuEvent *) override
Definition Editor.cpp:1336
void mouseMoveEvent(QMouseEvent *e) override
Definition Editor.cpp:1322
EditorMargin(Editor *aP)
Definition Editor.cpp:1309
void mousePressEvent(QMouseEvent *e) override
Definition Editor.cpp:1331
Editor * mParent
Definition Editor.hpp:53
Definition Editor.hpp:57
friend class EditorMargin
Definition Editor.hpp:59
bool GetSelectionRange(UtTextDocumentRange &aRange)
Definition Editor.cpp:622
Editor(QWidget *aParent, Project *aProject, TextSource *aTextSource, EditorManager *aManagerPtr)
Definition Editor.cpp:39
virtual void EndNonUserAction()
Definition Editor.hpp:103
bool ReplaceFoundText()
Definition Editor.cpp:484
int GetLineHeight(const int aLine)
Definition Editor.cpp:694
void SetSelection(const UtTextRange &aRange)
Definition Editor.cpp:638
EditorMargin * Margin()
Definition Editor.hpp:167
void Replace(const UtTextRange &aRange, const std::string aText)
Definition Editor.cpp:515
bool SearchNext(const FindTextRequest &aFindRequest, QTextCursor *aCursorPtr=nullptr)
Definition Editor.cpp:529
void GoToLineAction()
Definition Editor.cpp:460
bool SearchNextNoWrap(const FindTextRequest &aFindRequest, QTextCursor *aCursorPtr=nullptr, int aLowerBound=-1, int aUpperBound=-1)
Definition Editor.cpp:567
virtual void Paste()
Definition Editor.cpp:445
virtual void ReloadComplete()
Definition Editor.hpp:105
void GetCurrentPosition(size_t &aOffset, size_t &aLine, size_t &aColumn)
Definition Editor.cpp:658
bool FoldingEnabled()
Definition Editor.hpp:164
QTimer & DeferUpdateTimer()
Definition Editor.hpp:166
size_t GetOffset(const size_t aLine, const size_t aColumn)
Definition Editor.cpp:685
bool SearchPrevious(const FindTextRequest &aFindRequest)
Definition Editor.cpp:607
static const int cSYMBOL_MARGIN_WIDTH
Definition Editor.hpp:177
virtual void LoadSettings()
Definition Editor.cpp:475
TextSource * GetSource()
Definition Editor.hpp:94
virtual bool ExecutingNonUserAction()
Definition Editor.hpp:104
virtual void BeginNonUserAction()
Definition Editor.hpp:102
void focusInEvent(QFocusEvent *e) override
Definition Editor.cpp:993
void GetLineColumn(const size_t &aOffset, size_t &aLine, size_t &aColumn)
Definition Editor.cpp:670
void FindNextAction()
Definition Editor.cpp:450
std::string GetLineText(const size_t &aLine)
Definition Editor.cpp:665
std::string GetSelectedText()
Definition Editor.cpp:524
Project * GetProject()
Definition Editor.hpp:95
void DeleteLine()
Definition Editor.cpp:413
void PrintFile()
Definition Editor.cpp:401
void FindPreviousAction()
Definition Editor.cpp:455
EditorManager * Manager()
Definition Editor.hpp:163
virtual void UpdateStyle()
Definition Editor.hpp:117
void Initialize()
Definition Editor.cpp:394
bool TextIsSelected()
Definition Editor.cpp:1272
QPoint GetPoint(const size_t aOffset)
Definition Editor.cpp:678
Definition FindTextRequest.hpp:19
A WSF 'project'. Manages WSF sources files in a WSF project.
Definition Project.hpp:66
Definition ScriptDebugger.hpp:25
Definition TextSource.hpp:48
Definition Runner.hpp:22
Copyrights Multiple, All Rights Reserved