]> Creatis software - crea.git/blob - lib/creaDevManagerLib/wxCDMMainFrame.cpp
Revert "Merge remote-tracking branch 'refs/remotes/origin/master' into creaDevManager...
[crea.git] / lib / creaDevManagerLib / wxCDMMainFrame.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 #include "wxCDMMainFrame.h"
30
31 #include <iostream>
32 #include <sstream>
33
34 #include <creaWx.h>
35 #include "creaSystem.h"
36 #include "wx/treectrl.h"
37 #include "wx/treebase.h"
38 #include "wx/tooltip.h"
39 #include "wx/wxhtml.h"
40 #include "wx/statline.h"
41 #include "wx/config.h"
42 #include "CDMUtilities.h"
43
44 #include "creaDevManagerIds.h"
45 #include "wxCDMMainDescriptionPanel.h"
46 #include "wxCDMProjectDescriptionPanel.h"
47 #include "wxCDMAppliDescriptionPanel.h"
48 #include "wxCDMApplicationDescriptionPanel.h"
49 #include "wxCDMLibDescriptionPanel.h"
50 #include "wxCDMLibraryDescriptionPanel.h"
51 #include "wxCDMPackageDescriptionPanel.h"
52 #include "wxCDMBlackBoxDescriptionPanel.h"
53 #include "wxCDMCMakeListsDescriptionPanel.h"
54 #include "wxCDMFolderDescriptionPanel.h"
55 #include "wxCDMFileDescriptionPanel.h"
56 #include "wxCDMPackageManagerPanel.h"
57
58 #include "wxCDMSettingsDialog.h"
59
60 #include "wxCDMProjectActionsPanel.h"
61 #include "wxCDMNewProjectDialog.h"
62
63
64
65 BEGIN_EVENT_TABLE(wxCDMMainFrame, wxFrame)
66 EVT_MENU_OPEN(wxCDMMainFrame::OnMenuBarOpen)
67 EVT_MENU(ID_MENU_NEW_PROJECT, wxCDMMainFrame::OnMenuNewProject)
68 EVT_MENU(ID_MENU_OPEN_PROJECT, wxCDMMainFrame::OnMenuOpenProject)
69 EVT_MENU(ID_MENU_OPEN_RECENT1, wxCDMMainFrame::OnMenuOpenRecent)
70 EVT_MENU(ID_MENU_OPEN_RECENT2, wxCDMMainFrame::OnMenuOpenRecent)
71 EVT_MENU(ID_MENU_OPEN_RECENT3, wxCDMMainFrame::OnMenuOpenRecent)
72 EVT_MENU(ID_MENU_OPEN_RECENT4, wxCDMMainFrame::OnMenuOpenRecent)
73 EVT_MENU(ID_MENU_OPEN_RECENT5, wxCDMMainFrame::OnMenuOpenRecent)
74 EVT_MENU(ID_MENU_CLOSE_PROJECT, wxCDMMainFrame::OnMenuCloseProject)
75 EVT_MENU(ID_MENU_EXPORT_HIERARCHY, wxCDMMainFrame::OnMenuExportHierarchy)
76 EVT_MENU(ID_MENU_EXIT, wxCDMMainFrame::OnMenuExit)
77 EVT_MENU(ID_MENU_REFRESH_PROJECT, wxCDMMainFrame::OnMenuRefreshProject)
78 EVT_MENU(ID_MENU_SETTINGS, wxCDMMainFrame::OnMenuSettings)
79 EVT_MENU(ID_MENU_BBTK_GRAPHICAL_EDITOR, wxCDMMainFrame::OnMenuBBTKGraphicalEditor)
80 EVT_MENU(ID_MENU_MINITOOLS, wxCDMMainFrame::OnMenuMiniTools)
81 EVT_MENU(ID_MENU_CODE_EDITOR, wxCDMMainFrame::OnMenuCodeEditor)
82 EVT_MENU(ID_MENU_COMMAND_LINE, wxCDMMainFrame::OnMenuCommandLine)
83 EVT_MENU(ID_MENU_TOGGLE_HELP, wxCDMMainFrame::OnMenuToggleHelp)
84 EVT_MENU(ID_MENU_HELP, wxCDMMainFrame::OnMenuHelp)
85 EVT_MENU(ID_MENU_REPORT_BUG, wxCDMMainFrame::OnMenuReportBug)
86 EVT_MENU(ID_MENU_ABOUT_CREADEVMANAGER, wxCDMMainFrame::OnMenuAboutCreaDevManager)
87 EVT_MENU(ID_MENU_ABOUT_CREATIS, wxCDMMainFrame::OnMenuAboutCreatis)
88
89 EVT_BUTTON(ID_BUTTON_NEWPROJECT, wxCDMMainFrame::OnMenuNewProject)
90 EVT_BUTTON(ID_BUTTON_OPENPROJECT, wxCDMMainFrame::OnMenuOpenProject)
91
92 EVT_TREE_SEL_CHANGED(ID_TREE_PROJECTS, wxCDMMainFrame::OnTreeSelectionChanged)
93
94 EVT_COMMAND(wxID_ANY, wxEVT_DISPLAY_CHANGED, wxCDMMainFrame::OnChangeView)
95 EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCDMMainFrame::OnElementSelected)
96 EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_LISTBOX_SELECTED, wxCDMMainFrame::OnElementDeselected)
97
98
99 EVT_CHECKBOX(ID_CHECKBOX_DISABLE_HELP, wxCDMMainFrame::OnDisableHelp)
100 END_EVENT_TABLE()
101
102 wxCDMMainFrame::wxCDMMainFrame(
103     wxWindow* parent,
104     wxWindowID id,
105     const wxString& caption,
106     const wxPoint& pos,
107     const wxSize& size,
108     long style
109 )
110 {
111   this->menu_File = NULL;
112   this->menu_Edit = NULL;
113   this->menu_Tools = NULL;
114   this->menu_Help = NULL;
115   this->panel_Properties = NULL;
116   this->panel_ProjectActions = NULL;
117   this->tree_Projects = NULL;
118   Create(parent, id, caption, pos, size, style);
119 }
120
121 wxCDMMainFrame::~wxCDMMainFrame()
122 {
123   wxConfigBase* pConfig = wxConfigBase::Get();
124   pConfig->Write(wxT("HELP"), this->help);
125
126   auiManager.UnInit();
127 }
128
129 bool wxCDMMainFrame::Create(
130     wxWindow* parent,
131     wxWindowID id,
132     const wxString& caption,
133     const wxPoint& pos,
134     const wxSize& size,
135     long style
136 )
137 {
138   wxFrame::Create(parent, id, caption, pos, size, style);
139   this->help = true;
140
141   wxConfigBase* pConfig = wxConfigBase::Get();
142   this->help = pConfig->Read(wxT("HELP"), this->help) != 0;
143
144   this->model = new modelCDMMain();
145
146   CreateMenus();
147   CreateControls();
148   return TRUE;
149 }
150
151 modelCDMMain* wxCDMMainFrame::GetModel() const
152 {
153   return this->model;
154 }
155
156 wxPanel* wxCDMMainFrame::GetPropertiesPanel() const
157 {
158   return this->panel_Properties;
159 }
160
161 bool wxCDMMainFrame::isHelp() const
162 {
163   return this->help;
164 }
165
166 void wxCDMMainFrame::RefreshProject()
167 {
168   std::string* result;
169   std::cout << "refreshing project" << std::endl;
170   this->model->RefreshProject(result);
171   std::cout << "rebuilding project tree" << std::endl;
172   this->tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject());
173   this->tree_Projects->Unselect();
174   this->actualTreeItem.Unset();
175 }
176
177 void wxCDMMainFrame::CreateMenus()
178 {
179   wxMenuBar* menuBar = new wxMenuBar;
180
181   //Recently opened projects
182   menu_Recent = new wxMenu();
183   wxConfigBase* pConfig = wxConfigBase::Get();
184   std::string rp = crea::wx2std(pConfig->Read(wxT("RECENT1"), wxT("")));
185   if(rp != "")
186     {
187       menu_Recent->Append(ID_MENU_OPEN_RECENT1, crea::std2wx(rp));
188       rp = crea::wx2std(pConfig->Read(wxT("RECENT2"), wxT("")));
189       if(rp != "")
190         {
191           menu_Recent->Append(ID_MENU_OPEN_RECENT2, crea::std2wx(rp));
192           rp = crea::wx2std(pConfig->Read(wxT("RECENT3"), wxT("")));
193           if(rp != "")
194             {
195               menu_Recent->Append(ID_MENU_OPEN_RECENT3, crea::std2wx(rp));
196               rp = crea::wx2std(pConfig->Read(wxT("RECENT4"), wxT("")));
197               if(rp != "")
198                 {
199                   menu_Recent->Append(ID_MENU_OPEN_RECENT4, crea::std2wx(rp));
200                   rp = crea::wx2std(pConfig->Read(wxT("RECENT5"), wxT("")));
201                   if(rp != "")
202                     {
203                       menu_Recent->Append(ID_MENU_OPEN_RECENT5, crea::std2wx(rp));
204                     }
205                 }
206             }
207         }
208     }
209
210   //FileMenu
211   menu_File = new wxMenu();
212   menu_File->Append(ID_MENU_NEW_PROJECT, wxT("&New Project..."));
213   menu_File->Append(ID_MENU_OPEN_PROJECT, wxT("&Open Project..."));
214   menu_File->AppendSubMenu(menu_Recent,wxT("Open &Recent"),wxT("Open a recently opened project."));
215   menu_File->AppendSeparator();
216   menu_File->Append(ID_MENU_CLOSE_PROJECT, wxT("&Close Project"));
217   menu_File->AppendSeparator();
218   menu_File->Append(ID_MENU_EXPORT_HIERARCHY, wxT("&Export Project Hierarchy..."));
219   menu_File->AppendSeparator();
220   menu_File->Append(ID_MENU_EXIT, wxT("E&xit"));
221
222   menuBar->Append(menu_File, wxT("&File"));
223
224   //EditMenu
225   menu_Edit = new wxMenu();
226   menu_Edit->Append(ID_MENU_REFRESH_PROJECT, wxT("&Refresh Project"));
227   menu_Edit->Append(ID_MENU_SETTINGS, wxT("&Settings"));
228
229   menuBar->Append(menu_Edit, wxT("&Edit"));
230
231   //ToolsMenu
232   menu_Tools = new wxMenu();
233   menu_Tools->Append(ID_MENU_BBTK_GRAPHICAL_EDITOR, wxT("BBTK &Graphical Editor"));
234   menu_Tools->Append(ID_MENU_MINITOOLS, wxT("&MiniTools"));
235   menu_Tools->Append(ID_MENU_CODE_EDITOR, wxT("&Code Editor"));
236   menu_Tools->Append(ID_MENU_COMMAND_LINE, wxT("&Command Line"));
237
238   menuBar->Append(menu_Tools, wxT("&Tools"));
239
240   //HelpMenu
241   menu_Help = new wxMenu();
242   menu_Help->AppendCheckItem(ID_MENU_TOGGLE_HELP, wxT("He&lp Dialogs"));
243   menu_Help->Check(ID_MENU_TOGGLE_HELP, this->help);
244   menu_Help->Append(ID_MENU_HELP, wxT("&Help"));
245   menu_Help->Append(ID_MENU_REPORT_BUG, wxT("Report &Bug"));
246   menu_Help->Append(ID_MENU_ABOUT_CREADEVMANAGER, wxT("&About CreaDevManager"));
247   menu_Help->Append(ID_MENU_ABOUT_CREATIS, wxT("A&bout CREATIS"));
248
249   menuBar->Append(menu_Help, wxT("&Help"));
250
251   //Set Bar
252   SetMenuBar(menuBar);
253
254   wxStatusBar* statusBar = new wxStatusBar(this, ID_STATUS_BAR, wxST_SIZEGRIP);
255   statusBar->SetFieldsCount(1);
256   SetStatusBar(statusBar);
257
258 }
259
260 void wxCDMMainFrame::CreateControls()
261 {
262
263   auiManager.SetManagedWindow(this);
264
265
266   tree_Projects = new wxCDMProjectsTreeCtrl(
267       this,
268       ID_TREE_PROJECTS,
269       wxDefaultPosition,
270       wxSize(200,400),
271           wxTR_HAS_BUTTONS | wxTR_AQUA_BUTTONS
272   );
273   this->actualTreeItem.Unset();
274
275   panel_Properties = new wxCDMMainDescriptionPanel(
276       this,
277       ID_WINDOW_PROPERTIES,
278       wxT("Description Panel"),
279       wxDefaultPosition,
280       wxSize(400, 600),
281       0
282   );
283
284   auiManager.AddPane(panel_Properties, wxAuiPaneInfo().BestSize(600,400).CenterPane().Name(wxT("panel_Properties")).Caption(wxT("")).CloseButton(false));
285   auiManager.AddPane(tree_Projects, wxAuiPaneInfo().Left().MinSize(250,300).BestSize(250,400).CloseButton(false).Name(wxT("tree_Projects")).Caption(wxT("Project Tree")).CloseButton(false));
286   auiManager.Update();
287   //auiManager.LoadPerspective(pers,true);
288   wxToolTip::Enable(true);
289   wxToolTip::SetDelay(0);
290 }
291
292 //Event Handlers
293
294 void wxCDMMainFrame::OnMenuBarOpen(wxMenuEvent& event)
295 {
296   //clean recent menu
297   int tam = menu_Recent->GetMenuItemCount();
298   for (int i = 0; i < tam; ++i) {
299     menu_Recent->Delete(menu_Recent->FindItemByPosition(0));
300   }
301   //populate recent menu
302   wxConfigBase* pConfig = wxConfigBase::Get();
303   std::string rp = crea::wx2std(pConfig->Read(wxT("RECENT1"), wxT("")));
304   if(rp != "")
305     {
306       menu_Recent->Append(ID_MENU_OPEN_RECENT1, crea::std2wx(rp));
307       rp = crea::wx2std(pConfig->Read(wxT("RECENT2"), wxT("")));
308       if(rp != "")
309         {
310           menu_Recent->Append(ID_MENU_OPEN_RECENT2, crea::std2wx(rp));
311           rp = crea::wx2std(pConfig->Read(wxT("RECENT3"), wxT("")));
312           if(rp != "")
313             {
314               menu_Recent->Append(ID_MENU_OPEN_RECENT3, crea::std2wx(rp));
315               rp = crea::wx2std(pConfig->Read(wxT("RECENT4"), wxT("")));
316               if(rp != "")
317                 {
318                   menu_Recent->Append(ID_MENU_OPEN_RECENT4, crea::std2wx(rp));
319                   rp = crea::wx2std(pConfig->Read(wxT("RECENT5"), wxT("")));
320                   if(rp != "")
321                     {
322                       menu_Recent->Append(ID_MENU_OPEN_RECENT5, crea::std2wx(rp));
323                     }
324                 }
325             }
326         }
327     }
328 }
329
330 //File menu
331 void wxCDMMainFrame::OnMenuNewProject(wxCommandEvent& event)
332 {
333   std::string* result;
334
335   wxCDMNewProjectDialog* dialog = new wxCDMNewProjectDialog(this);
336   long userResponse;
337   userResponse = dialog->ShowModal();
338
339   if(userResponse == wxID_FORWARD)
340     {
341       //close open project
342       if(this->model->GetProject() != NULL)
343         {
344           if(!this->model->CloseProject(result))
345             {
346               std::cout << "error closing project: " << *result << std::endl;
347               wxMessageBox(crea::std2wx(*result),_T("New Project - Error!"),wxOK | wxICON_ERROR);
348               event.Skip();
349               return;
350             }
351
352           if(this->panel_Properties != NULL)
353             {
354               auiManager.DetachPane(this->panel_Properties);
355               this->panel_Properties->Hide();
356             }
357           if(this->panel_ProjectActions != NULL)
358             {
359               auiManager.DetachPane(this->panel_ProjectActions);
360               this->panel_ProjectActions->Hide();    
361             }
362
363         }
364
365       //create project
366       if(!this->model->CreateProject(
367           crea::wx2std(dialog->GetProjectName()),
368           crea::wx2std(dialog->GetProjectLocation()),
369           result,
370           crea::wx2std(dialog->GetPackageAuthor()),
371           crea::wx2std(dialog->GetPackageDescription())
372       ))
373         {
374           std::cout << "error opening project: " << *result << std::endl;
375           wxMessageBox(crea::std2wx(*result),_T("New Project - Error!"),wxOK | wxICON_ERROR);
376           event.Skip();
377           return;
378         }
379       
380       //update recently open projects
381       wxConfigBase* pConfig = wxConfigBase::Get();
382       if(pConfig->Read(wxT("RECENT1"),wxT("")) != crea::std2wx(this->model->GetProject()->GetPath()))
383         {
384           pConfig->Write(wxT("RECENT5"), pConfig->Read(wxT("RECENT4"),wxT("")));
385           pConfig->Write(wxT("RECENT4"), pConfig->Read(wxT("RECENT3"),wxT("")));
386           pConfig->Write(wxT("RECENT3"), pConfig->Read(wxT("RECENT2"),wxT("")));
387           pConfig->Write(wxT("RECENT2"), pConfig->Read(wxT("RECENT1"),wxT("")));
388           pConfig->Write(wxT("RECENT1"), crea::std2wx(this->model->GetProject()->GetPath()));
389         }
390
391
392       //show project actions panel
393       if(this->panel_ProjectActions != NULL)
394         {
395           auiManager.DetachPane(this->panel_Properties);
396           this->panel_ProjectActions->Destroy();
397           this->panel_ProjectActions = NULL;
398         }
399           
400       panel_ProjectActions = new wxCDMProjectActionsPanel(
401           this,
402           this->model->GetProject(),
403           ID_WINDOW_PROJ_ACTIONS,
404           wxT("Project Actions Panel"),
405           wxDefaultPosition,
406           wxSize(800,200),
407           0
408       );
409       
410       auiManager.AddPane(panel_ProjectActions, wxAuiPaneInfo().Bottom().MinSize(800,50).Name(wxT("panel_ProjectActions")).Caption(wxT("General Project Actions")).BestSize(800,70).CloseButton(false));
411       auiManager.Update();
412
413       //populate tree control
414           tree_Projects->BuildTree(this->model->GetModelElements(),this->model->GetProject());
415       tree_Projects->Unselect();
416           this->actualTreeItem.Unset();
417           tree_Projects->SelectItem(this->model->GetProject()->GetId().GetWxId(), true);
418           //wxMessageBox(wxT("ProjectSelected") ,_T("New Project - Success!"),wxOK | wxICON_ERROR);
419     }
420 }
421 void wxCDMMainFrame::OnMenuOpenRecent(wxCommandEvent& event)
422 {
423   std::string* result;
424
425   //((wxMenuItem*)(event.GetEventObject()))->GetItemLabel();
426
427   std::string path = "";
428   wxConfigBase* pConfig = wxConfigBase::Get();
429   if(event.GetId() == ID_MENU_OPEN_RECENT1)
430     path = crea::wx2std (pConfig->Read(wxT("RECENT1"),wxT("")));
431   else if(event.GetId() == ID_MENU_OPEN_RECENT2)
432     path = crea::wx2std (pConfig->Read(wxT("RECENT2"),wxT("")));
433   else if(event.GetId() == ID_MENU_OPEN_RECENT3)
434     path = crea::wx2std (pConfig->Read(wxT("RECENT3"),wxT("")));
435   else if(event.GetId() == ID_MENU_OPEN_RECENT4)
436     path = crea::wx2std (pConfig->Read(wxT("RECENT4"),wxT("")));
437   else if(event.GetId() == ID_MENU_OPEN_RECENT5)
438     path = crea::wx2std (pConfig->Read(wxT("RECENT5"),wxT("")));
439
440   std::cout << "Selection to open: " << path << std::endl;
441   std::cout.flush();
442
443
444   //populate model
445   if(this->model->GetProject() != NULL)
446     {
447       std::cout << "Project not null, closing it" << std::endl;
448       if(!this->model->CloseProject(result))
449         {
450           std::cout << "error closing project: " << *result << std::endl;
451           wxMessageBox(crea::std2wx(result->c_str()),_T("New Project - Error!"),wxOK | wxICON_ERROR);
452           event.Skip();
453           return;
454         }
455
456       if(this->panel_Properties != NULL)
457         {
458           auiManager.DetachPane(this->panel_Properties);
459           this->panel_Properties->Hide();
460         }
461       if(this->panel_ProjectActions != NULL)
462         {
463           auiManager.DetachPane(this->panel_ProjectActions);
464           this->panel_ProjectActions->Hide();
465         }
466     }
467
468   if (!this->model->OpenProject(path, result))
469     {
470       std::cout << "error opening project: " << *result << std::endl;
471       wxMessageBox( crea::std2wx(result->c_str()), wxT("Open Project - Error"), wxICON_ERROR);
472       event.Skip();
473       return;
474     };
475
476   //update recently open projects
477   if(pConfig->Read(wxT("RECENT1"),wxT("")) != crea::std2wx(this->model->GetProject()->GetPath()))
478     {
479       pConfig->Write(wxT("RECENT5"), pConfig->Read(wxT("RECENT4"),wxT("")));
480       pConfig->Write(wxT("RECENT4"), pConfig->Read(wxT("RECENT3"),wxT("")));
481       pConfig->Write(wxT("RECENT3"), pConfig->Read(wxT("RECENT2"),wxT("")));
482       pConfig->Write(wxT("RECENT2"), pConfig->Read(wxT("RECENT1"),wxT("")));
483       pConfig->Write(wxT("RECENT1"), crea::std2wx(this->model->GetProject()->GetPath()));
484     }
485
486   std::cout << "building ui" << std::endl;
487
488   //populate tree control
489   tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject());
490   tree_Projects->Unselect();
491   this->actualTreeItem.Unset();
492       tree_Projects->SelectItem(this->model->GetProject()->GetId().GetWxId(), true);
493
494
495   //change project's actions panel
496   if(this->panel_ProjectActions!= NULL)
497     {
498       auiManager.DetachPane(this->panel_ProjectActions);
499       this->panel_ProjectActions->Destroy();
500       this->panel_ProjectActions = NULL;
501     }
502   panel_ProjectActions = new wxCDMProjectActionsPanel(
503       this,
504       this->model->GetProject(),
505       ID_WINDOW_PROJ_ACTIONS,
506       wxT("Project Actions Panel"),
507       wxDefaultPosition,
508       wxSize(800,200),
509       0
510   );
511   panel_ProjectActions->SetMinSize(wxSize(500, 100));
512
513
514   auiManager.AddPane(panel_ProjectActions, wxAuiPaneInfo().Bottom().MinSize(800,50).Name(wxT("panel_ProjectActions")).Caption(wxT("General Project Actions")).BestSize(800,70).CloseButton(false));
515
516   auiManager.Update();
517
518 }
519 void wxCDMMainFrame::OnMenuOpenProject(wxCommandEvent& event)
520 {
521   std::string* result;
522
523   long style = wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST;
524   wxDirDialog* FD = new wxDirDialog(this, wxT("Select the project directory"), wxT(""), style);
525   long userResponse = FD->ShowModal();
526   if(userResponse == wxID_OK)
527     {
528       std::string path = crea::wx2std (FD->GetPath());
529       FD -> Destroy();
530       FD = NULL;
531
532       std::cout << "Selection to open: " << path << std::endl;
533
534
535       //populate model
536       if(this->model->GetProject() != NULL)
537         {
538           std::cout << "Project not null, closing it" << std::endl;
539           if(!this->model->CloseProject(result))
540             {
541               std::cout << "error closing project: " << *result << std::endl;
542               wxMessageBox(crea::std2wx(result->c_str()),_T("New Project - Error!"),wxOK | wxICON_ERROR);
543               event.Skip();
544               return;
545             }
546
547           if(this->panel_Properties != NULL)
548             {
549               auiManager.DetachPane(this->panel_Properties);
550               this->panel_Properties->Hide();
551             }
552           if(this->panel_ProjectActions != NULL)
553             {
554               auiManager.DetachPane(this->panel_ProjectActions);
555               this->panel_ProjectActions->Hide();    
556             }
557         }
558
559       if (!this->model->OpenProject(path, result))
560         {
561           std::cout << "error opening project: " << *result << std::endl;
562           wxMessageBox( crea::std2wx(result->c_str()), wxT("Open Project - Error"), wxICON_ERROR);
563           event.Skip();
564           return;
565         };
566
567       //update recently open projects
568       wxConfigBase* pConfig = wxConfigBase::Get();
569       if(pConfig->Read(wxT("RECENT1"),wxT("")) != crea::std2wx(this->model->GetProject()->GetPath()))
570         {
571           pConfig->Write(wxT("RECENT5"), pConfig->Read(wxT("RECENT4"),wxT("")));
572           pConfig->Write(wxT("RECENT4"), pConfig->Read(wxT("RECENT3"),wxT("")));
573           pConfig->Write(wxT("RECENT3"), pConfig->Read(wxT("RECENT2"),wxT("")));
574           pConfig->Write(wxT("RECENT2"), pConfig->Read(wxT("RECENT1"),wxT("")));
575           pConfig->Write(wxT("RECENT1"), crea::std2wx(this->model->GetProject()->GetPath()));
576         }
577
578       std::cout << "building ui" << std::endl;
579
580       //populate tree control
581       tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject());
582       tree_Projects->Unselect();
583       this->actualTreeItem.Unset();
584           tree_Projects->SelectItem(this->model->GetProject()->GetId().GetWxId(), true);
585
586
587       //change project's actions panel
588       if(this->panel_ProjectActions!= NULL)
589         {
590           auiManager.DetachPane(this->panel_ProjectActions);
591           this->panel_ProjectActions->Destroy();
592           this->panel_ProjectActions = NULL;
593         }
594       panel_ProjectActions = new wxCDMProjectActionsPanel(
595           this,
596           this->model->GetProject(),
597           ID_WINDOW_PROJ_ACTIONS,
598           wxT("Project Actions Panel"),
599           wxDefaultPosition,
600           wxSize(800,200),
601           0
602       );
603       panel_ProjectActions->SetMinSize(wxSize(500, 100));
604
605
606       auiManager.AddPane(panel_ProjectActions, wxAuiPaneInfo().Bottom().MinSize(800,50).Name(wxT("panel_ProjectActions")).Caption(wxT("General Project Actions")).BestSize(800,70).CloseButton(false));
607
608       auiManager.Update();
609
610     }
611 }
612
613 void wxCDMMainFrame::OnMenuCloseProject(wxCommandEvent& event)
614 {
615   std::cout << "closing project" << std::endl;
616   std::string* result;
617   if(!this->model->CloseProject(result))
618     {
619       std::cout << "error closing project: " << *result << std::endl;
620       wxMessageBox( crea::std2wx(result->c_str()), wxT("Close Project - Error"), wxICON_ERROR);
621     }
622
623   tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject());
624   this->actualTreeItem.Unset();
625   if(this->panel_Properties != NULL)
626     {
627       auiManager.DetachPane(this->panel_Properties);
628           this->panel_Properties->Hide();
629     }
630   if(this->panel_ProjectActions != NULL)
631     {
632       auiManager.DetachPane(this->panel_ProjectActions);
633       this->panel_ProjectActions->Hide();    
634     }
635
636   this->panel_Properties = new wxCDMMainDescriptionPanel(
637       this,
638       ID_WINDOW_PROPERTIES,
639       wxT("Description Panel"),
640       wxDefaultPosition,
641       wxSize(600, 400),
642       0
643   );
644
645   auiManager.AddPane(panel_Properties, wxAuiPaneInfo().Center().Name(wxT("panel_Properties")).Caption(wxT("")).BestSize(600,400).CloseButton(false));
646
647   auiManager.Update();
648 }
649
650 void wxCDMMainFrame::OnMenuExportHierarchy(wxCommandEvent& event)
651 {
652   std::cerr << "Event OnMenuExportHierarchy not implemented" << std::endl;
653   event.Skip();
654 }
655 void wxCDMMainFrame::OnMenuExit(wxCommandEvent& event)
656 {
657   std::cout << "Closing CreaDevManager..." << std::endl;
658   std::string* result;
659   if(this->model->GetProject() != NULL && !this->model->CloseProject(result))
660     {
661       std::cout << "error closing project: " << *result << std::endl;
662     }
663
664   if(this->panel_Properties != NULL)
665     {
666       auiManager.DetachPane(this->panel_Properties);
667       this->panel_Properties->Destroy();
668       this->panel_Properties = NULL;
669     }
670   
671   if(this->tree_Projects != NULL)
672     {
673       auiManager.DetachPane(this->tree_Projects);
674       this->tree_Projects->Destroy();
675       this->tree_Projects = NULL;
676     }
677
678   if(this->panel_ProjectActions != NULL)
679     {
680       auiManager.DetachPane(this->panel_ProjectActions);
681       this->panel_ProjectActions->Destroy();
682       this->panel_ProjectActions = NULL;
683     }
684   
685   Close();
686 }
687
688 //Edit Menu
689 void wxCDMMainFrame::OnMenuRefreshProject(wxCommandEvent& event)
690 {
691   std::string* result;
692   if(!model->RefreshProject(result))
693     {
694       wxMessageBox( crea::std2wx(result->c_str()), wxT("Refresh Project - Error"), wxICON_ERROR);
695     }
696   if(this->model->GetProject() != NULL)
697     {
698       this->tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject());
699       this->auiManager.Update();
700
701       this->tree_Projects->Unselect();
702           this->actualTreeItem.Unset();
703       this->tree_Projects->SelectItem(this->model->GetProject()->GetId().GetWxId(), true);
704     }
705   event.Skip();
706 }
707
708 void wxCDMMainFrame::OnMenuSettings(wxCommandEvent& event)
709 {
710   wxCDMSettingsDialog* settingsDialog = new wxCDMSettingsDialog(this, -1);
711   settingsDialog->SetHelpEnabled(this->help);
712
713   int res = settingsDialog->ShowModal();
714   if(res == wxID_OK)
715     {
716       this->help = settingsDialog->IsHelpEnabled();
717       this->menu_Help->Check(ID_MENU_TOGGLE_HELP, this->help);
718     }
719 }
720
721 void wxCDMMainFrame::OnMenuBBTKGraphicalEditor(wxCommandEvent& event)
722 {
723   std::cerr << "Event OnMenuBBTKGraphicalEditor not implemented" << std::endl;
724   event.Skip();
725   if(CDMUtilities::openBBEditor())
726     {
727       wxMessageBox( wxT("Can't open the BB Graphical Editor. Please check your Crea Tools installation."), wxT("Refresh Project - Error"), wxICON_ERROR);
728     }
729 }
730 void wxCDMMainFrame::OnMenuMiniTools(wxCommandEvent& event)
731 {
732   if(CDMUtilities::openCreaToolsTools())
733     {
734       wxMessageBox( wxT("Can't open the Minitools. Please check your Crea Tools installation."), wxT("Refresh Project - Error"), wxICON_ERROR);
735     }
736 }
737 void wxCDMMainFrame::OnMenuCodeEditor(wxCommandEvent& event)
738 {
739   if(CDMUtilities::openTextEditor())
740     {
741       wxMessageBox( wxT("Can't open the Text Editor. Please check the default text editor command in the Crea Development Manager settings (Edit -> Settings)."), wxT("Refresh Project - Error"), wxICON_ERROR);
742     }
743 }
744 void wxCDMMainFrame::OnMenuCommandLine(wxCommandEvent& event)
745 {
746   if(CDMUtilities::openTerminal())
747     {
748       wxMessageBox( wxT("Can't open Terminal. Please check the default terminal command in the Crea Development Manager settings (Edit -> Settings)."), wxT("Refresh Project - Error"), wxICON_ERROR);
749     }
750 }
751
752 //Help Menu
753 void wxCDMMainFrame::OnMenuHelp(wxCommandEvent& event)
754 {
755   wxLaunchDefaultBrowser(_T("http://www.creatis.insa-lyon.fr/site/en/CreatoolsDocumentation"), 0);
756 }
757 void wxCDMMainFrame::OnMenuReportBug(wxCommandEvent& event)
758 {
759   wxLaunchDefaultBrowser(_T("http://vip.creatis.insa-lyon.fr:9002/projects/crea"), 0);
760 }
761 void wxCDMMainFrame::OnMenuAboutCreaDevManager(wxCommandEvent& event)
762 {
763   wxBoxSizer *topsizer;
764   wxHtmlWindow *html;
765   wxDialog dlg(this, wxID_ANY, wxString(_("About")));
766
767   topsizer = new wxBoxSizer(wxVERTICAL);
768
769   html = new wxHtmlWindow(&dlg, wxID_ANY, wxDefaultPosition, wxSize(380, 160), wxHW_SCROLLBAR_NEVER);
770   html -> SetBorders(0);
771
772   std::string content = ""
773       "<html>"
774       "<body bgcolor=\"#3333CC\">"
775       "<table cellspacing=3 cellpadding=4 width=\"100%\">"
776       "  <tr>"
777       "    <td bgcolor=\"#3333CC\">"
778       "    <center>"
779       "    <font size=+2 color=\"#FFFFFF\"><b>CREA Development Manager</b>"
780       "    </font>"
781       "    </center>"
782       "    </td>"
783       "  </tr>"
784       "  <tr>"
785       "    <td bgcolor=\"#FFFFFF\">"
786       "    <p><b><font size=+1>Creatis 2012 - Lyon, France</font></b></p>"
787       "    <font size=-1>"
788       "      <table cellpadding=0 cellspacing=0 width=\"100%\">"
789       "        <tr>"
790       "          <td width=\"65%\">"
791       "            <p>Created by Daniel Gonz&aacute;lez - daniel.gonzalez@creatis.insa-lyon.fr</p>"
792       "          </td>"
793       "        </tr>"
794       "      </table>"
795       "      <font size=1>"
796       "        <p>This software is governed by the CeCILL-B license under French law and abiding by the rules of distribution of free software.</p>"
797       "      </font>"
798       "    </font>"
799       "    </td>"
800       "  </tr>"
801       "</table>"
802       "</body>"
803       "</html>"
804       ;
805
806   html -> SetPage(crea::std2wx(content));
807   html -> SetSize(html -> GetInternalRepresentation() -> GetWidth(),
808       html -> GetInternalRepresentation() -> GetHeight());
809
810   topsizer -> Add(html, 1, wxALL, 10);
811
812 #if wxUSE_STATLINE
813   topsizer -> Add(new wxStaticLine(&dlg, wxID_ANY), 0, wxEXPAND | wxLEFT | wxRIGHT, 10);
814 #endif // wxUSE_STATLINE
815
816   wxButton *bu1 = new wxButton(&dlg, wxID_OK, _("OK"));
817   bu1 -> SetDefault();
818
819   topsizer -> Add(bu1, 0, wxALL | wxALIGN_RIGHT, 15);
820
821   dlg.SetSizer(topsizer);
822   topsizer -> Fit(&dlg);
823
824   dlg.ShowModal();
825 }
826 void wxCDMMainFrame::OnMenuAboutCreatis(wxCommandEvent& event)
827 {
828   wxLaunchDefaultBrowser(_T("http://www.creatis.insa-lyon.fr/site/en"), 0);
829 }
830
831 void wxCDMMainFrame::OnTreeSelectionChanged(wxTreeEvent& event)
832 {
833
834   //get selected element
835   wxTreeItemId elementId = event.GetItem();
836   //std::cout << "Tree Selection id: " << elementId.m_pItem << this->actualTreeItem.m_pItem << std::endl;
837   //elementId.IsOk() && this->tree_Projects->IsSelected(elementId)
838   if(elementId.IsOk() && this->actualTreeItem != elementId)
839     {
840       
841       //std::cout << "Valid tree selection id: " << elementId.m_pItem << std::endl;
842       //get element from model
843       modelCDMIProjectTreeNode* element = this->model->GetModelElements()[elementId];
844
845           if (element == NULL)
846                   return;
847       std::cout << "Tree Selection: " << element->GetName() << std::endl;
848
849           //std::stringstream ss;
850           //ss << this->actualTreeItem.m_pItem << ":" << event.GetOldItem().m_pItem << " --> " << elementId.m_pItem;
851           //wxMessageBox( wxT("Tree Selection id: " + ss.str() + " by " + element->GetName()), wxT("Refresh Project - Error"), wxICON_ERROR);   
852       this->actualTreeItem = elementId;
853
854           //get element type
855       //project
856       modelCDMProject* elementProject = dynamic_cast<modelCDMProject*>(element);
857       wxPanel* description;
858       if(elementProject != NULL)
859         {
860           //create element description
861           description = new wxCDMProjectDescriptionPanel(
862               this,
863               elementProject,
864               ID_WINDOW_PROPERTIES,
865               wxT("Description Panel"),
866               wxDefaultPosition,
867               wxSize(600, 400),
868               0
869           );
870
871         }
872       else
873         {
874           //appli
875           modelCDMAppli* elementAppli = dynamic_cast<modelCDMAppli*>(element);
876           if(elementAppli != NULL)
877             {
878               //create element description
879               description = new wxCDMAppliDescriptionPanel(
880                   this,
881                   elementAppli,
882                   ID_WINDOW_PROPERTIES,
883                   wxT("Description Panel"),
884                   wxDefaultPosition,
885                   wxSize(600, 400),
886                   0
887               );
888
889             }
890           else
891             {
892               //application
893               modelCDMApplication* elementApplication = dynamic_cast<modelCDMApplication*>(element);
894                           if(elementApplication != NULL)
895                 {
896                   //create element description
897                   description = new wxCDMApplicationDescriptionPanel(
898                       this,
899                       elementApplication,
900                       ID_WINDOW_PROPERTIES,
901                       wxT("Description Panel"),
902                       wxDefaultPosition,
903                       wxSize(600, 400),
904                       0
905                   );
906                 }
907               else
908                 {
909                   //lib
910                   modelCDMLib* elementLib = dynamic_cast<modelCDMLib*>(element);
911                   if(elementLib != NULL)
912                     {
913                       //create element description
914                       description = new wxCDMLibDescriptionPanel(
915                           this,
916                           elementLib,
917                           ID_WINDOW_PROPERTIES,
918                           wxT("Description Panel"),
919                           wxDefaultPosition,
920                           wxSize(600, 400),
921                           0
922                       );
923                     }
924                   else
925                     {
926                       //library
927                       modelCDMLibrary* elementLibrary = dynamic_cast<modelCDMLibrary*>(element);
928                       if(elementLibrary != NULL)
929                         {
930                           //create element description
931                           description = new wxCDMLibraryDescriptionPanel(
932                               this,
933                               elementLibrary,
934                               ID_WINDOW_PROPERTIES,
935                               wxT("Description Panel"),
936                               wxDefaultPosition,
937                               wxSize(600, 400),
938                               0
939                           );
940                         }
941                       else
942                         {
943                           //package
944                           modelCDMPackage* elementPackage = dynamic_cast<modelCDMPackage*>(element);
945                           if(elementPackage != NULL)
946                             {
947                               //create element description
948                               description = new wxCDMPackageDescriptionPanel(
949                                   this,
950                                   elementPackage,
951                                   ID_WINDOW_PROPERTIES,
952                                   wxT("Description Panel"),
953                                   wxDefaultPosition,
954                                   wxSize(600, 400),
955                                   0
956                               );
957                             }
958                           else
959                             {
960                               //black box
961                               modelCDMBlackBox* elementBlackBox = dynamic_cast<modelCDMBlackBox*>(element);
962                               if(elementBlackBox != NULL)
963                                 {
964                                   //create element description
965                                   description = new wxCDMBlackBoxDescriptionPanel(
966                                       this,
967                                       elementBlackBox,
968                                       ID_WINDOW_PROPERTIES,
969                                       wxT("Description Panel"),
970                                       wxDefaultPosition,
971                                       wxSize(600, 400),
972                                       0
973                                   );
974                                 }
975                               else
976                                 {
977                                   //CMakeLists
978                                   modelCDMCMakeListsFile* elementCMakeLists = dynamic_cast<modelCDMCMakeListsFile*>(element);
979                                   if(elementCMakeLists != NULL)
980                                     {
981                                       //create element description
982                                       description = new wxCDMCMakeListsDescriptionPanel(
983                                           this,
984                                           elementCMakeLists,
985                                           ID_WINDOW_PROPERTIES,
986                                           wxT("Description Panel"),
987                                           wxDefaultPosition,
988                                           wxSize(600, 400),
989                                           0
990                                       );
991                                     }
992                                   else
993                                     {
994                                       //folder
995                                       modelCDMFolder* elementFolder = dynamic_cast<modelCDMFolder*>(element);
996                                       if(elementFolder != NULL)
997                                         {
998                                           //create element description
999                                           description = new wxCDMFolderDescriptionPanel(
1000                                               this,
1001                                               elementFolder,
1002                                               ID_WINDOW_PROPERTIES,
1003                                               wxT("Description Panel"),
1004                                               wxDefaultPosition,
1005                                               wxSize(600, 400),
1006                                               0
1007                                           );
1008                                         }
1009                                       else
1010                                         {
1011                                           //file
1012                                           modelCDMFile* elementFile = dynamic_cast<modelCDMFile*>(element);
1013                                           if(elementFile != NULL)
1014                                             {
1015                                               //create element description
1016                                               description = new wxCDMFileDescriptionPanel(
1017                                                   this,
1018                                                   elementFile,
1019                                                   ID_WINDOW_PROPERTIES,
1020                                                   wxT("Description Panel"),
1021                                                   wxDefaultPosition,
1022                                                   wxSize(600, 400),
1023                                                   0
1024                                               );
1025                                             }
1026                                           else
1027                                             {
1028
1029                                               //main if not any
1030                                               //create element description
1031                                               description = new wxCDMMainDescriptionPanel(
1032                                                   this,
1033                                                   ID_WINDOW_PROPERTIES,
1034                                                   wxT("Description Panel"),
1035                                                   wxDefaultPosition,
1036                                                   wxSize(600, 400),
1037                                                   0
1038                                               );
1039                                             }
1040                                         }
1041                                     }
1042                                 }
1043                             }
1044                         }
1045                     }
1046                 }
1047             }
1048         }
1049
1050       //delete old view
1051       if(this->panel_Properties!= NULL)
1052         {
1053           this->panel_Properties->Hide();
1054           auiManager.DetachPane(this->panel_Properties);
1055           //this->panel_Properties->Destroy();
1056           //this->panel_Properties = NULL;
1057         }
1058       //set new view
1059       auiManager.AddPane(description, wxAuiPaneInfo().Center().Name(wxT("panel_Properties")).Caption(wxT("")).BestSize(600,400).CloseButton(false));
1060       this->panel_Properties = description;
1061
1062       auiManager.Update();
1063     }
1064   else
1065     {
1066       event.Skip();
1067         }
1068
1069   return;
1070
1071 }
1072
1073 void wxCDMMainFrame::OnChangeView(wxCommandEvent& event)
1074 {
1075   modelCDMIProjectTreeNode* myItem = NULL;
1076   wxPanel* description = NULL;
1077   switch(event.GetId())
1078   {
1079   case 0:
1080     myItem = ((modelCDMIProjectTreeNode*)event.GetClientData());
1081     //select out old one to generate selection event
1082     this->tree_Projects->Unselect();
1083     this->tree_Projects->SelectItem(myItem->GetId().GetWxId());
1084     this->tree_Projects->Expand(myItem->GetId().GetWxId());
1085     break;
1086   case 1:
1087     
1088     if(event.GetString() == wxT("manage_packages"))
1089       {
1090         //this->tree_Projects->Expand(this->model->GetProject()->GetId());
1091         //this->tree_Projects->Unselect();
1092         this->actualTreeItem.Unset();
1093         description = new wxCDMPackageManagerPanel(
1094             this,
1095             this->model->GetProject(),
1096             ID_WINDOW_PROPERTIES,
1097             wxT("Description Panel"),
1098             wxDefaultPosition,
1099             wxSize(600, 400),
1100             0
1101         );
1102       }
1103     else if(event.GetString() == wxT("manage_libraries"))
1104       {
1105         this->tree_Projects->SelectItem(this->model->GetProject()->GetLib()->GetId().GetWxId());
1106         this->tree_Projects->Expand(this->model->GetProject()->GetLib()->GetId().GetWxId());
1107         break;
1108       }
1109     else if(event.GetString() == wxT("manage_applications"))
1110       {
1111         this->tree_Projects->SelectItem(this->model->GetProject()->GetAppli()->GetId().GetWxId());
1112         this->tree_Projects->Expand(this->model->GetProject()->GetAppli()->GetId().GetWxId());
1113         break;
1114       }
1115     else if(event.GetString() == wxT("blackbox"))
1116       {
1117         modelCDMBlackBox* bb = (modelCDMBlackBox*)event.GetClientData();
1118         this->actualTreeItem.Unset();
1119         this->tree_Projects->SelectItem(bb->GetHeaderFile()->GetId().GetWxId());
1120         description = new wxCDMBlackBoxDescriptionPanel(
1121             this,
1122             bb,
1123             ID_WINDOW_PROPERTIES,
1124             wxT("Description Panel"),
1125             wxDefaultPosition,
1126             wxSize(600, 400),
1127             0
1128         );
1129
1130                 
1131       }
1132
1133     //delete old view
1134     if(this->panel_Properties!= NULL)
1135       {
1136         this->panel_Properties->Hide();
1137         auiManager.DetachPane(this->panel_Properties);
1138         this->panel_Properties->Destroy();
1139         this->panel_Properties = NULL;
1140       }
1141     //set new view
1142     auiManager.AddPane(description, wxAuiPaneInfo().Center().Name(wxT("panel_Properties")).Caption(wxT("")).BestSize(600,400).CloseButton(false));
1143     this->panel_Properties = description;
1144     auiManager.Update();
1145     break;
1146   default:
1147     event.Skip();
1148     break;
1149   }
1150   
1151 }
1152
1153 void wxCDMMainFrame::OnElementSelected(wxCommandEvent& event)
1154 {
1155   //std::cout << "element " << event.GetInt() << std::endl;
1156   modelCDMIProjectTreeNode* item = (modelCDMIProjectTreeNode*)event.GetClientData();
1157   this->tree_Projects->EnsureVisible(item->GetId().GetWxId());
1158   this->tree_Projects->SetItemBold(item->GetId().GetWxId(), true);
1159   this->tree_Projects->SetItemTextColour(item->GetId().GetWxId(), wxColour(0,0,255));
1160   this->tree_Projects->SetItemBackgroundColour(item->GetId().GetWxId(), wxColour(230,230,255));
1161   this->tree_Projects->UpdateWindowUI(wxUPDATE_UI_RECURSE);
1162   auiManager.Update();
1163 }
1164
1165 void wxCDMMainFrame::OnElementDeselected(wxCommandEvent& event)
1166 {
1167   modelCDMIProjectTreeNode* item = (modelCDMIProjectTreeNode*)event.GetClientData();
1168   this->tree_Projects->SetItemBold(item->GetId().GetWxId(), false);
1169   this->tree_Projects->SetItemTextColour(item->GetId().GetWxId(), wxColour(0,0,0));
1170   this->tree_Projects->SetItemBackgroundColour(item->GetId().GetWxId(), wxColour(255,255,255));
1171   this->tree_Projects->UpdateWindowUI(wxUPDATE_UI_RECURSE);
1172   auiManager.Update();
1173 }
1174
1175 void wxCDMMainFrame::OnMenuToggleHelp(wxCommandEvent& event)
1176 {
1177   this->help = !this->help;
1178   this->menu_Help->Check(ID_MENU_TOGGLE_HELP, this->help);
1179 }
1180
1181 void wxCDMMainFrame::OnDisableHelp(wxCommandEvent& event)
1182 {
1183   if (event.GetInt())
1184     this->help = false;
1185   else
1186     this->help = true;
1187
1188   this->menu_Help->Check(ID_MENU_TOGGLE_HELP, this->help);
1189 }