From 1e42a75f2e582d6545c88b20573e619fb6ddd696 Mon Sep 17 00:00:00 2001 From: yggverse Date: Sun, 22 Sep 2024 22:23:44 +0300 Subject: [PATCH] complete widget submodule refactory --- src/browser/main/mod.rs | 4 +- src/browser/main/tab/label/mod.rs | 32 ++++++++------ src/browser/main/tab/label/pin/mod.rs | 23 +++++++--- src/browser/main/tab/label/pin/widget.rs | 20 +++++++++ src/browser/main/tab/label/title/mod.rs | 25 +++++++---- src/browser/main/tab/label/title/widget.rs | 22 ++++++++++ src/browser/main/tab/label/widget.rs | 24 +++++++++++ src/browser/main/tab/mod.rs | 39 ++++++++--------- src/browser/main/tab/page/content/mod.rs | 23 +++++++--- src/browser/main/tab/page/content/widget.rs | 19 ++++++++ src/browser/main/tab/page/mod.rs | 31 +++++++------ .../main/tab/page/navigation/base/mod.rs | 24 ++++++++--- .../main/tab/page/navigation/base/widget.rs | 21 +++++++++ .../main/tab/page/navigation/bookmark/mod.rs | 24 ++++++++--- .../tab/page/navigation/bookmark/widget.rs | 21 +++++++++ .../tab/page/navigation/history/back/mod.rs | 24 ++++++++--- .../page/navigation/history/back/widget.rs | 21 +++++++++ .../page/navigation/history/forward/mod.rs | 24 ++++++++--- .../page/navigation/history/forward/widget.rs | 21 +++++++++ .../main/tab/page/navigation/history/mod.rs | 36 +++++++++------- .../tab/page/navigation/history/widget.rs | 27 ++++++++++++ src/browser/main/tab/page/navigation/mod.rs | 43 ++++++++++--------- .../main/tab/page/navigation/reload/mod.rs | 24 ++++++++--- .../main/tab/page/navigation/reload/widget.rs | 21 +++++++++ .../main/tab/page/navigation/request/mod.rs | 24 ++++++++--- .../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 +++++++++++++ 29 files changed, 585 insertions(+), 145 deletions(-) create mode 100644 src/browser/main/tab/label/pin/widget.rs create mode 100644 src/browser/main/tab/label/title/widget.rs create mode 100644 src/browser/main/tab/label/widget.rs create mode 100644 src/browser/main/tab/page/content/widget.rs create mode 100644 src/browser/main/tab/page/navigation/base/widget.rs create mode 100644 src/browser/main/tab/page/navigation/bookmark/widget.rs create mode 100644 src/browser/main/tab/page/navigation/history/back/widget.rs create mode 100644 src/browser/main/tab/page/navigation/history/forward/widget.rs create mode 100644 src/browser/main/tab/page/navigation/history/widget.rs create mode 100644 src/browser/main/tab/page/navigation/reload/widget.rs create mode 100644 src/browser/main/tab/page/navigation/request/widget.rs create mode 100644 src/browser/main/tab/page/navigation/widget.rs create mode 100644 src/browser/main/tab/page/widget.rs create mode 100644 src/browser/main/tab/widget.rs diff --git a/src/browser/main/mod.rs b/src/browser/main/mod.rs index af33aced..6a782324 100644 --- a/src/browser/main/mod.rs +++ b/src/browser/main/mod.rs @@ -10,11 +10,11 @@ impl Main { // Construct pub fn new() -> Main { // Init components - let tab = tab::new(); + let tab = tab::Tab::new(); // Init struct Self { - widget: widget::Main::new(tab.widget.as_ref()), // @TODO + widget: widget::Main::new(tab.widget().gtk()), // @TODO tab, } } diff --git a/src/browser/main/tab/label/mod.rs b/src/browser/main/tab/label/mod.rs index 529da47a..ee2bb499 100644 --- a/src/browser/main/tab/label/mod.rs +++ b/src/browser/main/tab/label/mod.rs @@ -1,16 +1,24 @@ mod pin; mod title; +mod widget; -use gtk::prelude::BoxExt; -use gtk::Box; - -pub fn new() -> Box { - let label = Box::builder() - .orientation(gtk::Orientation::Horizontal) - .build(); - - label.append(&pin::new(false)); - label.append(&title::new()); - - label +pub struct Label { + widget: widget::Label, +} + +impl Label { + // Construct + pub fn new() -> Label { + Self { + widget: widget::Label::new( + pin::Pin::new().widget().gtk(), + title::Title::new().widget().gtk(), + ), + } + } + + // Getters + pub fn widget(&self) -> &widget::Label { + &self.widget + } } diff --git a/src/browser/main/tab/label/pin/mod.rs b/src/browser/main/tab/label/pin/mod.rs index c2c20fe3..87d596b3 100644 --- a/src/browser/main/tab/label/pin/mod.rs +++ b/src/browser/main/tab/label/pin/mod.rs @@ -1,8 +1,19 @@ -use gtk::Image; +mod widget; -pub fn new(visible: bool) -> Image { - Image::builder() - .icon_name("view-pin-symbolic") - .visible(visible) - .build() +pub struct Pin { + widget: widget::Pin, +} + +impl Pin { + // Construct + pub fn new() -> Pin { + Self { + widget: widget::Pin::new(), + } + } + + // Getters + pub fn widget(&self) -> &widget::Pin { + &self.widget + } } diff --git a/src/browser/main/tab/label/pin/widget.rs b/src/browser/main/tab/label/pin/widget.rs new file mode 100644 index 00000000..f7782a09 --- /dev/null +++ b/src/browser/main/tab/label/pin/widget.rs @@ -0,0 +1,20 @@ +pub struct Pin { + gtk: gtk::Image, +} + +impl Pin { + // Construct + pub fn new() -> Pin { + let gtk = gtk::Image::builder() + .icon_name("view-pin-symbolic") + .visible(false) //@TODO + .build(); + + Self { gtk } + } + + // Getters + pub fn gtk(&self) -> >k::Image { + &self.gtk + } +} diff --git a/src/browser/main/tab/label/title/mod.rs b/src/browser/main/tab/label/title/mod.rs index dfda9547..8b93170a 100644 --- a/src/browser/main/tab/label/title/mod.rs +++ b/src/browser/main/tab/label/title/mod.rs @@ -1,10 +1,19 @@ -use gtk::Label; +mod widget; -pub fn new() -> Label { - Label::builder() - .label("New page") - .ellipsize(gtk::pango::EllipsizeMode::End) - .width_chars(16) - .single_line_mode(true) - .build() +pub struct Title { + widget: widget::Title, +} + +impl Title { + // Construct + pub fn new() -> Title { + Self { + widget: widget::Title::new(), + } + } + + // Getters + pub fn widget(&self) -> &widget::Title { + &self.widget + } } diff --git a/src/browser/main/tab/label/title/widget.rs b/src/browser/main/tab/label/title/widget.rs new file mode 100644 index 00000000..a1ce2f10 --- /dev/null +++ b/src/browser/main/tab/label/title/widget.rs @@ -0,0 +1,22 @@ +pub struct Title { + gtk: gtk::Label, +} + +impl Title { + // Construct + pub fn new() -> Title { + let gtk = gtk::Label::builder() + .label("New page") + .ellipsize(gtk::pango::EllipsizeMode::End) + .width_chars(16) + .single_line_mode(true) + .build(); + + Self { gtk } + } + + // Getters + pub fn gtk(&self) -> >k::Label { + &self.gtk + } +} diff --git a/src/browser/main/tab/label/widget.rs b/src/browser/main/tab/label/widget.rs new file mode 100644 index 00000000..7d31a134 --- /dev/null +++ b/src/browser/main/tab/label/widget.rs @@ -0,0 +1,24 @@ +use gtk::prelude::BoxExt; + +pub struct Label { + gtk: gtk::Box, +} + +impl Label { + // Construct new object + pub fn new(pin: >k::Image, title: >k::Label) -> Label { + let gtk = gtk::Box::builder() + .orientation(gtk::Orientation::Horizontal) + .build(); + + gtk.append(pin); + gtk.append(title); + + Self { gtk } + } + + // Getters + pub fn gtk(&self) -> >k::Box { + &self.gtk + } +} diff --git a/src/browser/main/tab/mod.rs b/src/browser/main/tab/mod.rs index 2a1df04b..51f7f67e 100644 --- a/src/browser/main/tab/mod.rs +++ b/src/browser/main/tab/mod.rs @@ -1,31 +1,30 @@ mod label; mod page; +mod widget; -use std::sync::Arc; - -use gtk::Notebook; pub struct Tab { - pub widget: Arc, + widget: widget::Tab, } impl Tab { + // Construct + pub fn new() -> Tab { + let widget = widget::Tab::new(); + + Self { widget } + } + + // Actions pub fn append(&self, current: bool) -> u32 { - let page = page::new(); + self.widget.append( + label::Label::new().widget().gtk(), + page::Page::new().widget().gtk(), + true, + ) + } - let page_number = self.widget.append_page(&page, Some(&label::new())); - - self.widget.set_tab_reorderable(&page, true); - - if current { - self.widget.set_current_page(Some(page_number)); - } - - page_number + // Getters + pub fn widget(&self) -> &widget::Tab { + &self.widget } } - -pub fn new() -> Tab { - let widget = Arc::new(Notebook::builder().scrollable(true).build()); - - Tab { widget } -} diff --git a/src/browser/main/tab/page/content/mod.rs b/src/browser/main/tab/page/content/mod.rs index f97fc325..29fb8d5f 100644 --- a/src/browser/main/tab/page/content/mod.rs +++ b/src/browser/main/tab/page/content/mod.rs @@ -1,8 +1,19 @@ -use gtk::Box; -// use gtk::prelude::BoxExt; @TODO append +mod widget; -pub fn new() -> Box { - Box::builder() - .orientation(gtk::Orientation::Vertical) - .build() +pub struct Content { + widget: widget::Content, +} + +impl Content { + // Construct + pub fn new() -> Content { + Self { + widget: widget::Content::new(), + } + } + + // Getters + pub fn widget(&self) -> &widget::Content { + &self.widget + } } diff --git a/src/browser/main/tab/page/content/widget.rs b/src/browser/main/tab/page/content/widget.rs new file mode 100644 index 00000000..9cb4d410 --- /dev/null +++ b/src/browser/main/tab/page/content/widget.rs @@ -0,0 +1,19 @@ +pub struct Content { + gtk: gtk::Box, +} + +impl Content { + // Construct new object + pub fn new() -> Content { + Self { + gtk: gtk::Box::builder() + .orientation(gtk::Orientation::Vertical) + .build(), + } + } + + // Getters + pub fn gtk(&self) -> >k::Box { + &self.gtk + } +} diff --git a/src/browser/main/tab/page/mod.rs b/src/browser/main/tab/page/mod.rs index f09539c1..c8783daa 100644 --- a/src/browser/main/tab/page/mod.rs +++ b/src/browser/main/tab/page/mod.rs @@ -1,16 +1,23 @@ mod content; mod navigation; +mod widget; -use gtk::prelude::BoxExt; -use gtk::Box; - -pub fn new() -> Box { - let page = Box::builder() - .orientation(gtk::Orientation::Vertical) - .build(); - - page.append(&navigation::new()); - page.append(&content::new()); - - page +pub struct Page { + widget: widget::Page, +} + +impl Page { + pub fn new() -> Page { + Self { + widget: widget::Page::new( + navigation::Navigation::new().widget().gtk(), + content::Content::new().widget().gtk(), + ), + } + } + + // Getters + pub fn widget(&self) -> &widget::Page { + &self.widget + } } diff --git a/src/browser/main/tab/page/navigation/base/mod.rs b/src/browser/main/tab/page/navigation/base/mod.rs index f32dd080..412a039b 100644 --- a/src/browser/main/tab/page/navigation/base/mod.rs +++ b/src/browser/main/tab/page/navigation/base/mod.rs @@ -1,9 +1,19 @@ -use gtk::Button; +mod widget; -pub fn new() -> Button { - Button::builder() - .icon_name("go-home-symbolic") - .tooltip_text("Base") - .sensitive(false) - .build() +pub struct Base { + widget: widget::Base, +} + +impl Base { + // Construct + pub fn new() -> Base { + Self { + widget: widget::Base::new(), + } + } + + // Getters + pub fn widget(&self) -> &widget::Base { + &self.widget + } } diff --git a/src/browser/main/tab/page/navigation/base/widget.rs b/src/browser/main/tab/page/navigation/base/widget.rs new file mode 100644 index 00000000..99f80e58 --- /dev/null +++ b/src/browser/main/tab/page/navigation/base/widget.rs @@ -0,0 +1,21 @@ +pub struct Base { + gtk: gtk::Button, +} + +impl Base { + // Construct + pub fn new() -> Base { + Self { + gtk: gtk::Button::builder() + .icon_name("go-home-symbolic") + .tooltip_text("Base") + .sensitive(false) + .build(), + } + } + + // Getters + pub fn gtk(&self) -> >k::Button { + &self.gtk + } +} diff --git a/src/browser/main/tab/page/navigation/bookmark/mod.rs b/src/browser/main/tab/page/navigation/bookmark/mod.rs index 67f33960..e1a1c1ac 100644 --- a/src/browser/main/tab/page/navigation/bookmark/mod.rs +++ b/src/browser/main/tab/page/navigation/bookmark/mod.rs @@ -1,9 +1,19 @@ -use gtk::Button; +mod widget; -pub fn new() -> Button { - Button::builder() - .icon_name("starred-symbolic") - .tooltip_text("Toggle bookmark") - .sensitive(false) - .build() +pub struct Bookmark { + widget: widget::Bookmark, +} + +impl Bookmark { + // Construct + pub fn new() -> Bookmark { + Self { + widget: widget::Bookmark::new(), + } + } + + // Getters + pub fn widget(&self) -> &widget::Bookmark { + &self.widget + } } diff --git a/src/browser/main/tab/page/navigation/bookmark/widget.rs b/src/browser/main/tab/page/navigation/bookmark/widget.rs new file mode 100644 index 00000000..e93ddc37 --- /dev/null +++ b/src/browser/main/tab/page/navigation/bookmark/widget.rs @@ -0,0 +1,21 @@ +pub struct Bookmark { + gtk: gtk::Button, +} + +impl Bookmark { + // Construct + pub fn new() -> Bookmark { + Self { + gtk: gtk::Button::builder() + .icon_name("starred-symbolic") + .tooltip_text("Toggle bookmark") + .sensitive(false) + .build(), + } + } + + // Getters + pub fn gtk(&self) -> >k::Button { + &self.gtk + } +} diff --git a/src/browser/main/tab/page/navigation/history/back/mod.rs b/src/browser/main/tab/page/navigation/history/back/mod.rs index 8a5c2959..a01054ec 100644 --- a/src/browser/main/tab/page/navigation/history/back/mod.rs +++ b/src/browser/main/tab/page/navigation/history/back/mod.rs @@ -1,9 +1,19 @@ -use gtk::Button; +mod widget; -pub fn new() -> Button { - Button::builder() - .icon_name("go-previous-symbolic") - .tooltip_text("Back") - .sensitive(false) - .build() +pub struct Back { + widget: widget::Back, +} + +impl Back { + // Construct + pub fn new() -> Back { + Self { + widget: widget::Back::new(), + } + } + + // Getters + pub fn widget(&self) -> &widget::Back { + &self.widget + } } diff --git a/src/browser/main/tab/page/navigation/history/back/widget.rs b/src/browser/main/tab/page/navigation/history/back/widget.rs new file mode 100644 index 00000000..257bd14d --- /dev/null +++ b/src/browser/main/tab/page/navigation/history/back/widget.rs @@ -0,0 +1,21 @@ +pub struct Back { + gtk: gtk::Button, +} + +impl Back { + // Construct + pub fn new() -> Back { + Self { + gtk: gtk::Button::builder() + .icon_name("go-previous-symbolic") + .tooltip_text("Back") + .sensitive(false) + .build(), + } + } + + // Getters + pub fn gtk(&self) -> >k::Button { + &self.gtk + } +} diff --git a/src/browser/main/tab/page/navigation/history/forward/mod.rs b/src/browser/main/tab/page/navigation/history/forward/mod.rs index 2d9c5098..61f07db1 100644 --- a/src/browser/main/tab/page/navigation/history/forward/mod.rs +++ b/src/browser/main/tab/page/navigation/history/forward/mod.rs @@ -1,9 +1,19 @@ -use gtk::Button; +mod widget; -pub fn new() -> Button { - Button::builder() - .icon_name("go-next-symbolic") - .tooltip_text("Forward") - .sensitive(false) - .build() +pub struct Forward { + widget: widget::Forward, +} + +impl Forward { + // Construct + pub fn new() -> Forward { + Self { + widget: widget::Forward::new(), + } + } + + // Getters + pub fn widget(&self) -> &widget::Forward { + &self.widget + } } diff --git a/src/browser/main/tab/page/navigation/history/forward/widget.rs b/src/browser/main/tab/page/navigation/history/forward/widget.rs new file mode 100644 index 00000000..c82611e9 --- /dev/null +++ b/src/browser/main/tab/page/navigation/history/forward/widget.rs @@ -0,0 +1,21 @@ +pub struct Forward { + gtk: gtk::Button, +} + +impl Forward { + // Construct + pub fn new() -> Forward { + Self { + gtk: gtk::Button::builder() + .icon_name("go-next-symbolic") + .tooltip_text("Forward") + .sensitive(false) + .build(), + } + } + + // Getters + pub fn gtk(&self) -> >k::Button { + &self.gtk + } +} diff --git a/src/browser/main/tab/page/navigation/history/mod.rs b/src/browser/main/tab/page/navigation/history/mod.rs index 5505989e..ad99162a 100644 --- a/src/browser/main/tab/page/navigation/history/mod.rs +++ b/src/browser/main/tab/page/navigation/history/mod.rs @@ -1,20 +1,24 @@ mod back; mod forward; +mod widget; -use gtk::prelude::BoxExt; -use gtk::Box; - -pub fn new() -> Box { - let history = Box::builder() - .orientation(gtk::Orientation::Horizontal) - .css_classes([ - "linked", // merge childs - ]) - .build(); - - // Compose childs - history.append(&back::new()); - history.append(&forward::new()); - - history +pub struct History { + widget: widget::History, +} + +impl History { + // Construct + pub fn new() -> History { + Self { + widget: widget::History::new( + back::Back::new().widget().gtk(), + forward::Forward::new().widget().gtk(), + ), + } + } + + // Getters + pub fn widget(&self) -> &widget::History { + &self.widget + } } diff --git a/src/browser/main/tab/page/navigation/history/widget.rs b/src/browser/main/tab/page/navigation/history/widget.rs new file mode 100644 index 00000000..cdbb1fd7 --- /dev/null +++ b/src/browser/main/tab/page/navigation/history/widget.rs @@ -0,0 +1,27 @@ +use gtk::prelude::BoxExt; + +pub struct History { + gtk: gtk::Box, +} + +impl History { + // Construct + pub fn new(back: >k::Button, forward: >k::Button) -> History { + let gtk = gtk::Box::builder() + .orientation(gtk::Orientation::Horizontal) + .css_classes([ + "linked", // merge childs + ]) + .build(); + + gtk.append(back); + gtk.append(forward); + + Self { gtk } + } + + // Getters + pub fn gtk(&self) -> >k::Box { + &self.gtk + } +} diff --git a/src/browser/main/tab/page/navigation/mod.rs b/src/browser/main/tab/page/navigation/mod.rs index 2d6e1b80..bfb87af5 100644 --- a/src/browser/main/tab/page/navigation/mod.rs +++ b/src/browser/main/tab/page/navigation/mod.rs @@ -4,26 +4,27 @@ mod history; mod reload; mod request; -use gtk::prelude::BoxExt; -use gtk::Box; +mod widget; -pub fn new() -> Box { - let navigation = Box::builder() - // Tuneup - .orientation(gtk::Orientation::Horizontal) - .spacing(8) - .margin_top(8) - .margin_start(8) - .margin_end(8) - .margin_bottom(8) - .build(); - - // Compose childs - navigation.append(&base::new()); - navigation.append(&history::new()); - navigation.append(&reload::new()); - navigation.append(&request::new()); - navigation.append(&bookmark::new()); - - navigation +pub struct Navigation { + widget: widget::Navigation, +} + +impl Navigation { + pub fn new() -> Navigation { + Self { + widget: widget::Navigation::new( + base::Base::new().widget().gtk(), + history::History::new().widget().gtk(), + reload::Reload::new().widget().gtk(), + request::Request::new().widget().gtk(), + bookmark::Bookmark::new().widget().gtk(), + ), + } + } + + // Getters + pub fn widget(&self) -> &widget::Navigation { + &self.widget + } } diff --git a/src/browser/main/tab/page/navigation/reload/mod.rs b/src/browser/main/tab/page/navigation/reload/mod.rs index 78d7c3a9..6ca5a830 100644 --- a/src/browser/main/tab/page/navigation/reload/mod.rs +++ b/src/browser/main/tab/page/navigation/reload/mod.rs @@ -1,9 +1,19 @@ -use gtk::Button; +mod widget; -pub fn new() -> Button { - return Button::builder() - .icon_name("view-refresh-symbolic") - .tooltip_text("Reload") - .sensitive(false) - .build(); +pub struct Reload { + widget: widget::Reload, +} + +impl Reload { + // Construct + pub fn new() -> Reload { + Self { + widget: widget::Reload::new(), + } + } + + // Getters + pub fn widget(&self) -> &widget::Reload { + &self.widget + } } diff --git a/src/browser/main/tab/page/navigation/reload/widget.rs b/src/browser/main/tab/page/navigation/reload/widget.rs new file mode 100644 index 00000000..448627df --- /dev/null +++ b/src/browser/main/tab/page/navigation/reload/widget.rs @@ -0,0 +1,21 @@ +pub struct Reload { + gtk: gtk::Button, +} + +impl Reload { + // Construct + pub fn new() -> Reload { + Self { + gtk: gtk::Button::builder() + .icon_name("view-refresh-symbolic") + .tooltip_text("Reload") + .sensitive(false) + .build(), + } + } + + // Getters + pub fn gtk(&self) -> >k::Button { + &self.gtk + } +} diff --git a/src/browser/main/tab/page/navigation/request/mod.rs b/src/browser/main/tab/page/navigation/request/mod.rs index 5624ef6a..2ee6332b 100644 --- a/src/browser/main/tab/page/navigation/request/mod.rs +++ b/src/browser/main/tab/page/navigation/request/mod.rs @@ -1,9 +1,19 @@ -use gtk::Entry; +mod widget; -pub fn new() -> Entry { - Entry::builder() - .placeholder_text("URL or search term...") - .hexpand(true) - .progress_pulse_step(0.1) - .build() +pub struct Request { + widget: widget::Request, +} + +impl Request { + // Construct + pub fn new() -> Request { + Self { + widget: widget::Request::new(), + } + } + + // Getters + pub fn widget(&self) -> &widget::Request { + &self.widget + } } diff --git a/src/browser/main/tab/page/navigation/request/widget.rs b/src/browser/main/tab/page/navigation/request/widget.rs new file mode 100644 index 00000000..455671b3 --- /dev/null +++ b/src/browser/main/tab/page/navigation/request/widget.rs @@ -0,0 +1,21 @@ +pub struct Request { + gtk: gtk::Entry, +} + +impl Request { + // Construct + pub fn new() -> Request { + Self { + gtk: gtk::Entry::builder() + .placeholder_text("URL or search term...") + .hexpand(true) + .progress_pulse_step(0.1) + .build(), + } + } + + // Getters + pub fn gtk(&self) -> >k::Entry { + &self.gtk + } +} diff --git a/src/browser/main/tab/page/navigation/widget.rs b/src/browser/main/tab/page/navigation/widget.rs new file mode 100644 index 00000000..af732785 --- /dev/null +++ b/src/browser/main/tab/page/navigation/widget.rs @@ -0,0 +1,38 @@ +use gtk::prelude::BoxExt; + +pub struct Navigation { + gtk: gtk::Box, +} + +impl Navigation { + // Construct + pub fn new( + base: >k::Button, + history: >k::Box, + reload: >k::Button, + request: >k::Entry, + bookmark: >k::Button, + ) -> Navigation { + let gtk = gtk::Box::builder() + .orientation(gtk::Orientation::Horizontal) + .spacing(8) + .margin_top(8) + .margin_start(8) + .margin_end(8) + .margin_bottom(8) + .build(); + + gtk.append(base); + gtk.append(history); + gtk.append(reload); + gtk.append(request); + gtk.append(bookmark); + + Self { gtk } + } + + // Getters + pub fn gtk(&self) -> >k::Box { + &self.gtk + } +} diff --git a/src/browser/main/tab/page/widget.rs b/src/browser/main/tab/page/widget.rs new file mode 100644 index 00000000..09a69b7e --- /dev/null +++ b/src/browser/main/tab/page/widget.rs @@ -0,0 +1,24 @@ +use gtk::prelude::BoxExt; + +pub struct Page { + gtk: gtk::Box, +} + +impl Page { + // Construct + pub fn new(navigation: >k::Box, content: >k::Box) -> Page { + let gtk = gtk::Box::builder() + .orientation(gtk::Orientation::Vertical) + .build(); + + gtk.append(navigation); + gtk.append(content); + + Self { gtk } + } + + // Getters + pub fn gtk(&self) -> >k::Box { + &self.gtk + } +} diff --git a/src/browser/main/tab/widget.rs b/src/browser/main/tab/widget.rs new file mode 100644 index 00000000..e7746c04 --- /dev/null +++ b/src/browser/main/tab/widget.rs @@ -0,0 +1,30 @@ +pub struct Tab { + gtk: gtk::Notebook, +} + +impl Tab { + // Construct new object + pub fn new() -> Tab { + Self { + gtk: gtk::Notebook::builder().scrollable(true).build(), + } + } + + // Actions + pub fn append(&self, label: >k::Box, page: >k::Box, current: bool) -> u32 { + let page_number = self.gtk.append_page(page, Some(label)); + + self.gtk.set_tab_reorderable(page, true); + + if current { + self.gtk.set_current_page(Some(page_number)); + } + + page_number + } + + // Getters + pub fn gtk(&self) -> >k::Notebook { + &self.gtk + } +}