Fixed issues with merge

This commit is contained in:
Eduardo Flores 2022-12-06 11:20:21 -07:00
parent 95c902c8bc
commit 34b3d8a54b
2 changed files with 97 additions and 64 deletions

View file

@ -9,7 +9,7 @@ use cosmic::{
iced_lazy::responsive, iced_lazy::responsive,
iced_winit::window::{drag, toggle_maximize, minimize}, iced_winit::window::{drag, toggle_maximize, minimize},
theme::{self, Theme}, 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, Element,
ElementExt, ElementExt,
}; };
@ -116,12 +116,8 @@ impl Application for Window {
} }
fn view(&self) -> Element<Message> { fn view(&self) -> Element<Message> {
let mut header: Element<Message, _> = header_bar() let mut header = header_bar()
.title(self.title()) .title("COSMIC Design System - Iced")
//.nav_title(String::from("Settings"))
.sidebar_active(self.sidebar_toggled)
.show_minimize(self.show_minimize)
.show_maximize(self.show_maximize)
.on_close(Message::Close) .on_close(Message::Close)
.on_drag(Message::Drag) .on_drag(Message::Drag)
.start( .start(

View file

@ -1,17 +1,17 @@
// Copyright 2022 System76 <info@system76.com> // Copyright 2022 System76 <info@system76.com>
// SPDX-License-Identifier: MPL-2.0 // 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::nav_bar::{nav_bar_pages_style, nav_bar_sections_style};
use crate::widget::Background; use crate::widget::{icon, scrollable};
use derive_setters::Setters; use crate::iced::{Length, Background};
use iced::{Background, Length}; use crate::iced_lazy::Component;
use iced_lazy::Component; use crate::iced::widget::{button, column, container, text};
use iced_native::widget::{column, container}; use crate::iced_native::{row, Alignment, Element};
use iced_native::{row, Alignment, Element}; use crate::iced_style::button::Appearance;
use iced_style::button::Appearance; use crate::{theme, Theme};
use iced_style::{theme, Theme};
use std::collections::BTreeMap; use std::collections::BTreeMap;
use iced::Renderer; use derive_setters::Setters;
#[derive(Setters, Default)] #[derive(Setters, Default)]
pub struct NavBar<'a, Message> { pub struct NavBar<'a, Message> {
@ -94,50 +94,90 @@ impl<'a, Message> Component<Message, Renderer> for NavBar<'a, Message> {
fn view(&self, state: &Self::State) -> Element<Self::Event, Renderer> { fn view(&self, state: &Self::State) -> Element<Self::Event, Renderer> {
if self.active { if self.active {
let mut sections: Vec<Element<'a, Self::Event, Renderer>> = vec![]; let mut sections: Vec<Element<Self::Event, Renderer>> = vec![];
let mut pages: Vec<Element<'a, Self::Event, Renderer>> = vec![]; let mut pages: Vec<Element<Self::Event, Renderer>> = vec![];
for (section_index, (section, section_pages)) in self.source.iter().enumerate() { for (section_index, (section, section_pages)) in self.source.iter().enumerate() {
sections.push( sections.push(
crate::nav_button!( button(
&section.title, column(vec![
&section.icon, icon(&section.icon, 20).into(),
true, text(&section.title).size(14).into(),
section_index == state.selected_section ])
.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)) .on_press(NavBarEvent::SectionSelected(section_index))
.into(), .into(),
); );
if section_index == state.selected_section { if section_index == state.selected_section {
for (page_index, page) in section_pages.iter().enumerate() { for (page_index, page) in section_pages.iter().enumerate() {
let active = state.selected_page.is_some() pages.push(if self.condensed {
&& page_index == state.selected_page.unwrap(); button(
pages.push( column(vec![
crate::nav_button!(&page.title, &page.icon, self.condensed, active) 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)) .on_press(NavBarEvent::PageSelected(section_index, page_index))
.into(), .into()
); });
} }
} }
} }
let nav_bar: Element<Self::Event, Renderer> = let nav_bar: Element<Self::Event, Renderer> = container(if self.condensed {
container(if self.condensed && state.selected_page.is_some() { row![
row![container(scrollable(column(pages) scrollable(column(sections)
.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)
.spacing(10) .spacing(10)
.padding(10) .padding(10)
.max_width(100) .max_width(100)
.align_items(Alignment::Center) .align_items(Alignment::Center)
.height(Length::Shrink))] .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 { } else {
row![ row![
scrollable(column(sections) scrollable(column(sections)
@ -157,9 +197,6 @@ impl<'a, Message> Component<Message, Renderer> for NavBar<'a, Message> {
] ]
}) })
.height(Length::Fill) .height(Length::Fill)
.style(theme::Container::Custom(nav_bar_pages_style)),
])
.height(Length::Fill)
.style(theme::Container::Custom(nav_bar_sections_style)) .style(theme::Container::Custom(nav_bar_sections_style))
.into(); .into();
nav_bar nav_bar