X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fkw%2Fsrc%2FbbkwSlider.cxx;h=dfd62889aefc5e51ad5aa95a0f3563a062ab82b1;hb=3a8afa6eaa63553083bb32be8d86e3b916fda59a;hp=41a8008b9a447bd14cad6acb497672d19cf02425;hpb=26a8c332dda10ace9e3e088b2ca8544d188c9743;p=bbtk.git diff --git a/packages/kw/src/bbkwSlider.cxx b/packages/kw/src/bbkwSlider.cxx index 41a8008..dfd6288 100644 --- a/packages/kw/src/bbkwSlider.cxx +++ b/packages/kw/src/bbkwSlider.cxx @@ -1,32 +1,39 @@ -/*========================================================================= +/* +# --------------------------------------------------------------------- +# +# 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 @@ -44,303 +51,30 @@ #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 (minTmpmax) - { - 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 $$$$$$$$$$$$"<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; + }; + //-------------------------------------------------------------------------- + */ //-------------------------------------------------------------------------- //------------------------------------------------------------------------- @@ -348,7 +82,7 @@ namespace bbkw //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- - //-------------------------------------------------------------------------- + //-------------------------------------------------------------------------- BBTK_BLACK_BOX_IMPLEMENTATION(Slider,bbtk::KWBlackBox); BBTK_ADD_BLACK_BOX_TO_PACKAGE(kw,Slider); @@ -363,25 +97,30 @@ namespace bbkw 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(); @@ -394,12 +133,25 @@ namespace bbkw { bbtkWarning("Unrecognized value for input 'Orientation' of "<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 $$$$$$$$$$$$"<GetValue() ); + bbSetInputIn( scale->GetValue() ); + // and signal that the output has changed + bbSignalOutputModification(std::string("Out")); + } + //-------------------------------------------------------------------------- + + } //namespace bbkw