Volume heatmap, checkboxes
This commit is contained in:
parent
418bf4a79e
commit
4a9bec7d5d
|
@ -103,15 +103,27 @@ impl eframe::App for PlateToolEframe {
|
||||||
});
|
});
|
||||||
ui.menu_button("Options", |ui| {
|
ui.menu_button("Options", |ui| {
|
||||||
ui.menu_button("Styles", |ui| {
|
ui.menu_button("Styles", |ui| {
|
||||||
if ui.button("Toggle transfer hashes").clicked() {
|
ui.checkbox(
|
||||||
self.main_window_state.plate_display_options.show_transfer_hashes ^= true;
|
&mut self
|
||||||
}
|
.main_window_state
|
||||||
if ui.button("Toggle volume heatmap").clicked() {
|
.plate_display_options
|
||||||
self.main_window_state.plate_display_options.show_volume_heatmap ^= true;
|
.show_transfer_hashes,
|
||||||
}
|
"Toggle transfer hashes",
|
||||||
if ui.button("Toggle current coordinates view").clicked() {
|
);
|
||||||
self.main_window_state.plate_display_options.show_coordinates ^= true;
|
ui.checkbox(
|
||||||
}
|
&mut self
|
||||||
|
.main_window_state
|
||||||
|
.plate_display_options
|
||||||
|
.show_volume_heatmap,
|
||||||
|
"Toggle volume heatmap",
|
||||||
|
);
|
||||||
|
ui.checkbox(
|
||||||
|
&mut self
|
||||||
|
.main_window_state
|
||||||
|
.plate_display_options
|
||||||
|
.show_coordinates,
|
||||||
|
"Toggle coordinate highlighting",
|
||||||
|
);
|
||||||
});
|
});
|
||||||
ui.menu_button("Exports", |ui| {
|
ui.menu_button("Exports", |ui| {
|
||||||
if ui.button("Change CSV export type").clicked() {}
|
if ui.button("Change CSV export type").clicked() {}
|
||||||
|
|
|
@ -153,11 +153,22 @@ fn calculate_shading_for_wells(
|
||||||
plate_type: plate_tool_lib::plate::PlateType,
|
plate_type: plate_tool_lib::plate::PlateType,
|
||||||
ordered_ids: &[Uuid],
|
ordered_ids: &[Uuid],
|
||||||
cache: &plate_tool_lib::transfer_region_cache::TransferRegionCache,
|
cache: &plate_tool_lib::transfer_region_cache::TransferRegionCache,
|
||||||
|
display_options: PlateDisplayOptions,
|
||||||
) -> Box<[Option<WellInfo>]> {
|
) -> Box<[Option<WellInfo>]> {
|
||||||
let box_size: usize = rows as usize * columns as usize;
|
let box_size: usize = rows as usize * columns as usize;
|
||||||
let mut well_infos: Box<[Option<WellInfo>]> = vec![None; box_size].into_boxed_slice();
|
let mut well_infos: Box<[Option<WellInfo>]> = vec![None; box_size].into_boxed_slice();
|
||||||
|
|
||||||
if let Some(transfers) = transfers {
|
if let Some(transfers) = transfers {
|
||||||
|
// Needed for palette
|
||||||
|
let max_volume: f32 = transfers
|
||||||
|
.iter()
|
||||||
|
.flat_map(|v| match v.volume {
|
||||||
|
plate_tool_lib::transfer_volume::TransferVolume::Single(x) => Some(x),
|
||||||
|
_ => None,
|
||||||
|
})
|
||||||
|
.fold(f32::MIN, f32::max)
|
||||||
|
.max(1.0f32); // Otherwise f32::MIN is return value
|
||||||
|
|
||||||
for transfer in transfers {
|
for transfer in transfers {
|
||||||
let cache_result = match plate_type {
|
let cache_result = match plate_type {
|
||||||
plate_tool_lib::plate::PlateType::Source => cache.get_or_calculate_source(transfer),
|
plate_tool_lib::plate::PlateType::Source => cache.get_or_calculate_source(transfer),
|
||||||
|
@ -165,20 +176,36 @@ fn calculate_shading_for_wells(
|
||||||
cache.get_or_calculate_destination(transfer)
|
cache.get_or_calculate_destination(transfer)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
let volume = if let plate_tool_lib::transfer_volume::TransferVolume::Single(x) =
|
||||||
|
transfer.volume
|
||||||
|
{
|
||||||
|
x
|
||||||
|
} else {
|
||||||
|
0.0
|
||||||
|
};
|
||||||
if let Some(wells) = cache_result {
|
if let Some(wells) = cache_result {
|
||||||
for well in wells.iter().filter(|x| x.row <= rows && x.col <= columns) {
|
for well in wells.iter().filter(|x| x.row <= rows && x.col <= columns) {
|
||||||
if let Some(Some(mut x)) = well_infos.get_mut(
|
if let Some(Some(mut x)) = well_infos.get_mut(
|
||||||
(well.row - 1) as usize * columns as usize + (well.col - 1) as usize,
|
(well.row - 1) as usize * columns as usize + (well.col - 1) as usize,
|
||||||
) {
|
) {
|
||||||
x.volume += 5.0;
|
x.volume += volume;
|
||||||
x.color = PALETTE.get_ordered(transfer.id, ordered_ids);
|
|
||||||
|
x.color = if display_options.show_volume_heatmap {
|
||||||
|
PALETTE.get_linear(volume.into(), max_volume.into())
|
||||||
|
} else {
|
||||||
|
PALETTE.get_ordered(transfer.id, ordered_ids)
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
if let Some(mut wi) = well_infos.get_mut(
|
if let Some(mut wi) = well_infos.get_mut(
|
||||||
(well.row - 1) as usize * columns as usize + (well.col - 1) as usize,
|
(well.row - 1) as usize * columns as usize + (well.col - 1) as usize,
|
||||||
) {
|
) {
|
||||||
*wi = Some(WellInfo::new(
|
*wi = Some(WellInfo::new(
|
||||||
5.0,
|
volume,
|
||||||
PALETTE.get_ordered(transfer.id, ordered_ids),
|
if display_options.show_volume_heatmap {
|
||||||
|
PALETTE.get_linear(volume.into(), max_volume.into())
|
||||||
|
} else {
|
||||||
|
PALETTE.get_ordered(transfer.id, ordered_ids)
|
||||||
|
},
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -299,7 +326,7 @@ fn add_plate_sub(
|
||||||
let well_infos = {
|
let well_infos = {
|
||||||
// Get non-active transfer info
|
// Get non-active transfer info
|
||||||
let mut well_infos =
|
let mut well_infos =
|
||||||
calculate_shading_for_wells(rows, columns, transfers, plate_type, ordered_ids, cache);
|
calculate_shading_for_wells(rows, columns, transfers, plate_type, ordered_ids, cache, display_options);
|
||||||
|
|
||||||
// Get wells in the current transfer to tack on to well_infos separately
|
// Get wells in the current transfer to tack on to well_infos separately
|
||||||
let current_transfer_wells: Option<Box<[(usize, usize)]>> = {
|
let current_transfer_wells: Option<Box<[(usize, usize)]>> = {
|
||||||
|
@ -440,7 +467,8 @@ fn add_plate_sub(
|
||||||
}
|
}
|
||||||
for c_column in 0..columns {
|
for c_column in 0..columns {
|
||||||
let text_color = {
|
let text_color = {
|
||||||
if display_options.show_coordinates && hovered_well.is_some_and(|x| x.1 == c_column + 1) {
|
if display_options.show_coordinates && hovered_well.is_some_and(|x| x.1 == c_column + 1)
|
||||||
|
{
|
||||||
*HIGHLIGHT_TEXT_COLOR
|
*HIGHLIGHT_TEXT_COLOR
|
||||||
} else {
|
} else {
|
||||||
*DEFAULT_TEXT_COLOR
|
*DEFAULT_TEXT_COLOR
|
||||||
|
|
Loading…
Reference in New Issue