diff --git a/include/eepp/ui/uicodeeditor.hpp b/include/eepp/ui/uicodeeditor.hpp index 175c7ba47..a1661f154 100644 --- a/include/eepp/ui/uicodeeditor.hpp +++ b/include/eepp/ui/uicodeeditor.hpp @@ -575,6 +575,8 @@ class EE_API UICodeEditor : public UIWidget, public TextDocument::Client { void showFindReplace(); + Tools::UIDocFindReplace* getFindReplace(); + TextPosition resolveScreenPosition( const Vector2f& position, bool clamp = true ) const; Rectf getScreenPosition( const TextPosition& position ) const; diff --git a/include/eepp/ui/uimessagebox.hpp b/include/eepp/ui/uimessagebox.hpp index aecec8727..fc02d7a7a 100644 --- a/include/eepp/ui/uimessagebox.hpp +++ b/include/eepp/ui/uimessagebox.hpp @@ -21,13 +21,8 @@ class EE_API UIMessageBox : public UIWindow { static UIMessageBox* New( const Type& type, const String& message, const Uint32& windowFlags = UI_MESSAGE_BOX_DEFAULT_FLAGS ); - UIMessageBox( const Type& type, const String& message, - const Uint32& windowFlags = UI_MESSAGE_BOX_DEFAULT_FLAGS ); - virtual ~UIMessageBox(); - virtual Uint32 onMessage( const NodeMessage* Msg ); - virtual void setTheme( UITheme* theme ); UITextView* getTextBox() const; @@ -40,7 +35,7 @@ class EE_API UIMessageBox : public UIWindow { const KeyBindings::Shortcut& getCloseShortcut() const; - void setCloseShortcut( const KeyBindings::Shortcut& closeWithKey ); + UIMessageBox* setCloseShortcut( const KeyBindings::Shortcut& closeWithKey ); UITextInput* getTextInput() const; @@ -58,9 +53,15 @@ class EE_API UIMessageBox : public UIWindow { KeyBindings::Shortcut mCloseShortcut; UILayout* mLayoutCont{ nullptr }; + UIMessageBox( const Type& type, const String& message, + const Uint32& windowFlags = UI_MESSAGE_BOX_DEFAULT_FLAGS ); + virtual void onWindowReady(); virtual Uint32 onKeyUp( const KeyEvent& event ); + + virtual Uint32 onMessage( const NodeMessage* Msg ); + }; }} // namespace EE::UI diff --git a/include/eepp/ui/uiwindow.hpp b/include/eepp/ui/uiwindow.hpp index bb99e038d..245e4a3b4 100644 --- a/include/eepp/ui/uiwindow.hpp +++ b/include/eepp/ui/uiwindow.hpp @@ -95,7 +95,7 @@ class EE_API UIWindow : public UIWidget { virtual bool hide(); - void showWhenReady(); + UIWindow* showWhenReady(); virtual void scheduledUpdate( const Time& time ); @@ -107,7 +107,7 @@ class EE_API UIWindow : public UIWidget { const Uint8& getBaseAlpha() const; - void setTitle( const String& Text ); + UIWindow* setTitle( const String& Text ); String getTitle() const; diff --git a/src/eepp/ui/uicodeeditor.cpp b/src/eepp/ui/uicodeeditor.cpp index 9dfd43b1d..45251cf27 100644 --- a/src/eepp/ui/uicodeeditor.cpp +++ b/src/eepp/ui/uicodeeditor.cpp @@ -3452,6 +3452,10 @@ void UICodeEditor::showFindReplace() { SceneManager::instance()->setCurrentUISceneNode( curSceneNode ); } +Tools::UIDocFindReplace* UICodeEditor::getFindReplace() { + return mFindReplace; +} + void UICodeEditor::registerKeybindings() { mKeyBindings.addKeybinds( getDefaultKeybindings() ); } diff --git a/src/eepp/ui/uimessagebox.cpp b/src/eepp/ui/uimessagebox.cpp index 66d551f94..8550d5453 100644 --- a/src/eepp/ui/uimessagebox.cpp +++ b/src/eepp/ui/uimessagebox.cpp @@ -190,8 +190,9 @@ const KeyBindings::Shortcut& UIMessageBox::getCloseShortcut() const { return mCloseShortcut; } -void UIMessageBox::setCloseShortcut( const KeyBindings::Shortcut& closeWithKey ) { +UIMessageBox* UIMessageBox::setCloseShortcut( const KeyBindings::Shortcut& closeWithKey ) { mCloseShortcut = closeWithKey; + return this; } UITextInput* UIMessageBox::getTextInput() const { diff --git a/src/eepp/ui/uiwindow.cpp b/src/eepp/ui/uiwindow.cpp index f46865dcb..c0567f6bf 100644 --- a/src/eepp/ui/uiwindow.cpp +++ b/src/eepp/ui/uiwindow.cpp @@ -1124,13 +1124,14 @@ bool UIWindow::hide() { return false; } -void UIWindow::showWhenReady() { +UIWindow* UIWindow::showWhenReady() { if ( mWindowReady ) { show(); } else { hide(); mShowWhenReady = true; } + return this; } void UIWindow::onAlphaChange() { @@ -1176,9 +1177,9 @@ const Uint8& UIWindow::getBaseAlpha() const { return mStyleConfig.BaseAlpha; } -void UIWindow::setTitle( const String& text ) { +UIWindow* UIWindow::setTitle( const String& text ) { if ( mTitle && text == mTitle->getText() ) - return; + return this; if ( NULL == mTitle ) { mTitle = UITextView::NewWithTag( "window::title" ); @@ -1196,6 +1197,7 @@ void UIWindow::setTitle( const String& text ) { mTitle->setText( text ); sendTextEvent( Event::OnTitleChange, text.toUtf8() ); + return this; } void UIWindow::fixTitleSize() { diff --git a/src/tools/ecode/applayout.xml.hpp b/src/tools/ecode/applayout.xml.hpp index 3eee9f2b6..733d94788 100644 --- a/src/tools/ecode/applayout.xml.hpp +++ b/src/tools/ecode/applayout.xml.hpp @@ -174,6 +174,21 @@ TableView#locate_bar_table > tableview::row:selected > tableview::cell:nth-child #status_bar > .status_but.selected { background-color: var(--primary); } +.vertical_bar { + background-color: var(--list-back); +} +.vertical_bar PushButton { + padding: 2dp; + background-color: var(--list-back); + border-radius: 0dp; + border-width: 0dp; +} +.vertical_bar PushButton:hover { + background-color: var(--item-hover); +} +.vertical_bar PushButton.selected { + background-color: var(--primary); +} #panel > tabwidget::container > * { background-color: var(--list-back); } diff --git a/src/tools/ecode/ecode.cpp b/src/tools/ecode/ecode.cpp index 15c924d7a..e3b999212 100644 --- a/src/tools/ecode/ecode.cpp +++ b/src/tools/ecode/ecode.cpp @@ -3291,7 +3291,6 @@ void App::loadFolder( const std::string& path ) { mCurrentProject = rpath; mCurrentProjectName = FileSystem::fileNameFromPath( mCurrentProject ); - mPluginManager->setWorkspaceFolder( rpath ); loadDirTree( rpath ); @@ -3329,6 +3328,8 @@ void App::loadFolder( const std::string& path ) { if ( mSplitter->getCurEditor() ) setAppTitle( titleFromEditor( mSplitter->getCurEditor() ) ); + + mPluginManager->setWorkspaceFolder( rpath ); } #if EE_PLATFORM == EE_PLATFORM_MACOS diff --git a/src/tools/ecode/iconmanager.cpp b/src/tools/ecode/iconmanager.cpp index 712933a76..5fe352a5f 100644 --- a/src/tools/ecode/iconmanager.cpp +++ b/src/tools/ecode/iconmanager.cpp @@ -89,7 +89,10 @@ void IconManager::init( UISceneNode* sceneNode, FontTrueType* iconFont, FontTrue { "filetype-hdr", 0xF3C5 }, { "filetype-pic", 0xF3C5 }, { "filetype-pvr", 0xF3C5 }, - { "filetype-pkm", 0xF3C5 } }; + { "filetype-pkm", 0xF3C5 }, + { "settings", 0xF0E3 }, + { "stop", 0xF1A0 }, + }; for ( const auto& icon : icons ) iconTheme->add( UIGlyphIcon::New( icon.first, iconFont, icon.second ) ); diff --git a/src/tools/ecode/plugins/git/gitplugin.cpp b/src/tools/ecode/plugins/git/gitplugin.cpp index 3c00c2a1f..46d21b4c1 100644 --- a/src/tools/ecode/plugins/git/gitplugin.cpp +++ b/src/tools/ecode/plugins/git/gitplugin.cpp @@ -471,6 +471,9 @@ PluginRequestHandle GitPlugin::processMessage( const PluginMessage& msg ) { updateUINow( true ); mInitialized = true; + + if ( mModelStylerId == 0 ) + initModelStyler(); } break; } diff --git a/src/tools/ecode/projectbuild.cpp b/src/tools/ecode/projectbuild.cpp index 7597e9fdb..0d6b54edc 100644 --- a/src/tools/ecode/projectbuild.cpp +++ b/src/tools/ecode/projectbuild.cpp @@ -292,6 +292,20 @@ void ProjectBuildManager::editBuild( std::string buildName, UIWidget* buildTab ) ret.first->setIcon( mApp->findIcon( "hammer" ) ); } +void ProjectBuildManager::editCurrentBuild() { + UIWidget* buildTab = mTab->getOwnedWidget()->find( "build_tab_view" ); + if ( buildTab == nullptr ) + return; + if ( !mConfig.buildName.empty() && !mBuilds.empty() ) + editBuild( mConfig.buildName, buildTab ); + else + mTab->setTabSelected(); +} + +void ProjectBuildManager::selectTab() { + mTab->setTabSelected(); +} + ProjectBuildManager::~ProjectBuildManager() { if ( mUISceneNode && !SceneManager::instance()->isShuttingDown() && mSidePanel && mTab ) { mSidePanel->removeTab( mTab ); @@ -672,11 +686,7 @@ void ProjectBuildManager::setConfig( const ProjectBuildConfiguration& config ) { void ProjectBuildManager::buildCurrentConfig( StatusBuildOutputController* sboc, std::function doneFn ) { if ( sboc && !isBuilding() && !getBuilds().empty() ) { - const ProjectBuild* build = nullptr; - for ( const auto& buildIt : getBuilds() ) - if ( buildIt.second.getName() == mConfig.buildName ) - build = &buildIt.second; - + const ProjectBuild* build = getBuild( mConfig.buildName ); if ( build ) { mApp->saveAll(); sboc->runBuild( build->getName(), mConfig.buildType, @@ -687,11 +697,7 @@ void ProjectBuildManager::buildCurrentConfig( StatusBuildOutputController* sboc, void ProjectBuildManager::cleanCurrentConfig( StatusBuildOutputController* sboc ) { if ( sboc && !isBuilding() && !getBuilds().empty() ) { - const ProjectBuild* build = nullptr; - for ( const auto& buildIt : getBuilds() ) - if ( buildIt.second.getName() == mConfig.buildName ) - build = &buildIt.second; - + const ProjectBuild* build = getBuild( mConfig.buildName ); if ( build ) sboc->runBuild( build->getName(), mConfig.buildType, getOutputParser( build->getName() ), true ); @@ -709,13 +715,22 @@ void ProjectBuildManager::runCurrentConfig( StatusAppOutputController* saoc, boo } } +bool ProjectBuildManager::hasBuildConfig() { + return !getBuilds().empty() && !mConfig.buildName.empty(); +} + +bool ProjectBuildManager::hasRunConfig() { + if ( hasBuildConfig() ) { + auto build = getBuild( mConfig.buildName ); + return build != nullptr && build->hasRun(); + } + return false; +} + void ProjectBuildManager::runConfig( StatusAppOutputController* saoc ) { if ( !isRunningApp() && !getBuilds().empty() ) { BoolScopedOp op( mRunning, true ); - const ProjectBuild* build = nullptr; - for ( const auto& buildIt : getBuilds() ) - if ( buildIt.second.getName() == mConfig.buildName ) - build = &buildIt.second; + const ProjectBuild* build = getBuild( mConfig.buildName ); if ( nullptr == build || !build->hasRun() ) return; diff --git a/src/tools/ecode/projectbuild.hpp b/src/tools/ecode/projectbuild.hpp index a573af0b1..f56b91a4d 100644 --- a/src/tools/ecode/projectbuild.hpp +++ b/src/tools/ecode/projectbuild.hpp @@ -321,6 +321,14 @@ class ProjectBuildManager { void runCurrentConfig( StatusAppOutputController* saoc, bool build, StatusBuildOutputController* sboc = nullptr ); + void editCurrentBuild(); + + bool hasRunConfig(); + + bool hasBuildConfig(); + + void selectTab(); + protected: std::string mProjectRoot; std::string mProjectFile; diff --git a/src/tools/ecode/statusappoutputcontroller.cpp b/src/tools/ecode/statusappoutputcontroller.cpp index b65240d07..3e697d7f5 100644 --- a/src/tools/ecode/statusappoutputcontroller.cpp +++ b/src/tools/ecode/statusappoutputcontroller.cpp @@ -1,6 +1,5 @@ #include "statusappoutputcontroller.hpp" #include "ecode.hpp" -#include "widgetcommandexecuter.hpp" namespace ecode { @@ -78,10 +77,15 @@ void StatusAppOutputController::run( const ProjectBuildCommand& runData, if ( runButton ) runButton->setText( mApp->i18n( "cancel_run", "Cancel Run" ) ); + mRunButton->setEnabled( false ); + mStopButton->setEnabled( true ); + const auto updateRunButton = [this]() { UIPushButton* buildButton = getRunButton( mApp ); buildButton->runOnMainThread( [this, buildButton] { buildButton->setText( mApp->i18n( "run", "Run" ) ); } ); + mRunButton->setEnabled( true ); + mStopButton->setEnabled( false ); }; auto res = pbm->run( @@ -138,9 +142,18 @@ void StatusAppOutputController::createContainer() { if ( mContainer ) return; const auto XML = R"xml( - - - + + + + + + + + + + + + )xml"; if ( mMainSplitter->getLastWidget() != nullptr ) { @@ -150,7 +163,7 @@ void StatusAppOutputController::createContainer() { mContainer = mApp->getUISceneNode() ->loadLayoutFromString( XML, mMainSplitter ) - ->asType(); + ->asType(); auto editor = mContainer->find( "app_output_output" ); editor->setLocked( true ); editor->setLineBreakingColumn( 0 ); @@ -162,6 +175,64 @@ void StatusAppOutputController::createContainer() { mScrollLocked = mAppOutput->getMaxScroll().y == mAppOutput->getScroll().y; } ); mContainer->setVisible( false ); + + mContainer->bind( "app_output_clear", mClearButton ); + mContainer->bind( "app_output_run", mRunButton ); + mContainer->bind( "app_output_stop", mStopButton ); + mContainer->bind( "app_output_find", mFindButton ); + mContainer->bind( "app_output_configure", mConfigureButton ); + + mClearButton->onClick( [this]( auto ) { + mAppOutput->getDocument().reset(); + mAppOutput->invalidateLongestLineWidth(); + mAppOutput->setScrollY( mAppOutput->getMaxScroll().y ); + } ); + + mRunButton->onClick( [this]( auto ) { + auto pbm = mApp->getProjectBuildManager(); + if ( nullptr == pbm ) + return; + if ( !pbm->hasRunConfig() ) { + UIMessageBox::New( + UIMessageBox::OK, + mApp->i18n( "must_configure_build_and_run_config", + "You must first add a build and run configuration" ) ) + ->setCloseShortcut( { KEY_ESCAPE } ) + ->setTitle( mApp->getWindowTitle() ) + ->showWhenReady() + ->on( Event::OnConfirm, [this]( auto ) { + auto pbm = mApp->getProjectBuildManager(); + if ( nullptr != pbm ) + pbm->selectTab(); + } ); + return; + } + pbm->runCurrentConfig( this, false ); + } ); + + mStopButton->onClick( [this]( auto ) { + auto pbm = mApp->getProjectBuildManager(); + if ( nullptr == pbm ) + return; + pbm->cancelRun(); + } ); + + mFindButton->onClick( [this]( auto ) { + if ( mAppOutput->getFindReplace() == nullptr || !mAppOutput->getFindReplace()->isVisible() ) + mAppOutput->showFindReplace(); + else if ( mAppOutput->getFindReplace() ) { + mAppOutput->getFindReplace()->hide(); + mAppOutput->setFocus(); + } + } ); + + mConfigureButton->onClick( [this]( auto ) { + auto pbm = mApp->getProjectBuildManager(); + if ( nullptr == pbm ) + return; + pbm->editCurrentBuild(); + hide(); + } ); } } // namespace ecode diff --git a/src/tools/ecode/statusappoutputcontroller.hpp b/src/tools/ecode/statusappoutputcontroller.hpp index 1e5c2f19a..d9f3ed5b3 100644 --- a/src/tools/ecode/statusappoutputcontroller.hpp +++ b/src/tools/ecode/statusappoutputcontroller.hpp @@ -4,7 +4,6 @@ #include "projectbuild.hpp" #include "statusbuildoutputcontroller.hpp" #include "uistatusbar.hpp" -#include "widgetcommandexecuter.hpp" #include #include #include @@ -38,9 +37,14 @@ class StatusAppOutputController : public StatusBarElement { UIPushButton* getRunButton( App* app ); protected: - UIRelativeLayoutCommandExecuter* mContainer{ nullptr }; + UILinearLayout* mContainer{ nullptr }; UICodeEditor* mAppOutput{ nullptr }; std::vector mPatternHolder; + UIPushButton* mClearButton{ nullptr }; + UIPushButton* mRunButton{ nullptr }; + UIPushButton* mStopButton{ nullptr }; + UIPushButton* mFindButton{ nullptr }; + UIPushButton* mConfigureButton{ nullptr }; bool mScrollLocked{ true }; diff --git a/src/tools/ecode/statusbuildoutputcontroller.cpp b/src/tools/ecode/statusbuildoutputcontroller.cpp index 106e629c2..2e5a157a7 100644 --- a/src/tools/ecode/statusbuildoutputcontroller.cpp +++ b/src/tools/ecode/statusbuildoutputcontroller.cpp @@ -174,6 +174,9 @@ void StatusBuildOutputController::runBuild( const std::string& buildName, buildButton->setText( mApp->i18n( "cancel_build", "Cancel Build" ) ); } + mBuildButton->setEnabled( false ); + mStopButton->setEnabled( true ); + const auto updateBuildButton = [this, isClean, enableBuildButton, enableCleanButton]() { UIPushButton* buildButton = getBuildButton( mApp ); UIPushButton* cleanButton = getCleanButton( mApp ); @@ -193,6 +196,9 @@ void StatusBuildOutputController::runBuild( const std::string& buildName, if ( enableCleanButton && cleanButton ) cleanButton->runOnMainThread( [cleanButton] { cleanButton->setEnabled( true ); } ); + + mBuildButton->setEnabled( true ); + mStopButton->setEnabled( false ); }; auto res = pbm->build( @@ -342,11 +348,11 @@ class StatusMessageModel : public Model { virtual std::string columnName( const size_t& idx ) const { switch ( idx ) { case 2: - return mSceneNode->i18n( "message", "Message" ); + return mSceneNode->i18n( "line", "Line" ); case 1: return mSceneNode->i18n( "file", "File" ); case 0: - return mSceneNode->i18n( "line", "Line" ); + return mSceneNode->i18n( "message", "Message" ); } return ""; } @@ -369,25 +375,37 @@ void StatusBuildOutputController::onLoadDone( const Variant& lineNum, const Vari } void StatusBuildOutputController::setHeaderWidth() { - auto totWidth = mTableIssues->getPixelsSize().getWidth() - + auto totWidth = eefloor( mTableIssues->getPixelsSize().getWidth() - ( mTableIssues->getVerticalScrollBar()->isVisible() ? mTableIssues->getVerticalScrollBar()->getPixelsSize().getWidth() - : 0.f ); - mTableIssues->setColumnWidth( 0, totWidth * 0.80f ); - mTableIssues->setColumnWidth( 1, totWidth * 0.15f ); - mTableIssues->setColumnWidth( 2, totWidth * 0.05f ); + : 0.f ) ); + Float col1 = eefloor( totWidth * 0.80f ); + Float col2 = eefloor( totWidth * 0.15f ); + Float col3 = totWidth - col1 - col2; + mTableIssues->setColumnWidth( 0, col1 ); + mTableIssues->setColumnWidth( 1, col2 ); + mTableIssues->setColumnWidth( 2, col3 ); } void StatusBuildOutputController::createContainer() { if ( mContainer ) return; const auto XML = R"xml( - - - - - - + + + + + + + + + + + + + + + )xml"; if ( mMainSplitter->getLastWidget() != nullptr ) { @@ -397,7 +415,9 @@ void StatusBuildOutputController::createContainer() { mContainer = mApp->getUISceneNode() ->loadLayoutFromString( XML, mMainSplitter ) - ->asType(); + ->asType(); + mRelLayCE = mContainer->find( "build_output_command_executer" ) + ->asType(); auto editor = mContainer->find( "build_output_output" ); editor->setLocked( true ); editor->setLineBreakingColumn( 0 ); @@ -501,18 +521,76 @@ void StatusBuildOutputController::createContainer() { mScrollLocked = mBuildOutput->getMaxScroll().y == mBuildOutput->getScroll().y; } ); mContainer->setVisible( false ); - mContainer->setCommand( "build-output-show-build-output", [this]() { showBuildOutput(); } ); - mContainer->setCommand( "build-output-show-build-issues", [this]() { showIssues(); } ); - mContainer->getKeyBindings().addKeybind( { KEY_1, KeyMod::getDefaultModifier() }, - "build-output-show-build-output" ); - mContainer->getKeyBindings().addKeybind( { KEY_2, KeyMod::getDefaultModifier() }, - "build-output-show-build-issues" ); + mRelLayCE->setCommand( "build-output-show-build-output", [this]() { showBuildOutput(); } ); + mRelLayCE->setCommand( "build-output-show-build-issues", [this]() { showIssues(); } ); + mRelLayCE->getKeyBindings().addKeybind( { KEY_1, KeyMod::getDefaultModifier() }, + "build-output-show-build-output" ); + mRelLayCE->getKeyBindings().addKeybind( { KEY_2, KeyMod::getDefaultModifier() }, + "build-output-show-build-issues" ); mButOutput->onClick( [this]( auto ) { showBuildOutput(); } ); mButIssues->onClick( [this]( auto ) { showIssues(); } ); mButOutput->setTooltipText( - mContainer->getKeyBindings().getCommandKeybindString( "build-output-show-build-output" ) ); + mRelLayCE->getKeyBindings().getCommandKeybindString( "build-output-show-build-output" ) ); mButIssues->setTooltipText( - mContainer->getKeyBindings().getCommandKeybindString( "build-output-show-build-issues" ) ); + mRelLayCE->getKeyBindings().getCommandKeybindString( "build-output-show-build-issues" ) ); + + mContainer->bind( "build_output_clear", mClearButton ); + mContainer->bind( "build_output_build", mBuildButton ); + mContainer->bind( "build_output_stop", mStopButton ); + mContainer->bind( "build_output_find", mFindButton ); + mContainer->bind( "build_output_configure", mConfigureButton ); + + mClearButton->onClick( [this]( auto ) { + mBuildOutput->getDocument().reset(); + mBuildOutput->invalidateLongestLineWidth(); + mBuildOutput->setScrollY( mBuildOutput->getMaxScroll().y ); + } ); + + mBuildButton->onClick( [this]( auto ) { + auto pbm = mApp->getProjectBuildManager(); + if ( nullptr == pbm ) + return; + if ( !pbm->hasBuildConfig() ) { + UIMessageBox::New( UIMessageBox::OK, + mApp->i18n( "must_configure_build_config", + "You must first add a build configuration" ) ) + ->setCloseShortcut( { KEY_ESCAPE } ) + ->setTitle( mApp->getWindowTitle() ) + ->showWhenReady() + ->on( Event::OnConfirm, [this]( auto ) { + auto pbm = mApp->getProjectBuildManager(); + if ( nullptr != pbm ) + pbm->selectTab(); + } ); + return; + } + pbm->buildCurrentConfig( this ); + } ); + + mStopButton->onClick( [this]( auto ) { + auto pbm = mApp->getProjectBuildManager(); + if ( nullptr == pbm ) + return; + pbm->cancelBuild(); + } ); + + mFindButton->onClick( [this]( auto ) { + if ( mBuildOutput->getFindReplace() == nullptr || + !mBuildOutput->getFindReplace()->isVisible() ) + mBuildOutput->showFindReplace(); + else if ( mBuildOutput->getFindReplace() ) { + mBuildOutput->getFindReplace()->hide(); + mBuildOutput->setFocus(); + } + } ); + + mConfigureButton->onClick( [this]( auto ) { + auto pbm = mApp->getProjectBuildManager(); + if ( nullptr == pbm ) + return; + pbm->editCurrentBuild(); + hide(); + } ); } } // namespace ecode diff --git a/src/tools/ecode/statusbuildoutputcontroller.hpp b/src/tools/ecode/statusbuildoutputcontroller.hpp index 16a796e49..b978eb9a2 100644 --- a/src/tools/ecode/statusbuildoutputcontroller.hpp +++ b/src/tools/ecode/statusbuildoutputcontroller.hpp @@ -3,7 +3,6 @@ #include "projectbuild.hpp" #include "uistatusbar.hpp" -#include "widgetcommandexecuter.hpp" #include #include #include @@ -19,6 +18,7 @@ using namespace EE::UI::Tools; namespace ecode { class App; +class UIRelativeLayoutCommandExecuter; struct StatusMessage { ProjectOutputParserTypes type; @@ -56,11 +56,17 @@ class StatusBuildOutputController : public StatusBarElement { void showBuildOutput(); protected: - UIRelativeLayoutCommandExecuter* mContainer{ nullptr }; + UILinearLayout* mContainer{ nullptr }; + UIRelativeLayoutCommandExecuter* mRelLayCE{ nullptr }; UICodeEditor* mBuildOutput{ nullptr }; UISelectButton* mButOutput{ nullptr }; UISelectButton* mButIssues{ nullptr }; UITableView* mTableIssues{ nullptr }; + UIPushButton* mClearButton{ nullptr }; + UIPushButton* mBuildButton{ nullptr }; + UIPushButton* mStopButton{ nullptr }; + UIPushButton* mFindButton{ nullptr }; + UIPushButton* mConfigureButton{ nullptr }; std::vector mStatusResults; std::vector mPatternHolder;