]> Creatis software - bbtk.git/blob - samples/SampleOutputObserver/bbtkSampleOutputObserver.cxx
*** empty log message ***
[bbtk.git] / samples / SampleOutputObserver / bbtkSampleOutputObserver.cxx
1 #include <bbwxSlider.h>
2 #include <bbwxLayoutLine.h>
3
4 //=========================================================================
5 // Illustrates the Output Observer mechanism
6 //=========================================================================
7
8 //=========================================================================
9 void CallbackFunction ( bbtk::BlackBox::Pointer p, 
10                         const std::string& o, 
11                         bbtk::IOStatus s)
12 {
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);
16   if (slider)
17     {
18       std::cout << "* Current slider value = "<<slider->bbGetOutputOut()
19                 <<std::endl;
20     }
21 }
22 //=========================================================================
23
24 //=========================================================================
25 void SliderCallback()
26 {
27   std::cout << "============== Callback function called when slider is released" 
28             << std::endl;
29    try
30     {
31       bbwx::Slider::Pointer slider = bbwx::Slider::New("slider");
32       slider->bbSetInputWinDialog(true);  // mandatory
33       slider->bbAddOutputObserver( "Out", &CallbackFunction );
34       slider->bbExecute();
35     }
36   catch (bbtk::Exception e)
37     {
38       e.Print();
39     } 
40 }
41 //=========================================================================
42
43
44 //=========================================================================
45 class ClassWithTwoSliders
46 {
47 public:
48   // Ctor
49   ClassWithTwoSliders();
50   // Callback
51   void OnSlider( bbtk::BlackBox::Pointer p, 
52                  const std::string& o, 
53                  bbtk::IOStatus s );
54 private:
55   bbwx::Slider::Pointer mSlider1;
56   bbwx::Slider::Pointer mSlider2;
57 bbwx::LayoutLine::Pointer mLayout;
58 };
59 //=========================================================================
60
61 //=========================================================================
62 ClassWithTwoSliders::ClassWithTwoSliders()
63 {
64   std::cout << "============== Callback member called when first slider is released or second slider moves" 
65             << std::endl;
66   try
67     {
68       mSlider1 = bbwx::Slider::New("slider1");
69       mSlider1->bbAddOutputObserver("Out", 
70                                     BBTK_MAKE_OUTPUT_OBSERVER
71                                     (this,
72                                      &ClassWithTwoSliders::OnSlider ));
73       
74       mSlider2 = bbwx::Slider::New("slider2");
75       mSlider2->bbSetInputReactiveOnTrack(true);
76       mSlider2->bbAddOutputObserver("Out", 
77                                     BBTK_MAKE_OUTPUT_OBSERVER
78                                     (this,
79                                      &ClassWithTwoSliders::OnSlider ));
80       
81       mLayout = bbwx::LayoutLine::New("layout");
82       mLayout->bbSetInputWinDialog(true);  // mandatory
83       
84       bbtk::Connection::Pointer c1 = bbtk::Connection::New( mSlider1, 
85                                                             "Widget", 
86                                                             mLayout, 
87                                                             "Widget1");
88       bbtk::Connection::Pointer c2 = bbtk::Connection::New( mSlider2, 
89                                                             "Widget", 
90                                                             mLayout, 
91                                                             "Widget2");
92       
93       mLayout->bbExecute();
94     }
95   catch (bbtk::Exception e)
96     {
97       e.Print();
98     }   
99 }
100 //=========================================================================
101
102 //=========================================================================
103 void ClassWithTwoSliders::OnSlider( bbtk::BlackBox::Pointer p, 
104                                     const std::string& o, 
105                                     bbtk::IOStatus s )
106 {
107   std::cout << "== 'OnSlider' called with p="<<p->bbGetName()
108             <<" o="<<o<<" s="<<bbtk::GetIOStatusString(s)<<std::endl;
109   
110   if ((p==mSlider1) && (o=="Out"))
111     {
112       std::cout << "* First slider released. New value = "
113                 <<mSlider1->bbGetOutputOut()<<std::endl;
114     }                                                  
115   else if ((p==mSlider2) && (o=="Out"))
116     {
117       std::cout << "* Second slider moved. New value = "
118                 <<mSlider2->bbGetOutputOut()<<std::endl;
119     }
120 }
121 //=========================================================================
122
123 //=========================================================================
124 int main(int argv, char* argc[])
125 {
126  // To track all ...
127   //  bbtk::MessageManager::SetMessageLevel("all",9);
128   SliderCallback();
129   ClassWithTwoSliders C;
130 }
131 //=========================================================================