Add more pages to example

This commit is contained in:
Jeremy Soller 2022-12-20 14:38:32 -07:00
parent fe825a3f40
commit 0ad2ffe2d4
No known key found for this signature in database
GPG key ID: 87F211AF2BE4C2FE
2 changed files with 67 additions and 20 deletions

View file

@ -4,23 +4,45 @@
use cosmic::{ use cosmic::{
iced_native::window, iced_native::window,
iced::widget::{ iced::widget::{
column, container, horizontal_space, pick_list, progress_bar, radio, row, slider, checkbox, column, container, horizontal_space, pick_list, progress_bar, radio, row, slider, checkbox, text,
}, },
iced::{self, Alignment, Application, Command, Length}, iced::{self, Alignment, Application, Command, Length},
iced_lazy::responsive, iced_lazy::responsive,
iced_winit::window::{close, drag, toggle_maximize, minimize}, iced_winit::window::{close, 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, spin_button::{SpinButtonModel, SpinMessage}}, widget::{button, nav_button, header_bar, settings, scrollable, toggler, spin_button::{SpinButtonModel, SpinMessage}},
Element, Element,
ElementExt, ElementExt,
}; };
use std::{collections::BTreeMap, vec}; use std::vec;
use theme::Button as ButtonTheme; use theme::Button as ButtonTheme;
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub enum Page {
//TODO: what should the default page be?
#[default]
Demo,
WiFi,
Networking,
Bluetooth,
Desktop,
InputDevices,
Displays,
PowerAndBattery,
Sound,
PrintersAndScanners,
PrivacyAndSecurity,
SystemAndAccounts,
UpdatesAndRecovery,
TimeAndLanguage,
Accessibility,
Applications,
}
#[derive(Default)] #[derive(Default)]
pub struct Window { pub struct Window {
title: String, title: String,
page: u8, page: Page,
debug: bool, debug: bool,
theme: Theme, theme: Theme,
slider_value: f32, slider_value: f32,
@ -53,7 +75,7 @@ impl Window {
#[allow(dead_code)] #[allow(dead_code)]
#[derive(Clone, Copy, Debug)] #[derive(Clone, Copy, Debug)]
pub enum Message { pub enum Message {
Page(u8), Page(Page),
Debug(bool), Debug(bool),
ThemeChanged(Theme), ThemeChanged(Theme),
ButtonPressed, ButtonPressed,
@ -149,19 +171,40 @@ impl Application for Window {
let content = responsive(|size| { let content = responsive(|size| {
let condensed = size.width < 900.0; let condensed = size.width < 900.0;
let sidebar: Element<_> = iced::widget::container( let sidebar: Element<_> = iced::widget::container(scrollable(iced::widget::column!(
iced::widget::column!( cosmic::nav_button!("document-properties-symbolic", "Demo", condensed, self.page == Page::Demo)
cosmic::nav_button!("network-wireless-symbolic", "Wi-Fi", condensed, self.page == 0) .on_press(Message::Page(Page::Demo)),
.on_press(Message::Page(0)), cosmic::nav_button!("network-wireless-symbolic", "Wi-Fi", condensed, self.page == Page::WiFi)
cosmic::nav_button!("network-wired-symbolic", "Networking", condensed, self.page == 1) .on_press(Message::Page(Page::WiFi)),
.on_press(Message::Page(1)), cosmic::nav_button!("network-workgroup-symbolic", "Networking", condensed, self.page == Page::Networking)
cosmic::nav_button!("bluetooth-active-symbolic", "Bluetooth", condensed, self.page == 2) .on_press(Message::Page(Page::Networking)),
.on_press(Message::Page(2)), cosmic::nav_button!("bluetooth-active-symbolic", "Bluetooth", condensed, self.page == Page::Bluetooth)
cosmic::nav_button!("preferences-desktop-wallpaper-symbolic", "Desktop", condensed, self.page == 3) .on_press(Message::Page(Page::Bluetooth)),
.on_press(Message::Page(3)), cosmic::nav_button!("preferences-desktop-wallpaper-symbolic", "Desktop", condensed, self.page == Page::Desktop)
) .on_press(Message::Page(Page::Desktop)),
.spacing(14) cosmic::nav_button!("input-keyboard-symbolic", "Input Devices", condensed, self.page == Page::InputDevices)
) .on_press(Message::Page(Page::InputDevices)),
cosmic::nav_button!("preferences-desktop-display-symbolic", "Displays", condensed, self.page == Page::Displays)
.on_press(Message::Page(Page::Displays)),
cosmic::nav_button!("battery-full-charged-symbolic", "Power & Battery", condensed, self.page == Page::PowerAndBattery)
.on_press(Message::Page(Page::PowerAndBattery)),
cosmic::nav_button!("multimedia-volume-control-symbolic", "Sound", condensed, self.page == Page::Sound)
.on_press(Message::Page(Page::Sound)),
cosmic::nav_button!("printer-symbolic", "Printers & Scanners", condensed, self.page == Page::PrintersAndScanners)
.on_press(Message::Page(Page::PrintersAndScanners)),
cosmic::nav_button!("preferences-system-privacy-symbolic", "Privacy & Security", condensed, self.page == Page::PrivacyAndSecurity)
.on_press(Message::Page(Page::PrivacyAndSecurity)),
cosmic::nav_button!("system-users-symbolic", "System & Accounts", condensed, self.page == Page::SystemAndAccounts)
.on_press(Message::Page(Page::SystemAndAccounts)),
cosmic::nav_button!("software-update-available-symbolic", "Updates & Recovery", condensed, self.page == Page::UpdatesAndRecovery)
.on_press(Message::Page(Page::UpdatesAndRecovery)),
cosmic::nav_button!("preferences-system-time-symbolic", "Time & Language", condensed, self.page == Page::TimeAndLanguage)
.on_press(Message::Page(Page::TimeAndLanguage)),
cosmic::nav_button!("preferences-desktop-accessibility-symbolic", "Accessibility", condensed, self.page == Page::Accessibility)
.on_press(Message::Page(Page::Accessibility)),
cosmic::nav_button!("preferences-desktop-apps-symbolic", "Applications", condensed, self.page == Page::Applications)
.on_press(Message::Page(Page::Applications)),
).spacing(14)))
.height(Length::Fill) .height(Length::Fill)
.padding(11) .padding(11)
.max_width(300) .max_width(300)
@ -181,7 +224,8 @@ impl Application for Window {
); );
let content: Element<_> = match self.page { let content: Element<_> = match self.page {
_ => settings::view_column(vec![ Page::Demo => settings::view_column(vec![
text("Demo").size(32).into(),
settings::view_section("Debug") settings::view_section("Debug")
.add(settings::item("Debug theme", choose_theme)) .add(settings::item("Debug theme", choose_theme))
.add(settings::item( .add(settings::item(
@ -252,6 +296,9 @@ impl Application for Window {
.into() .into()
]) ])
.into(), .into(),
_ => settings::view_column(vec![
text("Unimplemented page").into()
]).into(),
}; };
let mut widgets = Vec::with_capacity(2); let mut widgets = Vec::with_capacity(2);

View file

@ -36,7 +36,7 @@ pub mod nav_bar {
.vertical_alignment($crate::iced::alignment::Vertical::Center), .vertical_alignment($crate::iced::alignment::Vertical::Center),
$crate::iced::widget::horizontal_space($crate::iced::Length::Fill), $crate::iced::widget::horizontal_space($crate::iced::Length::Fill),
) )
.padding([0, 16]) .padding([4, 16])
.spacing(8) .spacing(8)
) )
.style(if $active { .style(if $active {