AIT/src/view/ui.rs

87 lines
2.6 KiB
Rust
Raw Normal View History

use crate::model::builder_traits::*;
use adw::HeaderBar;
2024-03-10 11:54:32 +03:00
use gtk4 as gtk;
use gtk::{prelude::*, StackTransitionType::SlideLeftRight, *};
2024-03-10 11:54:32 +03:00
use crate::view::{
components::{about::open_about_dialogue, info_bar::InfoBar, menu::HeaderMenu, pages::Pages},
pages::*,
properties::*,
};
2024-03-10 11:54:32 +03:00
use super::styles::load_css;
pub fn ui(application: &adw::Application) {
load_css();
let hamming_code = Box::builder()
.orientation(Orientation::Vertical)
2024-03-10 11:54:32 +03:00
.set_align(Alignment::new(Align::Fill, Align::Fill))
.set_margin(MarginData::EqualsMargin(15))
.spacing(10)
.build();
let info_bar = InfoBar::builder()
.set_text_label("Sample text")
.set_button_icon("close")
.build();
hamming_code::hamming_code_page(&hamming_code);
2024-03-10 11:54:32 +03:00
let signal_reducing = Box::builder()
.orientation(Orientation::Vertical)
2024-03-10 11:54:32 +03:00
.set_align(Alignment::new(Align::Fill, Align::Fill))
.set_margin(MarginData::EqualsMargin(15))
.spacing(10)
.build();
signal_reducing::signal_reducing_page(&signal_reducing);
2024-03-10 11:54:32 +03:00
let pages = Pages::builder()
.set_transition(SlideLeftRight, 200)
.append_items(vec![
("Код Хэмминга", "Код Хэмминга", &hamming_code),
("Затухание сигнала", "Затухание сигнала", &signal_reducing),
])
2024-08-09 23:47:01 +03:00
.build(5);
2024-03-10 11:54:32 +03:00
let application_box = Box::new(Orientation::Vertical, 0);
2024-08-09 23:47:01 +03:00
application_box.append(info_bar.get());
application_box.append(pages.get());
let title_bar = Box::new(Orientation::Horizontal, 0);
let mut menu_button = HeaderMenu::<&str>::new();
menu_button.set_action_group_name(Some("menu_group_action"));
menu_button.append_items([(open_about_dialogue, "about_software", "О программе")]);
title_bar.append(
&Label::builder()
.css_name("title")
.set_align(Alignment::new(Align::Center, Align::Center))
.hexpand(true)
.vexpand(true)
.label("Комплексная программа для лаб. работ")
.build(),
);
title_bar.append(menu_button.get_button());
let header_bar = HeaderBar::builder().title_widget(&title_bar).build();
2024-03-10 11:54:32 +03:00
let window = ApplicationWindow::builder()
.width_request(800)
.height_request(600)
2024-03-10 11:54:32 +03:00
.application(application)
.titlebar(&header_bar)
.child(&application_box)
2024-03-10 11:54:32 +03:00
.build();
window.insert_action_group("menu_group_action", Some(menu_button.get_actions_group()));
window.present();
}