]> Creatis software - crea.git/blob - lib/creaDevManagerLib/wxCDMPackageHelpDialog.cpp
acd04fe15170c08cd3fc67f7a9a5aeba55a216c2
[crea.git] / lib / creaDevManagerLib / wxCDMPackageHelpDialog.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 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9 #
10 #  This software is governed by the CeCILL-B license under French law and 
11 #  abiding by the rules of distribution of free software. You can  use, 
12 #  modify and/ or redistribute the software under the terms of the CeCILL-B 
13 #  license as circulated by CEA, CNRS and INRIA at the following URL 
14 #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
15 #  or in the file LICENSE.txt.
16 #
17 #  As a counterpart to the access to the source code and  rights to copy,
18 #  modify and redistribute granted by the license, users are provided only
19 #  with a limited warranty  and the software's author,  the holder of the
20 #  economic rights,  and the successive licensors  have only  limited
21 #  liability. 
22 #
23 #  The fact that you are presently reading this means that you have had
24 #  knowledge of the CeCILL-B license and that you accept its terms.
25 # ------------------------------------------------------------------------ 
26  */
27
28
29 /*
30  * wxCDMPackageHelpDialog.cpp
31  *
32  *  Created on: 9/1/2013
33  *      Author: Daniel Felipe Gonzalez Obando
34  */
35
36 #include "wxCDMPackageHelpDialog.h"
37
38 #include "creaDevManagerIds.h"
39
40 #include "modelCDMProject.h"
41
42 BEGIN_EVENT_TABLE(wxCDMPackageHelpDialog, wxDialog)
43 EVT_BUTTON(ID_BUTTON_OPENPROJECT, wxCDMPackageHelpDialog::OnCMakeLists)
44 EVT_BUTTON(ID_BUTTON_EDIT_CMAKELISTSFILE, wxCDMPackageHelpDialog::OnCMakeLists)
45 EVT_BUTTON(ID_BUTTON_CANCEL, wxCDMPackageHelpDialog::OnFinish)
46 EVT_CHECKBOX(ID_CHECKBOX_DISABLE_HELP, wxCDMPackageHelpDialog::OnDisableHelp)
47 END_EVENT_TABLE()
48
49 wxCDMPackageHelpDialog::wxCDMPackageHelpDialog(
50     wxWindow* parent,
51     modelCDMPackage* package,
52     wxWindowID id,
53     const wxString& caption,
54     const wxPoint& position,
55     const wxSize& size,
56     long style
57 )
58 {
59   wxCDMPackageHelpDialog::Create(parent, id, caption, position, size, style);
60   this->package = package;
61 }
62
63 wxCDMPackageHelpDialog::~wxCDMPackageHelpDialog()
64 {
65 }
66
67 bool wxCDMPackageHelpDialog::Create(
68     wxWindow* parent,
69     wxWindowID id,
70     const wxString& caption,
71     const wxPoint& position,
72     const wxSize& size,
73     long int style
74 )
75 {
76   wxDialog::Create(parent, id, caption, position, size, style);
77
78   this->CreateControls();
79
80   return TRUE;
81 }
82
83 void wxCDMPackageHelpDialog::CreateControls()
84 {
85
86   wxBoxSizer* v_sizer1 = new wxBoxSizer(wxVERTICAL);
87
88
89   wxStaticText* title = new wxStaticText(this, wxID_ANY, wxT("Working with Packages"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);//new wxRichTextCtrl(this,wxID_ANY, wxString("Create a new project"), wxDefaultPosition, wxDefaultSize, wxRE_READONLY);
90   v_sizer1->Add(title, 0, wxALIGN_LEFT | wxALL | wxALIGN_CENTER_VERTICAL, 5);
91
92   wxStaticText* instruction = new wxStaticText(
93       this,
94       wxID_ANY,
95       crea::std2wx(
96           "Packages contain black boxes, which allow to work modularly with other boxes. This boxes can use the functions "
97           "present in your libraries and expose them to work in a BBTK-fashion.\n"
98           "\n"
99           "To create a black box click on the \"Create Black Box\" button.\n"
100           "If you want to check the files in the file explorer click the \"Open Package Folder\" "
101           "button.\n"
102           "\n"
103           "Don't forget to include the libraries your black boxes use in the Package directory CMakeLists.txt file\n"
104           "Also, make sure you include this package in the Project directory CMakeLists.txt file\n"
105           "You can open these files with the following buttons."),
106           wxDefaultPosition,
107           wxDefaultSize,
108           wxALIGN_LEFT
109   );
110   v_sizer1->Add(instruction, 0,wxEXPAND | wxALL, 5);
111
112   wxButton* editCMakePkgBtn = new wxButton(this, ID_BUTTON_EDIT_CMAKELISTSFILE, wxT("Open Package's directory CMakeLists file"));
113   editCMakePkgBtn->Connect(wxEVT_ENTER_WINDOW, (wxObjectEventFunction)(wxEventFunction)(wxMouseEventFunction)&wxCDMPackageHelpDialog::OnCMakeListsEnter,NULL,this);
114   editCMakePkgBtn->Connect(wxEVT_LEAVE_WINDOW, (wxObjectEventFunction)(wxEventFunction)(wxMouseEventFunction)&wxCDMPackageHelpDialog::OnCMakeListsExit,NULL,this);
115   wxButton* editCMakePrjBtn= new wxButton(this, ID_BUTTON_OPENPROJECT, wxT("Open Project's directory CMakeLists file"));
116   editCMakePrjBtn->Connect(wxEVT_ENTER_WINDOW, (wxObjectEventFunction)(wxEventFunction)(wxMouseEventFunction)&wxCDMPackageHelpDialog::OnCMakeListsEnter,NULL,this);
117   editCMakePrjBtn->Connect(wxEVT_LEAVE_WINDOW, (wxObjectEventFunction)(wxEventFunction)(wxMouseEventFunction)&wxCDMPackageHelpDialog::OnCMakeListsExit,NULL,this);
118
119   v_sizer1->Add(editCMakePkgBtn, 0, wxEXPAND | wxLEFT | wxRIGHT, 15);
120   v_sizer1->Add(editCMakePrjBtn, 0, wxEXPAND | wxLEFT | wxRIGHT, 15);
121
122   v_sizer1->Add(new wxCheckBox(this, ID_CHECKBOX_DISABLE_HELP, wxT("&Disable help")), 0, wxALIGN_RIGHT | wxRIGHT, 10);
123
124   v_sizer1->Add(new wxButton(this, ID_BUTTON_CANCEL, wxT("Close")), 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM | wxALIGN_CENTER_VERTICAL, 30);
125
126   SetSizer(v_sizer1);
127   //v_sizer1->RecalcSizes();
128 }
129
130 void wxCDMPackageHelpDialog::OnCMakeLists(wxCommandEvent& event)
131 {
132   std::string* result;
133
134   if((int)((wxButton*)event.GetEventObject())->GetId() == (int)ID_BUTTON_EDIT_CMAKELISTSFILE)
135     {
136
137       if(!this->package->OpenCMakeListsFile(result))
138         wxMessageBox(crea::std2wx(*result),_T("Open CMakeLists File - Error!"),wxOK | wxICON_ERROR);
139
140       wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_SELECTED);
141
142       if(this->package->GetCMakeLists() != NULL)
143         {
144           int CMId = this->package->GetCMakeLists()->GetId();
145           newEvent->SetInt(CMId);
146           newEvent->SetId(0);
147           wxPostEvent(this->GetParent(), *newEvent);
148         }
149     }
150   else if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_OPENPROJECT)
151     {
152       modelCDMIProjectTreeNode* node = this->package;
153       while (node != NULL && dynamic_cast<modelCDMProject*>(node) == NULL)
154         {
155           node = node->GetParent();
156         }
157       if (node != NULL)
158         {
159           if(!((modelCDMProject*)node)->OpenCMakeListsFile(result))
160             wxMessageBox(crea::std2wx(*result),_T("Open CMakeLists File - Error!"),wxOK | wxICON_ERROR);
161
162           wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_SELECTED);
163
164           if(((modelCDMProject*)node)->GetCMakeLists() != NULL)
165             {
166               int CMId = ((modelCDMProject*)node)->GetCMakeLists()->GetId();
167               newEvent->SetInt(CMId);
168               newEvent->SetId(0);
169               wxPostEvent(this->GetParent(), *newEvent);
170             }
171         }
172       else
173         {
174           wxMessageBox(crea::std2wx("No project CMakeLists file was found."),_T("Open CMakeLists File - Error!"),wxOK | wxICON_ERROR);
175         }
176     }
177 }
178
179 void wxCDMPackageHelpDialog::OnCMakeListsEnter(wxMouseEvent& event)
180 {
181   if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_EDIT_CMAKELISTSFILE)
182     {
183       wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED);
184
185       if(this->package->GetCMakeLists() != NULL)
186         {
187           int CMId = this->package->GetCMakeLists()->GetId();
188           newEvent->SetInt(CMId);
189           newEvent->SetId(0);
190           wxPostEvent(this->GetParent(), *newEvent);
191         }
192     }
193   else if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_OPENPROJECT)
194     {
195       modelCDMIProjectTreeNode* node = this->package;
196       while (node != NULL && dynamic_cast<modelCDMProject*>(node) == NULL)
197         {
198           node = node->GetParent();
199         }
200       if (node != NULL)
201         {
202           wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED);
203
204           if(((modelCDMProject*)node)->GetCMakeLists() != NULL)
205             {
206               int CMId = ((modelCDMProject*)node)->GetCMakeLists()->GetId();
207               newEvent->SetInt(CMId);
208               newEvent->SetId(0);
209               wxPostEvent(this->GetParent(), *newEvent);
210             }
211         }
212     }
213   event.Skip();
214 }
215
216 void wxCDMPackageHelpDialog::OnCMakeListsExit(wxMouseEvent& event)
217 {
218   if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_EDIT_CMAKELISTSFILE)
219     {
220       wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_SELECTED);
221
222       if(this->package->GetCMakeLists() != NULL)
223         {
224           int CMId = this->package->GetCMakeLists()->GetId();
225           newEvent->SetInt(CMId);
226           newEvent->SetId(0);
227           wxPostEvent(this->GetParent(), *newEvent);
228         }
229     }
230   else if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_OPENPROJECT)
231     {
232       modelCDMIProjectTreeNode* node = this->package;
233       while (node != NULL && dynamic_cast<modelCDMProject*>(node) == NULL)
234         {
235           node = node->GetParent();
236         }
237       if (node != NULL)
238         {
239           wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_SELECTED);
240
241           if(((modelCDMProject*)node)->GetCMakeLists() != NULL)
242             {
243               int CMId = ((modelCDMProject*)node)->GetCMakeLists()->GetId();
244               newEvent->SetInt(CMId);
245               newEvent->SetId(0);
246               wxPostEvent(this->GetParent(), *newEvent);
247             }
248         }
249     }
250   event.Skip();
251 }
252
253 void wxCDMPackageHelpDialog::OnFinish(wxCommandEvent& event)
254 {
255   this->EndDialog(wxID_CANCEL);
256 }
257
258 void wxCDMPackageHelpDialog::OnDisableHelp(wxCommandEvent& event)
259 {
260   wxPostEvent(this->GetParent(), event);
261 }