I forget, what I changes

This commit is contained in:
doryan 2024-02-22 19:57:12 +04:00
parent 703292a799
commit db1de143d3
4 changed files with 139 additions and 125 deletions

View File

@ -1,8 +1,11 @@
use gtk4 as gtk; use gtk4 as gtk;
use gtk::*; use gtk::*;
use view::*;
use gtk::prelude::*; use gtk::prelude::*;
use crate::view::ui::ui;
#[path="utils/parsing_vector.rs"]
mod parsing;
#[path="ui_src/components/switch.rs"] #[path="ui_src/components/switch.rs"]
mod switch; mod switch;

View File

@ -8,6 +8,7 @@
pub mod hamming_code{ pub mod hamming_code{
use std::collections::HashMap; use std::collections::HashMap;
use crate::parsing::parsing::parse;
pub fn hamming_encrypt_data(data: &Vec<u8>, result_string: &mut String, length_of_code: usize) -> () { pub fn hamming_encrypt_data(data: &Vec<u8>, result_string: &mut String, length_of_code: usize) -> () {
let mut i : usize = length_of_code; let mut i : usize = length_of_code;
@ -81,11 +82,15 @@ pub mod hamming_code{
} }
}).collect(); }).collect();
let errored_code = parse(data_bits);
let correct_code = parse(correctly_code.as_slice());
let error = format!("Ошибка в коде {} {:?}, позиция ошибки {}, корректный код: {:?}; \n", let error = format!("Ошибка в коде {} {:?}, позиция ошибки {}, корректный код: {:?}; \n",
i / 7, i / 7,
&data_bits, errored_code,
error_position, error_position,
correctly_code correct_code
); );
errors.push_str(error.as_str()); errors.push_str(error.as_str());

View File

@ -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()
}
}

View File

