1extern crate fltk;
2extern crate fltk_calendar;
3
4use crate::{
5 books::{book_sys::BookSystem, date::Date, genres::Genres},
6 change::{input1::Input1, Inputable},
7 reading::read_base::ReaderBase,
8 restore::caretaker::Caretaker,
9 Lang,
10};
11
12use fltk::{app, app::App, dialog::alert, input::Input, prelude::*};
13use fltk_calendar::calendar::Calendar;
14
15#[inline]
19pub(crate) fn change_name_simple(
20 ind: usize,
21 reader_base: &mut ReaderBase,
22 book_system: &mut BookSystem,
23 genres: &Genres,
24 caretaker: &mut Caretaker,
25 app: &App,
26 lang: Lang,
27) -> Option<String> {
28 let (s3, r3) = app::channel();
29 let mut get_name = Input1::<Input>::new(
30 match lang {
31 Lang::English => "New Name",
32 Lang::Russian => "Новое Имя",
33 },
34 match lang {
35 Lang::English => "New Name",
36 Lang::Russian => "Новое Имя",
37 },
38 );
39
40 caretaker.add_memento(reader_base, book_system, genres);
41
42 get_name.show();
43 (*get_name.ok).borrow_mut().emit(s3, true);
44
45 while app.wait() {
46 if let Some(mes) = r3.recv() {
47 if mes {
48 get_name.hide();
49
50 if let Ok(new_name) = get_name.set_input(lang) {
51 return match reader_base
52 .change_name(ind, unsafe { new_name.get_unchecked(0).clone() })
53 {
54 Ok(_) => {
55 fltk::dialog::message(
56 500,
57 500,
58 match lang {
59 Lang::English => "Successfully changed",
60 Lang::Russian => "Успешно изменено",
61 },
62 );
63
64 reader_base.save();
65 book_system.save();
66 Some(unsafe { new_name.get_unchecked(0).clone() })
67 }
68
69 Err(0) => {
70 alert(
71 500,
72 500,
73 match lang {
74 Lang::English => "Reader is not found",
75 Lang::Russian => "Читатель не найден",
76 },
77 );
78 caretaker.pop().unwrap();
79 None
80 }
81
82 Err(1) => {
83 alert(
84 500,
85 500,
86 match lang {
87 Lang::English => "Reader with same parameters already exists",
88 Lang::Russian => {
89 "Читатель с предложенными параметрами уже существует"
90 }
91 },
92 );
93 caretaker.pop().unwrap();
94 None
95 }
96
97 Err(_) => {
98 alert(
99 500,
100 500,
101 match lang {
102 Lang::English => "'New name' is empty",
103 Lang::Russian => "'Новое имя' пусто",
104 },
105 );
106 caretaker.pop().unwrap();
107 None
108 }
109 };
110 }
111 }
112 break;
113 } else if !get_name.shown() {
114 caretaker.pop().unwrap();
115 return None;
116 }
117 }
118
119 None
120}
121
122#[inline]
126pub(crate) fn change_family_simple(
127 ind: usize,
128 reader_base: &mut ReaderBase,
129 book_system: &mut BookSystem,
130 genres: &Genres,
131 caretaker: &mut Caretaker,
132 app: &App,
133 lang: Lang,
134) -> Option<String> {
135 let (s3, r3) = app::channel();
136 let mut get_family = Input1::<Input>::new(
137 match lang {
138 Lang::English => "'New 2-nd Name",
139 Lang::Russian => "Новая Фамилия",
140 },
141 match lang {
142 Lang::English => "'New 2-nd Name",
143 Lang::Russian => "Новая Фамилия",
144 },
145 );
146
147 caretaker.add_memento(reader_base, book_system, genres);
148
149 get_family.show();
150 (*get_family.ok).borrow_mut().emit(s3, true);
151
152 while app.wait() {
153 if let Some(mes) = r3.recv() {
154 if mes {
155 get_family.hide();
156
157 if let Ok(new_family) = get_family.set_input(lang) {
158 return match reader_base
159 .change_family(ind, unsafe { new_family.get_unchecked(0).clone() })
160 {
161 Ok(_) => {
162 fltk::dialog::message(
163 500,
164 500,
165 match lang {
166 Lang::English => "Successfully changed",
167 Lang::Russian => "Успешно изменено",
168 },
169 );
170
171 reader_base.save();
172 book_system.save();
173
174 Some(unsafe { new_family.get_unchecked(0).clone() })
175 }
176
177 Err(0) => {
178 alert(
179 500,
180 500,
181 match lang {
182 Lang::English => "Reader is not found",
183 Lang::Russian => "Читатель не найден",
184 },
185 );
186 caretaker.pop().unwrap();
187 None
188 }
189
190 Err(1) => {
191 alert(
192 500,
193 500,
194 match lang {
195 Lang::English => "Reader with same parameters already exists",
196 Lang::Russian => {
197 "Читатель с предложенными параметрами уже существует"
198 }
199 },
200 );
201 caretaker.pop().unwrap();
202 None
203 }
204
205 Err(_) => {
206 alert(
207 500,
208 500,
209 match lang {
210 Lang::English => "'New 2-nd Name' is empty",
211 Lang::Russian => "'Новая Фамилия' пусто",
212 },
213 );
214 caretaker.pop().unwrap();
215 None
216 }
217 };
218 }
219 }
220 break;
221 } else if !get_family.shown() {
222 caretaker.pop().unwrap();
223 return None;
224 }
225 }
226
227 None
228}
229
230#[inline]
233pub(crate) fn change_father_simple(
234 ind: usize,
235 reader_base: &mut ReaderBase,
236 book_system: &mut BookSystem,
237 genres: &Genres,
238 caretaker: &mut Caretaker,
239 app: &App,
240 lang: Lang,
241) -> Option<String> {
242 let (s3, r3) = app::channel();
243 let mut get_father = Input1::<Input>::new(
244 match lang {
245 Lang::English => "New Middle Name",
246 Lang::Russian => "Новое Отчество",
247 },
248 match lang {
249 Lang::English => "New Middle Name",
250 Lang::Russian => "Новое Отчество",
251 },
252 );
253
254 caretaker.add_memento(reader_base, book_system, genres);
255
256 get_father.show();
257 (*get_father.ok).borrow_mut().emit(s3, true);
258
259 while app.wait() {
260 if let Some(mes) = r3.recv() {
261 if mes {
262 get_father.hide();
263
264 if let Ok(new_father) = get_father.set_input(lang) {
265 return match reader_base
266 .change_father(ind, unsafe { new_father.get_unchecked(0).clone() })
267 {
268 Ok(_) => {
269 fltk::dialog::message(
270 500,
271 500,
272 match lang {
273 Lang::English => "Successfully changed",
274 Lang::Russian => "Успешно изменено",
275 },
276 );
277
278 reader_base.save();
279 book_system.save();
280 Some(unsafe { new_father.get_unchecked(0).clone() })
281 }
282
283 Err(0) => {
284 alert(
285 500,
286 500,
287 match lang {
288 Lang::English => "Reader is not found",
289 Lang::Russian => "Читатель не найден",
290 },
291 );
292 caretaker.pop().unwrap();
293 None
294 }
295
296 Err(1) => {
297 alert(
298 500,
299 500,
300 match lang {
301 Lang::English => "Reader with same parameters already exists",
302 Lang::Russian => {
303 "Читатель с предложенными параметрами уже существует"
304 }
305 },
306 );
307 caretaker.pop().unwrap();
308 None
309 }
310
311 Err(_) => {
312 alert(
313 500,
314 500,
315 match lang {
316 Lang::English => "'New Mid. Name' is empty",
317 Lang::Russian => "'Новое Отчество' пусто",
318 },
319 );
320 caretaker.pop().unwrap();
321 None
322 }
323 };
324 }
325 }
326 break;
327 } else if !get_father.shown() {
328 caretaker.pop().unwrap();
329 return None;
330 }
331 }
332
333 None
334}
335
336#[inline]
339pub(crate) fn change_info_simple(
340 ind: usize,
341 reader_base: &mut ReaderBase,
342 book_system: &mut BookSystem,
343 genres: &Genres,
344 caretaker: &mut Caretaker,
345 app: &App,
346 lang: Lang,
347) -> Option<String> {
348 let (s3, r3) = app::channel();
349 let mut get_info = Input1::<Input>::new(
350 match lang {
351 Lang::English => "New Info (< 50 symb)",
352 Lang::Russian => "Инфо (< 50 симв.)",
353 },
354 match lang {
355 Lang::English => "New Info (< 50 symb)",
356 Lang::Russian => "Инфо (< 50 симв.)",
357 },
358 );
359
360 caretaker.add_memento(reader_base, book_system, genres);
361
362 get_info.show();
363 (*get_info.ok).borrow_mut().emit(s3, true);
364
365 while app.wait() {
366 if let Some(mes) = r3.recv() {
367 if mes {
368 get_info.hide();
369
370 if let Ok(new_info) = get_info.set_input(lang) {
371 return match reader_base
372 .change_info(ind, unsafe { new_info.get_unchecked(0).clone() })
373 {
374 Ok(_) => {
375 fltk::dialog::message(
376 500,
377 500,
378 match lang {
379 Lang::English => "Successfully changed",
380 Lang::Russian => "Успешно изменено",
381 },
382 );
383
384 reader_base.save();
385 book_system.save();
386 Some(unsafe { new_info.get_unchecked(0).clone() })
387 }
388
389 Err(0) => {
390 alert(
391 500,
392 500,
393 match lang {
394 Lang::English => "Reader is not found",
395 Lang::Russian => "Читатель не найден",
396 },
397 );
398 caretaker.pop().unwrap();
399 None
400 }
401
402 Err(_) => {
403 alert(
404 500,
405 500,
406 match lang {
407 Lang::English => "'New Info' is empty",
408 Lang::Russian => "'Инфо' пусто",
409 },
410 );
411 caretaker.pop().unwrap();
412 None
413 }
414 };
415 }
416 }
417 break;
418 } else if !get_info.shown() {
419 caretaker.pop().unwrap();
420 return None;
421 }
422 }
423
424 None
425}
426
427#[inline]
431pub(crate) fn change_age_simple(
432 ind: usize,
433 reader_base: &mut ReaderBase,
434 book_system: &mut BookSystem,
435 genres: &Genres,
436 caretaker: &mut Caretaker,
437 app: &App,
438 lang: Lang,
439) -> Option<u16> {
440 caretaker.add_memento(reader_base, book_system, genres);
441
442 let mut win = fltk::window::SingleWindow::new(800, 500, 250, 100, "Choose new birth date");
443
444 let _ = fltk::frame::Frame::new(
445 50,
446 10,
447 150,
448 50,
449 match lang {
450 Lang::English => "Choose new birth date",
451 Lang::Russian => "Выберите новую дату рождения",
452 },
453 );
454
455 let mut but = fltk::button::Button::new(
456 80,
457 60,
458 60,
459 20,
460 match lang {
461 Lang::English => "OK",
462 Lang::Russian => "ОК",
463 },
464 );
465
466 win.end();
467 win.show();
468
469 let (sd, rd) = app::channel();
470 but.emit(sd, true);
471
472 while app.wait() {
473 if let Some(msg) = rd.recv() {
474 if msg {
475 win.hide();
476
477 return match Calendar::default().get_date() {
478 Some(date) => match reader_base.change_age(ind, Date::from(date)) {
479 Ok(_) => {
480 fltk::dialog::message(
481 500,
482 500,
483 match lang {
484 Lang::English => "Successfully changed",
485 Lang::Russian => "Успешно изменено",
486 },
487 );
488
489 reader_base.save();
490 book_system.save();
491
492 unsafe {
493 Some((**reader_base.readers.get_unchecked(ind)).borrow().age())
494 }
495 }
496
497 Err(0) => {
498 alert(
499 500,
500 500,
501 match lang {
502 Lang::English => "Reader isn't found",
503 Lang::Russian => "Читатель не найден",
504 },
505 );
506 caretaker.pop().unwrap();
507 None
508 }
509
510 Err(_) => {
511 alert(
512 500,
513 500,
514 match lang {
515 Lang::English => "Reader with same parameters already exists",
516 Lang::Russian => {
517 "Читатель с предложенными параметрами уже существует"
518 }
519 },
520 );
521 caretaker.pop().unwrap();
522 None
523 }
524 },
525
526 None => {
527 alert(
528 500,
529 500,
530 match lang {
531 Lang::English => "Date wasn't selected",
532 Lang::Russian => "Дата не была выбрана",
533 },
534 );
535 None
536 }
537 };
538 }
539 break;
540 } else if !win.shown() {
541 return None;
542 }
543 }
544
545 None
546}