From 0f60c21e6bb0a878f511e16fc51e3c73f620fcc4 Mon Sep 17 00:00:00 2001 From: Ward from fusion-voyager-3 Date: Mon, 15 Jan 2024 18:33:56 +0300 Subject: [PATCH] add broken while loop threading --- Cargo.lock | 97 +++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 3 ++ src/build_ui.rs | 33 +++++++++++++-- src/welcome_page.rs | 6 +++ 4 files changed, 136 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 37e3ced..61b3e88 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,19 @@ version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +[[package]] +name = "async-channel" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c" +dependencies = [ + "concurrent-queue", + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -55,12 +68,57 @@ dependencies = [ "target-lexicon", ] +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "equivalent" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener", + "pin-project-lite", +] + [[package]] name = "field-offset" version = "0.3.6" @@ -71,6 +129,12 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "fragile" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" + [[package]] name = "futures-channel" version = "0.3.30" @@ -496,12 +560,21 @@ dependencies = [ "system-deps", ] +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + [[package]] name = "pika-installer-gtk4" version = "0.1.0" dependencies = [ + "async-channel", + "fragile", "gtk4", "libadwaita", + "time", ] [[package]] @@ -522,6 +595,12 @@ version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -704,6 +783,24 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "time" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" +dependencies = [ + "deranged", + "powerfmt", + "serde", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + [[package]] name = "toml" version = "0.8.2" diff --git a/Cargo.toml b/Cargo.toml index 42aab21..6e16d51 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,4 +7,7 @@ edition = "2021" [dependencies] adw = { version = "0.5.3", package = "libadwaita" } +async-channel = "2.1.1" +fragile = "2.0.0" gtk = { version = "0.7.3", package = "gtk4" } +time = "0.3.31" diff --git a/src/build_ui.rs b/src/build_ui.rs index d94475e..6c193f7 100644 --- a/src/build_ui.rs +++ b/src/build_ui.rs @@ -11,6 +11,11 @@ use gtk::subclass::layout_child; use crate::save_window_size; use crate::welcome_page; +use std::thread; +use std::time::*; +use fragile::*; + + // build ui function linked to app startup above pub fn build_ui(app: &adw::Application) { @@ -22,6 +27,9 @@ pub fn build_ui(app: &adw::Application) { // Widget Bank + let gtk_loops = true; + + /// Create A box let _main_box = gtk::Box::builder() // that puts items vertically @@ -93,7 +101,7 @@ pub fn build_ui(app: &adw::Application) { // Add welcome_page.rs as a page for content_stack welcome_page(&content_stack); - + // create the main Application window let window = adw::ApplicationWindow::builder() // The text on the titlebar @@ -131,6 +139,25 @@ pub fn build_ui(app: &adw::Application) { window.connect_hide(clone!(@weak window => move |_| save_window_size(&window, &glib_settings))); window.connect_hide(clone!(@weak window => move |_| window.destroy())); - // show the window - window.show() + window.show(); + + let bottom_box_clone = fragile::Fragile::new(bottom_box.clone()); + let content_stack_clone = fragile::Fragile::new(content_stack.clone()); + + gio::spawn_blocking(move || { + while gtk_loops == true { + glib::MainContext::default().invoke( move || { + bottom_box_loop( &bottom_box_clone, &content_stack_clone) + }); + } + }); + +} + +fn bottom_box_loop(bottom_box: &Fragile, content_stack: &Fragile) { + if content_stack.get().visible_child_name().expect("gstring to string").as_str() == "welcome_page" { + bottom_box.get().set_visible(false) + } else { + bottom_box.get().set_visible(true) + } } \ No newline at end of file diff --git a/src/welcome_page.rs b/src/welcome_page.rs index 0aa1cf5..c949689 100644 --- a/src/welcome_page.rs +++ b/src/welcome_page.rs @@ -128,4 +128,10 @@ pub fn welcome_page(content_stack: >k::Stack) { // / Content stack appends //// Add the welcome_main_box as page: welcome_page, Give it nice title content_stack.add_titled(&welcome_main_box, Some("welcome_page"), "Welcome"); + + let hahaha = gtk::Button::builder() + .label("Rot") + .build(); + + content_stack.add_titled(&hahaha, Some("shit_page"), "SHit"); } \ No newline at end of file