1
0
Fork 0
mirror of synced 2024-05-01 11:02:53 +12:00

Modernize notebook handling (#189)

This commit is contained in:
Rafał Mikrut 2021-01-10 12:06:25 +01:00 committed by GitHub
parent 9975605f75
commit 30bab75a5d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 286 additions and 344 deletions

View file

@ -1,6 +1,7 @@
extern crate gtk;
use crate::gui_data::GuiData;
use crate::help_functions::*;
use crate::notebook_enums::*;
use gtk::prelude::*;
use std::collections::BTreeMap;
use std::fs;
@ -12,7 +13,6 @@ pub fn connect_button_delete(gui_data: &GuiData) {
let gui_data = gui_data.clone();
let buttons_delete = gui_data.buttons_delete.clone();
let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let notebook_main = gui_data.notebook_main.clone();
let window_main = gui_data.window_main.clone();
let scrolled_window_main_empty_folder_finder = gui_data.scrolled_window_main_empty_folder_finder.clone();
@ -53,23 +53,23 @@ pub fn connect_button_delete(gui_data: &GuiData) {
confirmation_dialog_delete.close();
}
match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() {
"notebook_main_duplicate_finder_label" => {
match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) {
NotebookMainEnum::Duplicate => {
tree_remove(&scrolled_window_duplicate_finder.clone(), ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, ColumnsDuplicates::Color as i32, &gui_data);
}
"scrolled_window_main_empty_folder_finder" => {
NotebookMainEnum::EmptyDirectories => {
empty_folder_remover(&scrolled_window_main_empty_folder_finder.clone(), ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, &gui_data);
}
"scrolled_window_main_empty_files_finder" => {
NotebookMainEnum::EmptyFiles => {
basic_remove(&scrolled_window_main_empty_files_finder.clone(), ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, &gui_data);
}
"scrolled_window_main_temporary_files_finder" => {
NotebookMainEnum::Temporary => {
basic_remove(&scrolled_window_main_temporary_files_finder.clone(), ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, &gui_data);
}
"notebook_big_main_file_finder" => {
NotebookMainEnum::BigFiles => {
basic_remove(&scrolled_window_big_files_finder.clone(), ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, &gui_data);
}
"notebook_main_similar_images_finder_label" => {
NotebookMainEnum::SimilarImages => {
tree_remove(
&scrolled_window_similar_images_finder.clone(),
ColumnsSimilarImages::Name as i32,
@ -77,19 +77,17 @@ pub fn connect_button_delete(gui_data: &GuiData) {
ColumnsSimilarImages::Color as i32,
&gui_data,
);
// let list_store = get_list_store(&scrolled_window_similar_images_finder);
image_preview_similar_images.hide();
}
"notebook_main_zeroed_files_finder" => {
NotebookMainEnum::Zeroed => {
basic_remove(&scrolled_window_zeroed_files_finder.clone(), ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, &gui_data);
}
"notebook_main_same_music_finder" => {
NotebookMainEnum::SameMusic => {
tree_remove(&scrolled_window_same_music_finder.clone(), ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, ColumnsSameMusic::Color as i32, &gui_data);
}
"scrolled_window_invalid_symlinks" => {
NotebookMainEnum::Symlinks => {
basic_remove(&scrolled_window_invalid_symlinks.clone(), ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, &gui_data);
}
e => panic!("Not existent {}", e),
}
});
}
@ -106,8 +104,6 @@ pub fn empty_folder_remover(scrolled_window: &gtk::ScrolledWindow, column_file_n
}
let list_store = get_list_store(&scrolled_window);
// let new_tree_model = TreeModel::new(); // TODO - maybe create new model when inserting a new data, because this seems to be not optimal when using thousands of rows
let mut messages: String = "".to_string();
// Must be deleted from end to start, because when deleting entries, TreePath(and also TreeIter) will points to invalid data
@ -192,8 +188,6 @@ pub fn basic_remove(scrolled_window: &gtk::ScrolledWindow, column_file_name: i32
}
let list_store = get_list_store(&scrolled_window);
// let new_tree_model = TreeModel::new(); // TODO - maybe create new model when inserting a new data, because this seems to be not optimal when using thousands of rows
let mut messages: String = "".to_string();
// Must be deleted from end to start, because when deleting entries, TreePath(and also TreeIter) will points to invalid data
@ -214,7 +208,6 @@ pub fn basic_remove(scrolled_window: &gtk::ScrolledWindow, column_file_name: i32
}
// Remove all occurrences - remove every element which have same path and name as even non selected ones
//
pub fn tree_remove(scrolled_window: &gtk::ScrolledWindow, column_file_name: i32, column_path: i32, column_color: i32, gui_data: &GuiData) {
let text_view_errors = gui_data.text_view_errors.clone();
@ -227,8 +220,6 @@ pub fn tree_remove(scrolled_window: &gtk::ScrolledWindow, column_file_name: i32,
}
let list_store = get_list_store(&scrolled_window);
// let new_tree_model = TreeModel::new(); // TODO - maybe create new model when inserting a new data, because this seems to be not optimal when using thousands of rows
let mut messages: String = "".to_string();
let mut vec_path_to_delete: Vec<(String, String)> = Vec::new();
@ -243,7 +234,6 @@ pub fn tree_remove(scrolled_window: &gtk::ScrolledWindow, column_file_name: i32,
map_with_path_to_delete.entry(path.clone()).or_insert_with(Vec::new);
map_with_path_to_delete.get_mut(path.as_str()).unwrap().push(file_name);
// vec_path_to_delete.push((path, file_name));
}
// Delete duplicated entries, and remove real files
@ -267,14 +257,14 @@ pub fn tree_remove(scrolled_window: &gtk::ScrolledWindow, column_file_name: i32,
let mut vec_tree_path_to_delete: Vec<gtk::TreePath> = Vec::new();
let mut current_iter = first_iter;
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR {
panic!(); // First element should be header
panic!("First deleted element, should be a header"); // First element should be header
};
let mut next_iter;
let mut next_next_iter;
'main: loop {
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR {
panic!(); // First element should be header
panic!("First deleted element, should be a header"); // First element should be header
};
next_iter = current_iter.clone();

View file

@ -1,5 +1,6 @@
extern crate gtk;
use crate::gui_data::GuiData;
use crate::notebook_enums::*;
use czkawka_core::common_traits::SaveResults;
use gtk::prelude::*;
@ -15,76 +16,61 @@ pub fn connect_button_save(gui_data: &GuiData) {
let shared_same_music_state = gui_data.shared_same_music_state.clone();
let shared_zeroed_files_state = gui_data.shared_zeroed_files_state.clone();
let shared_same_invalid_symlinks = gui_data.shared_same_invalid_symlinks.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let notebook_main = gui_data.notebook_main.clone();
buttons_save.connect_clicked(move |_| match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() {
"notebook_main_duplicate_finder_label" => {
let file_name = "results_duplicates.txt";
buttons_save.connect_clicked(move |_| {
let file_name;
shared_duplication_state.borrow_mut().save_results_to_file(file_name);
match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) {
NotebookMainEnum::Duplicate => {
file_name = "results_duplicates.txt";
post_save_things(file_name, "duplicate", &gui_data);
shared_duplication_state.borrow_mut().save_results_to_file(file_name);
}
NotebookMainEnum::EmptyDirectories => {
file_name = "results_empty_folder.txt";
shared_empty_folders_state.borrow_mut().save_results_to_file(file_name);
}
NotebookMainEnum::EmptyFiles => {
file_name = "results_empty_files.txt";
shared_empty_files_state.borrow_mut().save_results_to_file(file_name);
}
NotebookMainEnum::Temporary => {
file_name = "results_temporary_files.txt";
shared_temporary_files_state.borrow_mut().save_results_to_file(file_name);
}
NotebookMainEnum::BigFiles => {
file_name = "results_big_files.txt";
shared_big_files_state.borrow_mut().save_results_to_file(file_name);
}
NotebookMainEnum::SimilarImages => {
file_name = "results_similar_images.txt";
shared_similar_images_state.borrow_mut().save_results_to_file(file_name);
}
NotebookMainEnum::Zeroed => {
file_name = "results_zeroed_files.txt";
shared_zeroed_files_state.borrow_mut().save_results_to_file(file_name);
}
NotebookMainEnum::SameMusic => {
file_name = "results_same_music.txt";
shared_same_music_state.borrow_mut().save_results_to_file(file_name);
}
NotebookMainEnum::Symlinks => {
file_name = "results_invalid_symlinks.txt";
shared_same_invalid_symlinks.borrow_mut().save_results_to_file(file_name);
}
}
"scrolled_window_main_empty_folder_finder" => {
let file_name = "results_empty_folder.txt";
shared_empty_folders_state.borrow_mut().save_results_to_file(file_name);
post_save_things(file_name, "empty_folder", &gui_data);
}
"scrolled_window_main_empty_files_finder" => {
let file_name = "results_empty_files.txt";
shared_empty_files_state.borrow_mut().save_results_to_file(file_name);
post_save_things(file_name, "empty_file", &gui_data);
}
"scrolled_window_main_temporary_files_finder" => {
let file_name = "results_temporary_files.txt";
shared_temporary_files_state.borrow_mut().save_results_to_file(file_name);
post_save_things(file_name, "temporary_file", &gui_data);
}
"notebook_big_main_file_finder" => {
let file_name = "results_big_files.txt";
shared_big_files_state.borrow_mut().save_results_to_file(file_name);
post_save_things(file_name, "big_file", &gui_data);
}
"notebook_main_similar_images_finder_label" => {
let file_name = "results_similar_images.txt";
shared_similar_images_state.borrow_mut().save_results_to_file(file_name);
post_save_things(file_name, "similar_images", &gui_data);
}
"notebook_main_zeroed_files_finder" => {
let file_name = "results_zeroed_files.txt";
shared_zeroed_files_state.borrow_mut().save_results_to_file(file_name);
post_save_things(file_name, "zeroed_files", &gui_data);
}
"notebook_main_same_music_finder" => {
let file_name = "results_same_music.txt";
shared_same_music_state.borrow_mut().save_results_to_file(file_name);
post_save_things(file_name, "same_music", &gui_data);
}
"scrolled_window_invalid_symlinks" => {
let file_name = "results_invalid_symlinks.txt";
shared_same_invalid_symlinks.borrow_mut().save_results_to_file(file_name);
post_save_things(file_name, "invalid_symlinks", &gui_data);
}
e => panic!("Not existent {}", e),
post_save_things(file_name, &to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &gui_data);
});
}
fn post_save_things(file_name: &str, type_of_tab: &str, gui_data: &GuiData) {
fn post_save_things(file_name: &str, type_of_tab: &NotebookMainEnum, gui_data: &GuiData) {
let entry_info = gui_data.entry_info.clone();
let buttons_save = gui_data.buttons_save.clone();
let shared_buttons = gui_data.shared_buttons.clone();

View file

@ -3,6 +3,7 @@ use czkawka_core::*;
extern crate gtk;
use crate::gui_data::GuiData;
use crate::help_functions::*;
use crate::notebook_enums::*;
use czkawka_core::big_file::BigFile;
use czkawka_core::duplicate::DuplicateFinder;
use czkawka_core::empty_files::EmptyFiles;
@ -34,7 +35,6 @@ pub fn connect_button_search(
futures_sender_invalid_symlinks: futures::channel::mpsc::Sender<invalid_symlinks::ProgressData>,
) {
let entry_info = gui_data.entry_info.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let notebook_main = gui_data.notebook_main.clone();
let scrolled_window_included_directories = gui_data.scrolled_window_included_directories.clone();
let scrolled_window_excluded_directories = gui_data.scrolled_window_excluded_directories.clone();
@ -107,8 +107,8 @@ pub fn connect_button_search(
reset_text_view(&text_view_errors);
match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() {
"notebook_main_duplicate_finder_label" => {
match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) {
NotebookMainEnum::Duplicate => {
label_stage.show();
grid_progress_stages.show_all();
dialog_progress.resize(1, 1);
@ -147,7 +147,7 @@ pub fn connect_button_search(
let _ = glib_stop_sender.send(Message::Duplicates(df));
});
}
"scrolled_window_main_empty_files_finder" => {
NotebookMainEnum::EmptyFiles => {
label_stage.show();
grid_progress_stages.hide();
dialog_progress.resize(1, 1);
@ -171,7 +171,7 @@ pub fn connect_button_search(
let _ = glib_stop_sender.send(Message::EmptyFiles(vf));
});
}
"scrolled_window_main_empty_folder_finder" => {
NotebookMainEnum::EmptyDirectories => {
label_stage.show();
grid_progress_stages.hide();
dialog_progress.resize(1, 1);
@ -192,7 +192,7 @@ pub fn connect_button_search(
let _ = glib_stop_sender.send(Message::EmptyFolders(ef));
});
}
"notebook_big_main_file_finder" => {
NotebookMainEnum::BigFiles => {
label_stage.show();
grid_progress_stages.hide();
dialog_progress.resize(1, 1);
@ -217,7 +217,7 @@ pub fn connect_button_search(
let _ = glib_stop_sender.send(Message::BigFiles(bf));
});
}
"scrolled_window_main_temporary_files_finder" => {
NotebookMainEnum::Temporary => {
label_stage.show();
grid_progress_stages.hide();
dialog_progress.resize(1, 1);
@ -240,7 +240,7 @@ pub fn connect_button_search(
let _ = glib_stop_sender.send(Message::Temporary(tf));
});
}
"notebook_main_similar_images_finder_label" => {
NotebookMainEnum::SimilarImages => {
image_preview_similar_images.hide();
label_stage.show();
@ -286,7 +286,7 @@ pub fn connect_button_search(
let _ = glib_stop_sender.send(Message::SimilarImages(sf));
});
}
"notebook_main_zeroed_files_finder" => {
NotebookMainEnum::Zeroed => {
label_stage.show();
grid_progress_stages.show_all();
dialog_progress.resize(1, 1);
@ -310,7 +310,7 @@ pub fn connect_button_search(
let _ = glib_stop_sender.send(Message::ZeroedFiles(zf));
});
}
"notebook_main_same_music_finder" => {
NotebookMainEnum::SameMusic => {
label_stage.show();
grid_progress_stages.show_all();
dialog_progress.resize(1, 1);
@ -357,12 +357,12 @@ pub fn connect_button_search(
});
} else {
notebook_main.set_sensitive(true);
set_buttons(&mut *shared_buttons.borrow_mut().get_mut("same_music").unwrap(), &buttons_array, &buttons_names);
set_buttons(&mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SameMusic).unwrap(), &buttons_array, &buttons_names);
entry_info.set_text("ERROR: You must select at least one checkbox with music searching types.");
show_dialog.store(false, Ordering::Relaxed);
}
}
"scrolled_window_invalid_symlinks" => {
NotebookMainEnum::Symlinks => {
label_stage.show();
grid_progress_stages.hide();
dialog_progress.resize(1, 1);
@ -384,7 +384,6 @@ pub fn connect_button_search(
let _ = glib_stop_sender.send(Message::InvalidSymlinks(isf));
});
}
e => panic!("Not existent {}", e),
}
// Show progress dialog

View file

@ -1,72 +1,50 @@
extern crate gtk;
use crate::gui_data::GuiData;
use crate::notebook_enums::*;
use gtk::prelude::*;
use std::collections::HashMap;
// TODO Replace `all`, `image_size` etc. with this
// pub enum PopoverType {
// All,
// ImageSize,
// Reverse,
// Custom,
// Date,
// }
pub fn connect_button_select(gui_data: &GuiData) {
// let mode = ["all", "image_size", "reverse", "custom", "date"];
let mut hashmap: HashMap<&str, Vec<&str>> = Default::default();
let mut hashmap: HashMap<NotebookMainEnum, Vec<&str>> = Default::default();
{
// Remember to update connect_popovers file, because this data are connected to each others
hashmap.insert("images", vec!["all", "image_size", "reverse", "custom", "date"]);
hashmap.insert("duplicate", vec!["all", "reverse", "custom", "date"]);
hashmap.insert("music", vec!["all", "reverse", "custom", "date"]);
{
// Remember to update connect_popovers file, because this data are connected to each others
hashmap.insert(NotebookMainEnum::SimilarImages, vec!["all", "image_size", "reverse", "custom", "date"]);
hashmap.insert(NotebookMainEnum::Duplicate, vec!["all", "reverse", "custom", "date"]);
hashmap.insert(NotebookMainEnum::SameMusic, vec!["all", "reverse", "custom", "date"]);
hashmap.insert("empty_files", vec!["all", "reverse", "custom"]);
hashmap.insert("empty_folders", vec!["all", "reverse", "custom"]);
hashmap.insert("big", vec!["all", "reverse", "custom"]);
hashmap.insert("symlinks", vec!["all", "reverse", "custom"]);
hashmap.insert("zeroed", vec!["all", "reverse", "custom"]);
hashmap.insert("temporary", vec!["all", "reverse", "custom"]);
hashmap.insert(NotebookMainEnum::EmptyFiles, vec!["all", "reverse", "custom"]);
hashmap.insert(NotebookMainEnum::EmptyDirectories, vec!["all", "reverse", "custom"]);
hashmap.insert(NotebookMainEnum::BigFiles, vec!["all", "reverse", "custom"]);
hashmap.insert(NotebookMainEnum::Symlinks, vec!["all", "reverse", "custom"]);
hashmap.insert(NotebookMainEnum::Zeroed, vec!["all", "reverse", "custom"]);
hashmap.insert(NotebookMainEnum::Temporary, vec!["all", "reverse", "custom"]);
}
}
let gui_data = gui_data.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let notebook_main = gui_data.notebook_main.clone();
let buttons_select_clone = gui_data.buttons_select.clone();
let popover_select = gui_data.popover_select.clone();
let buttons_select = gui_data.buttons_select.clone();
buttons_select_clone.connect_clicked(move |_| {
let current_mode;
match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() {
"notebook_main_duplicate_finder_label" => {
current_mode = "duplicate";
}
"notebook_main_same_music_finder" => {
current_mode = "music";
}
"notebook_main_similar_images_finder_label" => {
current_mode = "images";
}
"scrolled_window_main_empty_folder_finder" => {
current_mode = "empty_folders";
}
"scrolled_window_main_empty_files_finder" => {
current_mode = "empty_files";
}
"scrolled_window_main_temporary_files_finder" => {
current_mode = "temporary";
}
"notebook_big_main_file_finder" => {
current_mode = "big";
}
"notebook_main_zeroed_files_finder" => {
current_mode = "zeroed";
}
"scrolled_window_invalid_symlinks" => {
current_mode = "symlinks";
}
e => panic!("Not existent {}", e),
}
show_required_popovers(&gui_data, current_mode, &hashmap);
show_required_popovers(&gui_data, &to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &hashmap);
popover_select.set_relative_to(Some(&buttons_select));
popover_select.popup();
});
}
fn show_required_popovers(gui_data: &GuiData, current_mode: &str, hashmap: &HashMap<&str, Vec<&str>>) {
fn show_required_popovers(gui_data: &GuiData, current_mode: &NotebookMainEnum, hashmap: &HashMap<NotebookMainEnum, Vec<&str>>) {
let buttons_popover_select_all = gui_data.buttons_popover_select_all.clone();
let buttons_popover_unselect_all = gui_data.buttons_popover_unselect_all.clone();
let buttons_popover_reverse = gui_data.buttons_popover_reverse.clone();

View file

@ -1,6 +1,7 @@
extern crate gtk;
use crate::gui_data::GuiData;
use crate::help_functions::*;
use crate::notebook_enums::*;
use gtk::prelude::*;
use gtk::{TreeIter, TreePath};
use std::fs;
@ -10,7 +11,6 @@ pub fn connect_button_symlink(gui_data: &GuiData) {
let buttons_symlink = gui_data.buttons_symlink.clone();
let notebook_main = gui_data.notebook_main.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let scrolled_window_duplicate_finder = gui_data.scrolled_window_duplicate_finder.clone();
let scrolled_window_similar_images_finder = gui_data.scrolled_window_similar_images_finder.clone();
@ -18,14 +18,14 @@ pub fn connect_button_symlink(gui_data: &GuiData) {
let image_preview_similar_images = gui_data.image_preview_similar_images.clone();
buttons_symlink.connect_clicked(move |_| match notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap().as_str() {
"notebook_main_duplicate_finder_label" => {
buttons_symlink.connect_clicked(move |_| match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) {
NotebookMainEnum::Duplicate => {
symlink(scrolled_window_duplicate_finder.clone(), ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, ColumnsDuplicates::Color as i32, &gui_data);
}
"notebook_main_same_music_finder" => {
NotebookMainEnum::SameMusic => {
symlink(scrolled_window_same_music_finder.clone(), ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, ColumnsSameMusic::Color as i32, &gui_data);
}
"notebook_main_similar_images_finder_label" => {
NotebookMainEnum::SimilarImages => {
symlink(
scrolled_window_similar_images_finder.clone(),
ColumnsSimilarImages::Name as i32,
@ -35,7 +35,7 @@ pub fn connect_button_symlink(gui_data: &GuiData) {
);
image_preview_similar_images.hide();
}
e => panic!("Not existent {}", e),
e => panic!("Not existent {:?}", e),
});
}
fn symlink(scrolled_window: gtk::ScrolledWindow, column_file_name: i32, column_path: i32, column_color: i32, gui_data: &GuiData) {

View file

@ -3,6 +3,7 @@ use humansize::{file_size_opts as options, FileSize};
extern crate gtk;
use crate::gui_data::GuiData;
use crate::help_functions::*;
use crate::notebook_enums::*;
use chrono::NaiveDateTime;
use czkawka_core::duplicate::CheckingMethod;
use czkawka_core::same_music::MusicSimilarity;
@ -186,17 +187,17 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
*shared_duplication_state.borrow_mut() = df;
if duplicates_number > 0 {
*shared_buttons.borrow_mut().get_mut("duplicate").unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("duplicate").unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("duplicate").unwrap().get_mut("select").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("duplicate").unwrap().get_mut("symlink").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Duplicate).unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Duplicate).unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Duplicate).unwrap().get_mut("select").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Duplicate).unwrap().get_mut("symlink").unwrap() = true;
} else {
*shared_buttons.borrow_mut().get_mut("duplicate").unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("duplicate").unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("duplicate").unwrap().get_mut("select").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("duplicate").unwrap().get_mut("symlink").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Duplicate).unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Duplicate).unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Duplicate).unwrap().get_mut("select").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Duplicate).unwrap().get_mut("symlink").unwrap() = false;
}
set_buttons(&mut *shared_buttons.borrow_mut().get_mut("duplicate").unwrap(), &buttons_array, &buttons_names);
set_buttons(&mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Duplicate).unwrap(), &buttons_array, &buttons_names);
}
}
}
@ -232,15 +233,15 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
*shared_empty_folders_state.borrow_mut() = ef;
if empty_folder_number > 0 {
*shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("select").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyDirectories).unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyDirectories).unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyDirectories).unwrap().get_mut("select").unwrap() = true;
} else {
*shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("select").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyDirectories).unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyDirectories).unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyDirectories).unwrap().get_mut("select").unwrap() = false;
}
set_buttons(&mut *shared_buttons.borrow_mut().get_mut("empty_folder").unwrap(), &buttons_array, &buttons_names);
set_buttons(&mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyDirectories).unwrap(), &buttons_array, &buttons_names);
}
}
}
@ -276,15 +277,15 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
*shared_empty_files_state.borrow_mut() = vf;
if empty_files_number > 0 {
*shared_buttons.borrow_mut().get_mut("empty_file").unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("empty_file").unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("empty_file").unwrap().get_mut("select").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyFiles).unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyFiles).unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyFiles).unwrap().get_mut("select").unwrap() = true;
} else {
*shared_buttons.borrow_mut().get_mut("empty_file").unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("empty_file").unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("empty_file").unwrap().get_mut("select").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyFiles).unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyFiles).unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyFiles).unwrap().get_mut("select").unwrap() = false;
}
set_buttons(&mut *shared_buttons.borrow_mut().get_mut("empty_file").unwrap(), &buttons_array, &buttons_names);
set_buttons(&mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::EmptyFiles).unwrap(), &buttons_array, &buttons_names);
}
}
}
@ -327,15 +328,15 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
*shared_big_files_state.borrow_mut() = bf;
if biggest_files_number > 0 {
*shared_buttons.borrow_mut().get_mut("big_file").unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("big_file").unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("big_file").unwrap().get_mut("select").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::BigFiles).unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::BigFiles).unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::BigFiles).unwrap().get_mut("select").unwrap() = true;
} else {
*shared_buttons.borrow_mut().get_mut("big_file").unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("big_file").unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("big_file").unwrap().get_mut("select").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::BigFiles).unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::BigFiles).unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::BigFiles).unwrap().get_mut("select").unwrap() = false;
}
set_buttons(&mut *shared_buttons.borrow_mut().get_mut("big_file").unwrap(), &buttons_array, &buttons_names);
set_buttons(&mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::BigFiles).unwrap(), &buttons_array, &buttons_names);
}
}
}
@ -371,15 +372,15 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
*shared_temporary_files_state.borrow_mut() = tf;
if temporary_files_number > 0 {
*shared_buttons.borrow_mut().get_mut("temporary_file").unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("temporary_file").unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("temporary_file").unwrap().get_mut("select").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Temporary).unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Temporary).unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Temporary).unwrap().get_mut("select").unwrap() = true;
} else {
*shared_buttons.borrow_mut().get_mut("temporary_file").unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("temporary_file").unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("temporary_file").unwrap().get_mut("select").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Temporary).unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Temporary).unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Temporary).unwrap().get_mut("select").unwrap() = false;
}
set_buttons(&mut *shared_buttons.borrow_mut().get_mut("temporary_file").unwrap(), &buttons_array, &buttons_names);
set_buttons(&mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Temporary).unwrap(), &buttons_array, &buttons_names);
}
}
}
@ -445,17 +446,17 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
*shared_similar_images_state.borrow_mut() = sf;
if base_images_size > 0 {
*shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("select").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("symlink").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SimilarImages).unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SimilarImages).unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SimilarImages).unwrap().get_mut("select").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SimilarImages).unwrap().get_mut("symlink").unwrap() = true;
} else {
*shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("select").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("similar_images").unwrap().get_mut("symlink").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SimilarImages).unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SimilarImages).unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SimilarImages).unwrap().get_mut("select").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SimilarImages).unwrap().get_mut("symlink").unwrap() = false;
}
set_buttons(&mut *shared_buttons.borrow_mut().get_mut("similar_images").unwrap(), &buttons_array, &buttons_names);
set_buttons(&mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SimilarImages).unwrap(), &buttons_array, &buttons_names);
}
}
}
@ -497,15 +498,15 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
*shared_zeroed_files_state.borrow_mut() = zf;
if zeroed_files_number > 0 {
*shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap().get_mut("select").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Zeroed).unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Zeroed).unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Zeroed).unwrap().get_mut("select").unwrap() = true;
} else {
*shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap().get_mut("select").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Zeroed).unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Zeroed).unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Zeroed).unwrap().get_mut("select").unwrap() = false;
}
set_buttons(&mut *shared_buttons.borrow_mut().get_mut("zeroed_files").unwrap(), &buttons_array, &buttons_names);
set_buttons(&mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Zeroed).unwrap(), &buttons_array, &buttons_names);
}
}
}
@ -598,17 +599,17 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
*shared_same_music_state.borrow_mut() = mf;
if same_music_number > 0 {
*shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("select").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("symlink").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SameMusic).unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SameMusic).unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SameMusic).unwrap().get_mut("select").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SameMusic).unwrap().get_mut("symlink").unwrap() = true;
} else {
*shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("select").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("same_music").unwrap().get_mut("symlink").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SameMusic).unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SameMusic).unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SameMusic).unwrap().get_mut("select").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SameMusic).unwrap().get_mut("symlink").unwrap() = false;
}
set_buttons(&mut *shared_buttons.borrow_mut().get_mut("same_music").unwrap(), &buttons_array, &buttons_names);
set_buttons(&mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::SameMusic).unwrap(), &buttons_array, &buttons_names);
}
}
}
@ -650,15 +651,15 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
*shared_same_invalid_symlinks.borrow_mut() = ifs;
if invalid_symlinks > 0 {
*shared_buttons.borrow_mut().get_mut("invalid_symlinks").unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("invalid_symlinks").unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut("invalid_symlinks").unwrap().get_mut("select").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Symlinks).unwrap().get_mut("save").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Symlinks).unwrap().get_mut("delete").unwrap() = true;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Symlinks).unwrap().get_mut("select").unwrap() = true;
} else {
*shared_buttons.borrow_mut().get_mut("invalid_symlinks").unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("invalid_symlinks").unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut("invalid_symlinks").unwrap().get_mut("select").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Symlinks).unwrap().get_mut("save").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Symlinks).unwrap().get_mut("delete").unwrap() = false;
*shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Symlinks).unwrap().get_mut("select").unwrap() = false;
}
set_buttons(&mut *shared_buttons.borrow_mut().get_mut("invalid_symlinks").unwrap(), &buttons_array, &buttons_names);
set_buttons(&mut *shared_buttons.borrow_mut().get_mut(&NotebookMainEnum::Symlinks).unwrap(), &buttons_array, &buttons_names);
}
}
}

