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
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();