From 490396830945307fb2bda0403366edccf91d30bb Mon Sep 17 00:00:00 2001 From: yggverse Date: Mon, 23 Sep 2024 18:51:48 +0300 Subject: [PATCH] reorganize widget modules --- src/browser/header/mod.rs | 25 ++++---- src/browser/header/subject/description/mod.rs | 24 ++++---- .../header/subject/description/widget.rs | 29 ---------- src/browser/header/subject/mod.rs | 28 ++++++--- src/browser/header/subject/title/mod.rs | 26 ++++++--- src/browser/header/subject/title/widget.rs | 33 ----------- src/browser/header/subject/widget.rs | 23 -------- src/browser/header/tray/menu/mod.rs | 31 +++++++--- src/browser/header/tray/menu/model.rs | 31 ---------- src/browser/header/tray/menu/widget.rs | 21 ------- src/browser/header/tray/mod.rs | 28 ++++++--- src/browser/header/tray/tab/mod.rs | 12 ++-- src/browser/header/tray/tab/widget.rs | 21 ------- src/browser/header/tray/widget.rs | 25 -------- src/browser/header/widget.rs | 18 ------ src/browser/main/mod.rs | 25 ++++---- src/browser/main/tab/label/mod.rs | 45 +++++++------- src/browser/main/tab/label/pin/mod.rs | 33 +++-------- src/browser/main/tab/label/pin/widget.rs | 20 ------- src/browser/main/tab/label/title/mod.rs | 21 ++++--- src/browser/main/tab/label/title/widget.rs | 22 ------- src/browser/main/tab/label/widget.rs | 24 -------- src/browser/main/tab/mod.rs | 37 +++++++----- src/browser/main/tab/page/content/mod.rs | 8 +-- src/browser/main/tab/page/content/widget.rs | 19 ------ src/browser/main/tab/page/mod.rs | 26 ++++++--- .../main/tab/page/navigation/base/mod.rs | 12 ++-- .../main/tab/page/navigation/base/widget.rs | 21 ------- .../main/tab/page/navigation/bookmark/mod.rs | 12 ++-- .../tab/page/navigation/bookmark/widget.rs | 21 ------- .../tab/page/navigation/history/back/mod.rs | 12 ++-- .../page/navigation/history/back/widget.rs | 21 ------- .../page/navigation/history/forward/mod.rs | 12 ++-- .../page/navigation/history/forward/widget.rs | 21 ------- .../main/tab/page/navigation/history/mod.rs | 32 +++++++--- src/browser/main/tab/page/navigation/mod.rs | 44 ++++++++++---- .../main/tab/page/navigation/reload/mod.rs | 12 ++-- .../main/tab/page/navigation/reload/widget.rs | 21 ------- .../main/tab/page/navigation/request/mod.rs | 12 ++-- .../tab/page/navigation/request/widget.rs | 21 ------- .../main/tab/page/navigation/widget.rs | 38 ------------ src/browser/main/tab/page/widget.rs | 24 -------- src/browser/main/tab/widget.rs | 30 ---------- src/browser/main/widget.rs | 23 -------- src/browser/mod.rs | 58 +++++++++---------- src/browser/widget.rs | 29 ---------- src/main.rs | 7 +-- 47 files changed, 352 insertions(+), 786 deletions(-) delete mode 100644 src/browser/header/subject/description/widget.rs delete mode 100644 src/browser/header/subject/title/widget.rs delete mode 100644 src/browser/header/subject/widget.rs delete mode 100644 src/browser/header/tray/menu/model.rs delete mode 100644 src/browser/header/tray/menu/widget.rs delete mode 100644 src/browser/header/tray/tab/widget.rs delete mode 100644 src/browser/header/tray/widget.rs delete mode 100644 src/browser/header/widget.rs delete mode 100644 src/browser/main/tab/label/pin/widget.rs delete mode 100644 src/browser/main/tab/label/title/widget.rs delete mode 100644 src/browser/main/tab/label/widget.rs delete mode 100644 src/browser/main/tab/page/content/widget.rs delete mode 100644 src/browser/main/tab/page/navigation/base/widget.rs delete mode 100644 src/browser/main/tab/page/navigation/bookmark/widget.rs delete mode 100644 src/browser/main/tab/page/navigation/history/back/widget.rs delete mode 100644 src/browser/main/tab/page/navigation/history/forward/widget.rs delete mode 100644 src/browser/main/tab/page/navigation/reload/widget.rs delete mode 100644 src/browser/main/tab/page/navigation/request/widget.rs delete mode 100644 src/browser/main/tab/page/navigation/widget.rs delete mode 100644 src/browser/main/tab/page/widget.rs delete mode 100644 src/browser/main/tab/widget.rs delete mode 100644 src/browser/main/widget.rs delete mode 100644 src/browser/widget.rs diff --git a/src/browser/header/mod.rs b/src/browser/header/mod.rs index dba26dc1..03989c36 100644 --- a/src/browser/header/mod.rs +++ b/src/browser/header/mod.rs @@ -1,26 +1,29 @@ mod subject; mod tray; -mod widget; -use std::sync::Arc; +use gtk::HeaderBar; +use subject::Subject; +use tray::Tray; pub struct Header { - widget: widget::Header, + widget: HeaderBar, } impl Header { // Construct - pub fn new() -> Arc
{ - Arc::new(Self { - widget: widget::Header::new( - tray::Tray::new().widget().gtk(), - subject::Subject::new().widget().gtk(), - ), - }) + pub fn new() -> Header { + let tray = Tray::new(); + let subject = Subject::new(); + + let widget = HeaderBar::builder().build(); + widget.pack_start(tray.widget()); + widget.set_title_widget(Some(subject.widget())); + + Self { widget } } // Getters - pub fn widget(&self) -> &widget::Header { + pub fn widget(&self) -> &HeaderBar { &self.widget } } diff --git a/src/browser/header/subject/description/mod.rs b/src/browser/header/subject/description/mod.rs index 66ba83b5..dabdec1f 100644 --- a/src/browser/header/subject/description/mod.rs +++ b/src/browser/header/subject/description/mod.rs @@ -1,28 +1,30 @@ -mod widget; +use gtk::prelude::WidgetExt; +use gtk::{pango::EllipsizeMode, Label}; pub struct Description { - widget: widget::Description, + widget: Label, } impl Description { // Construct pub fn new() -> Description { - Self { - widget: widget::Description::new(), - } + let widget = Label::builder() + .css_classes(["subtitle"]) + .single_line_mode(true) + .ellipsize(EllipsizeMode::End) + .visible(false) + .build(); + + Self { widget } } // Actions - pub fn set_text(&self, text: &str) { - self.widget.gtk().set_text(text); - } - pub fn update(&self) { - self.widget.update(); + self.widget.set_visible(self.widget.text().is_empty()); } // Getters - pub fn widget(&self) -> &widget::Description { + pub fn widget(&self) -> &Label { &self.widget } } diff --git a/src/browser/header/subject/description/widget.rs b/src/browser/header/subject/description/widget.rs deleted file mode 100644 index 9b75dff3..00000000 --- a/src/browser/header/subject/description/widget.rs +++ /dev/null @@ -1,29 +0,0 @@ -use gtk::prelude::WidgetExt; - -pub struct Description { - gtk: gtk::Label, -} - -impl Description { - // Construct - pub fn new() -> Description { - let gtk = gtk::Label::builder() - .css_classes(["subtitle"]) - .single_line_mode(true) - .ellipsize(gtk::pango::EllipsizeMode::End) - .visible(false) - .build(); - - Self { gtk } - } - - // Actions - pub fn update(&self) { - self.gtk.set_visible(self.gtk.text().is_empty()); - } - - // Getters - pub fn gtk(&self) -> >k::Label { - &self.gtk - } -} diff --git a/src/browser/header/subject/mod.rs b/src/browser/header/subject/mod.rs index db077df8..4e0e21ca 100644 --- a/src/browser/header/subject/mod.rs +++ b/src/browser/header/subject/mod.rs @@ -1,24 +1,34 @@ mod description; mod title; -mod widget; + +use description::Description; +use gtk::prelude::BoxExt; +use gtk::{Align, Box, Orientation}; +use title::Title; pub struct Subject { - widget: widget::Subject, + widget: Box, } impl Subject { // Construct pub fn new() -> Subject { - Self { - widget: widget::Subject::new( - title::Title::new().widget().gtk(), - description::Description::new().widget().gtk(), - ), - } + let title = Title::new(); + let description = Description::new(); + + let widget = Box::builder() + .orientation(Orientation::Vertical) + .valign(Align::Center) + .build(); + + widget.append(title.widget()); + widget.append(description.widget()); + + Self { widget } } // Getters - pub fn widget(&self) -> &widget::Subject { + pub fn widget(&self) -> &Box { &self.widget } } diff --git a/src/browser/header/subject/title/mod.rs b/src/browser/header/subject/title/mod.rs index b515185d..53519a2b 100644 --- a/src/browser/header/subject/title/mod.rs +++ b/src/browser/header/subject/title/mod.rs @@ -1,24 +1,36 @@ -mod widget; +use gtk::{pango::EllipsizeMode, Label}; + +const DEFAULT_TEXT: &str = "Yoda"; // @TODO pub struct Title { - widget: widget::Title, + widget: Label, } impl Title { // Construct pub fn new() -> Title { - Self { - widget: widget::Title::new(), - } + let widget = gtk::Label::builder() + .css_classes(["title"]) + .single_line_mode(true) + .ellipsize(EllipsizeMode::End) + .label(DEFAULT_TEXT) + .build(); + + Self { widget } } // Actions pub fn update(&self, text: &str) { - self.widget.update(text); + if text.is_empty() { + self.widget.set_text(DEFAULT_TEXT); + } else { + self.widget + .set_text(&format!("{} - {}", text, DEFAULT_TEXT)); + } } // Getters - pub fn widget(&self) -> &widget::Title { + pub fn widget(&self) -> &Label { &self.widget } } diff --git a/src/browser/header/subject/title/widget.rs b/src/browser/header/subject/title/widget.rs deleted file mode 100644 index a0f154f6..00000000 --- a/src/browser/header/subject/title/widget.rs +++ /dev/null @@ -1,33 +0,0 @@ -const DEFAULT_TEXT: &str = "Yoda"; - -pub struct Title { - gtk: gtk::Label, -} - -impl Title { - // Construct - pub fn new() -> Title { - let gtk = gtk::Label::builder() - .css_classes(["title"]) - .single_line_mode(true) - .ellipsize(gtk::pango::EllipsizeMode::End) - .label(DEFAULT_TEXT) - .build(); - - Self { gtk } - } - - // Actions - pub fn update(&self, text: &str) { - if text.is_empty() { - self.gtk.set_text(DEFAULT_TEXT); - } else { - self.gtk.set_text(&format!("{} - {}", text, DEFAULT_TEXT)); - } - } - - // Getters - pub fn gtk(&self) -> >k::Label { - &self.gtk - } -} diff --git a/src/browser/header/subject/widget.rs b/src/browser/header/subject/widget.rs deleted file mode 100644 index 10fa58ee..00000000 --- a/src/browser/header/subject/widget.rs +++ /dev/null @@ -1,23 +0,0 @@ -use gtk::prelude::BoxExt; - -pub struct Subject { - gtk: gtk::Box, -} - -impl Subject { - pub fn new(title: >k::Label, description: >k::Label) -> Subject { - let gtk = gtk::Box::builder() - .orientation(gtk::Orientation::Vertical) - .valign(gtk::Align::Center) - .build(); - - gtk.append(title); - gtk.append(description); - - Self { gtk } - } - - pub fn gtk(&self) -> >k::Box { - &self.gtk - } -} diff --git a/src/browser/header/tray/menu/mod.rs b/src/browser/header/tray/menu/mod.rs index 9bcac4b7..3395dea2 100644 --- a/src/browser/header/tray/menu/mod.rs +++ b/src/browser/header/tray/menu/mod.rs @@ -1,19 +1,36 @@ -mod model; -mod widget; +use gtk::{gio, MenuButton}; pub struct Menu { - widget: widget::Menu, + widget: MenuButton, } impl Menu { pub fn new() -> Menu { - Self { - widget: widget::Menu::new(model::Menu::new().model()), - } + // Init model + let model_tab = gio::Menu::new(); + model_tab.append(Some("New"), Some("win.tab_append")); + model_tab.append(Some("Pin"), Some("win.tab_pin")); + + let model_tab_close = gio::Menu::new(); + model_tab_close.append(Some("Current"), Some("win.tab_close")); + model_tab_close.append(Some("All"), Some("win.tab_close_all")); + model_tab.append_submenu(Some("Close"), &model_tab_close); + + let model = gio::Menu::new(); + model.append_submenu(Some("Tab"), &model_tab); + model.append(Some("Debug"), Some("win.debug")); + model.append(Some("Quit"), Some("win.quit")); + + // Init widget + let widget = MenuButton::builder().tooltip_text("Menu").build(); + widget.set_menu_model(Some(&model)); + + // Result + Self { widget } } // Getters - pub fn widget(&self) -> &widget::Menu { + pub fn widget(&self) -> &MenuButton { &self.widget } } diff --git a/src/browser/header/tray/menu/model.rs b/src/browser/header/tray/menu/model.rs deleted file mode 100644 index 49afcd1a..00000000 --- a/src/browser/header/tray/menu/model.rs +++ /dev/null @@ -1,31 +0,0 @@ -use gtk::gio; - -pub struct Menu { - model: gio::Menu, -} - -impl Menu { - // Construct - pub fn new() -> Menu { - let model_tab = gio::Menu::new(); - model_tab.append(Some("New"), Some("win.tab_append")); - model_tab.append(Some("Pin"), Some("win.tab_pin")); - - let model_tab_close = gio::Menu::new(); - model_tab_close.append(Some("Current"), Some("win.tab_close")); - model_tab_close.append(Some("All"), Some("win.tab_close_all")); - model_tab.append_submenu(Some("Close"), &model_tab_close); - - let model = gio::Menu::new(); - model.append_submenu(Some("Tab"), &model_tab); - model.append(Some("Debug"), Some("win.debug")); - model.append(Some("Quit"), Some("win.quit")); - - Self { model } - } - - // Getters - pub fn model(&self) -> &gio::Menu { - &self.model - } -} diff --git a/src/browser/header/tray/menu/widget.rs b/src/browser/header/tray/menu/widget.rs deleted file mode 100644 index 29c621cb..00000000 --- a/src/browser/header/tray/menu/widget.rs +++ /dev/null @@ -1,21 +0,0 @@ -use gtk::gio; - -pub struct Menu { - gtk: gtk::MenuButton, -} - -impl Menu { - // Construct - pub fn new(model: &gio::Menu) -> Menu { - let gtk = gtk::MenuButton::builder().tooltip_text("Menu").build(); - - gtk.set_menu_model(Some(model)); - - Self { gtk } - } - - // Getters - pub fn gtk(&self) -> >k::MenuButton { - &self.gtk - } -} diff --git a/src/browser/header/tray/mod.rs b/src/browser/header/tray/mod.rs index 90c0274a..551c4397 100644 --- a/src/browser/header/tray/mod.rs +++ b/src/browser/header/tray/mod.rs @@ -1,23 +1,33 @@ mod menu; mod tab; -mod widget; + +use gtk::prelude::BoxExt; +use gtk::{Box, Orientation}; +use menu::Menu; +use tab::Tab; pub struct Tray { - widget: widget::Tray, + widget: Box, } impl Tray { pub fn new() -> Tray { - Self { - widget: widget::Tray::new( - menu::Menu::new().widget().gtk(), - tab::Tab::new().widget().gtk(), - ), - } + let menu = Menu::new(); + let tab = Tab::new(); + + let widget = Box::builder() + .orientation(Orientation::Horizontal) + .spacing(8) + .build(); + + widget.append(menu.widget()); + widget.append(tab.widget()); + + Self { widget } } // Getters - pub fn widget(&self) -> &widget::Tray { + pub fn widget(&self) -> &Box { &self.widget } } diff --git a/src/browser/header/tray/tab/mod.rs b/src/browser/header/tray/tab/mod.rs index 53115826..ee7cd741 100644 --- a/src/browser/header/tray/tab/mod.rs +++ b/src/browser/header/tray/tab/mod.rs @@ -1,19 +1,23 @@ -mod widget; +use gtk::Button; pub struct Tab { - pub widget: widget::Tab, + pub widget: Button, } impl Tab { // Construct pub fn new() -> Tab { Self { - widget: widget::Tab::new(), + widget: Button::builder() + .action_name("win.tab_append") + .icon_name("tab-new-symbolic") + .tooltip_text("New tab") + .build(), } } // Getters - pub fn widget(&self) -> &widget::Tab { + pub fn widget(&self) -> &Button { &self.widget } } diff --git a/src/browser/header/tray/tab/widget.rs b/src/browser/header/tray/tab/widget.rs deleted file mode 100644 index 77eb4a23..00000000 --- a/src/browser/header/tray/tab/widget.rs +++ /dev/null @@ -1,21 +0,0 @@ -pub struct Tab { - gtk: gtk::Button, -} - -impl Tab { - // Construct - pub fn new() -> Tab { - Self { - gtk: gtk::Button::builder() - .action_name("win.tab_append") - .icon_name("tab-new-symbolic") - .tooltip_text("New tab") - .build(), - } - } - - // Getters - pub fn gtk(&self) -> >k::Button { - &self.gtk - } -} diff --git a/src/browser/header/tray/widget.rs b/src/browser/header/tray/widget.rs deleted file mode 100644 index d38e8e1a..00000000 --- a/src/browser/header/tray/widget.rs +++ /dev/null @@ -1,25 +0,0 @@ -use gtk::prelude::BoxExt; - -pub struct Tray { - gtk: gtk::Box, -} - -impl Tray { - // Construct - pub fn new(menu: >k::MenuButton, tab: >k::Button) -> Tray { - let gtk = gtk::Box::builder() - .orientation(gtk::Orientation::Horizontal) - .spacing(8) - .build(); - - gtk.append(menu); - gtk.append(tab); - - Self { gtk } - } - - // Getters - pub fn gtk(&self) -> >k::Box { - &self.gtk - } -} diff --git a/src/browser/header/widget.rs b/src/browser/header/widget.rs deleted file mode 100644 index d785d348..00000000 --- a/src/browser/header/widget.rs +++ /dev/null @@ -1,18 +0,0 @@ -pub struct Header { - gtk: gtk::HeaderBar, -} - -impl Header { - pub fn new(tray: >k::Box, subject: >k::Box) -> Header { - let gtk = gtk::HeaderBar::builder().build(); - - gtk.pack_start(tray); - gtk.set_title_widget(Some(subject)); - - Self { gtk } - } - - pub fn gtk(&self) -> >k::HeaderBar { - &self.gtk - } -} diff --git a/src/browser/main/mod.rs b/src/browser/main/mod.rs index 9a8b57b3..94b6f140 100644 --- a/src/browser/main/mod.rs +++ b/src/browser/main/mod.rs @@ -1,27 +1,28 @@ mod tab; -mod widget; -use std::sync::Arc; +use gtk::{Box, Orientation}; +use tab::Tab; + +use gtk::prelude::BoxExt; pub struct Main { - // Components - tab: Arc, - - // Extras - widget: widget::Main, + tab: Tab, + widget: Box, } impl Main { // Construct - pub fn new() -> Arc
{ + pub fn new() -> Main { // Init components - let tab = tab::Tab::new(); + let tab = Tab::new(); // Extras - let widget = widget::Main::new(tab.widget().notebook()); + let widget = Box::builder().orientation(Orientation::Vertical).build(); + + widget.append(tab.widget()); // Init struct - Arc::new(Self { tab, widget }) + Self { tab, widget } } // Actions @@ -42,7 +43,7 @@ impl Main { } // Getters - pub fn widget(&self) -> &widget::Main { + pub fn widget(&self) -> &Box { &self.widget } } diff --git a/src/browser/main/tab/label/mod.rs b/src/browser/main/tab/label/mod.rs index 3fd6a953..f7a8d2a2 100644 --- a/src/browser/main/tab/label/mod.rs +++ b/src/browser/main/tab/label/mod.rs @@ -1,46 +1,47 @@ mod pin; mod title; -mod widget; -use std::sync::Arc; +use gtk::prelude::{BoxExt, WidgetExt}; +use gtk::{Box, Orientation}; +use pin::Pin; +use title::Title; pub struct Label { // Components - pin: Arc, - title: Arc, + pin: Pin, + title: Title, - // Extras - is_pinned: bool, - widget: widget::Label, + // GTK + widget: Box, } impl Label { // Construct - pub fn new(is_pinned: bool) -> Arc