mod show;
mod allowed_splits;
mod drag_and_drop;
mod state;
mod tab_removal;
use crate::{dock_state::DockState, NodeIndex, Style, SurfaceIndex, TabIndex};
pub use allowed_splits::AllowedSplits;
use drag_and_drop::{DragData, HoverData};
use tab_removal::TabRemoval;
use egui::{emath::*, Id};
pub struct DockArea<'tree, Tab> {
id: Id,
dock_state: &'tree mut DockState<Tab>,
style: Option<Style>,
show_add_popup: bool,
show_add_buttons: bool,
show_close_buttons: bool,
tab_context_menus: bool,
draggable_tabs: bool,
show_tab_name_on_hover: bool,
show_window_close_buttons: bool,
show_window_collapse_buttons: bool,
allowed_splits: AllowedSplits,
window_bounds: Option<Rect>,
drag_data: Option<DragData>,
hover_data: Option<HoverData>,
to_remove: Vec<TabRemoval>,
to_detach: Vec<(SurfaceIndex, NodeIndex, TabIndex)>,
new_focused: Option<(SurfaceIndex, NodeIndex)>,
tab_hover_rect: Option<(Rect, TabIndex)>,
}
impl<'tree, Tab> DockArea<'tree, Tab> {
#[inline(always)]
pub fn new(tree: &'tree mut DockState<Tab>) -> DockArea<'tree, Tab> {
Self {
id: Id::new("egui_dock::DockArea"),
dock_state: tree,
style: None,
show_add_popup: false,
show_add_buttons: false,
show_close_buttons: true,
tab_context_menus: true,
draggable_tabs: true,
show_tab_name_on_hover: false,
allowed_splits: AllowedSplits::default(),
drag_data: None,
hover_data: None,
to_remove: Vec::new(),
to_detach: Vec::new(),
new_focused: None,
tab_hover_rect: None,
window_bounds: None,
show_window_close_buttons: true,
show_window_collapse_buttons: true,
}
}
#[inline(always)]
pub fn id(mut self, id: Id) -> Self {
self.id = id;
self
}
#[inline(always)]
pub fn style(mut self, style: Style) -> Self {
self.style = Some(style);
self
}
pub fn show_add_popup(mut self, show_add_popup: bool) -> Self {
self.show_add_popup = show_add_popup;
self
}
pub fn show_add_buttons(mut self, show_add_buttons: bool) -> Self {
self.show_add_buttons = show_add_buttons;
self
}
pub fn show_close_buttons(mut self, show_close_buttons: bool) -> Self {
self.show_close_buttons = show_close_buttons;
self
}
pub fn tab_context_menus(mut self, tab_context_menus: bool) -> Self {
self.tab_context_menus = tab_context_menus;
self
}
pub fn draggable_tabs(mut self, draggable_tabs: bool) -> Self {
self.draggable_tabs = draggable_tabs;
self
}
pub fn show_tab_name_on_hover(mut self, show_tab_name_on_hover: bool) -> Self {
self.show_tab_name_on_hover = show_tab_name_on_hover;
self
}
pub fn allowed_splits(mut self, allowed_splits: AllowedSplits) -> Self {
self.allowed_splits = allowed_splits;
self
}
#[inline(always)]
pub fn window_bounds(mut self, bounds: Rect) -> Self {
self.window_bounds = Some(bounds);
self
}
#[inline(always)]
pub fn show_window_close_buttons(mut self, show_window_close_buttons: bool) -> Self {
self.show_window_close_buttons = show_window_close_buttons;
self
}
#[inline(always)]
pub fn show_window_collapse_buttons(mut self, show_window_collapse_buttons: bool) -> Self {
self.show_window_collapse_buttons = show_window_collapse_buttons;
self
}
}
impl<'tree, Tab> std::fmt::Debug for DockArea<'tree, Tab> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("DockArea").finish_non_exhaustive()
}
}