-/*=========================================================================
+/*
+# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+# pour la SantÈ)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+# Previous Authors : Laurent Guigues, Jean-Pierre Roux
+# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+#
+# This software is governed by the CeCILL-B license under French law and
+# abiding by the rules of distribution of free software. You can use,
+# modify and/ or redistribute the software under the terms of the CeCILL-B
+# license as circulated by CEA, CNRS and INRIA at the following URL
+# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+# or in the file LICENSE.txt.
+#
+# As a counterpart to the access to the source code and rights to copy,
+# modify and redistribute granted by the license, users are provided only
+# with a limited warranty and the software's author, the holder of the
+# economic rights, and the successive licensors have only limited
+# liability.
+#
+# The fact that you are presently reading this means that you have had
+# knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------ */
+
+
+/*=========================================================================
Program: bbtk
Module: $RCSfile: bbkwSlider.cxx,v $
Language: C++
- Date: $Date: 2008/11/29 21:41:58 $
- Version: $Revision: 1.1 $
+ Date: $Date: 2012/11/16 08:51:05 $
+ Version: $Revision: 1.4 $
=========================================================================*/
-/* ---------------------------------------------------------------------
-* Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
-* Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
-*
-* This software is governed by the CeCILL-B license under French law and
-* abiding by the rules of distribution of free software. You can use,
-* modify and/ or redistribute the software under the terms of the CeCILL-B
-* license as circulated by CEA, CNRS and INRIA at the following URL
-* http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-* or in the file LICENSE.txt.
-*
-* As a counterpart to the access to the source code and rights to copy,
-* modify and redistribute granted by the license, users are provided only
-* with a limited warranty and the software's author, the holder of the
-* economic rights, and the successive licensors have only limited
-* liability.
-*
-* The fact that you are presently reading this means that you have had
-* knowledge of the CeCILL-B license and that you accept its terms.
-* ------------------------------------------------------------------------ */
/**
* \file
#include "bbtkUtilities.h"
#include "vtkKWScale.h"
+#include "vtkObjectFactory.h"
+#include "vtkCommand.h"
namespace bbkw
{
-
/*
- //-------------------------------------------------------------------------
- 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)
+ //--------------------------------------------------------------------------
+ class Callback : public vtkCommand
{
- if(reactiveOnTrack)
+ public:
+ static Callback *New() { return new Callback; }
+ virtual void Execute(vtkObject* caller, unsigned long, void*)
{
- // When user releases the slider
- // we update the output of the box
-
- mBox->bbSetOutputOut( mkwSlider->GetValue() );
- mBox->bbSetInputIn( mkwSlider->GetValue() );
- // and signal that the output has changed
- mBox->bbSignalOutputModification("Out");
+ // std::cout << "$$$$$$$$$$$$ Slider CB $$$$$$$$$$$$"<<std::endl;
+ vtkKWScale* scale = (vtkKWScale*)caller;
+ mBox->bbSetOutputOut( scale->GetValue() );
+ mBox->bbSetInputIn( scale->GetValue() );
+ // and signal that the output has changed
+ mBox->bbSignalOutputModification("Out");
}
- RefreshLabels();
- }
- //-------------------------------------------------------------------------
-
-
- //-------------------------------------------------------------------------
- void SliderWidget::OnSliderRelease(kwScrollEvent& event)
- {
- // When user releases the slider
- // we update the output of the box
- mBox->bbSetOutputOut( mkwSlider->GetValue() );
- mBox->bbSetInputIn( mkwSlider->GetValue() );
- // and signal that the output has changed
- mBox->bbSignalOutputModification("Out");
- }
- //-------------------------------------------------------------------------
-
-
- //-------------------------------------------------------------------------
- void SliderWidget::RefreshLabels()
- {
- kwString strValue;
- if (label_vertical!=NULL)
- {
- strValue.Printf( _T("%d"), mkwSlider->GetValue() );
- label_vertical->SetLabel(strValue);
- }
- if (label_min!=NULL)
- {
- strValue.Printf( _T("%d"), mkwSlider->GetMin() );
- label_min->SetLabel(strValue);
- }
- if (label_max!=NULL)
- {
- strValue.Printf( _T("%d"), mkwSlider->GetMax() );
- label_max->SetLabel(strValue);
- }
- }
- //-------------------------------------------------------------------------
-
-
- //-------------------------------------------------------------------------
- void SliderWidget::SetRange(int min, int max)
- {
- this->min = min;
- this->max = max;
- mkwSlider->SetRange(min,max);
- RefreshLabels();
- }
- //-------------------------------------------------------------------------
-
- */
-
+ Slider* mBox;
+ };
+ //--------------------------------------------------------------------------
+ */
//--------------------------------------------------------------------------
//-------------------------------------------------------------------------
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
- //--------------------------------------------------------------------------
+ //--------------------------------------------------------------------------
BBTK_BLACK_BOX_IMPLEMENTATION(Slider,bbtk::KWBlackBox);
BBTK_ADD_BLACK_BOX_TO_PACKAGE(kw,Slider);
bbSetInputOrientation("HORIZONTAL");
bbSetInputChangeResolution(false);
bbSetInputLabel(true);
+ bbSetInputTitle("");
bbSetInputReactiveOnTrack(0);
}
//--------------------------------------------------------------------------
void Slider::Process()
{
+ bbSetOutputOut( bbGetInputIn() );
}
//--------------------------------------------------------------------------
- void Slider::CreateWidget(vtkKWWidget* parent)
+
+ //--------------------------------------------------------------------------
+ void Slider::CreateWidget(vtkKWFrame* parent)
{
vtkKWScale* s = vtkKWScale::New();
bbSetOutputWidget(s);
- s->SetParent(parent);
+ s->AddObserver(vtkKWScale::ScaleValueChangingEvent,this);
+ s->SetParent((vtkKWWidget*)parent);
s->Create();
s->SetRange(bbGetInputMin(),bbGetInputMax());
// s->SetResolution(1.0);
// s->SetLength(150);
- s->SetLabelText("A simple scale:");
+ s->SetLabelText(bbGetInputTitle().c_str());
if (bbtk::Utilities::loosematch(bbGetInputOrientation(),"0|H|HORIZONTAL")==true)
{
s->SetOrientationToHorizontal();
{
bbtkWarning("Unrecognized value for input 'Orientation' of "<<bbGetFullName());
}
-
- s->GetApplication()->Script("pack %s -side left -anchor c -expand y",
- s->GetWidgetName());
bbSetOutputOut( bbGetInputIn() );
}
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+
+ void Slider::Execute(vtkObject* caller, unsigned long, void*)
+ {
+ // std::cout << "$$$$$$$$$$$$ Slider CB $$$$$$$$$$$$"<<std::endl;
+ vtkKWScale* scale = (vtkKWScale*)caller;
+ bbSetOutputOut( scale->GetValue() );
+ bbSetInputIn( scale->GetValue() );
+ // and signal that the output has changed
+ bbSignalOutputModification(std::string("Out"));
+ }
+ //--------------------------------------------------------------------------
+
+
} //namespace bbkw