From ad92686fdd6755bc0290a7bf28aaea21f9fe85ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Fri, 5 Jan 2024 00:30:54 -0300 Subject: [PATCH] Git minor changes. Display current language in doc info. --- src/tools/ecode/ecode.cpp | 3 +- src/tools/ecode/plugins/git/git.cpp | 3 +- src/tools/ecode/plugins/git/gitplugin.cpp | 127 +++++++++++----------- src/tools/ecode/plugins/git/gitplugin.hpp | 2 + 4 files changed, 69 insertions(+), 66 deletions(-) diff --git a/src/tools/ecode/ecode.cpp b/src/tools/ecode/ecode.cpp index 77924a519..18acddfde 100644 --- a/src/tools/ecode/ecode.cpp +++ b/src/tools/ecode/ecode.cpp @@ -1602,10 +1602,11 @@ void App::updateDocInfo( TextDocument& doc ) { mDocInfo->setVisible( true ); updateDocInfoLocation(); String infoStr( String::format( - "%s: %lld / %zu %s: %lld %s", i18n( "line_abbr", "line" ).toUtf8().c_str(), + "%s: %lld / %zu %s: %lld %s %s", i18n( "line_abbr", "line" ).toUtf8().c_str(), doc.getSelection().start().line() + 1, doc.linesCount(), i18n( "col_abbr", "col" ).toUtf8().c_str(), mSplitter->getCurEditor()->getCurrentColumnCount(), + doc.getSyntaxDefinition().getLanguageName().c_str(), TextDocument::lineEndingToString( doc.getLineEnding() ).c_str() ) ); mDocInfo->debounce( [this, infoStr] { mDocInfo->setText( infoStr ); }, Time::Zero, String::hash( "ecode::doc_info::update" ) ); diff --git a/src/tools/ecode/plugins/git/git.cpp b/src/tools/ecode/plugins/git/git.cpp index 47e434d5a..885f30067 100644 --- a/src/tools/ecode/plugins/git/git.cpp +++ b/src/tools/ecode/plugins/git/git.cpp @@ -1,3 +1,4 @@ + #include "git.hpp" #include #include @@ -162,7 +163,7 @@ Git::Status Git::status( bool recurseSubmodules, const std::string& projectDir ) rstatus = FileStatus::ModifiedSubmodule; if ( rstatus != FileStatus::Unidentified ) { - if ( rstatus != FileStatus::ModifiedSubmodule ) + if ( rstatus == FileStatus::ModifiedSubmodule ) modifiedSubmodule = true; else s.files.insert( { std::move( file ), rstatus } ); diff --git a/src/tools/ecode/plugins/git/gitplugin.cpp b/src/tools/ecode/plugins/git/gitplugin.cpp index 158ed0a71..b7256fba0 100644 --- a/src/tools/ecode/plugins/git/gitplugin.cpp +++ b/src/tools/ecode/plugins/git/gitplugin.cpp @@ -1,5 +1,5 @@ -#include "gitplugin.hpp" #include "eepp/ui/uistyle.hpp" +#include "gitplugin.hpp" #include #include #include @@ -161,6 +161,67 @@ void GitPlugin::updateUI() { String::hash( "git::status-update" ) ); } +void GitPlugin::updateStatusBarSync() { + if ( !mStatusBar ) + getUISceneNode()->bind( "status_bar", mStatusBar ); + if ( !mStatusBar ) + return; + + if ( !mStatusButton ) { + mStatusButton = UIPushButton::New(); + mStatusButton->setLayoutSizePolicy( SizePolicy::WrapContent, SizePolicy::MatchParent ); + mStatusButton->setParent( mStatusBar ); + mStatusButton->setId( "status_git" ); + mStatusButton->setClass( "status_but" ); + mStatusButton->setIcon( getManager() + ->getUISceneNode() + ->findIcon( "source-control" ) + ->getSize( PixelDensity::dpToPxI( 10 ) ) ); + mStatusButton->reloadStyle( true, true ); + mStatusButton->getTextBox()->setUsingCustomStyling( true ); + auto childCount = mStatusBar->getChildCount(); + if ( childCount > 2 ) + mStatusButton->toPosition( mStatusBar->getChildCount() - 2 ); + } + + mStatusButton->setVisible( !mGit->getGitFolder().empty() ); + + if ( mGit->getGitFolder().empty() ) + return; + + std::string text( mStatusBarDisplayModifications && + ( mGitStatus.totalInserts || mGitStatus.totalDeletions ) + ? String::format( "%s (+%d / -%d)", mGitBranch.c_str(), + mGitStatus.totalInserts, mGitStatus.totalDeletions ) + : mGitBranch ); + + mStatusButton->setText( text ); + + if ( !mStatusBarDisplayModifications ) + return; + + if ( !mStatusCustomTokenizer.has_value() ) { + std::vector patterns; + auto fontColor( getVarColor( "--font" ) ); + auto insertedColor( getVarColor( "--theme-success" ) ); + auto deletedColor( getVarColor( "--theme-error" ) ); + patterns.emplace_back( + SyntaxPattern( { ".*%((%+%d+)%s/%s(%-%d+)%)" }, { "normal", "keyword", "keyword2" } ) ); + SyntaxDefinition syntaxDef( "custom_build", {}, std::move( patterns ) ); + SyntaxColorScheme scheme( "status_bar_git", + { { "normal"_sst, { fontColor } }, + { "keyword"_sst, { insertedColor } }, + { "keyword2"_sst, { deletedColor } } }, + {} ); + mStatusCustomTokenizer = { std::move( syntaxDef ), std::move( scheme ) }; + } + + SyntaxTokenizer::tokenizeText( mStatusCustomTokenizer->def, mStatusCustomTokenizer->scheme, + *mStatusButton->getTextBox()->getTextCache() ); + + mStatusButton->invalidateDraw(); +} + void GitPlugin::updateStatusBar( bool force ) { if ( !mGit || !mGitFound || !mStatusBarDisplayBranch ) return; @@ -179,69 +240,7 @@ void GitPlugin::updateStatusBar( bool force ) { return; } - getUISceneNode()->runOnMainThread( [this] { - if ( !mStatusBar ) - getUISceneNode()->bind( "status_bar", mStatusBar ); - if ( !mStatusBar ) - return; - - if ( !mStatusButton ) { - mStatusButton = UIPushButton::New(); - mStatusButton->setLayoutSizePolicy( SizePolicy::WrapContent, - SizePolicy::MatchParent ); - mStatusButton->setParent( mStatusBar ); - mStatusButton->setId( "status_git" ); - mStatusButton->setClass( "status_but" ); - mStatusButton->setIcon( getManager() - ->getUISceneNode() - ->findIcon( "source-control" ) - ->getSize( PixelDensity::dpToPxI( 10 ) ) ); - mStatusButton->reloadStyle( true, true ); - mStatusButton->getTextBox()->setUsingCustomStyling( true ); - auto childCount = mStatusBar->getChildCount(); - if ( childCount > 2 ) - mStatusButton->toPosition( mStatusBar->getChildCount() - 2 ); - } - - mStatusButton->setVisible( !mGit->getGitFolder().empty() ); - - if ( mGit->getGitFolder().empty() ) - return; - - std::string text( mStatusBarDisplayModifications && - ( mGitStatus.totalInserts || mGitStatus.totalDeletions ) - ? String::format( "%s (+%d / -%d)", mGitBranch.c_str(), - mGitStatus.totalInserts, - mGitStatus.totalDeletions ) - : mGitBranch ); - - mStatusButton->setText( text ); - - if ( !mStatusBarDisplayModifications ) - return; - - if ( !mStatusCustomTokenizer.has_value() ) { - std::vector patterns; - auto fontColor( getVarColor( "--font" ) ); - auto insertedColor( getVarColor( "--theme-success" ) ); - auto deletedColor( getVarColor( "--theme-error" ) ); - patterns.emplace_back( SyntaxPattern( { ".*%((%+%d+)%s/%s(%-%d+)%)" }, - { "normal", "keyword", "keyword2" } ) ); - SyntaxDefinition syntaxDef( "custom_build", {}, std::move( patterns ) ); - SyntaxColorScheme scheme( "status_bar_git", - { { "normal"_sst, { fontColor } }, - { "keyword"_sst, { insertedColor } }, - { "keyword2"_sst, { deletedColor } } }, - {} ); - mStatusCustomTokenizer = { std::move( syntaxDef ), std::move( scheme ) }; - } - - SyntaxTokenizer::tokenizeText( mStatusCustomTokenizer->def, - mStatusCustomTokenizer->scheme, - *mStatusButton->getTextBox()->getTextCache() ); - - mStatusButton->invalidateDraw(); - } ); + getUISceneNode()->runOnMainThread( [this] { updateStatusBarSync(); } ); } ); } diff --git a/src/tools/ecode/plugins/git/gitplugin.hpp b/src/tools/ecode/plugins/git/gitplugin.hpp index 71cf0a033..73a99a26b 100644 --- a/src/tools/ecode/plugins/git/gitplugin.hpp +++ b/src/tools/ecode/plugins/git/gitplugin.hpp @@ -90,6 +90,8 @@ class GitPlugin : public PluginBase { void updateStatusBar( bool force = false ); + void updateStatusBarSync(); + void updateUI(); void updateUINow( bool force = false );