diff --git a/resources/edit.svg b/resources/rename.svg similarity index 100% rename from resources/edit.svg rename to resources/rename.svg diff --git a/resources/replace.svg b/resources/replace.svg new file mode 100644 index 0000000..97dfc0b --- /dev/null +++ b/resources/replace.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/app.rs b/src/app.rs index abede4a..e52a66a 100644 --- a/src/app.rs +++ b/src/app.rs @@ -5,7 +5,7 @@ use iced::alignment::{Horizontal, Vertical}; use iced::widget::image::FilterMethod; use iced::widget::{button, image, scrollable, svg, text, Button, Checkbox, Column, Container, Image, Row, Scrollable, Svg, Text, TextInput}; use iced::window::icon; -use iced::{window, Alignment, Background, Border, Color, Degrees, Element, Length, Padding, Radians, Renderer, Rotation, Shadow, Subscription, Task, Theme}; +use iced::{widget, window, Alignment, Background, Border, Color, Degrees, Element, Length, Padding, Radians, Renderer, Rotation, Shadow, Subscription, Task, Theme}; use octocrab::Octocrab; use reqwest::Url; use std::collections::BTreeMap; @@ -15,7 +15,8 @@ const ICON: &[u8] = include_bytes!("../resources/icon.png").as_slice(); // Bootstrap Icons const APPEND: &[u8] = include_bytes!("../resources/append.svg").as_slice(); -const EDIT: &[u8] = include_bytes!("../resources/edit.svg").as_slice(); +const REPLACE: &[u8] = include_bytes!("../resources/replace.svg").as_slice(); +const RENAME: &[u8] = include_bytes!("../resources/rename.svg").as_slice(); const REMOVE: &[u8] = include_bytes!("../resources/remove.svg").as_slice(); const FOLDER: &[u8] = include_bytes!("../resources/folder.svg").as_slice(); const COLLAPSE: &[u8] = include_bytes!("../resources/collapse.svg").as_slice(); @@ -660,9 +661,30 @@ impl IllusionnaApp { fn display_content<'a>(&self, structure: &'a BTreeMap, indentation: f32, vec: &mut Vec>) { for (_, value) in structure { + let modifier = Button::new( + Svg::new(svg::Handle::from_memory(if matches!(&value.content, PathContent::Directory(_)) { APPEND } else { REPLACE })).width(Length::Fixed(16f32)) + .style(|t, s| advanced_svg(Color::from_rgb8(0, 125, 125), t, s)) + ).style(small_button); + let rename = Button::new( + Svg::new(svg::Handle::from_memory(RENAME)).width(Length::Fixed(16f32)) + .style(|t, s| advanced_svg(Color::from_rgb8(0, 255, 0), t, s)) + ).style(small_button); + let remove = Button::new( + Svg::new(svg::Handle::from_memory(REMOVE)).width(Length::Fixed(16f32)) + .style(|t, s| advanced_svg(Color::from_rgb8(255, 0, 0), t, s)) + ).style(small_button); + let operations = Container::new( + Row::new() + .push(modifier).push(rename).push(remove) + .spacing(2.5) + .align_y(Vertical::Center) + ).padding(Padding::new(0.0).right(2.5)).align_right(Length::Fill); match &value.content { PathContent::File(info) => { - let file = Button::new(Text::new(&info.name)).width(Length::Fill).style(small_button); + let file = widget::hover( + Button::new(Text::new(&info.name)).padding(Padding::new(3.0).left(9.0)).width(Length::Fill).style(small_button), + operations + ); vec.push(Container::new(file).width(Length::Fixed(350f32)).padding(Padding::new(2.5).left(indentation)).into()); } PathContent::Directory(info) => { @@ -678,14 +700,17 @@ impl IllusionnaApp { .style(small_button) .on_press(Interaction::CollapseDirectory(value.path.to_string())) }; - let directory = Button::new( - Row::new() - .push(management_button) - .push(Svg::new(svg::Handle::from_memory(FOLDER)).width(Length::Fixed(16f32)).style(default_svg)) - .push(Text::new(&info.name)) - .spacing(2.5) - .align_y(Vertical::Center) - ).width(Length::Fill).padding(3).style(small_button); + let directory = widget::hover( + Button::new( + Row::new() + .push(management_button) + .push(Svg::new(svg::Handle::from_memory(FOLDER)).width(Length::Fixed(16f32)).style(default_svg)) + .push(Text::new(&info.name)) + .spacing(2.5) + .align_y(Vertical::Center) + ).width(Length::Fill).padding(3.0).style(small_button), + operations + ); let mut inner = vec![]; if !cds.contains(&value.path) { self.display_content(&info.contents, indentation + 15.0, &mut inner);