]> Creatis software - creaContours.git/blob - lib/Interface_ManagerContour_NDimensions/wxConceptControl.cxx
deb0a77236c4549b00f4347e6af32594086f928c
[creaContours.git] / lib / Interface_ManagerContour_NDimensions / wxConceptControl.cxx
1
2 //----------------------------------------------------------------------------------------------------------------
3 // Class definition include
4 //----------------------------------------------------------------------------------------------------------------
5 #include "wxConceptControl.h"
6
7 //----------------------------------------------------------------------------------------------------------------
8 // Class implementation
9 //----------------------------------------------------------------------------------------------------------------
10 /** @file wxConceptControl.cxx */
11 //IMPLEMENT_CLASS(wxConceptControl, wxScrolledWindow)
12 //------------------------------------------------------------------------------------------------------------
13 // Generated events declaration and definition
14 //------------------------------------------------------------------------------------------------------------
15
16
17 DEFINE_EVENT_TYPE( wxEVT_CONCEPT_RELEASE )
18
19         //------------------------------------------------------------------------------------------------------------
20         // Constructors & Destructors
21         //------------------------------------------------------------------------------------------------------------
22         
23         wxConceptControl :: wxConceptControl(wxWindow *parent, bool orientation, int minV, int maxV,  int actualV, std::string &aConceptName, std::string elementsDef )
24         :wxPanel(parent, -1, wxDefaultPosition, parent->GetSize(), wxTAB_TRAVERSAL)
25         {
26
27                 minValue = minV;
28                 maxValue = maxV;
29                 _numCheckBox = 0;
30                 
31                 showLabels = true;
32
33                 wxFlexGridSizer* sizer = new wxFlexGridSizer (1, 3, 15, 15);
34
35                 conceptName = new wxStaticText(this, -1, wxString(aConceptName.c_str(),wxConvUTF8), wxDefaultPosition, wxSize(90,20), wxALIGN_CENTRE );         
36                 sizer->Add( conceptName, 0, wxALIGN_CENTRE |wxALIGN_CENTER_HORIZONTAL);
37                 
38                 if(orientation)
39                 {
40                         sizer->AddGrowableCol(1);
41                         conceptSlider = new wxSlider(this, -1, actualV, minV, maxV, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL| wxSL_AUTOTICKS | wxSL_LABELS, wxDefaultValidator, wxString(aConceptName.c_str(),wxConvUTF8));                    
42                 }
43                 else
44                 {                       
45                         sizer->AddGrowableRow(1);
46                         conceptSlider = new wxSlider(this, -1, actualV, minV, maxV, wxDefaultPosition, wxDefaultSize, wxSL_LEFT| wxSL_AUTOTICKS | wxSL_LABELS, wxDefaultValidator, wxString(aConceptName.c_str(),wxConvUTF8) );                 
47                 }
48                 sizer->Add(conceptSlider, 0, wxGROW |wxALL );           
49                 createElements( sizer, elementsDef );
50                 SetSizer( sizer );
51
52                 Connect( conceptSlider->GetId(), wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler(wxConceptControl::onSliderTrack));//(wxObjectEventFunction) &wxConceptControl :: onSliderRelease ); 
53                 Connect( conceptSlider->GetId(),  wxEVT_SCROLL_THUMBRELEASE, wxScrollEventHandler(wxConceptControl::onSliderRelease));//(wxObjectEventFunction) &wxConceptControl :: onSliderTrack );     
54
55                 this->SetAutoLayout( true );
56                 this->Layout(); 
57         }
58
59         wxConceptControl :: ~wxConceptControl()
60         {
61
62         }
63
64         //------------------------------------------------------------------------------------------------------------
65         // Methods for capturing events
66         //------------------------------------------------------------------------------------------------------------
67         
68
69         void wxConceptControl ::onUpdateUICheckBox( wxCommandEvent& event )
70         {
71                 lastUpdate = (wxCheckBox * ) event.GetEventObject();
72                 std::string groupId = std::string(lastUpdate->GetName().ToAscii());
73                 event.SetClientData( (void *) atoi(groupId.c_str()) );
74                 event.SetId( GetId() );
75                 event.SetEventObject( this );
76                 GetEventHandler()->ProcessEvent( event );
77         }
78         //------------------------------------------------------------------------------------------------------------
79         void wxConceptControl :: onSliderTrack( wxScrollEvent& event )
80         {
81                 
82         }
83   
84         //------------------------------------------------------------------------------------------------------------
85
86         void wxConceptControl :: onSliderRelease( wxScrollEvent& event )
87         {
88         //      if( !resolutionChange )
89                 sendEnvent( wxEVT_CONCEPT_RELEASE );            
90         }
91
92         
93         //------------------------------------------------------------------------------------------------------------
94         //  Methods for sending events
95         //------------------------------------------------------------------------------------------------------------
96
97         void wxConceptControl :: sendEnvent(WXTYPE theEventType)
98         {
99                 wxCommandEvent cevent( theEventType, GetId() );
100                 cevent.SetEventObject( this );
101                 GetEventHandler()->ProcessEvent( cevent );
102         }
103
104         //------------------------------------------------------------------------------------------------------------
105         //  Attributes getters and setters
106         //------------------------------------------------------------------------------------------------------------
107
108         std::string wxConceptControl :: getName()
109         {
110                 return std::string(conceptName->GetLabel().ToAscii());  //wxString to std::string convertor ?
111         }
112
113         int wxConceptControl :: getMinShowedValue()
114         {
115                 return conceptSlider->GetMin();
116         }
117
118         int wxConceptControl :: getMaxShowedValue()
119         {
120                 return conceptSlider->GetMax();
121         }
122
123         void wxConceptControl :: setMinValue(int theMin)
124         {
125                 minValue = theMin;
126         }
127
128         int  wxConceptControl :: getMinValue()
129         {
130                 return minValue;
131         }
132
133         void wxConceptControl :: setMaxValue(int theMax)
134         {
135                 maxValue = theMax;
136         }
137
138         int  wxConceptControl :: getMaxValue()
139         {
140                 return maxValue;
141         }
142
143         void wxConceptControl :: setActualValue(int theActual)
144         {
145                 conceptSlider->SetValue(theActual);
146         }
147
148         int  wxConceptControl :: getActualValue()
149         {
150                 return conceptSlider->GetValue();
151         }
152
153         void wxConceptControl :: setShowLables(bool ifShowCondition)
154         {
155                 showLabels = ifShowCondition;
156                 //TODO -----UPDATE the slider too!!
157         }
158
159         
160
161         //------------------------------------------------------------------------------------------------------------
162         //  Other functional methods
163         //------------------------------------------------------------------------------------------------------------
164
165         void wxConceptControl :: clearCheckAt( int position )
166         {
167                 checkBoxes[position]->SetValue( false );
168         }
169         //------------------------------------------------------------------------------------------------------------
170         bool wxConceptControl :: getIfChecked( int position )
171         {
172                 return checkBoxes[position]->GetValue();
173         }
174         //------------------------------------------------------------------------------------------------------------
175         void wxConceptControl :: setRange(int minShow, int maxShow)
176         {
177                 /*
178                 if( minShow < minVal )
179                         minShow = minVal;
180                 if( maxShow > maxVal )
181                         maxShow = maxVal;
182                 */
183                 conceptSlider->SetRange(minShow, maxShow);
184                 int actual = getActualValue();
185                 if( actual<minShow )
186                         conceptSlider->SetValue( minShow );
187                 else if( actual>maxShow )
188                         conceptSlider->SetValue( maxShow );             
189         }
190         //------------------------------------------------------------------------------------------------------------
191         void wxConceptControl :: reset()
192         {
193                 conceptSlider->SetRange(minValue, maxValue);
194                 conceptSlider->SetValue(minValue);
195                 int i, size = checkBoxes.size();
196                 for(i=0; i<size; i++)
197                 {
198                         (checkBoxes[i])->SetValue( false );
199                 }
200                 size = textBoxes.size();
201                 for ( i =0; i<size; i++)
202                 {
203                         textBoxes[i]->Clear();
204                 }
205         }
206
207         //------------------------------------------------------------------------------------------------------------
208         // Creational and initialization methods
209         //------------------------------------------------------------------------------------------------------------
210         void wxConceptControl :: createElements(wxSizer *sizer , std::string elementsDef )
211         {
212                 const char * elements = elementsDef.c_str();
213                 int elementsNum = elementsDef.size();
214                 wxFlexGridSizer* checkSizer = new wxFlexGridSizer (1, elementsNum, 5, 5);
215                 int i,ckecks = 0;
216                 for( i = 0;*elements!= 0; elements++)
217                 {                       
218                         char a = *elements;     
219                         if( a == 67 || a == 99 )// Including C:67 or c:99 as a checkBox (ASCII)
220                         {
221                                 /*if(ckecks==0){
222                                         createCheckBoxAndAddToSizer( checkSizer, "X", -1, ckecks);
223                                 }else{
224                                         createCheckBoxAndAddToSizer( checkSizer, "Y", -1, ckecks);
225                                 }*/
226                                 createCheckBoxAndAddToSizer( checkSizer, "X", -1, ckecks);
227                                 ckecks++;
228                         }
229                         else if ( a == 84 || a==116 )// Including T:84 or t t:116 as textCtrl (ASCII)
230                         {
231
232                         }
233                         i++;
234                 }
235                 _numCheckBox = ckecks;
236                 sizer->Add(checkSizer, 0, wxGROW |wxALL );      
237         }
238
239         int wxConceptControl :: getNumCheckBox(){
240                 return _numCheckBox;
241         }
242
243         //------------------------------------------------------------------------------------------------------------
244         wxCheckBox * wxConceptControl :: createCheckBoxAndAddToSizer(wxSizer *sizer, std::string label, wxWindowID id,int groupID)
245         {
246                 //char buffer[33];
247                 //itoa( groupID, buffer, 10);
248
249                 std::string buffer;
250                 
251                 if(groupID == 0){
252                         buffer = "0";
253                 }else{
254                         int k=groupID;
255                         while (k > 0){
256                                 char temp = k % 10 + 48;
257                                 k = k / 10;
258                                 buffer = temp + buffer; 
259                         }
260                 }
261
262                 //wxCheckBox *checkbox = new wxCheckBox( this, -1, wxString(  label.c_str(), wxConvUTF8), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxString( buffer, wxConvUTF8) );
263                 wxCheckBox *checkbox = new wxCheckBox( this, -1, wxString(  label.c_str(), wxConvUTF8), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxString( buffer.c_str(), wxConvUTF8) );
264                 sizer->Add(checkbox, 0, wxLEFT | wxRIGHT, 5);
265                 sizer->Add(0, 2, 0, wxGROW); 
266                 checkBoxes.push_back( checkbox );
267                 Connect( checkbox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) (wxCommandEventFunction) &wxConceptControl::onUpdateUICheckBox );
268
269                 return checkbox;                
270         }
271
272         //------------------------------------------------------------------------------------------------------------
273         /*wxCheckBox * wxConceptControl :: createCheckBoxAndAddToSizer(wxSizer *sizer, std::string label, wxWindowID id,int groupID)
274         {
275                 wxCheckBox *checkbox = new wxCheckBox(this, -1, wxString(  label.c_str(), wxConvUTF8));
276                 sizer->Add(checkbox, 0, wxLEFT | wxRIGHT, 5);
277                 sizer->Add(0, 2, 0, wxGROW);            
278                 return checkbox;                
279         }*/
280         
281