diff options
Diffstat (limited to '')
| -rw-r--r-- | iced_builder/src/views/element_list.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/iced_builder/src/views/element_list.rs b/iced_builder/src/views/element_list.rs new file mode 100644 index 0000000..f0fdd2f --- /dev/null +++ b/iced_builder/src/views/element_list.rs @@ -0,0 +1,48 @@ +use super::style; +use crate::{types::element_name::ElementName, Message}; +use iced::{ + widget::{column, container, pane_grid, text, Column}, + Alignment, Element, Length, +}; +use iced_drop::droppable; + +fn items_list_view<'a>(items: &'a Vec<ElementName>) -> Element<'a, Message> { + let mut column = Column::new() + .spacing(20) + .align_x(Alignment::Center) + .width(Length::Fill); + + for item in items { + column = column.push( + droppable(text(item.clone().to_string())) + .on_drop(move |point, rect| Message::DropNewElement(item.clone(), point, rect)), + ); + } + + container(column) + .width(Length::Fill) + .height(Length::Fill) + .into() +} + +pub fn view<'a>( + element_list: &'a Vec<ElementName>, + is_focused: bool, +) -> pane_grid::Content<'a, Message> { + let items_list = items_list_view(element_list); + let content = column![items_list] + .align_x(Alignment::Center) + .height(Length::Fill) + .width(Length::Fill); + let title = text("Element List"); + let title_bar = pane_grid::TitleBar::new(title) + .padding(10) + .style(style::title_bar); + pane_grid::Content::new(content) + .title_bar(title_bar) + .style(if is_focused { + style::pane_focused + } else { + style::pane_active + }) +} |
