From 2c2004b31689b0f099199b3d811890c0f1ed8817 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= <41945903+qarmin@users.noreply.github.com> Date: Mon, 25 Jan 2021 18:23:42 +0100 Subject: [PATCH] Change progress dialog to progress window (#229) --- czkawka_gui/czkawka.glade | 300 +++++++++++---------- czkawka_gui/src/connect_button_search.rs | 44 ++- czkawka_gui/src/connect_button_stop.rs | 2 +- czkawka_gui/src/connect_compute_results.rs | 4 +- czkawka_gui/src/connect_progress_window.rs | 42 +-- czkawka_gui/src/gui_data.rs | 6 +- czkawka_gui/src/gui_progress_dialog.rs | 7 +- czkawka_gui/src/initialize_gui.rs | 13 + 8 files changed, 212 insertions(+), 206 deletions(-) diff --git a/czkawka_gui/czkawka.glade b/czkawka_gui/czkawka.glade index b268d55..4187edd 100644 --- a/czkawka_gui/czkawka.glade +++ b/czkawka_gui/czkawka.glade @@ -148,155 +148,6 @@ This program is free to use and will always be. - - False - dialog - - - False - 10 - 10 - 10 - 10 - vertical - 10 - - - False - end - - - True - True - True - - - True - False - - - True - False - - - True - False - dialog-cancel - - - False - True - 0 - - - - - True - False - Stop - - - True - True - 1 - - - - - - - - - True - True - 0 - - - - - - - - False - False - 0 - - - - - True - False - - - True - False - Current stage: - - - 0 - 0 - - - - - True - False - All stages: - - - 0 - 1 - - - - - True - False - True - - - 1 - 0 - - - - - True - False - True - 0.09999999977648258 - True - - - 1 - 1 - - - - - True - True - 0 - - - - - True - False - Stage 1/2 - - - False - True - 1 - - - - - - - - False left @@ -2627,4 +2478,155 @@ This program is free to use and will always be. + + False + Czkawka Progress Window + + + True + False + 10 + 10 + 10 + 10 + vertical + 10 + + + True + False + + + True + False + All stages: + + + 0 + 1 + + + + + True + False + True + 0.09999999977648258 + True + + + 1 + 1 + + + + + True + False + Current stage: + + + 0 + 0 + + + + + True + False + True + + + 1 + 0 + + + + + True + True + 0 + + + + + True + False + Stage 1/2 + + + False + True + 1 + + + + + True + False + end + + + True + True + True + + + True + False + + + True + False + + + True + False + dialog-cancel + + + False + True + 0 + + + + + True + False + Stop + + + True + True + 1 + + + + + + + + + True + True + 0 + + + + + + + + False + False + 2 + + + + + + + + diff --git a/czkawka_gui/src/connect_button_search.rs b/czkawka_gui/src/connect_button_search.rs index 90ad57e..c143e23 100644 --- a/czkawka_gui/src/connect_button_search.rs +++ b/czkawka_gui/src/connect_button_search.rs @@ -16,7 +16,7 @@ use czkawka_core::temporary::Temporary; use czkawka_core::zeroed::ZeroedFiles; use glib::Sender; use gtk::prelude::*; -use gtk::{ResponseType, WindowPosition}; +use gtk::WindowPosition; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; use std::thread; @@ -36,7 +36,6 @@ pub fn connect_button_search( futures_sender_invalid_symlinks: futures::channel::mpsc::Sender, futures_sender_broken_files: futures::channel::mpsc::Sender, ) { - let stop_sender = gui_data.stop_sender.clone(); let entry_info = gui_data.entry_info.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone(); let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone(); @@ -79,11 +78,11 @@ pub fn connect_button_search( let tree_view_invalid_symlinks = gui_data.main_notebook.tree_view_invalid_symlinks.clone(); let tree_view_broken_files = gui_data.main_notebook.tree_view_broken_files.clone(); let text_view_errors = gui_data.text_view_errors.clone(); - let dialog_progress = gui_data.progress_dialog.dialog_progress.clone(); - let label_stage = gui_data.progress_dialog.label_stage.clone(); - let grid_progress_stages = gui_data.progress_dialog.grid_progress_stages.clone(); - let progress_bar_current_stage = gui_data.progress_dialog.progress_bar_current_stage.clone(); - let progress_bar_all_stages = gui_data.progress_dialog.progress_bar_all_stages.clone(); + let window_progress = gui_data.progress_window.window_progress.clone(); + let label_stage = gui_data.progress_window.label_stage.clone(); + let grid_progress_stages = gui_data.progress_window.grid_progress_stages.clone(); + let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); + let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); let image_preview_similar_images = gui_data.main_notebook.image_preview_similar_images.clone(); buttons_search_clone.connect_clicked(move |_| { @@ -103,7 +102,7 @@ pub fn connect_button_search( entry_info.set_text("Searching data, it may take a while, please wait..."); // Set dialog to center to current screen(it is impossible to center it to main window) - dialog_progress.set_position(WindowPosition::CenterAlways); + window_progress.set_position(WindowPosition::CenterAlways); // Resets progress bars progress_bar_all_stages.set_fraction(0 as f64); @@ -118,7 +117,7 @@ pub fn connect_button_search( NotebookMainEnum::Duplicate => { label_stage.show(); grid_progress_stages.show_all(); - dialog_progress.resize(1, 1); + window_progress.resize(1, 1); get_list_store(&tree_view_duplicate_finder).clear(); @@ -154,7 +153,7 @@ pub fn connect_button_search( NotebookMainEnum::EmptyFiles => { label_stage.show(); grid_progress_stages.hide(); - dialog_progress.resize(1, 1); + window_progress.resize(1, 1); get_list_store(&tree_view_empty_files_finder).clear(); @@ -175,7 +174,7 @@ pub fn connect_button_search( NotebookMainEnum::EmptyDirectories => { label_stage.show(); grid_progress_stages.hide(); - dialog_progress.resize(1, 1); + window_progress.resize(1, 1); get_list_store(&tree_view_empty_folder_finder).clear(); @@ -193,7 +192,7 @@ pub fn connect_button_search( NotebookMainEnum::BigFiles => { label_stage.show(); grid_progress_stages.hide(); - dialog_progress.resize(1, 1); + window_progress.resize(1, 1); get_list_store(&tree_view_big_files_finder).clear(); @@ -216,7 +215,7 @@ pub fn connect_button_search( NotebookMainEnum::Temporary => { label_stage.show(); grid_progress_stages.hide(); - dialog_progress.resize(1, 1); + window_progress.resize(1, 1); get_list_store(&tree_view_temporary_files_finder).clear(); @@ -238,7 +237,7 @@ pub fn connect_button_search( label_stage.show(); grid_progress_stages.show_all(); - dialog_progress.resize(1, 1); + window_progress.resize(1, 1); get_list_store(&tree_view_similar_images_finder).clear(); @@ -279,7 +278,7 @@ pub fn connect_button_search( NotebookMainEnum::Zeroed => { label_stage.show(); grid_progress_stages.show_all(); - dialog_progress.resize(1, 1); + window_progress.resize(1, 1); get_list_store(&tree_view_zeroed_files_finder).clear(); @@ -300,7 +299,7 @@ pub fn connect_button_search( NotebookMainEnum::SameMusic => { label_stage.show(); grid_progress_stages.show_all(); - dialog_progress.resize(1, 1); + window_progress.resize(1, 1); get_list_store(&tree_view_same_music_finder).clear(); @@ -349,7 +348,7 @@ pub fn connect_button_search( NotebookMainEnum::Symlinks => { label_stage.show(); grid_progress_stages.hide(); - dialog_progress.resize(1, 1); + window_progress.resize(1, 1); get_list_store(&tree_view_invalid_symlinks).clear(); @@ -369,7 +368,7 @@ pub fn connect_button_search( NotebookMainEnum::BrokenFiles => { label_stage.show(); grid_progress_stages.show(); - dialog_progress.resize(1, 1); + window_progress.resize(1, 1); get_list_store(&tree_view_broken_files).clear(); @@ -390,14 +389,7 @@ pub fn connect_button_search( // Show progress dialog if show_dialog.load(Ordering::Relaxed) { - dialog_progress.show(); - - let response = dialog_progress.run(); - if response == ResponseType::DeleteEvent { - stop_sender.send(()).unwrap(); - } - - dialog_progress.hide(); + window_progress.show(); } }); } diff --git a/czkawka_gui/src/connect_button_stop.rs b/czkawka_gui/src/connect_button_stop.rs index 64c686b..e4f9ec6 100644 --- a/czkawka_gui/src/connect_button_stop.rs +++ b/czkawka_gui/src/connect_button_stop.rs @@ -3,7 +3,7 @@ use crate::gui_data::GuiData; use gtk::prelude::*; pub fn connect_button_stop(gui_data: &GuiData) { - let button_stop_in_dialog = gui_data.progress_dialog.button_stop_in_dialog.clone(); + let button_stop_in_dialog = gui_data.progress_window.button_stop_in_dialog.clone(); let stop_sender = gui_data.stop_sender.clone(); button_stop_in_dialog.connect_clicked(move |_| { stop_sender.send(()).unwrap(); diff --git a/czkawka_gui/src/connect_compute_results.rs b/czkawka_gui/src/connect_compute_results.rs index fe0c18e..696ecf5 100644 --- a/czkawka_gui/src/connect_compute_results.rs +++ b/czkawka_gui/src/connect_compute_results.rs @@ -38,12 +38,12 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver< let tree_view_same_music_finder = gui_data.main_notebook.tree_view_same_music_finder.clone(); let shared_same_music_state = gui_data.shared_same_music_state.clone(); let buttons_names = gui_data.bottom_buttons.buttons_names.clone(); - let dialog_progress = gui_data.progress_dialog.dialog_progress.clone(); + let window_progress = gui_data.progress_window.window_progress.clone(); glib_stop_receiver.attach(None, move |msg| { buttons_search.show(); - dialog_progress.hide(); + window_progress.hide(); // Restore clickability to main notebook notebook_main.set_sensitive(true); diff --git a/czkawka_gui/src/connect_progress_window.rs b/czkawka_gui/src/connect_progress_window.rs index 19fc263..8f92154 100644 --- a/czkawka_gui/src/connect_progress_window.rs +++ b/czkawka_gui/src/connect_progress_window.rs @@ -23,10 +23,10 @@ pub fn connect_progress_window( { // Duplicate Files - let label_stage = gui_data.progress_dialog.label_stage.clone(); - let progress_bar_current_stage = gui_data.progress_dialog.progress_bar_current_stage.clone(); - let progress_bar_all_stages = gui_data.progress_dialog.progress_bar_all_stages.clone(); - let grid_progress_stages = gui_data.progress_dialog.grid_progress_stages.clone(); + let label_stage = gui_data.progress_window.label_stage.clone(); + let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); + let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); + let grid_progress_stages = gui_data.progress_window.grid_progress_stages.clone(); let future = async move { while let Some(item) = futures_receiver_duplicate_files.next().await { match item.checking_method { @@ -91,7 +91,7 @@ pub fn connect_progress_window( } { // Empty Files - let label_stage = gui_data.progress_dialog.label_stage.clone(); + let label_stage = gui_data.progress_window.label_stage.clone(); let future = async move { while let Some(item) = futures_receiver_empty_files.next().await { label_stage.set_text(format!("Scanned {} files", item.files_checked).as_str()); @@ -101,7 +101,7 @@ pub fn connect_progress_window( } { // Empty Folder - let label_stage = gui_data.progress_dialog.label_stage.clone(); + let label_stage = gui_data.progress_window.label_stage.clone(); let future = async move { while let Some(item) = futures_receiver_empty_folder.next().await { label_stage.set_text(format!("Scanned {} folders", item.folders_checked).as_str()); @@ -111,7 +111,7 @@ pub fn connect_progress_window( } { // Big Files - let label_stage = gui_data.progress_dialog.label_stage.clone(); + let label_stage = gui_data.progress_window.label_stage.clone(); let future = async move { while let Some(item) = futures_receiver_big_files.next().await { label_stage.set_text(format!("Scanned {} files", item.files_checked).as_str()); @@ -121,9 +121,9 @@ pub fn connect_progress_window( } { // Same Music - let label_stage = gui_data.progress_dialog.label_stage.clone(); - let progress_bar_current_stage = gui_data.progress_dialog.progress_bar_current_stage.clone(); - let progress_bar_all_stages = gui_data.progress_dialog.progress_bar_all_stages.clone(); + let label_stage = gui_data.progress_window.label_stage.clone(); + let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); + let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); let future = async move { while let Some(item) = futures_receiver_same_music.next().await { match item.current_stage { @@ -162,9 +162,9 @@ pub fn connect_progress_window( } { // Similar Images - let label_stage = gui_data.progress_dialog.label_stage.clone(); - let progress_bar_current_stage = gui_data.progress_dialog.progress_bar_current_stage.clone(); - let progress_bar_all_stages = gui_data.progress_dialog.progress_bar_all_stages.clone(); + let label_stage = gui_data.progress_window.label_stage.clone(); + let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); + let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); let future = async move { while let Some(item) = futures_receiver_similar_images.next().await { match item.current_stage { @@ -193,7 +193,7 @@ pub fn connect_progress_window( } { // Temporary - let label_stage = gui_data.progress_dialog.label_stage.clone(); + let label_stage = gui_data.progress_window.label_stage.clone(); let future = async move { while let Some(item) = futures_receiver_temporary.next().await { label_stage.set_text(format!("Scanned {} files", item.files_checked).as_str()); @@ -203,9 +203,9 @@ pub fn connect_progress_window( } { // Zeroed Files - let label_stage = gui_data.progress_dialog.label_stage.clone(); - let progress_bar_current_stage = gui_data.progress_dialog.progress_bar_current_stage.clone(); - let progress_bar_all_stages = gui_data.progress_dialog.progress_bar_all_stages.clone(); + let label_stage = gui_data.progress_window.label_stage.clone(); + let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); + let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); let future = async move { while let Some(item) = futures_receiver_zeroed.next().await { match item.current_stage { @@ -234,7 +234,7 @@ pub fn connect_progress_window( } { // Invalid Symlinks - let label_stage = gui_data.progress_dialog.label_stage.clone(); + let label_stage = gui_data.progress_window.label_stage.clone(); let future = async move { while let Some(item) = futures_receiver_invalid_symlinks.next().await { label_stage.set_text(format!("Scanned {} files", item.files_checked).as_str()); @@ -244,9 +244,9 @@ pub fn connect_progress_window( } { // Broken Files - let label_stage = gui_data.progress_dialog.label_stage.clone(); - let progress_bar_current_stage = gui_data.progress_dialog.progress_bar_current_stage.clone(); - let progress_bar_all_stages = gui_data.progress_dialog.progress_bar_all_stages.clone(); + let label_stage = gui_data.progress_window.label_stage.clone(); + let progress_bar_current_stage = gui_data.progress_window.progress_bar_current_stage.clone(); + let progress_bar_all_stages = gui_data.progress_window.progress_bar_all_stages.clone(); let future = async move { while let Some(item) = futures_receiver_broken_files.next().await { match item.current_stage { diff --git a/czkawka_gui/src/gui_data.rs b/czkawka_gui/src/gui_data.rs index 29351ca..bdfe7d3 100644 --- a/czkawka_gui/src/gui_data.rs +++ b/czkawka_gui/src/gui_data.rs @@ -38,7 +38,7 @@ pub struct GuiData { pub upper_notebook: GUIUpperNotebook, pub popovers: GUIPopovers, pub bottom_buttons: GUIBottomButtons, - pub progress_dialog: GUIProgressDialog, + pub progress_window: GUIProgressDialog, pub about: GUIAbout, pub options: GUIOptions, pub header: GUIHeader, @@ -88,7 +88,7 @@ impl GuiData { let upper_notebook = GUIUpperNotebook::create_from_builder(&builder); let popovers = GUIPopovers::create_from_builder(&builder); let bottom_buttons = GUIBottomButtons::create_from_builder(&builder); - let progress_dialog = GUIProgressDialog::create_from_builder(&builder); + let progress_window = GUIProgressDialog::create_from_builder(&builder); let options = GUIOptions::create_from_builder(&builder); let about = GUIAbout::create_from_builder(&builder); let header = GUIHeader::create_from_builder(&builder); @@ -156,7 +156,7 @@ impl GuiData { upper_notebook, popovers, bottom_buttons, - progress_dialog, + progress_window, about, options, header, diff --git a/czkawka_gui/src/gui_progress_dialog.rs b/czkawka_gui/src/gui_progress_dialog.rs index 7e1a98b..26f9f4e 100644 --- a/czkawka_gui/src/gui_progress_dialog.rs +++ b/czkawka_gui/src/gui_progress_dialog.rs @@ -2,7 +2,7 @@ use gtk::prelude::*; #[derive(Clone)] pub struct GUIProgressDialog { - pub dialog_progress: gtk::Dialog, + pub window_progress: gtk::Window, pub progress_bar_current_stage: gtk::ProgressBar, pub progress_bar_all_stages: gtk::ProgressBar, @@ -16,8 +16,7 @@ pub struct GUIProgressDialog { impl GUIProgressDialog { pub fn create_from_builder(builder: >k::Builder) -> Self { - let dialog_progress: gtk::Dialog = builder.get_object("dialog_progress").unwrap(); - dialog_progress.set_title("Czkawka"); + let window_progress: gtk::Window = builder.get_object("window_progress").unwrap(); let progress_bar_current_stage: gtk::ProgressBar = builder.get_object("progress_bar_current_stage").unwrap(); let progress_bar_all_stages: gtk::ProgressBar = builder.get_object("progress_bar_all_stages").unwrap(); @@ -29,7 +28,7 @@ impl GUIProgressDialog { let button_stop_in_dialog: gtk::Button = builder.get_object("button_stop_in_dialog").unwrap(); Self { - dialog_progress, + window_progress, progress_bar_current_stage, progress_bar_all_stages, label_stage, diff --git a/czkawka_gui/src/initialize_gui.rs b/czkawka_gui/src/initialize_gui.rs index b2d7ed7..65f3dc2 100644 --- a/czkawka_gui/src/initialize_gui.rs +++ b/czkawka_gui/src/initialize_gui.rs @@ -457,6 +457,19 @@ pub fn initialize_gui(gui_data: &mut GuiData) { }); } } + + //// Window progress + { + let window_progress = gui_data.progress_window.window_progress.clone(); + let stop_sender = gui_data.stop_sender.clone(); + + window_progress.hide_on_delete(); + + window_progress.connect_delete_event(move |_e, _y| { + stop_sender.send(()).unwrap(); + gtk::Inhibit(true) + }); + } } fn show_preview(tree_view: &TreeView, text_view_errors: &TextView, check_button_settings_show_preview_similar_images: &CheckButton, image_preview_similar_images: &Image) { let (selected_rows, tree_model) = tree_view.get_selection().get_selected_rows();