Graphic Calculator: FIDocalcus
Проект трёх первокурсников (по инженерному практикуму в первом семестре) по созданию графического калькулятора на FLTK C++
Loading...
Searching...
No Matches
Graphix_window.h
Go to the documentation of this file.
1#pragma once
2
3// std libs
4#include <string>
5#include <vector>
6
7// Graph_lib
10#include "../Graph_lib/Window.h"
11
12// Graphix_calc
19
20// Backend
21#include "../../backend.h"
22
23/// @brief Окно, с полями для ввода мат. функций, возможностью построения их
24/// графиков на сист. коорд.
26 public:
28
29 /**
30 * @brief Инициализирует новый экземпляр Graphix_window
31 * @param left_corner: точка - левый верхний угол
32 * @param _width: ширина
33 * @param _height: высота
34 * @param title: заголовок
35 * @param _unit_intr: длина ед. отрезка
36 */
37 Graphix_window(Graph_lib::Point left_corner, pix_amount _width,
38 pix_amount _height, const std::string& title,
39 pix_amount _unit_intr);
40
41 // methods
42
43 /// @brief Запускает цикл ожидания нажатия кнопки и перерисовывает всё
44 void wait_for_button();
45
46 bool window_is_open() const { return !quit_button_pushed; }
47
48 private:
49 // vars
50
51 // other
52
53 /// @brief Длина единичного отрезка
54 double unit_intr;
55
56 /// @brief Начало координат
58
59 /// @brief Введенные пользователем строки
60 std::vector<std::string> inputed_strings;
61 /// @brief Введенные пользователем валидные мат. функции
62 std::vector<Math_func::function> inputed_funcs;
63
64 // shapes
65
66 /// @brief Горизонтальная ось
68 /// @brief Вертикальная ось
70
71 /// @brief Нарисованные пользователем графики мат. функций
72 std::vector<Graphix_calc::Segmented_graphix*> graphics;
73 /// @brief Нарисованные пользователем графики производных мат. функций
74 std::vector<Graphix_calc::Segmented_graphix*> derivs;
75
76 /// @brief Все особые точки графиков
77 std::vector<Graph_lib::Marks*> all_points;
78
79 /// @brief Линия - ограничитель системы координат от меню ввода
81
82 // widgets
83
84 /// @brief Кнопка увеличения масштаба
86 /// @brief Кнопка уменьшения масштаба
88 /// @brief Кнопка, изменяющая масштаб по введенному пользователем
90 /// @brief Поле для ввода пользовательского масштаба и вывода текущего
92
93 /// @brief Две кнопки, связанные с отображением особых точек графиков
95
96 /// @brief Создания нового поля для ввода мат. функции
98
99 /// @brief Поля для ввода мат. функций и кнопки по управлению их графиков
100 std::vector<Graphix_calc::Function_box*> enter_menu;
101
102 /// @brief Кнопка выхода из программы
104
105 // flags
106
107 bool is_points_visible{false};
108
111
112 // ~vars
113
114 // methods
115
116 /// @brief Инициализирует всё то, что не было проиниц. в конструкторах
117 void init() override;
118
119 /// @brief Привязывает к окну все проиниц. виджеты и фигуры
120 void initial_attach();
121
122 // callbacks
123
124 static void cb_incr_unit_intr(void*, void* widget); // incr_button
125 static void cb_decr_unit_intr(void*, void* widget); // decr_button
126 static void cb_change_unit_intr(void*, void* widget); // scale_button
127
128 static void cb_graphix_draw(
129 void*, void* widget); // enter_menu[i]->draw_graphix_button
130 static void cb_graphix_hide(
131 void*, void* widget); // enter_menu[i]->hide_graphix_button
132
133 static void cb_deriv_draw(void*,
134 void* widget); // enter_menu[i]->draw_deriv_button
135 static void cb_deriv_hide(void*,
136 void* widget); // enter_menu[i]->draw_deriv_button
137
138 static void cb_show_points(void*, void* widget); // point_box.show_button
139 static void cb_hide_points(void*, void* widget); // point_box.hide_button
140
141 static void cb_new_func(void*, void* widget); // new_func_button
142 static void cb_rem_func(void*,
143 void* widget); // enter_menu[i]->rem_func_button
144
145 static void cb_quit(void*, void* widget); // quit_button
146
147 // callback's voids
148
149 /// @brief Увеличивает значение ед. отрезка
150 void incr_unit_intr(); // cb_incr_unit_intr | update_unit_intr
151 /// @brief Уменьшает значение ед. отрезка
152 void decr_unit_intr(); // cb_decr_unit_intr | update_unit_intr
153 /// @brief Устанавливает пользовательский масштаб (длину ед. отрезка по нему)
154 void change_unit_intr(); // cb_change_unit_intr | update_unit_intr
155
156 /**
157 * @brief Рисует график мат. функции
158 * @param func_index: индекс мат. функции
159 */
160 void draw_graphix(size_t func_index); // cb_graphix_draw | update_graphix
161
162 /**
163 * @brief Скрывает график мат. функции (не удаляя его)
164 * @param func_index: индекс мат. функции
165 */
166 void hide_graphix(size_t func_index); // cb_graphix_hide | clear_graphix
167
168 /**
169 * @brief Рисует график производной мат. функции
170 * @param func_index: индекс мат. функции
171 */
172 void draw_deriv(size_t func_index); // cb_deriv_draw | update_deriv
173
174 /**
175 * @brief Скрывает график производной мат. функции (не удаляя его)
176 * @param func_index: индекс мат. функции
177 */
178 void hide_deriv(size_t func_index); // cb_deriv_hide | clear_deriv
179
180 /// @brief Отображает все особые точки графиков мат. функций
181 void show_points(); // cb_show_points | update_points
182 /// @brief Скрывает все особые точки графиков мат. функций (удаляя их)
183 void hide_points(); // cb_hide_points | clear_points
184
185 /// @brief Добавляет новый бокс для ввода мат. функции
186 void new_func_box(); // cb_new_func
187
188 /**
189 * @brief Удаляет бокс для ввода мат. функции
190 * @param func_index: индекс мат. функции
191 */
192 void rem_func_box(size_t func_index); // cb_rem_func
193
194 /// @brief Завершает работу окна
195 inline void quit() // cb_quit
196 {
197 Fl_Window::hide();
198
199 quit_button_pushed = true;
200 }
201
202 // updaters
203
204 /**
205 * @brief Обновляет значение единич. отрезка
206 * @param new_unit_intr: новое значение единич. отрезка
207 */
208 void update_unit_intr(double new_unit_intr);
209
210 /**
211 * @brief Обновляет введенную мат. функцию
212 * @param func_index: индекс мат. функции
213 * @param need_update_strings: факт необходимости обновления введ. строк
214 */
215 void update_inputed_func(size_t func_index, bool need_update_strings = true);
216
217 /// @brief Обновляет все введенные мат. функции
218 void fill_inputed_funcs();
219
220 /**
221 * @brief Обновляет график мат. функции
222 * @param func_index: индекс мат. функции
223 */
224 void update_graphix(size_t func_index);
225
226 /**
227 * @brief Удаляет график мат. функции
228 * @param func_index: индекс мат. функции
229 * @param need_delete: факт необходимости отчистки памяти
230 */
231 void clear_graphix(size_t func_index, bool need_delete = true);
232
233 /**
234 * @brief Обновляет график производной мат. функции
235 * @param func_index: индекс мат. функции
236 */
237 void update_deriv(size_t func_index);
238
239 /**
240 * @brief Удаляет график производной мат. функции
241 * @param func_index: индекс мат. функции
242 * @param need_delete: факт необходимости отчистки памяти
243 */
244 void clear_deriv(size_t func_index, bool need_delete = true);
245
246 /// @brief Обновляет особые точки графиков мат. функций
247 void update_points();
248
249 /// @brief Удаляет особые точки графиков мат. функций
250 void clear_points();
251
252 // ~methods
253};
unsigned int pix_amount
Definition Point.h:3
Простая линяя, сост. из двух точек
Definition Shapes.h:223
Definition Window.h:16
Фигура, представляющая собой мат. ось координат
Definition Axis.h:12
Класс поля, которое представляем собой и ввод и вывод
Definition Bothput_box.h:14
Definition Point_box.h:9
Окно, с полями для ввода мат. функций, возможностью построения их графиков на сист....
Definition Graphix_window.h:25
static void cb_deriv_hide(void *, void *widget)
Definition Graphix_window_callbacks.cpp:78
void update_graphix(size_t func_index)
Обновляет график мат. функции
Definition Graphix_window_updaters.cpp:129
void update_points()
Обновляет особые точки графиков мат. функций
Definition Graphix_window_updaters.cpp:215
std::vector< Graphix_calc::Segmented_graphix * > derivs
Нарисованные пользователем графики производных мат. функций
Definition Graphix_window.h:74
void quit()
Завершает работу окна
Definition Graphix_window.h:195
bool quit_button_pushed
Definition Graphix_window.h:110
void rem_func_box(size_t func_index)
Удаляет бокс для ввода мат. функции
Definition Graphix_window_callbacks.cpp:236
Graph_lib::Button incr_button
Кнопка увеличения масштаба
Definition Graphix_window.h:85
bool some_button_pushed
Definition Graphix_window.h:109
void new_func_box()
Добавляет новый бокс для ввода мат. функции
Definition Graphix_window_callbacks.cpp:205
Graph_lib::Button decr_button
Кнопка уменьшения масштаба
Definition Graphix_window.h:87
void init() override
Инициализирует всё то, что не было проиниц. в конструкторах
Definition Graphix_window_init.cpp:79
std::vector< Graphix_calc::Segmented_graphix * > graphics
Нарисованные пользователем графики мат. функций
Definition Graphix_window.h:72
void hide_deriv(size_t func_index)
Скрывает график производной мат. функции (не удаляя его)
Definition Graphix_window_callbacks.cpp:174
bool window_is_open() const
Definition Graphix_window.h:46
static void cb_deriv_draw(void *, void *widget)
Definition Graphix_window_callbacks.cpp:73
static void cb_hide_points(void *, void *widget)
Definition Graphix_window_callbacks.cpp:88
static void cb_rem_func(void *, void *widget)
Definition Graphix_window_callbacks.cpp:98
void draw_deriv(size_t func_index)
Рисует график производной мат. функции
Definition Graphix_window_callbacks.cpp:159
void draw_graphix(size_t func_index)
Рисует график мат. функции
Definition Graphix_window_callbacks.cpp:140
void wait_for_button()
Запускает цикл ожидания нажатия кнопки и перерисовывает всё
Definition Graphix_window_callbacks.cpp:28
void decr_unit_intr()
Уменьшает значение ед. отрезка
Definition Graphix_window_callbacks.cpp:118
Graph_lib::Button quit_button
Кнопка выхода из программы
Definition Graphix_window.h:103
Graph_lib::Point origin
Начало координат
Definition Graphix_window.h:57
std::vector< std::string > inputed_strings
Введенные пользователем строки
Definition Graphix_window.h:60
void clear_points()
Удаляет особые точки графиков мат. функций
Definition Graphix_window_updaters.cpp:305
static void cb_graphix_draw(void *, void *widget)
Definition Graphix_window_callbacks.cpp:63
Graph_lib::Button new_func_button
Создания нового поля для ввода мат. функции
Definition Graphix_window.h:97
bool is_points_visible
Definition Graphix_window.h:107
Graphix_calc::Point_box point_box
Две кнопки, связанные с отображением особых точек графиков
Definition Graphix_window.h:94
void hide_points()
Скрывает все особые точки графиков мат. функций (удаляя их)
Definition Graphix_window_callbacks.cpp:196
static void cb_quit(void *, void *widget)
Definition Graphix_window_callbacks.cpp:103
static void cb_new_func(void *, void *widget)
Definition Graphix_window_callbacks.cpp:93
static void cb_graphix_hide(void *, void *widget)
Definition Graphix_window_callbacks.cpp:68
void clear_graphix(size_t func_index, bool need_delete=true)
Удаляет график мат. функции
Definition Graphix_window_updaters.cpp:166
Graph_lib::Button scale_button
Кнопка, изменяющая масштаб по введенному пользователем
Definition Graphix_window.h:89
Graphix_calc::Axis * y_axis
Вертикальная ось
Definition Graphix_window.h:69
Graph_lib::Line border
Линия - ограничитель системы координат от меню ввода
Definition Graphix_window.h:80
std::vector< Math_func::function > inputed_funcs
Введенные пользователем валидные мат. функции
Definition Graphix_window.h:62
void update_deriv(size_t func_index)
Обновляет график производной мат. функции
Definition Graphix_window_updaters.cpp:177
void clear_deriv(size_t func_index, bool need_delete=true)
Удаляет график производной мат. функции
Definition Graphix_window_updaters.cpp:204
void update_inputed_func(size_t func_index, bool need_update_strings=true)
Обновляет введенную мат. функцию
Definition Graphix_window_updaters.cpp:64
void incr_unit_intr()
Увеличивает значение ед. отрезка
Definition Graphix_window_callbacks.cpp:110
double unit_intr
Длина единичного отрезка
Definition Graphix_window.h:54
std::vector< Graphix_calc::Function_box * > enter_menu
Поля для ввода мат. функций и кнопки по управлению их графиков
Definition Graphix_window.h:100
void fill_inputed_funcs()
Обновляет все введенные мат. функции
Definition Graphix_window_updaters.cpp:124
void initial_attach()
Привязывает к окну все проиниц. виджеты и фигуры
Definition Graphix_window_init.cpp:123
Graphix_calc::Bothput_box scale_box
Поле для ввода пользовательского масштаба и вывода текущего
Definition Graphix_window.h:91
Graphix_calc::Axis * x_axis
Горизонтальная ось
Definition Graphix_window.h:67
static void cb_incr_unit_intr(void *, void *widget)
Definition Graphix_window_callbacks.cpp:48
static void cb_decr_unit_intr(void *, void *widget)
Definition Graphix_window_callbacks.cpp:53
std::vector< Graph_lib::Marks * > all_points
Все особые точки графиков
Definition Graphix_window.h:77
static void cb_change_unit_intr(void *, void *widget)
Definition Graphix_window_callbacks.cpp:58
void hide_graphix(size_t func_index)
Скрывает график мат. функции (не удаляя его)
Definition Graphix_window_callbacks.cpp:149
static void cb_show_points(void *, void *widget)
Definition Graphix_window_callbacks.cpp:83
Graphix_window()
Definition Graphix_window_init.cpp:21
void show_points()
Отображает все особые точки графиков мат. функций
Definition Graphix_window_callbacks.cpp:187
void change_unit_intr()
Устанавливает пользовательский масштаб (длину ед. отрезка по нему)
Definition Graphix_window_callbacks.cpp:126
void update_unit_intr(double new_unit_intr)
Обновляет значение единич. отрезка
Definition Graphix_window_updaters.cpp:22
Definition Widgets.h:74
Definition Point.h:7