chore: move add applets page to context drawer

This commit is contained in:
Eduardo Flores 2024-05-04 12:32:01 -07:00 committed by Ashley Wulber
parent 38861985a8
commit 11de7cbd4a
3 changed files with 55 additions and 144 deletions

View file

@ -3,8 +3,7 @@
use crate::config::Config;
use crate::pages::desktop::{
self, appearance,
dock::{self, applets::ADD_DOCK_APPLET_DIALOGUE_ID},
self, appearance, dock,
panel::{
self,
applets_inner::{self, AppletsPage, APPLET_DND_ICON_ID},
@ -168,22 +167,6 @@ impl cosmic::Application for SettingsApp {
widgets
}
fn on_close_requested(&self, id: window::Id) -> Option<Self::Message> {
let message = if id == *applets_inner::ADD_PANEL_APPLET_DIALOGUE_ID {
Message::PageMessage(crate::pages::Message::PanelApplet(
applets_inner::Message::ClosedAppletDialog,
))
} else if id == *ADD_DOCK_APPLET_DIALOGUE_ID {
Message::PageMessage(crate::pages::Message::DockApplet(dock::applets::Message(
applets_inner::Message::ClosedAppletDialog,
)))
} else {
return None;
};
Some(message)
}
fn on_escape(&mut self) -> Command<Self::Message> {
if self.search_active {
self.search_active = false;
@ -343,9 +326,7 @@ impl cosmic::Application for SettingsApp {
crate::pages::Message::PanelApplet(message) => {
if let Some(page) = self.pages.page_mut::<applets_inner::Page>() {
return page
.update(message, *applets_inner::ADD_PANEL_APPLET_DIALOGUE_ID)
.map(cosmic::app::Message::App);
return page.update(message).map(cosmic::app::Message::App);
}
}
@ -375,10 +356,7 @@ impl cosmic::Application for SettingsApp {
if let Some(page) = self.pages.page_mut::<applets_inner::Page>() {
return page
.update(
applets_inner::Message::PanelConfig(config),
*applets_inner::ADD_PANEL_APPLET_DIALOGUE_ID,
)
.update(applets_inner::Message::PanelConfig(config))
.map(cosmic::app::Message::App);
}
}
@ -410,10 +388,7 @@ impl cosmic::Application for SettingsApp {
);
if let Some(page) = self.pages.page_mut::<applets_inner::Page>() {
return page
.update(
applets_inner::Message::Applets(info_list),
*applets_inner::ADD_PANEL_APPLET_DIALOGUE_ID,
)
.update(applets_inner::Message::Applets(info_list))
.map(cosmic::app::Message::App);
}
}
@ -491,32 +466,6 @@ impl cosmic::Application for SettingsApp {
return page.dnd_icon();
}
if let Some(Some(page)) = (id == *applets_inner::ADD_PANEL_APPLET_DIALOGUE_ID)
.then(|| self.pages.page::<applets_inner::Page>())
{
return page.add_applet_view(crate::pages::Message::PanelApplet);
}
if let Some(Some(page)) =
(id == *ADD_DOCK_APPLET_DIALOGUE_ID).then(|| self.pages.page::<dock::applets::Page>())
{
return page.inner().add_applet_view(|msg| {
crate::pages::Message::DockApplet(dock::applets::Message(msg))
});
}
// if let Some(Some(page)) = (id == *keyboard::ADD_INPUT_SOURCE_DIALOGUE_ID)
// .then(|| self.pages.page::<input::Page>())
// {
// return page.add_input_source_view();
// }
// if let Some(Some(page)) = (id == *keyboard::SPECIAL_CHARACTER_DIALOGUE_ID)
// .then(|| self.pages.page::<input::Page>())
// {
// return page.special_character_key_view();
// }
if let Some(page) = self.pages.page::<desktop::wallpaper::Page>() {
if id == page.color_dialog {
return page.show_color_dialog();

View file

@ -1,4 +1,4 @@
use cosmic::{cosmic_config::CosmicConfigEntry, iced::window, iced_runtime::Command};
use cosmic::{cosmic_config::CosmicConfigEntry, iced::window, iced_runtime::Command, Element};
use cosmic_panel_config::CosmicPanelConfig;
use cosmic_settings_page::{self as page, section, Section};
use once_cell::sync::Lazy;
@ -9,12 +9,12 @@ use crate::{
app,
pages::{
self,
desktop::panel::applets_inner::{self, lists, AppletsPage, ReorderWidgetState},
desktop::panel::applets_inner::{
self, lists, AppletsPage, ContextDrawer, ReorderWidgetState,
},
},
};
pub static ADD_DOCK_APPLET_DIALOGUE_ID: Lazy<window::Id> = Lazy::new(window::Id::unique);
pub(crate) struct Page {
inner: applets_inner::Page,
}
@ -38,7 +38,7 @@ impl Default for Page {
current_config,
reorder_widget_state: ReorderWidgetState::default(),
search: String::new(),
has_dialog: false,
context: None,
},
}
}
@ -59,7 +59,7 @@ pub struct Message(pub applets_inner::Message);
impl Page {
pub fn update(&mut self, message: Message) -> Command<app::Message> {
self.inner.update(message.0, *ADD_DOCK_APPLET_DIALOGUE_ID)
self.inner.update(message.0)
}
}
@ -76,7 +76,16 @@ impl page::Page<crate::pages::Message> for Page {
fn info(&self) -> page::Info {
page::Info::new("dock_applets", "preferences-dock-symbolic")
// .title(fl!("applets"))
}
fn context_drawer(&self) -> Option<Element<crate::pages::Message>> {
Some(match self.inner.context {
Some(ContextDrawer::AddApplet) => self
.inner
.add_applet_view(|msg| crate::pages::Message::DockApplet(Message(msg))),
None => return None,
})
}
}

View file

@ -2,8 +2,8 @@ use button::StyleSheet as ButtonStyleSheet;
use cosmic::iced_style::container::StyleSheet;
use cosmic::widget::{
button, column, container, header_bar, horizontal_space, icon, list_column, row, scrollable,
text, text_input, Column,
self, button, column, container, header_bar, horizontal_space, icon, list_column, row,
scrollable, text, text_input, Column,
};
use cosmic::{
@ -69,7 +69,6 @@ const SPACING: f32 = 8.0;
const DRAG_START_DISTANCE_SQUARED: f32 = 64.0;
pub static APPLET_DND_ICON_ID: Lazy<window::Id> = Lazy::new(window::Id::unique);
pub static ADD_PANEL_APPLET_DIALOGUE_ID: Lazy<window::Id> = Lazy::new(window::Id::unique);
pub struct Page {
pub(crate) available_entries: Vec<Applet<'static>>,
@ -77,7 +76,7 @@ pub struct Page {
pub(crate) current_config: Option<CosmicPanelConfig>,
pub(crate) reorder_widget_state: ReorderWidgetState,
pub(crate) search: String,
pub(crate) has_dialog: bool,
pub(crate) context: Option<ContextDrawer>,
}
impl Default for Page {
@ -98,7 +97,7 @@ impl Default for Page {
current_config,
reorder_widget_state: ReorderWidgetState::default(),
search: String::new(),
has_dialog: false,
context: None,
}
}
}
@ -134,6 +133,16 @@ impl page::Page<crate::pages::Message> for Page {
page::Info::new("panel_applets", "preferences-dock-symbolic")
// .title(fl!("applets"))
}
fn context_drawer(&self) -> Option<Element<pages::Message>> {
Some(match self.context {
Some(ContextDrawer::AddApplet) => {
self.add_applet_view(crate::pages::Message::PanelApplet)
}
None => return None,
})
}
}
impl page::AutoBind<crate::pages::Message> for Page {}
@ -156,9 +165,6 @@ pub enum Message {
Search(String),
AddApplet(Applet<'static>),
AddAppletDialog,
CloseAppletDialog,
ClosedAppletDialog,
DragAppletDialog,
Save,
Cancel,
}
@ -184,13 +190,14 @@ impl Debug for Message {
Message::Search(_) => write!(f, "Search"),
Message::AddApplet(_) => write!(f, "AddApplet"),
Message::AddAppletDialog => write!(f, "AddAppletDialogue"),
Message::CloseAppletDialog => write!(f, "CloseAppletDialogue"),
Message::DragAppletDialog => write!(f, "DragAppletDialogue"),
Message::ClosedAppletDialog => write!(f, "ClosedAppletDialogue"),
}
}
}
pub enum ContextDrawer {
AddApplet,
}
impl Page {
pub fn save(&self) {
let Some(config) = self.current_config.as_ref() else {
@ -216,7 +223,7 @@ impl Page {
pub fn add_applet_view<T: Fn(Message) -> crate::pages::Message + Copy + 'static>(
&self,
msg_map: T,
) -> Element<app::Message> {
) -> Element<crate::pages::Message> {
let mut list_column = list_column();
let mut has_some = false;
for info in self
@ -282,9 +289,7 @@ impl Page {
}),
})
.padding(8.0)
.on_press(app::Message::PageMessage(msg_map(Message::AddApplet(
info.clone(),
))))
.on_press(msg_map(Message::AddApplet(info.clone())))
.into(),
])
.padding([0, 32, 0, 32])
@ -299,48 +304,23 @@ impl Page {
.horizontal_alignment(Horizontal::Center),
);
}
column::with_children(vec![
header_bar()
.title(fl!("add-applet"))
.on_close(app::Message::PageMessage(msg_map(
Message::CloseAppletDialog,
)))
.on_drag(app::Message::PageMessage(msg_map(
Message::DragAppletDialog,
)))
text_input::search_input(fl!("search-applets"), &self.search)
.on_input(move |s| msg_map(Message::Search(s)))
.on_paste(move |s| msg_map(Message::Search(s)))
.width(Length::Fixed(312.0))
.into(),
container(
scrollable(
column::with_children(vec![
text(fl!("add-applet")).size(24).width(Length::Fill).into(),
text_input::search_input(fl!("search-applets"), &self.search)
.on_input(move |s| {
app::Message::PageMessage(msg_map(Message::Search(s)))
})
.on_paste(move |s| {
app::Message::PageMessage(msg_map(Message::Search(s)))
})
.width(Length::Fixed(312.0))
.into(),
list_column.into(),
])
.padding([0, 64, 32, 64])
.align_items(Alignment::Center)
.spacing(8.0),
)
.width(Length::Fill)
.height(Length::Fill),
)
.style(theme::Container::Background)
.width(Length::Fill)
.height(Length::Fill)
.into(),
scrollable(list_column).into(),
])
.padding([0, 64, 32, 64])
.align_items(Alignment::Center)
.spacing(8.0)
.into()
}
#[allow(clippy::too_many_lines)]
pub fn update(&mut self, message: Message, window_id: window::Id) -> Command<app::Message> {
pub fn update(&mut self, message: Message) -> Command<app::Message> {
match message {
Message::PanelConfig(c) => {
self.current_config = Some(c);
@ -464,38 +444,12 @@ impl Page {
list.push(applet.id.to_string());
self.save();
return commands::window::close_window(window_id);
}
Message::AddAppletDialog => {
self.has_dialog = true;
let window_settings = SctkWindowSettings {
window_id,
app_id: Some("com.system76.CosmicSettings".to_string()),
title: Some(fl!("add-applet")),
parent: Some(window::Id::MAIN),
autosize: false,
size_limits: layout::Limits::NONE
.min_width(300.0)
.max_width(800.0)
.min_height(200.0)
.max_height(1080.0),
size: (512, 420),
resizable: None,
client_decorations: true,
transparent: true,
..Default::default()
};
return commands::window::get_window(window_settings);
}
Message::ClosedAppletDialog => {
self.has_dialog = false;
}
Message::CloseAppletDialog => {
self.has_dialog = false;
return commands::window::close_window(window_id);
}
Message::DragAppletDialog => {
return commands::window::start_drag_window(window_id);
self.context = Some(ContextDrawer::AddApplet);
return cosmic::command::message(app::Message::OpenContextDrawer(Cow::Owned(fl!(
"add-applet"
))));
}
};
Command::none()
@ -521,8 +475,7 @@ pub fn lists<
column::with_children(vec![
row::with_children(vec![
text(fl!("applets")).width(Length::Fill).size(24).into(),
(button.on_press_maybe((!page.has_dialog).then_some(Message::AddAppletDialog)))
.into(),
(button.on_press(Message::AddAppletDialog)).into(),
])
.into(),
text(fl!("start-segment")).into(),