]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/creaPanelButtonContainer/creaPanelButtonContainer.cxx
#2516 creaMaracasVisu Feature New Normal - creaPanelButtonContainer ListPanel with...
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / creaPanelButtonContainer / creaPanelButtonContainer.cxx
1 /*# ---------------------------------------------------------------------
2  #
3  # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
4  #                        pour la Sant�)
5  # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
6  # Previous Authors : Laurent Guigues, Jean-Pierre Roux
7  # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
8  #
9  #  This software is governed by the CeCILL-B license under French law and
10  #  abiding by the rules of distribution of free software. You can  use,
11  #  modify and/ or redistribute the software under the terms of the CeCILL-B
12  #  license as circulated by CEA, CNRS and INRIA at the following URL
13  #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
14  #  or in the file LICENSE.txt.
15  #
16  #  As a counterpart to the access to the source code and  rights to copy,
17  #  modify and redistribute granted by the license, users are provided only
18  #  with a limited warranty  and the software's author,  the holder of the
19  #  economic rights,  and the successive licensors  have only  limited
20  #  liability.
21  #
22  #  The fact that you are presently reading this means that you have had
23  #  knowledge of the CeCILL-B license and that you accept its terms.
24  # ------------------------------------------------------------------------ */
25
26 /*!
27  * @file creaPanelButtonContainer.h
28  * @brief implements PanelButtonContainer class
29  * @author Diego CACERES (diego.caceres[AT]creatis.insa-lyon.fr)
30  * @date  2011-06-02
31  */
32
33 #include "creaPanelButtonContainer.h"
34
35 namespace creaPanelButtonContainer
36 {
37         BEGIN_EVENT_TABLE(PanelButtonContainer,wxPanel)
38 //EVT_LIST_ITEM_SELECTED(-1, ListWx::ListEvent)
39
40 //(*EventTable(ButtonContainerPanel)
41 //*)
42         END_EVENT_TABLE ()
43 // ----------------------------------------------------------------------------------
44         typedef creaButtonContainer::model::TConcreteFunctor<PanelButtonContainer> TConcreteFunctor;
45 // ----------------------------------------------------------------------------------
46         PanelButtonContainer::PanelButtonContainer(wxWindow* parent,
47                         ButtonContainerSettings* bcSettings, int type)
48                         : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize,
49                                         wxDEFAULT_FRAME_STYLE, _T("creaPanelButtonContainer"))
50         {
51                 this->m_ButtonContainerSettings = bcSettings;
52
53                 //Using AuiManager to Manage the Panels
54                 this->m_AuiManager = new wxAuiManager(this,
55                                 wxAUI_MGR_DEFAULT | wxFULL_REPAINT_ON_RESIZE);
56
57                 if (type == 0)
58                 {
59                         //Class that manages the event!!!
60                         //EED 20/01/2012
61                         TConcreteFunctor* functor = new TConcreteFunctor(this,
62                                         &PanelButtonContainer::GenericButtonEvent);
63                         //end of the event definition
64                         this->m_EventPanel = new wxPanel(this);
65                         this->m_ButtonContainerPanel = new ButtonContainerPanel(this,
66                                         this->m_ButtonContainerSettings->GetButtonGroupSettings(functor));
67                         //Bottom Panel
68                         this->m_AuiManager->AddPane(this->m_EventPanel,
69                                         wxAuiPaneInfo().Name(_T("EventPanel")).Caption(_("EventPanel")).CaptionVisible(
70                                                         true).MinimizeButton().MaximizeButton().CloseButton(false).Center().Resizable(
71                                                         true));
72                         //Top Panel
73                         this->m_AuiManager->AddPane(this->m_ButtonContainerPanel,
74                                         wxAuiPaneInfo().Name(_T("ButtonContainerPanel")).DefaultPane().Caption(
75                                                         _("ButtonContainerPanel")).PinButton().CaptionVisible(true).CloseButton(
76                                                         false).Center().Resizable(true));
77                 }
78                 else if (type == 1)
79                 {
80                         //MLER
81                         TConcreteFunctor* lFunctor = new TConcreteFunctor(this,
82                                         &PanelButtonContainer::GenericListEvent);
83
84                         this->m_EventPanel = new wxPanel(this);
85                         std::cout << "tipo 1; new LIstWx" << std::endl;
86
87                         this->m_ListWxPanel = new ListWx(this, -1,
88                                         this->m_ButtonContainerSettings->GetItemsVector(), lFunctor);
89
90                         //Bottom Panel
91                         this->m_AuiManager->AddPane(this->m_EventPanel,
92                                         wxAuiPaneInfo().Name(_T("EventPanel")).Caption(_("EventPanel")).CaptionVisible(
93                                                         true).MinimizeButton().MaximizeButton().CloseButton(false).Center().Resizable(
94                                                         true));
95                         //Top Panel
96                         this->m_AuiManager->AddPane(this->m_ListWxPanel,
97                                         wxAuiPaneInfo().Name(_T("ListContainerPanel")).DefaultPane().Caption(
98                                                         _("ListContainerPanel")).PinButton().CaptionVisible(true).CloseButton(
99                                                         false).Center().Resizable(true));
100                 }
101                 else if (type == 2)
102                 {
103                         TConcreteFunctor* lFunctor = new TConcreteFunctor(this,
104                                         &PanelButtonContainer::GenericListEvent);
105
106                         this->m_EmptyPanel = new wxPanel(this);
107                         this->m_EventPanel = this->m_EmptyPanel;
108
109                         this->m_PanelUp = new wxPanel(this, -1, wxDefaultPosition, wxDefaultSize,
110                                         wxTAB_TRAVERSAL, _T("ListConfigContainerPanel"));
111                         wxGridBagSizer* mainSizer = new wxGridBagSizer(0, 0);
112                         mainSizer->AddGrowableCol(1);
113                         mainSizer->AddGrowableRow(0);
114
115                         //=======
116                         //Original List
117                         this->m_ListWxPanel = new ListWx(this->m_PanelUp, -1,
118                                         this->m_ButtonContainerSettings->GetItemsVector(), lFunctor);
119                         this->m_ListWxPanel->Show(false);
120                         //Configurable list
121                         this->m_CurrentWxPanel = new ListWx(this->m_PanelUp, -1, lFunctor);
122
123                         mainSizer->Add(this->m_ListWxPanel, wxGBPosition(0, 0), wxDefaultSpan,
124                                         wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL
125                                                         | wxALIGN_CENTER_VERTICAL, 5);
126                         mainSizer->Add(this->m_CurrentWxPanel, wxGBPosition(0, 1), wxDefaultSpan,
127                                         wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL
128                                                         | wxALIGN_CENTER_VERTICAL, 5);
129
130                         this->m_ConfigButton = new wxBitmapButton(this->m_PanelUp, -1,
131                                         wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW,
132                                         wxDefaultValidator, _T("Config"));
133
134                         mainSizer->Add(this->m_ConfigButton, wxGBPosition(1, 2), wxDefaultSpan,
135                                         wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
136
137                         //=======
138
139                         this->m_PanelUp->SetSizer(mainSizer);
140                         mainSizer->Fit(this->m_PanelUp);
141                         mainSizer->SetSizeHints(this->m_PanelUp);
142
143                         //Bottom Panel
144                         this->m_AuiManager->AddPane(this->m_EventPanel,
145                                         wxAuiPaneInfo().Name(_T("EventPanel")).Caption(_("EventPanel")).CaptionVisible(
146                                                         true).MinimizeButton().MaximizeButton().CloseButton(false).Center().Resizable(
147                                                         true));
148                         //Top Panel
149                         this->m_AuiManager->AddPane(this->m_PanelUp,
150                                         wxAuiPaneInfo().Name(_T("ListContainerPanel")).DefaultPane().Caption(
151                                                         _("ListContainerPanel")).PinButton().CaptionVisible(true).CloseButton(
152                                                         false).Center().Resizable(true));
153
154                         this->Connect(wxEVT_COMMAND_BUTTON_CLICKED,
155                                         wxCommandEventHandler(PanelButtonContainer::OnConfigButton));
156
157                 }
158
159                 //End MLER
160
161                 this->m_AuiManager->Update();
162         }
163 // ----------------------------------------------------------------------------------
164         PanelButtonContainer::~PanelButtonContainer()
165         {
166         }
167 // ----------------------------------------------------------------------------------
168         void PanelButtonContainer::UpdatePanel(const std::string &buttonName)
169         {
170                 try
171                 {
172                         //Hiding the last CartoSettingsPanel
173                         this->m_EventPanel->Show(false);
174                         //Finding the CartoSettingsPanel of the ButtonClicket
175                         this->m_EventPanel = this->m_ButtonContainerSettings->GetPanelButton(
176                                         buttonName);
177                         //changing the parent of the panel!
178                         if (this->m_EventPanel->GetParent() != this)
179                         {
180                                 this->m_EventPanel->Reparent(this);
181                         }       //fi
182                                 //Panel Management
183                         this->m_AuiManager->GetPane(_T("EventPanel")).window = this->m_EventPanel;
184                         //Updating the manager
185                         this->m_AuiManager->Update();
186                 }                       //yrt
187                 catch (const std::exception& e)
188                 {
189                         std::cerr
190                                         << "PanelButtonContainer::UpdatePanel( const std::string &buttonName )"
191                                         << "exception: " << e.what() << std::endl;
192                         std::cout << "Maybe the panel of the button is NULL" << std::endl;
193                         exit(1);
194                 }                       //hctac
195         }
196 // ----------------------------------------------------------------------------------
197         void PanelButtonContainer::GenericButtonEvent(const std::string &buttonName)
198         {
199                 this->UpdatePanel(buttonName);
200         }
201
202         // ----------------------------------------------------------------------------------
203         //MLER
204         void PanelButtonContainer::GenericListEvent(const std::string &buttonName)
205         {
206                 this->UpdateListPanel(buttonName);
207         }
208
209         // ----------------------------------------------------------------------------------
210         void PanelButtonContainer::UpdateListPanel(const std::string &buttonName)
211         {
212                 try
213                 {
214                         this->m_EventPanel->Show(false);
215                         this->m_EventPanel = this->m_ButtonContainerSettings->GetPanelList(
216                                         buttonName);
217
218                         if (this->m_EventPanel->GetParent() != this)
219                         {
220                                 this->m_EventPanel->Reparent(this);
221                         }       //fi
222                                 //Panel Management
223                         this->m_AuiManager->GetPane(_T("EventPanel")).window = this->m_EventPanel;
224                         //Updating the manager
225                         this->m_AuiManager->Update();
226
227                 } catch (const std::exception& e)
228                 {
229                         std::cerr
230                                         << "PanelButtonContainer::UpdatePanel( const std::string &buttonName )"
231                                         << "exception: " << e.what() << std::endl;
232                         std::cout << "Maybe the panel of the list is NULL" << std::endl;
233                         exit(1);
234                 }                                                       //hctac
235         }
236
237 // ----------------------------------------------------------------------------------
238         void PanelButtonContainer::OnConfigButton(wxCommandEvent& event)
239         {
240
241                 this->m_ListConfigDialog = new ListConfigDialog(this, -1, _("Config"),
242                                 this->m_ListWxPanel, this->m_CurrentWxPanel);
243
244                 std::cout << "Button Event" << std::endl;
245
246                 this->m_EventPanel->Show(false);
247
248                 this->m_ListConfigDialog->ShowModal();                                                  //Show Dialog
249                 this->m_CurrentWxPanel->Reparent(this->m_PanelUp);
250                 this->m_CurrentWxPanel->Show(true);
251                 this->m_CurrentWxPanel->SetFunctorEnabled(true);
252
253                 this->m_CurrentWxPanel->GetListBox()->Deselect(
254                                 this->m_CurrentWxPanel->GetListBox()->GetSelection());
255                 this->m_CurrentWxPanel->Update();
256                 this->m_ListWxPanel->Show(false);
257                 this->m_EventPanel->Show(false);
258                 this->m_EventPanel = this->m_EmptyPanel;
259
260                 this->m_AuiManager->GetPane(_T("EventPanel")).window = this->m_EventPanel;
261                 this->m_AuiManager->Update();
262
263         }
264         //End MLER
265 // ----------------------------------------------------------------------------------
266
267 }//ecapseman
268