use adw::{TabPage, TabView};
use gtk::{
gio::{Icon, MenuModel},
prelude::IsA,
};
const DEFAULT_TAB_ICON: &str = "view-pin-symbolic";
pub struct Widget {
gobject: TabView,
}
impl Widget {
pub fn new(menu_model: &impl IsA<MenuModel>) -> Self {
let gobject = TabView::builder().menu_model(menu_model).build();
if let Ok(default_icon) = Icon::for_string(DEFAULT_TAB_ICON) {
gobject.set_default_icon(&default_icon);
}
Self { gobject }
}
pub fn close(&self, position: Option<i32>) {
if let Some(page) = self.page(position) {
self.gobject.set_page_pinned(&page, false);
self.gobject.close_page(&page);
}
}
pub fn close_all(&self) {
while let Some(page) = self.gobject.selected_page() {
self.gobject.set_page_pinned(&page, false);
self.gobject.close_page(&page);
}
}
pub fn pin(&self, position: Option<i32>) {
if let Some(page) = self.page(position) {
self.gobject.set_page_pinned(&page, !page.is_pinned()); }
}
pub fn page(&self, position: Option<i32>) -> Option<TabPage> {
match position {
Some(value) => Some(self.gobject.nth_page(value)),
None => self.gobject.selected_page(),
}
}
pub fn gobject(&self) -> &TabView {
&self.gobject
}
}