164 lines
5.6 KiB
Rust
164 lines
5.6 KiB
Rust
use eframe::egui;
|
|
|
|
use crate::{
|
|
main_state::MainState,
|
|
modals::ModalState,
|
|
transfer_menu::{CurrentTransferState, CurrentTransferStateInterior},
|
|
};
|
|
|
|
use std::sync::LazyLock;
|
|
|
|
static SELECT_COLOR: LazyLock<egui::Color32> =
|
|
LazyLock::new(|| egui::Color32::from_hex("#aa0000").unwrap());
|
|
|
|
pub fn tree(
|
|
ui: &mut egui::Ui,
|
|
ms: &mut MainState,
|
|
cts: &CurrentTransferState,
|
|
modal_state: &mut ModalState,
|
|
) {
|
|
// Add all source plates
|
|
ui.vertical(|ui| {
|
|
ui.heading("Source Plates");
|
|
let mut new_uuid: Option<plate_tool_lib::uuid::Uuid> = None;
|
|
for (name, uuid) in ms.source_plates.iter().map(|x| (&x.name, x.get_uuid())) {
|
|
let f = {
|
|
let mut f = egui::Frame::none();
|
|
if ms.get_current_source_uuid().is_some_and(|x| x == uuid) {
|
|
f = f.fill(*SELECT_COLOR);
|
|
}
|
|
f
|
|
};
|
|
f.show(ui, |ui| {
|
|
let r = ui.add(
|
|
egui::Label::new(name)
|
|
.sense(egui::Sense::click())
|
|
.selectable(false),
|
|
);
|
|
if r.clicked() {
|
|
new_uuid = Some(uuid);
|
|
}
|
|
if r.double_clicked() {
|
|
let pi = ms.get_source_by_uuid(uuid);
|
|
if let Some(pi) = pi {
|
|
crate::modals::open_edit_plate_modal_plateinstance(modal_state, &pi);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
if let Some(uuid) = new_uuid {
|
|
let current_source_uuid = ms.get_current_source_uuid();
|
|
if current_source_uuid.is_some_and(|x| x != uuid) || current_source_uuid.is_none() {
|
|
ms.set_current_source(uuid);
|
|
ms.set_no_current_transfer();
|
|
if let Some(mut cts) = cts.lock().ok() {
|
|
*cts = CurrentTransferStateInterior::default();
|
|
}
|
|
set_plates(ms, cts);
|
|
}
|
|
}
|
|
});
|
|
|
|
// Add all destination plates
|
|
ui.vertical(|ui| {
|
|
ui.heading("Destination Plates");
|
|
let mut new_uuid: Option<plate_tool_lib::uuid::Uuid> = None;
|
|
for (name, uuid) in ms
|
|
.destination_plates
|
|
.iter()
|
|
.map(|x| (&x.name, x.get_uuid()))
|
|
{
|
|
let f = {
|
|
let mut f = egui::Frame::none();
|
|
if ms.get_current_destination_uuid().is_some_and(|x| x == uuid) {
|
|
f = f.fill(*SELECT_COLOR);
|
|
}
|
|
f
|
|
};
|
|
f.show(ui, |ui| {
|
|
let r = ui.add(
|
|
egui::Label::new(name)
|
|
.sense(egui::Sense::click())
|
|
.selectable(false),
|
|
);
|
|
if r.clicked() {
|
|
new_uuid = Some(uuid);
|
|
}
|
|
if r.double_clicked() {
|
|
let pi = ms.get_destination_by_uuid(uuid);
|
|
if let Some(pi) = pi {
|
|
crate::modals::open_edit_plate_modal_plateinstance(modal_state, &pi);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
if let Some(uuid) = new_uuid {
|
|
let current_destination_uuid = ms.get_current_destination_uuid();
|
|
if current_destination_uuid.is_some_and(|x| x != uuid)
|
|
|| current_destination_uuid.is_none()
|
|
{
|
|
ms.set_current_destination(uuid);
|
|
ms.set_no_current_transfer();
|
|
if let Some(mut cts) = cts.lock().ok() {
|
|
*cts = CurrentTransferStateInterior::default();
|
|
cts.destination_plate = ms
|
|
.get_current_destination_plateinstance()
|
|
.expect("Just set destination")
|
|
.plate;
|
|
}
|
|
set_plates(ms, cts);
|
|
log::warn!(
|
|
"{:?}\n{:?}",
|
|
cts,
|
|
ms.get_current_destination_plateinstance()
|
|
);
|
|
}
|
|
}
|
|
});
|
|
// Add all transfers
|
|
ui.vertical(|ui| {
|
|
ui.heading("Transfers");
|
|
let mut new_uuid: Option<plate_tool_lib::uuid::Uuid> = None;
|
|
for (name, uuid) in ms.transfers.iter().map(|x| (&x.name, x.get_uuid())) {
|
|
let f = {
|
|
let mut f = egui::Frame::none();
|
|
if ms.get_current_transfer_uuid().is_some_and(|x| x == uuid) {
|
|
f = f.fill(*SELECT_COLOR);
|
|
}
|
|
f
|
|
};
|
|
f.show(ui, |ui| {
|
|
let r = ui.add(
|
|
egui::Label::new(name)
|
|
.sense(egui::Sense::click())
|
|
.selectable(false),
|
|
);
|
|
if r.clicked() {
|
|
new_uuid = Some(uuid);
|
|
log::info!("{:?}", uuid);
|
|
}
|
|
});
|
|
}
|
|
if let Some(uuid) = new_uuid {
|
|
ms.set_current_transfer(uuid);
|
|
if let Some(new_cts) =
|
|
CurrentTransferStateInterior::try_new_from_main_state_transfer(ms)
|
|
{
|
|
*cts.lock().unwrap() = new_cts;
|
|
}
|
|
set_plates(ms, cts);
|
|
}
|
|
});
|
|
}
|
|
|
|
fn set_plates(ms: &MainState, cts: &CurrentTransferState) {
|
|
if let Some(mut cts) = cts.lock().ok() {
|
|
if let Some(source_plate) = ms.get_current_source_plateinstance() {
|
|
cts.source_plate = source_plate.plate;
|
|
}
|
|
if let Some(destination_plate) = ms.get_current_destination_plateinstance() {
|
|
cts.destination_plate = destination_plate.plate;
|
|
}
|
|
}
|
|
}
|