use std::hash::Hash;
use std::collections::HashMap;
use image_colored_text::text::paragraph::ColoredTextParagraph;
use crate::to_image::drawable::operator::builtin_operator::DrawableOperator;
use crate::to_image::drawable::leaf::broadcast::DrawableBroadcastLeafPattern;
use crate::to_image::drawable::leaf::info::{BroadcastLeafPatternIntermediateInformation, LifelineRequiredHorizontalSpaceInDiagram};
pub struct CompleteBroadcastLeafPatternDrawInstruction<LI : Eq + Hash + Copy + Clone> {
pub pattern : DrawableBroadcastLeafPattern<LI>,
pub intermediate_info : BroadcastLeafPatternIntermediateInformation<LI>,
pub relative_y_pos : f32
}
impl <LI : Eq + Hash + Copy + Clone> CompleteBroadcastLeafPatternDrawInstruction<LI> {
pub fn new(pattern : DrawableBroadcastLeafPattern<LI>,intermediate_info : BroadcastLeafPatternIntermediateInformation<LI>,relative_y_pos : f32) -> Self {
Self{pattern,intermediate_info,relative_y_pos}
}
}
pub struct CompleteOperatorDrawInstruction<LI : Eq + Hash + Copy + Clone> {
pub drawable_op : DrawableOperator<LI>,
pub enclosed_lfs_reqs : HashMap<LI,LifelineRequiredHorizontalSpaceInDiagram>,
pub nest_depth : u32,
pub horizontal_seps_relative_vertical_positions : Vec<f32>
}
impl <LI : Eq + Hash + Copy + Clone> CompleteOperatorDrawInstruction<LI> {
pub fn new(
drawable_op : DrawableOperator<LI>,
enclosed_lfs_reqs : HashMap<LI,LifelineRequiredHorizontalSpaceInDiagram>,
nest_depth : u32,
horizontal_seps_relative_vertical_positions : Vec<f32>
) -> Self {
Self{drawable_op,enclosed_lfs_reqs,nest_depth,horizontal_seps_relative_vertical_positions}
}
}
pub struct CompleteInteractionDrawInstruction<LI : Eq + Hash + Copy + Clone> {
pub width : f32,
pub height : f32,
pub y_shift_to_absolute : f32,
pub left_side_of_diagram_x_pos : f32,
pub right_side_of_diagram_x_pos : f32,
pub lifelines_horizontal_positions : HashMap<LI,f32>,
pub lifelines_headers : HashMap<LI,ColoredTextParagraph>,
pub patterns_to_draw : Vec<CompleteBroadcastLeafPatternDrawInstruction<LI>>,
pub operators_to_draw : Vec<CompleteOperatorDrawInstruction<LI>>
}