forked from max_ag/wayland_panel
separated app to separate file
This commit is contained in:
parent
80d13f40e8
commit
23fe371656
2 changed files with 75 additions and 73 deletions
73
src/app.rs
Normal file
73
src/app.rs
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
use crate::widget::{Message, PanelWidget};
|
||||||
|
use crate::widgets::battery::BatteryWidget;
|
||||||
|
use crate::widgets::clock::ClockWidget;
|
||||||
|
use crate::widgets::spacer::Spacer;
|
||||||
|
|
||||||
|
use iced::Color;
|
||||||
|
use iced::Element;
|
||||||
|
use iced::Subscription;
|
||||||
|
use iced::Task;
|
||||||
|
|
||||||
|
pub struct App {
|
||||||
|
widgets: Vec<Box<dyn PanelWidget>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl App {
|
||||||
|
pub const WINDOW_HEIGHT: u32 = 32;
|
||||||
|
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self {
|
||||||
|
widgets: vec![
|
||||||
|
Box::new(ClockWidget::new()),
|
||||||
|
Box::new(Spacer::new(iced::Length::Fill)),
|
||||||
|
Box::new(BatteryWidget::new()),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn name() -> String {
|
||||||
|
"wayland_panel".into()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn view(&self, id: iced::window::Id) -> Element<'_, Message> {
|
||||||
|
if let Some(elem) = self
|
||||||
|
.widgets
|
||||||
|
.iter()
|
||||||
|
.find(|widget| widget.own_window(id))
|
||||||
|
.map(|widget| widget.view(id))
|
||||||
|
{
|
||||||
|
return elem;
|
||||||
|
}
|
||||||
|
|
||||||
|
iced::widget::Row::with_children(self.widgets.iter().map(|widget| widget.view(id)))
|
||||||
|
.padding(iced::Padding::from([0, 5]))
|
||||||
|
.height(iced::Length::Fill)
|
||||||
|
.width(iced::Length::Fill)
|
||||||
|
.align_y(iced::Alignment::Center)
|
||||||
|
.into()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn update(&mut self, message: Message) -> Task<Message> {
|
||||||
|
let mut output = Vec::new();
|
||||||
|
for widget in &mut self.widgets {
|
||||||
|
output.push(widget.update(&message));
|
||||||
|
}
|
||||||
|
|
||||||
|
Task::batch(output)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn style(&self, theme: &iced::Theme) -> iced::theme::Style {
|
||||||
|
iced::theme::Style {
|
||||||
|
background_color: Color::TRANSPARENT,
|
||||||
|
text_color: theme.palette().text,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn theme(&self, _id: iced::window::Id) -> iced::Theme {
|
||||||
|
iced::Theme::GruvboxDark
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn subscription(&self) -> iced::Subscription<Message> {
|
||||||
|
Subscription::batch(self.widgets.iter().map(|w| w.subscribe()))
|
||||||
|
}
|
||||||
|
}
|
||||||
75
src/main.rs
75
src/main.rs
|
|
@ -1,19 +1,12 @@
|
||||||
use iced::Color;
|
|
||||||
use iced::Element;
|
|
||||||
use iced::Subscription;
|
|
||||||
use iced::Task;
|
|
||||||
use iced_layershell::daemon;
|
use iced_layershell::daemon;
|
||||||
use iced_layershell::reexport::Anchor;
|
use iced_layershell::reexport::Anchor;
|
||||||
use iced_layershell::settings::LayerShellSettings;
|
use iced_layershell::settings::LayerShellSettings;
|
||||||
use iced_layershell::settings::Settings;
|
use iced_layershell::settings::Settings;
|
||||||
|
|
||||||
|
mod app;
|
||||||
mod widget;
|
mod widget;
|
||||||
mod widgets;
|
mod widgets;
|
||||||
|
use app::App;
|
||||||
use crate::widget::Message;
|
|
||||||
use crate::widgets::battery::BatteryWidget;
|
|
||||||
use crate::widgets::clock::ClockWidget;
|
|
||||||
use crate::widgets::spacer::Spacer;
|
|
||||||
|
|
||||||
pub fn main() -> Result<(), iced_layershell::Error> {
|
pub fn main() -> Result<(), iced_layershell::Error> {
|
||||||
daemon(App::new, App::name, App::update, App::view)
|
daemon(App::new, App::name, App::update, App::view)
|
||||||
|
|
@ -32,67 +25,3 @@ pub fn main() -> Result<(), iced_layershell::Error> {
|
||||||
})
|
})
|
||||||
.run()
|
.run()
|
||||||
}
|
}
|
||||||
|
|
||||||
struct App {
|
|
||||||
widgets: Vec<Box<dyn widget::PanelWidget>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl App {
|
|
||||||
const WINDOW_HEIGHT: u32 = 32;
|
|
||||||
|
|
||||||
fn new() -> Self {
|
|
||||||
Self {
|
|
||||||
widgets: vec![
|
|
||||||
Box::new(ClockWidget::new()),
|
|
||||||
Box::new(Spacer::new(iced::Length::Fill)),
|
|
||||||
Box::new(BatteryWidget::new()),
|
|
||||||
],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn name() -> String {
|
|
||||||
"wayland_panel".into()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn view(&self, id: iced::window::Id) -> Element<'_, Message> {
|
|
||||||
if let Some(elem) = self
|
|
||||||
.widgets
|
|
||||||
.iter()
|
|
||||||
.find(|widget| widget.own_window(id))
|
|
||||||
.map(|widget| widget.view(id))
|
|
||||||
{
|
|
||||||
return elem;
|
|
||||||
}
|
|
||||||
|
|
||||||
iced::widget::Row::with_children(self.widgets.iter().map(|widget| widget.view(id)))
|
|
||||||
.padding(iced::Padding::from([0, 5]))
|
|
||||||
.height(iced::Length::Fill)
|
|
||||||
.width(iced::Length::Fill)
|
|
||||||
.align_y(iced::Alignment::Center)
|
|
||||||
.into()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn update(&mut self, message: Message) -> Task<Message> {
|
|
||||||
let mut output = Vec::new();
|
|
||||||
for widget in &mut self.widgets {
|
|
||||||
output.push(widget.update(&message));
|
|
||||||
}
|
|
||||||
|
|
||||||
Task::batch(output)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn style(&self, theme: &iced::Theme) -> iced::theme::Style {
|
|
||||||
iced::theme::Style {
|
|
||||||
background_color: Color::TRANSPARENT,
|
|
||||||
text_color: theme.palette().text,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn theme(&self, _id: iced::window::Id) -> iced::Theme {
|
|
||||||
iced::Theme::GruvboxDark
|
|
||||||
}
|
|
||||||
|
|
||||||
fn subscription(&self) -> iced::Subscription<Message> {
|
|
||||||
Subscription::batch(self.widgets.iter().map(|w| w.subscribe()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue