use glib::Object; use gtk::{glib, prelude::*, subclass::prelude::*}; use kifu_core::ui::GamePreviewElement; #[derive(Default)] pub struct GamePreviewPrivate; #[glib::object_subclass] impl ObjectSubclass for GamePreviewPrivate { const NAME: &'static str = "GamePreview"; type Type = GamePreview; type ParentType = gtk::Box; } impl ObjectImpl for GamePreviewPrivate {} impl WidgetImpl for GamePreviewPrivate {} impl BoxImpl for GamePreviewPrivate {} glib::wrapper! { pub struct GamePreview(ObjectSubclass<GamePreviewPrivate>) @extends gtk::Box, gtk::Widget, @implements gtk::Orientable; } impl GamePreview { pub fn new(element: GamePreviewElement) -> GamePreview { let s: Self = Object::builder().build(); s.set_orientation(gtk::Orientation::Horizontal); println!("game_preview: {:?}", element); let black_player = match element.black_rank { Some(rank) => format!("{} ({})", element.black_player, rank.to_string()), None => element.black_player, }; let white_player = match element.white_rank { Some(rank) => format!("{} ({})", element.white_player, rank.to_string()), None => element.white_player, }; s.append(>k::Label::new(Some(&black_player))); s.append(>k::Label::new(Some(&white_player))); s } }