@ -1,157 +1,154 @@
use gtk4 as gtk; pub mod ui {
use gtk4 as gtk;
use gtk::*; use gtk::*;
use gtk::prelude::*; use gtk::prelude::*;
use super::wrapper::*; use crate::controller::{BtnEventHandler, EventHandler, SwEventHandler};
use super::controller::*; use crate::parse_input::parse_input;
use super::parse_input::parse_input; use crate::properties::{Alignment, MarginData, Setters, TextViewSetters};
use super::state_controller::state_controller; use crate::state_controller::state_controller;
use super::properties::{MarginData, Setters, TextViewSetters, Alignment}; use crate::wrapper::Wrapper;
fn clearing(output : &TextView, input: &TextView){ pub fn laboratory_work_first_section(wrapper: &Box) -> (){
input.buffer().set_text("");
output.buffer().set_text(""); let header = Label::builder()
} .halign(Align::Start)
.label("Лабораторная работа №8: Код Хэмминга")
pub fn laboratory_work_first_section(wrapper: &Box) -> (){ .build();
let header = Label::builder() // input
.halign(Align::Start)
.label("Лабораторная работа №8: Код Хэмминга") let hamming_text_view_input_label = Label::builder()
.build(); .halign(Align::Start)
.set_margin(MarginData::MultipleMargin((10, 5, 0, 0)))
// input .label(String::from("Поле ввода для кода:"))
.build();
let hamming_text_view_input_label = Label::builder()
.halign(Align::Start) let hamming_text_view_input = TextView::builder()
.set_margin(MarginData::MultipleMargin((10, 5, 0, 0))) .monospace(true)
.label(String::from("Поле ввода для кода:")) .set_text_view_margin(MarginData::EqualsMargin(6))
.build(); .wrap_mode(WrapMode::Word)
.build();
let hamming_text_view_input = TextView::builder()
.monospace(true) let hamming_text_view_input_frame = Frame::builder()
.set_text_view_margin(MarginData::EqualsMargin(6)) .child(&hamming_text_view_input)
.wrap_mode(WrapMode::Word) .height_request(64)
.build(); .set_margin(MarginData::MultipleMargin((0, 5, 0, 5)))
.build();
let hamming_text_view_input_frame = Frame::builder()
.child(&hamming_text_view_input) // output
.height_request(64)
.set_margin(MarginData::MultipleMargin((0, 5, 0, 5))) let hamming_text_view_output_label = Label::builder()
.build(); .halign(Align::Start)
.set_margin(MarginData::MultipleMargin((10, 5, 0, 0)))
// output .label(String::from("Результат:"))
.build();
let hamming_text_view_output_label = Label::builder()
.halign(Align::Start) let hamming_text_view_output = TextView::builder()
.set_margin(MarginData::MultipleMargin((10, 5, 0, 0))) .monospace(true)
.label(String::from("Результат:")) .editable(false)
.build(); .set_text_view_margin(MarginData::EqualsMargin(6))
.wrap_mode(WrapMode::Word)
let hamming_text_view_output = TextView::builder() .build();
.monospace(true)
.editable(false) let hamming_text_view_output_frame = Frame::builder()
.set_text_view_margin(MarginData::EqualsMargin(6)) .child(&hamming_text_view_output)
.wrap_mode(WrapMode::Word) .height_request(64)
.build(); .set_margin(MarginData::MultipleMargin((0, 5, 0, 5)))
.build();
let hamming_text_view_output_frame = Frame::builder()
.child(&hamming_text_view_output) // interactive panel
.height_request(64)
.set_margin(MarginData::MultipleMargin((0, 5, 0, 5))) let hamming_crypt_button = Button::builder()
.build(); .set_align(Alignment::new(Align::Fill, Align::Fill))
.label("Выполнить")
// interactive panel .build();
let hamming_crypt_button = Button::builder() let crypt_mode_switch = Switch::new();
.set_align(Alignment::new(Align::Fill, Align::Fill))
.label("Выполнить") let crypt_mode_label = Label::builder()
.build(); .label("Режим: кодирование")
.build();
let crypt_mode_switch = Switch::new();
// references for binding actions
let crypt_mode_label = Label::builder()
.label("Режим: кодирование") let crypt_mode_label_to_handle = crypt_mode_label.clone();
.build(); let crypt_mode_switch_to_handle = crypt_mode_switch.clone();
let text_view_input_for_parse = hamming_text_view_input.clone();
// references for binding actions let text_view_output_for_output = hamming_text_view_output.clone();
let crypt_mode_label_to_handle = crypt_mode_label.clone(); // actions
let crypt_mode_switch_to_handle = crypt_mode_switch.clone();
let text_view_input_for_parse = hamming_text_view_input.clone(); EventHandler::new(
let text_view_output_for_output = hamming_text_view_output.clone(); hamming_crypt_button.clone(),
move |_| {
// actions parse_input(
&text_view_input_for_parse,
EventHandler::new( &text_view_output_for_output,
hamming_crypt_button.clone(), crypt_mode_switch_to_handle.state()
move |_| { )
parse_input( }).on_click();
&text_view_input_for_parse,
&text_view_output_for_output, EventHandler::new(
crypt_mode_switch_to_handle.state() crypt_mode_switch.clone(),
) move |s| {
}).on_click(); state_controller(s, &crypt_mode_label_to_handle);
}).on_toggle();
EventHandler::new(
crypt_mode_switch.clone(), // wrappers
move |s| {
state_controller(s, &crypt_mode_label_to_handle); let crypt_mode_wrapper = Wrapper::col_builder()
}).on_toggle(); .set_align(Alignment::new(Align::Fill, Align::Center))
.hexpand(true)
// wrappers .spacing(10)
.build();
let crypt_mode_wrapper = Wrapper::col_builder()
.set_align(Alignment::new(Align::Fill, Align::Center)) let interactive_components_wrapper = Wrapper::col_builder()
.hexpand(true) .set_align(Alignment::new(Align::Fill, Align::Fill))
.spacing(10) .set_margin(MarginData::MultipleMargin((0, 5, 0, 5)))
.build(); .spacing(10)
.build();
let interactive_components_wrapper = Wrapper::col_builder()
.set_align(Alignment::new(Align::Fill, Align::Fill)) // separators
.set_margin(MarginData::MultipleMargin((0, 5, 0, 5)))
.spacing(10) let separator = Separator::builder()
.build(); .orientation(Orientation::Horizontal)
.build();
// separators
crypt_mode_wrapper.append(&crypt_mode_switch);
let separator = Separator::builder() crypt_mode_wrapper.append(&crypt_mode_label);
.orientation(Orientation::Horizontal)
.build(); interactive_components_wrapper.append(&crypt_mode_wrapper);
interactive_components_wrapper.append(&hamming_crypt_button);
crypt_mode_wrapper.append(&crypt_mode_switch);
crypt_mode_wrapper.append(&crypt_mode_label); wrapper.append(&header);
wrapper.append(&hamming_text_view_input_label);
interactive_components_wrapper.append(&crypt_mode_wrapper); wrapper.append(&hamming_text_view_input_frame);
interactive_components_wrapper.append(&hamming_crypt_button); wrapper.append(&interactive_components_wrapper);
wrapper.append(&hamming_text_view_output_label);
wrapper.append(&header); wrapper.append(&hamming_text_view_output_frame);
wrapper.append(&hamming_text_view_input_label); wrapper.append(&separator);
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); pub fn ui(application: &Application) {
wrapper.append(&separator);
let mutual_wrapper = Wrapper::row_builder()
} .set_align(Alignment::new(Align::Fill, Align::Fill))
.set_margin(MarginData::EqualsMargin(15))
pub fn ui(application: &Application) { .spacing(10)
.build();
let mutual_wrapper = Wrapper::row_builder()
.set_align(Alignment::new(Align::Fill, Align::Fill)) laboratory_work_first_section(&mutual_wrapper);
.set_margin(MarginData::EqualsMargin(15))
.spacing(10) let window = ApplicationWindow::builder()
.build(); .title("Комплексная программа для лаб. работ")
.width_request(800)
laboratory_work_first_section(&mutual_wrapper); .height_request(400)
.application(application)
let window = ApplicationWindow::builder() .child(&mutual_wrapper)
.title("Комплексная программа для лаб. работ") .build();
.width_request(650)
.height_request(400) window.show();
.application(application) }
.child(&mutual_wrapper)
.build();
window.show();
} }