Browse Source

use libadwaita for app & app window

master
yggverse 2 months ago
parent
commit
9e5a2a490c
  1. 2
      src/app.rs
  2. 34
      src/app/browser.rs
  3. 9
      src/app/browser/widget.rs
  4. 55
      src/app/browser/window.rs
  5. 0
      src/app/browser/window/header.rs
  6. 0
      src/app/browser/window/header/title.rs
  7. 0
      src/app/browser/window/header/tray.rs
  8. 0
      src/app/browser/window/header/tray/menu.rs
  9. 0
      src/app/browser/window/header/tray/tab.rs
  10. 0
      src/app/browser/window/header/widget.rs
  11. 4
      src/app/browser/window/widget.rs

2
src/app.rs

@ -6,10 +6,10 @@ use action::Action; @@ -6,10 +6,10 @@ use action::Action;
use browser::Browser;
use database::Database;
use adw::Application;
use gtk::{
glib::ExitCode,
prelude::{ActionExt, ApplicationExt, ApplicationExtManual, GtkApplicationExt, GtkWindowExt},
Application,
};
use sqlite::{Connection, Transaction};

34
src/app/browser.rs

@ -1,18 +1,15 @@ @@ -1,18 +1,15 @@
mod database;
mod header;
mod widget;
mod window;
use database::Database;
use header::Header;
use widget::Widget;
use window::Window;
use adw::ApplicationWindow;
use gtk::{
gio::{AppInfo, AppLaunchContext, SimpleAction},
glib::GString,
prelude::{ActionMapExt, GtkWindowExt},
ApplicationWindow,
};
use sqlite::Transaction;
use std::{path::PathBuf, sync::Arc};
@ -43,11 +40,11 @@ impl Browser { @@ -43,11 +40,11 @@ impl Browser {
action_tab_page_navigation_reload: Arc<SimpleAction>,
action_tab_pin: Arc<SimpleAction>,
) -> Browser {
// Init components
let header = Arc::new(Header::new(
let window = Arc::new(Window::new(
action_tool_debug.clone(),
action_tool_profile_directory.clone(),
action_quit.clone(),
action_update.clone(),
action_tab_append.clone(),
action_tab_close.clone(),
action_tab_close_all.clone(),
@ -58,16 +55,10 @@ impl Browser { @@ -58,16 +55,10 @@ impl Browser {
action_tab_pin.clone(),
));
let window = Arc::new(Window::new(
action_tab_page_navigation_base.clone(),
action_tab_page_navigation_history_back.clone(),
action_tab_page_navigation_history_forward.clone(),
action_tab_page_navigation_reload.clone(),
action_update.clone(),
));
//window.gobject().append(header.gobject());
// Init widget
let widget = Arc::new(Widget::new(header.gobject(), window.gobject()));
let widget = Arc::new(Widget::new(window.gobject()));
// Assign actions
widget.gobject().add_action(action_tool_debug.as_ref());
@ -119,24 +110,9 @@ impl Browser { @@ -119,24 +110,9 @@ impl Browser {
});
action_update.connect_activate({
let header = header.clone();
let window = window.clone();
move |_, _| {
// Update window first
window.update();
// Update header
let title = match window.tab_page_title() {
Some(value) => value,
None => GString::new(), // @TODO
};
let subtitle = match window.tab_page_description() {
Some(value) => value,
None => GString::new(), // @TODO
};
header.update(title.as_str(), subtitle.as_str());
}
});

9
src/app/browser/widget.rs

@ -2,8 +2,8 @@ mod database; @@ -2,8 +2,8 @@ mod database;
use database::Database;
use adw::HeaderBar;
use gtk::{prelude::GtkWindowExt, ApplicationWindow, Box};
use adw::ApplicationWindow;
use gtk::{prelude::GtkWindowExt, Box};
use sqlite::Transaction;
// Default options
@ -17,11 +17,10 @@ pub struct Widget { @@ -17,11 +17,10 @@ pub struct Widget {
impl Widget {
// Construct
pub fn new(titlebar: &HeaderBar, child: &Box) -> Self {
pub fn new(content: &Box) -> Self {
// Init GTK
let gobject = ApplicationWindow::builder()
.titlebar(titlebar)
.child(child)
.content(content)
.default_height(DEFAULT_HEIGHT)
.default_width(DEFAULT_WIDTH)
.maximized(MAXIMIZED)

55
src/app/browser/window.rs

@ -1,8 +1,10 @@ @@ -1,8 +1,10 @@
mod database;
mod header;
mod tab;
mod widget;
use database::Database;
use header::Header;
use sqlite::Transaction;
use tab::Tab;
use widget::Widget;
@ -12,6 +14,7 @@ use std::sync::Arc; @@ -12,6 +14,7 @@ use std::sync::Arc;
use gtk::{gio::SimpleAction, glib::GString, Box};
pub struct Window {
header: Arc<Header>,
tab: Arc<Tab>,
widget: Arc<Widget>,
}
@ -20,13 +23,34 @@ impl Window { @@ -20,13 +23,34 @@ impl Window {
// Construct
pub fn new(
// Actions
action_tool_debug: Arc<SimpleAction>,
action_tool_profile_directory: Arc<SimpleAction>,
action_quit: Arc<SimpleAction>,
action_update: Arc<SimpleAction>,
action_tab_append: Arc<SimpleAction>,
action_tab_close: Arc<SimpleAction>,
action_tab_close_all: Arc<SimpleAction>,
action_tab_page_navigation_base: Arc<SimpleAction>,
action_tab_page_navigation_history_back: Arc<SimpleAction>,
action_tab_page_navigation_history_forward: Arc<SimpleAction>,
action_tab_page_navigation_reload: Arc<SimpleAction>,
action_update: Arc<SimpleAction>,
action_tab_pin: Arc<SimpleAction>,
) -> Self {
// Init components
let header = Arc::new(Header::new(
action_tool_debug.clone(),
action_tool_profile_directory.clone(),
action_quit.clone(),
action_tab_append.clone(),
action_tab_close.clone(),
action_tab_close_all.clone(),
action_tab_page_navigation_base.clone(),
action_tab_page_navigation_history_back.clone(),
action_tab_page_navigation_history_forward.clone(),
action_tab_page_navigation_reload.clone(),
action_tab_pin.clone(),
));
let tab = Arc::new(Tab::new(
action_tab_page_navigation_base,
action_tab_page_navigation_history_back,
@ -37,10 +61,14 @@ impl Window { @@ -37,10 +61,14 @@ impl Window {
tab.activate(tab.clone());
// GTK
let widget = Arc::new(Widget::new(tab.gobject()));
let widget = Arc::new(Widget::new(header.gobject(), tab.gobject()));
// Init struct
Self { tab, widget }
Self {
header,
tab,
widget,
}
}
// Actions
@ -77,6 +105,19 @@ impl Window { @@ -77,6 +105,19 @@ impl Window {
}
pub fn update(&self) {
// Update header
let title = match self.tab.page_title() {
Some(value) => value,
None => GString::new(), // @TODO
};
let subtitle = match self.tab.page_description() {
Some(value) => value,
None => GString::new(), // @TODO
};
self.header.update(title.as_str(), subtitle.as_str());
self.tab.update();
}
@ -131,14 +172,6 @@ impl Window { @@ -131,14 +172,6 @@ impl Window {
}
// Getters
pub fn tab_page_title(&self) -> Option<GString> {
self.tab.page_title()
}
pub fn tab_page_description(&self) -> Option<GString> {
self.tab.page_description()
}
pub fn gobject(&self) -> &Box {
&self.widget.gobject()
}

0
src/app/browser/header.rs → src/app/browser/window/header.rs

0
src/app/browser/header/title.rs → src/app/browser/window/header/title.rs

0
src/app/browser/header/tray.rs → src/app/browser/window/header/tray.rs

0
src/app/browser/header/tray/menu.rs → src/app/browser/window/header/tray/menu.rs

0
src/app/browser/header/tray/tab.rs → src/app/browser/window/header/tray/tab.rs

0
src/app/browser/header/widget.rs → src/app/browser/window/header/widget.rs

4
src/app/browser/window/widget.rs

@ -1,3 +1,4 @@ @@ -1,3 +1,4 @@
use adw::HeaderBar;
use gtk::{prelude::BoxExt, Box, Notebook, Orientation};
pub struct Widget {
@ -6,8 +7,9 @@ pub struct Widget { @@ -6,8 +7,9 @@ pub struct Widget {
impl Widget {
// Construct
pub fn new(tab: &Notebook) -> Self {
pub fn new(header: &HeaderBar, tab: &Notebook) -> Self {
let gobject = Box::builder().orientation(Orientation::Vertical).build();
gobject.append(header);
gobject.append(tab);
Self { gobject }

Loading…
Cancel
Save