]> Creatis software - bbtk.git/blobdiff - packages/kw/src/bbkwSlider.cxx
*** empty log message ***
[bbtk.git] / packages / kw / src / bbkwSlider.cxx
index 41a8008b9a447bd14cad6acb497672d19cf02425..8547f401678f494189d41a095ff42de888879589 100644 (file)
@@ -2,8 +2,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbkwSlider.cxx,v $
   Language:  C++
-  Date:      $Date: 2008/11/29 21:41:58 $
-  Version:   $Revision: 1.1 $
+  Date:      $Date: 2008/12/02 13:37:56 $
+  Version:   $Revision: 1.2 $
 =========================================================================*/
 
 /* ---------------------------------------------------------------------
 #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;
+  };
+  //--------------------------------------------------------------------------
+  */
 
   //--------------------------------------------------------------------------
   //-------------------------------------------------------------------------
@@ -348,7 +75,7 @@ namespace bbkw
   //--------------------------------------------------------------------------
   //--------------------------------------------------------------------------
 
-  //--------------------------------------------------------------------------
+   //--------------------------------------------------------------------------
   BBTK_BLACK_BOX_IMPLEMENTATION(Slider,bbtk::KWBlackBox);
   BBTK_ADD_BLACK_BOX_TO_PACKAGE(kw,Slider);
   
@@ -363,25 +90,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 +126,25 @@ namespace bbkw
       {
        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("Out");    
+  } 
+  //--------------------------------------------------------------------------
+  
+
 
 } //namespace bbkw