1 /*=========================================================================
4 Module: $RCSfile: bbwxSlider.cxx,v $
6 Date: $Date: 2008/01/22 15:41:35 $
7 Version: $Revision: 1.2 $
9 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10 l'Image). All rights reserved. See Doc/License.txt or
11 http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
13 This software is distributed WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE. See the above copyright notices for more information.
17 =========================================================================*/
20 * \brief Short description in one line
28 #ifdef _USE_WXWIDGETS_
32 #include "bbwxSlider.h"
33 #include "bbwxPackage.h"
41 //-------------------------------------------------------------------------
42 SliderWidget::SliderWidget(Slider* box, wxWindow *parent,
44 bool changeresolution,
52 wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL),
56 reactiveOnTrack(reactiveontrack)
58 wxPanel * panel = this;
62 label_vertical = NULL;
63 mResolutionOfSlider = NULL;
72 wxorientation = wxSL_HORIZONTAL;
75 wxlabels = wxSL_LABELS;
82 wxorientation = wxSL_VERTICAL;
85 //---------------------------------------------------------------------
86 // 1) Creation of the components of the widget
87 // Any top level sub-widget must have the panel returned by panel
89 mwxSlider = new wxSlider( panel,
93 wxorientation | wxlabels );
95 // mwxSlider->SetInitialSize(wxSize(sizeX,sizeY));
97 // mwxSlider->SetTickFreq(100,0);
98 mwxSlider->SetRange(min,max);
99 mwxSlider->SetValue(value);
103 // Connecting events to callbacks
104 Connect( mwxSlider->GetId(),
105 wxEVT_SCROLL_THUMBRELEASE,
107 (wxObjectEventFunction)
108 (void (wxPanel::*)(wxScrollEvent&))
109 &SliderWidget::OnSliderRelease );
111 Connect( mwxSlider->GetId(),
112 wxEVT_SCROLL_THUMBTRACK,
114 (wxObjectEventFunction)
115 (void (wxPanel::*)(wxScrollEvent&))
116 &SliderWidget::OnSliderTrack );
119 // If asked : creation of the other little slider which allows to change
120 // the resolution of the main slider
121 if (changeresolution==true){
122 // has panel for parent too
123 mResolutionOfSlider = new wxSlider(panel,
132 mResolutionOfSlider->SetRange(1,8);
133 mResolutionOfSlider->SetValue(5);
134 // Is wxEVT_COMMAND_SLIDER_UPDATED event
135 // is connected to the method OnResolutionOfSlider
136 Connect(mResolutionOfSlider->GetId(),
137 wxEVT_COMMAND_SLIDER_UPDATED,
138 (wxObjectEventFunction)
139 (void (wxPanel::*)(wxScrollEvent&))
140 &SliderWidget::OnResolutionOfSlider );
142 //---------------------------------------------------------------------
144 //---------------------------------------------------------------------
145 // 2) Insertion of the components in the window
147 // We use a FlexGridSizer
148 wxFlexGridSizer *sizer;
154 if (mResolutionOfSlider!=NULL)
156 sizer = new wxFlexGridSizer(2);
159 sizer -> Add( new wxStaticText(panel,-1, title ) );
160 sizer -> Add( new wxStaticText(panel,-1, _T("") ) );
165 sizer = new wxFlexGridSizer(1);
168 sizer -> Add( new wxStaticText(panel,-1, title ) );
171 sizer -> Add( mwxSlider,1,wxGROW );
172 sizer -> AddGrowableCol(0);
173 if (mResolutionOfSlider!=NULL)
175 sizer -> Add( mResolutionOfSlider );
181 sizer = new wxFlexGridSizer(1);
182 if (labels==true) // with lable
184 label_vertical = new wxStaticText(panel,-1,_T(""));
185 label_min = new wxStaticText(panel,-1,_T(""));
186 label_max = new wxStaticText(panel,-1,_T(""));
189 sizer -> Add( new wxStaticText(panel,-1, title ) );
190 sizer -> AddGrowableRow(3);
194 sizer -> AddGrowableRow(2);
196 sizer -> Add( label_vertical );
197 sizer -> Add( label_min );
198 sizer -> Add( mwxSlider,1,wxGROW );
199 sizer -> Add( label_max );
200 if (mResolutionOfSlider!=NULL)
202 sizer -> Add( mResolutionOfSlider );
209 sizer -> Add( new wxStaticText(panel,-1, title ) );
210 sizer -> AddGrowableRow(1);
214 sizer -> AddGrowableRow(0);
216 sizer -> Add( mwxSlider,1,wxGROW );
217 if (mResolutionOfSlider!=NULL)
219 sizer -> Add( mResolutionOfSlider );
223 // Initialize the labels
225 // Insert the sizer in the main panel and refresh the layout
226 panel->SetSizer(sizer);
227 // panel->SetAutoLayout(true);
230 //-------------------------------------------------------------------------
233 //-------------------------------------------------------------------------
234 SliderWidget::~SliderWidget()
237 //-------------------------------------------------------------------------
240 //-------------------------------------------------------------------------
241 void SliderWidget::OnResolutionOfSlider(wxScrollEvent& event)
243 int value = mwxSlider->GetValue();
244 int delta = (int) (pow( 4 , mResolutionOfSlider->GetValue() ));
245 int minTmp = value - delta/2;
246 int maxTmp = value + delta/2;
256 mwxSlider->SetRange(minTmp,maxTmp);
259 //-------------------------------------------------------------------------
263 //-------------------------------------------------------------------------
264 void SliderWidget::OnSliderTrack(wxScrollEvent& event)
268 // When user releases the slider
269 // we update the output of the box
270 mBox->bbSetOutputOut( mwxSlider->GetValue() );
271 mBox->bbSetInputIn( mwxSlider->GetValue() );
272 // and signal that the output has changed
273 mBox->bbSignalOutputModification("Out");
277 //-------------------------------------------------------------------------
280 //-------------------------------------------------------------------------
281 void SliderWidget::OnSliderRelease(wxScrollEvent& event)
283 // When user releases the slider
284 // we update the output of the box
285 mBox->bbSetOutputOut( mwxSlider->GetValue() );
286 mBox->bbSetInputIn( mwxSlider->GetValue() );
287 // and signal that the output has changed
288 mBox->bbSignalOutputModification("Out");
290 //-------------------------------------------------------------------------
293 //-------------------------------------------------------------------------
294 void SliderWidget::RefreshLabels()
297 if (label_vertical!=NULL)
299 strValue.Printf( _T("%d"), mwxSlider->GetValue() );
300 label_vertical->SetLabel(strValue);
304 strValue.Printf( _T("%d"), mwxSlider->GetMin() );
305 label_min->SetLabel(strValue);
309 strValue.Printf( _T("%d"), mwxSlider->GetMax() );
310 label_max->SetLabel(strValue);
313 //-------------------------------------------------------------------------
316 //-------------------------------------------------------------------------
317 void SliderWidget::SetRange(int min, int max)
321 mwxSlider->SetRange(min,max);
324 //-------------------------------------------------------------------------
329 //--------------------------------------------------------------------------
330 //-------------------------------------------------------------------------
331 // WxBlackBox implementation
332 //--------------------------------------------------------------------------
333 //--------------------------------------------------------------------------
335 //--------------------------------------------------------------------------
336 BBTK_USER_BLACK_BOX_IMPLEMENTATION(Slider,bbtk::WxBlackBox);
337 BBTK_ADD_BLACK_BOX_TO_PACKAGE(wx,Slider);
338 //--------------------------------------------------------------------------
340 //--------------------------------------------------------------------------
341 void Slider::bbUserConstructor()
347 bbSetInputOrientation(0);
348 bbSetInputChangeResolution(false);
349 bbSetInputLabel(true);
350 bbSetInputReactiveOnTrack(0);
352 //--------------------------------------------------------------------------
354 //--------------------------------------------------------------------------
355 void Slider::Process()
357 bbSetOutputOut( bbGetInputIn() );
360 void Slider::CreateWidget()
362 bbSetOutputWidget( new SliderWidget(this,
364 bbGetInputOrientation() ,
365 bbGetInputChangeResolution(),
367 bbtk::std2wx( bbGetInputTitle() ),
371 bbGetInputReactiveOnTrack()
376 //--------------------------------------------------------------------------
378 //--------------------------------------------------------------------------
379 bbtk::WxBlackBoxWidget* Slider::bbUserCreateWidget(wxWindow *parent)
384 //--------------------------------------------------------------------------
390 #endif // _USE_WXWIDGETS_