// classes.cxx (example3) #include #include #include #include #include #include // utility to convert anthing to a string #include template char* makestr(const T& i) { std::ostringstream os; os << i; std::string oss = os.str(); char* sp = new char[oss.length()+1]; sp[oss.copy(sp, std::string::npos)] = 0; return sp; } static void exit_callback(Fl_Widget *, void *) { exit(0); } class SampleWindow : public Fl_Window { private: Fl_Int_Input intinput; Fl_Button copy_button; Fl_Slider slider; Fl_Button down_button; Fl_Button up_button; Fl_Button exit_button; void copy_callback(); static void copy_callback(Fl_Widget*, void* v); void down_callback(); static void down_callback(Fl_Widget*, void* v); void up_callback(); static void up_callback(Fl_Widget*, void* v); void slider_callback(); static void slider_callback(Fl_Widget*, void* v); public: SampleWindow(const char* label=0); ~SampleWindow() {} }; SampleWindow::SampleWindow(const char* label) : Fl_Window(320,90,label), intinput(10,10,100,20), copy_button(110,10,100,20,"copy to slider"), slider(10,35,300,20), down_button(50,60,50,20,"down"), up_button(150,60,50,20,"up"), exit_button(250,60,50,20,"exit") { copy_button.callback(copy_callback,this); down_button.callback(down_callback,this); up_button.callback(up_callback,this); slider.callback(slider_callback,this); intinput.value("0"); slider.type(FL_HORIZONTAL); slider.range(-10,10); slider.step(1); slider.value(0); exit_button.callback(exit_callback); end(); } void SampleWindow::copy_callback() { slider.value(atoi(intinput.value())); } void SampleWindow::copy_callback(Fl_Widget*, void* v) { ((SampleWindow*)v)->copy_callback(); } void SampleWindow::down_callback() { slider.value(slider.value()-1); intinput.value(makestr(slider.value())); } void SampleWindow::down_callback(Fl_Widget*, void* v) { ((SampleWindow*)v)->down_callback(); } void SampleWindow::up_callback() { slider.value(slider.value()+1); intinput.value(makestr(slider.value())); } void SampleWindow::up_callback(Fl_Widget*, void* v) { ((SampleWindow*)v)->up_callback(); } void SampleWindow::slider_callback() { intinput.value(makestr(slider.value())); } void SampleWindow::slider_callback(Fl_Widget* w, void* v) { ((SampleWindow*)v)->slider_callback(); } int main( ) { SampleWindow window1("Window 1"); SampleWindow window2("Window 2"); window1.show(); window2.show(); return Fl::run(); }