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->ConfigureActiveCBButton( );
43 this->ConfigureBrushToolRadioButton( );
44 this->Configure2D3DRadioButton( );
45 this->ConfigureBrushFormRadioButton( );
46 this->ConfigureRangeBar( );
47 this->ConfigureGrayLevelSld( );
48 this->ConfigureBrushSizeSld( );
49 this->ConfigureDistanceFillSld( );
50 this->ConfigureTolFillSld( );
51 this->ConfigureEditButtons( );
54 wxStaticText *editButtonsText = new wxStaticText( this, -1,
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( _activeCB );
120 sizer->Add( editButtonsText );
121 sizer->Add( _buttonsSizer );
122 sizer->Add( _gConfigSizer );
123 sizer->Add( _brushSizer );
124 sizer->Add( _FillSizer );
126 this->ConnectComponents( ); //DFCH
127 this->_FillSizer->Show( false );
129 this->SetSizer( sizer );
130 this->SetAutoLayout( true );
135 //---------------------------------------------------------------------------
136 wxManualPaintPanel::~wxManualPaintPanel( )
140 //--------------------------------------------------------------------------
141 void wxManualPaintPanel::ConfigureActiveCBButton( )
143 _activeCB = new wxCheckBox (this, -1, _T("Active") );
144 _activeCB->SetValue(true);
145 SetActive( _activeCB->GetValue() );
150 //--------------------------------------------------------------------------
151 void wxManualPaintPanel::ConfigureBrushToolRadioButton( )
153 wxString lstBrushForm[ 2 ];
154 lstBrushForm[ 0 ] = _T("rectangle/cube");
155 lstBrushForm[ 1 ] = _T("circle/sphere");
156 _rbBrushForm = new wxRadioBox( this, -1, _T("Brush form"),
157 wxDefaultPosition, wxSize( 270, 45 ), 2, lstBrushForm, 2,
161 //--------------------------------------------------------------------------
162 void wxManualPaintPanel::Configure2D3DRadioButton( )
164 wxString lst2D3D[ 2 ];
165 lst2D3D[ 0 ] = _T("2D");
166 lst2D3D[ 1 ] = _T("3D");
167 _rb2D3D = new wxRadioBox( this, -1, _T("2D / 3D"), wxDefaultPosition,
168 wxSize( 270, 45 ), 2, lst2D3D, 2, wxRA_SPECIFY_COLS );
169 _rb2D3D->SetSelection( 1 );
173 //--------------------------------------------------------------------------
174 void wxManualPaintPanel::ConfigureBrushFormRadioButton( )
176 wxString lstBrushTool[ 2 ];
177 lstBrushTool[ 0 ] = _T("Brush");
178 lstBrushTool[ 1 ] = _T("Fill");
179 _rbBrushTool = new wxRadioBox( this, -1, _T("Brush tool"),
180 wxDefaultPosition, wxSize( 270, 45 ), 2, lstBrushTool, 2,
184 //--------------------------------------------------------------------------
185 void wxManualPaintPanel::ConfigureRangeBar( )
189 GetScalarRange( range );
190 int min = 0; //range[0];
191 int max = 6000; //range[1];
192 _mBarSlices = new mBarRange( this, 70, 65 );
193 _mBarSlices->SetMin( 0 );
194 _mBarSlices->SetStart( 0 );
195 _mBarSlices->SetOrientation( true );
196 _mBarSlices->setActiveStateTo( true );
197 _mBarSlices->setVisibleLabels( true );
198 _mBarSlices->setDeviceEndMargin( 10 );
199 _mBarSlices->setDeviceBlitStart( 10, 10 );
200 _mBarSlices->setIfWithActualDrawed( false );
201 _mBarSlices->setRepresentedValues( min, max );
202 _mBarSlices->SetStart( min );
203 _mBarSlices->SetEnd( max );
204 _mBarSlices->Update( );
209 //DFCH -- End BarSlices
211 //--------------------------------------------------------------------------
212 void wxManualPaintPanel::ConfigureGrayLevelSld( )
214 _txtGrayLevel = new wxStaticText( this, -1,
215 wxString( _T(" Gray Level ") ) );
216 _sldGrayLevel = new wxSlider( this, -1, 0, 0, 255, wxDefaultPosition,
217 wxDefaultSize, wxSL_LABELS );
218 _sldGrayLevel->SetMinSize( wxSize( 200, -1 ) );
219 _sldGrayLevel->SetMaxSize( wxSize( 200, -1 ) );
220 _graylevelCtrl = new wxSpinCtrl( this, wxID_ANY, wxEmptyString,
221 wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 65535, 0 );
223 //--------------------------------------------------------------------------
224 void wxManualPaintPanel::ConfigureBrushSizeSld( )
226 _txtBrushSize = new wxStaticText( this, -1,
227 wxString( _T(" Brush size ") ) );
228 _sldBrushSize = new wxSlider( this, -1, 1, 1, 50, wxDefaultPosition,
229 wxDefaultSize, wxSL_LABELS );
230 _BrushSizeCtrl = new wxSpinCtrl( this, wxID_ANY, wxEmptyString,
231 wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 65535, 0 );
232 _sldBrushSize->SetMinSize( wxSize( 200, -1 ) );
233 _sldBrushSize->SetMaxSize( wxSize( 200, -1 ) );
235 //--------------------------------------------------------------------------
236 void wxManualPaintPanel::ConfigureDistanceFillSld( )
238 _txtDistanceFill = new wxStaticText( this, -1,
239 wxString( _T(" Distance fill ") ) );
240 _sldDistanceFill = new wxSlider( this, -1, 50, 1, 500, wxDefaultPosition,
241 wxDefaultSize, wxSL_LABELS );
242 _sldDistanceFill->SetMinSize( wxSize( 200, -1 ) );
243 _sldDistanceFill->SetMaxSize( wxSize( 200, -1 ) );
244 _distancefillCtrl = new wxSpinCtrl( this, wxID_ANY, wxEmptyString,
245 wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 500, 50 );
246 _txtDistanceFill->Disable( );
247 _sldDistanceFill->Disable( );
248 _distancefillCtrl->Disable( );
250 //--------------------------------------------------------------------------
251 void wxManualPaintPanel::ConfigureTolFillSld( )
253 _txtToleranceFill = new wxStaticText( this, -1,
254 wxString( _T(" Tolerance fill ") ) );
255 _sldToleranceFill = new wxSlider( this, -1, 125, 0, 255, wxDefaultPosition,
256 wxDefaultSize, wxSL_LABELS );
257 _sldToleranceFill->SetMinSize( wxSize( 200, -1 ) );
258 _sldToleranceFill->SetMaxSize( wxSize( 200, -1 ) );
259 _tolerancefillCtrl = new wxSpinCtrl( this, wxID_ANY, wxEmptyString,
260 wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 65535, 50 );
261 _txtToleranceFill->Disable( );
262 _sldToleranceFill->Disable( );
263 _tolerancefillCtrl->Disable( );
266 //--------------------------------------------------------------------------
267 void wxManualPaintPanel::ConfigureEditButtons( )
269 _btnCopy = new wxButton( this, -1, _T("Copy") );
270 _btnCopy->Disable( );
271 _btnUndo = new wxButton( this, -1, _T("Undo") );
272 _btnRedo = new wxButton( this, -1, _T("Redo") );
273 //btnUndo->Disable();
275 //--------------------------------------------------------------------------
278 * The following function allows the management of the events
280 void wxManualPaintPanel::ConnectComponents( ) //DFCH
282 this->Connect(_sldBrushSize->GetId( ),
283 wxEVT_SCROLL_THUMBRELEASE,
284 (wxObjectEventFunction) (void(wxPanel::*)(
285 wxScrollEvent& )) (&wxManualPaintPanel::OnBrushSize) );this ->Connect (_sldGrayLevel->GetId(),
286 wxEVT_SCROLL_THUMBRELEASE,
287 (wxObjectEventFunction) (void(wxPanel::*)( wxScrollEvent&)) &wxManualPaintPanel::OnSldGrayLevel);
289 this->Connect( _graylevelCtrl->GetId(),
290 wxEVT_COMMAND_TEXT_UPDATED,
291 (wxObjectEventFunction) (void(wxPanel::*)(
292 wxCommandEvent&)) &wxManualPaintPanel::OnCtrTxtGrayLevel);
295 _sldToleranceFill->GetId(),
296 wxEVT_SCROLL_THUMBRELEASE,
297 (wxObjectEventFunction) (void(wxPanel::*)(
298 wxScrollEvent&)) &wxManualPaintPanel::OnSldToleranceFill);this->Connect
300 _tolerancefillCtrl->GetId(),
301 wxEVT_COMMAND_TEXT_UPDATED,
302 (wxObjectEventFunction) (void(wxPanel::*)(
303 wxCommandEvent&)) &wxManualPaintPanel::OnCtrTxtToleranceFill);
306 _sldDistanceFill->GetId(),
307 wxEVT_SCROLL_THUMBRELEASE,
308 (wxObjectEventFunction) (void(wxPanel::*)(
309 wxScrollEvent&)) &wxManualPaintPanel::OnSldDistanceFill);this->Connect
311 _distancefillCtrl->GetId(),
312 wxEVT_COMMAND_TEXT_UPDATED,
313 (wxObjectEventFunction) (void(wxPanel::*)(
314 wxCommandEvent&)) &wxManualPaintPanel::OnCtrTxtDistanceFill);
318 wxEVT_COMMAND_RADIOBOX_SELECTED,
319 (wxObjectEventFunction) (void(wxPanel::*)(
320 wxCommandEvent&)) &wxManualPaintPanel::On2D3D);this->Connect
322 _rbBrushForm->GetId(),
323 wxEVT_COMMAND_RADIOBOX_SELECTED,
324 (wxObjectEventFunction) (void(wxPanel::*)(
325 wxCommandEvent&)) &wxManualPaintPanel::OnBrushForm);this->Connect
327 _rbBrushTool->GetId(),
328 wxEVT_COMMAND_RADIOBOX_SELECTED,
329 (wxObjectEventFunction) (void(wxPanel::*)(
330 wxCommandEvent&)) &wxManualPaintPanel::OnBrushTool);this->Connect
333 wxEVT_COMMAND_BUTTON_CLICKED,
334 (wxObjectEventFunction) (void(wxPanel::*)(
335 wxCommandEvent&)) &wxManualPaintPanel::OnCopy);
339 wxEVT_COMMAND_BUTTON_CLICKED,
340 (wxObjectEventFunction) (void(wxPanel::*)(
341 wxCommandEvent&)) &wxManualPaintPanel::OnUndo);
342 this->Connect(_btnRedo->GetId(),
343 wxEVT_COMMAND_BUTTON_CLICKED,
344 (wxObjectEventFunction) (void(wxPanel::*)(
345 wxCommandEvent&)) &wxManualPaintPanel::OnRedo); //DFCH
348 _mBarSlices->GetId(),
350 (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onBarrange);
351 // Connect(modBarRange->GetId(),98765,(wxObjectEventFunction) (wxCommandEventFunction) &wxWidgetSliderMinMax::onActualChange_Bar );
353 _mBarSlices->GetId(),
355 (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onActualChange_Bar);
357 _mBarSlices->GetId(),
359 (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onStartChange_Bar);
361 _mBarSlices->GetId(),
363 (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onEndChange_Bar);
365 _mBarSlices->GetId(),
367 (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onSelectionEnd);
369 _mBarSlices->GetId(),
371 (wxObjectEventFunction) (wxCommandEventFunction) &wxManualPaintPanel::onMovedBar);
374 _BrushSizeCtrl->GetId(),
375 wxEVT_COMMAND_TEXT_UPDATED,
376 (wxObjectEventFunction) (void(wxPanel::*)(
377 wxCommandEvent&)) &wxManualPaintPanel::OnCtrBrushSize);
381 wxEVT_COMMAND_CHECKBOX_CLICKED,
382 (wxObjectEventFunction) (void (wxPanel::*)(wxCommandEvent&))&wxManualPaintPanel::OnActive);
387 //-------------------------------------------------------------------------
388 void wxManualPaintPanel::OnActive(wxCommandEvent& event)
390 printf("EED wxManualPaintPanel::OnActive \n");
391 SetActive( _activeCB->GetValue() );
395 //---------------------------------------------------------------------------
396 void wxManualPaintPanel::OnBrushSize( wxScrollEvent& event )
398 SetBrushSize( this->_sldBrushSize->GetValue( ) );
400 text.Printf( wxT("%d"), this->_sldBrushSize->GetValue( ) );
401 _BrushSizeCtrl->SetValue( text );
404 //---------------------------------------------------------------------------
405 void wxManualPaintPanel::OnSldGrayLevel( wxScrollEvent& event )
407 SetGrayLevel( (double) ( _sldGrayLevel->GetValue( )) );
410 text.Printf( wxT("%d"), _sldGrayLevel->GetValue( ) );
411 _graylevelCtrl->SetValue( text );
414 //---------------------------------------------------------------------------
415 void wxManualPaintPanel::OnCtrTxtGrayLevel( wxCommandEvent &event )
417 int graylevel = this->_graylevelCtrl->GetValue( );
418 this->_sldGrayLevel->SetValue( graylevel );
419 SetGrayLevel( graylevel );
422 //---------------------------------------------------------------------------
423 void wxManualPaintPanel::OnSldDistanceFill( wxScrollEvent& event )
425 SetDistanceFill( (double) ( _sldDistanceFill->GetValue( )) );
428 text.Printf( wxT("%d"), _sldDistanceFill->GetValue( ) );
429 _distancefillCtrl->SetValue( text );
432 //---------------------------------------------------------------------------
433 void wxManualPaintPanel::OnCtrTxtDistanceFill( wxCommandEvent &event )
435 int distancefill = this->_distancefillCtrl->GetValue( );
436 this->_sldDistanceFill->SetValue( distancefill );
437 SetDistanceFill( distancefill );
439 //---------------------------------------------------------------------------
440 void wxManualPaintPanel::OnCtrBrushSize( wxCommandEvent &event )
442 int brushSize = _BrushSizeCtrl->GetValue( );
443 this->_sldBrushSize->SetValue( brushSize );
444 SetBrushSize( brushSize );
447 //---------------------------------------------------------------------------
448 void wxManualPaintPanel::OnSldToleranceFill( wxScrollEvent& event )
450 SetToleranceFill( (double) ( _sldToleranceFill->GetValue( )) );
453 text.Printf( wxT("%d"), _sldToleranceFill->GetValue( ) );
454 _tolerancefillCtrl->SetValue( text );
457 //---------------------------------------------------------------------------
458 void wxManualPaintPanel::OnCtrTxtToleranceFill( wxCommandEvent &event )
460 int tolerance = _tolerancefillCtrl->GetValue( );
461 this->_sldToleranceFill->SetValue( tolerance );
462 SetToleranceFill( tolerance );
465 //---------------------------------------------------------------------------
466 void wxManualPaintPanel::DisableControls( )
468 _txtBrushSize->Disable( );
469 _sldBrushSize->Disable( );
470 _rbBrushForm->Disable( );
472 _txtToleranceFill->Disable( );
473 _sldToleranceFill->Disable( );
474 _tolerancefillCtrl->Disable( );
476 _txtDistanceFill->Disable( );
477 _sldDistanceFill->Disable( );
478 _distancefillCtrl->Disable( );
481 //---------------------------------------------------------------------------
482 void wxManualPaintPanel::On2D3D( wxCommandEvent &event )
484 Set2D3D( _rb2D3D->GetSelection( ) );
487 //---------------------------------------------------------------------------
488 void wxManualPaintPanel::OnBrushForm( wxCommandEvent &event )
490 SetBrushForm( _rbBrushForm->GetSelection( ) );
493 //---------------------------------------------------------------------------
494 void wxManualPaintPanel::OnBrushTool( wxCommandEvent &event )
497 SetTool( _rbBrushTool->GetSelection( ) );
499 if( _rbBrushTool->GetSelection( ) == 0 ) //Brush tool
501 _txtBrushSize->Enable( );
502 _sldBrushSize->Enable( );
503 _rbBrushForm->Enable( );
504 _brushSizer->Show( true );
505 _FillSizer->Show( false );
509 if( _rbBrushTool->GetSelection( ) == 1 ) //Fill tool
511 _txtToleranceFill->Enable( );
512 _sldToleranceFill->Enable( );
513 _tolerancefillCtrl->Enable( );
515 _txtDistanceFill->Enable( );
516 _sldDistanceFill->Enable( );
517 _distancefillCtrl->Enable( );
518 _FillSizer->Show( true );
519 _brushSizer->Show( false );
524 //---------------------------------------------------------------------------
525 void wxManualPaintPanel::OnCopy( wxCommandEvent &event )
529 //---------------------------------------------------------------------------
530 void wxManualPaintPanel::OnUndo( wxCommandEvent &event )
532 this->_manualPaintModel->Undo( );
535 //---------------------------------------------------------------------------
536 void wxManualPaintPanel::OnRedo( wxCommandEvent &event )
538 this->_manualPaintModel->Redo( );
541 //--------------------------------------------------------------------------------------------------------------------------------
542 // Min-Max Barrange received events
543 //--------------------------------------------------------------------------------------------------------------------------------
544 void wxManualPaintPanel::onBarrange( wxCommandEvent& event )
547 void wxManualPaintPanel::onActualChange_Bar( wxCommandEvent& event )
549 /*mbbtkSliderMinMax->bbSetOutputOutActual(modBarRange->GetActual());
550 mbbtkSliderMinMax->bbSignalOutputModification(std::string("OutActual"));*/
552 void wxManualPaintPanel::onStartChange_Bar( wxCommandEvent& event )
554 SetRangeMin( _mBarSlices->GetStart( ) );
557 void wxManualPaintPanel::onEndChange_Bar( wxCommandEvent& event )
559 SetRangeMax( _mBarSlices->GetEnd( ) );
562 void wxManualPaintPanel::onSelectionEnd( wxCommandEvent& event )
566 void wxManualPaintPanel::onMovedBar( wxCommandEvent& event )
569 //-------------------------------------------------------------------------
570 //--------------------------------------------------------------------------
571 //--------------------------------------------------------------------------