From bbdef4f90fba618806e17e589b7d71cc76095f5b Mon Sep 17 00:00:00 2001 From: Daniel Gonzalez Date: Tue, 15 Jan 2013 15:52:00 +0100 Subject: [PATCH] Feature #1711 CreaDevManager application implementation -Allow user to configure command line to excecute for compilation before perform it. -Now the compilation output is shown in a second terminal. --- lib/creaDevManagerLib/modelCDMProject.cpp | 30 ++++++++++-- lib/creaDevManagerLib/modelCDMProject.h | 8 +++- .../wxCDMProjectActionsPanel.cpp | 46 +++++++++++++------ 3 files changed, 65 insertions(+), 19 deletions(-) diff --git a/lib/creaDevManagerLib/modelCDMProject.cpp b/lib/creaDevManagerLib/modelCDMProject.cpp index 50f6cc2..501d059 100644 --- a/lib/creaDevManagerLib/modelCDMProject.cpp +++ b/lib/creaDevManagerLib/modelCDMProject.cpp @@ -248,6 +248,12 @@ modelCDMLib* modelCDMProject::GetLib() const return this->lib; } +std::string modelCDMProject::GetBuildInstruction() const +{ + std::string makeComm = "make -C \"" + this->buildPath + "\""; /*> \"" + this->buildPath + CDMUtilities::SLASH + "building.log\" 2>&1";*/ + return makeComm; +} + bool modelCDMProject::SetVersion(const std::string& version, std::string*& result) { @@ -706,7 +712,7 @@ bool modelCDMProject::ConfigureBuild(std::string*& result) return true; } -bool modelCDMProject::Build(std::string*& result) +bool modelCDMProject::Build(std::string*& result, const std::string& line) { //TODO: adjust for windows and mac #ifdef _WIN32 @@ -725,7 +731,25 @@ bool modelCDMProject::Build(std::string*& result) return false; } //create make command - std::string makeComm = "make -C \"" + this->buildPath + "\" > \"" + this->buildPath + CDMUtilities::SLASH + "building.log\" 2>&1"; + std::string makeComm = "gnome-terminal -e \"bash -c \\\""; + for (int i = 0; i < line.size(); i++) + { + if(line[i] == '"') + { + makeComm+="\\\\\\\""; + } + else if(line[i] == '\\') + { + makeComm+="\\\\\\\\"; + } + else + { + makeComm.push_back(line[i]); + } + } + makeComm += "; echo -e '\\a'; bash"; + makeComm += "\\\"\""; + std::cout << "executing '" << makeComm << "'" << std::endl; //execute make command if(system(makeComm.c_str())) @@ -763,7 +787,7 @@ bool modelCDMProject::Connect(std::string*& result) if(system(plugComm.c_str())) { //if there was an error then report it - result = new std::string("There was an error plugging the packages of the project, please check the \"plugging.log\" file located in the build folder to read more about the problem."); + result = new std::string("There was an error plugging the packages of the project, please check the console to read more about the problem."); return false; } #endif diff --git a/lib/creaDevManagerLib/modelCDMProject.h b/lib/creaDevManagerLib/modelCDMProject.h index e4ab0ca..87d1d37 100644 --- a/lib/creaDevManagerLib/modelCDMProject.h +++ b/lib/creaDevManagerLib/modelCDMProject.h @@ -117,6 +117,12 @@ public: */ modelCDMLib* GetLib() const; + /** + * Retrieves the default make instruction to compile the project. + * @return The make instruction to compile. + */ + std::string GetBuildInstruction() const; + //Setters /** @@ -229,7 +235,7 @@ public: * @param result Result message for building the project. * @return if any of the commands cannot be executed it return false. */ - bool Build(std::string*& result); + bool Build(std::string*& result, const std::string& line); /** * Launches in console the bbPlugPackage command to connect the project to the .bbtk folder in the hard drive. diff --git a/lib/creaDevManagerLib/wxCDMProjectActionsPanel.cpp b/lib/creaDevManagerLib/wxCDMProjectActionsPanel.cpp index 5b5cc09..2d89a2d 100755 --- a/lib/creaDevManagerLib/wxCDMProjectActionsPanel.cpp +++ b/lib/creaDevManagerLib/wxCDMProjectActionsPanel.cpp @@ -107,27 +107,43 @@ void wxCDMProjectActionsPanel::OnBtnConfigureBuild(wxCommandEvent& event) //compile project void wxCDMProjectActionsPanel::OnBtnBuildProject(wxCommandEvent& event) { - std::string* result; - //wxProgressDialog* loadBar = new wxProgressDialog(wxT("Compiling"), wxT("Please wait while the compilation is executing..."), 100, this); - //loadBar->Pulse(); - if(!this->project->Build(result)) + //get author from user + wxTextEntryDialog* buildDlg = new wxTextEntryDialog( + this, + wxT("Enter the compilation instruction:"), + wxT("Project Compilation- creaDevManager"), + crea::std2wx(this->project->GetBuildInstruction()), + wxTE_MULTILINE | wxOK | wxCANCEL + ); + + if (buildDlg->ShowModal() == wxID_OK) { - //loadBar->Destroy(); - wxMessageBox(crea::std2wx(result->c_str()), wxT("Project Compilation - Error!")); - return; + std::string buildDlgStr = crea::wx2std(buildDlg->GetValue()); + //check name + if (buildDlgStr != "") + { + std::string* result; + //wxProgressDialog* loadBar = new wxProgressDialog(wxT("Compiling"), wxT("Please wait while the compilation is executing..."), 100, this); + //loadBar->Pulse(); + if(!this->project->Build(result, buildDlgStr)) + { + //loadBar->Destroy(); + wxMessageBox(crea::std2wx(result->c_str()), wxT("Project Compilation - Error!")); + return; + } + //loadBar->Destroy(); + //wxMessageBox(crea::std2wx("The compilation was executed successfully. Please check the \"building.log\" file located in the build folder to check the compilation result."), wxT("Project Compilation")); + } } - //loadBar->Destroy(); - wxMessageBox(crea::std2wx("The compilation was executed successfully. Please check the \"building.log\" file located in the build folder to check the compilation result."), wxT("Project Compilation")); } - //plug packages void wxCDMProjectActionsPanel::OnBtnConnectProject(wxCommandEvent& event) { std::string* result; if(!this->project->Connect(result)) - { - wxMessageBox(crea::std2wx(result->c_str()), wxT("Plug Packages - Error!")); - return; - } - wxMessageBox(crea::std2wx("The connection was executed successfully. Please check the \"plugging.log\" file located in the build folder to check the compilation result."), wxT("Plug Package")); + { + wxMessageBox(crea::std2wx(result->c_str()), wxT("Plug Packages - Error!")); + return; + } + wxMessageBox(crea::std2wx("The connection was executed successfully. Please check the \"plugging.log\" file located in the build folder to check the compilation result."), wxT("Plug Package")); } -- 2.47.1