]> Creatis software - crea.git/blob - lib/creaDevManagerLib/wxCDMPackageHelpDialog.cpp
Feature #1711
[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           newEvent->SetClientData(this->package->GetCMakeLists());
145           newEvent->SetId(0);
146           wxPostEvent(this->GetParent(), *newEvent);
147         }
148     }
149   else if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_OPENPROJECT)
150     {
151       modelCDMIProjectTreeNode* node = this->package;
152       while (node != NULL && dynamic_cast<modelCDMProject*>(node) == NULL)
153         {
154           node = node->GetParent();
155         }
156       if (node != NULL)
157         {
158           if(!((modelCDMProject*)node)->OpenCMakeListsFile(result))
159             wxMessageBox(crea::std2wx(*result),_T("Open CMakeLists File - Error!"),wxOK | wxICON_ERROR);
160
161           wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_SELECTED);
162
163           if(((modelCDMProject*)node)->GetCMakeLists() != NULL)
164             {
165               newEvent->SetClientData(((modelCDMProject*)node)->GetCMakeLists());
166               newEvent->SetId(0);
167               wxPostEvent(this->GetParent(), *newEvent);
168             }
169         }
170       else
171         {
172           wxMessageBox(crea::std2wx("No project CMakeLists file was found."),_T("Open CMakeLists File - Error!"),wxOK | wxICON_ERROR);
173         }
174     }
175 }
176
177 void wxCDMPackageHelpDialog::OnCMakeListsEnter(wxMouseEvent& event)
178 {
179   if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_EDIT_CMAKELISTSFILE)
180     {
181       wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED);
182
183       if(this->package->GetCMakeLists() != NULL)
184         {
185           newEvent->SetClientData(this->package->GetCMakeLists());
186           newEvent->SetId(0);
187           wxPostEvent(this->GetParent(), *newEvent);
188         }
189     }
190   else if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_OPENPROJECT)
191     {
192       modelCDMIProjectTreeNode* node = this->package;
193       while (node != NULL && dynamic_cast<modelCDMProject*>(node) == NULL)
194         {
195           node = node->GetParent();
196         }
197       if (node != NULL)
198         {
199           wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED);
200
201           if(((modelCDMProject*)node)->GetCMakeLists() != NULL)
202             {
203               newEvent->SetClientData(((modelCDMProject*)node)->GetCMakeLists());
204               newEvent->SetId(0);
205               wxPostEvent(this->GetParent(), *newEvent);
206             }
207         }
208     }
209   event.Skip();
210 }
211
212 void wxCDMPackageHelpDialog::OnCMakeListsExit(wxMouseEvent& event)
213 {
214   if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_EDIT_CMAKELISTSFILE)
215     {
216       wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_SELECTED);
217
218       if(this->package->GetCMakeLists() != NULL)
219         {
220           newEvent->SetClientData(this->package->GetCMakeLists());
221           newEvent->SetId(0);
222           wxPostEvent(this->GetParent(), *newEvent);
223         }
224     }
225   else if(((wxButton*)event.GetEventObject())->GetId() == ID_BUTTON_OPENPROJECT)
226     {
227       modelCDMIProjectTreeNode* node = this->package;
228       while (node != NULL && dynamic_cast<modelCDMProject*>(node) == NULL)
229         {
230           node = node->GetParent();
231         }
232       if (node != NULL)
233         {
234           wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LISTBOX_SELECTED);
235
236           if(((modelCDMProject*)node)->GetCMakeLists() != NULL)
237             {
238               newEvent->SetClientData(((modelCDMProject*)node)->GetCMakeLists());
239               newEvent->SetId(0);
240               wxPostEvent(this->GetParent(), *newEvent);
241             }
242         }
243     }
244   event.Skip();
245 }
246
247 void wxCDMPackageHelpDialog::OnFinish(wxCommandEvent& event)
248 {
249   this->EndDialog(wxID_CANCEL);
250 }
251
252 void wxCDMPackageHelpDialog::OnDisableHelp(wxCommandEvent& event)
253 {
254   wxPostEvent(this->GetParent(), event);
255 }