From db1de143d3f8862aa88ef65ab9bead7e07c7e48b Mon Sep 17 00:00:00 2001 From: doryan Date: Thu, 22 Feb 2024 19:57:12 +0400 Subject: [PATCH] I forget, what I changes --- src/main.rs | 5 +- .../hamming_code_seven_four.rs | 9 +- src/utils/parsing_vector.rs | 9 + src/view.rs | 241 +++++++++--------- 4 files changed, 139 insertions(+), 125 deletions(-) create mode 100644 src/utils/parsing_vector.rs diff --git a/src/main.rs b/src/main.rs index d520a8d..362cea2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,11 @@ use gtk4 as gtk; use gtk::*; -use view::*; use gtk::prelude::*; +use crate::view::ui::ui; + +#[path="utils/parsing_vector.rs"] +mod parsing; #[path="ui_src/components/switch.rs"] mod switch; diff --git a/src/utils/hamming_code_utils/hamming_code_seven_four.rs b/src/utils/hamming_code_utils/hamming_code_seven_four.rs index 59231c3..5cb52d2 100644 --- a/src/utils/hamming_code_utils/hamming_code_seven_four.rs +++ b/src/utils/hamming_code_utils/hamming_code_seven_four.rs @@ -8,6 +8,7 @@ pub mod hamming_code{ use std::collections::HashMap; + use crate::parsing::parsing::parse; pub fn hamming_encrypt_data(data: &Vec, result_string: &mut String, length_of_code: usize) -> () { let mut i : usize = length_of_code; @@ -81,11 +82,15 @@ pub mod hamming_code{ } }).collect(); + let errored_code = parse(data_bits); + + let correct_code = parse(correctly_code.as_slice()); + let error = format!("Ошибка в коде {} {:?}, позиция ошибки {}, корректный код: {:?}; \n", i / 7, - &data_bits, + errored_code, error_position, - correctly_code + correct_code ); errors.push_str(error.as_str()); diff --git a/src/utils/parsing_vector.rs b/src/utils/parsing_vector.rs new file mode 100644 index 0000000..2c0d72d --- /dev/null +++ b/src/utils/parsing_vector.rs @@ -0,0 +1,9 @@ +pub mod parsing{ + pub fn parse(slice : &[u8]) -> String { + slice + .iter() + .map(|bit| bit.to_string()) + .reduce(|accumulator, element| accumulator + &*element) + .unwrap() + } +} diff --git a/src/view.rs b/src/view.rs index 57a560c..2b07a1c 100644 --- a/src/view.rs +++ b/src/view.rs @@ -1,157 +1,154 @@ -use gtk4 as gtk; +pub mod ui { + use gtk4 as gtk; -use gtk::*; -use gtk::prelude::*; -use super::wrapper::*; -use super::controller::*; -use super::parse_input::parse_input; -use super::state_controller::state_controller; -use super::properties::{MarginData, Setters, TextViewSetters, Alignment}; + use gtk::*; + use gtk::prelude::*; + use crate::controller::{BtnEventHandler, EventHandler, SwEventHandler}; + use crate::parse_input::parse_input; + use crate::properties::{Alignment, MarginData, Setters, TextViewSetters}; + use crate::state_controller::state_controller; + use crate::wrapper::Wrapper; -fn clearing(output : &TextView, input: &TextView){ - input.buffer().set_text(""); - output.buffer().set_text(""); -} + pub fn laboratory_work_first_section(wrapper: &Box) -> (){ -pub fn laboratory_work_first_section(wrapper: &Box) -> (){ + let header = Label::builder() + .halign(Align::Start) + .label("Лабораторная работа №8: Код Хэмминга") + .build(); - let header = Label::builder() - .halign(Align::Start) - .label("Лабораторная работа №8: Код Хэмминга") - .build(); + // input - // input + let hamming_text_view_input_label = Label::builder() + .halign(Align::Start) + .set_margin(MarginData::MultipleMargin((10, 5, 0, 0))) + .label(String::from("Поле ввода для кода:")) + .build(); - let hamming_text_view_input_label = Label::builder() - .halign(Align::Start) - .set_margin(MarginData::MultipleMargin((10, 5, 0, 0))) - .label(String::from("Поле ввода для кода:")) - .build(); + let hamming_text_view_input = TextView::builder() + .monospace(true) + .set_text_view_margin(MarginData::EqualsMargin(6)) + .wrap_mode(WrapMode::Word) + .build(); - let hamming_text_view_input = TextView::builder() - .monospace(true) - .set_text_view_margin(MarginData::EqualsMargin(6)) - .wrap_mode(WrapMode::Word) - .build(); + let hamming_text_view_input_frame = Frame::builder() + .child(&hamming_text_view_input) + .height_request(64) + .set_margin(MarginData::MultipleMargin((0, 5, 0, 5))) + .build(); - let hamming_text_view_input_frame = Frame::builder() - .child(&hamming_text_view_input) - .height_request(64) - .set_margin(MarginData::MultipleMargin((0, 5, 0, 5))) - .build(); + // output - // output + let hamming_text_view_output_label = Label::builder() + .halign(Align::Start) + .set_margin(MarginData::MultipleMargin((10, 5, 0, 0))) + .label(String::from("Результат:")) + .build(); - let hamming_text_view_output_label = Label::builder() - .halign(Align::Start) - .set_margin(MarginData::MultipleMargin((10, 5, 0, 0))) - .label(String::from("Результат:")) - .build(); + let hamming_text_view_output = TextView::builder() + .monospace(true) + .editable(false) + .set_text_view_margin(MarginData::EqualsMargin(6)) + .wrap_mode(WrapMode::Word) + .build(); - let hamming_text_view_output = TextView::builder() - .monospace(true) - .editable(false) - .set_text_view_margin(MarginData::EqualsMargin(6)) - .wrap_mode(WrapMode::Word) - .build(); + let hamming_text_view_output_frame = Frame::builder() + .child(&hamming_text_view_output) + .height_request(64) + .set_margin(MarginData::MultipleMargin((0, 5, 0, 5))) + .build(); - let hamming_text_view_output_frame = Frame::builder() - .child(&hamming_text_view_output) - .height_request(64) - .set_margin(MarginData::MultipleMargin((0, 5, 0, 5))) - .build(); + // interactive panel - // interactive panel + let hamming_crypt_button = Button::builder() + .set_align(Alignment::new(Align::Fill, Align::Fill)) + .label("Выполнить") + .build(); - let hamming_crypt_button = Button::builder() - .set_align(Alignment::new(Align::Fill, Align::Fill)) - .label("Выполнить") - .build(); + let crypt_mode_switch = Switch::new(); - let crypt_mode_switch = Switch::new(); + let crypt_mode_label = Label::builder() + .label("Режим: кодирование") + .build(); - let crypt_mode_label = Label::builder() - .label("Режим: кодирование") - .build(); + // references for binding actions - // references for binding actions + let crypt_mode_label_to_handle = crypt_mode_label.clone(); + let crypt_mode_switch_to_handle = crypt_mode_switch.clone(); + let text_view_input_for_parse = hamming_text_view_input.clone(); + let text_view_output_for_output = hamming_text_view_output.clone(); - let crypt_mode_label_to_handle = crypt_mode_label.clone(); - let crypt_mode_switch_to_handle = crypt_mode_switch.clone(); - let text_view_input_for_parse = hamming_text_view_input.clone(); - let text_view_output_for_output = hamming_text_view_output.clone(); + // actions - // actions + EventHandler::new( + hamming_crypt_button.clone(), + move |_| { + parse_input( + &text_view_input_for_parse, + &text_view_output_for_output, + crypt_mode_switch_to_handle.state() + ) + }).on_click(); - EventHandler::new( - hamming_crypt_button.clone(), - move |_| { - parse_input( - &text_view_input_for_parse, - &text_view_output_for_output, - crypt_mode_switch_to_handle.state() - ) - }).on_click(); + EventHandler::new( + crypt_mode_switch.clone(), + move |s| { + state_controller(s, &crypt_mode_label_to_handle); + }).on_toggle(); - EventHandler::new( - crypt_mode_switch.clone(), - move |s| { - state_controller(s, &crypt_mode_label_to_handle); - }).on_toggle(); + // wrappers - // wrappers + let crypt_mode_wrapper = Wrapper::col_builder() + .set_align(Alignment::new(Align::Fill, Align::Center)) + .hexpand(true) + .spacing(10) + .build(); - let crypt_mode_wrapper = Wrapper::col_builder() - .set_align(Alignment::new(Align::Fill, Align::Center)) - .hexpand(true) - .spacing(10) - .build(); + let interactive_components_wrapper = Wrapper::col_builder() + .set_align(Alignment::new(Align::Fill, Align::Fill)) + .set_margin(MarginData::MultipleMargin((0, 5, 0, 5))) + .spacing(10) + .build(); - let interactive_components_wrapper = Wrapper::col_builder() - .set_align(Alignment::new(Align::Fill, Align::Fill)) - .set_margin(MarginData::MultipleMargin((0, 5, 0, 5))) - .spacing(10) - .build(); + // separators - // separators + let separator = Separator::builder() + .orientation(Orientation::Horizontal) + .build(); - let separator = Separator::builder() - .orientation(Orientation::Horizontal) - .build(); + crypt_mode_wrapper.append(&crypt_mode_switch); + crypt_mode_wrapper.append(&crypt_mode_label); - crypt_mode_wrapper.append(&crypt_mode_switch); - crypt_mode_wrapper.append(&crypt_mode_label); + interactive_components_wrapper.append(&crypt_mode_wrapper); + interactive_components_wrapper.append(&hamming_crypt_button); - interactive_components_wrapper.append(&crypt_mode_wrapper); - interactive_components_wrapper.append(&hamming_crypt_button); + wrapper.append(&header); + wrapper.append(&hamming_text_view_input_label); + wrapper.append(&hamming_text_view_input_frame); + wrapper.append(&interactive_components_wrapper); + wrapper.append(&hamming_text_view_output_label); + wrapper.append(&hamming_text_view_output_frame); + wrapper.append(&separator); - wrapper.append(&header); - wrapper.append(&hamming_text_view_input_label); - wrapper.append(&hamming_text_view_input_frame); - wrapper.append(&interactive_components_wrapper); - wrapper.append(&hamming_text_view_output_label); - wrapper.append(&hamming_text_view_output_frame); - wrapper.append(&separator); + } -} + pub fn ui(application: &Application) { -pub fn ui(application: &Application) { + let mutual_wrapper = Wrapper::row_builder() + .set_align(Alignment::new(Align::Fill, Align::Fill)) + .set_margin(MarginData::EqualsMargin(15)) + .spacing(10) + .build(); - let mutual_wrapper = Wrapper::row_builder() - .set_align(Alignment::new(Align::Fill, Align::Fill)) - .set_margin(MarginData::EqualsMargin(15)) - .spacing(10) - .build(); + laboratory_work_first_section(&mutual_wrapper); - laboratory_work_first_section(&mutual_wrapper); + let window = ApplicationWindow::builder() + .title("Комплексная программа для лаб. работ") + .width_request(800) + .height_request(400) + .application(application) + .child(&mutual_wrapper) + .build(); - let window = ApplicationWindow::builder() - .title("Комплексная программа для лаб. работ") - .width_request(650) - .height_request(400) - .application(application) - .child(&mutual_wrapper) - .build(); - - window.show(); + window.show(); + } } \ No newline at end of file