]> Creatis software - crea.git/blob - lib/creaDevManagerLib/wxCDMProjectActionsPanel.cpp
5b5510e77a9568c4a241d90952ee932a221652d1
[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   // this part makes the scrollbars show up
79   this->FitInside(); // ask the sizer about the needed size
80   this->SetScrollRate(5, 5);
81
82   wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
83   this->SetSizer(sizer);
84
85   CreateControls();
86
87   return TRUE;
88 }
89
90 void wxCDMProjectActionsPanel::CreateControls()
91 {
92   wxButton* checkStructbt = new wxButton(this, ID_BUTTON_CHECK_PROJECT, _T("1. Check Project Structure"));
93   checkStructbt->SetToolTip(wxT("This step checks the project structure and tells what is going to be compiled."));
94   wxButton* configurebt = new wxButton(this, ID_BUTTON_CONFIGURE_BUILD, _T("2. Configure Project (CMake)"));
95   configurebt->SetToolTip(wxT("This is the second step in order to execute the project. Make sure you have selected the desired Build location."));
96   wxButton* compilebt = new wxButton(this, ID_BUTTON_BUILD_PROJECT, _T("3. Compile Project"));
97   compilebt->SetToolTip(wxT("This step should be done after configuring the project. This will create the executables."));
98   wxButton* plugbt = new wxButton(this, ID_BUTTON_CONNECT_PROJECT, _T("4. Plug Packages (BBTK)"));
99   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."));
100   this->GetSizer()->Add(checkStructbt, 0, wxALL, 5);
101   this->GetSizer()->Add(configurebt, 0, wxALL, 5);
102   this->GetSizer()->Add(compilebt, 0, wxALL, 5);
103   this->GetSizer()->Add(plugbt, 0, wxALL, 5);
104 }
105
106 //check project structure
107 void wxCDMProjectActionsPanel::OnBtnCheckProjectStructure(wxCommandEvent& event)
108 {
109   std::map<std::string, bool> prjStruct;
110   this->project->CheckStructure(prjStruct);
111   std::cout << prjStruct.size() << std::endl;
112   wxCDMProjectStructureReportDialog* structure = new wxCDMProjectStructureReportDialog(this->GetParent(), prjStruct, wxID_ANY);
113   structure->Show(true);
114 }
115
116 //configure project
117 void wxCDMProjectActionsPanel::OnBtnConfigureBuild(wxCommandEvent& event)
118 {
119   std::string* result;
120   if(!this->project->ConfigureBuild(result))
121     {
122       wxMessageBox(crea::std2wx(result->c_str()), wxT("Project Configuration - Error!"));
123       return;
124     }
125   wxMessageBox(crea::std2wx("The configuration was executed successfully."), wxT("Project Configuration"));
126 }
127
128 //compile project
129 void wxCDMProjectActionsPanel::OnBtnBuildProject(wxCommandEvent& event)
130 {
131 #ifdef _WIN32
132   std::string* result;
133   if(!this->project->Build(result, ""))
134     {
135       wxMessageBox(crea::std2wx(result->c_str()), wxT("Project Compilation - Error!"));
136       return;
137     }
138 #else
139   //get author from user
140   wxTextEntryDialog* buildDlg = new wxTextEntryDialog(
141       this,
142       wxT("Enter the compilation instruction:"),
143       wxT("Project Compilation- creaDevManager"),
144       crea::std2wx(this->project->GetBuildInstruction()),
145       wxTE_MULTILINE | wxOK | wxCANCEL
146   );
147
148   if (buildDlg->ShowModal() == wxID_OK)
149     {
150       std::string buildDlgStr = crea::wx2std(buildDlg->GetValue());
151       //check name
152       if (buildDlgStr != "")
153         {
154           std::string* result;
155           //wxProgressDialog* loadBar = new wxProgressDialog(wxT("Compiling"), wxT("Please wait while the compilation is executing..."), 100, this);
156           //loadBar->Pulse();
157           if(!this->project->Build(result, buildDlgStr))
158             {
159               //loadBar->Destroy();
160               wxMessageBox(crea::std2wx(result->c_str()), wxT("Project Compilation - Error!"));
161               return;
162             }
163           //loadBar->Destroy();
164           //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"));
165         }
166     }
167 #endif
168 }
169 //plug packages
170 void wxCDMProjectActionsPanel::OnBtnConnectProject(wxCommandEvent& event)
171 {
172   std::string* result;
173   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);
174   if(isDir != wxCANCEL)
175     {
176       wxString file = crea::std2wx(this->project->GetBuildPath());
177       if(isDir == wxNO)
178         {
179           file = wxDirSelector(
180               wxT("Please select the folder containing the bbtkPackage file you want to use. Usually it is where you built your project."),
181               crea::std2wx(this->project->GetBuildPath())
182           );
183         }
184
185       if(!file.IsEmpty())
186         {
187           if(!this->project->Connect(result, crea::wx2std(file)))
188             {
189               wxMessageBox(crea::std2wx(result->c_str()), wxT("Plug BBTK Packages - Error!"), wxICON_ERROR);
190               return;
191             }
192           else
193             {
194               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"));
195             }
196
197         }
198
199     }
200 }