From 7c16964b83b1ad0171371b3e3555122469d9bad1 Mon Sep 17 00:00:00 2001 From: doryan Date: Fri, 19 Apr 2024 12:03:16 +0400 Subject: [PATCH] added table and it needed to fix --- .../view_utils/signal_reduce_input_utils.rs | 62 +++++++++++++++++- src/view/pages/signal_reducing.rs | 65 ++++++++++++++++--- 2 files changed, 117 insertions(+), 10 deletions(-) diff --git a/src/controller/view_utils/signal_reduce_input_utils.rs b/src/controller/view_utils/signal_reduce_input_utils.rs index 31d2a18..214790b 100644 --- a/src/controller/view_utils/signal_reduce_input_utils.rs +++ b/src/controller/view_utils/signal_reduce_input_utils.rs @@ -1,5 +1,6 @@ use gtk4 as gtk; +use crate::controller::model_utils::signal_reducer::*; use crate::model::model::SchemeCharacteristics; use gtk::{prelude::*, *}; @@ -38,7 +39,12 @@ pub fn check_characteristics( } } -pub fn start_algorithm(error_log_label: &Label, raw_characteristics: &Vec) { +pub fn start_algorithm( + error_log_label: &Label, + raw_characteristics: &Vec, + table: &Frame, + header: &ListBoxRow, +) { let mut all_inputs_data: Vec = Vec::new(); let mut output: String = String::new(); @@ -47,6 +53,10 @@ pub fn start_algorithm(error_log_label: &Label, raw_characteristics: &Vec = vec![f as usize, 1usize]; frequencies.append(&mut (0..100).step_by(5).collect()); + + for i in frequencies { + if i == 0 { + continue; + } + + let table_row = ListBoxRow::new(); + + let columns = ColumnView::builder().reorderable(false).build(); + + let frequency_column = ColumnViewColumn::builder() + .title(format!("{i}")) + .fixed_width(200) + .expand(true) + .build(); + + let Xc: f64 = reactive_resistance_of_capacitor(Cm, L, f); + let Z: f64 = full_resistance_of_capacitor(Xc, Vs, Rm, L); + let V: f64 = voltage_from_signal_source(Vs, Xc, Z); + let xi: f64 = coef_of_signal_reduce(Vs, V); + + let reactive_resistance_column = ColumnViewColumn::builder() + .title(format!("{:?}", Xc)) + .fixed_width(200) + .expand(true) + .build(); + + let voltage_column = ColumnViewColumn::builder() + .title(format!("{:?}", V)) + .fixed_width(200) + .expand(true) + .build(); + + let coef_column = ColumnViewColumn::builder() + .title(format!("{:?}", xi)) + .fixed_width(200) + .expand(true) + .build(); + + columns.append_column(&frequency_column); + columns.append_column(&reactive_resistance_column); + columns.append_column(&voltage_column); + columns.append_column(&coef_column); + + table_row.set_child(Some(&columns)); + + new_table.append(&table_row); + + table.set_child(Some(&new_table)); + } } } diff --git a/src/view/pages/signal_reducing.rs b/src/view/pages/signal_reducing.rs index 85aad95..2489507 100644 --- a/src/view/pages/signal_reducing.rs +++ b/src/view/pages/signal_reducing.rs @@ -2,17 +2,17 @@ use gtk4 as gtk; use crate::{ controller::event_handlers::button_event_handlers::*, - model::{ - builder_traits::Product, - model::{EventHandler, SchemeCharacteristics}, - }, + model::{builder_traits::Product, model::*}, view::{ components::{input::Input, wrapper::Wrapper}, properties::*, }, view_utils::signal_reduce_input_utils::start_algorithm, }; -use gtk::{prelude::*, Align, WrapMode, *}; +use gtk::{ + prelude::{BoxExt, ListBoxRowExt, WidgetExt}, + Align, WrapMode, *, +}; pub fn signal_reducing_page(wrapper: &Box) { let (input_height, monospace, input_alignment, input_wrapping): (i32, bool, Align, WrapMode) = @@ -125,7 +125,9 @@ pub fn signal_reducing_page(wrapper: &Box) { let table_header = ColumnView::builder() .focusable(false) - .reorderable(true) + .reorderable(false) + .show_row_separators(true) + .show_column_separators(true) .halign(Align::Fill) .hexpand(true) .build(); @@ -140,25 +142,70 @@ pub fn signal_reducing_page(wrapper: &Box) { table_header.append_column(&column); } + let mut table = ListBox::builder().hexpand(true).halign(Align::Fill).build(); + + let header = ListBoxRow::builder().child(&table_header).build(); + + table.append(&header); + + for i in (0..=100).step_by(5) { + if i == 0 { + continue; + } + + let table_row = ListBoxRow::new(); + + let columns = ColumnView::builder().reorderable(false).build(); + + let column = ColumnViewColumn::builder() + .title(format!("{i}")) + .fixed_width(200) + .expand(true) + .build(); + + columns.append_column(&column); + + for table_row_label in 1..=3 { + let column = ColumnViewColumn::builder() + .title(format!("{table_row_label}")) + .fixed_width(200) + .expand(true) + .build(); + + columns.append_column(&column); + } + + table_row.set_child(Some(&columns)); + + table.append(&table_row); + } + let table_of_calculated_values = Frame::builder() .height_request(64) .hexpand(true) - .child(&table_header) + .child(&table) .halign(Align::Fill) .set_margin(MarginData::MultipleMargin((10, 5, 0, 0))) .build(); + let table_frame = table_of_calculated_values.clone(); + let errors_label: Label = Label::new(Some("")); let errors_label_for_handler: Label = errors_label.clone(); EventHandler::new(calculate_button.clone(), move |_| { - start_algorithm(&errors_label_for_handler, &all_text_views) + start_algorithm( + &errors_label_for_handler, + &all_text_views, + &table_frame.clone(), + &header, + ) }) .on_click(); + main_wrapper.append(&errors_label); main_wrapper.append(&calculate_button); main_wrapper.append(&table_of_calculated_values); - main_wrapper.append(&errors_label); wrapper.append(&main_wrapper); }