View file

@ -1,61 +1,27 @@
extern crate gtk;
use crate::gui_data::GuiData;
use crate::help_functions::*;
use crate::notebook_enums::*;
use gtk::prelude::*;
use std::collections::HashMap;
pub fn connect_notebook_tabs(gui_data: &GuiData) {
let shared_buttons = gui_data.shared_buttons.clone();
let buttons_array = gui_data.buttons_array.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let notebook_main_clone = gui_data.notebook_main.clone();
let buttons_names = gui_data.buttons_names.clone();
let upper_notebooks_labels = gui_data.upper_notebooks_labels.clone();
let shared_upper_notebooks = gui_data.shared_upper_notebooks.clone();
let notebook_upper = gui_data.notebook_upper.clone();
let notebook_upper_children_names = gui_data.notebook_upper_children_names.clone();
// TODO Remove this because disabling it doesn't works
// Remove on Windows last tab(Invalid symlinks) because is not available
// if cfg!(target_family = "windows") {
// for (index, widget) in notebook_main_clone.get_children().iter().enumerate() {
// if widget.get_buildable_name() == Some("scrolled_window_invalid_symlinks".to_string()) {
// notebook_main_clone.remove_page(Some(index as u32));
// }
// }
// }
notebook_main_clone.connect_switch_page(move |_, _, number| {
let page: &str;
match notebook_main_children_names.get(number as usize).unwrap().as_str() {
"notebook_main_duplicate_finder_label" => page = "duplicate",
"scrolled_window_main_empty_folder_finder" => page = "empty_folder",
"scrolled_window_main_empty_files_finder" => page = "empty_file",
"scrolled_window_main_temporary_files_finder" => page = "temporary_file",
"notebook_big_main_file_finder" => page = "big_file",
"notebook_main_similar_images_finder_label" => page = "similar_images",
"notebook_main_zeroed_files_finder" => page = "zeroed_files",
"notebook_main_same_music_finder" => page = "same_music",
"scrolled_window_invalid_symlinks" => page = "invalid_symlinks",
e => {
panic!("Not existent page {}", e);
}
};
let current_tab_in_main_notebook = to_notebook_main_enum(number);
// Buttons
set_buttons(&mut *shared_buttons.borrow_mut().get_mut(page).unwrap(), &buttons_array, &buttons_names);
set_buttons(&mut *shared_buttons.borrow_mut().get_mut(&current_tab_in_main_notebook).unwrap(), &buttons_array, &buttons_names);
// Upper notebook
{
let mut hashmap: HashMap<&str, &str> = Default::default();
hashmap.insert("notebook_upper_included_directories", "included_directories");
hashmap.insert("notebook_upper_excluded_directories", "excluded_directories");
hashmap.insert("notebook_upper_excluded_items", "excluded_items");
hashmap.insert("notebook_upper_allowed_extensions", "allowed_extensions");
hashmap.insert("notebook_upper_settings", "settings");
for tab in &notebook_upper_children_names {
let name = hashmap.get(tab.as_str()).unwrap().to_string();
let index = upper_notebooks_labels.iter().position(|x| *x == name).unwrap();
if *shared_upper_notebooks.borrow_mut().get_mut(page).unwrap().get_mut(&name).unwrap() {
for (index, upper_tab) in get_all_upper_tabs().iter().enumerate() {
if *shared_upper_notebooks.borrow_mut().get_mut(&current_tab_in_main_notebook).unwrap().get_mut(upper_tab).unwrap() {
notebook_upper.get_children().get(index).unwrap().show();
} else {
notebook_upper.get_children().get(index).unwrap().hide();

View file

@ -1,6 +1,7 @@
extern crate gtk;
use crate::gui_data::GuiData;
use crate::help_functions::*;
use crate::notebook_enums::*;
use czkawka_core::common::Common;
use gtk::prelude::*;
use gtk::TreeIter;
@ -652,7 +653,7 @@ fn popover_all_except_smallest(popover: &gtk::Popover, scrolled_window: &gtk::Sc
#[derive(Clone)]
pub struct PopoverObject {
pub name: String,
pub notebook_type: NotebookMainEnum,
pub available_modes: Vec<String>,
pub scrolled_windows: gtk::ScrolledWindow,
pub column_path: Option<i32>,
@ -664,9 +665,9 @@ pub struct PopoverObject {
pub column_modification_as_secs: Option<i32>,
}
pub fn find_name(name: &str, vec: &[PopoverObject]) -> Option<PopoverObject> {
pub fn find_name(notebook_type: &NotebookMainEnum, vec: &[PopoverObject]) -> Option<PopoverObject> {
for e in vec {
if e.name == *name {
if e.notebook_type == *notebook_type {
return Some(e.clone());
}
}
@ -676,7 +677,7 @@ pub fn find_name(name: &str, vec: &[PopoverObject]) -> Option<PopoverObject> {
pub fn connect_popovers(gui_data: &GuiData) {
let popover_objects = vec![
PopoverObject {
name: "notebook_main_duplicate_finder_label".to_string(),
notebook_type: NotebookMainEnum::Duplicate,
available_modes: vec!["all", "reverse", "custom", "date"].iter().map(|e| e.to_string()).collect(),
scrolled_windows: gui_data.scrolled_window_duplicate_finder.clone(),
column_path: Some(ColumnsDuplicates::Path as i32),
@ -688,7 +689,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
column_modification_as_secs: Some(ColumnsDuplicates::ModificationAsSecs as i32),
},
PopoverObject {
name: "notebook_main_same_music_finder".to_string(),
notebook_type: NotebookMainEnum::SameMusic,
available_modes: vec!["all", "reverse", "custom", "date"].iter().map(|e| e.to_string()).collect(),
scrolled_windows: gui_data.scrolled_window_same_music_finder.clone(),
column_path: Some(ColumnsSameMusic::Path as i32),
@ -700,7 +701,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
column_modification_as_secs: Some(ColumnsSameMusic::ModificationAsSecs as i32),
},
PopoverObject {
name: "notebook_main_similar_images_finder_label".to_string(),
notebook_type: NotebookMainEnum::SimilarImages,
available_modes: vec!["all", "reverse", "custom", "date"].iter().map(|e| e.to_string()).collect(),
scrolled_windows: gui_data.scrolled_window_similar_images_finder.clone(),
column_path: Some(ColumnsSimilarImages::Path as i32),
@ -712,7 +713,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
column_modification_as_secs: Some(ColumnsSimilarImages::ModificationAsSecs as i32),
},
PopoverObject {
name: "scrolled_window_main_empty_folder_finder".to_string(),
notebook_type: NotebookMainEnum::EmptyDirectories,
available_modes: vec!["all", "reverse", "custom"].iter().map(|e| e.to_string()).collect(),
scrolled_windows: gui_data.scrolled_window_main_empty_folder_finder.clone(),
column_path: Some(ColumnsEmptyFolders::Path as i32),
@ -724,7 +725,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
column_modification_as_secs: None,
},
PopoverObject {
name: "scrolled_window_main_empty_files_finder".to_string(),
notebook_type: NotebookMainEnum::EmptyFiles,
available_modes: vec!["all", "reverse", "custom"].iter().map(|e| e.to_string()).collect(),
scrolled_windows: gui_data.scrolled_window_main_empty_files_finder.clone(),
column_path: Some(ColumnsEmptyFiles::Path as i32),
@ -736,7 +737,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
column_modification_as_secs: None,
},
PopoverObject {
name: "scrolled_window_main_temporary_files_finder".to_string(),
notebook_type: NotebookMainEnum::Temporary,
available_modes: vec!["all", "reverse", "custom"].iter().map(|e| e.to_string()).collect(),
scrolled_windows: gui_data.scrolled_window_main_temporary_files_finder.clone(),
column_path: Some(ColumnsTemporaryFiles::Path as i32),
@ -748,7 +749,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
column_modification_as_secs: None,
},
PopoverObject {
name: "notebook_big_main_file_finder".to_string(),
notebook_type: NotebookMainEnum::BigFiles,
available_modes: vec!["all", "reverse", "custom"].iter().map(|e| e.to_string()).collect(),
scrolled_windows: gui_data.scrolled_window_big_files_finder.clone(),
column_path: Some(ColumnsBigFiles::Path as i32),
@ -760,7 +761,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
column_modification_as_secs: None,
},
PopoverObject {
name: "notebook_main_zeroed_files_finder".to_string(),
notebook_type: NotebookMainEnum::Zeroed,
available_modes: vec!["all", "reverse", "custom"].iter().map(|e| e.to_string()).collect(),
scrolled_windows: gui_data.scrolled_window_zeroed_files_finder.clone(),
column_path: Some(ColumnsZeroedFiles::Path as i32),
@ -774,42 +775,38 @@ pub fn connect_popovers(gui_data: &GuiData) {
];
let popover_select = gui_data.popover_select.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let buttons_popover_select_all = gui_data.buttons_popover_select_all.clone();
let notebook_main = gui_data.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_select_all.connect_clicked(move |_| {
let object_popover = find_name(notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap(), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
popover_select_all(&popover_select, &object_popover.scrolled_windows);
});
let popover_select = gui_data.popover_select.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let buttons_popover_unselect_all = gui_data.buttons_popover_unselect_all.clone();
let notebook_main = gui_data.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_unselect_all.connect_clicked(move |_| {
let object_popover = find_name(notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap(), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
popover_unselect_all(&popover_select, &object_popover.scrolled_windows);
});
let popover_select = gui_data.popover_select.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let buttons_popover_reverse = gui_data.buttons_popover_reverse.clone();
let notebook_main = gui_data.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_reverse.connect_clicked(move |_| {
let object_popover = find_name(notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap(), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
popover_reverse(&popover_select, &object_popover.scrolled_windows);
});
let popover_select = gui_data.popover_select.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let buttons_popover_select_all_except_oldest = gui_data.buttons_popover_select_all_except_oldest.clone();
let notebook_main = gui_data.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_select_all_except_oldest.connect_clicked(move |_| {
let object_popover = find_name(notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap(), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
popover_all_except_oldest(
&popover_select,
&object_popover.scrolled_windows,
@ -820,12 +817,11 @@ pub fn connect_popovers(gui_data: &GuiData) {
});
let popover_select = gui_data.popover_select.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let buttons_popover_select_all_except_newest = gui_data.buttons_popover_select_all_except_newest.clone();
let notebook_main = gui_data.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_select_all_except_newest.connect_clicked(move |_| {
let object_popover = find_name(notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap(), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
popover_all_except_newest(
&popover_select,
&object_popover.scrolled_windows,
@ -836,12 +832,11 @@ pub fn connect_popovers(gui_data: &GuiData) {
});
let popover_select = gui_data.popover_select.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let buttons_popover_select_one_oldest = gui_data.buttons_popover_select_one_oldest.clone();
let notebook_main = gui_data.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_select_one_oldest.connect_clicked(move |_| {
let object_popover = find_name(notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap(), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
popover_one_oldest(
&popover_select,
&object_popover.scrolled_windows,
@ -852,12 +847,11 @@ pub fn connect_popovers(gui_data: &GuiData) {
});
let popover_select = gui_data.popover_select.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let buttons_popover_select_one_newest = gui_data.buttons_popover_select_one_newest.clone();
let notebook_main = gui_data.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_select_one_newest.connect_clicked(move |_| {
let object_popover = find_name(notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap(), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
popover_one_newest(
&popover_select,
&object_popover.scrolled_windows,
@ -868,13 +862,12 @@ pub fn connect_popovers(gui_data: &GuiData) {
});
let popover_select = gui_data.popover_select.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let buttons_popover_select_custom = gui_data.buttons_popover_select_custom.clone();
let notebook_main = gui_data.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
let gui_data_clone = gui_data.clone();
buttons_popover_select_custom.connect_clicked(move |_| {
let object_popover = find_name(notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap(), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
popover_select_custom(
&popover_select,
&gui_data_clone,
@ -886,13 +879,12 @@ pub fn connect_popovers(gui_data: &GuiData) {
});
let popover_select = gui_data.popover_select.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let buttons_popover_unselect_custom = gui_data.buttons_popover_unselect_custom.clone();
let notebook_main = gui_data.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
let gui_data_clone = gui_data.clone();
buttons_popover_unselect_custom.connect_clicked(move |_| {
let object_popover = find_name(notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap(), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
popover_unselect_custom(
&popover_select,
&gui_data_clone,
@ -904,12 +896,11 @@ pub fn connect_popovers(gui_data: &GuiData) {
});
let popover_select = gui_data.popover_select.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let buttons_popover_select_all_images_except_biggest = gui_data.buttons_popover_select_all_images_except_biggest.clone();
let notebook_main = gui_data.notebook_main.clone();
let vec_popover_objects = popover_objects.clone();
buttons_popover_select_all_images_except_biggest.connect_clicked(move |_| {
let object_popover = find_name(notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap(), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
popover_all_except_biggest(
&popover_select,
&object_popover.scrolled_windows,
@ -920,12 +911,11 @@ pub fn connect_popovers(gui_data: &GuiData) {
});
let popover_select = gui_data.popover_select.clone();
let notebook_main_children_names = gui_data.notebook_main_children_names.clone();
let buttons_popover_select_all_images_except_smallest = gui_data.buttons_popover_select_all_images_except_smallest.clone();
let notebook_main = gui_data.notebook_main.clone();
let vec_popover_objects = popover_objects; //.clone();
buttons_popover_select_all_images_except_smallest.connect_clicked(move |_| {
let object_popover = find_name(notebook_main_children_names.get(notebook_main.get_current_page().unwrap() as usize).unwrap(), &vec_popover_objects).unwrap();
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap();
popover_all_except_smallest(
&popover_select,
&object_popover.scrolled_windows,

View file

@ -1,4 +1,5 @@
extern crate gtk;
use crate::notebook_enums::*;
use crossbeam_channel::unbounded;
use czkawka_core::big_file::BigFile;
use czkawka_core::duplicate::DuplicateFinder;
@ -25,15 +26,13 @@ pub struct GuiData {
pub window_main: gtk::Window,
// States
pub main_notebooks_labels: [String; 9],
pub upper_notebooks_labels: [String; 5],
pub buttons_labels: [String; 5],
// Buttons state
pub shared_buttons: Rc<RefCell<HashMap<String, HashMap<String, bool>>>>,
pub shared_buttons: Rc<RefCell<HashMap<NotebookMainEnum, HashMap<String, bool>>>>,
// Upper Notebook state
pub shared_upper_notebooks: Rc<RefCell<HashMap<String, HashMap<String, bool>>>>,
pub shared_upper_notebooks: Rc<RefCell<HashMap<NotebookMainEnum, HashMap<NotebookUpperEnum, bool>>>>,
// State of search results
pub shared_duplication_state: Rc<RefCell<DuplicateFinder>>,
@ -123,7 +122,6 @@ pub struct GuiData {
pub notebook_main: gtk::Notebook,
pub notebook_upper: gtk::Notebook,
pub notebook_main_children_names: Vec<String>,
pub notebook_upper_children_names: Vec<String>,
//// Entry
@ -194,33 +192,14 @@ impl GuiData {
////////////////////////////////////////////////////////////////////////////////////////////////
//// States
let main_notebooks_labels = [
"duplicate".to_string(),
"empty_folder".to_string(),
"empty_file".to_string(),
"temporary_file".to_string(),
"big_file".to_string(),
"similar_images".to_string(),
"zeroed_files".to_string(),
"same_music".to_string(),
"invalid_symlinks".to_string(),
];
let upper_notebooks_labels = [
"included_directories".to_string(),
"excluded_directories".to_string(),
"excluded_items".to_string(),
"allowed_extensions".to_string(),
"settings".to_string(),
];
let buttons_labels = ["search".to_string(), "select".to_string(), "delete".to_string(), "save".to_string(), "symlink".to_string()];
// Buttons State - to remember existence of different buttons on pages
let shared_buttons: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::<String, HashMap<String, bool>>::new()));
shared_buttons.borrow_mut().clear();
let shared_buttons: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::<NotebookMainEnum, HashMap<String, bool>>::new()));
// Show by default only search button
for i in main_notebooks_labels.iter() {
for i in get_all_main_tabs().iter() {
let mut temp_hashmap: HashMap<String, bool> = Default::default();
for j in buttons_labels.iter() {
if *j == "search" {
@ -229,21 +208,21 @@ impl GuiData {
temp_hashmap.insert(j.to_string(), false);
}
}
shared_buttons.borrow_mut().insert(i.to_string(), temp_hashmap);
shared_buttons.borrow_mut().insert(i.clone(), temp_hashmap);
}
// Upper Notebook state
let shared_upper_notebooks: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::<String, HashMap<String, bool>>::new()));
let shared_upper_notebooks: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::<NotebookMainEnum, HashMap<NotebookUpperEnum, bool>>::new()));
for i in main_notebooks_labels.iter() {
let mut temp_hashmap: HashMap<String, bool> = Default::default();
for j in upper_notebooks_labels.iter() {
temp_hashmap.insert(j.to_string(), true);
for i in get_all_main_tabs().iter() {
let mut temp_hashmap: HashMap<NotebookUpperEnum, bool> = Default::default();
for j in get_all_upper_tabs().iter() {
temp_hashmap.insert(j.clone(), true);
}
shared_upper_notebooks.borrow_mut().insert(i.to_string(), temp_hashmap);
shared_upper_notebooks.borrow_mut().insert(i.clone(), temp_hashmap);
}
// Some upper notebook tabs are disabled
*shared_upper_notebooks.borrow_mut().get_mut("temporary_file").unwrap().get_mut("allowed_extensions").unwrap() = false;
*shared_upper_notebooks.borrow_mut().get_mut(&NotebookMainEnum::Temporary).unwrap().get_mut(&NotebookUpperEnum::AllowedExtensions).unwrap() = false;
// State of search results
@ -336,12 +315,8 @@ impl GuiData {
let notebook_main: gtk::Notebook = builder.get_object("notebook_main").unwrap();
let notebook_upper: gtk::Notebook = builder.get_object("notebook_upper").unwrap();
let mut notebook_main_children_names: Vec<String> = Vec::new();
let mut notebook_upper_children_names: Vec<String> = Vec::new();
for i in notebook_main.get_children() {
notebook_main_children_names.push(i.get_buildable_name().unwrap().to_string());
}
for i in notebook_upper.get_children() {
notebook_upper_children_names.push(i.get_buildable_name().unwrap().to_string());
}
@ -406,8 +381,6 @@ impl GuiData {
glade_src,
builder,
window_main,
main_notebooks_labels,
upper_notebooks_labels,
buttons_labels,
shared_buttons,
shared_upper_notebooks,
@ -477,7 +450,6 @@ impl GuiData {
radio_button_similar_images_very_high,
notebook_main,
notebook_upper,
notebook_main_children_names,
notebook_upper_children_names,
entry_info,
text_view_errors,

View file

@ -222,13 +222,7 @@ pub fn select_function_similar_images(_tree_selection: &gtk::TreeSelection, tree
pub fn set_buttons(hashmap: &mut HashMap<String, bool>, buttons_array: &[gtk::Button], button_names: &[String]) {
for (index, button) in buttons_array.iter().enumerate() {
if *hashmap.get_mut(button_names[index].as_str()).unwrap() {
if cfg!(target_family = "windows") {
if button_names[index] != "symlink" {
button.show();
}
} else {
button.show();
}
button.show();
} else {
button.hide();
}
@ -286,7 +280,7 @@ pub fn get_dialog_box_child(dialog: &gtk::Dialog) -> gtk::Box {
pub fn change_dimension_to_krotka(dimensions: String) -> (u64, u64) {
#[allow(clippy::single_char_pattern)]
let vec = dimensions.split::<&str>("x").collect::<Vec<_>>();
assert!(vec.len() == 2); // 400x400 - should only have two elements, if have more, then something is not good
assert_eq!(vec.len(), 2); // 400x400 - should only have two elements, if have more, then something is not good
let number1 = vec[0].parse::<u64>().expect("Invalid data in image dimension in position 0");
let number2 = vec[1].parse::<u64>().expect("Invalid data in image dimension in position 1");
(number1, number2)

View file

@ -19,6 +19,7 @@ mod double_click_opening;
mod gui_data;
mod help_functions;
mod initialize_gui;
mod notebook_enums;
mod saving_loading;
use czkawka_core::*;

View file

@ -0,0 +1,65 @@
pub const NUMBER_OF_NOTEBOOK_MAIN_TABS: usize = 9;
pub const NUMBER_OF_NOTEBOOK_UPPER_TABS: usize = 5;
// Needs to be updated when changed order of notebook tabs
#[derive(Eq, PartialEq, Hash, Clone, Debug)]
pub enum NotebookMainEnum {
Duplicate = 0,
EmptyDirectories,
BigFiles,
EmptyFiles,
Temporary,
SimilarImages,
SameMusic,
Zeroed,
Symlinks,
}
pub fn to_notebook_main_enum(notebook_number: u32) -> NotebookMainEnum {
match notebook_number {
0 => NotebookMainEnum::Duplicate,
1 => NotebookMainEnum::EmptyDirectories,
2 => NotebookMainEnum::BigFiles,
3 => NotebookMainEnum::EmptyFiles,
4 => NotebookMainEnum::Temporary,
5 => NotebookMainEnum::SimilarImages,
6 => NotebookMainEnum::SameMusic,
7 => NotebookMainEnum::Zeroed,
8 => NotebookMainEnum::Symlinks,
_ => panic!("Invalid Notebook Tab"),
}
}
pub fn get_all_main_tabs() -> [NotebookMainEnum; NUMBER_OF_NOTEBOOK_MAIN_TABS] {
[
to_notebook_main_enum(0),
to_notebook_main_enum(1),
to_notebook_main_enum(2),
to_notebook_main_enum(3),
to_notebook_main_enum(4),
to_notebook_main_enum(5),
to_notebook_main_enum(6),
to_notebook_main_enum(7),
to_notebook_main_enum(8),
]
}
#[derive(Eq, PartialEq, Hash, Clone, Debug)]
pub enum NotebookUpperEnum {
IncludedDirectories = 0,
ExcludedDirectories,
ExcludedItems,
AllowedExtensions,
Settings,
}
pub fn to_notebook_upper_enum(notebook_number: u32) -> NotebookUpperEnum {
match notebook_number {
0 => NotebookUpperEnum::IncludedDirectories,
1 => NotebookUpperEnum::ExcludedDirectories,
2 => NotebookUpperEnum::ExcludedItems,
3 => NotebookUpperEnum::AllowedExtensions,
4 => NotebookUpperEnum::Settings,
_ => panic!("Invalid Upper Notebook Tab"),
}
}
pub fn get_all_upper_tabs() -> [NotebookUpperEnum; NUMBER_OF_NOTEBOOK_UPPER_TABS] {
[to_notebook_upper_enum(0), to_notebook_upper_enum(1), to_notebook_upper_enum(2), to_notebook_upper_enum(3), to_notebook_upper_enum(4)]
}