// // This is a GUI support code to the chapters 12-16 of the book // "Programming -- Principles and Practice Using C++" by Bjarne Stroustrup // #include #include #include #include "GUI.h" namespace Graph_lib { //------------------------------------------------------------------------------ void Button::attach(Window& win) { pw = new Fl_Button(loc.x, loc.y, width, height, label.c_str()); pw->callback(reinterpret_cast(do_it), &win); // pass the window own = &win; } //------------------------------------------------------------------------------ int In_box::get_int() { Fl_Input& pi = reference_to(pw); // return atoi(pi.value()); const char* p = pi.value(); if (!isdigit(p[0])) return -999999; return atoi(p); } //------------------------------------------------------------------------------ string In_box::get_string() { Fl_Input& pi = reference_to(pw); return string(pi.value()); } //------------------------------------------------------------------------------ void In_box::attach(Window& win) { pw = new Fl_Input(loc.x, loc.y, width, height, label.c_str()); own = &win; } //------------------------------------------------------------------------------ void Out_box::put(const string& s) { reference_to(pw).value(s.c_str()); } //------------------------------------------------------------------------------ void Out_box::attach(Window& win) { pw = new Fl_Output(loc.x, loc.y, width, height, label.c_str()); own = &win; } //------------------------------------------------------------------------------ int Menu::attach(Button& b) { b.width = width; b.height = height; switch(k) { case horizontal: b.loc = Point(loc.x+offset,loc.y); offset+=b.width; break; case vertical: b.loc = Point(loc.x,loc.y+offset); offset+=b.height; break; } selection.push_back(b); // b is NOT OWNED: pass by reference return int(selection.size()-1); } //------------------------------------------------------------------------------ int Menu::attach(Button* p) { Button& b = *p; b.width = width; b.height = height; switch(k) { case horizontal: b.loc = Point(loc.x+offset,loc.y); offset+=b.width; break; case vertical: b.loc = Point(loc.x,loc.y+offset); offset+=b.height; break; } selection.push_back(&b); // b is OWNED: pass by pointer return int(selection.size()-1); } //------------------------------------------------------------------------------ }; // of namespace Graph_lib