From 72e527f51acc44195df5cafda7d8f3d6dc12695c Mon Sep 17 00:00:00 2001 From: pml68 Date: Thu, 26 Dec 2024 00:04:43 +0100 Subject: refactor: `views` -> `panes`, `mod.rs` -> `{panes,types}.rs` --- iced_builder/Cargo.toml | 2 +- iced_builder/fonts/icons.ttf | Bin 6348 -> 6348 bytes iced_builder/src/lib.rs | 2 +- iced_builder/src/main.rs | 2 +- iced_builder/src/panes.rs | 4 +++ iced_builder/src/panes/code_view.rs | 50 ++++++++++++++++++++++++++++++++ iced_builder/src/panes/designer_view.rs | 37 +++++++++++++++++++++++ iced_builder/src/panes/element_list.rs | 49 +++++++++++++++++++++++++++++++ iced_builder/src/panes/style.rs | 40 +++++++++++++++++++++++++ iced_builder/src/types.rs | 48 ++++++++++++++++++++++++++++++ iced_builder/src/types/mod.rs | 48 ------------------------------ iced_builder/src/views/code_view.rs | 50 -------------------------------- iced_builder/src/views/designer_view.rs | 37 ----------------------- iced_builder/src/views/element_list.rs | 49 ------------------------------- iced_builder/src/views/mod.rs | 4 --- iced_builder/src/views/style.rs | 40 ------------------------- 16 files changed, 231 insertions(+), 231 deletions(-) create mode 100644 iced_builder/src/panes.rs create mode 100644 iced_builder/src/panes/code_view.rs create mode 100644 iced_builder/src/panes/designer_view.rs create mode 100644 iced_builder/src/panes/element_list.rs create mode 100644 iced_builder/src/panes/style.rs create mode 100644 iced_builder/src/types.rs delete mode 100644 iced_builder/src/types/mod.rs delete mode 100644 iced_builder/src/views/code_view.rs delete mode 100644 iced_builder/src/views/designer_view.rs delete mode 100644 iced_builder/src/views/element_list.rs delete mode 100644 iced_builder/src/views/mod.rs delete mode 100644 iced_builder/src/views/style.rs (limited to 'iced_builder') diff --git a/iced_builder/Cargo.toml b/iced_builder/Cargo.toml index 41a8b51..a1b41cc 100644 --- a/iced_builder/Cargo.toml +++ b/iced_builder/Cargo.toml @@ -10,7 +10,7 @@ keywords = ["gui", "iced"] [dependencies] iced = { version = "0.13.1", features = [ "image","svg","canvas","qr_code","advanced","tokio","highlighter"] } -iced_aw = { version = "0.11.0", default-features = false, features = ["menu","color_picker"] } +# iced_aw = { version = "0.11.0", default-features = false, features = ["menu","color_picker"] } iced_anim = { version = "0.1.4", features = ["derive", "serde"] } iced_drop = { path = "../iced_drop" } serde = { version = "1.0.216", features = ["derive"] } diff --git a/iced_builder/fonts/icons.ttf b/iced_builder/fonts/icons.ttf index dba1266..7af6b0e 100644 Binary files a/iced_builder/fonts/icons.ttf and b/iced_builder/fonts/icons.ttf differ diff --git a/iced_builder/src/lib.rs b/iced_builder/src/lib.rs index 48a2728..d04c594 100644 --- a/iced_builder/src/lib.rs +++ b/iced_builder/src/lib.rs @@ -1,8 +1,8 @@ pub mod dialogs; pub mod error; pub mod icon; +pub mod panes; pub mod types; -pub mod views; pub use error::Error; pub type Result = core::result::Result; diff --git a/iced_builder/src/main.rs b/iced_builder/src/main.rs index d428a8f..a041c6f 100644 --- a/iced_builder/src/main.rs +++ b/iced_builder/src/main.rs @@ -7,10 +7,10 @@ use iced::{clipboard, keyboard, Alignment, Element, Length, Task, Theme}; use iced_anim::{Animation, Spring}; use iced_builder::dialogs::{error_dialog, unsaved_changes_dialog}; use iced_builder::icon; +use iced_builder::panes::{code_view, designer_view, element_list}; use iced_builder::types::{ Action, DesignerPage, ElementName, Message, Project, }; -use iced_builder::views::{code_view, designer_view, element_list}; use rfd::MessageDialogResult; const THEMES: &'static [Theme] = &[Theme::SolarizedDark, Theme::SolarizedLight]; diff --git a/iced_builder/src/panes.rs b/iced_builder/src/panes.rs new file mode 100644 index 0000000..387662a --- /dev/null +++ b/iced_builder/src/panes.rs @@ -0,0 +1,4 @@ +pub mod code_view; +pub mod designer_view; +pub mod element_list; +mod style; diff --git a/iced_builder/src/panes/code_view.rs b/iced_builder/src/panes/code_view.rs new file mode 100644 index 0000000..1be75d9 --- /dev/null +++ b/iced_builder/src/panes/code_view.rs @@ -0,0 +1,50 @@ +use iced::widget::{ + button, container, pane_grid, row, text, text_editor, tooltip, Space, +}; +use iced::{Alignment, Length, Theme}; +use super::style; +use crate::icon::copy; +use crate::types::{DesignerPage, Message}; + +pub fn view<'a>( + editor_content: &'a text_editor::Content, + theme: Theme, + is_focused: bool, +) -> pane_grid::Content<'a, Message> { + let title = row![ + text("Generated Code"), + Space::with_width(Length::Fill), + tooltip( + button(container(copy()).center_x(30)).on_press(Message::CopyCode), + "Copy code to clipboard", + tooltip::Position::FollowCursor + ), + Space::with_width(20), + button("Switch to Designer view") + .on_press(Message::SwitchPage(DesignerPage::DesignerView)) + ] + .align_y(Alignment::Center); + let title_bar = pane_grid::TitleBar::new(title) + .padding(10) + .style(style::title_bar); + pane_grid::Content::new( + text_editor(editor_content) + .on_action(Message::EditorAction) + .highlight( + "rs", + if theme.to_string().contains("Dark") { + highlighter::Theme::SolarizedDark + } else { + highlighter::Theme::InspiredGitHub + }, + ) + .height(Length::Fill) + .padding(20), + ) + .title_bar(title_bar) + .style(if is_focused { + style::pane_focused + } else { + style::pane_active + }) +} diff --git a/iced_builder/src/panes/designer_view.rs b/iced_builder/src/panes/designer_view.rs new file mode 100644 index 0000000..76456db --- /dev/null +++ b/iced_builder/src/panes/designer_view.rs @@ -0,0 +1,37 @@ +use iced::widget::{button, container, pane_grid, row, text, themer, Space}; +use iced::{Alignment, Element, Length}; + +use super::style; +use crate::types::{DesignerPage, Message, RenderedElement}; + +pub fn view<'a>( + element_tree: &Option, + designer_theme: iced::Theme, + is_focused: bool, +) -> pane_grid::Content<'a, Message> { + let el_tree: Element<'a, Message> = match element_tree { + Some(tree) => tree.clone().into(), + None => text("Open a project or begin creating one").into(), + }; + let content = container(themer(designer_theme, el_tree)) + .id(iced::widget::container::Id::new("drop_zone")) + .height(Length::Fill) + .width(Length::Fill); + let title = row![ + text("Designer"), + Space::with_width(Length::Fill), + button("Switch to Code view") + .on_press(Message::SwitchPage(DesignerPage::CodeView)), + ] + .align_y(Alignment::Center); + 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 + }) +} diff --git a/iced_builder/src/panes/element_list.rs b/iced_builder/src/panes/element_list.rs new file mode 100644 index 0000000..74188af --- /dev/null +++ b/iced_builder/src/panes/element_list.rs @@ -0,0 +1,49 @@ +use iced::widget::{column, container, pane_grid, text, Column}; +use iced::{Alignment, Element, Length}; +use iced_drop::droppable; + +use super::style; +use crate::types::{ElementName, Message}; + +fn items_list_view<'a>(items: &'a [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 [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 + }) +} diff --git a/iced_builder/src/panes/style.rs b/iced_builder/src/panes/style.rs new file mode 100644 index 0000000..1eefb2d --- /dev/null +++ b/iced_builder/src/panes/style.rs @@ -0,0 +1,40 @@ +use iced::widget::container::Style; +use iced::{Border, Theme}; + +pub fn title_bar(theme: &Theme) -> Style { + let palette = theme.extended_palette(); + + Style { + text_color: Some(palette.background.strong.text), + background: Some(palette.background.strong.color.into()), + ..Default::default() + } +} + +pub fn pane_active(theme: &Theme) -> Style { + let palette = theme.extended_palette(); + + Style { + background: Some(palette.background.weak.color.into()), + border: Border { + width: 1.0, + color: palette.background.strong.color, + ..Border::default() + }, + ..Default::default() + } +} + +pub fn pane_focused(theme: &Theme) -> Style { + let palette = theme.extended_palette(); + + Style { + background: Some(palette.background.weak.color.into()), + border: Border { + width: 4.0, + color: palette.background.strong.color, + ..Border::default() + }, + ..Default::default() + } +} diff --git a/iced_builder/src/types.rs b/iced_builder/src/types.rs new file mode 100644 index 0000000..161b5e1 --- /dev/null +++ b/iced_builder/src/types.rs @@ -0,0 +1,48 @@ +pub mod element_name; +pub mod project; +pub mod rendered_element; + +use std::path::PathBuf; + +pub use element_name::ElementName; +use iced::widget::{pane_grid, text_editor}; +use iced::Theme; +use iced_anim::SpringEvent; +pub use project::Project; +pub use rendered_element::*; + +use crate::Result; + +#[derive(Debug, Clone)] +pub enum Message { + ToggleTheme(SpringEvent), + CopyCode, + SwitchPage(DesignerPage), + EditorAction(text_editor::Action), + RefreshEditorContent, + DropNewElement(ElementName, iced::Point, iced::Rectangle), + HandleNew( + ElementName, + Vec<(iced::advanced::widget::Id, iced::Rectangle)>, + ), + MoveElement(RenderedElement, iced::Point, iced::Rectangle), + HandleMove( + RenderedElement, + Vec<(iced::advanced::widget::Id, iced::Rectangle)>, + ), + PaneResized(pane_grid::ResizeEvent), + PaneClicked(pane_grid::Pane), + PaneDragged(pane_grid::DragEvent), + NewFile, + OpenFile, + FileOpened(Result<(PathBuf, Project)>), + SaveFile, + SaveFileAs, + FileSaved(Result), +} + +#[derive(Debug, Clone)] +pub enum DesignerPage { + DesignerView, + CodeView, +} diff --git a/iced_builder/src/types/mod.rs b/iced_builder/src/types/mod.rs deleted file mode 100644 index 161b5e1..0000000 --- a/iced_builder/src/types/mod.rs +++ /dev/null @@ -1,48 +0,0 @@ -pub mod element_name; -pub mod project; -pub mod rendered_element; - -use std::path::PathBuf; - -pub use element_name::ElementName; -use iced::widget::{pane_grid, text_editor}; -use iced::Theme; -use iced_anim::SpringEvent; -pub use project::Project; -pub use rendered_element::*; - -use crate::Result; - -#[derive(Debug, Clone)] -pub enum Message { - ToggleTheme(SpringEvent), - CopyCode, - SwitchPage(DesignerPage), - EditorAction(text_editor::Action), - RefreshEditorContent, - DropNewElement(ElementName, iced::Point, iced::Rectangle), - HandleNew( - ElementName, - Vec<(iced::advanced::widget::Id, iced::Rectangle)>, - ), - MoveElement(RenderedElement, iced::Point, iced::Rectangle), - HandleMove( - RenderedElement, - Vec<(iced::advanced::widget::Id, iced::Rectangle)>, - ), - PaneResized(pane_grid::ResizeEvent), - PaneClicked(pane_grid::Pane), - PaneDragged(pane_grid::DragEvent), - NewFile, - OpenFile, - FileOpened(Result<(PathBuf, Project)>), - SaveFile, - SaveFileAs, - FileSaved(Result), -} - -#[derive(Debug, Clone)] -pub enum DesignerPage { - DesignerView, - CodeView, -} diff --git a/iced_builder/src/views/code_view.rs b/iced_builder/src/views/code_view.rs deleted file mode 100644 index 1be75d9..0000000 --- a/iced_builder/src/views/code_view.rs +++ /dev/null @@ -1,50 +0,0 @@ -use iced::widget::{ - button, container, pane_grid, row, text, text_editor, tooltip, Space, -}; -use iced::{Alignment, Length, Theme}; -use super::style; -use crate::icon::copy; -use crate::types::{DesignerPage, Message}; - -pub fn view<'a>( - editor_content: &'a text_editor::Content, - theme: Theme, - is_focused: bool, -) -> pane_grid::Content<'a, Message> { - let title = row![ - text("Generated Code"), - Space::with_width(Length::Fill), - tooltip( - button(container(copy()).center_x(30)).on_press(Message::CopyCode), - "Copy code to clipboard", - tooltip::Position::FollowCursor - ), - Space::with_width(20), - button("Switch to Designer view") - .on_press(Message::SwitchPage(DesignerPage::DesignerView)) - ] - .align_y(Alignment::Center); - let title_bar = pane_grid::TitleBar::new(title) - .padding(10) - .style(style::title_bar); - pane_grid::Content::new( - text_editor(editor_content) - .on_action(Message::EditorAction) - .highlight( - "rs", - if theme.to_string().contains("Dark") { - highlighter::Theme::SolarizedDark - } else { - highlighter::Theme::InspiredGitHub - }, - ) - .height(Length::Fill) - .padding(20), - ) - .title_bar(title_bar) - .style(if is_focused { - style::pane_focused - } else { - style::pane_active - }) -} diff --git a/iced_builder/src/views/designer_view.rs b/iced_builder/src/views/designer_view.rs deleted file mode 100644 index 76456db..0000000 --- a/iced_builder/src/views/designer_view.rs +++ /dev/null @@ -1,37 +0,0 @@ -use iced::widget::{button, container, pane_grid, row, text, themer, Space}; -use iced::{Alignment, Element, Length}; - -use super::style; -use crate::types::{DesignerPage, Message, RenderedElement}; - -pub fn view<'a>( - element_tree: &Option, - designer_theme: iced::Theme, - is_focused: bool, -) -> pane_grid::Content<'a, Message> { - let el_tree: Element<'a, Message> = match element_tree { - Some(tree) => tree.clone().into(), - None => text("Open a project or begin creating one").into(), - }; - let content = container(themer(designer_theme, el_tree)) - .id(iced::widget::container::Id::new("drop_zone")) - .height(Length::Fill) - .width(Length::Fill); - let title = row![ - text("Designer"), - Space::with_width(Length::Fill), - button("Switch to Code view") - .on_press(Message::SwitchPage(DesignerPage::CodeView)), - ] - .align_y(Alignment::Center); - 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 - }) -} diff --git a/iced_builder/src/views/element_list.rs b/iced_builder/src/views/element_list.rs deleted file mode 100644 index 74188af..0000000 --- a/iced_builder/src/views/element_list.rs +++ /dev/null @@ -1,49 +0,0 @@ -use iced::widget::{column, container, pane_grid, text, Column}; -use iced::{Alignment, Element, Length}; -use iced_drop::droppable; - -use super::style; -use crate::types::{ElementName, Message}; - -fn items_list_view<'a>(items: &'a [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 [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 - }) -} diff --git a/iced_builder/src/views/mod.rs b/iced_builder/src/views/mod.rs deleted file mode 100644 index 387662a..0000000 --- a/iced_builder/src/views/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod code_view; -pub mod designer_view; -pub mod element_list; -mod style; diff --git a/iced_builder/src/views/style.rs b/iced_builder/src/views/style.rs deleted file mode 100644 index 1eefb2d..0000000 --- a/iced_builder/src/views/style.rs +++ /dev/null @@ -1,40 +0,0 @@ -use iced::widget::container::Style; -use iced::{Border, Theme}; - -pub fn title_bar(theme: &Theme) -> Style { - let palette = theme.extended_palette(); - - Style { - text_color: Some(palette.background.strong.text), - background: Some(palette.background.strong.color.into()), - ..Default::default() - } -} - -pub fn pane_active(theme: &Theme) -> Style { - let palette = theme.extended_palette(); - - Style { - background: Some(palette.background.weak.color.into()), - border: Border { - width: 1.0, - color: palette.background.strong.color, - ..Border::default() - }, - ..Default::default() - } -} - -pub fn pane_focused(theme: &Theme) -> Style { - let palette = theme.extended_palette(); - - Style { - background: Some(palette.background.weak.color.into()), - border: Border { - width: 4.0, - color: palette.background.strong.color, - ..Border::default() - }, - ..Default::default() - } -} -- cgit v1.2.3