19#include "moc_qgscodeeditor.cpp"
32#include <QFontDatabase>
35#include <Qsci/qscistyle.h>
40#include "Qsci/qscilexer.h"
47QMap<QgsCodeEditorColorScheme::ColorRole, QString> QgsCodeEditor::sColorRoleToSettingsKey {
87 : QsciScintilla( parent )
88 , mWidgetTitle( title )
93 if ( !parent && mWidgetTitle.isEmpty() )
95 setWindowTitle( QStringLiteral(
"Text Editor" ) );
99 setWindowTitle( mWidgetTitle );
105 mSoftHistory.append( QString() );
108 setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded );
110 SendScintilla( SCI_SETADDITIONALSELECTIONTYPING, 1 );
111 SendScintilla( SCI_SETMULTIPASTE, 1 );
112 SendScintilla( SCI_SETVIRTUALSPACEOPTIONS, SCVS_RECTANGULARSELECTION );
117 setAnnotationDisplay( QsciScintilla::AnnotationBoxed );
132 SendScintilla( QsciScintilla::SCI_SETHSCROLLBAR, 0 );
134 setWrapMode( QsciScintilla::WrapCharacter );
141 SendScintilla( QsciScintilla::SCI_SETHSCROLLBAR, 0 );
143 setWrapMode( QsciScintilla::WrapCharacter );
144 SendScintilla( QsciScintilla::SCI_EMPTYUNDOBUFFER );
149#if QSCINTILLA_VERSION < 0x020d03
150 installEventFilter(
this );
157#if QSCINTILLA_VERSION >= 0x020800 && QSCINTILLA_VERSION < 0x020900
158 if ( event->reason() != Qt::ActiveWindowFocusReason )
172 QFocusEvent newFocusEvent( QEvent::FocusOut, Qt::ActiveWindowFocusReason );
173 QsciScintilla::focusOutEvent( &newFocusEvent );
178 QsciScintilla::focusOutEvent( event );
187 if ( isListActive() )
189 QsciScintilla::keyPressEvent( event );
193 if ( event->key() == Qt::Key_Escape )
196 QWidget::keyPressEvent( event );
200 if ( event->key() == Qt::Key_F1 )
203 QString text = selectedText();
208 text = wordAtPoint( mapFromGlobal( QCursor::pos() ) );
212 if ( text.isEmpty() )
215 getCursorPosition( &line, &index );
216 text = wordAtLineIndex( line, index );
225 switch ( event->key() )
248 const bool ctrlModifier =
event->modifiers() & Qt::ControlModifier;
249 const bool altModifier =
event->modifiers() & Qt::AltModifier;
253 if ( !isReadOnly() && canReformat && ctrlModifier && altModifier && event->key() == Qt::Key_F )
262 if ( !isReadOnly() && canToggle && ctrlModifier && event->key() == Qt::Key_Colon )
269 QsciScintilla::keyPressEvent( event );
272 if ( !event->isAutoRepeat() )
284 QMenu *menu = createStandardContextMenu();
285 menu->setAttribute( Qt::WA_DeleteOnClose );
289 menu->addSeparator();
294 QAction *reformatAction =
new QAction( tr(
"Reformat Code" ), menu );
295 reformatAction->setShortcut( QStringLiteral(
"Ctrl+Alt+F" ) );
297 reformatAction->setEnabled( !isReadOnly() );
299 menu->addAction( reformatAction );
304 QAction *syntaxCheckAction =
new QAction( tr(
"Check Syntax" ), menu );
307 menu->addAction( syntaxCheckAction );
312 QAction *toggleCommentAction =
new QAction( tr(
"Toggle Comment" ), menu );
313 toggleCommentAction->setShortcut( QStringLiteral(
"Ctrl+:" ) );
315 toggleCommentAction->setEnabled( !isReadOnly() );
317 menu->addAction( toggleCommentAction );
322 menu->exec( mapToGlobal( event->pos() ) );
328 QMenu *menu =
new QMenu(
this );
329 QMenu *historySubMenu =
new QMenu( tr(
"Command History" ), menu );
335 menu->addMenu( historySubMenu );
336 menu->addSeparator();
338 QAction *copyAction = menu->addAction(
QgsApplication::getThemeIcon(
"mActionEditCopy.svg" ), tr(
"Copy" ),
this, &QgsCodeEditor::copy, QKeySequence::Copy );
339 QAction *pasteAction = menu->addAction(
QgsApplication::getThemeIcon(
"mActionEditPaste.svg" ), tr(
"Paste" ),
this, &QgsCodeEditor::paste, QKeySequence::Paste );
340 copyAction->setEnabled( hasSelectedText() );
341 pasteAction->setEnabled( !QApplication::clipboard()->text().isEmpty() );
345 menu->exec( mapToGlobal( event->pos() ) );
350 QsciScintilla::contextMenuEvent( event );
357#if QSCINTILLA_VERSION < 0x020d03
358 if ( watched ==
this && event->type() == QEvent::InputMethod )
367 return QsciScintilla::eventFilter( watched, event );
376 if ( mUseDefaultSettings )
377 return color( role );
379 if ( !mOverrideColors )
385 const QColor
color = mCustomColors.value( role );
392 if ( mUseDefaultSettings )
395 QFont font = QFontDatabase::systemFont( QFontDatabase::FixedFont );
398 if ( !mFontFamily.isEmpty() )
403 font.setPointSize( mFontSize );
407 font.setPointSize( QLabel().font().pointSize() );
411 font.setPointSize( mFontSize );
414 const int fontSize = settings.
value( QStringLiteral(
"qgis/stylesheet/fontPointSize" ), 10 ).toInt();
415 font.setPointSize( fontSize );
418 font.setBold(
false );
445 setCaretLineVisible(
false );
448 setMarginLineNumbers( 1,
true );
449 setMarginWidth( 1,
"00000" );
450 setMarginType( 1, QsciScintilla::MarginType::TextMarginRightJustified );
452 setEdgeMode( QsciScintilla::EdgeNone );
456void QgsCodeEditor::setSciWidget()
462 setCaretLineVisible(
true );
468 setBraceMatching( QsciScintilla::SloppyBraceMatch );
475 setFolding( QsciScintilla::NoFoldStyle );
487 setFoldMarginColors( foldColor, foldColor );
489 setAutoIndent(
true );
490 setIndentationWidth( 4 );
491 setTabIndents(
true );
492 setBackspaceUnindents(
true );
495 setAutoCompletionThreshold( 2 );
496 setAutoCompletionSource( QsciScintilla::AcsAPIs );
503 setWindowTitle( title );
523 return tr(
"Expression" );
527 return tr(
"JavaScript" );
531 return tr(
"Python" );
537 return tr(
"Batch" );
552 marginFont.setPointSize( 10 );
553 setMarginLineNumbers( 0,
true );
554 setMarginsFont( marginFont );
572 marginFont.setPointSize( 10 );
574 setMarginsFont( marginFont );
609void QgsCodeEditor::updateFolding()
616 setFolding( QsciScintilla::PlainFoldStyle );
620 setFolding( QsciScintilla::NoFoldStyle );
625bool QgsCodeEditor::readHistoryFile()
627 if ( mHistoryFilePath.isEmpty() || !QFile::exists( mHistoryFilePath ) )
630 QFile file( mHistoryFilePath );
631 if ( file.open( QIODevice::ReadOnly ) )
633 QTextStream stream( &file );
634#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 )
636 stream.setCodec(
"UTF-8" );
639 while ( !stream.atEnd() )
641 line = stream.readLine();
642 mHistory.append( line );
651void QgsCodeEditor::syncSoftHistory()
653 mSoftHistory = mHistory;
654 mSoftHistory.append( QString() );
655 mSoftHistoryIndex = mSoftHistory.length() - 1;
660 mSoftHistory[mSoftHistoryIndex] = text();
663void QgsCodeEditor::updateHistory(
const QStringList &commands,
bool skipSoftHistory )
665 if ( commands.size() > 1 )
667 mHistory.append( commands );
669 else if ( !commands.value( 0 ).isEmpty() )
671 const QString command = commands.value( 0 );
672 if ( mHistory.empty() || command != mHistory.constLast() )
673 mHistory.append( command );
676 if ( !skipSoftHistory )
696 QMessageBox::information(
this, title, message );
700 QMessageBox::warning(
this, title, message );
704 QMessageBox::critical(
this, title, message );
714 SendScintilla( QsciScintilla::SCI_MARGINSETTEXT,
static_cast<uintptr_t
>( 0 ), prompt.toUtf8().constData() );
725 mInterpreter = newInterpreter;
732 const int index = std::min( source.length(), target.length() );
738 int refDistanceMore = d0;
739 int refIndexMore = index;
740 if ( index < source.length() - 1 )
745 if ( newDistance <= refDistanceMore )
747 refDistanceMore = newDistance;
749 if ( refIndexMore == source.length() - 1 )
759 int refDistanceLess = d0;
760 int refIndexLess = index;
766 if ( newDistance <= refDistanceLess )
768 refDistanceLess = newDistance;
770 if ( refIndexLess == 0 )
780 if ( refDistanceMore < refDistanceLess )
792 const QString originalText = text();
795 if ( originalText == newText )
799 const int oldScrollValue = verticalScrollBar()->value();
804 removeSelectedText();
807 verticalScrollBar()->setValue( oldScrollValue );
829 updateHistory( { command } );
835 mInterpreter->
exec( command );
854 if ( !mHistoryFilePath.isEmpty() && QFile::exists( mHistoryFilePath ) )
856 QFile file( mHistoryFilePath );
857 file.open( QFile::WriteOnly | QFile::Truncate );
865 if ( mHistoryFilePath.isEmpty() )
868 QFile f( mHistoryFilePath );
869 if ( !f.open( QFile::WriteOnly | QIODevice::Truncate ) )
874 QTextStream ts( &f );
875#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 )
876 ts.setCodec(
"UTF-8" );
878 for (
const QString &command : std::as_const( mHistory ) )
880 ts << command +
'\n';
887 if ( mSoftHistoryIndex < mSoftHistory.length() - 1 && !mSoftHistory.isEmpty() )
889 mSoftHistoryIndex += 1;
890 setText( mSoftHistory[mSoftHistoryIndex] );
897 if ( mSoftHistoryIndex > 0 && !mSoftHistory.empty() )
899 mSoftHistoryIndex -= 1;
900 setText( mSoftHistory[mSoftHistoryIndex] );
908 dialog->setAttribute( Qt::WA_DeleteOnClose );
911 dialog->activateWindow();
917 mHistory.removeAt( index );
918 mSoftHistory.removeAt( index );
919 if ( index < mSoftHistoryIndex )
921 mSoftHistoryIndex -= 1;
922 if ( mSoftHistoryIndex < 0 )
923 mSoftHistoryIndex = mSoftHistory.length() - 1;
930 if ( hasSelectedText() )
932 replaceSelectedText( text );
937 getCursorPosition( &line, &index );
938 insertAt( text, line, index );
939 setCursorPosition( line, index + text.length() );
948 const QPalette
pal = qApp->palette();
953 return pal.color( QPalette::Highlight );
955 return pal.color( QPalette::HighlightedText );
960 else if ( theme.isEmpty() )
965 static const QMap<QgsCodeEditorColorScheme::ColorRole, QString> sColorRoleToIniKey {
1009 return scheme.
color( role );
1015 if ( !settings.
value( QStringLiteral(
"codeEditor/overrideColors" ),
false,
QgsSettings::Gui ).toBool() )
1017 const QString theme = settings.
value( QStringLiteral(
"codeEditor/colorScheme" ), QString(),
QgsSettings::Gui ).toString();
1022 const QString
color = settings.
value( QStringLiteral(
"codeEditor/%1" ).arg( sColorRoleToSettingsKey.value( role ) ), QString(),
QgsSettings::Gui ).toString();
1030 if (
color.isValid() )
1036 settings.
remove( QStringLiteral(
"codeEditor/%1" ).arg( sColorRoleToSettingsKey.value( role ) ),
QgsSettings::Gui );
1043 return font.fixedPitch();
1048 QFont font = QFontDatabase::systemFont( QFontDatabase::FixedFont );
1051 if ( !settings.
value( QStringLiteral(
"codeEditor/fontfamily" ), QString(),
QgsSettings::Gui ).toString().isEmpty() )
1054 const int fontSize = settings.
value( QStringLiteral(
"codeEditor/fontsize" ), 0,
QgsSettings::Gui ).toInt();
1058 font.setPointSize( fontSize );
1062 font.setPointSize( QLabel().font().pointSize() );
1066 font.setPointSize( fontSize );
1069 const int fontSize = settings.
value( QStringLiteral(
"qgis/stylesheet/fontPointSize" ), 10 ).toInt();
1070 font.setPointSize( fontSize );
1073 font.setBold(
false );
1080 mUseDefaultSettings =
false;
1081 mOverrideColors = !customColors.isEmpty();
1082 mColorScheme = scheme;
1083 mCustomColors = customColors;
1084 mFontFamily = fontFamily;
1085 mFontSize = fontSize;
1094 markerAdd( lineNumber, MARKER_NUMBER );
1096 font.setItalic(
true );
1098 annotate( lineNumber, warning, styleAnn );
1099 mWarningLines.push_back( lineNumber );
1104 for (
const int line : mWarningLines )
1106 markerDelete( line );
1107 clearAnnotations( line );
1110 mWarningLines.clear();
1117 getCursorPosition( &line, &index );
1118 return line == lines() - 1;
1123 mHistoryFilePath = path;
1129 setCursorPosition( 0, 0 );
1130 ensureCursorVisible();
1131 ensureLineVisible( 0 );
1139 const int endLine = lines() - 1;
1140 const int endLineLength = lineLength( endLine );
1141 setCursorPosition( endLine, endLineLength );
1142 ensureCursorVisible();
1143 ensureLineVisible( endLine );
1151 return static_cast<int>( SendScintilla( SCI_GETCURRENTPOS ) );
1157 lineIndexFromPosition( linearIndex, &line, &index );
1158 setCursorPosition( line, index );
1163 int startLine, startIndex, _;
1164 getSelection( &startLine, &startIndex, &_, &_ );
1165 if ( startLine == -1 )
1169 return positionFromLineIndex( startLine, startIndex );
1174 int endLine, endIndex, _;
1175 getSelection( &_, &_, &endLine, &endIndex );
1176 if ( endLine == -1 )
1180 return positionFromLineIndex( endLine, endIndex );
1185 int startLine, startIndex, endLine, endIndex;
1186 lineIndexFromPosition( start, &startLine, &startIndex );
1187 lineIndexFromPosition( end, &endLine, &endIndex );
1188 setSelection( startLine, startIndex, endLine, endIndex );
1203 if ( wrapMode() == WrapNone )
1215 if ( SendScintilla( SCI_WRAPCOUNT, line ) <= 1 )
1221 const long endLine = SendScintilla( SCI_GETLINEENDPOSITION, line );
1223 const long y = SendScintilla( SCI_POINTYFROMPOSITION, 0, endLine );
1225 return static_cast<int>( SendScintilla( SCI_POSITIONFROMPOINT, 0, y ) );
1232 if ( callTipsStyle() == CallTipsNone || lexer() ==
nullptr )
1237 QsciAbstractAPIs *apis = lexer()->apis();
1242 int pos, commas = 0;
1250 while ( ( ch = getCharacter( pos ) ) !=
'\0' )
1254 else if ( ch ==
')' )
1260 while ( ( ch = getCharacter( pos ) ) !=
'\0' )
1264 else if ( ch ==
'(' && --depth == 0 )
1268 else if ( ch ==
'(' )
1276 SendScintilla( SCI_CALLTIPCANCEL );
1282 int contextStart, lastWordStart;
1283 QStringList context = apiContext( pos, contextStart, lastWordStart );
1285 if ( context.isEmpty() )
1289 context << QString();
1291 QList<int> ctShifts;
1292 QStringList ctEntries = apis->callTips( context, commas, callTipsStyle(), ctShifts );
1294 int nbEntries = ctEntries.count();
1296 if ( nbEntries == 0 )
1299 const int maxNumberOfCallTips = callTipsVisible();
1302 if ( maxNumberOfCallTips > 0 && maxNumberOfCallTips < nbEntries )
1304 ctEntries = ctEntries.mid( 0, maxNumberOfCallTips );
1305 nbEntries = maxNumberOfCallTips;
1311 int nbShifts = ctShifts.count();
1313 if ( maxNumberOfCallTips < 0 && nbEntries > 1 )
1315 shift = ( nbShifts > 0 ? ctShifts.first() : 0 );
1317 ct.prepend(
'\002' );
1321 if ( nbShifts > nbEntries )
1322 nbShifts = nbEntries;
1327 for (
int i = 0; i < nbShifts; ++i )
1329 int sh = ctShifts[i];
1335 ct = ctEntries.join(
"\n" );
1338 QByteArray ctBa = ct.toLatin1();
1339 const char *cts = ctBa.data();
1343 if ( currentWrapPosition != -1 )
1345 SendScintilla( SCI_CALLTIPSHOW, currentWrapPosition, cts );
1353 int ctmin =
static_cast<int>( SendScintilla( SCI_POSITIONFROMLINE, SendScintilla( SCI_LINEFROMPOSITION, ct ) ) );
1354 if ( lastWordStart - shift < ctmin )
1355 lastWordStart = ctmin;
1359 lineIndexFromPosition( lastWordStart, &line, &index );
1360 SendScintilla( SCI_CALLTIPSHOW, positionFromLineIndex( line, index ), cts );
1364 if ( nbEntries > 1 )
1371 astart = strchr( cts,
'(' );
1373 for ( astart = strchr( cts,
',' ); astart && --commas > 0; astart = strchr( astart + 1,
',' ) )
1387 for ( aend = astart; *aend; ++aend )
1391 if ( ch ==
',' && depth == 0 )
1393 else if ( ch ==
'(' )
1395 else if ( ch ==
')' )
1404 if ( astart != aend )
1405 SendScintilla( SCI_CALLTIPSETHLT, astart - cts, aend - cts );
1412char QgsCodeEditor::getCharacter(
int &pos )
const
1417 char ch =
static_cast<char>( SendScintilla( SCI_GETCHARAT, --pos ) );
1420 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)