mod tab; use std::sync::Arc; use tab::Tab; use gtk::{gio::SimpleAction, glib::GString, prelude::BoxExt, Box, Orientation}; pub struct Main { tab: Arc, widget: Box, } impl Main { // Construct pub fn new(action_tab_page_reload: &SimpleAction, action_update: &SimpleAction) -> Self { // Init components let tab = Arc::new(Tab::new()); tab.activate(tab.clone()); tab.append(Some(GString::from("gemini://geminiprotocol.net/")), true); // demo tab @TODO replace with session restore feature // GTK let widget = Box::builder().orientation(Orientation::Vertical).build(); widget.append(tab.widget()); // Init struct Self { tab, widget } } // Actions pub fn tab_append(&self, tab_page_navigation_request_text: Option) { self.tab.append(tab_page_navigation_request_text, true); } pub fn tab_page_reload(&self) { self.tab.page_reload(); } pub fn tab_close(&self) { self.tab.close(); } pub fn tab_close_all(&self) { self.tab.close_all(); } pub fn tab_pin(&self) { self.tab.pin(); } pub fn update(&self) { self.tab.update(); } // Getters pub fn tab_page_title(&self) -> Option { self.tab.page_title() } pub fn tab_page_description(&self) -> Option { self.tab.page_description() } pub fn widget(&self) -> &Box { &self.widget } }