use libadwaita for app & app window

This commit is contained in:
yggverse 2024-10-09 10:50:41 +03:00
parent e2ab831d57
commit 9e5a2a490c
11 changed files with 57 additions and 47 deletions

View file

@ -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 {
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)

View file

@ -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;
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 {
// 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 {
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 {
}
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 {
}
// 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()
}

View file

@ -1,3 +1,4 @@
use adw::HeaderBar;
use gtk::{prelude::BoxExt, Box, Notebook, Orientation};
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 }