Graphic Calculator: FIDocalcus
Проект трёх первокурсников (по инженерному практикуму в первом семестре) по созданию графического калькулятора на FLTK C++
Loading...
Searching...
No Matches
Widgets.h
Go to the documentation of this file.
1#pragma once
2
3// std libs
4#include <stdexcept>
5
6// Graph_lib
7#include "Shapes.h"
8#include "Window.h"
9
10namespace Graph_lib {
11
12using Callback = void (*)(
13 void*, void*); // Обязательный тип функции FLTK для всех обратных вызовов
14
15template <class W>
16W& reference_to(void* ptr_wid) {
17 return *static_cast<W*>(ptr_wid);
18}
19
20/**
21 * @brief Абстрактный объект взаимодействия с пользователем
22 * @details Виджет — это дескриптор Fl_widget, но *не* Fl_widget, мы стараемся
23 * держать классы интерфейса на расстоянии от FLTK)
24 */
25class Widget {
26 public:
27 Widget() = default;
28
29 inline Widget(Point _loc, pix_amount _width, pix_amount _height,
30 const std::string& _label, Callback _cb)
31 : loc{_loc}, width{_width}, height{_height}, label{_label}, cb{_cb} {}
32
33 Widget(const Widget&) = delete; // (предотвращение копирования)
34
35 virtual ~Widget() = default;
36
37 // methods
38
39 virtual void move(int dx, int dy);
40
41 inline virtual void hide() { ptr_wid->hide(); }
42
43 inline virtual void show() { ptr_wid->show(); }
44
45 virtual void attach(Window&) = 0; // (определяется наследниками)
46
47 Window& window() { return *own; }
48
49 Widget& operator=(const Widget&) = delete; // (предотвращение копирования)
50
51 // ~methods
52
53 protected:
54 // vars
55
56 /// @brief Окно, которому принадлежит виджет
58
59 /// @brief Указатель на FLTK виджет
60 Fl_Widget* ptr_wid;
61
65
66 std::string label;
68
69 // ~vars
70};
71
72//-------------------------------------------------------------------------------------------------------------------------------
73
74struct Button : Widget {
75 inline Button(Point _loc, pix_amount _width, pix_amount _height,
76 const std::string& _label, Callback _cb)
77 : Widget{_loc, _width, _height, _label, _cb} {}
78
79 // methods
80
81 void attach(Window&);
82
83 // ~methods
84};
85
86//-------------------------------------------------------------------------------------------------------------------------------
87
88struct In_box : Widget {
89 inline In_box(Point _loc, pix_amount _width, pix_amount _height,
90 const std::string& s)
91 : Widget{_loc, _width, _height, s, nullptr} {}
92
93 // methods
94
95 std::string get_string();
96
97 void attach(Window& win);
98
99 // ~methods
100};
101
102//-------------------------------------------------------------------------------------------------------------------------------
103
104struct Out_box : Widget {
105 inline Out_box(Point _loc, pix_amount _width, pix_amount _height,
106 const std::string& s)
107 : Widget{_loc, _width, _height, s, nullptr} {}
108
109 // methods
110
111 void put(const std::string&);
112
113 void attach(Window& win);
114
115 // ~methods
116};
117
118} // namespace Graph_lib
unsigned int pix_amount
Definition Point.h:3
Абстрактный объект взаимодействия с пользователем
Definition Widgets.h:25
Window * own
Окно, которому принадлежит виджет
Definition Widgets.h:57
std::string label
Definition Widgets.h:66
virtual void hide()
Definition Widgets.h:41
Widget(Point _loc, pix_amount _width, pix_amount _height, const std::string &_label, Callback _cb)
Definition Widgets.h:29
virtual void move(int dx, int dy)
Definition Widgets.cpp:9
pix_amount width
Definition Widgets.h:63
virtual ~Widget()=default
pix_amount height
Definition Widgets.h:64
Callback cb
Definition Widgets.h:67
Widget(const Widget &)=delete
Window & window()
Definition Widgets.h:47
Widget & operator=(const Widget &)=delete
virtual void show()
Definition Widgets.h:43
Point loc
Definition Widgets.h:62
virtual void attach(Window &)=0
Fl_Widget * ptr_wid
Указатель на FLTK виджет
Definition Widgets.h:60
Definition Window.h:16
Definition Point.h:5
void(*)( void *, void *) Callback
Definition Widgets.h:12
W & reference_to(void *ptr_wid)
Definition Widgets.h:16
Definition Widgets.h:74
Button(Point _loc, pix_amount _width, pix_amount _height, const std::string &_label, Callback _cb)
Definition Widgets.h:75
void attach(Window &)
Definition Widgets.cpp:20
Definition Widgets.h:88
std::string get_string()
Definition Widgets.cpp:31
In_box(Point _loc, pix_amount _width, pix_amount _height, const std::string &s)
Definition Widgets.h:89
void attach(Window &win)
Definition Widgets.cpp:36
Definition Widgets.h:104
Out_box(Point _loc, pix_amount _width, pix_amount _height, const std::string &s)
Definition Widgets.h:105
void attach(Window &win)
Definition Widgets.cpp:49
void put(const std::string &)
Definition Widgets.cpp:45
Definition Point.h:7