diff options
| author | Max Audron <audron@cocaine.farm> | 2021-11-29 14:27:27 +0100 |
|---|---|---|
| committer | Max Audron <audron@cocaine.farm> | 2021-11-29 14:28:02 +0100 |
| commit | 9df7c5c0e6d03579fa90735adf316d7e563340d7 (patch) | |
| tree | 43118348a34a8f1715aaa384cc8e966c3af97506 /examples/statetracker/src/widgets | |
| parent | add feature list to readme (diff) | |
statetracker: add bufferview widget and do some reorganization
Diffstat (limited to '')
| -rw-r--r-- | examples/statetracker/src/widgets/aliasmanager.rs (renamed from examples/statetracker/src/aliasmanager.rs) | 0 | ||||
| -rw-r--r-- | examples/statetracker/src/widgets/bufferview.rs | 96 | ||||
| -rw-r--r-- | examples/statetracker/src/widgets/mod.rs | 5 |
3 files changed, 101 insertions, 0 deletions
diff --git a/examples/statetracker/src/aliasmanager.rs b/examples/statetracker/src/widgets/aliasmanager.rs index afa8c91..afa8c91 100644 --- a/examples/statetracker/src/aliasmanager.rs +++ b/examples/statetracker/src/widgets/aliasmanager.rs 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) + } +} diff --git a/examples/statetracker/src/widgets/mod.rs b/examples/statetracker/src/widgets/mod.rs new file mode 100644 index 0000000..c837e5d --- /dev/null +++ b/examples/statetracker/src/widgets/mod.rs @@ -0,0 +1,5 @@ +mod aliasmanager; +mod bufferview; + +pub use aliasmanager::*; +pub use bufferview::*; |
