summaryrefslogtreecommitdiff
path: root/iced_builder/src/views/element_list.rs
diff options
context:
space:
mode:
authorPolesznyák Márk László <116908301+pml68@users.noreply.github.com>2024-10-26 22:23:44 +0200
committerGitHub <noreply@github.com>2024-10-26 22:23:44 +0200
commit95fcd7aefa1aaf8f69c719d6d66003311c097e97 (patch)
treeda813fb6d9bab57d9b114280f761a9635a1a8903 /iced_builder/src/views/element_list.rs
parentMerge pull request #2 from pml68/feat/drag-and-drop (diff)
parentfeat: implement `std::error::Error` for custom `Error` enum (diff)
downloadiced-builder-95fcd7aefa1aaf8f69c719d6d66003311c097e97.tar.gz
Merge pull request #3 from pml68/refactor/internal-restructuring
Internal restructuring done
Diffstat (limited to 'iced_builder/src/views/element_list.rs')
-rw-r--r--iced_builder/src/views/element_list.rs48
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
+ })
+}