From 3f80738855b906e604514729397698b6eb76a8b0 Mon Sep 17 00:00:00 2001 From: Nefomemes Date: Tue, 9 Nov 2021 05:16:37 +0700 Subject: [PATCH 1/8] fix: activity views not appearing --- src/components/sidebar/sidebar.ui | 120 +++++++++++++++--------------- 1 file changed, 62 insertions(+), 58 deletions(-) diff --git a/src/components/sidebar/sidebar.ui b/src/components/sidebar/sidebar.ui index e8f5b90..372a406 100644 --- a/src/components/sidebar/sidebar.ui +++ b/src/components/sidebar/sidebar.ui @@ -6,67 +6,71 @@ - file, You can obtain one at https://mozilla.org/MPL/2.0/. --> \ No newline at end of file From fb0a4e731d1a417ab6d975b74444c06aed1a9a63 Mon Sep 17 00:00:00 2001 From: Nefo Fortressia Date: Fri, 12 Nov 2021 17:29:45 +0700 Subject: [PATCH 2/8] refactor: reexport components in components/mod.rs --- src/components/mod.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/components/mod.rs b/src/components/mod.rs index 6679c17..45dd3dc 100644 --- a/src/components/mod.rs +++ b/src/components/mod.rs @@ -6,3 +6,8 @@ pub mod app; pub mod editor; pub mod sidebar; pub mod window; + +pub use app::EchidnaEditor; +pub use editor::EchidnaCoreEditor; +pub use sidebar::EchidnaSidebar; +pub use window::EchidnaWindow; From 0c43be616e487642cb58e3b7c1d6999cd1758ba1 Mon Sep 17 00:00:00 2001 From: Nefo Fortressia Date: Fri, 12 Nov 2021 18:07:06 +0700 Subject: [PATCH 3/8] style: change the /lib prelude to import everything in closeable_tab --- src/lib/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/mod.rs b/src/lib/mod.rs index 233c324..07be95f 100644 --- a/src/lib/mod.rs +++ b/src/lib/mod.rs @@ -5,5 +5,5 @@ pub mod closeable_tab; pub mod prelude { - pub use super::closeable_tab::ClosableTabImplementedNotebook; + pub use super::closeable_tab::*; } From 8a9c414aeee490f81b246148f66dcdd96b445c42 Mon Sep 17 00:00:00 2001 From: Nefo Fortressia Date: Fri, 12 Nov 2021 17:31:46 +0700 Subject: [PATCH 4/8] refactor: reexport component preludes --- src/components/mod.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/mod.rs b/src/components/mod.rs index 45dd3dc..1cd3fdb 100644 --- a/src/components/mod.rs +++ b/src/components/mod.rs @@ -11,3 +11,7 @@ pub use app::EchidnaEditor; pub use editor::EchidnaCoreEditor; pub use sidebar::EchidnaSidebar; pub use window::EchidnaWindow; + +pub mod prelude { + pub use super::window::{file::*, menubar::*}; +} From 64b63cf41677d7f8021dc7871e5a018ce9072ac3 Mon Sep 17 00:00:00 2001 From: Nefo Fortressia Date: Fri, 12 Nov 2021 17:33:40 +0700 Subject: [PATCH 5/8] refactor: reexport all preludes to the crate --- src/main.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main.rs b/src/main.rs index 7e257d6..f8015f9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,3 +13,8 @@ fn main() { std::process::exit(app.run()); } + +pub mod prelude { + pub use super::components::prelude::*; + pub use super::lib::prelude::*; +} From 18ac470c473f34d0b1b1e42d883039ec6dfd7af5 Mon Sep 17 00:00:00 2001 From: Nefo Fortressia Date: Mon, 15 Nov 2021 07:14:59 +0700 Subject: [PATCH 6/8] refactor: make tab label their own widget This helps with downcasting which greatly helps with type safety. --- src/components/mod.rs | 2 ++ src/components/tab_label/imp.rs | 45 ++++++++++++++++++++++++ src/components/tab_label/mod.rs | 29 ++++++++++++++++ src/components/tab_label/tab-label.ui | 17 ++++++++++ src/lib/closeable_tab.rs | 49 +++++++++++---------------- 5 files changed, 112 insertions(+), 30 deletions(-) create mode 100644 src/components/tab_label/imp.rs create mode 100644 src/components/tab_label/mod.rs create mode 100644 src/components/tab_label/tab-label.ui diff --git a/src/components/mod.rs b/src/components/mod.rs index 1cd3fdb..5353e5a 100644 --- a/src/components/mod.rs +++ b/src/components/mod.rs @@ -5,11 +5,13 @@ pub mod app; pub mod editor; pub mod sidebar; +pub mod tab_label; pub mod window; pub use app::EchidnaEditor; pub use editor::EchidnaCoreEditor; pub use sidebar::EchidnaSidebar; +pub use tab_label::TabLabel; pub use window::EchidnaWindow; pub mod prelude { diff --git a/src/components/tab_label/imp.rs b/src/components/tab_label/imp.rs new file mode 100644 index 0000000..34ca917 --- /dev/null +++ b/src/components/tab_label/imp.rs @@ -0,0 +1,45 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use gtk::prelude::*; +use gtk::subclass::prelude::*; +use gtk::CompositeTemplate; + +#[derive(Default, CompositeTemplate)] +#[template(file = "./tab-label.ui")] +pub struct TabLabel { + #[template_child] + pub button: TemplateChild, +} + +#[glib::object_subclass] +impl ObjectSubclass for TabLabel { + const NAME: &'static str = "TabLabel"; + type Type = super::TabLabel; + type ParentType = gtk::Box; + + fn class_init(klass: &mut Self::Class) { + Self::bind_template(klass); + } + + fn instance_init(obj: &glib::subclass::InitializingObject) { + obj.init_template(); + } +} + +impl ObjectImpl for TabLabel {} +impl WidgetImpl for TabLabel {} +impl BoxImpl for TabLabel {} + +impl BuildableImpl for TabLabel { + fn add_child( + &self, + buildable: &Self::Type, + builder: >k::Builder, + child: &glib::Object, + type_: Option<&str>, + ) { + buildable.prepend(child.downcast_ref::().unwrap()); + } +} diff --git a/src/components/tab_label/mod.rs b/src/components/tab_label/mod.rs new file mode 100644 index 0000000..1b45623 --- /dev/null +++ b/src/components/tab_label/mod.rs @@ -0,0 +1,29 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +pub mod imp; +use glib::IsA; +use gtk::prelude::*; +use gtk::subclass::prelude::*; + +glib::wrapper! { + pub struct TabLabel(ObjectSubclass) + @extends gtk::Box, gtk::Widget, + @implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable; +} + +impl TabLabel { + pub fn new>(tab_label: Option<&U>) -> Self { + let this: Self = glib::Object::new(&[]).expect("Failed to create 'TabLabel' component."); + + if tab_label.is_some() { + this.prepend(tab_label.unwrap()); + } + this + } + + pub fn to_imp(&self) -> &imp::TabLabel { + imp::TabLabel::from_instance(self) + } +} diff --git a/src/components/tab_label/tab-label.ui b/src/components/tab_label/tab-label.ui new file mode 100644 index 0000000..a383977 --- /dev/null +++ b/src/components/tab_label/tab-label.ui @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/src/lib/closeable_tab.rs b/src/lib/closeable_tab.rs index 85900df..be42037 100644 --- a/src/lib/closeable_tab.rs +++ b/src/lib/closeable_tab.rs @@ -2,6 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +use crate::components::tab_label::TabLabel; use glib::IsA; use gtk::{prelude::*, Box, Button, Widget}; @@ -16,39 +17,24 @@ pub trait ClosableTabImplementedNotebook { child: &T, tab_label: Option<&U>, ) -> u32; - - fn create_closable_tab>(tab_label: Option<&U>) -> (Box, Button); } impl ClosableTabImplementedNotebook for gtk::Notebook { - fn create_closable_tab>(tab_label: Option<&U>) -> (Box, Button) { - let tab = Box::new(gtk::Orientation::Horizontal, 5); - if tab_label.is_some() { - tab.append(tab_label.unwrap()); - } - - let button = gtk::Button::new(); - - button.set_icon_name("window-close-symbolic"); - button.set_has_frame(false); - - tab.append(&button); - - (tab, button) - } - fn prepend_closable_page, U: IsA>( &self, child: &T, tab_label: Option<&U>, ) -> u32 { - let (tab, button) = &Self::create_closable_tab(tab_label); - let page = self.prepend_page(child, Some(tab)); + let tab_label_widget = TabLabel::new(tab_label); + let page = self.prepend_page(child, Some(&tab_label_widget)); - button.connect_clicked(glib::clone!(@weak self as notebook => - move |_| { - notebook.remove_page(Some(page)); - })); + tab_label_widget + .to_imp() + .button + .connect_clicked(glib::clone!(@weak self as notebook => + move |_| { + notebook.remove_page(Some(page)); + })); page } @@ -58,13 +44,16 @@ impl ClosableTabImplementedNotebook for gtk::Notebook { child: &T, tab_label: Option<&U>, ) -> u32 { - let (tab, button) = &Self::create_closable_tab(tab_label); - let page = self.append_page(child, Some(tab)); + let tab_label_widget = TabLabel::new(tab_label); + let page = self.append_page(child, Some(&tab_label_widget)); - button.connect_clicked(glib::clone!(@weak self as notebook => - move |_| { - notebook.remove_page(Some(page)); - })); + tab_label_widget + .to_imp() + .button + .connect_clicked(glib::clone!(@weak self as notebook => + move |_| { + notebook.remove_page(Some(page)); + })); page } From 92f6770876469cccec03139b8abb3e9b8984fe27 Mon Sep 17 00:00:00 2001 From: Nefo Fortressia Date: Mon, 13 Dec 2021 10:57:52 +0700 Subject: [PATCH 7/8] refactor: use gtk::show_uri() instead of webbrowser crate --- Cargo.lock | 118 ------------------------------- Cargo.toml | 1 - src/components/window/menubar.rs | 16 ++--- 3 files changed, 8 insertions(+), 127 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9326399..a961a24 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,12 +20,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "bumpalo" -version = "3.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" - [[package]] name = "cairo-rs" version = "0.14.7" @@ -68,12 +62,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - [[package]] name = "echidna" version = "0.1.0" @@ -87,7 +75,6 @@ dependencies = [ "serde", "serde_json", "sourceview5", - "webbrowser", ] [[package]] @@ -438,36 +425,12 @@ version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" -[[package]] -name = "js-sys" -version = "0.3.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - [[package]] name = "libc" version = "0.2.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2a5ac8f984bfcf3a823267e5fde638acc3325f6496633a5da6bb6eb2171e103" -[[package]] -name = "log" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if", -] - [[package]] name = "memoffset" version = "0.6.4" @@ -843,87 +806,6 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" -[[package]] -name = "wasm-bindgen" -version = "0.2.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" -dependencies = [ - "bumpalo", - "lazy_static", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" - -[[package]] -name = "web-sys" -version = "0.3.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webbrowser" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecad156490d6b620308ed411cfee90d280b3cbd13e189ea0d3fada8acc89158a" -dependencies = [ - "web-sys", - "widestring", - "winapi", -] - -[[package]] -name = "widestring" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" - [[package]] name = "winapi" version = "0.3.9" diff --git a/Cargo.toml b/Cargo.toml index 65a0203..a187030 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,5 +14,4 @@ serde = { version = "^1.0.130", features = ["derive"] } relative-path = "^1.5.0" gdk = { version = "^0.3.0", package = "gdk4"} sourceview = { package = "sourceview5", version = "^0.1.0", git = "https://github.com/EchidnaHQ/sourceview" } -webbrowser = { version = "^0.5.5" } once_cell = "1" \ No newline at end of file diff --git a/src/components/window/menubar.rs b/src/components/window/menubar.rs index 69b3a41..f51f47f 100644 --- a/src/components/window/menubar.rs +++ b/src/components/window/menubar.rs @@ -78,20 +78,20 @@ impl MenubarImplementedEditor for EchidnaWindow { app.add_action(&act_report_issue); - act_report_issue.connect_activate(|_action, _variant| { - webbrowser::open("https://gitlab.com/EchidnaHQ/Echidna/-/issues/new?issue"); - }); + act_report_issue.connect_activate(clone!(@weak self as win => + move |_action, _variant| { + gtk::show_uri(Some(&win), "https://github.com/EchidnaHQ/Echidna/issues/new", gdk::CURRENT_TIME); + })); } { let act_search_feature_requests = SimpleAction::new("search-feature-requests", None); app.add_action(&act_search_feature_requests); - act_search_feature_requests.connect_activate(|_action, _variant| { - webbrowser::open( - "https://gitlab.com/EchidnaHQ/Echidna/-/issues?label_name%5B%5D=feat", - ); - }); + act_search_feature_requests.connect_activate(clone!(@weak self as win => + move |_action, _variant| { + gtk::show_uri(Some(&win), "https://github.com/EchidnaHQ/Echidna/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement", gdk::CURRENT_TIME); + })); } { let act_window_close = SimpleAction::new("close", None); From 7478d894eaa4962c77be45a207f86b94e5efc1a0 Mon Sep 17 00:00:00 2001 From: Nefo Fortressia Date: Tue, 14 Dec 2021 05:59:19 +0700 Subject: [PATCH 8/8] fix: fix unexpected } in workspace.rs I think this is due to git add -p mistakes when I did 1b9f20b. Not affecting anything, as workspace.rs is still WIP. --- src/components/window/workspace.rs | 45 +++++++++++++++--------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/src/components/window/workspace.rs b/src/components/window/workspace.rs index 9cc5c6c..b7e29d3 100644 --- a/src/components/window/workspace.rs +++ b/src/components/window/workspace.rs @@ -125,31 +125,30 @@ impl WorkspaceImplementedEditor for EchidnaEditor { self.open_folder(folder); } } -} -/** - * - * - */ -fn recursive_add_files_into_tree_store(&self, parent_file: File, tree: &TreeStore) { - let child_enumerate_cancellable = Cancellable::new(); - let child_files = parent_file - .enumerate_children( - "*", - FileQueryInfoFlags::NONE, - Some(&child_enumerate_cancellable), - ) - .expect( - format!( - "Could not look up the children files of {:?} because:\n{:#?}", - filepath + /** + * + * + */ + fn recursive_add_files_into_tree_store(&self, parent_file: File, tree: &TreeStore) { + let child_enumerate_cancellable = Cancellable::new(); + let child_files = parent_file + .enumerate_children( + "*", + FileQueryInfoFlags::NONE, + Some(&child_enumerate_cancellable), ) - .as_str(), - ); - let filepath = &parent_file - .path() - .expect("Could not get the file path of the file."); - + .expect( + format!( + "Could not look up the children files of {:?} because:\n{:#?}", + filepath + ) + .as_str(), + ); + let filepath = &parent_file + .path() + .expect("Could not get the file path of the file."); + for file_iter in files { let file_info = file_iter.expect(); let file = parent_file.child(file_info.name());