1 #include <bbwxSlider.h>
2 #include <bbwxLayoutLine.h>
4 //=========================================================================
5 // Illustrates the Output Observer mechanism
6 //=========================================================================
8 //=========================================================================
9 void CallbackFunction ( bbtk::BlackBox::Pointer p,
13 std::cout << "== Callback function called with p="<<p->bbGetName()
14 <<" o="<<o<<" s="<<bbtk::GetIOStatusString(s)<<std::endl;
15 bbwx::Slider::Pointer slider = boost::dynamic_pointer_cast<bbwx::Slider>(p);
18 std::cout << "* Current slider value = "<<slider->bbGetOutputOut()
22 //=========================================================================
24 //=========================================================================
27 std::cout << "============== Callback function called when slider is released"
31 bbwx::Slider::Pointer slider = bbwx::Slider::New("slider");
32 slider->bbSetInputWinDialog(true); // mandatory
33 slider->bbAddOutputObserver( "Out", &CallbackFunction );
36 catch (bbtk::Exception e)
41 //=========================================================================
44 //=========================================================================
45 class ClassWithTwoSliders
49 ClassWithTwoSliders();
51 void OnSlider( bbtk::BlackBox::Pointer p,
55 bbwx::Slider::Pointer mSlider1;
56 bbwx::Slider::Pointer mSlider2;
57 bbwx::LayoutLine::Pointer mLayout;
59 //=========================================================================
61 //=========================================================================
62 ClassWithTwoSliders::ClassWithTwoSliders()
64 std::cout << "============== Callback member called when first slider is released or second slider moves"
68 mSlider1 = bbwx::Slider::New("slider1");
69 mSlider1->bbAddOutputObserver("Out",
70 BBTK_MAKE_OUTPUT_OBSERVER
72 &ClassWithTwoSliders::OnSlider ));
74 mSlider2 = bbwx::Slider::New("slider2");
75 mSlider2->bbSetInputReactiveOnTrack(true);
76 mSlider2->bbAddOutputObserver("Out",
77 BBTK_MAKE_OUTPUT_OBSERVER
79 &ClassWithTwoSliders::OnSlider ));
81 mLayout = bbwx::LayoutLine::New("layout");
82 mLayout->bbSetInputWinDialog(true); // mandatory
84 bbtk::Connection::Pointer c1 = bbtk::Connection::New( mSlider1,
88 bbtk::Connection::Pointer c2 = bbtk::Connection::New( mSlider2,
95 catch (bbtk::Exception e)
100 //=========================================================================
102 //=========================================================================
103 void ClassWithTwoSliders::OnSlider( bbtk::BlackBox::Pointer p,
104 const std::string& o,
107 std::cout << "== 'OnSlider' called with p="<<p->bbGetName()
108 <<" o="<<o<<" s="<<bbtk::GetIOStatusString(s)<<std::endl;
110 if ((p==mSlider1) && (o=="Out"))
112 std::cout << "* First slider released. New value = "
113 <<mSlider1->bbGetOutputOut()<<std::endl;
115 else if ((p==mSlider2) && (o=="Out"))
117 std::cout << "* Second slider moved. New value = "
118 <<mSlider2->bbGetOutputOut()<<std::endl;
121 //=========================================================================
123 //=========================================================================
124 int main(int argv, char* argc[])
127 // bbtk::MessageManager::SetMessageLevel("all",9);
129 ClassWithTwoSliders C;
131 //=========================================================================