2023-01-29 22:48:42 +00:00
|
|
|
use super::ImageProvider;
|
|
|
|
use gtk::prelude::*;
|
|
|
|
use gtk::{Button, IconTheme, Image, Label, Orientation};
|
|
|
|
use tracing::error;
|
|
|
|
|
2023-02-25 14:30:45 +00:00
|
|
|
#[cfg(any(feature = "music", feature = "workspaces", feature = "clipboard"))]
|
2023-01-29 22:48:42 +00:00
|
|
|
pub fn new_icon_button(input: &str, icon_theme: &IconTheme, size: i32) -> Button {
|
|
|
|
let button = Button::new();
|
|
|
|
|
|
|
|
if ImageProvider::is_definitely_image_input(input) {
|
|
|
|
let image = Image::new();
|
2023-02-02 20:37:02 +00:00
|
|
|
image.set_widget_name("image");
|
|
|
|
|
2023-01-29 22:48:42 +00:00
|
|
|
match ImageProvider::parse(input, icon_theme, size)
|
|
|
|
.and_then(|provider| provider.load_into_image(image.clone()))
|
|
|
|
{
|
|
|
|
Ok(_) => {
|
|
|
|
button.set_image(Some(&image));
|
|
|
|
button.set_always_show_image(true);
|
|
|
|
}
|
|
|
|
Err(err) => {
|
|
|
|
error!("{err:?}");
|
|
|
|
button.set_label(input);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
button.set_label(input);
|
|
|
|
}
|
|
|
|
|
|
|
|
button
|
|
|
|
}
|
|
|
|
|
2023-02-01 20:42:05 +00:00
|
|
|
#[cfg(feature = "music")]
|
2023-01-29 22:48:42 +00:00
|
|
|
pub fn new_icon_label(input: &str, icon_theme: &IconTheme, size: i32) -> gtk::Box {
|
|
|
|
let container = gtk::Box::new(Orientation::Horizontal, 0);
|
|
|
|
|
|
|
|
if ImageProvider::is_definitely_image_input(input) {
|
|
|
|
let image = Image::new();
|
2023-02-02 20:37:02 +00:00
|
|
|
image.set_widget_name("image");
|
|
|
|
|
2023-01-29 22:48:42 +00:00
|
|
|
container.add(&image);
|
|
|
|
|
|
|
|
if let Err(err) = ImageProvider::parse(input, icon_theme, size)
|
|
|
|
.and_then(|provider| provider.load_into_image(image))
|
|
|
|
{
|
|
|
|
error!("{err:?}");
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
let label = Label::new(Some(input));
|
2023-02-02 20:37:02 +00:00
|
|
|
label.set_widget_name("label");
|
|
|
|
|
2023-01-29 22:48:42 +00:00
|
|
|
container.add(&label);
|
|
|
|
}
|
|
|
|
|
|
|
|
container
|
|
|
|
}
|