00001
00002
00003
00004
00005 #include "wxConceptControl.h"
00006
00007
00008
00009
00011
00012
00013
00014
00015
00016
00017 DEFINE_EVENT_TYPE( wxEVT_CONCEPT_RELEASE )
00018
00019
00020
00021
00022
00023 wxConceptControl :: wxConceptControl(wxWindow *parent, bool orientation, int minV, int maxV, int actualV, std::string &aConceptName, std::string elementsDef )
00024 :wxPanel(parent, -1, wxDefaultPosition, parent->GetSize(), wxTAB_TRAVERSAL)
00025 {
00026
00027 minValue = minV;
00028 maxValue = maxV;
00029 _numCheckBox = 0;
00030
00031 showLabels = true;
00032
00033 wxFlexGridSizer* sizer = new wxFlexGridSizer (1, 3, 15, 15);
00034
00035 conceptName = new wxStaticText(this, -1, wxString(aConceptName.c_str(),wxConvUTF8), wxDefaultPosition, wxSize(90,20), wxALIGN_CENTRE );
00036 sizer->Add( conceptName, 0, wxALIGN_CENTRE |wxALIGN_CENTER_HORIZONTAL);
00037
00038 if(orientation)
00039 {
00040 sizer->AddGrowableCol(1);
00041 conceptSlider = new wxSlider(this, -1, actualV, minV, maxV, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL| wxSL_AUTOTICKS | wxSL_LABELS, wxDefaultValidator, wxString(aConceptName.c_str(),wxConvUTF8));
00042 }
00043 else
00044 {
00045 sizer->AddGrowableRow(1);
00046 conceptSlider = new wxSlider(this, -1, actualV, minV, maxV, wxDefaultPosition, wxDefaultSize, wxSL_LEFT| wxSL_AUTOTICKS | wxSL_LABELS, wxDefaultValidator, wxString(aConceptName.c_str(),wxConvUTF8) );
00047 }
00048 sizer->Add(conceptSlider, 0, wxGROW |wxALL );
00049 createElements( sizer, elementsDef );
00050 SetSizer( sizer );
00051
00052 Connect( conceptSlider->GetId(), wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler(wxConceptControl::onSliderTrack));
00053 Connect( conceptSlider->GetId(), wxEVT_SCROLL_THUMBRELEASE, wxScrollEventHandler(wxConceptControl::onSliderRelease));
00054
00055 this->SetAutoLayout( true );
00056 this->Layout();
00057 }
00058
00059 wxConceptControl :: ~wxConceptControl()
00060 {
00061
00062 }
00063
00064
00065
00066
00067
00068
00069 void wxConceptControl ::onUpdateUICheckBox( wxCommandEvent& event )
00070 {
00071 lastUpdate = (wxCheckBox * ) event.GetEventObject();
00072 std::string groupId = std::string(lastUpdate->GetName().ToAscii());
00073 event.SetClientData( (void *) atoi(groupId.c_str()) );
00074 event.SetId( GetId() );
00075 event.SetEventObject( this );
00076 GetEventHandler()->ProcessEvent( event );
00077 }
00078
00079 void wxConceptControl :: onSliderTrack( wxScrollEvent& event )
00080 {
00081
00082 }
00083
00084
00085
00086 void wxConceptControl :: onSliderRelease( wxScrollEvent& event )
00087 {
00088
00089 sendEnvent( wxEVT_CONCEPT_RELEASE );
00090 }
00091
00092
00093
00094
00095
00096
00097 void wxConceptControl :: sendEnvent(WXTYPE theEventType)
00098 {
00099 wxCommandEvent cevent( theEventType, GetId() );
00100 cevent.SetEventObject( this );
00101 GetEventHandler()->ProcessEvent( cevent );
00102 }
00103
00104
00105
00106
00107
00108 std::string wxConceptControl :: getName()
00109 {
00110 return std::string(conceptName->GetLabel().ToAscii());
00111 }
00112
00113 int wxConceptControl :: getMinShowedValue()
00114 {
00115 return conceptSlider->GetMin();
00116 }
00117
00118 int wxConceptControl :: getMaxShowedValue()
00119 {
00120 return conceptSlider->GetMax();
00121 }
00122
00123 void wxConceptControl :: setMinValue(int theMin)
00124 {
00125 minValue = theMin;
00126 }
00127
00128 int wxConceptControl :: getMinValue()
00129 {
00130 return minValue;
00131 }
00132
00133 void wxConceptControl :: setMaxValue(int theMax)
00134 {
00135 maxValue = theMax;
00136 }
00137
00138 int wxConceptControl :: getMaxValue()
00139 {
00140 return maxValue;
00141 }
00142
00143 void wxConceptControl :: setActualValue(int theActual)
00144 {
00145 conceptSlider->SetValue(theActual);
00146 }
00147
00148 int wxConceptControl :: getActualValue()
00149 {
00150 return conceptSlider->GetValue();
00151 }
00152
00153 void wxConceptControl :: setShowLables(bool ifShowCondition)
00154 {
00155 showLabels = ifShowCondition;
00156
00157 }
00158
00159
00160
00161
00162
00163
00164
00165 void wxConceptControl :: clearCheckAt( int position )
00166 {
00167 checkBoxes[position]->SetValue( false );
00168 }
00169
00170 bool wxConceptControl :: getIfChecked( int position )
00171 {
00172 return checkBoxes[position]->GetValue();
00173 }
00174
00175 void wxConceptControl :: setRange(int minShow, int maxShow)
00176 {
00177
00178
00179
00180
00181
00182
00183 conceptSlider->SetRange(minShow, maxShow);
00184 int actual = getActualValue();
00185 if( actual<minShow )
00186 conceptSlider->SetValue( minShow );
00187 else if( actual>maxShow )
00188 conceptSlider->SetValue( maxShow );
00189 }
00190
00191 void wxConceptControl :: reset()
00192 {
00193 conceptSlider->SetRange(minValue, maxValue);
00194 conceptSlider->SetValue(minValue);
00195 int i, size = checkBoxes.size();
00196 for(i=0; i<size; i++)
00197 {
00198 (checkBoxes[i])->SetValue( false );
00199 }
00200 size = textBoxes.size();
00201 for ( i =0; i<size; i++)
00202 {
00203 textBoxes[i]->Clear();
00204 }
00205 }
00206
00207
00208
00209
00210 void wxConceptControl :: createElements(wxSizer *sizer , std::string elementsDef )
00211 {
00212 const char * elements = elementsDef.c_str();
00213 int elementsNum = elementsDef.size();
00214 wxFlexGridSizer* checkSizer = new wxFlexGridSizer (1, elementsNum, 5, 5);
00215 int i,ckecks = 0;
00216 for( i = 0;*elements!= 0; elements++)
00217 {
00218 char a = *elements;
00219 if( a == 67 || a == 99 )
00220 {
00221
00222
00223
00224
00225
00226 createCheckBoxAndAddToSizer( checkSizer, "X", -1, ckecks);
00227 ckecks++;
00228 }
00229 else if ( a == 84 || a==116 )
00230 {
00231
00232 }
00233 i++;
00234 }
00235 _numCheckBox = ckecks;
00236 sizer->Add(checkSizer, 0, wxGROW |wxALL );
00237 }
00238
00239 int wxConceptControl :: getNumCheckBox(){
00240 return _numCheckBox;
00241 }
00242
00243
00244 wxCheckBox * wxConceptControl :: createCheckBoxAndAddToSizer(wxSizer *sizer, std::string label, wxWindowID id,int groupID)
00245 {
00246
00247
00248
00249 std::string buffer;
00250
00251 if(groupID == 0){
00252 buffer = "0";
00253 }else{
00254 int k=groupID;
00255 while (k > 0){
00256 char temp = k % 10 + 48;
00257 k = k / 10;
00258 buffer = temp + buffer;
00259 }
00260 }
00261
00262
00263 wxCheckBox *checkbox = new wxCheckBox( this, -1, wxString( label.c_str(), wxConvUTF8), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxString( buffer.c_str(), wxConvUTF8) );
00264 sizer->Add(checkbox, 0, wxLEFT | wxRIGHT, 5);
00265 sizer->Add(0, 2, 0, wxGROW);
00266 checkBoxes.push_back( checkbox );
00267 Connect( checkbox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) (wxCommandEventFunction) &wxConceptControl::onUpdateUICheckBox );
00268
00269 return checkbox;
00270 }
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281