]> Creatis software - crea.git/blob - lib/creaDevManagerLib/wxCDMProjectActionsPanel.cpp
Feature #1711 CreaDevManager application implementation
[crea.git] / lib / creaDevManagerLib / wxCDMProjectActionsPanel.cpp
1 /*
2 # ---------------------------------------------------------------------
3 #
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image 
5 #                        pour la Sant�)
6 # # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7 #
8 #  This software is governed by the CeCILL-B license under French law and 
9 #  abiding by the rules of distribution of free software. You can  use, 
10 #  modify and/ or redistribute the software under the terms of the CeCILL-B 
11 #  license as circulated by CEA, CNRS and INRIA at the following URL 
12 #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
13 #  or in the file LICENSE.txt.
14 #
15 #  As a counterpart to the access to the source code and  rights to copy,
16 #  modify and redistribute granted by the license, users are provided only
17 #  with a limited warranty  and the software's author,  the holder of the
18 #  economic rights,  and the successive licensors  have only  limited
19 #  liability. 
20 #
21 #  The fact that you are presently reading this means that you have had
22 #  knowledge of the CeCILL-B license and that you accept its terms.
23 # ------------------------------------------------------------------------ 
24  */
25
26
27 /*
28  * wxCDMProjectActionsPanel.cpp
29  *
30  *  Created on: 25/10/2012
31  *      Author: Daniel Felipe Gonzalez Obando
32  */
33
34 #include "wxCDMProjectActionsPanel.h"
35
36 #include <wx/progdlg.h>
37
38 #include "creaDevManagerIds.h"
39
40 #include <map>
41 #include "wxCDMProjectStructureReportDialog.h"
42
43 BEGIN_EVENT_TABLE(wxCDMProjectActionsPanel, wxPanel)
44 EVT_BUTTON(ID_BUTTON_CHECK_PROJECT, wxCDMProjectActionsPanel::OnBtnCheckProjectStructure)
45 EVT_BUTTON(ID_BUTTON_BUILD_PROJECT, wxCDMProjectActionsPanel::OnBtnBuildProject)
46 EVT_BUTTON(ID_BUTTON_CONFIGURE_BUILD, wxCDMProjectActionsPanel::OnBtnConfigureBuild)
47 EVT_BUTTON(ID_BUTTON_CONNECT_PROJECT, wxCDMProjectActionsPanel::OnBtnConnectProject)
48 END_EVENT_TABLE()
49
50 wxCDMProjectActionsPanel::wxCDMProjectActionsPanel(
51     wxWindow* parent,
52     modelCDMProject* project,
53     wxWindowID id,
54     const wxString& caption,
55     const wxPoint& pos,
56     const wxSize& size,
57     long style
58 )
59 {
60   wxCDMProjectActionsPanel::Create(parent,id,caption,pos,size,style);
61   this->project = project;
62 }
63
64 wxCDMProjectActionsPanel::~wxCDMProjectActionsPanel()
65 {
66 }
67
68 bool wxCDMProjectActionsPanel::Create(
69     wxWindow* parent,
70     wxWindowID id,
71     const wxString& caption,
72     const wxPoint& pos,
73     const wxSize& size,
74     long style
75 )
76 {
77   wxPanel::Create(parent,id,pos,size,style);
78   wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
79   this->SetSizer(sizer);
80   CreateControls();
81   // this part makes the scrollbars show up
82   this->FitInside(); // ask the sizer about the needed size
83   this->SetScrollRate(5, 5);
84
85   return TRUE;
86 }
87
88 void wxCDMProjectActionsPanel::CreateControls()
89 {
90   wxButton* checkStructbt = new wxButton(this, ID_BUTTON_CHECK_PROJECT, _T("1. Check Project Structure"));
91   checkStructbt->SetToolTip(wxT("This step checks the project structure and tells what is going to be compiled."));
92   wxButton* configurebt = new wxButton(this, ID_BUTTON_CONFIGURE_BUILD, _T("2. Configure Project (CMake)"));
93   configurebt->SetToolTip(wxT("This is the second step in order to execute the project. Make sure you have selected the desired Build location."));
94   wxButton* compilebt = new wxButton(this, ID_BUTTON_BUILD_PROJECT, _T("3. Compile Project"));
95   compilebt->SetToolTip(wxT("This step should be done after configuring the project. This will create the executables."));
96   wxButton* plugbt = new wxButton(this, ID_BUTTON_CONNECT_PROJECT, _T("4. Plug Packages (BBTK)"));
97   plugbt->SetToolTip(wxT("This step should be done after compiling the project. This will allow to use the boxes in this project to be available in the bbEditor."));
98   this->GetSizer()->Add(checkStructbt, 0, wxALL, 5);
99   this->GetSizer()->Add(configurebt, 0, wxALL, 5);
100   this->GetSizer()->Add(compilebt, 0, wxALL, 5);
101   this->GetSizer()->Add(plugbt, 0, wxALL, 5);
102 }
103
104 //check project structure
105 void wxCDMProjectActionsPanel::OnBtnCheckProjectStructure(wxCommandEvent& event)
106 {
107   std::map<std::string, bool> prjStruct;
108   this->project->CheckStructure(prjStruct);
109   std::cout << prjStruct.size() << std::endl;
110   wxCDMProjectStructureReportDialog* structure = new wxCDMProjectStructureReportDialog(this->GetParent(), prjStruct, wxID_ANY);
111   structure->Show(true);
112 }
113
114 //configure project
115 void wxCDMProjectActionsPanel::OnBtnConfigureBuild(wxCommandEvent& event)
116 {
117   std::string* result;
118   if(!this->project->ConfigureBuild(result))
119     {
120       wxMessageBox(crea::std2wx(result->c_str()), wxT("Project Configuration - Error!"));
121       return;
122     }
123   wxMessageBox(crea::std2wx("The configuration was executed successfully."), wxT("Project Configuration"));
124 }
125
126 //compile project
127 void wxCDMProjectActionsPanel::OnBtnBuildProject(wxCommandEvent& event)
128 {
129 #ifdef _WIN32
130   std::string* result;
131   if(!this->project->Build(result, ""))
132     {
133       wxMessageBox(crea::std2wx(result->c_str()), wxT("Project Compilation - Error!"));
134       return;
135     }
136 #else
137   //get author from user
138   wxTextEntryDialog* buildDlg = new wxTextEntryDialog(
139       this,
140       wxT("Enter the compilation instruction:"),
141       wxT("Project Compilation- creaDevManager"),
142       crea::std2wx(this->project->GetBuildInstruction()),
143       wxTE_MULTILINE | wxOK | wxCANCEL
144   );
145
146   if (buildDlg->ShowModal() == wxID_OK)
147     {
148       std::string buildDlgStr = crea::wx2std(buildDlg->GetValue());
149       //check name
150       if (buildDlgStr != "")
151         {
152           std::string* result;
153           //wxProgressDialog* loadBar = new wxProgressDialog(wxT("Compiling"), wxT("Please wait while the compilation is executing..."), 100, this);
154           //loadBar->Pulse();
155           if(!this->project->Build(result, buildDlgStr))
156             {
157               //loadBar->Destroy();
158               wxMessageBox(crea::std2wx(result->c_str()), wxT("Project Compilation - Error!"));
159               return;
160             }
161           //loadBar->Destroy();
162           //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"));
163         }
164     }
165 #endif
166 }
167 //plug packages
168 void wxCDMProjectActionsPanel::OnBtnConnectProject(wxCommandEvent& event)
169 {
170   std::string* result;
171   int isDir = wxMessageBox(crea::std2wx("Is this the path of the project compilation to plug?:\n"+this->project->GetBuildPath()), wxT("Plug BBTK Packages"), wxYES_NO|wxCANCEL);
172   if(isDir != wxCANCEL)
173     {
174       wxString file = crea::std2wx(this->project->GetBuildPath());
175       if(isDir == wxNO)
176         {
177           file = wxDirSelector(
178               wxT("Please select the folder containing the bbtkPackage file you want to use. Usually it is where you built your project."),
179               crea::std2wx(this->project->GetBuildPath())
180           );
181         }
182
183       if(!file.IsEmpty())
184         {
185           if(!this->project->Connect(result, crea::wx2std(file)))
186             {
187               wxMessageBox(crea::std2wx(result->c_str()), wxT("Plug BBTK Packages - Error!"), wxICON_ERROR);
188               return;
189             }
190           else
191             {
192               wxMessageBox(crea::std2wx("The connection was executed successfully. Please check the console to see the compilation result.\n Also, don't forget to restart the BBTK Graphical Editor (if already opened) to see the plugged packages."), wxT("Plug Package"));
193             }
194
195         }
196
197     }
198 }