1
0
Fork 0
mirror of https://github.com/Zedfrigg/ironbar.git synced 2025-04-20 11:54:23 +02:00
ironbar/src/modules/mod.rs

52 lines
1.1 KiB
Rust
Raw Normal View History

2022-08-14 14:30:13 +01:00
/// Displays the current date and time.
///
/// A custom date/time format string can be set in the config.
///
/// Clicking the widget opens a popup containing the current time
/// with second-level precision and a calendar.
pub mod clock;
pub mod launcher;
pub mod mpd;
pub mod script;
pub mod sysinfo;
pub mod tray;
pub mod workspaces;
/// Shamelessly stolen from here:
/// <https://github.com/zeroeightysix/rustbar/blob/master/src/modules/module.rs>
use glib::IsA;
use gtk::{Application, Widget};
use serde::de::DeserializeOwned;
use serde_json::Value;
use crate::config::BarPosition;
2022-08-14 14:30:13 +01:00
#[derive(Clone)]
pub enum ModuleLocation {
Left,
Center,
Right,
}
pub struct ModuleInfo<'a> {
pub app: &'a Application,
pub location: ModuleLocation,
pub bar_position: &'a BarPosition,
pub output_name: &'a str
2022-08-14 14:30:13 +01:00
}
pub trait Module<W>
where
W: IsA<Widget>,
{
/// Consumes the module config
/// and produces a GTK widget of type `W`
fn into_widget(self, info: &ModuleInfo) -> W;
fn from_value(v: &Value) -> Box<Self>
where
Self: DeserializeOwned,
{
serde_json::from_value(v.clone()).unwrap()
}
}