mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-08-09 08:19:25 +03:00
Added a Run step for the Build Settings (SpartanJ/ecode#222).
This commit is contained in:
@@ -198,9 +198,11 @@ class UICustomOutputParserWindow : public UIWindow {
|
||||
|
||||
class UIBuildStep : public UILinearLayout {
|
||||
public:
|
||||
static UIBuildStep* New( bool isBuildStep, UIBuildSettings* buildSettings, size_t stepNum,
|
||||
enum class StepType { Build, Clean, Run };
|
||||
|
||||
static UIBuildStep* New( StepType stepType, UIBuildSettings* buildSettings, size_t stepNum,
|
||||
ProjectBuildStep* buildStep ) {
|
||||
return eeNew( UIBuildStep, ( isBuildStep, buildSettings, stepNum, buildStep ) );
|
||||
return eeNew( UIBuildStep, ( stepType, buildSettings, stepNum, buildStep ) );
|
||||
}
|
||||
|
||||
void clearBindings() { mDataBindHolder.clear(); }
|
||||
@@ -213,12 +215,16 @@ class UIBuildStep : public UILinearLayout {
|
||||
mStep = buildStep;
|
||||
addClass( String::toString( mStepNum ) );
|
||||
|
||||
findByClass<UITextView>( "step_name" )
|
||||
->setText( String::format( mBuildSettings->getUISceneNode()
|
||||
->i18n( "build_step_num", "Step %u: %s" )
|
||||
.toUtf8()
|
||||
.c_str(),
|
||||
mStepNum + 1, mStep->cmd.c_str() ) );
|
||||
auto stepName = findByClass<UITextView>( "step_name" );
|
||||
if ( isBuildOrClean() ) {
|
||||
stepName->setText( String::format( mBuildSettings->getUISceneNode()
|
||||
->i18n( "build_step_num", "Step %u: %s" )
|
||||
.toUtf8()
|
||||
.c_str(),
|
||||
mStepNum + 1, mStep->cmd.c_str() ) );
|
||||
} else {
|
||||
stepName->setText( getUISceneNode()->i18n( "executable_to_run", "Executable to Run" ) );
|
||||
}
|
||||
|
||||
mDataBindHolder +=
|
||||
UIDataBindBool::New( &mStep->enabled, findByClass( "enabled_checkbox" ) );
|
||||
@@ -226,13 +232,15 @@ class UIBuildStep : public UILinearLayout {
|
||||
mDataBindHolder += UIDataBindString::New( &mStep->args, findByClass( "input_args" ) );
|
||||
mDataBindHolder +=
|
||||
UIDataBindString::New( &mStep->workingDir, findByClass( "input_working_dir" ) );
|
||||
mDataBindHolder +=
|
||||
UIDataBindBool::New( &mStep->runInTerminal, findByClass( "run_in_terminal" ) );
|
||||
}
|
||||
|
||||
protected:
|
||||
UIBuildStep( bool isBuildStep, UIBuildSettings* buildSettings, size_t stepNum,
|
||||
UIBuildStep( StepType stepType, UIBuildSettings* buildSettings, size_t stepNum,
|
||||
ProjectBuildStep* buildStep ) :
|
||||
UILinearLayout( "buildstep", UIOrientation::Vertical ),
|
||||
mIsBuildStep( isBuildStep ),
|
||||
mStepType( stepType ),
|
||||
mBuildSettings( buildSettings ),
|
||||
mStepNum( stepNum ),
|
||||
mStep( buildStep ) {
|
||||
@@ -241,7 +249,6 @@ class UIBuildStep : public UILinearLayout {
|
||||
addClass( String::toString( stepNum ) );
|
||||
|
||||
static const auto BUILD_STEP_XML = R"xml(
|
||||
<!-- <vbox lw="mp" lh="wc" class="build_step"> -->
|
||||
<hbox class="header" lw="mp" lh="wc">
|
||||
<TextView lw="0" lw8="1" class="step_name" />
|
||||
<CheckBox class="enabled_checkbox" checked="true" layout_gravity="center_vertical" tooltip="@string(enabled_question, Enabled?)" />
|
||||
@@ -263,34 +270,59 @@ class UIBuildStep : public UILinearLayout {
|
||||
<TextView lh="mp" min-width="100dp" text="@string(working_dir, Working Directory)" />
|
||||
<Input class="input_working_dir" lw="0" lw8="1" />
|
||||
</hbox>
|
||||
<CheckBox class="run_in_terminal" text="@string(run_in_terminal, Run in terminal)" visible="false" />
|
||||
</vbox>
|
||||
<!-- </vbox> -->
|
||||
)xml";
|
||||
|
||||
getUISceneNode()->loadLayoutFromString( BUILD_STEP_XML, this );
|
||||
|
||||
if ( !isBuildOrClean() ) {
|
||||
findByClass( "enabled_checkbox" )->setVisible( false );
|
||||
auto runInTerminal = findByClass( "run_in_terminal" )->asType<UICheckBox>();
|
||||
runInTerminal->setVisible( true );
|
||||
runInTerminal->setChecked( buildStep->runInTerminal );
|
||||
}
|
||||
|
||||
findByClass( "details_but" )->onClick( [this]( const MouseEvent* event ) {
|
||||
auto me = event->getNode()->asType<UIPushButton>();
|
||||
findByClass( "details" )->setVisible( me->hasClass( "contracted" ) );
|
||||
me->toggleClass( "contracted" );
|
||||
} );
|
||||
|
||||
findByClass( "move_down" )->onClick( [this]( auto ) {
|
||||
mBuildSettings->moveStepDown( mStepNum, !mIsBuildStep );
|
||||
} );
|
||||
auto moveDown = findByClass( "move_down" );
|
||||
if ( isBuildOrClean() ) {
|
||||
moveDown->onClick( [this]( auto ) {
|
||||
mBuildSettings->moveStepDown( mStepNum, mStepType == StepType::Clean );
|
||||
} );
|
||||
} else {
|
||||
moveDown->setVisible( false );
|
||||
}
|
||||
|
||||
findByClass( "move_up" )->onClick( [this]( auto ) {
|
||||
mBuildSettings->moveStepUp( mStepNum, !mIsBuildStep );
|
||||
} );
|
||||
auto moveUp = findByClass( "move_up" );
|
||||
if ( isBuildOrClean() ) {
|
||||
moveUp->onClick( [this]( auto ) {
|
||||
mBuildSettings->moveStepUp( mStepNum, mStepType == StepType::Clean );
|
||||
} );
|
||||
} else {
|
||||
moveUp->setVisible( false );
|
||||
}
|
||||
|
||||
findByClass( "remove_item" )->onClick( [this]( auto ) {
|
||||
mBuildSettings->deleteStep( mStepNum, !mIsBuildStep );
|
||||
} );
|
||||
auto removeItem = findByClass( "remove_item" );
|
||||
|
||||
if ( isBuildOrClean() ) {
|
||||
removeItem->onClick( [this]( auto ) {
|
||||
mBuildSettings->deleteStep( mStepNum, mStepType == StepType::Clean );
|
||||
} );
|
||||
} else {
|
||||
removeItem->setVisible( false );
|
||||
}
|
||||
|
||||
updateStep( mStepNum, mStep );
|
||||
}
|
||||
|
||||
bool mIsBuildStep{ true };
|
||||
bool isBuildOrClean() { return mStepType == StepType::Build || mStepType == StepType::Clean; }
|
||||
|
||||
StepType mStepType{ true };
|
||||
UIBuildSettings* mBuildSettings{ nullptr };
|
||||
size_t mStepNum{ 0 };
|
||||
ProjectBuildStep* mStep;
|
||||
@@ -332,6 +364,11 @@ static const auto SETTINGS_PANEL_XML = R"xml(
|
||||
<PushButton id="add_clean_step" class="add_build_step" text="@string(add_clean_step, Add Clean Step)" />
|
||||
</vbox>
|
||||
|
||||
<vbox lw="mp" lh="wc" class="run_step">
|
||||
<TextView class="subtitle" text="@string(run, Run)" />
|
||||
<vbox id="run_step_cont" lw="mp" lh="wc"></vbox>
|
||||
</vbox>
|
||||
|
||||
<vbox lw="mp" lh="wc" class="build_types">
|
||||
<TextView class="subtitle" text="@string(build_types, Build Types)" />
|
||||
<TextView lw="mp" lh="wc" word-wrap="true" text="@string(build_types_desc, Build types can be used as a dynamic build option represented by the special key ${build_type}. The build type can be switch easily from the editor.)" />
|
||||
@@ -465,29 +502,34 @@ UIBuildSettings::UIBuildSettings(
|
||||
|
||||
auto buildStepsParent = find( "build_steps_cont" );
|
||||
for ( size_t step = 0; step < mBuild.mBuild.size(); ++step ) {
|
||||
auto bs = UIBuildStep::New( true, this, step, &mBuild.mBuild[step] );
|
||||
auto bs =
|
||||
UIBuildStep::New( UIBuildStep::StepType::Build, this, step, &mBuild.mBuild[step] );
|
||||
bs->setParent( buildStepsParent );
|
||||
}
|
||||
|
||||
find( "add_build_step" )->onClick( [this, buildStepsParent]( const Event* ) {
|
||||
mBuild.mBuild.push_back( {} );
|
||||
auto step = mBuild.mBuild.size() - 1;
|
||||
UIBuildStep::New( true, this, step, &mBuild.mBuild[step] )->setParent( buildStepsParent );
|
||||
UIBuildStep::New( UIBuildStep::StepType::Build, this, step, &mBuild.mBuild[step] )
|
||||
->setParent( buildStepsParent );
|
||||
} );
|
||||
|
||||
auto buildCleanStepsParent = find( "build_clean_steps_cont" );
|
||||
for ( size_t step = 0; step < mBuild.mClean.size(); ++step ) {
|
||||
UIBuildStep::New( false, this, step, &mBuild.mClean[step] )
|
||||
UIBuildStep::New( UIBuildStep::StepType::Clean, this, step, &mBuild.mClean[step] )
|
||||
->setParent( buildCleanStepsParent );
|
||||
}
|
||||
|
||||
find( "add_clean_step" )->onClick( [this, buildCleanStepsParent]( const Event* ) {
|
||||
mBuild.mClean.push_back( {} );
|
||||
auto step = mBuild.mClean.size() - 1;
|
||||
UIBuildStep::New( false, this, step, &mBuild.mClean[step] )
|
||||
UIBuildStep::New( UIBuildStep::StepType::Clean, this, step, &mBuild.mClean[step] )
|
||||
->setParent( buildCleanStepsParent );
|
||||
} );
|
||||
|
||||
UIBuildStep::New( UIBuildStep::StepType::Run, this, 0, &mBuild.mRun )
|
||||
->setParent( find( "run_step_cont" ) );
|
||||
|
||||
auto buildTypeDropDown = find<UIDropDownList>( "build_type_list" );
|
||||
auto panelBuildTypeDDL = getUISceneNode()
|
||||
->getRoot()
|
||||
|
||||
Reference in New Issue
Block a user