use gtk4 as gtk; use crate::{ controller::event_handlers::button_event_handlers::*, model::{builder_traits::Product, model::EventHandler}, view::{ components::{input::Input, wrapper::Wrapper}, properties::*, }, }; use gtk::{prelude::*, Align, WrapMode, *}; pub fn signal_reducing_page(wrapper: &Box) { let (input_height, monospace, input_alignment, input_wrapping): (i32, bool, Align, WrapMode) = (24, true, Align::Fill, WrapMode::Word); let input_label_alignment = Alignment { horizontal: Align::Start, vertical: Align::Fill, }; let wire_length_input = Input::builder() .set_label("l, м:") .set_margins(MarginData::EqualsMargin(5)) .set_align(input_label_alignment) .build(monospace, input_wrapping, input_height) .get(); let resistance_per_meter_input = Input::builder() .set_label("Rм, Ом:") .set_margins(MarginData::EqualsMargin(5)) .set_align(input_label_alignment) .build(monospace, input_wrapping, input_height) .get(); let capacity_per_meter_input = Input::builder() .set_label("Cм, пФ:") .set_margins(MarginData::EqualsMargin(5)) .set_align(input_label_alignment) .build(monospace, input_wrapping, input_height) .get(); let wrapper_first_row = Wrapper::col_builder() .halign(Align::Fill) .hexpand(true) .spacing(5) .build(); let first_row_elements: Vec<&Box> = vec![ &wire_length_input, &resistance_per_meter_input, &capacity_per_meter_input, ]; for elem in first_row_elements { elem.set_halign(input_alignment); elem.set_hexpand(true); wrapper_first_row.append(elem); } let info_signal_voltage_input = Input::builder() .set_label("Vи, мВ:") .set_margins(MarginData::EqualsMargin(5)) .set_align(input_label_alignment) .build(monospace, input_wrapping, input_height) .get(); let resistance_of_info_voltage_source_input = Input::builder() .set_label("Rи, Ом:") .set_margins(MarginData::EqualsMargin(5)) .set_align(input_label_alignment) .build(monospace, input_wrapping, input_height) .get(); let info_voltage_source_frequency_input = Input::builder() .set_label("f, мГц:") .set_margins(MarginData::EqualsMargin(5)) .set_align(input_label_alignment) .build(monospace, input_wrapping, input_height) .get(); let wrapper_second_row = Wrapper::col_builder() .halign(Align::Fill) .hexpand(true) .spacing(5) .build(); let second_row_elements: Vec<&Box> = vec![ &info_signal_voltage_input, &resistance_of_info_voltage_source_input, &info_voltage_source_frequency_input, ]; for elem in second_row_elements { elem.set_halign(input_alignment); elem.set_hexpand(true); wrapper_second_row.append(elem); } let main_wrapper = Wrapper::row_builder().spacing(5).build(); main_wrapper.append(&wrapper_first_row); main_wrapper.append(&wrapper_second_row); let calculate_button = Button::builder() .label("Расчитать") .halign(Align::End) .set_margin(MarginData::MultipleMargin((10, 5, 0, 0))) .build(); let table_header_labels = vec!["f, Гц", "Xc, пФ", "Vп, мВ", "ζ"]; let table_header = Wrapper::col_builder() .height_request(24) .spacing(5) .halign(Align::Center) .hexpand(true) .build(); for header_label in table_header_labels { let label = Label::builder() .label(header_label) .halign(Align::Fill) .hexpand(true) .build(); table_header.append(&label); } let table_of_calculated_values = Frame::builder() .height_request(64) .hexpand(true) .child(&table_header) .halign(Align::Fill) .set_margin(MarginData::MultipleMargin((10, 5, 0, 0))) .build(); EventHandler::new(calculate_button.clone(), move |_| { println!("button taped"); }) .on_click(); main_wrapper.append(&calculate_button); main_wrapper.append(&table_of_calculated_values); wrapper.append(&main_wrapper); }