feat: panel position on screen

This commit is contained in:
Ashley Wulber 2023-05-23 16:40:29 -04:00 committed by Michael Aaron Murphy
parent 215648324a
commit f1f12b5e21
No known key found for this signature in database
GPG key ID: B2732D4240C9212C
3 changed files with 56 additions and 14 deletions

2
Cargo.lock generated
View file

@ -798,7 +798,7 @@ dependencies = [
[[package]]
name = "cosmic-panel-config"
version = "0.1.0"
source = "git+https://github.com/pop-os/cosmic-panel#aae46287cdb349381743fe530f281333c7ebfa83"
source = "git+https://github.com/pop-os/cosmic-panel#1ef8ca7dd07bbbc6bd86ce8421dc3c759d4a837b"
dependencies = [
"anyhow",
"cosmic-config 0.1.0 (git+https://github.com/pop-os/libcosmic?tag=cosmic-config-derive)",

View file

@ -1,7 +1,8 @@
use cosmic::{
iced::widget::horizontal_space,
iced::Length,
widget::{settings, toggler},
iced_widget::pick_list,
widget::{settings, text, toggler},
Element,
};
@ -11,6 +12,7 @@ use cosmic_panel_config::{AutoHide, CosmicPanelConfig, CosmicPanelOuput, PanelAn
use cosmic_settings_page::Section;
use cosmic_settings_page::{self as page, section};
use slotmap::SlotMap;
use std::borrow::Cow;
pub struct Page {
config_helper: Option<cosmic_config::Config>,
@ -64,7 +66,11 @@ impl page::AutoBind<crate::pages::Message> for Page {}
pub fn behavior_and_position() -> Section<crate::pages::Message> {
Section::default()
.title(fl!("panel-behavior-and-position"))
.descriptions(vec![fl!("panel-behavior-and-position", "autohide")])
.descriptions(vec![
fl!("panel-behavior-and-position", "autohide"),
fl!("panel-behavior-and-position", "position"),
fl!("panel-behavior-and-position", "display"),
])
.view::<Page>(|_binder, page, section| {
let descriptions = &section.descriptions;
let panel_config = page.panel_config.as_ref().unwrap();
@ -75,6 +81,20 @@ pub fn behavior_and_position() -> Section<crate::pages::Message> {
Message::AutoHidePanel(value)
}),
))
.add(settings::item(
&descriptions[1],
pick_list(
Cow::from(vec![
Anchor(PanelAnchor::Top),
Anchor(PanelAnchor::Bottom),
Anchor(PanelAnchor::Left),
Anchor(PanelAnchor::Right),
]),
Some(Anchor(panel_config.anchor)),
|a| Message::PanelAnchor(a.0),
),
))
.add(settings::item(&descriptions[2], text("todo")))
.apply(Element::from)
.map(crate::pages::Message::Panel)
})
@ -82,14 +102,15 @@ pub fn behavior_and_position() -> Section<crate::pages::Message> {
pub fn style() -> Section<crate::pages::Message> {
Section::default()
.title(fl!("hot-corner"))
.descriptions(vec![fl!("hot-corner", "top-left-corner")])
.title(fl!("panel-style"))
.descriptions(vec![
fl!("panel-style", "anchor-gap"),
fl!("panel-style", "extend"),
fl!("panel-style", "appearance"),
fl!("panel-style", "size"),
fl!("panel-style", "background-opacity"),
])
.view::<Page>(|binder, _page, section| {
let desktop = binder
.page::<super::Page>()
.expect("desktop page not found");
let descriptions = &section.descriptions;
settings::view_section(&section.title)
.apply(Element::from)
.map(crate::pages::Message::Desktop)
@ -98,8 +119,8 @@ pub fn style() -> Section<crate::pages::Message> {
pub fn configuration() -> Section<crate::pages::Message> {
Section::default()
.title(fl!("hot-corner"))
.descriptions(vec![fl!("hot-corner", "top-left-corner")])
.title(fl!("panel-applets"))
.descriptions(vec![fl!("panel-applets", "desc")])
.view::<Page>(|binder, _page, section| {
let desktop = binder
.page::<super::Page>()
@ -114,8 +135,11 @@ pub fn configuration() -> Section<crate::pages::Message> {
pub fn add_panel() -> Section<crate::pages::Message> {
Section::default()
.title(fl!("hot-corner"))
.descriptions(vec![fl!("hot-corner", "top-left-corner")])
.title(fl!("panel-missing"))
.descriptions(vec![
fl!("panel-missing", "desc"),
fl!("panel-missing", "fix"),
])
.view::<Page>(|binder, _page, section| {
let desktop = binder
.page::<super::Page>()
@ -128,6 +152,20 @@ pub fn add_panel() -> Section<crate::pages::Message> {
})
}
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub struct Anchor(PanelAnchor);
impl ToString for Anchor {
fn to_string(&self) -> String {
match self.0 {
PanelAnchor::Top => fl!("panel-top"),
PanelAnchor::Bottom => fl!("panel-bottom"),
PanelAnchor::Left => fl!("panel-left"),
PanelAnchor::Right => fl!("panel-right"),
}
}
}
#[derive(Clone, Debug)]
pub enum Message {
// panel messages

View file

@ -57,6 +57,10 @@ panel-behavior-and-position = Behavior and Positions
.autohide = Automatically hide panel
.position = Position on screen
.display = Show on display
panel-top = Top
panel-bottom = Bottom
panel-left = Left
panel-right = Right
panel-style = Style
.anchor-gap = Gap between panel and screen edges