From e865221598ee846133a124973958c777f5ca6e40 Mon Sep 17 00:00:00 2001 From: yggverse Date: Wed, 16 Oct 2024 08:10:31 +0300 Subject: [PATCH] just page request features --- src/app/browser/window/tab/item/page.rs | 5 +++ .../browser/window/tab/item/page/request.rs | 30 +++++++++++++++ .../window/tab/item/page/request/content.rs | 38 +++++++++++++++++++ .../tab/item/page/request/content/response.rs | 25 ++++++++++++ .../page/request/content/response/widget.rs | 20 ++++++++++ .../tab/item/page/request/content/send.rs | 25 ++++++++++++ .../item/page/request/content/send/widget.rs | 23 +++++++++++ .../tab/item/page/request/content/widget.rs | 33 ++++++++++++++++ .../window/tab/item/page/request/widget.rs | 24 ++++++++++++ .../browser/window/tab/item/page/widget.rs | 3 ++ 10 files changed, 226 insertions(+) create mode 100644 src/app/browser/window/tab/item/page/request.rs create mode 100644 src/app/browser/window/tab/item/page/request/content.rs create mode 100644 src/app/browser/window/tab/item/page/request/content/response.rs create mode 100644 src/app/browser/window/tab/item/page/request/content/response/widget.rs create mode 100644 src/app/browser/window/tab/item/page/request/content/send.rs create mode 100644 src/app/browser/window/tab/item/page/request/content/send/widget.rs create mode 100644 src/app/browser/window/tab/item/page/request/content/widget.rs create mode 100644 src/app/browser/window/tab/item/page/request/widget.rs diff --git a/src/app/browser/window/tab/item/page.rs b/src/app/browser/window/tab/item/page.rs index 3965c7f0..e8613ebb 100644 --- a/src/app/browser/window/tab/item/page.rs +++ b/src/app/browser/window/tab/item/page.rs @@ -2,11 +2,13 @@ mod content; mod database; mod meta; mod navigation; +mod request; mod widget; use content::Content; use database::Database; use navigation::Navigation; +use request::Request; use widget::Widget; use meta::{Meta, Mime, Status}; @@ -72,11 +74,14 @@ impl Page { action_update.clone(), ); + let request = Request::new_arc(); + let widget = Widget::new_arc( &id, action_page_open.clone(), navigation.gobject(), content.gobject(), + request.gobject(), ); // Init async mutable Meta object diff --git a/src/app/browser/window/tab/item/page/request.rs b/src/app/browser/window/tab/item/page/request.rs new file mode 100644 index 00000000..dcb9232d --- /dev/null +++ b/src/app/browser/window/tab/item/page/request.rs @@ -0,0 +1,30 @@ +mod content; +mod widget; + +use content::Content; +use widget::Widget; + +use adw::ToolbarView; +use std::sync::Arc; + +pub struct Request { + widget: Arc, +} + +impl Request { + pub fn new_arc() -> Arc { + // Init components + let content = Content::new_arc(); + + // Init widget + let widget = Widget::new_arc(content.gobject()); + + // Result + Arc::new(Self { widget }) + } + + // Getters + pub fn gobject(&self) -> &ToolbarView { + &self.widget.gobject() + } +} diff --git a/src/app/browser/window/tab/item/page/request/content.rs b/src/app/browser/window/tab/item/page/request/content.rs new file mode 100644 index 00000000..7bfdfb6e --- /dev/null +++ b/src/app/browser/window/tab/item/page/request/content.rs @@ -0,0 +1,38 @@ +mod response; +mod send; +mod widget; + +use response::Response; +use send::Send; +use widget::Widget; + +use gtk::Box; +use std::sync::Arc; + +pub struct Content { + widget: Arc, +} + +impl Content { + pub fn new_arc() -> Arc { + // Init components + let response = Response::new_arc(); + let send = Send::new_arc(); + + // Init widget + let widget = Widget::new_arc(response.gobject(), send.gobject()); + + // Init events + /* @TODO + response.gobject().connect_activate(|_| {}); + send.gobject().connect_clicked(|_| {}); */ + + // Return activated struct + Arc::new(Self { widget }) + } + + // Getters + pub fn gobject(&self) -> &Box { + &self.widget.gobject() + } +} diff --git a/src/app/browser/window/tab/item/page/request/content/response.rs b/src/app/browser/window/tab/item/page/request/content/response.rs new file mode 100644 index 00000000..44369dcc --- /dev/null +++ b/src/app/browser/window/tab/item/page/request/content/response.rs @@ -0,0 +1,25 @@ +mod widget; + +use widget::Widget; + +use gtk::Entry; +use std::sync::Arc; + +pub struct Response { + widget: Arc, +} + +impl Response { + pub fn new_arc() -> Arc { + // Init widget + let widget = Widget::new_arc(); + + // Result + Arc::new(Self { widget }) + } + + // Getters + pub fn gobject(&self) -> &Entry { + &self.widget.gobject() + } +} diff --git a/src/app/browser/window/tab/item/page/request/content/response/widget.rs b/src/app/browser/window/tab/item/page/request/content/response/widget.rs new file mode 100644 index 00000000..bc7a95ed --- /dev/null +++ b/src/app/browser/window/tab/item/page/request/content/response/widget.rs @@ -0,0 +1,20 @@ +use gtk::Entry; +use std::sync::Arc; + +pub struct Widget { + gobject: Entry, +} + +impl Widget { + // Construct + pub fn new_arc() -> Arc { + let gobject = Entry::builder().hexpand(true).build(); + + Arc::new(Self { gobject }) + } + + // Getters + pub fn gobject(&self) -> &Entry { + &self.gobject + } +} diff --git a/src/app/browser/window/tab/item/page/request/content/send.rs b/src/app/browser/window/tab/item/page/request/content/send.rs new file mode 100644 index 00000000..72265012 --- /dev/null +++ b/src/app/browser/window/tab/item/page/request/content/send.rs @@ -0,0 +1,25 @@ +mod widget; + +use widget::Widget; + +use gtk::Button; +use std::sync::Arc; + +pub struct Send { + widget: Arc, +} + +impl Send { + pub fn new_arc() -> Arc { + // Init widget + let widget = Widget::new_arc(); + + // Result + Arc::new(Self { widget }) + } + + // Getters + pub fn gobject(&self) -> &Button { + &self.widget.gobject() + } +} diff --git a/src/app/browser/window/tab/item/page/request/content/send/widget.rs b/src/app/browser/window/tab/item/page/request/content/send/widget.rs new file mode 100644 index 00000000..7b3eeec7 --- /dev/null +++ b/src/app/browser/window/tab/item/page/request/content/send/widget.rs @@ -0,0 +1,23 @@ +use gtk::Button; +use std::sync::Arc; + +pub struct Widget { + gobject: Button, +} + +impl Widget { + // Construct + pub fn new_arc() -> Arc { + let gobject = Button::builder() + .css_classes(["accent"]) + .label("Send") + .build(); + + Arc::new(Self { gobject }) + } + + // Getters + pub fn gobject(&self) -> &Button { + &self.gobject + } +} diff --git a/src/app/browser/window/tab/item/page/request/content/widget.rs b/src/app/browser/window/tab/item/page/request/content/widget.rs new file mode 100644 index 00000000..29373254 --- /dev/null +++ b/src/app/browser/window/tab/item/page/request/content/widget.rs @@ -0,0 +1,33 @@ +use gtk::{prelude::BoxExt, Box, Button, Entry, Orientation}; +use std::sync::Arc; + +const MARGIN: i32 = 6; +const SPACING: i32 = 8; + +pub struct Widget { + gobject: Box, +} + +impl Widget { + // Construct + pub fn new_arc(response: &Entry, send: &Button) -> Arc { + let gobject = Box::builder() + .margin_bottom(MARGIN) + .margin_end(MARGIN) + .margin_start(MARGIN) + .margin_top(MARGIN) + .spacing(SPACING) + .orientation(Orientation::Horizontal) + .build(); + + gobject.append(response); + gobject.append(send); + + Arc::new(Self { gobject }) + } + + // Getters + pub fn gobject(&self) -> &Box { + &self.gobject + } +} diff --git a/src/app/browser/window/tab/item/page/request/widget.rs b/src/app/browser/window/tab/item/page/request/widget.rs new file mode 100644 index 00000000..c31cfeb5 --- /dev/null +++ b/src/app/browser/window/tab/item/page/request/widget.rs @@ -0,0 +1,24 @@ +use adw::ToolbarView; +use gtk::Box; +use std::sync::Arc; + +pub struct Widget { + gobject: ToolbarView, +} + +impl Widget { + // Construct + pub fn new_arc(content: &Box) -> Arc { + let gobject = ToolbarView::builder() + .content(content) + .visible(false) + .build(); + + Arc::new(Self { gobject }) + } + + // Getters + pub fn gobject(&self) -> &ToolbarView { + &self.gobject + } +} diff --git a/src/app/browser/window/tab/item/page/widget.rs b/src/app/browser/window/tab/item/page/widget.rs index 03eb0a33..2a3b13ea 100644 --- a/src/app/browser/window/tab/item/page/widget.rs +++ b/src/app/browser/window/tab/item/page/widget.rs @@ -1,3 +1,4 @@ +use adw::ToolbarView; use gtk::{ gio::{SimpleAction, SimpleActionGroup}, glib::uuid_string_random, @@ -19,6 +20,7 @@ impl Widget { // Components navigation: &Box, content: &Box, + request: &ToolbarView, ) -> Arc { // Init additional action group let action_group = SimpleActionGroup::new(); @@ -32,6 +34,7 @@ impl Widget { gobject.append(navigation); gobject.append(content); + gobject.append(request); gobject.insert_action_group(&uuid_string_random(), Some(&action_group));