]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/wxManualPaintPanel.cpp
DFCH: ManualPaint + ImageUndoRedo. undo 90% (with memory management but it doesn...
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualPaint / wxManualPaintPanel.cpp
1 #include "wxManualPaintPanel.h"
2 #include <wx/radiobox.h>
3
4 wxManualPaintPanel::wxManualPaintPanel(wxWindow * parent) :
5                 wxPanel(parent, -1) {
6         wxPanel *panel = this;
7         wxSizer *sizer = NULL;
8
9         // Widget interface
10         wxStaticText *tittleText = new wxStaticText(panel, -1,
11                         _T("             Manual Paint"));
12         _txtBrushSize = new wxStaticText(panel, -1, wxString(_T("  Brush size  ")));
13         _sldBrushSize = new wxSlider(panel, -1, 1, 1, 20, wxDefaultPosition,
14                         wxDefaultSize, wxSL_LABELS);
15         wxStaticText *txtGrayLevel = new wxStaticText(panel, -1,
16                         wxString(_T("  Gray Level  ")));
17         _sldGrayLevel = new wxSlider(panel, -1, 0, 0, 50, wxDefaultPosition,
18                         wxDefaultSize, wxSL_LABELS);
19         _graylevelCtrl = new wxTextCtrl(panel, -1);
20         _txtToleranceFill = new wxStaticText(panel, -1,
21                         wxString(_T("  Tolerance fill  ")));
22         _sldToleranceFill = new wxSlider(panel, -1, 50, 0, 50, wxDefaultPosition,
23                         wxDefaultSize, wxSL_LABELS);
24         _tolerancefillCtrl = new wxTextCtrl(panel, -1, _T("50"));
25         _txtDistanceFill = new wxStaticText(panel, -1,
26                         wxString(_T("  Distance fill  ")));
27         _sldDistanceFill = new wxSlider(panel, -1, 500, 1, 500, wxDefaultPosition,
28                         wxDefaultSize, wxSL_LABELS);
29         _distancefillCtrl = new wxTextCtrl(panel, -1, _T("500"));
30         //DFCH -- BarSlices
31         double range[2];
32         GetScalarRange(range);
33         int min = 0; //range[0];
34         int max = 6000; //range[1];
35         _mBarSlices = new mBarRange(panel, 70, 65);
36         _mBarSlices->SetMin(0);
37         _mBarSlices->SetStart(0);
38         _mBarSlices->SetOrientation(true);
39         _mBarSlices->setActiveStateTo(true);
40         _mBarSlices->setVisibleLabels(true);
41         _mBarSlices->setDeviceEndMargin(10);
42         _mBarSlices->setDeviceBlitStart(10, 10);
43         _mBarSlices->setIfWithActualDrawed(false);
44         _mBarSlices->setRepresentedValues(min, max);
45         _mBarSlices->SetStart(min);
46         _mBarSlices->SetEnd(max);
47         _mBarSlices->Update();
48         //DFCH -- End BarSlices
49
50         wxString lst2D3D[2];
51         lst2D3D[0] = _T("2D");
52         lst2D3D[1] = _T("3D");
53         _rb2D3D = new wxRadioBox(panel, -1, _T("2D / 3D"), wxDefaultPosition,
54                         wxSize(270, 45), 2, lst2D3D, 2, wxRA_SPECIFY_COLS);
55         _rb2D3D->SetSelection(1);
56
57         wxString lstBrushForm[2];
58         lstBrushForm[0] = _T("rectangle/cube");
59         lstBrushForm[1] = _T("circle/sphere");
60         _rbBrushForm = new wxRadioBox(panel, -1, _T("Brush form"),
61                         wxDefaultPosition, wxSize(270, 45), 2, lstBrushForm, 2,
62                         wxRA_SPECIFY_COLS);
63
64         _txtToleranceFill->Disable();
65         _sldToleranceFill->Disable();
66         _tolerancefillCtrl->Disable();
67
68         _txtDistanceFill->Disable();
69         _sldDistanceFill->Disable();
70         _distancefillCtrl->Disable();
71
72         wxString lstBrushTool[2];
73         lstBrushTool[0] = _T("Brush");
74         lstBrushTool[1] = _T("Fill");
75         _rbBrushTool = new wxRadioBox(panel, -1, _T("Brush tool"),
76                         wxDefaultPosition, wxSize(270, 45), 2, lstBrushTool, 2,
77                         wxRA_SPECIFY_COLS);
78
79         wxButton *btnCopy = new wxButton(panel, -1, _T("Copy"));
80         btnCopy->Disable();
81         wxButton *btnUndo = new wxButton(panel, -1, _T("Undo"));
82         //btnUndo->Disable();
83
84         Connect(
85                         _sldBrushSize->GetId(),
86                         wxEVT_SCROLL_THUMBRELEASE,
87                         (wxObjectEventFunction) (void(wxPanel::*)(
88                                         wxScrollEvent&)) (&wxManualPaintPanel::OnBrushSize));
89
90 Connect (
91                         _sldGrayLevel->GetId(),
92                         wxEVT_SCROLL_THUMBRELEASE,
93                         (wxObjectEventFunction) (void(wxPanel::*)(
94                                         wxScrollEvent&)) &wxManualPaintPanel::OnSldGrayLevel);Connect
95         (
96                         _graylevelCtrl->GetId(),
97                         wxEVT_COMMAND_TEXT_UPDATED,
98                         (wxObjectEventFunction) (void(wxPanel::*)(
99                                         wxCommandEvent&)) &wxManualPaintPanel::OnCtrTxtGrayLevel);
100
101 Connect (
102                         _sldToleranceFill->GetId(),
103                         wxEVT_SCROLL_THUMBRELEASE,
104                         (wxObjectEventFunction) (void(wxPanel::*)(
105                                         wxScrollEvent&)) &wxManualPaintPanel::OnSldToleranceFill);Connect
106         (
107                         _tolerancefillCtrl->GetId(),
108                         wxEVT_COMMAND_TEXT_UPDATED,
109                         (wxObjectEventFunction) (void(wxPanel::*)(
110                                         wxCommandEvent&)) &wxManualPaintPanel::OnCtrTxtToleranceFill);
111
112 Connect (
113                         _sldDistanceFill->GetId(),
114                         wxEVT_SCROLL_THUMBRELEASE,
115                         (wxObjectEventFunction) (void(wxPanel::*)(
116                                         wxScrollEvent&)) &wxManualPaintPanel::OnSldDistanceFill);Connect
117         (
118                         _distancefillCtrl->GetId(),
119                         wxEVT_COMMAND_TEXT_UPDATED,
120                         (wxObjectEventFunction) (void(wxPanel::*)(
121                                         wxCommandEvent&)) &wxManualPaintPanel::OnCtrTxtDistanceFill);
122
123 Connect (
124                         _rb2D3D->GetId(),
125                         wxEVT_COMMAND_RADIOBOX_SELECTED,
126                         (wxObjectEventFunction) (void(wxPanel::*)(
127                                         wxCommandEvent&)) &wxManualPaintPanel::On2D3D);Connect
128         (
129                         _rbBrushForm->GetId(),
130                         wxEVT_COMMAND_RADIOBOX_SELECTED,
131                         (wxObjectEventFunction) (void(wxPanel::*)(
132                                         wxCommandEvent&)) &wxManualPaintPanel::OnBrushForm);Connect
133         (
134                         _rbBrushTool->GetId(),
135                         wxEVT_COMMAND_RADIOBOX_SELECTED,
136                         (wxObjectEventFunction) (void(wxPanel::*)(
137                                         wxCommandEvent&)) &wxManualPaintPanel::OnBrushTool);Connect
138         (
139                         btnCopy->GetId(),
140                         wxEVT_COMMAND_BUTTON_CLICKED,
141                         (wxObjectEventFunction) (void(wxPanel::*)(
142                                         wxCommandEvent&)) &wxManualPaintPanel::OnCopy);Connect
143         (
144                         btnUndo->GetId(),
145                         wxEVT_COMMAND_BUTTON_CLICKED,
146                         (wxObjectEventFunction) (void(wxPanel::*)(
147                                         wxCommandEvent&)) &wxManualPaintPanel::OnUndo);
148
149 Connect (
150                         _mBarSlices->GetId(),
151                         wxEVT_TSBAR,
152                         (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onBarrange);
153 //                      Connect(modBarRange->GetId(),98765,(wxObjectEventFunction) (wxCommandEventFunction)  &wxWidgetSliderMinMax::onActualChange_Bar );
154         Connect(
155                         _mBarSlices->GetId(),
156                         wxEVT_TSBAR_ACTUAL,
157                         (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onActualChange_Bar);
158         Connect(
159                         _mBarSlices->GetId(),
160                         wxEVT_TSBAR_START,
161                         (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onStartChange_Bar);
162         Connect(
163                         _mBarSlices->GetId(),
164                         wxEVT_TSBAR_END,
165                         (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onEndChange_Bar);
166         Connect(
167                         _mBarSlices->GetId(),
168                         wxEVT_SELECTION_END,
169                         (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onSelectionEnd);
170         Connect(
171                         _mBarSlices->GetId(),
172                         wxEVT_TSBAR_MOVED,
173                         (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onMovedBar);
174
175         wxFlexGridSizer *sizer1 = new wxFlexGridSizer(1);
176
177         sizer1->Add(new wxStaticText(panel, -1, _T("  ")));
178         sizer1->Add(tittleText);
179
180         sizer1->Add(new wxStaticText(panel, -1, _T("  ")));
181         sizer1->Add(_rbBrushTool, 1, wxGROW);
182
183         wxFlexGridSizer *sizerGrayLevel = new wxFlexGridSizer(2);
184         sizerGrayLevel->Add(txtGrayLevel);
185         sizerGrayLevel->Add(_graylevelCtrl);
186         sizer1->Add(sizerGrayLevel, 1, wxGROW);
187         sizer1->Add(_sldGrayLevel, 1, wxGROW);
188
189         sizer1->Add(new wxStaticText(this, -1, _T( "Selected Range" )), 1, wxGROW);
190         sizer1->Add(_mBarSlices, 1, wxGROW);
191
192         sizer1->Add(new wxStaticText(panel, -1, _T("  ")));
193         sizer1->Add(_rb2D3D, 1, wxGROW);
194
195         sizer1->Add(new wxStaticText(panel, -1, _T("  ")));
196         sizer1->Add(_txtBrushSize);
197         sizer1->Add(_sldBrushSize, 1, wxGROW);
198
199         sizer1->Add(new wxStaticText(panel, -1, _T("  ")));
200         sizer1->Add(_rbBrushForm, 1, wxGROW);
201
202         wxFlexGridSizer *sizerTolerance = new wxFlexGridSizer(2);
203         sizerTolerance->Add(_txtToleranceFill);
204         sizerTolerance->Add(_tolerancefillCtrl);
205         sizer1->Add(sizerTolerance);
206         sizer1->Add(_sldToleranceFill, 1, wxGROW);
207
208         wxFlexGridSizer *sizerDistance = new wxFlexGridSizer(2);
209         sizerDistance->Add(_txtDistanceFill);
210         sizerDistance->Add(_distancefillCtrl);
211         sizer1->Add(sizerDistance);
212         sizer1->Add(_sldDistanceFill, 1, wxGROW);
213
214         sizer1->Add(new wxStaticText(panel, -1, _T("  ")));
215         sizer1->Add(btnCopy, 1, wxGROW);
216         sizer1->Add(new wxStaticText(panel, -1, _T("  ")));
217         sizer1->Add(btnUndo, 1, wxGROW);
218
219         sizer = sizer1;
220         panel->SetSizer(sizer);
221         panel->SetAutoLayout(true);
222         panel->Layout();
223 }
224
225 //---------------------------------------------------------------------------
226 wxManualPaintPanel::~wxManualPaintPanel() {
227 }
228
229 //---------------------------------------------------------------------------
230 void wxManualPaintPanel::OnBrushSize(wxScrollEvent& event) {
231         SetBrushSize(_sldBrushSize->GetValue());
232 }
233
234 //---------------------------------------------------------------------------
235 void wxManualPaintPanel::OnSldGrayLevel(wxScrollEvent& event) {
236         SetGrayLevel((double) (_sldGrayLevel->GetValue()));
237
238         wxString text;
239         text.Printf(wxT("%d"), _sldGrayLevel->GetValue());
240         _graylevelCtrl->SetValue(text);
241 }
242
243 //---------------------------------------------------------------------------
244 void wxManualPaintPanel::OnCtrTxtGrayLevel(wxCommandEvent &event) {
245         double graylevel;
246         wxString text = _graylevelCtrl->GetValue();
247         if (text.ToDouble(&graylevel)) {
248                 SetGrayLevel(graylevel);
249         }
250 }
251
252 //---------------------------------------------------------------------------
253 void wxManualPaintPanel::OnSldDistanceFill(wxScrollEvent& event) {
254         SetDistanceFill((double) (_sldDistanceFill->GetValue()));
255
256         wxString text;
257         text.Printf(wxT("%d"), _sldDistanceFill->GetValue());
258         _distancefillCtrl->SetValue(text);
259 }
260
261 //---------------------------------------------------------------------------
262 void wxManualPaintPanel::OnCtrTxtDistanceFill(wxCommandEvent &event) {
263         double distancefill;
264         wxString text = _distancefillCtrl->GetValue();
265         if (text.ToDouble(&distancefill)) {
266                 SetDistanceFill(distancefill);
267         }
268 }
269
270 //---------------------------------------------------------------------------
271 void wxManualPaintPanel::OnSldToleranceFill(wxScrollEvent& event) {
272         SetToleranceFill((double) (_sldToleranceFill->GetValue()));
273
274         wxString text;
275         text.Printf(wxT("%d"), _sldToleranceFill->GetValue());
276         _tolerancefillCtrl->SetValue(text);
277 }
278
279 //---------------------------------------------------------------------------
280 void wxManualPaintPanel::OnCtrTxtToleranceFill(wxCommandEvent &event) {
281         double tolerance;
282         wxString text = _tolerancefillCtrl->GetValue();
283         if (text.ToDouble(&tolerance)) {
284                 SetToleranceFill(tolerance);
285         }
286 }
287
288 //---------------------------------------------------------------------------
289 void wxManualPaintPanel::DisableControls() {
290         _txtBrushSize->Disable();
291         _sldBrushSize->Disable();
292         _rbBrushForm->Disable();
293
294         _txtToleranceFill->Disable();
295         _sldToleranceFill->Disable();
296         _tolerancefillCtrl->Disable();
297
298         _txtDistanceFill->Disable();
299         _sldDistanceFill->Disable();
300         _distancefillCtrl->Disable();
301 }
302
303 //---------------------------------------------------------------------------
304 void wxManualPaintPanel::On2D3D(wxCommandEvent &event) {
305         Set2D3D(_rb2D3D->GetSelection());
306 }
307
308 //---------------------------------------------------------------------------
309 void wxManualPaintPanel::OnBrushForm(wxCommandEvent &event) {
310         SetBrushForm(_rbBrushForm->GetSelection());
311 }
312
313 //---------------------------------------------------------------------------
314 void wxManualPaintPanel::OnBrushTool(wxCommandEvent &event) {
315         DisableControls();
316         SetTool(_rbBrushTool->GetSelection());
317
318         if (_rbBrushTool->GetSelection() == 0) //Brush tool
319                         {
320                 _txtBrushSize->Enable();
321                 _sldBrushSize->Enable();
322                 _rbBrushForm->Enable();
323         }
324
325         if (_rbBrushTool->GetSelection() == 1) //Fill tool
326                         {
327                 _txtToleranceFill->Enable();
328                 _sldToleranceFill->Enable();
329                 _tolerancefillCtrl->Enable();
330
331                 _txtDistanceFill->Enable();
332                 _sldDistanceFill->Enable();
333                 _distancefillCtrl->Enable();
334         }
335 }
336
337 //---------------------------------------------------------------------------
338 void wxManualPaintPanel::OnCopy(wxCommandEvent &event) {
339 }
340
341 //---------------------------------------------------------------------------
342 void wxManualPaintPanel::OnUndo(wxCommandEvent &event) {
343         this->_manualPaintModel->Undo();
344 }
345
346 //--------------------------------------------------------------------------------------------------------------------------------
347 // Min-Max Barrange received events
348 //--------------------------------------------------------------------------------------------------------------------------------
349 void wxManualPaintPanel::onBarrange(wxCommandEvent& event) {
350 }
351 void wxManualPaintPanel::onActualChange_Bar(wxCommandEvent& event) {
352         /*mbbtkSliderMinMax->bbSetOutputOutActual(modBarRange->GetActual());
353          mbbtkSliderMinMax->bbSignalOutputModification(std::string("OutActual"));*/
354 }
355 void wxManualPaintPanel::onStartChange_Bar(wxCommandEvent& event) {
356         SetRangeMin(_mBarSlices->GetStart());
357 }
358
359 void wxManualPaintPanel::onEndChange_Bar(wxCommandEvent& event) {
360         SetRangeMax(_mBarSlices->GetEnd());
361 }
362
363 void wxManualPaintPanel::onSelectionEnd(wxCommandEvent& event) {
364 }
365
366 void wxManualPaintPanel::onMovedBar(wxCommandEvent& event) {
367 }
368 //--------------------------------------------------------------------------
369 //-------------------------------------------------------------------------
370 //--------------------------------------------------------------------------
371 //--------------------------------------------------------------------------
372