mod show;
mod allowed_splits;
mod drag_and_drop;
mod state;
mod tab_removal;
pub use allowed_splits::AllowedSplits;
use egui::{emath::*, Id, Modifiers};
use tab_removal::TabRemoval;
use crate::{dock_state::DockState, NodePath, Style, TabIndex, TabPath};
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,
show_leaf_close_all_buttons: bool,
show_leaf_collapse_buttons: bool,
show_secondary_button_hint: bool,
secondary_button_modifiers: Modifiers,
secondary_button_on_modifier: bool,
secondary_button_context_menu: bool,
allowed_splits: AllowedSplits,
window_bounds: Option<Rect>,
to_remove: Vec<TabRemoval>,
to_detach: Vec<TabPath>,
new_focused: Option<NodePath>,
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(),
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,
show_leaf_close_all_buttons: true,
show_leaf_collapse_buttons: true,
show_secondary_button_hint: true,
secondary_button_modifiers: Modifiers::SHIFT,
secondary_button_on_modifier: true,
secondary_button_context_menu: 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
}
pub fn show_secondary_button_hint(mut self, show_secondary_button_hint: bool) -> Self {
self.show_secondary_button_hint = show_secondary_button_hint;
self
}
pub fn secondary_button_modifiers(mut self, secondary_button_modifiers: Modifiers) -> Self {
self.secondary_button_modifiers = secondary_button_modifiers;
self
}
pub fn secondary_button_on_modifier(mut self, secondary_button_on_modifier: bool) -> Self {
self.secondary_button_on_modifier = secondary_button_on_modifier;
self
}
pub fn secondary_button_context_menu(mut self, secondary_button_context_menu: bool) -> Self {
self.secondary_button_context_menu = secondary_button_context_menu;
self
}
#[inline(always)]
pub fn window_bounds(mut self, bounds: Rect) -> Self {
self.window_bounds = Some(bounds);
self
}
#[inline(always)]
#[deprecated = "consider using `show_leaf_close_buttons` instead."]
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)]
#[deprecated = "consider using `show_leaf_collapse_buttons` instead."]
pub fn show_window_collapse_buttons(mut self, show_window_collapse_buttons: bool) -> Self {
self.show_window_collapse_buttons = show_window_collapse_buttons;
self
}
#[inline(always)]
pub fn show_leaf_close_all_buttons(mut self, show_leaf_close_all_buttons: bool) -> Self {
self.show_leaf_close_all_buttons = show_leaf_close_all_buttons;
self
}
#[inline(always)]
pub fn show_leaf_collapse_buttons(mut self, show_leaf_collapse_buttons: bool) -> Self {
self.show_leaf_collapse_buttons = show_leaf_collapse_buttons;
self
}
}
impl<Tab> std::fmt::Debug for DockArea<'_, Tab> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("DockArea").finish_non_exhaustive()
}
}