19#include "moc_qgscodeeditor.cpp"
31#include <QFontDatabase>
34#include <Qsci/qscistyle.h>
39#include "Qsci/qscilexer.h"
41QMap< QgsCodeEditorColorScheme::ColorRole, QString > QgsCodeEditor::sColorRoleToSettingsKey
82 : QsciScintilla( parent )
83 , mWidgetTitle( title )
88 if ( !parent && mWidgetTitle.isEmpty() )
90 setWindowTitle( QStringLiteral(
"Text Editor" ) );
94 setWindowTitle( mWidgetTitle );
100 mSoftHistory.append( QString() );
103 setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded );
105 SendScintilla( SCI_SETADDITIONALSELECTIONTYPING, 1 );
106 SendScintilla( SCI_SETMULTIPASTE, 1 );
107 SendScintilla( SCI_SETVIRTUALSPACEOPTIONS, SCVS_RECTANGULARSELECTION );
112 setAnnotationDisplay( QsciScintilla::AnnotationBoxed );
128 SendScintilla( QsciScintilla::SCI_SETHSCROLLBAR, 0 );
130 setWrapMode( QsciScintilla::WrapCharacter );
137 SendScintilla( QsciScintilla::SCI_SETHSCROLLBAR, 0 );
139 setWrapMode( QsciScintilla::WrapCharacter );
140 SendScintilla( QsciScintilla::SCI_EMPTYUNDOBUFFER );
145#if QSCINTILLA_VERSION < 0x020d03
146 installEventFilter(
this );
153#if QSCINTILLA_VERSION >= 0x020800 && QSCINTILLA_VERSION < 0x020900
154 if ( event->reason() != Qt::ActiveWindowFocusReason )
168 QFocusEvent newFocusEvent( QEvent::FocusOut, Qt::ActiveWindowFocusReason );
169 QsciScintilla::focusOutEvent( &newFocusEvent );
174 QsciScintilla::focusOutEvent( event );
183 if ( isListActive() )
185 QsciScintilla::keyPressEvent( event );
189 if ( event->key() == Qt::Key_Escape )
192 QWidget::keyPressEvent( event );
198 switch ( event->key() )
221 const bool ctrlModifier =
event->modifiers() & Qt::ControlModifier;
222 const bool altModifier =
event->modifiers() & Qt::AltModifier;
226 if ( !isReadOnly() && canReformat && ctrlModifier && altModifier && event->key() == Qt::Key_F )
235 if ( !isReadOnly() && canToggle && ctrlModifier && event->key() == Qt::Key_Colon )
242 QsciScintilla::keyPressEvent( event );
245 if ( !event->isAutoRepeat() )
258 QMenu *menu = createStandardContextMenu();
259 menu->setAttribute( Qt::WA_DeleteOnClose );
264 menu->addSeparator();
269 QAction *reformatAction =
new QAction( tr(
"Reformat Code" ), menu );
270 reformatAction->setShortcut( QStringLiteral(
"Ctrl+Alt+F" ) );
272 reformatAction->setEnabled( !isReadOnly() );
274 menu->addAction( reformatAction );
279 QAction *syntaxCheckAction =
new QAction( tr(
"Check Syntax" ), menu );
282 menu->addAction( syntaxCheckAction );
287 QAction *toggleCommentAction =
new QAction( tr(
"Toggle Comment" ), menu );
288 toggleCommentAction->setShortcut( QStringLiteral(
"Ctrl+:" ) );
290 toggleCommentAction->setEnabled( !isReadOnly() );
292 menu->addAction( toggleCommentAction );
297 menu->exec( mapToGlobal( event->pos() ) );
303 QMenu *menu =
new QMenu(
this );
304 QMenu *historySubMenu =
new QMenu( tr(
"Command History" ), menu );
310 menu->addMenu( historySubMenu );
311 menu->addSeparator();
313 QAction *copyAction = menu->addAction(
QgsApplication::getThemeIcon(
"mActionEditCopy.svg" ), tr(
"Copy" ),
this, &QgsCodeEditor::copy, QKeySequence::Copy );
314 QAction *pasteAction = menu->addAction(
QgsApplication::getThemeIcon(
"mActionEditPaste.svg" ), tr(
"Paste" ),
this, &QgsCodeEditor::paste, QKeySequence::Paste );
315 copyAction->setEnabled( hasSelectedText() );
316 pasteAction->setEnabled( !QApplication::clipboard()->text().isEmpty() );
320 menu->exec( mapToGlobal( event->pos() ) );
325 QsciScintilla::contextMenuEvent( event );
332#if QSCINTILLA_VERSION < 0x020d03
333 if ( watched ==
this && event->type() == QEvent::InputMethod )
342 return QsciScintilla::eventFilter( watched, event );
352 if ( mUseDefaultSettings )
353 return color( role );
355 if ( !mOverrideColors )
361 const QColor
color = mCustomColors.value( role );
368 if ( mUseDefaultSettings )
371 QFont font = QFontDatabase::systemFont( QFontDatabase::FixedFont );
374 if ( !mFontFamily.isEmpty() )
379 font.setPointSize( mFontSize );
383 font.setPointSize( QLabel().font().pointSize() );
387 font.setPointSize( mFontSize );
390 const int fontSize = settings.
value( QStringLiteral(
"qgis/stylesheet/fontPointSize" ), 10 ).toInt();
391 font.setPointSize( fontSize );
394 font.setBold(
false );
421 setCaretLineVisible(
false );
424 setMarginLineNumbers( 1,
true );
425 setMarginWidth( 1,
"00000" );
426 setMarginType( 1, QsciScintilla::MarginType::TextMarginRightJustified );
428 setEdgeMode( QsciScintilla::EdgeNone );
432void QgsCodeEditor::setSciWidget()
438 setCaretLineVisible(
true );
444 setBraceMatching( QsciScintilla::SloppyBraceMatch );
451 setFolding( QsciScintilla::NoFoldStyle );
463 setFoldMarginColors( foldColor, foldColor );
465 setAutoIndent(
true );
466 setIndentationWidth( 4 );
467 setTabIndents(
true );
468 setBackspaceUnindents(
true );
471 setAutoCompletionThreshold( 2 );
472 setAutoCompletionSource( QsciScintilla::AcsAPIs );
480 setWindowTitle( title );
500 return tr(
"Expression" );
504 return tr(
"JavaScript" );
508 return tr(
"Python" );
514 return tr(
"Batch" );
529 marginFont.setPointSize( 10 );
530 setMarginLineNumbers( 0,
true );
531 setMarginsFont( marginFont );
549 marginFont.setPointSize( 10 );
551 setMarginsFont( marginFont );
586void QgsCodeEditor::updateFolding()
593 setFolding( QsciScintilla::PlainFoldStyle );
597 setFolding( QsciScintilla::NoFoldStyle );
602bool QgsCodeEditor::readHistoryFile()
604 if ( mHistoryFilePath.isEmpty() || !QFile::exists( mHistoryFilePath ) )
607 QFile file( mHistoryFilePath );
608 if ( file.open( QIODevice::ReadOnly ) )
610 QTextStream stream( &file );
611#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
613 stream.setCodec(
"UTF-8" );
616 while ( !stream.atEnd() )
618 line = stream.readLine();
619 mHistory.append( line );
628void QgsCodeEditor::syncSoftHistory()
630 mSoftHistory = mHistory;
631 mSoftHistory.append( QString() );
632 mSoftHistoryIndex = mSoftHistory.length() - 1;
637 mSoftHistory[mSoftHistoryIndex] = text();
640void QgsCodeEditor::updateHistory(
const QStringList &commands,
bool skipSoftHistory )
642 if ( commands.size() > 1 )
644 mHistory.append( commands );
646 else if ( !commands.value( 0 ).isEmpty() )
648 const QString command = commands.value( 0 );
649 if ( mHistory.empty() || command != mHistory.constLast() )
650 mHistory.append( command );
653 if ( !skipSoftHistory )
674 QMessageBox::information(
this, title, message );
678 QMessageBox::warning(
this, title, message );
682 QMessageBox::critical(
this, title, message );
692 SendScintilla( QsciScintilla::SCI_MARGINSETTEXT,
static_cast< uintptr_t
>( 0 ), prompt.toUtf8().constData() );
703 mInterpreter = newInterpreter;
710 const int index = std::min( source.length(), target.length() );
716 int refDistanceMore = d0;
717 int refIndexMore = index;
718 if ( index < source.length() - 1 )
723 if ( newDistance <= refDistanceMore )
725 refDistanceMore = newDistance;
727 if ( refIndexMore == source.length() - 1 )
737 int refDistanceLess = d0;
738 int refIndexLess = index;
744 if ( newDistance <= refDistanceLess )
746 refDistanceLess = newDistance;
748 if ( refIndexLess == 0 )
758 if ( refDistanceMore < refDistanceLess )
770 const QString originalText = text();
773 if ( originalText == newText )
777 const int oldScrollValue = verticalScrollBar()->value();
782 removeSelectedText();
785 verticalScrollBar()->setValue( oldScrollValue );
808 updateHistory( { command } );
814 mInterpreter->
exec( command );
833 if ( !mHistoryFilePath.isEmpty() && QFile::exists( mHistoryFilePath ) )
835 QFile file( mHistoryFilePath );
836 file.open( QFile::WriteOnly | QFile::Truncate );
844 if ( mHistoryFilePath.isEmpty() )
847 QFile f( mHistoryFilePath );
848 if ( !f.open( QFile::WriteOnly | QIODevice::Truncate ) )
853 QTextStream ts( &f );
854#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
855 ts.setCodec(
"UTF-8" );
857 for (
const QString &command : std::as_const( mHistory ) )
859 ts << command +
'\n';
866 if ( mSoftHistoryIndex < mSoftHistory.length() - 1 && !mSoftHistory.isEmpty() )
868 mSoftHistoryIndex += 1;
869 setText( mSoftHistory[mSoftHistoryIndex] );
876 if ( mSoftHistoryIndex > 0 && !mSoftHistory.empty() )
878 mSoftHistoryIndex -= 1;
879 setText( mSoftHistory[mSoftHistoryIndex] );
887 dialog->setAttribute( Qt::WA_DeleteOnClose );
890 dialog->activateWindow();
896 mHistory.removeAt( index );
897 mSoftHistory.removeAt( index );
898 if ( index < mSoftHistoryIndex )
900 mSoftHistoryIndex -= 1;
901 if ( mSoftHistoryIndex < 0 )
902 mSoftHistoryIndex = mSoftHistory.length() - 1;
909 if ( hasSelectedText() )
911 replaceSelectedText( text );
916 getCursorPosition( &line, &index );
917 insertAt( text, line, index );
918 setCursorPosition( line, index + text.length() );
927 const QPalette
pal = qApp->palette();
932 return pal.color( QPalette::Highlight );
934 return pal.color( QPalette::HighlightedText );
939 else if ( theme.isEmpty() )
944 static const QMap< QgsCodeEditorColorScheme::ColorRole, QString > sColorRoleToIniKey
989 return scheme.
color( role );
995 if ( !settings.
value( QStringLiteral(
"codeEditor/overrideColors" ),
false,
QgsSettings::Gui ).toBool() )
997 const QString theme = settings.
value( QStringLiteral(
"codeEditor/colorScheme" ), QString(),
QgsSettings::Gui ).toString();
1002 const QString
color = settings.
value( QStringLiteral(
"codeEditor/%1" ).arg( sColorRoleToSettingsKey.value( role ) ), QString(),
QgsSettings::Gui ).toString();
1010 if (
color.isValid() )
1016 settings.
remove( QStringLiteral(
"codeEditor/%1" ).arg( sColorRoleToSettingsKey.value( role ) ),
QgsSettings::Gui );
1023 return font.fixedPitch();
1028 QFont font = QFontDatabase::systemFont( QFontDatabase::FixedFont );
1031 if ( !settings.
value( QStringLiteral(
"codeEditor/fontfamily" ), QString(),
QgsSettings::Gui ).toString().isEmpty() )
1034 const int fontSize = settings.
value( QStringLiteral(
"codeEditor/fontsize" ), 0,
QgsSettings::Gui ).toInt();
1038 font.setPointSize( fontSize );
1042 font.setPointSize( QLabel().font().pointSize() );
1046 font.setPointSize( fontSize );
1049 const int fontSize = settings.
value( QStringLiteral(
"qgis/stylesheet/fontPointSize" ), 10 ).toInt();
1050 font.setPointSize( fontSize );
1053 font.setBold(
false );
1060 mUseDefaultSettings =
false;
1061 mOverrideColors = !customColors.isEmpty();
1062 mColorScheme = scheme;
1063 mCustomColors = customColors;
1064 mFontFamily = fontFamily;
1065 mFontSize = fontSize;
1074 markerAdd( lineNumber, MARKER_NUMBER );
1076 font.setItalic(
true );
1077 const QsciStyle styleAnn = QsciStyle( -1, QStringLiteral(
"Annotation" ),
1082 annotate( lineNumber, warning, styleAnn );
1083 mWarningLines.push_back( lineNumber );
1088 for (
const int line : mWarningLines )
1090 markerDelete( line );
1091 clearAnnotations( line );
1094 mWarningLines.clear();
1101 getCursorPosition( &line, &index );
1102 return line == lines() - 1;
1107 mHistoryFilePath = path;
1113 setCursorPosition( 0, 0 );
1114 ensureCursorVisible();
1115 ensureLineVisible( 0 );
1123 const int endLine = lines() - 1;
1124 const int endLineLength = lineLength( endLine );
1125 setCursorPosition( endLine, endLineLength );
1126 ensureCursorVisible();
1127 ensureLineVisible( endLine );
1135 return static_cast<int>( SendScintilla( SCI_GETCURRENTPOS ) );
1141 lineIndexFromPosition( linearIndex, &line, &index );
1142 setCursorPosition( line, index );
1147 int startLine, startIndex, _;
1148 getSelection( &startLine, &startIndex, &_, &_ );
1149 if ( startLine == -1 )
1153 return positionFromLineIndex( startLine, startIndex );
1158 int endLine, endIndex, _;
1159 getSelection( &_, &_, &endLine, &endIndex );
1160 if ( endLine == -1 )
1164 return positionFromLineIndex( endLine, endIndex );
1169 int startLine, startIndex, endLine, endIndex;
1170 lineIndexFromPosition( start, &startLine, &startIndex );
1171 lineIndexFromPosition( end, &endLine, &endIndex );
1172 setSelection( startLine, startIndex, endLine, endIndex );
1187 if ( wrapMode() == WrapNone )
1199 if ( SendScintilla( SCI_WRAPCOUNT, line ) <= 1 )
1205 const long endLine = SendScintilla( SCI_GETLINEENDPOSITION, line );
1207 const long y = SendScintilla( SCI_POINTYFROMPOSITION, 0, endLine );
1209 return static_cast<int>( SendScintilla( SCI_POSITIONFROMPOINT, 0, y ) );
1216 if ( callTipsStyle() == CallTipsNone || lexer() ==
nullptr )
1221 QsciAbstractAPIs *apis = lexer()->apis();
1226 int pos, commas = 0;
1234 while ( ( ch = getCharacter( pos ) ) !=
'\0' )
1238 else if ( ch ==
')' )
1244 while ( ( ch = getCharacter( pos ) ) !=
'\0' )
1248 else if ( ch ==
'(' && --depth == 0 )
1252 else if ( ch ==
'(' )
1260 SendScintilla( SCI_CALLTIPCANCEL );
1266 int contextStart, lastWordStart;
1267 QStringList context = apiContext( pos, contextStart, lastWordStart );
1269 if ( context.isEmpty() )
1273 context << QString();
1275 QList<int> ctShifts;
1276 QStringList ctEntries = apis->callTips( context, commas, callTipsStyle(), ctShifts );
1278 int nbEntries = ctEntries.count();
1280 if ( nbEntries == 0 )
1283 const int maxNumberOfCallTips = callTipsVisible();
1286 if ( maxNumberOfCallTips > 0 && maxNumberOfCallTips < nbEntries )
1288 ctEntries = ctEntries.mid( 0, maxNumberOfCallTips );
1289 nbEntries = maxNumberOfCallTips;
1295 int nbShifts = ctShifts.count();
1297 if ( maxNumberOfCallTips < 0 && nbEntries > 1 )
1299 shift = ( nbShifts > 0 ? ctShifts.first() : 0 );
1301 ct.prepend(
'\002' );
1305 if ( nbShifts > nbEntries )
1306 nbShifts = nbEntries;
1311 for (
int i = 0; i < nbShifts; ++i )
1313 int sh = ctShifts[i];
1319 ct = ctEntries.join(
"\n" );
1322 QByteArray ctBa = ct.toLatin1();
1323 const char *cts = ctBa.data();
1327 if ( currentWrapPosition != -1 )
1329 SendScintilla( SCI_CALLTIPSHOW, currentWrapPosition, cts );
1337 int ctmin =
static_cast<int>( SendScintilla( SCI_POSITIONFROMLINE, SendScintilla( SCI_LINEFROMPOSITION, ct ) ) );
1338 if ( lastWordStart - shift < ctmin )
1339 lastWordStart = ctmin;
1343 lineIndexFromPosition( lastWordStart, &line, &index );
1344 SendScintilla( SCI_CALLTIPSHOW, positionFromLineIndex( line, index ), cts );
1348 if ( nbEntries > 1 )
1355 astart = strchr( cts,
'(' );
1357 for ( astart = strchr( cts,
',' ); astart && --commas > 0; astart = strchr( astart + 1,
',' ) )
1371 for ( aend = astart; *aend; ++aend )
1375 if ( ch ==
',' && depth == 0 )
1377 else if ( ch ==
'(' )
1379 else if ( ch ==
')' )
1388 if ( astart != aend )
1389 SendScintilla( SCI_CALLTIPSETHLT, astart - cts, aend - cts );
1396char QgsCodeEditor::getCharacter(
int &pos )
const
1401 char ch =
static_cast<char>( SendScintilla( SCI_GETCHARAT, --pos ) );
1404 if ( ch ==
'\n' || ch ==
'\r' )
MessageLevel
Level for messages This will be used both for message log and message bar in application.
@ Warning
Warning message.
@ Critical
Critical/error message.
@ Info
Information message.
@ Success
Used for reporting a successful operation.
@ CheckSyntax
Language supports syntax checking.
@ Reformat
Language supports automatic code reformatting.
@ ToggleComment
Language supports comment toggling.
ScriptLanguage
Scripting languages.
@ QgisExpression
QGIS expressions.
@ Batch
Windows batch files.
@ Unknown
Unknown/other language.
QFlags< ScriptLanguageCapability > ScriptLanguageCapabilities
Script language capabilities.
static QPixmap getThemePixmap(const QString &name, const QColor &foreColor=QColor(), const QColor &backColor=QColor(), int size=16)
Helper to get a theme icon as a pixmap.
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
static QHash< QString, QString > uiThemes()
All themes found in ~/.qgis3/themes folder.
static QString themeName()
Set the active theme to the specified theme.
QgsCodeEditorColorScheme scheme(const QString &id) const
Returns the color scheme with matching id.
Defines a color scheme for use in QgsCodeEditor widgets.
@ TripleSingleQuote
Triple single quote color.
@ CommentBlock
Comment block color.
@ QuotedOperator
Quoted operator color.
@ Decoration
Decoration color.
@ Identifier
Identifier color.
@ DoubleQuote
Double quote color.
@ QuotedIdentifier
Quoted identifier color.
@ SelectionForeground
Selection foreground color.
@ CommentLine
Line comment color.
@ FoldIconForeground
Fold icon foreground color.
@ MarginForeground
Margin foreground color.
@ ErrorBackground
Error background color.
@ MatchedBraceBackground
Matched brace background color.
@ Default
Default text color.
@ SearchMatchBackground
Background color for search matches.
@ CaretLine
Caret line color.
@ IndentationGuide
Indentation guide line.
@ Background
Background color.
@ SingleQuote
Single quote color.
@ MarginBackground
Margin background color.
@ SelectionBackground
Selection background color.
@ MatchedBraceForeground
Matched brace foreground color.
@ Operator
Operator color.
@ TripleDoubleQuote
Triple double quote color.
@ FoldIconHalo
Fold icon halo color.
QColor color(ColorRole role) const
Returns the color to use in the editor for the specified role.
A dialog for displaying and managing command history for a QgsCodeEditor widget.
bool eventFilter(QObject *watched, QEvent *event) override
void sessionHistoryCleared()
Emitted when the history of commands run in the current session is cleared.
void showHistory()
Shows the command history dialog.
int wrapPosition(int line=-1)
Returns the linear position of the start of the last wrapped part for the specified line,...
void setCustomAppearance(const QString &scheme=QString(), const QMap< QgsCodeEditorColorScheme::ColorRole, QColor > &customColors=QMap< QgsCodeEditorColorScheme::ColorRole, QColor >(), const QString &fontFamily=QString(), int fontSize=0)
Sets a custom appearance for the widget, disconnecting it from using the standard appearance taken fr...
@ OutputDisplay
Read only mode for display of command outputs.
@ ScriptEditor
Standard mode, allows for display and edit of entire scripts.
@ CommandInput
Command input mode.
void reformatCode()
Applies code reformatting to the editor.
virtual void toggleComment()
Toggle comment for the selected text.
void contextMenuEvent(QContextMenuEvent *event) override
void clearPersistentHistory()
Clears the entire persistent history of commands run in the editor.
void removeHistoryCommand(int index)
Removes the command at the specified index from the history of the code editor.
static void setColor(QgsCodeEditorColorScheme::ColorRole role, const QColor &color)
Sets the color to use in the editor for the specified role.
void setHistoryFilePath(const QString &path)
Sets the file path to use for recording and retrieving previously executed commands.
void setLinearSelection(int start, int end)
Convenience function to set the selection using linear indexes.
QStringList history() const
Returns the list of commands previously executed in the editor.
static constexpr int SEARCH_RESULT_INDICATOR
Indicator index for search results.
void keyPressEvent(QKeyEvent *event) override
virtual void moveCursorToStart()
Moves the cursor to the start of the document and scrolls to ensure it is visible.
virtual void populateContextMenu(QMenu *menu)
Called when the context menu for the widget is about to be shown, after it has been fully populated w...
QFlags< Flag > Flags
Flags controlling behavior of code editor.
void persistentHistoryCleared()
Emitted when the persistent history of commands run in the editor is cleared.
virtual void callTip() override
void runCommand(const QString &command, bool skipHistory=false)
Runs a command in the editor.
void setFoldingVisible(bool folding)
Set whether the folding controls are visible in the editor.
virtual Qgis::ScriptLanguageCapabilities languageCapabilities() const
Returns the associated scripting language capabilities.
void setInterpreter(QgsCodeInterpreter *newInterpreter)
Sets an attached code interpreter for executing commands when the editor is in the QgsCodeEditor::Mod...
@ FoldingControls
Folding controls.
@ ErrorIndicators
Error indicators.
@ LineNumbers
Line numbers.
void runPostLexerConfigurationTasks()
Performs tasks which must be run after a lexer has been set for the widget.
virtual void showMessage(const QString &title, const QString &message, Qgis::MessageLevel level)
Shows a user facing message (eg a warning message).
int selectionEnd() const
Convenience function to return the end of the selection as a linear index Contrary to the getSelectio...
virtual void initializeLexer()
Called when the dialect specific code lexer needs to be initialized (or reinitialized).
int linearPosition() const
Convenience function to return the cursor position as a linear index.
void setTitle(const QString &title)
Set the widget title.
void setLinearPosition(int position)
Convenience function to set the cursor position as a linear index.
QgsCodeEditor(QWidget *parent=nullptr, const QString &title=QString(), bool folding=false, bool margin=false, QgsCodeEditor::Flags flags=QgsCodeEditor::Flags(), QgsCodeEditor::Mode mode=QgsCodeEditor::Mode::ScriptEditor)
Construct a new code editor.
void clearWarnings()
Clears all warning messages from the editor.
static QFont getMonospaceFont()
Returns the monospaced font to use for code editors.
void showNextCommand()
Shows the next command from the session in the editor.
void focusOutEvent(QFocusEvent *event) override
@ CodeFolding
Indicates that code folding should be enabled for the editor.
@ ImmediatelyUpdateHistory
Indicates that the history file should be immediately updated whenever a command is executed,...
bool isCursorOnLastLine() const
Returns true if the cursor is on the last line of the document.
static bool isFixedPitch(const QFont &font)
Returns true if a font is a fixed pitch font.
void updateSoftHistory()
Updates the soft history by storing the current editor text in the history.
void clearSessionHistory()
Clears the history of commands run in the current session.
void insertText(const QString &text)
Insert text at cursor position, or replace any selected text if user has made a selection.
bool writeHistoryFile()
Stores the commands executed in the editor to the persistent history file.
virtual void moveCursorToEnd()
Moves the cursor to the end of the document and scrolls to ensure it is visible.
static QString languageToString(Qgis::ScriptLanguage language)
Returns a user-friendly, translated name of the specified script language.
void setLineNumbersVisible(bool visible)
Sets whether line numbers should be visible in the editor.
virtual Qgis::ScriptLanguage language() const
Returns the associated scripting language.
QFont lexerFont() const
Returns the font to use in the lexer.
virtual QString reformatCodeString(const QString &string)
Applies code reformatting to a string and returns the result.
QgsCodeInterpreter * interpreter() const
Returns the attached code interpreter, or nullptr if not set.
bool lineNumbersVisible() const
Returns whether line numbers are visible in the editor.
QColor lexerColor(QgsCodeEditorColorScheme::ColorRole role) const
Returns the color to use in the lexer for the specified role.
bool foldingVisible()
Returns true if the folding controls are visible in the editor.
void showPreviousCommand()
Shows the previous command from the session in the editor.
Q_DECL_DEPRECATED void setMarginVisible(bool margin)
Set margin visible state.
void updatePrompt()
Triggers an update of the interactive prompt part of the editor.
static QColor defaultColor(QgsCodeEditorColorScheme::ColorRole role, const QString &theme=QString())
Returns the default color for the specified role.
int selectionStart() const
Convenience function to return the start of the selection as a linear index Contrary to the getSelect...
void addWarning(int lineNumber, const QString &warning)
Adds a warning message and indicator to the specified a lineNumber.
virtual bool checkSyntax()
Applies syntax checking to the editor.
static QColor color(QgsCodeEditorColorScheme::ColorRole role)
Returns the color to use in the editor for the specified role.
An interface for code interpreters.
virtual int execCommandImpl(const QString &command)=0
Pure virtual method for executing commands in the interpreter.
virtual int currentState() const
Returns the current interpreter state.
virtual QString promptForState(int state) const =0
Returns the interactive prompt string to use for the interpreter, given a state.
int exec(const QString &command)
Executes a command in the interpreter.
virtual ~QgsCodeInterpreter()
static void setFontFamily(QFont &font, const QString &family)
Sets the family for a font object.
void optionsChanged()
This signal is emitted whenever the application options have been changed.
static QgsGui * instance()
Returns a pointer to the singleton instance.
static QgsCodeEditorColorSchemeRegistry * codeEditorColorSchemeRegistry()
Returns the global code editor color scheme registry, used for registering the color schemes for QgsC...
This class is a composition of two QSettings instances:
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
void remove(const QString &key, QgsSettings::Section section=QgsSettings::NoSection)
Removes the setting key and any sub-settings of key in a section.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
static int levenshteinDistance(const QString &string1, const QString &string2, bool caseSensitive=false)
Returns the Levenshtein edit distance between two strings.
static QColor decodeColor(const QString &str)
#define BUILTIN_UNREACHABLE
int findMinimalDistanceIndex(const QString &source, const QString &target)