From 34b3d8a54b38dc272aee2e1ac96ecce1d40be070 Mon Sep 17 00:00:00 2001 From: Eduardo Flores Date: Tue, 6 Dec 2022 11:20:21 -0700 Subject: [PATCH] Fixed issues with merge --- examples/cosmic/src/window.rs | 10 +-- src/widget/navigation/navbar.rs | 151 ++++++++++++++++++++------------ 2 files changed, 97 insertions(+), 64 deletions(-) diff --git a/examples/cosmic/src/window.rs b/examples/cosmic/src/window.rs index ca8da53f..2ca6775c 100644 --- a/examples/cosmic/src/window.rs +++ b/examples/cosmic/src/window.rs @@ -9,7 +9,7 @@ use cosmic::{ iced_lazy::responsive, iced_winit::window::{drag, toggle_maximize, minimize}, theme::{self, Theme}, - widget::{button, nav_button, nav_bar, nav_bar_page, nav_bar_section, header_bar, settings, scrollable, toggler, expander, nav_bar, nav_bar_item}, + widget::{button, nav_button, nav_bar, header_bar, settings, scrollable, toggler, nav_bar_item}, Element, ElementExt, }; @@ -116,12 +116,8 @@ impl Application for Window { } fn view(&self) -> Element { - let mut header: Element = header_bar() - .title(self.title()) - //.nav_title(String::from("Settings")) - .sidebar_active(self.sidebar_toggled) - .show_minimize(self.show_minimize) - .show_maximize(self.show_maximize) + let mut header = header_bar() + .title("COSMIC Design System - Iced") .on_close(Message::Close) .on_drag(Message::Drag) .start( diff --git a/src/widget/navigation/navbar.rs b/src/widget/navigation/navbar.rs index 95ddb005..55e04c58 100644 --- a/src/widget/navigation/navbar.rs +++ b/src/widget/navigation/navbar.rs @@ -1,17 +1,17 @@ // Copyright 2022 System76 // SPDX-License-Identifier: MPL-2.0 +use crate::Renderer; use crate::widget::nav_bar::{nav_bar_pages_style, nav_bar_sections_style}; -use crate::widget::Background; -use derive_setters::Setters; -use iced::{Background, Length}; -use iced_lazy::Component; -use iced_native::widget::{column, container}; -use iced_native::{row, Alignment, Element}; -use iced_style::button::Appearance; -use iced_style::{theme, Theme}; +use crate::widget::{icon, scrollable}; +use crate::iced::{Length, Background}; +use crate::iced_lazy::Component; +use crate::iced::widget::{button, column, container, text}; +use crate::iced_native::{row, Alignment, Element}; +use crate::iced_style::button::Appearance; +use crate::{theme, Theme}; use std::collections::BTreeMap; -use iced::Renderer; +use derive_setters::Setters; #[derive(Setters, Default)] pub struct NavBar<'a, Message> { @@ -94,71 +94,108 @@ impl<'a, Message> Component for NavBar<'a, Message> { fn view(&self, state: &Self::State) -> Element { if self.active { - let mut sections: Vec> = vec![]; - let mut pages: Vec> = vec![]; + let mut sections: Vec> = vec![]; + let mut pages: Vec> = vec![]; for (section_index, (section, section_pages)) in self.source.iter().enumerate() { sections.push( - crate::nav_button!( - §ion.title, - §ion.icon, - true, - section_index == state.selected_section + button( + column(vec![ + icon(§ion.icon, 20).into(), + text(§ion.title).size(14).into(), + ]) + .width(Length::Units(100)) + .height(Length::Units(50)) + .align_items(Alignment::Center), ) + .style(if section_index == state.selected_section { + theme::Button::Primary.into() + } else { + theme::Button::Text.into() + }) .on_press(NavBarEvent::SectionSelected(section_index)) .into(), ); if section_index == state.selected_section { for (page_index, page) in section_pages.iter().enumerate() { - let active = state.selected_page.is_some() - && page_index == state.selected_page.unwrap(); - pages.push( - crate::nav_button!(&page.title, &page.icon, self.condensed, active) - .on_press(NavBarEvent::PageSelected(section_index, page_index)) - .into(), - ); + pages.push(if self.condensed { + button( + column(vec![ + icon(&page.icon, 20).into(), + text(&page.title).size(14).into(), + ]) + .width(Length::Units(100)) + .height(Length::Units(50)) + .align_items(Alignment::Center), + ) + .style(if let Some(selected_page) = state.selected_page { + if page_index == selected_page { + theme::Button::Primary.into() + } else { + theme::Button::Text.into() + } + } else { + theme::Button::Text.into() + }).on_press(NavBarEvent::PageSelected(section_index, page_index)) + .into() + } else { + button(row![ + icon(&page.icon, 20), + text(&page.title).size(16).width(Length::Fill) + ].spacing(10)) + .padding(10) + .style(if let Some(selected_page) = state.selected_page { + if page_index == selected_page { + theme::Button::Primary.into() + } else { + theme::Button::Text.into() + } + } else { + theme::Button::Text.into() + }) + .on_press(NavBarEvent::PageSelected(section_index, page_index)) + .into() + }); } } } - let nav_bar: Element = - container(if self.condensed && state.selected_page.is_some() { - row![container(scrollable(column(pages) - .spacing(10) - .padding(10) - .max_width(200) - .width(Length::Units(200)) - .height(Length::Shrink))) - .height(Length::Fill) - .style(theme::Container::Custom(nav_bar_pages_style))] - } else if !state.section_active || self.condensed && state.selected_page.is_none() { - row![scrollable(column(sections) + let nav_bar: Element = container(if self.condensed { + row![ + scrollable(column(sections) .spacing(10) .padding(10) .max_width(100) .align_items(Alignment::Center) - .height(Length::Shrink))] - } else { - row![ - scrollable(column(sections) - .spacing(10) - .padding(10) - .max_width(100) - .align_items(Alignment::Center) - .height(Length::Shrink)), - container(scrollable(column(pages) - .spacing(10) - .padding(10) - .max_width(200) - .width(Length::Units(200)) - .height(Length::Shrink))) - .height(Length::Fill) - .style(theme::Container::Custom(nav_bar_pages_style)), - ] - }) - .height(Length::Fill) - .style(theme::Container::Custom(nav_bar_pages_style)), - ]) + .height(Length::Shrink)), + container(scrollable(column(pages) + .spacing(10) + .padding(10) + .max_width(100) + .align_items(Alignment::Center) + .width(Length::Units(100)) + .height(Length::Shrink))) + .height(Length::Fill) + .style(theme::Container::Custom(nav_bar_pages_style)), + ] + } else { + row![ + scrollable(column(sections) + .spacing(10) + .padding(10) + .max_width(100) + .align_items(Alignment::Center) + .height(Length::Shrink)), + container(scrollable(column(pages) + .spacing(10) + .padding(10) + .max_width(200) + .width(Length::Units(200)) + .height(Length::Shrink))) + .height(Length::Fill) + .style(theme::Container::Custom(nav_bar_pages_style)), + ] + }) .height(Length::Fill) .style(theme::Container::Custom(nav_bar_sections_style)) .into();