use std::fmt;
#[derive(Clone, Debug)]
pub struct Properties {
pub category: Category,
pub id: String,
pub title: String,
pub status: Status,
pub window_id: i32, pub icon_theme_path: String,
pub item_is_menu: bool,
pub icon_name: String,
pub icon_pixmap: Vec<Icon>,
pub overlay_icon_name: String,
pub overlay_icon_pixmap: Vec<Icon>,
pub attention_icon_name: String,
pub attention_icon_pixmap: Vec<Icon>,
pub attention_movie_name: String,
pub tool_tip: ToolTip,
}
impl Default for Properties {
fn default() -> Self {
Properties {
category: Category::ApplicationStatus,
id: Default::default(),
title: Default::default(),
status: Status::Active,
window_id: Default::default(),
icon_theme_path: Default::default(),
item_is_menu: Default::default(),
icon_name: Default::default(),
icon_pixmap: Default::default(),
overlay_icon_name: Default::default(),
overlay_icon_pixmap: Default::default(),
attention_icon_name: Default::default(),
attention_icon_pixmap: Default::default(),
attention_movie_name: Default::default(),
tool_tip: Default::default(),
}
}
}
#[derive(Copy, Clone, Debug)]
pub enum Category {
ApplicationStatus,
Communications,
SystemServices,
Hardware,
}
impl fmt::Display for Category {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
let r = match *self {
Category::ApplicationStatus => "ApplicationStatus",
Category::Communications => "Communications",
Category::SystemServices => "SystemServices",
Category::Hardware => "Hardware",
};
f.write_str(r)
}
}
#[derive(Copy, Clone, Debug)]
pub enum Status {
Passive,
Active,
NeedsAttention,
}
impl fmt::Display for Status {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
let r = match *self {
Status::Passive => "Passive",
Status::Active => "Active",
Status::NeedsAttention => "NeedsAttention",
};
f.write_str(r)
}
}
#[derive(Clone, Debug, Default)]
pub struct ToolTip {
pub icon_name: String,
pub icon_pixmap: Vec<Icon>,
pub title: String,
pub description: String,
}
impl From<ToolTip> for (String, Vec<(i32, i32, Vec<u8>)>, String, String) {
fn from(tooltip: ToolTip) -> Self {
(
tooltip.icon_name,
tooltip.icon_pixmap.into_iter().map(Into::into).collect(),
tooltip.title,
tooltip.description,
)
}
}
#[derive(Clone, Debug)]
pub struct Icon {
pub width: i32,
pub height: i32,
pub data: Vec<u8>,
}
impl From<Icon> for (i32, i32, Vec<u8>) {
fn from(icon: Icon) -> Self {
(icon.width, icon.height, icon.data)
}
}