Ура ура вкладки!!!

И ещё пояснялка
И просто поработал немного
master
Алексей Алексей 2026-05-12 09:01:47 +10:00
parent 4ae3a6708e
commit 38bf469539
5 changed files with 140 additions and 19 deletions

42
code/Cargo.lock generated
View File

@ -598,6 +598,7 @@ version = "0.1.0"
dependencies = [ dependencies = [
"eframe", "eframe",
"egui", "egui",
"egui_dock",
] ]
[[package]] [[package]]
@ -773,6 +774,17 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" 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]] [[package]]
name = "ecolor" name = "ecolor"
version = "0.34.2" version = "0.34.2"
@ -879,6 +891,18 @@ dependencies = [
"winit", "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]] [[package]]
name = "egui_glow" name = "egui_glow"
version = "0.34.2" version = "0.34.2"
@ -2244,6 +2268,12 @@ dependencies = [
"windows-link", "windows-link",
] ]
[[package]]
name = "paste"
version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
[[package]] [[package]]
name = "peniko" name = "peniko"
version = "0.6.0" version = "0.6.0"
@ -2446,6 +2476,18 @@ dependencies = [
"unicode-ident", "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]] [[package]]
name = "profiling" name = "profiling"
version = "1.0.18" version = "1.0.18"

View File

@ -6,3 +6,4 @@ edition = "2024"
[dependencies] [dependencies]
eframe = "0.34.2" eframe = "0.34.2"
egui = "0.34.2" egui = "0.34.2"
egui_dock = "0.19.1"

View File

@ -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{ pub struct App{
label: String, tree: egui_dock::DockState<Tab>,
} }
impl Default for App{ impl Default for App{
fn default() -> Self{ fn default() -> Self{
Self { let mut tree = egui_dock::DockState::new(vec![
label: "Добро пожаловать в СУП: Систему Управления Пивоварней!".to_owned() 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{ impl App{
pub fn new(_cc: &eframe::CreationContext<'_>) -> Self{ pub fn new(_cc: &eframe::CreationContext<'_>) -> Self{
Default::default() Default::default()
@ -19,18 +65,36 @@ impl App{
impl eframe::App for App{ impl eframe::App for App{
fn ui(&mut self, ui: &mut egui::Ui, _frame: &mut eframe::Frame){ fn ui(&mut self, ui: &mut egui::Ui, _frame: &mut eframe::Frame){
DockArea::new(&mut self.tree)
egui::Panel::top("top_panel").show_inside(ui, |ui| { .style(Style::from_egui(ui.style().as_ref()))
egui::MenuBar::new().ui(ui, |ui| { .show_inside(ui, &mut TabViewer {});
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);
});
});
} }
} }
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
}
}

View File

@ -1,3 +1,4 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() -> eframe::Result{ fn main() -> eframe::Result{
let native_opts = eframe::NativeOptions { 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)))),) eframe::run_native("BCS", native_opts, Box::new(|cc| Ok(Box::new(code::App::new(cc)))),)
} //Код не работает, ошибка пока и должна быть. }

View File

@ -0,0 +1,13 @@
Есть следующие вкладки:
Equipment - управление оборудованием
Worker - Управление сотрудниками
Position - Управление должностями(внутри сотрудника)
Salary - управление зарплатами(внутри сотрудника)
Material - управление сырьём
Recipe - управление рецептами
Product - управление продукцией(внутри рецептов)
Order - управление заказами
Settings - настройки
В настройках можно:
разрешить вкладкам становиться окнами