19#include "moc_qgscodeeditor.cpp"
32#include <QFontDatabase>
35#include <Qsci/qscistyle.h>
40#include "Qsci/qscilexer.h"
48QMap< QgsCodeEditorColorScheme::ColorRole, QString > QgsCodeEditor::sColorRoleToSettingsKey
89 : QsciScintilla( parent )
90 , mWidgetTitle( title )
95 if ( !parent && mWidgetTitle.isEmpty() )
97 setWindowTitle( QStringLiteral(
"Text Editor" ) );
101 setWindowTitle( mWidgetTitle );
107 mSoftHistory.append( QString() );
110 setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded );
112 SendScintilla( SCI_SETADDITIONALSELECTIONTYPING, 1 );
113 SendScintilla( SCI_SETMULTIPASTE, 1 );
114 SendScintilla( SCI_SETVIRTUALSPACEOPTIONS, SCVS_RECTANGULARSELECTION );
119 setAnnotationDisplay( QsciScintilla::AnnotationBoxed );
135 SendScintilla( QsciScintilla::SCI_SETHSCROLLBAR, 0 );
137 setWrapMode( QsciScintilla::WrapCharacter );
144 SendScintilla( QsciScintilla::SCI_SETHSCROLLBAR, 0 );
146 setWrapMode( QsciScintilla::WrapCharacter );
147 SendScintilla( QsciScintilla::SCI_EMPTYUNDOBUFFER );
152#if QSCINTILLA_VERSION < 0x020d03
153 installEventFilter(
this );
160#if QSCINTILLA_VERSION >= 0x020800 && QSCINTILLA_VERSION < 0x020900
161 if ( event->reason() != Qt::ActiveWindowFocusReason )
175 QFocusEvent newFocusEvent( QEvent::FocusOut, Qt::ActiveWindowFocusReason );
176 QsciScintilla::focusOutEvent( &newFocusEvent );
181 QsciScintilla::focusOutEvent( event );
190 if ( isListActive() )
192 QsciScintilla::keyPressEvent( event );
196 if ( event->key() == Qt::Key_Escape )
199 QWidget::keyPressEvent( event );
203 if ( event->key() == Qt::Key_F1 )
207 QString text = selectedText();
212 text = wordAtPoint( mapFromGlobal( QCursor::pos() ) );
216 if ( text.isEmpty() )
219 getCursorPosition( &line, &index );
220 text = wordAtLineIndex( line, index );
229 switch ( event->key() )
252 const bool ctrlModifier =
event->modifiers() & Qt::ControlModifier;
253 const bool altModifier =
event->modifiers() & Qt::AltModifier;
257 if ( !isReadOnly() && canReformat && ctrlModifier && altModifier && event->key() == Qt::Key_F )
266 if ( !isReadOnly() && canToggle && ctrlModifier && event->key() == Qt::Key_Colon )
273 QsciScintilla::keyPressEvent( event );
276 if ( !event->isAutoRepeat() )
289 QMenu *menu = createStandardContextMenu();
290 menu->setAttribute( Qt::WA_DeleteOnClose );
295 menu->addSeparator();
300 QAction *reformatAction =
new QAction( tr(
"Reformat Code" ), menu );
301 reformatAction->setShortcut( QStringLiteral(
"Ctrl+Alt+F" ) );
303 reformatAction->setEnabled( !isReadOnly() );
305 menu->addAction( reformatAction );
310 QAction *syntaxCheckAction =
new QAction( tr(
"Check Syntax" ), menu );
313 menu->addAction( syntaxCheckAction );
318 QAction *toggleCommentAction =
new QAction( tr(
"Toggle Comment" ), menu );
319 toggleCommentAction->setShortcut( QStringLiteral(
"Ctrl+:" ) );
321 toggleCommentAction->setEnabled( !isReadOnly() );
323 menu->addAction( toggleCommentAction );
328 menu->exec( mapToGlobal( event->pos() ) );
334 QMenu *menu =
new QMenu(
this );
335 QMenu *historySubMenu =
new QMenu( tr(
"Command History" ), menu );
341 menu->addMenu( historySubMenu );
342 menu->addSeparator();
344 QAction *copyAction = menu->addAction(
QgsApplication::getThemeIcon(
"mActionEditCopy.svg" ), tr(
"Copy" ),
this, &QgsCodeEditor::copy, QKeySequence::Copy );
345 QAction *pasteAction = menu->addAction(
QgsApplication::getThemeIcon(
"mActionEditPaste.svg" ), tr(
"Paste" ),
this, &QgsCodeEditor::paste, QKeySequence::Paste );
346 copyAction->setEnabled( hasSelectedText() );
347 pasteAction->setEnabled( !QApplication::clipboard()->text().isEmpty() );
351 menu->exec( mapToGlobal( event->pos() ) );
356 QsciScintilla::contextMenuEvent( event );
363#if QSCINTILLA_VERSION < 0x020d03
364 if ( watched ==
this && event->type() == QEvent::InputMethod )
373 return QsciScintilla::eventFilter( watched, event );
383 if ( mUseDefaultSettings )
384 return color( role );
386 if ( !mOverrideColors )
392 const QColor
color = mCustomColors.value( role );
399 if ( mUseDefaultSettings )
402 QFont font = QFontDatabase::systemFont( QFontDatabase::FixedFont );
405 if ( !mFontFamily.isEmpty() )
410 font.setPointSize( mFontSize );
414 font.setPointSize( QLabel().font().pointSize() );
418 font.setPointSize( mFontSize );
421 const int fontSize = settings.
value( QStringLiteral(
"qgis/stylesheet/fontPointSize" ), 10 ).toInt();
422 font.setPointSize( fontSize );
425 font.setBold(
false );
452 setCaretLineVisible(
false );
455 setMarginLineNumbers( 1,
true );
456 setMarginWidth( 1,
"00000" );
457 setMarginType( 1, QsciScintilla::MarginType::TextMarginRightJustified );
459 setEdgeMode( QsciScintilla::EdgeNone );
463void QgsCodeEditor::setSciWidget()
469 setCaretLineVisible(
true );
475 setBraceMatching( QsciScintilla::SloppyBraceMatch );
482 setFolding( QsciScintilla::NoFoldStyle );
494 setFoldMarginColors( foldColor, foldColor );
496 setAutoIndent(
true );
497 setIndentationWidth( 4 );
498 setTabIndents(
true );
499 setBackspaceUnindents(
true );
502 setAutoCompletionThreshold( 2 );
503 setAutoCompletionSource( QsciScintilla::AcsAPIs );
511 setWindowTitle( title );
531 return tr(
"Expression" );
535 return tr(
"JavaScript" );
539 return tr(
"Python" );
545 return tr(
"Batch" );
560 marginFont.setPointSize( 10 );
561 setMarginLineNumbers( 0,
true );
562 setMarginsFont( marginFont );
580 marginFont.setPointSize( 10 );
582 setMarginsFont( marginFont );
617void QgsCodeEditor::updateFolding()
624 setFolding( QsciScintilla::PlainFoldStyle );
628 setFolding( QsciScintilla::NoFoldStyle );
633bool QgsCodeEditor::readHistoryFile()
635 if ( mHistoryFilePath.isEmpty() || !QFile::exists( mHistoryFilePath ) )
638 QFile file( mHistoryFilePath );
639 if ( file.open( QIODevice::ReadOnly ) )
641 QTextStream stream( &file );
642#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
644 stream.setCodec(
"UTF-8" );
647 while ( !stream.atEnd() )
649 line = stream.readLine();
650 mHistory.append( line );
659void QgsCodeEditor::syncSoftHistory()
661 mSoftHistory = mHistory;
662 mSoftHistory.append( QString() );
663 mSoftHistoryIndex = mSoftHistory.length() - 1;
668 mSoftHistory[mSoftHistoryIndex] = text();
671void QgsCodeEditor::updateHistory(
const QStringList &commands,
bool skipSoftHistory )
673 if ( commands.size() > 1 )
675 mHistory.append( commands );
677 else if ( !commands.value( 0 ).isEmpty() )
679 const QString command = commands.value( 0 );
680 if ( mHistory.empty() || command != mHistory.constLast() )
681 mHistory.append( command );
684 if ( !skipSoftHistory )
705 QMessageBox::information(
this, title, message );
709 QMessageBox::warning(
this, title, message );
713 QMessageBox::critical(
this, title, message );
723 SendScintilla( QsciScintilla::SCI_MARGINSETTEXT,
static_cast< uintptr_t
>( 0 ), prompt.toUtf8().constData() );
734 mInterpreter = newInterpreter;
741 const int index = std::min( source.length(), target.length() );
747 int refDistanceMore = d0;
748 int refIndexMore = index;
749 if ( index < source.length() - 1 )
754 if ( newDistance <= refDistanceMore )
756 refDistanceMore = newDistance;
758 if ( refIndexMore == source.length() - 1 )
768 int refDistanceLess = d0;
769 int refIndexLess = index;
775 if ( newDistance <= refDistanceLess )
777 refDistanceLess = newDistance;
779 if ( refIndexLess == 0 )
789 if ( refDistanceMore < refDistanceLess )
801 const QString originalText = text();
804 if ( originalText == newText )
808 const int oldScrollValue = verticalScrollBar()->value();
813 removeSelectedText();
816 verticalScrollBar()->setValue( oldScrollValue );
839 updateHistory( { command } );
845 mInterpreter->
exec( command );
864 if ( !mHistoryFilePath.isEmpty() && QFile::exists( mHistoryFilePath ) )
866 QFile file( mHistoryFilePath );
867 file.open( QFile::WriteOnly | QFile::Truncate );
875 if ( mHistoryFilePath.isEmpty() )
878 QFile f( mHistoryFilePath );
879 if ( !f.open( QFile::WriteOnly | QIODevice::Truncate ) )
884 QTextStream ts( &f );
885#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
886 ts.setCodec(
"UTF-8" );
888 for (
const QString &command : std::as_const( mHistory ) )
890 ts << command +
'\n';
897 if ( mSoftHistoryIndex < mSoftHistory.length() - 1 && !mSoftHistory.isEmpty() )
899 mSoftHistoryIndex += 1;
900 setText( mSoftHistory[mSoftHistoryIndex] );
907 if ( mSoftHistoryIndex > 0 && !mSoftHistory.empty() )
909 mSoftHistoryIndex -= 1;
910 setText( mSoftHistory[mSoftHistoryIndex] );
918 dialog->setAttribute( Qt::WA_DeleteOnClose );
921 dialog->activateWindow();
927 mHistory.removeAt( index );
928 mSoftHistory.removeAt( index );
929 if ( index < mSoftHistoryIndex )
931 mSoftHistoryIndex -= 1;
932 if ( mSoftHistoryIndex < 0 )
933 mSoftHistoryIndex = mSoftHistory.length() - 1;
940 if ( hasSelectedText() )
942 replaceSelectedText( text );
947 getCursorPosition( &line, &index );
948 insertAt( text, line, index );
949 setCursorPosition( line, index + text.length() );
958 const QPalette
pal = qApp->palette();
963 return pal.color( QPalette::Highlight );
965 return pal.color( QPalette::HighlightedText );
970 else if ( theme.isEmpty() )
975 static const QMap< QgsCodeEditorColorScheme::ColorRole, QString > sColorRoleToIniKey
1020 return scheme.
color( role );
1026 if ( !settings.
value( QStringLiteral(
"codeEditor/overrideColors" ),
false,
QgsSettings::Gui ).toBool() )
1028 const QString theme = settings.
value( QStringLiteral(
"codeEditor/colorScheme" ), QString(),
QgsSettings::Gui ).toString();
1033 const QString
color = settings.
value( QStringLiteral(
"codeEditor/%1" ).arg( sColorRoleToSettingsKey.value( role ) ), QString(),
QgsSettings::Gui ).toString();
1041 if (
color.isValid() )
1047 settings.
remove( QStringLiteral(
"codeEditor/%1" ).arg( sColorRoleToSettingsKey.value( role ) ),
QgsSettings::Gui );
1054 return font.fixedPitch();
1059 QFont font = QFontDatabase::systemFont( QFontDatabase::FixedFont );
1062 if ( !settings.
value( QStringLiteral(
"codeEditor/fontfamily" ), QString(),
QgsSettings::Gui ).toString().isEmpty() )
1065 const int fontSize = settings.
value( QStringLiteral(
"codeEditor/fontsize" ), 0,
QgsSettings::Gui ).toInt();
1069 font.setPointSize( fontSize );
1073 font.setPointSize( QLabel().font().pointSize() );
1077 font.setPointSize( fontSize );
1080 const int fontSize = settings.
value( QStringLiteral(
"qgis/stylesheet/fontPointSize" ), 10 ).toInt();
1081 font.setPointSize( fontSize );
1084 font.setBold(
false );
1091 mUseDefaultSettings =
false;
1092 mOverrideColors = !customColors.isEmpty();
1093 mColorScheme = scheme;
1094 mCustomColors = customColors;
1095 mFontFamily = fontFamily;
1096 mFontSize = fontSize;
1105 markerAdd( lineNumber, MARKER_NUMBER );
1107 font.setItalic(
true );
1108 const QsciStyle styleAnn = QsciStyle( -1, QStringLiteral(
"Annotation" ),
1113 annotate( lineNumber, warning, styleAnn );
1114 mWarningLines.push_back( lineNumber );
1119 for (
const int line : mWarningLines )
1121 markerDelete( line );
1122 clearAnnotations( line );
1125 mWarningLines.clear();
1132 getCursorPosition( &line, &index );
1133 return line == lines() - 1;
1138 mHistoryFilePath = path;
1144 setCursorPosition( 0, 0 );
1145 ensureCursorVisible();
1146 ensureLineVisible( 0 );
1154 const int endLine = lines() - 1;
1155 const int endLineLength = lineLength( endLine );
1156 setCursorPosition( endLine, endLineLength );
1157 ensureCursorVisible();
1158 ensureLineVisible( endLine );
1166 return static_cast<int>( SendScintilla( SCI_GETCURRENTPOS ) );
1172 lineIndexFromPosition( linearIndex, &line, &index );
1173 setCursorPosition( line, index );
1178 int startLine, startIndex, _;
1179 getSelection( &startLine, &startIndex, &_, &_ );
1180 if ( startLine == -1 )
1184 return positionFromLineIndex( startLine, startIndex );
1189 int endLine, endIndex, _;
1190 getSelection( &_, &_, &endLine, &endIndex );
1191 if ( endLine == -1 )
1195 return positionFromLineIndex( endLine, endIndex );
1200 int startLine, startIndex, endLine, endIndex;
1201 lineIndexFromPosition( start, &startLine, &startIndex );
1202 lineIndexFromPosition( end, &endLine, &endIndex );
1203 setSelection( startLine, startIndex, endLine, endIndex );
1218 if ( wrapMode() == WrapNone )
1230 if ( SendScintilla( SCI_WRAPCOUNT, line ) <= 1 )
1236 const long endLine = SendScintilla( SCI_GETLINEENDPOSITION, line );
1238 const long y = SendScintilla( SCI_POINTYFROMPOSITION, 0, endLine );
1240 return static_cast<int>( SendScintilla( SCI_POSITIONFROMPOINT, 0, y ) );
1247 if ( callTipsStyle() == CallTipsNone || lexer() ==
nullptr )
1252 QsciAbstractAPIs *apis = lexer()->apis();
1257 int pos, commas = 0;
1265 while ( ( ch = getCharacter( pos ) ) !=
'\0' )
1269 else if ( ch ==
')' )
1275 while ( ( ch = getCharacter( pos ) ) !=
'\0' )
1279 else if ( ch ==
'(' && --depth == 0 )
1283 else if ( ch ==
'(' )
1291 SendScintilla( SCI_CALLTIPCANCEL );
1297 int contextStart, lastWordStart;
1298 QStringList context = apiContext( pos, contextStart, lastWordStart );
1300 if ( context.isEmpty() )
1304 context << QString();
1306 QList<int> ctShifts;
1307 QStringList ctEntries = apis->callTips( context, commas, callTipsStyle(), ctShifts );
1309 int nbEntries = ctEntries.count();
1311 if ( nbEntries == 0 )
1314 const int maxNumberOfCallTips = callTipsVisible();
1317 if ( maxNumberOfCallTips > 0 && maxNumberOfCallTips < nbEntries )
1319 ctEntries = ctEntries.mid( 0, maxNumberOfCallTips );
1320 nbEntries = maxNumberOfCallTips;
1326 int nbShifts = ctShifts.count();
1328 if ( maxNumberOfCallTips < 0 && nbEntries > 1 )
1330 shift = ( nbShifts > 0 ? ctShifts.first() : 0 );
1332 ct.prepend(
'\002' );
1336 if ( nbShifts > nbEntries )
1337 nbShifts = nbEntries;
1342 for (
int i = 0; i < nbShifts; ++i )
1344 int sh = ctShifts[i];
1350 ct = ctEntries.join(
"\n" );
1353 QByteArray ctBa = ct.toLatin1();
1354 const char *cts = ctBa.data();
1358 if ( currentWrapPosition != -1 )
1360 SendScintilla( SCI_CALLTIPSHOW, currentWrapPosition, cts );
1368 int ctmin =
static_cast<int>( SendScintilla( SCI_POSITIONFROMLINE, SendScintilla( SCI_LINEFROMPOSITION, ct ) ) );
1369 if ( lastWordStart - shift < ctmin )
1370 lastWordStart = ctmin;
1374 lineIndexFromPosition( lastWordStart, &line, &index );
1375 SendScintilla( SCI_CALLTIPSHOW, positionFromLineIndex( line, index ), cts );
1379 if ( nbEntries > 1 )
1386 astart = strchr( cts,
'(' );
1388 for ( astart = strchr( cts,
',' ); astart && --commas > 0; astart = strchr( astart + 1,
',' ) )
1402 for ( aend = astart; *aend; ++aend )
1406 if ( ch ==
',' && depth == 0 )
1408 else if ( ch ==
'(' )
1410 else if ( ch ==
')' )
1419 if ( astart != aend )
1420 SendScintilla( SCI_CALLTIPSETHLT, astart - cts, aend - cts );
1427char QgsCodeEditor::getCharacter(
int &pos )
const
1432 char ch =
static_cast<char>( SendScintilla( SCI_GETCHARAT, --pos ) );
1435 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.
static const QgsSettingsEntryBool * settingContextHelpHover
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,...
void helpRequested(const QString &word)
Emitted when documentation was requested for the specified word.
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...
T value(const QString &dynamicKeyPart=QString()) const
Returns settings value.
A boolean settings entry.
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)