diff --git a/code/src/app.rs b/code/src/app.rs index dc975aa..ddb1721 100644 --- a/code/src/app.rs +++ b/code/src/app.rs @@ -26,6 +26,7 @@ struct Tab{ } pub struct App{ pub tree: egui_dock::DockState, + pub main_viewer: MainTabViewer } impl Default for App{ @@ -61,7 +62,8 @@ impl Default for App{ } ]); - Self{tree} + let main_viewer = MainTabViewer::default(); + Self{tree, main_viewer} } } impl App{ @@ -76,7 +78,7 @@ impl eframe::App for App{ fn ui(&mut self, ui: &mut egui::Ui, _frame: &mut eframe::Frame){ DockArea::new(&mut self.tree) .style(Style::from_egui(ui.style().as_ref())) - .show_inside(ui, &mut MainTabViewer::default()); + .show_inside(ui, &mut self.main_viewer); } } @@ -87,6 +89,7 @@ struct MainTabViewer { db_oper: DBOperator, worker_tabs: WorkerTabViewer, worker_tree: egui_dock::DockState, + rt: tokio::runtime::Runtime, } impl Default for MainTabViewer{ @@ -98,7 +101,7 @@ impl Default for MainTabViewer{ workers: Arc::new(RwLock::new(Option::Some(rt.block_on(async{db_oper.get_workers().await.unwrap()})))), equipment: vec![models::Equipment::default()], db_oper, - worker_tabs: WorkerTabViewer{}, + worker_tabs: WorkerTabViewer::default(), worker_tree: egui_dock::DockState::new(vec![ Tab{ title:"ГойдаЗов".to_owned(), @@ -109,6 +112,7 @@ impl Default for MainTabViewer{ tab_type:TabTypes::WorkerPosition, } ]), + rt } } } @@ -136,7 +140,7 @@ impl MainTabViewer{ //Это таблицы, с ними надо разобраться! for eq in self.equipment.clone() { - ui.push_id("shit".to_owned(), |ui|{ + ui.push_id(&eq.name, |ui|{ egui::CollapsingHeader::new(&eq.name) .default_open(false) .show(ui, |ui|{ @@ -150,7 +154,6 @@ impl MainTabViewer{ } fn show_worker(&mut self, ui: &mut egui::Ui){ - let rt = tokio::runtime::Runtime::new().unwrap(); ui.horizontal(|ui|{ if ui.button("Добавить").clicked() { @@ -159,37 +162,35 @@ impl MainTabViewer{ } }); - rt.block_on(async{ - for wk in self.workers.read().clone().unwrap().iter(){ - ui.push_id(format!("{}:{}",&wk.full_name,&wk.id),|ui| { - egui::CollapsingHeader::new(format!("#{:08} | {}",&wk.id,&wk.full_name)) - .default_open(false) - .show(ui, |ui|{ - ui.horizontal(|ui|{ - ui.label("Нанят: "); - ui.label(format!("{}",wk.hire_date.date_naive().format("%d-%m-%Y").to_string())); - }); - ui.horizontal(|ui|{ - ui.label("Должность: "); - ui.label(&wk.position.name); - }); - ui.horizontal(|ui|{ - ui.label("Уволен: "); - ui.label(if wk.is_fired { - "Да" - }else{ - "Нет" - }) + for wk in self.workers.read().clone().unwrap().iter(){ + ui.push_id(format!("{}:{}",&wk.full_name,&wk.id),|ui| { + egui::CollapsingHeader::new(format!("#{:08} | {}",&wk.id,&wk.full_name)) + .default_open(false) + .show(ui, |ui|{ + ui.horizontal(|ui|{ + ui.label("Нанят: "); + ui.label(format!("{}",wk.hire_date.date_naive().format("%d-%m-%Y").to_string())); + }); + ui.horizontal(|ui|{ + ui.label("Должность: "); + ui.label(&wk.position.name); + }); + ui.horizontal(|ui|{ + ui.label("Уволен: "); + ui.label(if wk.is_fired { + "Да" + }else{ + "Нет" }) }) - }); - } - }) + }) + }); + } + } - } + fn show_position(&mut self, ui: &mut egui::Ui){ - let rt = tokio::runtime::Runtime::new().unwrap(); - rt.block_on(async{ + for eq in self.positions.read().clone().unwrap().iter(){ ui.push_id(&eq.name, |ui|{ egui::CollapsingHeader::new(&eq.name) @@ -200,12 +201,13 @@ impl MainTabViewer{ }); } - }) } fn show_salary(&mut self, ui: &mut egui::Ui){ + let id = ui.make_persistent_id("BotMenu"); DockArea::new(&mut self.worker_tree) .style(Style::from_egui(ui.style().as_ref())) - .show_inside(ui, &mut WorkerTabViewer::default()); + .id(id) + .show_inside(ui, &mut self.worker_tabs); } fn show_material(&mut self, ui: &mut egui::Ui){ ui.label("Сырьё короче да"); @@ -247,6 +249,9 @@ impl egui_dock::TabViewer for MainTabViewer{ fn is_closeable(&self, _tab: &Self::Tab) -> bool { false } + fn id(&mut self, tab: &mut Self::Tab) -> egui::Id { + egui::Id::new(&tab.title) + } } #[derive(Default)] @@ -262,4 +267,7 @@ impl egui_dock::TabViewer for WorkerTabViewer{ fn ui(&mut self, ui: &mut egui::Ui, tab: &mut Self::Tab) { } + fn id(&mut self, tab: &mut Self::Tab) -> egui::Id { + egui::Id::new(&tab.title) + } } \ No newline at end of file diff --git a/code/src/schema.rs b/code/src/schema.rs deleted file mode 100644 index 4573208..0000000 --- a/code/src/schema.rs +++ /dev/null @@ -1,46 +0,0 @@ -use diesel::*; -table!{ - equipment(id){ - id -> Integer, - inv_number -> VarChar, - maintenance_date -> Datetime, - worker_id -> Integer, - name -> VarChar, - - } -} -table! { - salary(id){ - id -> Integer, - worker_id -> Integer, - salary_size -> Decimal, - salary_date -> Datetime - } -} -table! { - position(id){ - id -> Integer, - name -> VarChar, - wage -> Decimal - } -} -table! { - worker(id){ - id -> Integer, - position_id -> Integer, - hire_date -> Datetime, - is_fired -> Bool, - full_name -> VarChar - } -} - -joinable!(equipment -> worker(worker_id)); -joinable!(worker -> position(position_id)); -joinable!(salary -> worker(worker_id)); - -allow_tables_to_appear_in_same_query!( - equipment, - salary, - position, - worker, -); \ No newline at end of file