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
|
use std::sync::Arc;
use druid::widget::Label;
use druid::{lens, Lens, Point, WidgetPod};
use druid::{widget::Flex, Widget};
use libquassel::message::objects::AliasManager;
pub struct AliasManagerWidget {
inner: WidgetPod<Arc<AliasManager>, Box<dyn Widget<Arc<AliasManager>>>>,
}
impl AliasManagerWidget {
pub fn new() -> Self {
let widget = WidgetPod::new(Flex::column()).boxed();
AliasManagerWidget { inner: widget }
}
}
impl Widget<Arc<AliasManager>> for AliasManagerWidget {
fn event(
&mut self,
ctx: &mut druid::EventCtx,
event: &druid::Event,
data: &mut Arc<AliasManager>,
env: &druid::Env,
) {
self.inner.event(ctx, event, data, env)
}
fn lifecycle(
&mut self,
ctx: &mut druid::LifeCycleCtx,
event: &druid::LifeCycle,
data: &Arc<AliasManager>,
env: &druid::Env,
) {
self.inner.lifecycle(ctx, event, data, env)
}
fn update(
&mut self,
ctx: &mut druid::UpdateCtx,
_old_data: &Arc<AliasManager>,
data: &Arc<AliasManager>,
_env: &druid::Env,
) {
let aliases = lens!(AliasManager, aliases);
let mut widget: Flex<Arc<AliasManager>> = Flex::column();
aliases.with(data, |aliases| {
for alias in aliases {
widget.add_child(
Flex::row()
.with_child(Label::new(alias.name.clone()))
.with_child(Label::new(alias.expansion.clone())),
)
}
});
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<AliasManager>,
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<AliasManager>, env: &druid::Env) {
self.inner.paint(ctx, data, env)
}
}
|