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 # ------------------------------------------------------------------------ */
27 //----------------------------------------------------------------------------------------------------------------
28 // Class definition include
29 //----------------------------------------------------------------------------------------------------------------
30 #include "wxConceptControl.h"
32 //----------------------------------------------------------------------------------------------------------------
33 // Class implementation
34 //----------------------------------------------------------------------------------------------------------------
35 /** @file wxConceptControl.cxx */
36 //IMPLEMENT_CLASS(wxConceptControl, wxScrolledWindow)
37 //------------------------------------------------------------------------------------------------------------
38 // Generated events declaration and definition
39 //------------------------------------------------------------------------------------------------------------
42 DEFINE_EVENT_TYPE( wxEVT_CONCEPT_RELEASE )
44 //------------------------------------------------------------------------------------------------------------
45 // Constructors & Destructors
46 //------------------------------------------------------------------------------------------------------------
48 wxConceptControl::wxConceptControl(wxWindow *parent, bool orientation, int minV, int maxV, int actualV, std::string &aConceptName, std::string elementsDef )
49 :wxPanel(parent, -1, wxDefaultPosition, parent->GetSize(), wxTAB_TRAVERSAL)
51 printf("EED wxConceptControl::wxConceptControl Start\n");
57 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
58 #if wxMAJOR_VERSION <= 2
59 wxFlexGridSizer* sizer = new wxFlexGridSizer(1, 3, 15, 15);
61 wxFlexGridSizer* sizer = new wxFlexGridSizer(3);
63 conceptName = new wxStaticText(this, -1, wxString(aConceptName.c_str(),wxConvUTF8), wxDefaultPosition, wxSize(90,20), wxALIGN_CENTRE );
64 printf("EED wxConceptControl::wxConceptControl 1\n");
65 sizer->Add( conceptName, 0, wxALIGN_CENTRE |wxALIGN_CENTER_HORIZONTAL);
66 printf("EED wxConceptControl::wxConceptControl 2\n");
69 sizer->AddGrowableCol(1);
70 conceptSlider = new wxSlider(this, -1, actualV, minV, maxV, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL| wxSL_AUTOTICKS | wxSL_LABELS, wxDefaultValidator, wxString(aConceptName.c_str(),wxConvUTF8));
72 // sizer->AddGrowableRow(1);
73 conceptSlider = new wxSlider(this, -1, actualV, minV, maxV, wxDefaultPosition, wxDefaultSize, wxSL_LEFT| wxSL_AUTOTICKS | wxSL_LABELS, wxDefaultValidator, wxString(aConceptName.c_str(),wxConvUTF8) );
75 printf("EED wxConceptControl::wxConceptControl 3\n");
76 sizer->Add(conceptSlider, 0, wxGROW |wxALL );
77 printf("EED wxConceptControl::wxConceptControl 4\n");
78 createElements( sizer, elementsDef );
80 Connect( conceptSlider->GetId(), wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler(wxConceptControl::onSliderTrack));//(wxObjectEventFunction) &wxConceptControl :: onSliderRelease );
81 Connect( conceptSlider->GetId(), wxEVT_SCROLL_THUMBRELEASE, wxScrollEventHandler(wxConceptControl::onSliderRelease));//(wxObjectEventFunction) &wxConceptControl :: onSliderTrack );
82 this->SetAutoLayout( true );
83 printf("EED wxConceptControl::wxConceptControl 5\n");
85 printf("EED wxConceptControl::wxConceptControl End\n");
88 wxConceptControl :: ~wxConceptControl()
93 //------------------------------------------------------------------------------------------------------------
94 // Methods for capturing events
95 //------------------------------------------------------------------------------------------------------------
98 void wxConceptControl ::onUpdateUICheckBox( wxCommandEvent& event )
100 lastUpdate = (wxCheckBox * ) event.GetEventObject();
101 std::string groupId = std::string(lastUpdate->GetName().ToAscii());
102 event.SetClientData( (void *) atoi(groupId.c_str()) );
103 event.SetId( GetId() );
104 event.SetEventObject( this );
105 GetEventHandler()->ProcessEvent( event );
107 //------------------------------------------------------------------------------------------------------------
108 void wxConceptControl :: onSliderTrack( wxScrollEvent& event )
113 //------------------------------------------------------------------------------------------------------------
115 void wxConceptControl :: onSliderRelease( wxScrollEvent& event )
117 // if( !resolutionChange )
118 sendEnvent( wxEVT_CONCEPT_RELEASE );
122 //------------------------------------------------------------------------------------------------------------
123 // Methods for sending events
124 //------------------------------------------------------------------------------------------------------------
126 void wxConceptControl :: sendEnvent(WXTYPE theEventType)
128 wxCommandEvent cevent( theEventType, GetId() );
129 cevent.SetEventObject( this );
130 GetEventHandler()->ProcessEvent( cevent );
133 //------------------------------------------------------------------------------------------------------------
134 // Attributes getters and setters
135 //------------------------------------------------------------------------------------------------------------
137 std::string wxConceptControl :: getName()
139 return std::string(conceptName->GetLabel().ToAscii()); //wxString to std::string convertor ?
142 int wxConceptControl :: getMinShowedValue()
144 return conceptSlider->GetMin();
147 int wxConceptControl :: getMaxShowedValue()
149 return conceptSlider->GetMax();
152 void wxConceptControl :: setMinValue(int theMin)
157 int wxConceptControl :: getMinValue()
162 void wxConceptControl :: setMaxValue(int theMax)
167 int wxConceptControl :: getMaxValue()
172 void wxConceptControl :: setActualValue(int theActual)
174 conceptSlider->SetValue(theActual);
177 int wxConceptControl :: getActualValue()
179 return conceptSlider->GetValue();
182 void wxConceptControl :: setShowLables(bool ifShowCondition)
184 showLabels = ifShowCondition;
185 //TODO -----UPDATE the slider too!!
190 //------------------------------------------------------------------------------------------------------------
191 // Other functional methods
192 //------------------------------------------------------------------------------------------------------------
194 void wxConceptControl :: clearCheckAt( int position )
196 checkBoxes[position]->SetValue( false );
198 //------------------------------------------------------------------------------------------------------------
199 bool wxConceptControl :: getIfChecked( int position )
201 return checkBoxes[position]->GetValue();
203 //------------------------------------------------------------------------------------------------------------
204 void wxConceptControl :: setRange(int minShow, int maxShow)
207 if( minShow < minVal )
209 if( maxShow > maxVal )
212 conceptSlider->SetRange(minShow, maxShow);
213 int actual = getActualValue();
215 conceptSlider->SetValue( minShow );
216 else if( actual>maxShow )
217 conceptSlider->SetValue( maxShow );
219 //------------------------------------------------------------------------------------------------------------
220 void wxConceptControl :: reset()
222 conceptSlider->SetRange(minValue, maxValue);
223 conceptSlider->SetValue(minValue);
224 int i, size = checkBoxes.size();
225 for(i=0; i<size; i++)
227 (checkBoxes[i])->SetValue( false );
229 size = textBoxes.size();
230 for ( i =0; i<size; i++)
232 textBoxes[i]->Clear();
236 //------------------------------------------------------------------------------------------------------------
237 // Creational and initialization methods
238 //------------------------------------------------------------------------------------------------------------
239 void wxConceptControl::createElements(wxSizer *sizer , std::string elementsDef )
241 const char * elements = elementsDef.c_str();
242 int elementsNum = elementsDef.size();
243 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
244 #if wxMAJOR_VERSION <= 2
245 wxFlexGridSizer* checkSizer = new wxFlexGridSizer(1, elementsNum, 5, 5);
247 wxFlexGridSizer* checkSizer = new wxFlexGridSizer(elementsNum);
250 for( i = 0;*elements!= 0; elements++)
253 if( a == 67 || a == 99 )// Including C:67 or c:99 as a checkBox (ASCII)
256 createCheckBoxAndAddToSizer( checkSizer, "X", -1, ckecks);
258 createCheckBoxAndAddToSizer( checkSizer, "Y", -1, ckecks);
260 createCheckBoxAndAddToSizer( checkSizer, "X", -1, ckecks);
262 } else if ( a == 84 || a==116 )// Including T:84 or t t:116 as textCtrl (ASCII)
268 _numCheckBox = ckecks;
269 sizer->Add(checkSizer, 0, wxGROW |wxALL );
272 int wxConceptControl :: getNumCheckBox(){
276 //------------------------------------------------------------------------------------------------------------
277 wxCheckBox * wxConceptControl :: createCheckBoxAndAddToSizer(wxSizer *sizer, std::string label, wxWindowID id,int groupID)
280 //itoa( groupID, buffer, 10);
289 char temp = k % 10 + 48;
291 buffer = temp + buffer;
295 //wxCheckBox *checkbox = new wxCheckBox( this, -1, wxString( label.c_str(), wxConvUTF8), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxString( buffer, wxConvUTF8) );
296 wxCheckBox *checkbox = new wxCheckBox( this, -1, wxString( label.c_str(), wxConvUTF8), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxString( buffer.c_str(), wxConvUTF8) );
297 sizer->Add(checkbox, 0, wxLEFT | wxRIGHT, 5);
298 sizer->Add(0, 2, 0, wxGROW);
299 checkBoxes.push_back( checkbox );
300 Connect( checkbox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) (wxCommandEventFunction) &wxConceptControl::onUpdateUICheckBox );
305 //------------------------------------------------------------------------------------------------------------
306 /*wxCheckBox * wxConceptControl :: createCheckBoxAndAddToSizer(wxSizer *sizer, std::string label, wxWindowID id,int groupID)
308 wxCheckBox *checkbox = new wxCheckBox(this, -1, wxString( label.c_str(), wxConvUTF8));
309 sizer->Add(checkbox, 0, wxLEFT | wxRIGHT, 5);
310 sizer->Add(0, 2, 0, wxGROW);