diff --git a/src/app/browser/window/tab/item/page/navigation.rs b/src/app/browser/window/tab/item/page/navigation.rs index 9af86c5d..a36792ee 100644 --- a/src/app/browser/window/tab/item/page/navigation.rs +++ b/src/app/browser/window/tab/item/page/navigation.rs @@ -1,3 +1,4 @@ +mod auth; mod bookmark; mod database; mod history; @@ -6,6 +7,7 @@ mod reload; mod request; mod widget; +use auth::Auth; use bookmark::Bookmark; use history::History; use home::Home; @@ -22,6 +24,7 @@ use sqlite::Transaction; use std::rc::Rc; pub struct Navigation { + auth: Rc, profile: Rc, bookmark: Rc, history: Rc, @@ -37,6 +40,7 @@ impl Navigation { action: (Rc, Rc, Rc), ) -> Self { // Init components + let auth = Rc::new(Auth::new(action.1.clone())); let home = Rc::new(Home::new(action.1.clone())); let history = Rc::new(History::new(action.1.clone())); let reload = Rc::new(Reload::new(action.1.clone())); @@ -45,6 +49,7 @@ impl Navigation { // Init widget let widget = Rc::new(Widget::new( + auth.widget().gobject(), home.widget().gobject(), history.widget().gobject(), reload.widget().gobject(), @@ -54,6 +59,7 @@ impl Navigation { // Done Self { + auth, profile, bookmark, history, @@ -69,6 +75,7 @@ impl Navigation { pub fn update(&self, progress_fraction: Option) { let request = self.request.widget().gobject().text(); + self.auth.update(); self.bookmark .update(self.profile.bookmark.get(&request).is_ok()); self.history.update(); diff --git a/src/app/browser/window/tab/item/page/navigation/auth.rs b/src/app/browser/window/tab/item/page/navigation/auth.rs new file mode 100644 index 00000000..6b8f5505 --- /dev/null +++ b/src/app/browser/window/tab/item/page/navigation/auth.rs @@ -0,0 +1,30 @@ +mod widget; + +use widget::Widget; + +use crate::app::browser::window::Action; +use std::rc::Rc; + +pub struct Auth { + widget: Rc, +} + +impl Auth { + // Construct + pub fn new(action: Rc) -> Self { + Self { + widget: Rc::new(Widget::new(action.clone())), + } + } + + // Actions + pub fn update(&self) { + // @TODO + } + + // Getters + + pub fn widget(&self) -> &Rc { + &self.widget + } +} diff --git a/src/app/browser/window/tab/item/page/navigation/auth/widget.rs b/src/app/browser/window/tab/item/page/navigation/auth/widget.rs new file mode 100644 index 00000000..3df630b5 --- /dev/null +++ b/src/app/browser/window/tab/item/page/navigation/auth/widget.rs @@ -0,0 +1,38 @@ +use crate::app::browser::window::Action; +use gtk::{ + prelude::{ButtonExt, WidgetExt}, + Button, +}; +use std::rc::Rc; + +pub struct Widget { + gobject: Button, +} + +impl Widget { + // Construct + pub fn new(action: Rc) -> Self { + // Init gobject + let gobject = Button::builder() + .icon_name("avatar-default-symbolic") + .tooltip_text("Auth") + .sensitive(false) + .build(); + + // Init events @TODO + // gobject.connect_clicked(move |_| action.auth().activate()); + + // Return activated `Self` + Self { gobject } + } + + // Actions + pub fn update(&self, is_sensitive: bool) { + self.gobject.set_sensitive(is_sensitive); + } + + // Getters + pub fn gobject(&self) -> &Button { + &self.gobject + } +} diff --git a/src/app/browser/window/tab/item/page/navigation/widget.rs b/src/app/browser/window/tab/item/page/navigation/widget.rs index 220b79e5..daa975f4 100644 --- a/src/app/browser/window/tab/item/page/navigation/widget.rs +++ b/src/app/browser/window/tab/item/page/navigation/widget.rs @@ -13,6 +13,7 @@ pub struct Widget { impl Widget { // Construct pub fn new( + auth: &impl IsA, base: &impl IsA, history: &impl IsA, reload: &impl IsA, @@ -32,6 +33,7 @@ impl Widget { gobject.append(reload); gobject.append(request); gobject.append(bookmark); + gobject.append(auth); Self { gobject } }