#include #include //========================================================================= // Illustrates the Output Observer mechanism //========================================================================= //========================================================================= // FIRST EXAMPLE USING A FUNCTION AS CALLBACK void CallbackFunction ( bbtk::BlackBox::Pointer p, // The black box which changed const std::string& o, // The output which changed bbtk::IOStatus s) // The new status of the output { std::cout << "== Callback function called with p="<bbGetName() <<" o="<bbSetInputWinDialog(true); // mandatory // Add the observer slider->bbAddOutputObserver( "Out", &CallbackFunction ); slider->bbExecute(); } catch (bbtk::Exception e) { e.Print(); } } //========================================================================= //========================================================================= // SECOND EXAMPLE : MEMBER METHOD CALLED WHEN SLIDER IS RELEASED class ClassWithTwoSliders { public: // Ctor ClassWithTwoSliders(); // Callback void OnSlider( bbtk::BlackBox::Pointer p, const std::string& o, bbtk::IOStatus s ); private: bbwx::Slider::Pointer mSlider1; bbwx::Slider::Pointer mSlider2; bbwx::LayoutLine::Pointer mLayout; }; //========================================================================= //========================================================================= ClassWithTwoSliders::ClassWithTwoSliders() { std::cout << "============== Callback member called when first slider is released or second slider moves" << std::endl; try { mSlider1 = bbwx::Slider::New("slider1"); // Add the observer method // As it is not a FREEHAND function we must use the macro // BBTK_MAKE_OUTPUT_OBSERVER which takes the object and the method to call mSlider1->bbAddOutputObserver("Out", BBTK_MAKE_OUTPUT_OBSERVER (this, &ClassWithTwoSliders::OnSlider )); mSlider2 = bbwx::Slider::New("slider2"); mSlider2->bbSetInputReactiveOnTrack(true); mSlider2->bbAddOutputObserver("Out", BBTK_MAKE_OUTPUT_OBSERVER (this, &ClassWithTwoSliders::OnSlider )); mLayout = bbwx::LayoutLine::New("layout"); mLayout->bbSetInputWinDialog(true); // mandatory bbtk::Connection::Pointer c1 = bbtk::Connection::New( mSlider1, "Widget", mLayout, "Widget1"); bbtk::Connection::Pointer c2 = bbtk::Connection::New( mSlider2, "Widget", mLayout, "Widget2"); mLayout->bbExecute(); } catch (bbtk::Exception e) { e.Print(); } } //========================================================================= //========================================================================= void ClassWithTwoSliders::OnSlider( bbtk::BlackBox::Pointer p, const std::string& o, bbtk::IOStatus s ) { std::cout << "== 'OnSlider' called with p="<bbGetName() <<" o="<