1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
use std::sync::Arc;
use druid::widget::{Label};
use druid::{lens, Lens, Point, WidgetPod};
use druid::{widget::Flex, Widget};
use libquassel::message::objects::BufferViewManager;
pub struct BufferViewWidget {
inner: WidgetPod<Arc<BufferViewManager>, Box<dyn Widget<Arc<BufferViewManager>>>>,
}
impl BufferViewWidget {
pub fn new() -> Self {
let widget = WidgetPod::new(Flex::column()).boxed();
BufferViewWidget { inner: widget }
}
}
impl Widget<Arc<BufferViewManager>> for BufferViewWidget {
fn event(
&mut self,
ctx: &mut druid::EventCtx,
event: &druid::Event,
data: &mut Arc<BufferViewManager>,
env: &druid::Env,
) {
self.inner.event(ctx, event, data, env)
}
fn lifecycle(
&mut self,
ctx: &mut druid::LifeCycleCtx,
event: &druid::LifeCycle,
data: &Arc<BufferViewManager>,
env: &druid::Env,
) {
self.inner.lifecycle(ctx, event, data, env)
}
fn update(
&mut self,
ctx: &mut druid::UpdateCtx,
_old_data: &Arc<BufferViewManager>,
data: &Arc<BufferViewManager>,
_env: &druid::Env,
) {
let buffer_view_configs = lens!(BufferViewManager, buffer_view_configs);
let mut names: Flex<Arc<BufferViewManager>> = Flex::row();
let mut buffers: Flex<Arc<BufferViewManager>> = Flex::row();
let mut removed_buffers: Flex<Arc<BufferViewManager>> = Flex::row();
let mut temporarily_removed_buffers: Flex<Arc<BufferViewManager>> = Flex::row();
// let mut expansions: Flex<Arc<BufferViewManager>> = Flex::column();
// TODO optimise this whole thing
buffer_view_configs.with(data, |configs| {
for (_id, config) in configs {
names.add_child(Label::new(config.buffer_view_name.clone()));
buffers.add_child(Label::new(format!("{:?}", config.buffers)));
removed_buffers.add_child(Label::new(format!("{:?}", config.removed_buffers)));
temporarily_removed_buffers.add_child(Label::new(format!(
"{:?}",
config.temporarily_removed_buffers
)));
// expansions.add_child(Align::left(Label::new(alias.expansion.clone())));
}
});
let widget: Flex<Arc<BufferViewManager>> = Flex::column()
.with_flex_child(names, 1.0)
.with_flex_child(buffers, 1.0)
.with_flex_child(removed_buffers, 1.0)
.with_flex_child(temporarily_removed_buffers, 1.0);
// .with_flex_child(expansions, 1.0);
self.inner = WidgetPod::new(widget).boxed();
ctx.children_changed();
ctx.request_layout();
ctx.request_paint();
}
fn layout(
&mut self,
ctx: &mut druid::LayoutCtx,
bc: &druid::BoxConstraints,
data: &Arc<BufferViewManager>,
env: &druid::Env,
) -> druid::Size {
let size = self.inner.layout(ctx, bc, data, env);
self.inner.set_origin(ctx, data, env, Point::ZERO);
return size;
}
fn paint(
&mut self,
ctx: &mut druid::PaintCtx,
data: &Arc<BufferViewManager>,
env: &druid::Env,
) {
self.inner.paint(ctx, data, env)
}
}
|