]> Creatis software - crea.git/blob - lib/creaDevManagerLib/wxCDMBlackBoxHelpDialog.cpp
Feature #1711
[crea.git] / lib / creaDevManagerLib / wxCDMBlackBoxHelpDialog.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  * wxCDMBlackBoxHelpDialog.cpp
31  *
32  *  Created on: 11/1/2013
33  *      Author: Daniel Felipe Gonzalez Obando
34  */
35
36 #include "wxCDMBlackBoxHelpDialog.h"
37
38 #include "creaDevManagerIds.h"
39
40 #include "modelCDMProject.h"
41 #include "modelCDMPackage.h"
42
43 BEGIN_EVENT_TABLE(wxCDMBlackBoxHelpDialog, wxDialog)
44 EVT_BUTTON(ID_BUTTON_CANCEL, wxCDMBlackBoxHelpDialog::OnFinish)
45 EVT_BUTTON(ID_BUTTON_OPENPROJECT, wxCDMBlackBoxHelpDialog::OnCMakeLists)
46 EVT_BUTTON(ID_BUTTON_EDIT_CMAKELISTSFILE, wxCDMBlackBoxHelpDialog::OnCMakeLists)
47 EVT_CHECKBOX(ID_CHECKBOX_DISABLE_HELP, wxCDMBlackBoxHelpDialog::OnDisableHelp)
48 END_EVENT_TABLE()
49
50 wxCDMBlackBoxHelpDialog::wxCDMBlackBoxHelpDialog(
51     wxWindow* parent,
52     modelCDMBlackBox* blackBox,
53     wxWindowID id,
54     const wxString& caption,
55     const wxPoint& position,
56     const wxSize& size,
57     long style
58 )
59 {
60   wxCDMBlackBoxHelpDialog::Create(parent, id, caption, position, size, style);
61   this->blackBox = blackBox;
62 }
63
64 wxCDMBlackBoxHelpDialog::~wxCDMBlackBoxHelpDialog()
65 {
66 }
67
68 bool wxCDMBlackBoxHelpDialog::Create(
69     wxWindow* parent,
70     wxWindowID id,
71     const wxString& caption,
72     const wxPoint& position,
73     const wxSize& size,
74     long int style
75 )
76 {
77   wxDialog::Create(parent, id, caption, position, size, style);
78
79   this->CreateControls();
80
81   return TRUE;
82 }
83
84 void wxCDMBlackBoxHelpDialog::CreateControls()
85 {
86
87   wxBoxSizer* v_sizer1 = new wxBoxSizer(wxVERTICAL);
88
89
90   wxStaticText* title = new wxStaticText(this, wxID_ANY, wxT("Working with BlackBoxes"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);//new wxRichTextCtrl(this,wxID_ANY, wxString("Create a new project"), wxDefaultPosition, wxDefaultSize, wxRE_READONLY);
91   v_sizer1->Add(title, 0, wxALIGN_LEFT | wxALL | wxALIGN_CENTER_VERTICAL, 5);
92
93   wxStaticText* instruction = new wxStaticText(
94       this,
95       wxID_ANY,
96       crea::std2wx(
97           "Black boxes are made to work in a modular fashion. They have programmer defined inputs and outputs. Their "
98           "purpose is to use the functions available in the libraries and expose them to be used as boxes in the crea "
99           "environment.\n"
100           "Black boxes are stored in the src folder of a package and they are composed of two files, the header(.h) "
101           "and the implementation(.cxx) files.\n"
102           "To start developing black boxes, go ahead and open the header file with the button \"Open .h\" and define "
103           "the inputs and outputs of the black box. Then, you will be able to use them in the implementation file, which "
104           "you can open using the \"Open .cxx\" button.\n"
105           "If you don't understand how this inputs and outputs are used, try looking at the sample black boxes available "
106           "in the sample package, which is shipped with every new project.\n"
107           "Also, don't forget to include the libraries your boxes use in the header and implementation files. They should "
108           "also be pointed and included in the package's directory CMakeLists.txt file and the project's directory "
109           "CMakeLists.txt file. Again, please take a look at the sample package and its boxes to see how to include libraries "
110           "in order to use them in the boxes.\n"
111           "\n"
112           "You can easily edit the CMakeLists files previously mentioned by clicking on the following buttons."),
113           wxDefaultPosition,
114           wxDefaultSize,
115           wxALIGN_LEFT
116   );
117   v_sizer1->Add(instruction, 0,wxEXPAND | wxALL, 5);
118
119   wxButton* editCMakePkgBtn = new wxButton(this, ID_BUTTON_EDIT_CMAKELISTSFILE, wxT("Open Package's directory CMakeLists file"));
120   editCMakePkgBtn->Connect(wxEVT_ENTER_WINDOW, (wxObjectEventFunction)(wxEventFunction)(wxMouseEventFunction)&wxCDMBlackBoxHelpDialog::OnCMakeListsEnter,NULL,this);
121   editCMakePkgBtn->Connect(wxEVT_LEAVE_WINDOW, (wxObjectEventFunction)(wxEventFunction)(wxMouseEventFunction)&wxCDMBlackBoxHelpDialog::OnCMakeListsExit,NULL,this);
122   wxButton* editCMakePrjBtn= new wxButton(this, ID_BUTTON_OPENPROJECT, wxT("Open Project's directory CMakeLists file"));
123   editCMakePrjBtn->Connect(wxEVT_ENTER_WINDOW, (wxObjectEventFunction)(wxEventFunction)(wxMouseEventFunction)&wxCDMBlackBoxHelpDialog::OnCMakeListsEnter,NULL,this);
124   editCMakePrjBtn->Connect(wxEVT_LEAVE_WINDOW, (wxObjectEventFunction)(wxEventFunction)(wxMouseEventFunction)&wxCDMBlackBoxHelpDialog::OnCMakeListsExit,NULL,this);
125
126   v_sizer1->Add(editCMakePkgBtn, 0, wxEXPAND | wxLEFT | wxRIGHT, 15);
127   v_sizer1->Add(editCMakePrjBtn, 0, wxEXPAND | wxLEFT | wxRIGHT, 15);
128
129   v_sizer1->Add(new wxCheckBox(this, ID_CHECKBOX_DISABLE_HELP, wxT("&Disable help")), 0, wxALIGN_RIGHT | wxRIGHT, 10);
130
131   v_sizer1->Add(new wxButton(this, ID_BUTTON_CANCEL, wxT("Close")), 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM | wxALIGN_CENTER_VERTICAL, 30);
132
133   SetSizer(v_sizer1);
134   //v_sizer1->RecalcSizes();
135 }
136
137 void wxCDMBlackBoxHelpDialog::OnFinish(wxCommandEvent& event)
138 {
139   this->EndDialog(wxID_CANCEL);
140 }
141
142 void wxCDMBlackBoxHelpDialog::OnCMakeLists(wxCommandEvent& event)
143 {
144   std::string* result;
145
146   if((int)((wxButton*)event.GetEventObject())->GetId() == (int)ID_BUTTON_EDIT_CMAKELISTSFILE)
147     {
148       modelCDMIProjectTreeNode* node = this->blackBox;
149       while (node != NULL && dynamic_cast<modelCDMPackage*>(node) == NULL)
150         {
151           node = node->GetParent();
152         }
153       if (node != NULL)
154         {
155           if(!((modelCDMPackage*)node)->OpenCMakeListsFile(result))
156             wxMessageBox(crea::std2wx(*result),_T("Open CMakeLists File - Error!"),wxOK | wxICON_ERROR);
157
158           wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_SELECTED);
159
160           if(((modelCDMPackage*)node)->GetCMakeLists() != NULL)
161             {
162               newEvent->SetClientData(((modelCDMPackage*)node)->GetCMakeLists());
163               newEvent->SetId(0);
164               wxPostEvent(this->GetParent(), *newEvent);
165             }
166         }
167       else
168         {
169           wxMessageBox(crea::std2wx("No project CMakeLists file was found."),_T("Open CMakeLists File - Error!"),wxOK | wxICON_ERROR);
170         }
171     }
172   else if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_OPENPROJECT)
173     {
174       modelCDMIProjectTreeNode* node = this->blackBox;
175       while (node != NULL && dynamic_cast<modelCDMProject*>(node) == NULL)
176         {
177           node = node->GetParent();
178         }
179       if (node != NULL)
180         {
181           if(!((modelCDMProject*)node)->OpenCMakeListsFile(result))
182             wxMessageBox(crea::std2wx(*result),_T("Open CMakeLists File - Error!"),wxOK | wxICON_ERROR);
183
184           wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_SELECTED);
185
186           if(((modelCDMProject*)node)->GetCMakeLists() != NULL)
187             {
188               newEvent->SetClientData(((modelCDMProject*)node)->GetCMakeLists());
189               newEvent->SetId(0);
190               wxPostEvent(this->GetParent(), *newEvent);
191             }
192         }
193       else
194         {
195           wxMessageBox(crea::std2wx("No project CMakeLists file was found."),_T("Open CMakeLists File - Error!"),wxOK | wxICON_ERROR);
196         }
197     }
198 }
199
200 void wxCDMBlackBoxHelpDialog::OnCMakeListsEnter(wxMouseEvent& event)
201 {
202   if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_EDIT_CMAKELISTSFILE)
203     {
204       modelCDMIProjectTreeNode* node = this->blackBox;
205       while (node != NULL && dynamic_cast<modelCDMPackage*>(node) == NULL)
206         {
207           node = node->GetParent();
208         }
209       if (node != NULL)
210         {
211           wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED);
212
213           if(((modelCDMPackage*)node)->GetCMakeLists() != NULL)
214             {
215               newEvent->SetClientData(((modelCDMPackage*)node)->GetCMakeLists());
216               newEvent->SetId(0);
217               wxPostEvent(this->GetParent(), *newEvent);
218             }
219         }
220     }
221   else if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_OPENPROJECT)
222     {
223       modelCDMIProjectTreeNode* node = this->blackBox;
224       while (node != NULL && dynamic_cast<modelCDMProject*>(node) == NULL)
225         {
226           node = node->GetParent();
227         }
228       if (node != NULL)
229         {
230           wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED);
231
232           if(((modelCDMProject*)node)->GetCMakeLists() != NULL)
233             {
234               newEvent->SetClientData(((modelCDMProject*)node)->GetCMakeLists());
235               newEvent->SetId(0);
236               wxPostEvent(this->GetParent(), *newEvent);
237             }
238         }
239     }
240   event.Skip();
241 }
242
243 void wxCDMBlackBoxHelpDialog::OnCMakeListsExit(wxMouseEvent& event)
244 {
245   if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_EDIT_CMAKELISTSFILE)
246       {
247         modelCDMIProjectTreeNode* node = this->blackBox;
248         while (node != NULL && dynamic_cast<modelCDMPackage*>(node) == NULL)
249           {
250             node = node->GetParent();
251           }
252         if (node != NULL)
253           {
254             wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_SELECTED);
255
256             if(((modelCDMPackage*)node)->GetCMakeLists() != NULL)
257               {
258                 newEvent->SetClientData(((modelCDMPackage*)node)->GetCMakeLists());
259                 newEvent->SetId(0);
260                 wxPostEvent(this->GetParent(), *newEvent);
261               }
262           }
263       }
264     else if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_OPENPROJECT)
265       {
266         modelCDMIProjectTreeNode* node = this->blackBox;
267         while (node != NULL && dynamic_cast<modelCDMProject*>(node) == NULL)
268           {
269             node = node->GetParent();
270           }
271         if (node != NULL)
272           {
273             wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_SELECTED);
274
275             if(((modelCDMProject*)node)->GetCMakeLists() != NULL)
276               {
277                 newEvent->SetClientData(((modelCDMProject*)node)->GetCMakeLists());
278                 newEvent->SetId(0);
279                 wxPostEvent(this->GetParent(), *newEvent);
280               }
281           }
282       }
283     event.Skip();
284 }
285
286 void wxCDMBlackBoxHelpDialog::OnDisableHelp(wxCommandEvent& event)
287 {
288   wxPostEvent(this->GetParent(), event);
289 }