mirror of
https://github.com/YGGverse/Yoda.git
synced 2025-01-15 17:20:08 +00:00
connect bookmark action
This commit is contained in:
parent
7b9bd95c09
commit
d0a7c3079d
@ -7,11 +7,11 @@ mod window;
|
||||
|
||||
use about::About;
|
||||
use action::Action;
|
||||
use welcome::Welcome;
|
||||
//use welcome::Welcome;
|
||||
use widget::Widget;
|
||||
use window::Window;
|
||||
|
||||
use crate::profile::Profile;
|
||||
use crate::Profile;
|
||||
use gtk::{
|
||||
gio::{Cancellable, File},
|
||||
prelude::{GtkWindowExt, IsA},
|
||||
@ -32,7 +32,7 @@ impl Browser {
|
||||
pub fn new(profile: Rc<Profile>) -> Browser {
|
||||
// Init components
|
||||
let action = Rc::new(Action::new());
|
||||
let window = Rc::new(Window::new(action.clone()));
|
||||
let window = Rc::new(Window::new(profile.clone(), action.clone()));
|
||||
|
||||
// Init widget
|
||||
let widget = Rc::new(Widget::new(
|
||||
|
@ -11,6 +11,7 @@ use tab::Tab;
|
||||
use widget::Widget;
|
||||
|
||||
use crate::app::browser::action::Action as BrowserAction;
|
||||
use crate::Profile;
|
||||
use gtk::glib::GString;
|
||||
use std::rc::Rc;
|
||||
|
||||
@ -22,15 +23,12 @@ pub struct Window {
|
||||
|
||||
impl Window {
|
||||
// Construct
|
||||
pub fn new(
|
||||
// Actions
|
||||
browser_action: Rc<BrowserAction>,
|
||||
) -> Self {
|
||||
pub fn new(profile: Rc<Profile>, browser_action: Rc<BrowserAction>) -> Self {
|
||||
// Init local actions
|
||||
let action = Rc::new(Action::new());
|
||||
|
||||
// Init components
|
||||
let tab = Rc::new(Tab::new(browser_action.clone(), action.clone()));
|
||||
let tab = Rc::new(Tab::new(profile, (browser_action.clone(), action.clone())));
|
||||
let header = Header::new(browser_action, action.clone(), tab.widget().gobject());
|
||||
let widget = Rc::new(Widget::new(header.gobject(), tab.widget().gobject()));
|
||||
|
||||
@ -52,7 +50,7 @@ impl Window {
|
||||
action.bookmark().connect_activate({
|
||||
let tab = tab.clone();
|
||||
move |position| tab.bookmark(position)
|
||||
});
|
||||
}); // @TODO
|
||||
|
||||
action.pin().connect_activate({
|
||||
let tab = tab.clone();
|
||||
|
@ -11,6 +11,7 @@ use crate::app::browser::{
|
||||
window::action::{Action as WindowAction, Position},
|
||||
Action as BrowserAction,
|
||||
};
|
||||
use crate::Profile;
|
||||
use gtk::{
|
||||
glib::{GString, Propagation},
|
||||
prelude::WidgetExt,
|
||||
@ -20,6 +21,7 @@ use std::{cell::RefCell, collections::HashMap, rc::Rc};
|
||||
|
||||
// Main
|
||||
pub struct Tab {
|
||||
profile: Rc<Profile>,
|
||||
browser_action: Rc<BrowserAction>,
|
||||
window_action: Rc<WindowAction>,
|
||||
index: Rc<RefCell<HashMap<GString, Rc<Item>>>>,
|
||||
@ -28,12 +30,12 @@ pub struct Tab {
|
||||
|
||||
impl Tab {
|
||||
// Construct
|
||||
pub fn new(browser_action: Rc<BrowserAction>, window_action: Rc<WindowAction>) -> Self {
|
||||
pub fn new(profile: Rc<Profile>, action: (Rc<BrowserAction>, Rc<WindowAction>)) -> Self {
|
||||
// Init empty HashMap index
|
||||
let index: Rc<RefCell<HashMap<GString, Rc<Item>>>> = Rc::new(RefCell::new(HashMap::new()));
|
||||
|
||||
// Init context menu
|
||||
let menu = Menu::new(window_action.clone());
|
||||
let menu = Menu::new(action.1.clone());
|
||||
|
||||
// Init widget
|
||||
let widget = Rc::new(Widget::new(menu.gobject()));
|
||||
@ -41,20 +43,20 @@ impl Tab {
|
||||
// Init events
|
||||
|
||||
widget.gobject().connect_setup_menu({
|
||||
let window_action = window_action.clone();
|
||||
let action = action.1.clone();
|
||||
move |tab_view, tab_page| {
|
||||
// Set new state for page selected on menu open
|
||||
// * this action return default state (`None`) on menu close
|
||||
let state = tab_page.map(|this| tab_view.page_position(this));
|
||||
|
||||
// Update actions with new state value
|
||||
window_action.close_all().change_state(state);
|
||||
window_action.close().change_state(state);
|
||||
window_action.history_back().change_state(state);
|
||||
window_action.history_forward().change_state(state);
|
||||
window_action.home().change_state(state);
|
||||
window_action.pin().change_state(state);
|
||||
window_action.reload().change_state(state);
|
||||
action.close_all().change_state(state);
|
||||
action.close().change_state(state);
|
||||
action.history_back().change_state(state);
|
||||
action.history_forward().change_state(state);
|
||||
action.home().change_state(state);
|
||||
action.pin().change_state(state);
|
||||
action.reload().change_state(state);
|
||||
}
|
||||
});
|
||||
|
||||
@ -94,8 +96,9 @@ impl Tab {
|
||||
|
||||
// Return activated `Self`
|
||||
Self {
|
||||
browser_action,
|
||||
window_action,
|
||||
profile,
|
||||
browser_action: action.0,
|
||||
window_action: action.1,
|
||||
index,
|
||||
widget,
|
||||
}
|
||||
@ -114,6 +117,7 @@ impl Tab {
|
||||
// Init new tab item
|
||||
let item = Rc::new(Item::new(
|
||||
self.widget.gobject(),
|
||||
self.profile.clone(),
|
||||
self.browser_action.clone(),
|
||||
self.window_action.clone(),
|
||||
// Options tuple
|
||||
@ -280,8 +284,8 @@ impl Tab {
|
||||
self.widget.gobject(),
|
||||
transaction,
|
||||
&record.id,
|
||||
self.browser_action.clone(),
|
||||
self.window_action.clone(),
|
||||
self.profile.clone(),
|
||||
(self.browser_action.clone(), self.window_action.clone()),
|
||||
) {
|
||||
Ok(items) => {
|
||||
for item in items {
|
||||
|
@ -11,6 +11,7 @@ use crate::app::browser::{
|
||||
window::action::{Action as WindowAction, Position},
|
||||
Action as BrowserAction,
|
||||
};
|
||||
use crate::Profile;
|
||||
use adw::TabView;
|
||||
use gtk::{
|
||||
glib::{uuid_string_random, GString},
|
||||
@ -32,6 +33,7 @@ impl Item {
|
||||
// Construct
|
||||
pub fn new(
|
||||
tab_view: &TabView,
|
||||
profile: Rc<Profile>,
|
||||
// Actions
|
||||
browser_action: Rc<BrowserAction>,
|
||||
window_action: Rc<WindowAction>,
|
||||
@ -50,6 +52,7 @@ impl Item {
|
||||
|
||||
let page = Rc::new(Page::new(
|
||||
id.clone(),
|
||||
profile,
|
||||
(browser_action, window_action, action.clone()),
|
||||
));
|
||||
|
||||
@ -133,9 +136,9 @@ impl Item {
|
||||
tab_view: &TabView,
|
||||
transaction: &Transaction,
|
||||
app_browser_window_tab_id: &i64,
|
||||
profile: Rc<Profile>,
|
||||
// Actions
|
||||
browser_action: Rc<BrowserAction>,
|
||||
window_action: Rc<WindowAction>,
|
||||
action: (Rc<BrowserAction>, Rc<WindowAction>),
|
||||
) -> Result<Vec<Rc<Item>>, String> {
|
||||
let mut items = Vec::new();
|
||||
|
||||
@ -145,9 +148,10 @@ impl Item {
|
||||
// Construct new item object
|
||||
let item = Rc::new(Item::new(
|
||||
tab_view,
|
||||
profile.clone(),
|
||||
// Actions
|
||||
browser_action.clone(),
|
||||
window_action.clone(),
|
||||
action.0.clone(),
|
||||
action.1.clone(),
|
||||
// Options tuple
|
||||
(
|
||||
Position::End,
|
||||
|
@ -15,6 +15,7 @@ use crate::app::browser::{
|
||||
window::{tab::item::Action as TabAction, Action as WindowAction},
|
||||
Action as BrowserAction,
|
||||
};
|
||||
use crate::Profile;
|
||||
use gtk::{
|
||||
gdk_pixbuf::Pixbuf,
|
||||
gio::{Cancellable, SocketClient, SocketClientEvent, SocketProtocol, TlsCertificateFlags},
|
||||
@ -44,15 +45,18 @@ pub struct Page {
|
||||
impl Page {
|
||||
// Constructors
|
||||
|
||||
pub fn new(id: GString, action: (Rc<BrowserAction>, Rc<WindowAction>, Rc<TabAction>)) -> Self {
|
||||
pub fn new(
|
||||
id: GString,
|
||||
profile: Rc<Profile>,
|
||||
action: (Rc<BrowserAction>, Rc<WindowAction>, Rc<TabAction>),
|
||||
) -> Self {
|
||||
// Init components
|
||||
let content = Rc::new(Content::new((action.1.clone(), action.2.clone())));
|
||||
|
||||
let navigation = Rc::new(Navigation::new((
|
||||
action.0.clone(),
|
||||
action.1.clone(),
|
||||
action.2.clone(),
|
||||
)));
|
||||
let navigation = Rc::new(Navigation::new(
|
||||
profile,
|
||||
(action.0.clone(), action.1.clone(), action.2.clone()),
|
||||
));
|
||||
|
||||
let input = Rc::new(Input::new());
|
||||
|
||||
|
@ -16,11 +16,13 @@ use widget::Widget;
|
||||
use crate::app::browser::window::tab::item::Action as TabAction;
|
||||
use crate::app::browser::window::Action as WindowAction;
|
||||
use crate::app::browser::Action as BrowserAction;
|
||||
use crate::Profile;
|
||||
use gtk::prelude::EditableExt;
|
||||
use sqlite::Transaction;
|
||||
use std::rc::Rc;
|
||||
|
||||
pub struct Navigation {
|
||||
profile: Rc<Profile>,
|
||||
bookmark: Rc<Bookmark>,
|
||||
history: Rc<History>,
|
||||
home: Rc<Home>,
|
||||
@ -30,7 +32,10 @@ pub struct Navigation {
|
||||
}
|
||||
|
||||
impl Navigation {
|
||||
pub fn new(action: (Rc<BrowserAction>, Rc<WindowAction>, Rc<TabAction>)) -> Self {
|
||||
pub fn new(
|
||||
profile: Rc<Profile>,
|
||||
action: (Rc<BrowserAction>, Rc<WindowAction>, Rc<TabAction>),
|
||||
) -> Self {
|
||||
// Init components
|
||||
let home = Rc::new(Home::new(action.1.clone()));
|
||||
let history = Rc::new(History::new(action.1.clone()));
|
||||
@ -49,6 +54,7 @@ impl Navigation {
|
||||
|
||||
// Done
|
||||
Self {
|
||||
profile,
|
||||
bookmark,
|
||||
history,
|
||||
home,
|
||||
@ -61,11 +67,13 @@ impl Navigation {
|
||||
// Actions
|
||||
|
||||
pub fn update(&self, progress_fraction: Option<f64>) {
|
||||
self.bookmark.update(false); // @TODO DB from request
|
||||
let request = self.request.widget().gobject().text();
|
||||
|
||||
self.bookmark
|
||||
.update(!self.profile.bookmark.has_request(&request, true));
|
||||
self.history.update();
|
||||
self.home.update(self.request.uri());
|
||||
self.reload
|
||||
.update(!self.request.widget().gobject().text().is_empty());
|
||||
self.reload.update(!request.is_empty());
|
||||
self.request.update(progress_fraction);
|
||||
}
|
||||
|
||||
|
@ -6,26 +6,23 @@ use crate::app::browser::window::action::Action as WindowAction;
|
||||
use std::rc::Rc;
|
||||
|
||||
pub struct Bookmark {
|
||||
window_action: Rc<WindowAction>,
|
||||
action: Rc<WindowAction>,
|
||||
widget: Rc<Widget>,
|
||||
}
|
||||
|
||||
impl Bookmark {
|
||||
// Construct
|
||||
pub fn new(window_action: Rc<WindowAction>) -> Self {
|
||||
pub fn new(action: Rc<WindowAction>) -> Self {
|
||||
Self {
|
||||
widget: Rc::new(Widget::new(window_action.clone())),
|
||||
window_action,
|
||||
widget: Rc::new(Widget::new(action.clone())),
|
||||
action,
|
||||
}
|
||||
}
|
||||
|
||||
// Actions
|
||||
pub fn update(&self, is_enabled: bool) {
|
||||
// Update actions
|
||||
self.window_action
|
||||
.bookmark()
|
||||
.gobject()
|
||||
.set_enabled(is_enabled);
|
||||
self.action.bookmark().gobject().set_enabled(is_enabled);
|
||||
|
||||
// Update child components
|
||||
self.widget.update(is_enabled);
|
||||
|
@ -13,7 +13,7 @@ pub struct Widget {
|
||||
impl Widget {
|
||||
// Constructors
|
||||
|
||||
pub fn new(window_action: Rc<WindowAction>) -> Self {
|
||||
pub fn new(action: Rc<WindowAction>) -> Self {
|
||||
// Init gobject
|
||||
let gobject = Button::builder()
|
||||
.icon_name("starred-symbolic")
|
||||
@ -22,7 +22,7 @@ impl Widget {
|
||||
.build();
|
||||
|
||||
// Init events
|
||||
gobject.connect_clicked(move |_| window_action.home().activate());
|
||||
gobject.connect_clicked(move |_| action.home().activate());
|
||||
|
||||
// Return activated `Self`
|
||||
Self { gobject }
|
||||
|
@ -7,18 +7,18 @@ use gtk::glib::{gformat, GString, Uri};
|
||||
use std::{cell::RefCell, rc::Rc};
|
||||
|
||||
pub struct Home {
|
||||
window_action: Rc<WindowAction>,
|
||||
action: Rc<WindowAction>,
|
||||
uri: RefCell<Option<Uri>>,
|
||||
widget: Rc<Widget>,
|
||||
}
|
||||
|
||||
impl Home {
|
||||
// Construct
|
||||
pub fn new(window_action: Rc<WindowAction>) -> Self {
|
||||
pub fn new(action: Rc<WindowAction>) -> Self {
|
||||
Self {
|
||||
window_action: window_action.clone(),
|
||||
action: action.clone(),
|
||||
uri: RefCell::new(None),
|
||||
widget: Rc::new(Widget::new(window_action)),
|
||||
widget: Rc::new(Widget::new(action)),
|
||||
}
|
||||
}
|
||||
|
||||
@ -34,7 +34,7 @@ impl Home {
|
||||
self.uri.replace(uri);
|
||||
|
||||
// Update action status
|
||||
self.window_action.home().gobject().set_enabled(status);
|
||||
self.action.home().gobject().set_enabled(status);
|
||||
|
||||
// Update child components
|
||||
self.widget.update(status);
|
||||
|
@ -11,7 +11,7 @@ pub struct Widget {
|
||||
|
||||
impl Widget {
|
||||
// Construct
|
||||
pub fn new(window_action: Rc<WindowAction>) -> Self {
|
||||
pub fn new(action: Rc<WindowAction>) -> Self {
|
||||
// Init gobject
|
||||
let gobject = Button::builder()
|
||||
.icon_name("go-home-symbolic")
|
||||
@ -20,7 +20,7 @@ impl Widget {
|
||||
.build();
|
||||
|
||||
// Init events
|
||||
gobject.connect_clicked(move |_| window_action.home().activate());
|
||||
gobject.connect_clicked(move |_| action.home().activate());
|
||||
|
||||
// Return activated `Self`
|
||||
Self { gobject }
|
||||
|
@ -6,16 +6,16 @@ use crate::app::browser::window::action::Action as WindowAction;
|
||||
use std::rc::Rc;
|
||||
|
||||
pub struct Reload {
|
||||
window_action: Rc<WindowAction>,
|
||||
action: Rc<WindowAction>,
|
||||
widget: Rc<Widget>,
|
||||
}
|
||||
|
||||
impl Reload {
|
||||
// Construct
|
||||
pub fn new(window_action: Rc<WindowAction>) -> Self {
|
||||
pub fn new(action: Rc<WindowAction>) -> Self {
|
||||
Self {
|
||||
window_action: window_action.clone(),
|
||||
widget: Rc::new(Widget::new(window_action)),
|
||||
action: action.clone(),
|
||||
widget: Rc::new(Widget::new(action)),
|
||||
}
|
||||
}
|
||||
|
||||
@ -23,10 +23,7 @@ impl Reload {
|
||||
|
||||
pub fn update(&self, is_enabled: bool) {
|
||||
// Update actions
|
||||
self.window_action
|
||||
.reload()
|
||||
.gobject()
|
||||
.set_enabled(is_enabled);
|
||||
self.action.reload().gobject().set_enabled(is_enabled);
|
||||
|
||||
// Update child components
|
||||
self.widget.update(is_enabled);
|
||||
|
@ -11,7 +11,7 @@ pub struct Widget {
|
||||
|
||||
impl Widget {
|
||||
// Construct
|
||||
pub fn new(window_action: Rc<WindowAction>) -> Self {
|
||||
pub fn new(action: Rc<WindowAction>) -> Self {
|
||||
// Init gobject
|
||||
let gobject = Button::builder()
|
||||
.icon_name("view-refresh-symbolic")
|
||||
@ -20,7 +20,7 @@ impl Widget {
|
||||
.build();
|
||||
|
||||
// Init events
|
||||
gobject.connect_clicked(move |_| window_action.reload().activate());
|
||||
gobject.connect_clicked(move |_| action.reload().activate());
|
||||
|
||||
// Return activated `Self`
|
||||
Self { gobject }
|
||||
|
Loading…
x
Reference in New Issue
Block a user