- //-------------------------------------------------------------------------
- SliderWidget::SliderWidget(Slider* box, kwWindow *parent,
- int orientation,
- bool changeresolution,
- bool labels,
- kwString title,
- int vmin,
- int vmax,
- int value,
- int reactiveontrack)
- :
- kwPanel( parent, -1, kwDefaultPosition, kwDefaultSize, kwTAB_TRAVERSAL),
- mBox(box),
- min(vmin),
- max(vmax),
- reactiveOnTrack(reactiveontrack)
- {
- kwPanel * panel = this;
-
- label_min = NULL;
- label_max = NULL;
- label_vertical = NULL;
- mResolutionOfSlider = NULL;
-
- int sizeX,sizeY;
- long kwlabels=0;
- long kworientation=0;
- if (orientation==0)
- {
- sizeX = 2;
- sizeY = 40;
- kworientation = kwSL_HORIZONTAL;
- if (labels==true)
- {
- kwlabels = kwSL_LABELS;
- }
- }
- else
- {
- sizeX = 20;
- sizeY = 2;
- kworientation = kwSL_VERTICAL;
- }
-
- //---------------------------------------------------------------------
- // 1) Creation of the components of the widget
- // Any top level sub-widget must have the panel returned by panel
- // for parent
- mkwSlider = new kwSlider( panel,
- -1, 0 , 0, 500 ,
- kwDefaultPosition,
- kwSize(sizeX,sizeY),
- kworientation | kwlabels );
-
- // mkwSlider->SetInitialSize(kwSize(sizeX,sizeY));
-
- // mkwSlider->SetTickFreq(100,0);
- mkwSlider->SetRange(min,max);
- mkwSlider->SetValue(value);
-
- // RefreshLabels();
-
- // Connecting events to callbacks
- Connect( mkwSlider->GetId(),
- kwEVT_SCROLL_THUMBRELEASE,
-
- (kwObjectEventFunction)
- (void (kwPanel::*)(kwScrollEvent&))
- &SliderWidget::OnSliderRelease );
-
- Connect( mkwSlider->GetId(),
- kwEVT_SCROLL_THUMBTRACK,
-
- (kwObjectEventFunction)
- (void (kwPanel::*)(kwScrollEvent&))
- &SliderWidget::OnSliderTrack );
-
- Connect( mkwSlider->GetId(),
- kwEVT_SCROLL_CHANGED,
-
- (kwObjectEventFunction)
- (void (kwPanel::*)(kwScrollEvent&))
- &SliderWidget::OnSliderTrack );
-
- // If asked : creation of the other little slider which allows to change
- // the resolution of the main slider
- if (changeresolution==true){
- // has panel for parent too
- mResolutionOfSlider = new kwSlider(panel,
- -1,5,1,10,
- kwDefaultPosition,
- kwSize(25,45),
- kwSL_VERTICAL |
- kwSL_AUTOTICKS |
- kwSL_LEFT );
-
-
- mResolutionOfSlider->SetRange(1,8);
- mResolutionOfSlider->SetValue(5);
- // Is kwEVT_COMMAND_SLIDER_UPDATED event
- // is connected to the method OnResolutionOfSlider
- Connect(mResolutionOfSlider->GetId(),
- kwEVT_COMMAND_SLIDER_UPDATED,
- (kwObjectEventFunction)
- (void (kwPanel::*)(kwScrollEvent&))
- &SliderWidget::OnResolutionOfSlider );
- }
- //---------------------------------------------------------------------
-
- //---------------------------------------------------------------------
- // 2) Insertion of the components in the window
-
- // We use a FlexGridSizer
- kwFlexGridSizer *sizer;
-
-
- if (orientation==0)
- {
- // HORIZONTAL
- if (mResolutionOfSlider!=NULL)
- {
- sizer = new kwFlexGridSizer(2);
- if (title!=_T(""))
- {
- sizer -> Add( new kwStaticText(panel,-1, title ) );
- sizer -> Add( new kwStaticText(panel,-1, _T("") ) );
- }
- }
- else
- {
- sizer = new kwFlexGridSizer(1);
- if (title!=_T(""))
- {
- sizer -> Add( new kwStaticText(panel,-1, title ) );
- }
- }
- sizer -> Add( mkwSlider,1,kwGROW );
- sizer -> AddGrowableCol(0);
- if (mResolutionOfSlider!=NULL)
- {
- sizer -> Add( mResolutionOfSlider );
- }
- }
- else
- {
- // VERTICAL
- sizer = new kwFlexGridSizer(1);
- if (labels==true) // with lable
- {
- label_vertical = new kwStaticText(panel,-1,_T(""));
- label_min = new kwStaticText(panel,-1,_T(""));
- label_max = new kwStaticText(panel,-1,_T(""));
- if (title!=_T(""))
- {
- sizer -> Add( new kwStaticText(panel,-1, title ) );
- sizer -> AddGrowableRow(3);
- }
- else
- {
- sizer -> AddGrowableRow(2);
- }
- sizer -> Add( label_vertical );
- sizer -> Add( label_min );
- sizer -> Add( mkwSlider,1,kwGROW );
- sizer -> Add( label_max );
- if (mResolutionOfSlider!=NULL)
- {
- sizer -> Add( mResolutionOfSlider );
- }
- }
- else
- {
- if (title!=_T(""))
- {
- sizer -> Add( new kwStaticText(panel,-1, title ) );
- sizer -> AddGrowableRow(1);
- }
- else
- {
- sizer -> AddGrowableRow(0);
- }
- sizer -> Add( mkwSlider,1,kwGROW );
- if (mResolutionOfSlider!=NULL)
- {
- sizer -> Add( mResolutionOfSlider );
- }
- }
- }
- // Initialize the labels
- RefreshLabels();
- // Insert the sizer in the main panel and refresh the layout
- panel->SetSizer(sizer);
- }
- //-------------------------------------------------------------------------
-
-
- //-------------------------------------------------------------------------
- SliderWidget::~SliderWidget()
- {
- }
- //-------------------------------------------------------------------------
-
-
- //-------------------------------------------------------------------------
- void SliderWidget::OnResolutionOfSlider(kwScrollEvent& event)
- {
- int value = mkwSlider->GetValue();
- int delta = (int) (pow( 4 , mResolutionOfSlider->GetValue() ));
- int minTmp = value - delta/2;
- int maxTmp = value + delta/2;
- if (minTmp<min)
- {
- minTmp = min;
- // maxTmp = delta;
- }
- if (maxTmp>max)
- {
- maxTmp = max;
- }
- mkwSlider->SetRange(minTmp,maxTmp);
- RefreshLabels();
- }
- //-------------------------------------------------------------------------
-
-
-
- //-------------------------------------------------------------------------
- void SliderWidget::OnSliderTrack(kwScrollEvent& event)