23 #ifndef SCRIPTEDITORWIDGET_H
24 #define SCRIPTEDITORWIDGET_H
26 #include "../models/breakPointModel.h"
28 #include "abstractCodeEditorWidget.h"
29 #include "../codeEditor/panels/foldingPanel.h"
30 #include "../codeEditor/panels/checkerBookmarkPanel.h"
31 #include "../codeEditor/panels/breakpointPanel.h"
32 #include "../codeEditor/modes/errorLineHighlight.h"
33 #include "../codeEditor/modes/pyGotoAssignment.h"
34 #include "../codeEditor/modes/pyDocstringGenerator.h"
35 #include "../codeEditor/modes/wordHoverTooltip.h"
36 #include "../codeEditor/panels/lineNumber.h"
37 #include "../codeEditor/codeCheckerItem.h"
38 #include "../codeEditor/pyCodeFormatter.h"
40 #include "../global.h"
42 #include <qfilesystemwatcher.h>
47 #include <qmetaobject.h>
48 #include <qsharedpointer.h>
49 #include <qregularexpression.h>
50 #include "../models/outlineItem.h"
51 #include "../models/bookmarkModel.h"
53 #include <QtPrintSupport/qprinter.h>
70 QList<int> bookmarkLines;
87 Q_DECLARE_METATYPE(QList<
ito::ScriptEditorStorage>)
88 Q_DECLARE_METATYPE(
ito::GoBackNavigationItem)
89 Q_DECLARE_METATYPE(QList<
ito::GoBackNavigationItem>)
95 class ScriptEditorWidget :
public AbstractCodeEditorWidget
100 ScriptEditorWidget(
BookmarkModel *bookmarkModel, QWidget* parent =
nullptr);
101 ~ScriptEditorWidget();
103 RetVal saveFile(
bool askFirst =
true);
104 RetVal saveAsFile(
bool askFirst =
true);
106 RetVal openFile(QString file,
bool ignorePresentDocument =
false);
108 bool keepIndentationOnPaste()
const;
109 void setKeepIndentationOnPaste(
bool value);
111 inline QString getFilename()
const {
return m_filename; }
112 inline bool hasNoFilename()
const {
return m_filename.isNull(); }
113 inline int getUID()
const {
return m_uid; }
114 bool getCanCopy()
const;
115 inline QString getUntitledName()
const {
return tr(
"Untitled%1").arg(m_uid); }
117 RetVal setCursorPosAndEnsureVisible(
const int line,
bool errorMessageClick =
false,
bool showSelectedCallstackLine =
false);
118 RetVal showLineAndHighlightWord(
const int line,
const QString &highlightedText, Qt::CaseSensitivity caseSensitivity = Qt::CaseInsensitive);
120 void removeCurrentCallstackLine();
122 const ScriptEditorStorage saveState()
const;
123 RetVal restoreState(
const ScriptEditorStorage &data);
125 RetVal toggleBookmark(
int line);
127 virtual bool removeTextBlockUserData(TextBlockUserData* userData);
130 void reportCurrentCursorAsGoBackNavigationItem(
const QString &reason,
int UIDFilter = -1);
133 void startUndoRedo(
bool unundoNotRedo);
135 QSharedPointer<OutlineItem> parseOutline(
bool forceParsing =
false)
const;
139 bool currentLineCanHaveDocstring()
const;
141 static QString filenameFromUID(
int UID,
bool &found);
145 bool canInsertFromMimeData(
const QMimeData *source)
const;
146 void insertFromMimeData(
const QMimeData *source);
148 void dropEvent(QDropEvent *event);
149 void dragEnterEvent(QDragEnterEvent *event);
150 void dragLeaveEvent(QDragLeaveEvent *event);
151 virtual void loadSettings();
152 bool event(QEvent *event);
153 void mouseReleaseEvent(QMouseEvent *event);
154 void mousePressEvent(QMouseEvent *event);
155 void keyPressEvent(QKeyEvent *event);
157 virtual void contextMenuAboutToShow(
int contextMenuLine);
159 void reportGoBackNavigationCursorMovement(
const CursorPosition &cursor,
const QString &origin)
const;
161 void replaceSelectionAndKeepBookmarksAndBreakpoints(QTextCursor &cursor,
const QString &newString);
162 QVector<int> compareTexts(
const QString &oldText,
const QString &newText);
172 markerBookmarkAndPyBug = markerBookmark | markerPyBug
178 bool lineAcceptsBPs(
int line);
180 RetVal changeFilename(
const QString &newFilename);
182 QFileSystemWatcher *m_pFileSysWatcher;
185 bool m_codeCheckerEnabled;
186 int m_codeCheckerInterval;
187 QTimer *m_codeCheckerCallTimer;
189 Qt::CaseSensitivity m_filenameCaseSensitivity;
192 std::map<QString,QAction*> m_editorMenuActions;
198 bool m_cursorJumpLastAction;
199 CursorPosition m_cursorBeforeMouseClick;
202 bool m_pythonExecutable;
208 bool m_keepIndentationOnPaste;
209 int m_textBlockLineIdxAboutToBeDeleted;
212 QSharedPointer<PyCodeFormatter> m_pyCodeFormatter;
213 QString m_autoCodeFormatCmd;
215 QSharedPointer<FoldingPanel> m_foldingPanel;
216 QSharedPointer<CheckerBookmarkPanel> m_checkerBookmarkPanel;
217 QSharedPointer<BreakpointPanel> m_breakpointPanel;
218 QSharedPointer<ErrorLineHighlighterMode> m_errorLineHighlighterMode;
219 QSharedPointer<LineNumberPanel> m_lineNumberPanel;
220 QSharedPointer<PyGotoAssignmentMode> m_pyGotoAssignmentMode;
221 QSharedPointer<WordHoverTooltipMode> m_wordHoverTooltipMode;
222 QSharedPointer<PyDocstringGeneratorMode> m_pyDocstringGeneratorMode;
224 static const QString lineBreak;
225 static int currentMaximumUID;
226 static CursorPosition currentGlobalEditorCursorPos;
227 static QHash<int, ScriptEditorWidget*> editorByUID;
230 QTimer *m_outlineTimer;
231 bool m_outlineTimerEnabled;
232 int m_currentLineIndex;
233 mutable QSharedPointer<OutlineItem> m_rootOutlineItem;
234 mutable bool m_outlineDirty;
235 QRegularExpression m_regExpClass;
236 QRegularExpression m_regExpDecorator;
237 QRegularExpression m_regExpMethodStart;
238 QRegularExpression m_regExpMethod;
240 void parseOutlineRecursive(QSharedPointer<OutlineItem> &parent)
const;
241 QSharedPointer<OutlineItem> checkBlockForOutlineItem(
int startLineIdx,
int endLineIdx)
const;
244 void pythonRunFile(QString filename);
245 void pythonRunSelection(QString selectionText);
246 void pythonDebugFile(QString filename);
247 void closeRequest(ScriptEditorWidget* sew,
bool ignoreModifications);
248 void marginChanged();
249 void outlineModelChanged(ScriptEditorWidget *editor, QSharedPointer<OutlineItem> rootItem);
250 void addGoBackNavigationItem(
const GoBackNavigationItem &item);
251 void tabChangeRequested();
252 void findSymbolsShowRequested();
255 void triggerCodeChecker();
256 void codeCheckResultsReady(QList<ito::CodeCheckerItem> codeCheckerItems);
257 void codeCheckerResultsChanged(
const QList<ito::CodeCheckerItem> &codeCheckerItems);
265 void menuUncomment();
268 void menuUnfoldAll();
269 void menuFoldUnfoldToplevel();
270 void menuFoldUnfoldAll();
272 void menuRunScript();
273 void menuRunSelection();
274 void menuDebugScript();
275 void menuStopScript();
277 void menuPyCodeFormatting();
278 void menuGenerateDocstring();
279 void menuInsertCodec();
281 void pythonStateChanged(tPythonTransitions pyTransition);
282 void pythonDebugPositionChanged(QString filename,
int lineno);
284 void breakPointAdd(BreakPointItem bp,
int row);
285 void breakPointDelete(QString filename,
int lineIdx,
int pyBpNumber);
286 void breakPointChange(BreakPointItem oldBp, BreakPointItem newBp);
288 void updateSyntaxCheck();
293 void toggleBookmarkRequested(
int line);
294 void onBookmarkAdded(
const BookmarkItem &item);
295 void onBookmarkDeleted(
const BookmarkItem &item);
297 RetVal toggleBreakpoint(
int line);
298 RetVal toggleEnableBreakpoint(
int line);
299 RetVal editBreakpoint(
int line);
300 RetVal clearAllBreakpoints();
301 RetVal gotoNextBreakPoint();
302 RetVal gotoPreviousBreakPoint();
304 void gotoAssignmentOutOfDoc(PyAssignment ref);
306 void copyAvailable(
const bool yes);
308 void outlineTimerElapsed();
310 void nrOfLinesChanged();
312 void fileSysWatcherFileChanged(
const QString &path);
313 void fileSysWatcherFileChangedStep2(
const QString &path);
314 void printPreviewRequested(QPrinter *printer);
316 void dumpFoldsToConsole(
bool);
317 void onCursorPositionChanged();
318 void onTextChanged();
319 void tabChangeRequest();
321 void pyCodeFormatterDone(
bool success, QString code);
model for management of all bookmarks. This model will be displayed by a viewer-widget in the main wi...
model for management of all breakpoints. This model will be displayed by a viewer-widget in the main ...
Definition: scriptEditorWidget.h:66
Definition: apiFunctionsGraph.cpp:39
Definition: scriptEditorWidget.h:74