From 38bf469539ead352993372c5865ba6f7572ca73b Mon Sep 17 00:00:00 2001 From: ultrageese Date: Tue, 12 May 2026 09:01:47 +1000 Subject: [PATCH] =?UTF-8?q?=D0=A3=D1=80=D0=B0=20=D1=83=D1=80=D0=B0=20?= =?UTF-8?q?=D0=B2=D0=BA=D0=BB=D0=B0=D0=B4=D0=BA=D0=B8!!!=20=D0=98=20=D0=B5?= =?UTF-8?q?=D1=89=D1=91=20=D0=BF=D0=BE=D1=8F=D1=81=D0=BD=D1=8F=D0=BB=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=98=20=D0=BF=D1=80=D0=BE=D1=81=D1=82=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=BB=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/Cargo.lock | 42 +++++++++++++++++++ code/Cargo.toml | 1 + code/src/app.rs | 100 ++++++++++++++++++++++++++++++++++++-------- code/src/main.rs | 3 +- documents/Пояснялка | 13 ++++++ 5 files changed, 140 insertions(+), 19 deletions(-) create mode 100644 documents/Пояснялка diff --git a/code/Cargo.lock b/code/Cargo.lock index 6d950e7..84810f6 100644 --- a/code/Cargo.lock +++ b/code/Cargo.lock @@ -598,6 +598,7 @@ version = "0.1.0" dependencies = [ "eframe", "egui", + "egui_dock", ] [[package]] @@ -773,6 +774,17 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +[[package]] +name = "duplicate" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e92f10a49176cbffacaedabfaa11d51db1ea0f80a83c26e1873b43cd1742c24" +dependencies = [ + "heck", + "proc-macro2", + "proc-macro2-diagnostics", +] + [[package]] name = "ecolor" version = "0.34.2" @@ -879,6 +891,18 @@ dependencies = [ "winit", ] +[[package]] +name = "egui_dock" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db51b9023b9d65cb4d561fd981946f987c54f25413c75b2c8e634c774c3d70ad" +dependencies = [ + "duplicate", + "egui", + "paste", + "thiserror 2.0.18", +] + [[package]] name = "egui_glow" version = "0.34.2" @@ -2244,6 +2268,12 @@ dependencies = [ "windows-link", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "peniko" version = "0.6.0" @@ -2446,6 +2476,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "version_check", +] + [[package]] name = "profiling" version = "1.0.18" diff --git a/code/Cargo.toml b/code/Cargo.toml index b9d1c37..9ea69a8 100644 --- a/code/Cargo.toml +++ b/code/Cargo.toml @@ -6,3 +6,4 @@ edition = "2024" [dependencies] eframe = "0.34.2" egui = "0.34.2" +egui_dock = "0.19.1" diff --git a/code/src/app.rs b/code/src/app.rs index 6ee756f..eb8f788 100644 --- a/code/src/app.rs +++ b/code/src/app.rs @@ -1,15 +1,61 @@ +use egui_dock::{DockArea, Style}; + +static TABS_CAN_BE_WINDOWS: bool = false; + +enum TabTypes{ + Equipment, + Worker, + Position, + Salary, + Material, + Recipe, + Product, + Order, + Settings +} +struct Tab{ + tab_type: TabTypes, + title: String, + content: String, +} + pub struct App{ - label: String, + tree: egui_dock::DockState, } impl Default for App{ fn default() -> Self{ - Self { - label: "Добро пожаловать в СУП: Систему Управления Пивоварней!".to_owned() - } + let mut tree = egui_dock::DockState::new(vec![ + Tab{ + tab_type: TabTypes::Equipment, + title:"Оборудование".to_owned(), + content:"Вкладка с оборудованием".to_owned() + }, + Tab{ + tab_type: TabTypes::Material, + title: "Сырьё".to_owned(), + content:"Вкладка с сырьём".to_owned() + }, + Tab{ + tab_type: TabTypes::Worker, + title: "Сотрудники".to_owned(), + content:"Сотрудники".to_owned() + } + ]); + + // let [a,b] = + // tree.main_surface_mut() + // .split_left(egui_dock::NodeIndex::root(), 0.3, vec!["tab3".to_owned()]); + + // let [_,_] = tree + // .main_surface_mut() + // .split_below(a, 0.7, vec!["tab4".to_owned()]); + // let [_,_] = tree + // .main_surface_mut() + // .split_below(b, 0.5, vec!["tab5".to_owned()]); + Self{tree} } } - impl App{ pub fn new(_cc: &eframe::CreationContext<'_>) -> Self{ Default::default() @@ -19,18 +65,36 @@ impl App{ impl eframe::App for App{ fn ui(&mut self, ui: &mut egui::Ui, _frame: &mut eframe::Frame){ - - egui::Panel::top("top_panel").show_inside(ui, |ui| { - egui::MenuBar::new().ui(ui, |ui| { - egui::widgets::global_theme_preference_buttons(ui); - }); - }); - egui::CentralPanel::default().show_inside(ui, |ui|{ - ui.heading("Система Управления Пивоварней"); - ui.horizontal(|ui|{ - ui.label("write something: "); - ui.text_edit_singleline(&mut self.label); - }); - }); + DockArea::new(&mut self.tree) + .style(Style::from_egui(ui.style().as_ref())) + .show_inside(ui, &mut TabViewer {}); } } + +struct TabViewer {} + +impl egui_dock::TabViewer for TabViewer{ + type Tab = Tab; + + fn title(&mut self, tab: &mut Self::Tab) -> egui::WidgetText{ + (&*tab.title).into() + } + fn ui(&mut self, ui: &mut egui::Ui, tab: &mut Self::Tab){ + ui.label(&tab.content); + match &tab.tab_type{ + TabTypes::Equipment => { + ui.label("This is Equipment"); + }, + _ =>{ + ui.label("This is not"); + } + } + + } + fn allowed_in_windows(&self, _tab: &mut Self::Tab) -> bool { + TABS_CAN_BE_WINDOWS + } + fn is_closeable(&self, _tab: &Self::Tab) -> bool { + false + } +} \ No newline at end of file diff --git a/code/src/main.rs b/code/src/main.rs index 4458d46..70495b8 100644 --- a/code/src/main.rs +++ b/code/src/main.rs @@ -1,3 +1,4 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] fn main() -> eframe::Result{ let native_opts = eframe::NativeOptions { @@ -8,4 +9,4 @@ fn main() -> eframe::Result{ }; eframe::run_native("BCS", native_opts, Box::new(|cc| Ok(Box::new(code::App::new(cc)))),) - } //Код не работает, ошибка пока и должна быть. + } diff --git a/documents/Пояснялка b/documents/Пояснялка new file mode 100644 index 0000000..e4781df --- /dev/null +++ b/documents/Пояснялка @@ -0,0 +1,13 @@ +Есть следующие вкладки: + Equipment - управление оборудованием + Worker - Управление сотрудниками + Position - Управление должностями(внутри сотрудника) + Salary - управление зарплатами(внутри сотрудника) + Material - управление сырьём + Recipe - управление рецептами + Product - управление продукцией(внутри рецептов) + Order - управление заказами + Settings - настройки + + В настройках можно: + разрешить вкладкам становиться окнами