Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1. //Bartosz Pokorski
  2. //281814
  3.  
  4. #include <graph.h>
  5. #include <GUI.h>
  6. using namespace Graph_lib;
  7.  
  8. void cb_close (Address addr1, Address pWnd);
  9. class Spinner;
  10. struct myButton : Button
  11. {
  12. Spinner* pSpinner;
  13. myButton(Point xy, int w, int h, const string& label, Callback cb, Spinner* pSpin) : Button(xy, w,h, label, cb),
  14. pSpinner(pSpin)
  15. {}
  16.  
  17.  
  18. void attach(Graph_lib::Window& wnd)
  19. {
  20. Button::attach(wnd);
  21. pw -> callback(reinterpret_cast<Fl_Callback*>(do_it),pSpinner);
  22.  
  23. }
  24. Address getWigdetAddress() const { return pw; }
  25. };
  26.  
  27. class Spinner
  28. {
  29. private:
  30.  
  31.  
  32. myButton btn_up;
  33. myButton btn_down;
  34. Graph_lib::Out_box radiusBox;
  35. Circle Circ;
  36. static const int step_size = 5;
  37. int radius;
  38.  
  39. Circle *pCirc = nullptr;
  40. Graph_lib::Window *pWnd = nullptr;
  41.  
  42.  
  43.  
  44. static void cb_up (Address pWidget, Address pSpin)
  45. {
  46. ((Spinner*)pSpin)->changeRadius(step_size);
  47. }
  48.  
  49. static void cb_down (Address pWidget, Address pSpin)
  50. {
  51. ((Spinner*)pSpin)->changeRadius(-step_size);
  52. }
  53. void changeRadius(int Step)
  54. {
  55. radius += Step;
  56. radiusBox.put(radius);
  57. pWnd->detach(*pCirc);
  58. delete pCirc;
  59. pCirc = new Circle(Point(200,200), radius);
  60. pWnd->attach(*pCirc);
  61. pWnd->redraw();
  62. }
  63. public:
  64. Spinner(Point loc, int startVal)
  65. : btn_up(loc, 20, 20, "/\\", Spinner::cb_up, this),
  66. btn_down(Point(loc.x + 60, loc.y), 20, 20, "\\/", Spinner::cb_down, this),
  67. radiusBox(Point(loc.x + 25, loc.y), 30, 20, ""),
  68.  
  69. radius(startVal)
  70. {
  71. pCirc = new Circle(Point(200,200), radius);
  72. }
  73.  
  74. ~Spinner()
  75. {
  76. delete pCirc;
  77. }
  78.  
  79.  
  80. void attachTo(Graph_lib::Window& wnd)
  81. {
  82. wnd.attach(btn_up);
  83. wnd.attach(btn_down);
  84. wnd.attach(radiusBox);
  85. radiusBox.put(radius);
  86. wnd.attach(*pCirc);
  87. pWnd = &wnd;
  88. }
  89.  
  90. };
  91.  
  92. main()
  93. {
  94. Graph_lib::Window wnd(Point(100, 100), 600, 400,"Bartosz Pokorski (281814)");
  95. Button btn_close(Point(0,wnd.y_max()-20), 80, 20, "Close", cb_close);
  96. Spinner spin(Point(wnd.x_max() - 90, 10), 100);
  97. spin.attachTo(wnd);
  98. Graph_lib::gui_main();
  99. return 0;
  100. }
  101.  
  102. void cb_close (Address addr1, Address addr2)
  103. {
  104. cout << "addr1: "<< addr1 << endl;
  105. cout << "addr2: " <<addr2 << endl;
  106. cout << "close pressed\n";
  107. //btn_close.move(100, -100);
  108. ((Graph_lib::Window *)addr2) -> hide();
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement