From de59ee74238a5148298efe075373e6fdb74b82fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Sun, 12 Mar 2023 22:05:57 -0300 Subject: [PATCH] ecode: Added an option to show relative lines position. --- include/eepp/ui/uicodeeditor.hpp | 6 +++++- src/eepp/ui/uicodeeditor.cpp | 19 +++++++++++++++++-- src/tools/ecode/appconfig.cpp | 2 ++ src/tools/ecode/appconfig.hpp | 1 + src/tools/ecode/ecode.cpp | 1 + src/tools/ecode/settingsmenu.cpp | 9 +++++++++ 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/include/eepp/ui/uicodeeditor.hpp b/include/eepp/ui/uicodeeditor.hpp index 58a63c10e..d2c75cf93 100644 --- a/include/eepp/ui/uicodeeditor.hpp +++ b/include/eepp/ui/uicodeeditor.hpp @@ -592,7 +592,10 @@ class EE_API UICodeEditor : public UIWidget, public TextDocument::Client { Vector2f getRelativeScreenPosition( const TextPosition& pos ); - protected: + bool getShowLinesRelativePosition() const; + void showLinesRelativePosition(bool showLinesRelativePosition); + + protected: struct LastXOffset { TextPosition position{ 0, 0 }; Float offset{ 0.f }; @@ -628,6 +631,7 @@ class EE_API UICodeEditor : public UIWidget, public TextDocument::Client { bool mAutoCloseXMLTags{ false }; bool mFindReplaceEnabled{ true }; bool mShowIndentationGuides{ false }; + bool mShowLinesRelativePosition; std::atomic mHighlightWordProcessing{ false }; TextRange mLinkPosition; String mLink; diff --git a/src/eepp/ui/uicodeeditor.cpp b/src/eepp/ui/uicodeeditor.cpp index f492e5c2a..7b905414f 100644 --- a/src/eepp/ui/uicodeeditor.cpp +++ b/src/eepp/ui/uicodeeditor.cpp @@ -1381,6 +1381,14 @@ Vector2f UICodeEditor::getRelativeScreenPosition( const TextPosition& pos ) { startScroll.y + pos.line() * lineHeight + getLineOffset() }; } +bool UICodeEditor::getShowLinesRelativePosition() const { + return mShowLinesRelativePosition; +} + +void UICodeEditor::showLinesRelativePosition( bool showLinesRelativePosition ) { + mShowLinesRelativePosition = showLinesRelativePosition; +} + void UICodeEditor::drawCursor( const Vector2f& startScroll, const Float& lineHeight, const TextPosition& cursor ) { if ( mCursorVisible && !mLocked && isTextSelectionEnabled() ) { @@ -2871,9 +2879,16 @@ void UICodeEditor::drawLineNumbers( const std::pair& lineRange, primitives.drawRectangle( Rectf( screenStart, Sizef( lineNumberWidth, mSize.getHeight() ) ) ); TextRange selection = mDoc->getSelection( true ); Float lineOffset = getLineOffset(); + for ( int i = lineRange.first; i <= lineRange.second; i++ ) { - Text line( String( String::toString( i + 1 ) ).padLeft( lineNumberDigits, ' ' ), mFont, - fontSize ); + String pos; + if ( mShowLinesRelativePosition && selection.start().line() != i ) { + pos = String( String::toString( eeabs( i - selection.start().line() ) ) ) + .padLeft( lineNumberDigits, ' ' ); + } else { + pos = String( String::toString( i + 1 ) ).padLeft( lineNumberDigits, ' ' ); + } + Text line( std::move( pos ), mFont, fontSize ); line.setStyleConfig( mFontStyleConfig ); line.setColor( ( i >= selection.start().line() && i <= selection.end().line() ) ? mLineNumberActiveFontColor diff --git a/src/tools/ecode/appconfig.cpp b/src/tools/ecode/appconfig.cpp index 3c02eed59..516544e2c 100644 --- a/src/tools/ecode/appconfig.cpp +++ b/src/tools/ecode/appconfig.cpp @@ -130,6 +130,7 @@ void AppConfig::load( const std::string& confPath, std::string& keybindingsPath, editor.lineSpacing = ini.getValue( "editor", "line_spacing", "0dp" ); editor.cursorBlinkingTime = Time::fromString( ini.getValue( "editor", "cursor_blinking_time", "0.5s" ) ); + editor.linesRelativePosition = ini.getValueB( "editor", "lines_relative_position", false ); searchBarConfig.caseSensitive = ini.getValueB( "search_bar", "case_sensitive", false ); searchBarConfig.luaPattern = ini.getValueB( "search_bar", "lua_pattern", false ); @@ -240,6 +241,7 @@ void AppConfig::save( const std::vector& recentFiles, ini.setValueB( "editor", "auto_close_xml_tags", editor.autoCloseXMLTags ); ini.setValue( "editor", "line_spacing", editor.lineSpacing.toString() ); ini.setValue( "editor", "cursor_blinking_time", editor.cursorBlinkingTime.toString() ); + ini.setValueB( "editor", "lines_relative_position", editor.linesRelativePosition ); ini.setValueB( "search_bar", "case_sensitive", searchBarConfig.caseSensitive ); ini.setValueB( "search_bar", "lua_pattern", searchBarConfig.luaPattern ); diff --git a/src/tools/ecode/appconfig.hpp b/src/tools/ecode/appconfig.hpp index 0cca01acf..0b1145f7f 100644 --- a/src/tools/ecode/appconfig.hpp +++ b/src/tools/ecode/appconfig.hpp @@ -69,6 +69,7 @@ struct CodeEditorConfig { bool singleClickTreeNavigation{ false }; bool syncProjectTreeWithEditor{ true }; bool autoCloseXMLTags{ true }; + bool linesRelativePosition{ false }; std::string autoCloseBrackets{ "" }; Time cursorBlinkingTime{ Seconds( 0.5f ) }; }; diff --git a/src/tools/ecode/ecode.cpp b/src/tools/ecode/ecode.cpp index dc0728a0f..83a1be7e1 100644 --- a/src/tools/ecode/ecode.cpp +++ b/src/tools/ecode/ecode.cpp @@ -2081,6 +2081,7 @@ void App::onCodeEditorCreated( UICodeEditor* editor, TextDocument& doc ) { editor->addEventListener( Event::OnEditorTabReady, docChanged ); editor->showMinimap( config.minimap ); + editor->showLinesRelativePosition( config.linesRelativePosition ); mPluginManager->onNewEditor( editor ); } diff --git a/src/tools/ecode/settingsmenu.cpp b/src/tools/ecode/settingsmenu.cpp index 31658526f..db5cf7437 100644 --- a/src/tools/ecode/settingsmenu.cpp +++ b/src/tools/ecode/settingsmenu.cpp @@ -1085,6 +1085,9 @@ UIMenu* SettingsMenu::createViewMenu() { mViewMenu->addCheckBox( i18n( "highlight_matching_brackets", "Highlight Matching Bracket" ) ) ->setActive( mApp->getConfig().editor.highlightMatchingBracket ) ->setId( "highlight-matching-brackets" ); + mViewMenu->addCheckBox( i18n( "show_lines_relative_position", "Show Lines Relative Position" ) ) + ->setActive( mApp->getConfig().editor.linesRelativePosition ) + ->setId( "show-lines-relative-position" ); mViewMenu->addCheckBox( i18n( "highlight_current_line", "Highlight Current Line" ) ) ->setActive( mApp->getConfig().editor.highlightCurrentLine ) ->setId( "highlight-current-line" ); @@ -1166,6 +1169,12 @@ UIMenu* SettingsMenu::createViewMenu() { mSplitter->forEachEditor( [&]( UICodeEditor* editor ) { editor->showMinimap( mApp->getConfig().editor.minimap ); } ); + } else if ( item->getId() == "show-lines-relative-position" ) { + mApp->getConfig().editor.linesRelativePosition = + item->asType()->isActive(); + mSplitter->forEachEditor( [&]( UICodeEditor* editor ) { + editor->showLinesRelativePosition( mApp->getConfig().editor.linesRelativePosition ); + } ); } else if ( item->getId() == "highlight-matching-brackets" ) { mApp->getConfig().editor.highlightMatchingBracket = item->asType()->isActive();