1 /*# ---------------------------------------------------------------------
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
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
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.
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
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 # ------------------------------------------------------------------------ */
26 #include "wxManualPaintPanel.h"
27 #include <wx/radiobox.h>
29 wxManualPaintPanel::wxManualPaintPanel( wxWindow * parent )
30 : wxPanel( parent, -1 )
32 wxSizer *sizer = new wxFlexGridSizer( 1 );
35 wxStaticText *tittleText = new wxStaticText( this, -1,
36 _T(" Manual Paint") );
38 sizer->Add( tittleText );
39 //giving some blank spaces
40 sizer->Add( new wxStaticText( this, -1, _T(" ") ) );
42 this->ConfigureBrushToolRadioButton( );
43 this->Configure2D3DRadioButton( );
44 this->ConfigureBrushFormRadioButton( );
45 this->ConfigureRangeBar( );
46 this->ConfigureGrayLevelSld( );
47 this->ConfigureBrushSizeSld( );
48 this->ConfigureDistanceFillSld( );
49 this->ConfigureTolFillSld( );
50 this->ConfigureEditButtons( );
53 wxStaticText *editButtonsText = new wxStaticText( this, -1,
55 sizer->Add( editButtonsText );
56 this->_buttonsSizer = new wxFlexGridSizer( 4 );
57 this->_buttonsSizer->Add( _btnUndo, 1, wxGROW );
58 this->_buttonsSizer->Add( _btnRedo, 1, wxGROW );
59 this->_buttonsSizer->Add( _btnCopy, 1, wxGROW );
61 this->_gConfigSizer = new wxFlexGridSizer( 1 );
62 //BrushTool Radio Button
64 this->_gConfigSizer->Add(
65 new wxStaticText( this, -1, _T(" ") ) );
67 this->_gConfigSizer->Add( _rbBrushTool, 1, wxGROW );
69 this->_gConfigSizer->Add( _rb2D3D, 1, wxGROW );
71 this->_gConfigSizer->Add(
72 new wxStaticText( this, -1, _T( "Select Range" ) ), 1, wxGROW );
73 this->_gConfigSizer->Add( _mBarSlices, 1, wxGROW );
75 this->_gConfigSizer->Add( _txtGrayLevel );
76 wxFlexGridSizer *sizerGrayLevel = new wxFlexGridSizer( 2, wxHORIZONTAL );
77 sizerGrayLevel->Add( _sldGrayLevel, 1, wxGROW );
78 sizerGrayLevel->Add( _graylevelCtrl, 1,
79 wxALIGN_BOTTOM | wxALIGN_LEFT | wxALL, 5 );
80 this->_gConfigSizer->Add( sizerGrayLevel, 1, wxGROW );
83 this->_brushSizer = new wxFlexGridSizer( 1 );
85 this->_brushSizer->Add( new wxStaticText( this, -1, _T(" ") ) );
87 this->_brushSizer->Add(
88 new wxStaticText( this, -1, _T("Brush Settings") ) );
90 this->_brushSizer->Add( _txtBrushSize );
91 wxFlexGridSizer *sizersdlBrushSize = new wxFlexGridSizer( 2, wxHORIZONTAL );
92 sizersdlBrushSize->Add( _sldBrushSize, 1, wxGROW );
93 sizersdlBrushSize->Add( _BrushSizeCtrl, 1,
94 wxALIGN_BOTTOM | wxALIGN_LEFT | wxALL, 5 );
95 this->_brushSizer->Add( sizersdlBrushSize );
96 //BrushForm RadioButton
97 this->_brushSizer->Add( _rbBrushForm, 1, wxGROW );
99 this->_FillSizer = new wxFlexGridSizer( 1 );
101 this->_FillSizer->Add( new wxStaticText( this, -1, _T(" ") ) );
103 this->_FillSizer->Add( new wxStaticText( this, -1, _T("Fill Settings") ) );
105 this->_FillSizer->Add( _txtToleranceFill );
106 wxFlexGridSizer *sizerTolerance = new wxFlexGridSizer( 2 );
107 sizerTolerance->Add( _sldToleranceFill, 1, wxGROW );
108 sizerTolerance->Add( _tolerancefillCtrl, 1,
109 wxALIGN_BOTTOM | wxALIGN_LEFT | wxALL, 5 );
110 this->_FillSizer->Add( sizerTolerance, 1, wxGROW );
112 this->_FillSizer->Add( _txtDistanceFill );
113 wxFlexGridSizer *sizerDistance = new wxFlexGridSizer( 2 );
114 sizerDistance->Add( _sldDistanceFill, 1, wxGROW );
115 sizerDistance->Add( _distancefillCtrl, 1,
116 wxALIGN_BOTTOM | wxALIGN_LEFT | wxALL, 5 );
117 this->_FillSizer->Add( sizerDistance );
119 sizer->Add( _buttonsSizer );
120 sizer->Add( _gConfigSizer );
121 sizer->Add( _brushSizer );
122 sizer->Add( _FillSizer );
124 this->ConnectComponents( ); //DFCH
125 this->_FillSizer->Show( false );
127 this->SetSizer( sizer );
128 this->SetAutoLayout( true );
133 //---------------------------------------------------------------------------
134 wxManualPaintPanel::~wxManualPaintPanel( )
138 //--------------------------------------------------------------------------
141 void wxManualPaintPanel::ConfigureBrushToolRadioButton( )
143 wxString lstBrushForm[ 2 ];
144 lstBrushForm[ 0 ] = _T("rectangle/cube");
145 lstBrushForm[ 1 ] = _T("circle/sphere");
146 _rbBrushForm = new wxRadioBox( this, -1, _T("Brush form"),
147 wxDefaultPosition, wxSize( 270, 45 ), 2, lstBrushForm, 2,
150 //--------------------------------------------------------------------------
151 void wxManualPaintPanel::Configure2D3DRadioButton( )
153 wxString lst2D3D[ 2 ];
154 lst2D3D[ 0 ] = _T("2D");
155 lst2D3D[ 1 ] = _T("3D");
156 _rb2D3D = new wxRadioBox( this, -1, _T("2D / 3D"), wxDefaultPosition,
157 wxSize( 270, 45 ), 2, lst2D3D, 2, wxRA_SPECIFY_COLS );
158 _rb2D3D->SetSelection( 1 );
162 //--------------------------------------------------------------------------
163 void wxManualPaintPanel::ConfigureBrushFormRadioButton( )
165 wxString lstBrushTool[ 2 ];
166 lstBrushTool[ 0 ] = _T("Brush");
167 lstBrushTool[ 1 ] = _T("Fill");
168 _rbBrushTool = new wxRadioBox( this, -1, _T("Brush tool"),
169 wxDefaultPosition, wxSize( 270, 45 ), 2, lstBrushTool, 2,
173 //--------------------------------------------------------------------------
174 void wxManualPaintPanel::ConfigureRangeBar( )
178 GetScalarRange( range );
179 int min = 0; //range[0];
180 int max = 6000; //range[1];
181 _mBarSlices = new mBarRange( this, 70, 65 );
182 _mBarSlices->SetMin( 0 );
183 _mBarSlices->SetStart( 0 );
184 _mBarSlices->SetOrientation( true );
185 _mBarSlices->setActiveStateTo( true );
186 _mBarSlices->setVisibleLabels( true );
187 _mBarSlices->setDeviceEndMargin( 10 );
188 _mBarSlices->setDeviceBlitStart( 10, 10 );
189 _mBarSlices->setIfWithActualDrawed( false );
190 _mBarSlices->setRepresentedValues( min, max );
191 _mBarSlices->SetStart( min );
192 _mBarSlices->SetEnd( max );
193 _mBarSlices->Update( );
194 //DFCH -- End BarSlices
196 //--------------------------------------------------------------------------
197 void wxManualPaintPanel::ConfigureGrayLevelSld( )
199 _txtGrayLevel = new wxStaticText( this, -1,
200 wxString( _T(" Gray Level ") ) );
201 _sldGrayLevel = new wxSlider( this, -1, 0, 0, 255, wxDefaultPosition,
202 wxDefaultSize, wxSL_LABELS );
203 _sldGrayLevel->SetMinSize( wxSize( 200, -1 ) );
204 _sldGrayLevel->SetMaxSize( wxSize( 200, -1 ) );
205 _graylevelCtrl = new wxSpinCtrl( this, wxID_ANY, wxEmptyString,
206 wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 65535, 0 );
208 //--------------------------------------------------------------------------
209 void wxManualPaintPanel::ConfigureBrushSizeSld( )
211 _txtBrushSize = new wxStaticText( this, -1,
212 wxString( _T(" Brush size ") ) );
213 _sldBrushSize = new wxSlider( this, -1, 1, 1, 50, wxDefaultPosition,
214 wxDefaultSize, wxSL_LABELS );
215 _BrushSizeCtrl = new wxSpinCtrl( this, wxID_ANY, wxEmptyString,
216 wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 65535, 0 );
217 _sldBrushSize->SetMinSize( wxSize( 200, -1 ) );
218 _sldBrushSize->SetMaxSize( wxSize( 200, -1 ) );
220 //--------------------------------------------------------------------------
221 void wxManualPaintPanel::ConfigureDistanceFillSld( )
223 _txtDistanceFill = new wxStaticText( this, -1,
224 wxString( _T(" Distance fill ") ) );
225 _sldDistanceFill = new wxSlider( this, -1, 50, 1, 500, wxDefaultPosition,
226 wxDefaultSize, wxSL_LABELS );
227 _sldDistanceFill->SetMinSize( wxSize( 200, -1 ) );
228 _sldDistanceFill->SetMaxSize( wxSize( 200, -1 ) );
229 _distancefillCtrl = new wxSpinCtrl( this, wxID_ANY, wxEmptyString,
230 wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 500, 50 );
231 _txtDistanceFill->Disable( );
232 _sldDistanceFill->Disable( );
233 _distancefillCtrl->Disable( );
235 //--------------------------------------------------------------------------
236 void wxManualPaintPanel::ConfigureTolFillSld( )
238 _txtToleranceFill = new wxStaticText( this, -1,
239 wxString( _T(" Tolerance fill ") ) );
240 _sldToleranceFill = new wxSlider( this, -1, 125, 0, 255, wxDefaultPosition,
241 wxDefaultSize, wxSL_LABELS );
242 _sldToleranceFill->SetMinSize( wxSize( 200, -1 ) );
243 _sldToleranceFill->SetMaxSize( wxSize( 200, -1 ) );
244 _tolerancefillCtrl = new wxSpinCtrl( this, wxID_ANY, wxEmptyString,
245 wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 65535, 50 );
246 _txtToleranceFill->Disable( );
247 _sldToleranceFill->Disable( );
248 _tolerancefillCtrl->Disable( );
251 //--------------------------------------------------------------------------
252 void wxManualPaintPanel::ConfigureEditButtons( )
254 _btnCopy = new wxButton( this, -1, _T("Copy") );
255 _btnCopy->Disable( );
256 _btnUndo = new wxButton( this, -1, _T("Undo") );
257 _btnRedo = new wxButton( this, -1, _T("Redo") );
258 //btnUndo->Disable();
260 //--------------------------------------------------------------------------
263 * The following function allows the management of the events
265 void wxManualPaintPanel::ConnectComponents( ) //DFCH
268 _sldBrushSize->GetId( ),
269 wxEVT_SCROLL_THUMBRELEASE,
270 (wxObjectEventFunction) (void(wxPanel::*)(
271 wxScrollEvent& )) (&wxManualPaintPanel::OnBrushSize) );this ->Connect (_sldGrayLevel->GetId(),
272 wxEVT_SCROLL_THUMBRELEASE,
273 (wxObjectEventFunction) (void(wxPanel::*)(
274 wxScrollEvent&)) &wxManualPaintPanel::OnSldGrayLevel);
277 _graylevelCtrl->GetId(),
278 wxEVT_COMMAND_TEXT_UPDATED,
279 (wxObjectEventFunction) (void(wxPanel::*)(
280 wxCommandEvent&)) &wxManualPaintPanel::OnCtrTxtGrayLevel);
283 _sldToleranceFill->GetId(),
284 wxEVT_SCROLL_THUMBRELEASE,
285 (wxObjectEventFunction) (void(wxPanel::*)(
286 wxScrollEvent&)) &wxManualPaintPanel::OnSldToleranceFill);this->Connect
288 _tolerancefillCtrl->GetId(),
289 wxEVT_COMMAND_TEXT_UPDATED,
290 (wxObjectEventFunction) (void(wxPanel::*)(
291 wxCommandEvent&)) &wxManualPaintPanel::OnCtrTxtToleranceFill);
294 _sldDistanceFill->GetId(),
295 wxEVT_SCROLL_THUMBRELEASE,
296 (wxObjectEventFunction) (void(wxPanel::*)(
297 wxScrollEvent&)) &wxManualPaintPanel::OnSldDistanceFill);this->Connect
299 _distancefillCtrl->GetId(),
300 wxEVT_COMMAND_TEXT_UPDATED,
301 (wxObjectEventFunction) (void(wxPanel::*)(
302 wxCommandEvent&)) &wxManualPaintPanel::OnCtrTxtDistanceFill);
306 wxEVT_COMMAND_RADIOBOX_SELECTED,
307 (wxObjectEventFunction) (void(wxPanel::*)(
308 wxCommandEvent&)) &wxManualPaintPanel::On2D3D);this->Connect
310 _rbBrushForm->GetId(),
311 wxEVT_COMMAND_RADIOBOX_SELECTED,
312 (wxObjectEventFunction) (void(wxPanel::*)(
313 wxCommandEvent&)) &wxManualPaintPanel::OnBrushForm);this->Connect
315 _rbBrushTool->GetId(),
316 wxEVT_COMMAND_RADIOBOX_SELECTED,
317 (wxObjectEventFunction) (void(wxPanel::*)(
318 wxCommandEvent&)) &wxManualPaintPanel::OnBrushTool);this->Connect
321 wxEVT_COMMAND_BUTTON_CLICKED,
322 (wxObjectEventFunction) (void(wxPanel::*)(
323 wxCommandEvent&)) &wxManualPaintPanel::OnCopy);
327 wxEVT_COMMAND_BUTTON_CLICKED,
328 (wxObjectEventFunction) (void(wxPanel::*)(
329 wxCommandEvent&)) &wxManualPaintPanel::OnUndo);
330 this->Connect(_btnRedo->GetId(),
331 wxEVT_COMMAND_BUTTON_CLICKED,
332 (wxObjectEventFunction) (void(wxPanel::*)(
333 wxCommandEvent&)) &wxManualPaintPanel::OnRedo); //DFCH
336 _mBarSlices->GetId(),
338 (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onBarrange);
339 // Connect(modBarRange->GetId(),98765,(wxObjectEventFunction) (wxCommandEventFunction) &wxWidgetSliderMinMax::onActualChange_Bar );
341 _mBarSlices->GetId(),
343 (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onActualChange_Bar);
345 _mBarSlices->GetId(),
347 (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onStartChange_Bar);
349 _mBarSlices->GetId(),
351 (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onEndChange_Bar);
353 _mBarSlices->GetId(),
355 (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onSelectionEnd);
357 _mBarSlices->GetId(),
359 (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onMovedBar);
362 _BrushSizeCtrl->GetId(),
363 wxEVT_COMMAND_TEXT_UPDATED,
364 (wxObjectEventFunction) (void(wxPanel::*)(
365 wxCommandEvent&)) &wxManualPaintPanel::OnCtrBrushSize);
369 //---------------------------------------------------------------------------
370 void wxManualPaintPanel::OnBrushSize( wxScrollEvent& event )
372 SetBrushSize( this->_sldBrushSize->GetValue( ) );
374 text.Printf( wxT("%d"), this->_sldBrushSize->GetValue( ) );
375 _BrushSizeCtrl->SetValue( text );
378 //---------------------------------------------------------------------------
379 void wxManualPaintPanel::OnSldGrayLevel( wxScrollEvent& event )
381 SetGrayLevel( (double) ( _sldGrayLevel->GetValue( )) );
384 text.Printf( wxT("%d"), _sldGrayLevel->GetValue( ) );
385 _graylevelCtrl->SetValue( text );
388 //---------------------------------------------------------------------------
389 void wxManualPaintPanel::OnCtrTxtGrayLevel( wxCommandEvent &event )
391 int graylevel = this->_graylevelCtrl->GetValue( );
392 this->_sldGrayLevel->SetValue( graylevel );
393 SetGrayLevel( graylevel );
396 //---------------------------------------------------------------------------
397 void wxManualPaintPanel::OnSldDistanceFill( wxScrollEvent& event )
399 SetDistanceFill( (double) ( _sldDistanceFill->GetValue( )) );
402 text.Printf( wxT("%d"), _sldDistanceFill->GetValue( ) );
403 _distancefillCtrl->SetValue( text );
406 //---------------------------------------------------------------------------
407 void wxManualPaintPanel::OnCtrTxtDistanceFill( wxCommandEvent &event )
409 int distancefill = this->_distancefillCtrl->GetValue( );
410 this->_sldDistanceFill->SetValue( distancefill );
411 SetDistanceFill( distancefill );
413 //---------------------------------------------------------------------------
414 void wxManualPaintPanel::OnCtrBrushSize( wxCommandEvent &event )
416 int brushSize = _BrushSizeCtrl->GetValue( );
417 this->_sldBrushSize->SetValue( brushSize );
418 SetBrushSize( brushSize );
421 //---------------------------------------------------------------------------
422 void wxManualPaintPanel::OnSldToleranceFill( wxScrollEvent& event )
424 SetToleranceFill( (double) ( _sldToleranceFill->GetValue( )) );
427 text.Printf( wxT("%d"), _sldToleranceFill->GetValue( ) );
428 _tolerancefillCtrl->SetValue( text );
431 //---------------------------------------------------------------------------
432 void wxManualPaintPanel::OnCtrTxtToleranceFill( wxCommandEvent &event )
434 int tolerance = _tolerancefillCtrl->GetValue( );
435 this->_sldToleranceFill->SetValue( tolerance );
436 SetToleranceFill( tolerance );
439 //---------------------------------------------------------------------------
440 void wxManualPaintPanel::DisableControls( )
442 _txtBrushSize->Disable( );
443 _sldBrushSize->Disable( );
444 _rbBrushForm->Disable( );
446 _txtToleranceFill->Disable( );
447 _sldToleranceFill->Disable( );
448 _tolerancefillCtrl->Disable( );
450 _txtDistanceFill->Disable( );
451 _sldDistanceFill->Disable( );
452 _distancefillCtrl->Disable( );
455 //---------------------------------------------------------------------------
456 void wxManualPaintPanel::On2D3D( wxCommandEvent &event )
458 Set2D3D( _rb2D3D->GetSelection( ) );
461 //---------------------------------------------------------------------------
462 void wxManualPaintPanel::OnBrushForm( wxCommandEvent &event )
464 SetBrushForm( _rbBrushForm->GetSelection( ) );
467 //---------------------------------------------------------------------------
468 void wxManualPaintPanel::OnBrushTool( wxCommandEvent &event )
471 SetTool( _rbBrushTool->GetSelection( ) );
473 if( _rbBrushTool->GetSelection( ) == 0 ) //Brush tool
475 _txtBrushSize->Enable( );
476 _sldBrushSize->Enable( );
477 _rbBrushForm->Enable( );
478 _brushSizer->Show( true );
479 _FillSizer->Show( false );
483 if( _rbBrushTool->GetSelection( ) == 1 ) //Fill tool
485 _txtToleranceFill->Enable( );
486 _sldToleranceFill->Enable( );
487 _tolerancefillCtrl->Enable( );
489 _txtDistanceFill->Enable( );
490 _sldDistanceFill->Enable( );
491 _distancefillCtrl->Enable( );
492 _FillSizer->Show( true );
493 _brushSizer->Show( false );
498 //---------------------------------------------------------------------------
499 void wxManualPaintPanel::OnCopy( wxCommandEvent &event )
503 //---------------------------------------------------------------------------
504 void wxManualPaintPanel::OnUndo( wxCommandEvent &event )
506 this->_manualPaintModel->Undo( );
509 //---------------------------------------------------------------------------
510 void wxManualPaintPanel::OnRedo( wxCommandEvent &event )
512 this->_manualPaintModel->Redo( );
515 //--------------------------------------------------------------------------------------------------------------------------------
516 // Min-Max Barrange received events
517 //--------------------------------------------------------------------------------------------------------------------------------
518 void wxManualPaintPanel::onBarrange( wxCommandEvent& event )
521 void wxManualPaintPanel::onActualChange_Bar( wxCommandEvent& event )
523 /*mbbtkSliderMinMax->bbSetOutputOutActual(modBarRange->GetActual());
524 mbbtkSliderMinMax->bbSignalOutputModification(std::string("OutActual"));*/
526 void wxManualPaintPanel::onStartChange_Bar( wxCommandEvent& event )
528 SetRangeMin( _mBarSlices->GetStart( ) );
531 void wxManualPaintPanel::onEndChange_Bar( wxCommandEvent& event )
533 SetRangeMax( _mBarSlices->GetEnd( ) );
536 void wxManualPaintPanel::onSelectionEnd( wxCommandEvent& event )
540 void wxManualPaintPanel::onMovedBar( wxCommandEvent& event )
543 //-------------------------------------------------------------------------
544 //--------------------------------------------------------------------------
545 //--------------------------------------------------------------------------