Program: bbtk
Module: $RCSfile: bbkwLayoutSplit.cxx,v $
Language: C++
- Date: $Date: 2008/12/02 10:21:42 $
- Version: $Revision: 1.2 $
+ Date: $Date: 2008/12/02 13:37:56 $
+ Version: $Revision: 1.3 $
=========================================================================*/
/* ---------------------------------------------------------------------
}
- void LayoutSplit::CreateWidget(vtkKWWidget* parent)
+ void LayoutSplit::CreateWidget(vtkKWFrame* parent)
{
vtkKWSplitFrame *splitframe = vtkKWSplitFrame::New();
bbSetOutputWidget(splitframe);
splitframe->SetParent(parent);
splitframe->Create();
-
splitframe->SetFrame1MinimumSize(5);
splitframe->SetFrame2MinimumSize(5);
+ splitframe->SetExpandableFrameToBothFrames();
+
+
+ int width = parent->GetWidth();
+ int height = parent->GetHeight();
+ int orientation = 0;
+ if (bbtk::Utilities::loosematch(bbGetInputOrientation(),"0|H|HORIZONTAL")==true)
+ {
+ orientation = 0;
+ }
+ else if (bbtk::Utilities::loosematch(bbGetInputOrientation(),"1|V|VERTICAL")==true)
+ {
+ orientation = 1;
+ }
+ else
+ {
+ bbtkWarning("Unrecognized value '"<<bbGetInputOrientation()<<"' for input 'Orientation' of LayoutSplit "<<bbGetName()<<std::endl);
+ }
+
+ if (orientation==0)
+ {
+ splitframe->SetOrientationToHorizontal ();
+ width = width / 2;
+ }
+ else
+ {
+ splitframe->SetOrientationToVertical ();
+ height = height / 2 ;
+ }
+
+ width = width - 5;
+ height = height - 5 ;
+
+ bbGetOutputWidget()->GetApplication()->Script("place %s -x 0 -y 0 -width %d -height %d",
+ bbGetOutputWidget()->GetWidgetName(),
+ parent->GetWidth(),
+ parent->GetHeight() );
- splitframe->GetApplication()->Script("pack %s -side top -expand y",
- splitframe->GetWidgetName());
- /*
splitframe->SetReliefToGroove();
splitframe->SetBorderWidth(2);
- splitframe->SetExpandableFrameToBothFrames();
- */
- bbCreateWidgetOfInput("Widget1",splitframe->GetFrame1());
- bbCreateWidgetOfInput("Widget2",splitframe->GetFrame2());
-
- /*
- int orientation=0;
- if (bbtk::Utilities::loosematch(bbGetInputOrientation(),"0|H|HORIZONTAL")==true) { orientation=0; }
- if (bbtk::Utilities::loosematch(bbGetInputOrientation(),"1|V|VERTICAL")==true) { orientation=1; }
-
- if (orientation==1) { w->SplitHorizontally( w1, w2, 100); }
- else { w->SplitVertically( w1, w2, 100); }
+
+ vtkKWWidget* w1 = bbCreateWidgetOfInput("Widget1",splitframe->GetFrame1());
+
+ vtkKWWidget* w2 = bbCreateWidgetOfInput("Widget2",splitframe->GetFrame2());
+
+
+ splitframe->GetApplication()->Script("place %s -x 0 -y 0 -width %d -height %d",
+ w1->GetWidgetName(),
+ width,
+ height);
+
+ splitframe->GetApplication()->Script("place %s -x 0 -y 0 -width %d -height %d",
+ w2->GetWidgetName(),
+ width,
+ height);
- */
+
+
}
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;
+ };
+ //--------------------------------------------------------------------------
+ */
//--------------------------------------------------------------------------
//-------------------------------------------------------------------------
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
- //--------------------------------------------------------------------------
+ //--------------------------------------------------------------------------
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("Out");
+ }
+ //--------------------------------------------------------------------------
+
+
} //namespace bbkw
Program: bbtk
Module: $RCSfile: bbkwSlider.h,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 KWBlackBox definition
#include "bbtkKWBlackBox.h"
-
+class vtkObject;
+class vtkCommand;
+#include "vtkCommand.h"
// Namespace of the package "kw" is "bbkw"
// Namespace associated to packages should be of the form :
namespace bbkw
{
-
- /* //--------------------------------------------------------------------------
- // Forward declaration of the box
- class Slider;
-
- //--------------------------------------------------------------------------
- // The widget created by the box
- class SliderWidget : public kwPanel
- {
- public:
- /// Ctor with the two first params the parent window and the creator box
- /// which must be passed to the KwBlackBoxWidget constructor.
- /// The other params initialize the widget
- SliderWidget(Slider* box, kwWindow *parent,
- int orientation,
- bool changeresolution,
- bool label,
- kwString title,
- int vmin,
- int vmax,
- int value,
- int track);
- /// Dtor
- ~SliderWidget();
- /// Events callbacks
- /// Called when the slider is moved
- void OnSliderTrack(kwScrollEvent& event);
- /// Called when the slider is released
- void OnSliderRelease(kwScrollEvent& event);
- /// Called when the little slider which controls the resolution
- /// of the main slider is moved (if activated)
- void OnResolutionOfSlider(kwScrollEvent& event);
-
- // Accessors
- int GetValue() { return mkwSlider->GetValue(); }
- void SetRange(int min, int max);
- // Update the texts which display the min/max/current values of the slider
- void RefreshLabels();
-
- private:
- Slider* mBox;
- kwSlider *mkwSlider;
- kwSlider *mResolutionOfSlider;
- int min;
- int max;
- int reactiveOnTrack;
- kwStaticText *label_vertical;
- kwStaticText *label_min;
- kwStaticText *label_max;
- };
- //------------------------------------------------------------------------
- //------------------------------------------------------------------------
- //------------------------------------------------------------------------
-
- */
-
-
//------------------------------------------------------------------------
// The black box
- class /*BBTK_EXPORT*/ Slider : public bbtk::KWBlackBox
+ class /*BBTK_EXPORT*/ Slider : public bbtk::KWBlackBox, public vtkCommand
{
BBTK_BLACK_BOX_INTERFACE(Slider,bbtk::KWBlackBox);
BBTK_PROCESS(Process);
BBTK_CREATE_KWWIDGET(CreateWidget);
void Process();
- void CreateWidget(vtkKWWidget*);
-
- protected:
+ void CreateWidget(vtkKWFrame*);
+ virtual void Execute(vtkObject* caller, unsigned long, void*);
+
+ protected:
virtual void bbUserConstructor();
};
//=================================================================