1 #include <bbwxSlider.h>
2 #include <bbwxLayoutLine.h>
4 //=========================================================================
5 // Illustrates the Output Observer mechanism
6 //=========================================================================
8 //=========================================================================
9 // FIRST EXAMPLE USING A FUNCTION AS CALLBACK
10 void CallbackFunction ( bbtk::BlackBox::Pointer p, // The black box which changed
11 const std::string& o, // The output which changed
12 bbtk::IOStatus s) // The new status of the output
14 std::cout << "== Callback function called with p="<<p->bbGetName()
15 <<" o="<<o<<" s="<<s/*bbtk::GetIOStatusString(s)*/<<std::endl;
17 // Cast the black box pointer into Slider pointer
18 bbwx::Slider::Pointer slider = boost::dynamic_pointer_cast<bbwx::Slider>(p);
21 std::cout << "* Current slider value = "<<slider->bbGetOutputOut()
25 //=========================================================================
27 //=========================================================================
30 std::cout << "============== Callback function called when slider is released"
34 bbwx::Slider::Pointer slider = bbwx::Slider::New("slider");
35 slider->bbSetInputWinDialog(true); // mandatory
37 slider->bbAddOutputObserver( "Out", &CallbackFunction );
40 catch (bbtk::Exception e)
45 //=========================================================================
48 //=========================================================================
49 // SECOND EXAMPLE : MEMBER METHOD CALLED WHEN SLIDER IS RELEASED
50 class ClassWithTwoSliders
54 ClassWithTwoSliders();
56 void OnSlider( bbtk::BlackBox::Pointer p,
60 bbwx::Slider::Pointer mSlider1;
61 bbwx::Slider::Pointer mSlider2;
62 bbwx::LayoutLine::Pointer mLayout;
64 //=========================================================================
66 //=========================================================================
67 ClassWithTwoSliders::ClassWithTwoSliders()
69 std::cout << "============== Callback member called when first slider is released or second slider moves"
73 mSlider1 = bbwx::Slider::New("slider1");
74 // Add the observer method
75 // As it is not a FREEHAND function we must use the macro
76 // BBTK_MAKE_OUTPUT_OBSERVER which takes the object and the method to call
77 mSlider1->bbAddOutputObserver("Out",
78 BBTK_MAKE_OUTPUT_OBSERVER
80 &ClassWithTwoSliders::OnSlider ));
82 mSlider2 = bbwx::Slider::New("slider2");
83 mSlider2->bbSetInputReactiveOnTrack(true);
84 mSlider2->bbAddOutputObserver("Out",
85 BBTK_MAKE_OUTPUT_OBSERVER
87 &ClassWithTwoSliders::OnSlider ));
89 mLayout = bbwx::LayoutLine::New("layout");
90 mLayout->bbSetInputWinDialog(true); // mandatory
92 bbtk::Connection::Pointer c1 = bbtk::Connection::New( mSlider1,
96 bbtk::Connection::Pointer c2 = bbtk::Connection::New( mSlider2,
101 mLayout->bbExecute();
103 catch (bbtk::Exception e)
108 //=========================================================================
110 //=========================================================================
111 void ClassWithTwoSliders::OnSlider( bbtk::BlackBox::Pointer p,
112 const std::string& o,
115 std::cout << "== 'OnSlider' called with p="<<p->bbGetName()
116 <<" o="<<o<<" s="<<s/*bbtk::GetIOStatusString(s)*/<<std::endl;
118 if ((p==mSlider1) && (o=="Out"))
120 std::cout << "* First slider released. New value = "
121 <<mSlider1->bbGetOutputOut()<<std::endl;
123 else if ((p==mSlider2) && (o=="Out"))
125 std::cout << "* Second slider moved. New value = "
126 <<mSlider2->bbGetOutputOut()<<std::endl;
129 //=========================================================================
131 //=========================================================================
132 int main(int argv, char* argc[])
135 // bbtk::MessageManager::SetMessageLevel("all",9);
137 ClassWithTwoSliders C;
139 //=========================================================================