aboutsummaryrefslogtreecommitdiff
path: root/examples/statetracker/src/widgets/bufferview.rs
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2021-11-29 14:27:27 +0100
committerMax Audron <audron@cocaine.farm>2021-11-29 14:28:02 +0100
commit9df7c5c0e6d03579fa90735adf316d7e563340d7 (patch)
tree43118348a34a8f1715aaa384cc8e966c3af97506 /examples/statetracker/src/widgets/bufferview.rs
parentadd feature list to readme (diff)
statetracker: add bufferview widget and do some reorganization
Diffstat (limited to 'examples/statetracker/src/widgets/bufferview.rs')
-rw-r--r--examples/statetracker/src/widgets/bufferview.rs96
1 files changed, 96 insertions, 0 deletions
diff --git a/examples/statetracker/src/widgets/bufferview.rs b/examples/statetracker/src/widgets/bufferview.rs
new file mode 100644
index 0000000..c96f8d5
--- /dev/null
+++ b/examples/statetracker/src/widgets/bufferview.rs
@@ -0,0 +1,96 @@
+use std::sync::Arc;
+
+use druid::widget::{Align, 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::column();
+ let mut buffers: Flex<Arc<BufferViewManager>> = Flex::column();
+ // 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)));
+ // expansions.add_child(Align::left(Label::new(alias.expansion.clone())));
+ }
+ });
+
+ let widget: Flex<Arc<BufferViewManager>> = Flex::row()
+ .with_flex_child(names, 1.0)
+ .with_flex_child(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)
+ }
+}