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