Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Bartosz Pokorski
- //281814
- #include <graph.h>
- #include <GUI.h>
- using namespace Graph_lib;
- void cb_close (Address addr1, Address pWnd);
- class Spinner;
- struct myButton : Button
- {
- Spinner* pSpinner;
- myButton(Point xy, int w, int h, const string& label, Callback cb, Spinner* pSpin) : Button(xy, w,h, label, cb),
- pSpinner(pSpin)
- {}
- void attach(Graph_lib::Window& wnd)
- {
- Button::attach(wnd);
- pw -> callback(reinterpret_cast<Fl_Callback*>(do_it),pSpinner);
- }
- Address getWigdetAddress() const { return pw; }
- };
- class Spinner
- {
- private:
- myButton btn_up;
- myButton btn_down;
- Graph_lib::Out_box radiusBox;
- Circle Circ;
- static const int step_size = 5;
- int radius;
- Circle *pCirc = nullptr;
- Graph_lib::Window *pWnd = nullptr;
- static void cb_up (Address pWidget, Address pSpin)
- {
- ((Spinner*)pSpin)->changeRadius(step_size);
- }
- static void cb_down (Address pWidget, Address pSpin)
- {
- ((Spinner*)pSpin)->changeRadius(-step_size);
- }
- void changeRadius(int Step)
- {
- radius += Step;
- radiusBox.put(radius);
- pWnd->detach(*pCirc);
- delete pCirc;
- pCirc = new Circle(Point(200,200), radius);
- pWnd->attach(*pCirc);
- pWnd->redraw();
- }
- public:
- Spinner(Point loc, int startVal)
- : btn_up(loc, 20, 20, "/\\", Spinner::cb_up, this),
- btn_down(Point(loc.x + 60, loc.y), 20, 20, "\\/", Spinner::cb_down, this),
- radiusBox(Point(loc.x + 25, loc.y), 30, 20, ""),
- radius(startVal)
- {
- pCirc = new Circle(Point(200,200), radius);
- }
- ~Spinner()
- {
- delete pCirc;
- }
- void attachTo(Graph_lib::Window& wnd)
- {
- wnd.attach(btn_up);
- wnd.attach(btn_down);
- wnd.attach(radiusBox);
- radiusBox.put(radius);
- wnd.attach(*pCirc);
- pWnd = &wnd;
- }
- };
- main()
- {
- Graph_lib::Window wnd(Point(100, 100), 600, 400,"Bartosz Pokorski (281814)");
- Button btn_close(Point(0,wnd.y_max()-20), 80, 20, "Close", cb_close);
- Spinner spin(Point(wnd.x_max() - 90, 10), 100);
- spin.attachTo(wnd);
- Graph_lib::gui_main();
- return 0;
- }
- void cb_close (Address addr1, Address addr2)
- {
- cout << "addr1: "<< addr1 << endl;
- cout << "addr2: " <<addr2 << endl;
- cout << "close pressed\n";
- //btn_close.move(100, -100);
- ((Graph_lib::Window *)addr2) -> hide();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement