egui_tracing/ui/components/
table_header.rs1use egui::{vec2, Response, Sense, Ui};
2
3use super::common::{set_common_props, CommonProps};
4use super::ChildFn;
5
6pub static PADDING_LEFT: f32 = 4.0;
7
8pub struct TableHeader<T> {
9 common_props: Option<CommonProps>,
10 children: Option<T>,
11}
12
13impl<T> Default for TableHeader<T> {
14 fn default() -> Self {
15 Self {
16 common_props: None,
17 children: None,
18 }
19 }
20}
21
22impl<T> TableHeader<T>
23where
24 T: ChildFn,
25{
26 pub fn common_props(mut self, v: CommonProps) -> Self {
27 self.common_props = Some(v);
28 self
29 }
30
31 pub fn children(mut self, v: T) -> Self {
32 self.children = Some(v);
33 self
34 }
35
36 pub fn show(self, ui: &mut Ui) -> Response {
37 ui.horizontal(|ui| {
38 set_common_props(ui, &self.common_props);
39 let available_space = ui.available_size_before_wrap();
40 let size = vec2(PADDING_LEFT, available_space.y);
41 let (rect, response) = ui.allocate_at_least(size, Sense::hover());
42 if ui.is_rect_visible(response.rect) {
43 let stroke = ui.visuals().widgets.noninteractive.bg_stroke;
44 let painter = ui.painter();
45 painter.vline(rect.left(), rect.top()..=rect.bottom(), stroke);
46 }
47
48 (self.children.unwrap())(ui)
49 })
50 .response
51 }
52}