]> 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
138   std::string* result;
139   int isDir = wxMessageBox(crea::std2wx("Is this the path of the project compilation?:\n"+this->project->GetBuildPath()), wxT("Project Compilation - CreaDevManager"), wxYES_NO|wxCANCEL);
140   if(isDir != wxCANCEL)
141     {
142       wxString file = crea::std2wx(this->project->GetBuildPath());
143       if(isDir == wxNO)
144         {
145           file = wxDirSelector(
146               wxT("Please select the folder where your project is to be built."),
147               crea::std2wx(this->project->GetBuildPath())
148           );
149         }
150
151       if(!file.IsEmpty())
152         {
153           this->project->SetBuildPath(crea::wx2std(file), result);
154
155           wxTextEntryDialog* buildDlg = new wxTextEntryDialog(
156                 this,
157                 wxT("Check the compilation instruction:"),
158                 wxT("Project Compilation - CreaDevManager"),
159                 crea::std2wx(this->project->GetBuildInstruction()),
160                 wxTE_MULTILINE | wxOK | wxCANCEL
161             );
162
163           if (buildDlg->ShowModal() == wxID_OK)
164             {
165               std::string buildDlgStr = crea::wx2std(buildDlg->GetValue());
166               //check line
167               if (buildDlgStr != "")
168                 {
169                   std::string* result;
170                   if(!this->project->Build(result, buildDlgStr))
171                     {
172                       wxMessageBox(crea::std2wx(result->c_str()), wxT("Project Compilation - Error!"));
173                       return;
174                     }
175                 }
176             }
177         }
178     }
179 #endif
180 }
181 //plug packages
182 void wxCDMProjectActionsPanel::OnBtnConnectProject(wxCommandEvent& event)
183 {
184   std::string* result;
185   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);
186   if(isDir != wxCANCEL)
187     {
188       wxString file = crea::std2wx(this->project->GetBuildPath());
189       if(isDir == wxNO)
190         {
191           file = wxDirSelector(
192               wxT("Please select the folder containing the bbtkPackage file you want to use. Usually it is where you built your project."),
193               crea::std2wx(this->project->GetBuildPath())
194           );
195         }
196
197       if(!file.IsEmpty())
198         {
199           if(!this->project->Connect(result, crea::wx2std(file)))
200             {
201               wxMessageBox(crea::std2wx(result->c_str()), wxT("Plug BBTK Packages - Error!"), wxICON_ERROR);
202               return;
203             }
204           else
205             {
206               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"));
207             }
208
209         }
210
211     }
212 }