]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/creaButtonContainer/view/listConfigDialog.cxx
#2647 creaMaracasVisu Feature New Normal - Merge creaButtonContainer BRANCH
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / creaButtonContainer / view / listConfigDialog.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 #include "listConfigDialog.h"
27
28 namespace creaButtonContainer
29 {
30
31         namespace view
32         {
33                 ListConfigDialog::ListConfigDialog(wxWindow* parent, wxWindowID id,
34                                 const wxString& title, ListWx* modelList, ListWx* currentList) :
35                                 wxDialog(parent, id, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE)
36                 {
37                         this->m_OriginalListWx = modelList;
38                         this->m_OriginalListWx->Reparent(this);
39                         this->m_OriginalListWx->Show(true);
40                         this->m_OriginalListWx->SetFunctorEnabled(false);
41
42                         this->m_CurrentListWx = currentList;
43                         this->m_CurrentListWx->Reparent(this);
44                         this->m_CurrentListWx->SetFunctorEnabled(false);
45                         this->m_CurrentListWx->Show(true);
46                         this->m_LastStatus = this->m_CurrentListWx->GetListBox()->GetStrings();
47
48                         wxGridBagSizer* dialogSizer = new wxGridBagSizer(0, 0);
49                         dialogSizer->AddGrowableCol(0);
50                         dialogSizer->AddGrowableRow(0);
51
52                         //Top Sizer
53                         wxGridBagSizer* topSizer = new wxGridBagSizer(0, 0);
54                         topSizer->AddGrowableCol(0);
55                         topSizer->AddGrowableCol(2);
56                         topSizer->AddGrowableRow(0);
57                         topSizer->Add(this->m_OriginalListWx, wxGBPosition(0, 0), wxDefaultSpan,
58                                         wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL
59                                                         | wxALIGN_CENTER_VERTICAL, 5);
60                         wxBoxSizer* boxSizer1 = new wxBoxSizer(wxVERTICAL);
61
62                         wxBitmap AddIcon(ArrowNextG_xpm); //Icon of button
63
64                         this->m_AddButton = new wxBitmapButton(this, 1, AddIcon,
65                                         wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW, wxDefaultValidator,
66                                         _T(">"));
67
68                         boxSizer1->Add(this->m_AddButton, 1,
69                                         wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
70
71                         wxBitmap DeleteIcon(ArrowBackG_xpm); //Icon of button
72
73                         this->m_RemoveButton = new wxBitmapButton(this, 2, DeleteIcon,
74                                         wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW, wxDefaultValidator,
75                                         _T("<"));
76                         boxSizer1->Add(this->m_RemoveButton, 1,
77                                         wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
78                         topSizer->Add(boxSizer1, wxGBPosition(0, 1), wxDefaultSpan,
79                                         wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
80
81                         topSizer->Add(this->m_CurrentListWx, wxGBPosition(0, 2), wxDefaultSpan,
82                                         wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL
83                                                         | wxALIGN_CENTER_VERTICAL, 5);
84                         wxBoxSizer* boxSizer2 = new wxBoxSizer(wxVERTICAL);
85
86                         wxBitmap TopIcon(ArrowTopG_xpm); //Icon of button
87
88                         this->m_UpButton = new wxBitmapButton(this, 3, TopIcon,
89                                         wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW, wxDefaultValidator,
90                                         _T("+"));
91                         boxSizer2->Add(this->m_UpButton, 1,
92                                         wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
93
94
95                         wxBitmap DownIcon(ArrowDownG_xpm); //Icon of button
96
97                         this->m_DownButton = new wxBitmapButton(this, 4, DownIcon,
98                                         wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW, wxDefaultValidator,
99                                         _T("-"));
100                         boxSizer2->Add(this->m_DownButton, 1,
101                                         wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
102                         topSizer->Add(boxSizer2, wxGBPosition(0, 3), wxDefaultSpan,
103                                         wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
104                         dialogSizer->Add(topSizer, wxGBPosition(0, 0), wxDefaultSpan,
105                                         wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL
106                                                         | wxALIGN_CENTER_VERTICAL, 5);
107
108                         //Bottom Sizer
109
110                         wxBoxSizer* bottomSizer = new wxBoxSizer(wxHORIZONTAL);
111                         bottomSizer->Add(0, 0, 1,
112                                         wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
113                         this->m_CancelButton = new wxButton(this, 5, _("Cancel"),
114                                         wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator,
115                                         _T("Cancel"));
116                         bottomSizer->Add(this->m_CancelButton, 1,
117                                         wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
118                         this->m_OkButton = new wxButton(this, 6, _("Ok"), wxDefaultPosition,
119                                         wxDefaultSize, 0, wxDefaultValidator, _T("Ok"));
120                         bottomSizer->Add(this->m_OkButton, 1,
121                                         wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
122                         bottomSizer->Add(0, 0, 1,
123                                         wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
124                         dialogSizer->Add(bottomSizer, wxGBPosition(1, 0), wxDefaultSpan,
125                                         wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
126                         this->SetSizer(dialogSizer);
127                         dialogSizer->Fit(this);
128                         dialogSizer->SetSizeHints(this);
129
130
131                         //---------------------------------------------------------------------------------------------
132                         // Events
133                         //Add
134                         Connect(1, wxEVT_COMMAND_BUTTON_CLICKED,
135                                         (wxObjectEventFunction) &ListConfigDialog::OnAdd);
136
137                         //Remove
138                         Connect(2, wxEVT_COMMAND_BUTTON_CLICKED,
139                                         (wxObjectEventFunction) &ListConfigDialog::OnDelete);
140
141                         //Up
142                         Connect(3, wxEVT_COMMAND_BUTTON_CLICKED,
143                                         (wxObjectEventFunction) &ListConfigDialog::OnMoveUp);
144
145                         //Down
146                         Connect(4, wxEVT_COMMAND_BUTTON_CLICKED,
147                                         (wxObjectEventFunction) &ListConfigDialog::OnMoveDown);
148
149                         //Cancel
150                         Connect(5, wxEVT_COMMAND_BUTTON_CLICKED,
151                                         (wxObjectEventFunction) &ListConfigDialog::OnCancel);
152
153                         //Ok
154                         Connect(6, wxEVT_COMMAND_BUTTON_CLICKED,
155                                         (wxObjectEventFunction) &ListConfigDialog::OnOk);
156
157                 }
158
159                 ListConfigDialog::~ListConfigDialog()
160                 {
161
162                 }
163
164                 void ListConfigDialog::OnAdd(wxCommandEvent& event)
165                 {
166                         wxString itSelect = m_OriginalListWx->GetListBox()->GetStringSelection();
167                         std::cout << "Count = " << this->m_CurrentListWx->GetListBox()->GetCount()
168                                         << std::endl;
169                         if (!itSelect.IsEmpty())
170                         {
171                                 int v = this->m_CurrentListWx->GetListBox()->FindString(itSelect);
172                                 if (v == -1)
173                                 {
174                                         this->m_CurrentListWx->GetListBox()->Append(itSelect);
175                                         this->m_CurrentListWx->GetListBox()->Update();
176                                 }
177                         }
178
179                 }
180                 void ListConfigDialog::OnDelete(wxCommandEvent& event)
181                 {
182                         wxString itSelect = m_CurrentListWx->GetListBox()->GetStringSelection();
183
184                         if (!itSelect.IsEmpty())
185                         {
186                                 int v = this->m_CurrentListWx->GetListBox()->FindString(itSelect);
187                                 if (v != -1)
188                                 {
189                                         this->m_CurrentListWx->GetListBox()->Delete(v);
190                                         this->m_CurrentListWx->GetListBox()->Update();
191                                 }
192                         }
193                 }
194                 void ListConfigDialog::OnMoveUp(wxCommandEvent& event)
195                 {
196                         wxString itSelect = m_CurrentListWx->GetListBox()->GetStringSelection();
197
198                         if (!itSelect.IsEmpty())
199                         {
200                                 int v = this->m_CurrentListWx->GetListBox()->FindString(itSelect);
201                                 if (v > 0)
202                                 {
203                                         this->m_CurrentListWx->GetListBox()->Delete(v);
204                                         this->m_CurrentListWx->GetListBox()->Insert(itSelect, v - 1);
205                                         this->m_CurrentListWx->GetListBox()->Update();
206                                 }
207                         }
208
209                 }
210                 void ListConfigDialog::OnMoveDown(wxCommandEvent& event)
211                 {
212                         wxString itSelect = m_CurrentListWx->GetListBox()->GetStringSelection();
213
214                         if (!itSelect.IsEmpty())
215                         {
216                                 int v = this->m_CurrentListWx->GetListBox()->FindString(itSelect);
217                                 std::cout << "Count = "
218                                                 << this->m_CurrentListWx->GetListBox()->GetCount() << std::endl;
219                                 if ((v < this->m_CurrentListWx->GetListBox()->GetCount() - 1)
220                                                 && (v != -1))
221                                 {
222                                         this->m_CurrentListWx->GetListBox()->Delete(v);
223                                         this->m_CurrentListWx->GetListBox()->Insert(itSelect, v + 1);
224                                         this->m_CurrentListWx->GetListBox()->Update();
225                                 }
226                         }
227
228                 }
229                 void ListConfigDialog::OnOk(wxCommandEvent& event)
230                 {
231
232                         this->EndModal(1);
233                 }
234                 void ListConfigDialog::OnCancel(wxCommandEvent& event)
235                 {
236
237                         this->m_CurrentListWx->GetListBox()->Clear();
238                         this->m_CurrentListWx->GetListBox()->Append(this->m_LastStatus);
239                         this->Close();
240                 }
241         }
242 }