From 30bab75a5dc4b6de06fa3f9d2bb36020c1933b24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= <41945903+qarmin@users.noreply.github.com> Date: Sun, 10 Jan 2021 12:06:25 +0100 Subject: [PATCH] Modernize notebook handling (#189) --- czkawka_gui/src/connect_button_delete.rs | 36 ++---- czkawka_gui/src/connect_button_save.rs | 114 ++++++++--------- czkawka_gui/src/connect_button_search.rs | 25 ++-- czkawka_gui/src/connect_button_select.rs | 70 ++++------- czkawka_gui/src/connect_button_symlink.rs | 12 +- czkawka_gui/src/connect_compute_results.rs | 139 +++++++++++---------- czkawka_gui/src/connect_notebook_tabs.rs | 48 ++----- czkawka_gui/src/connect_popovers.rs | 56 ++++----- czkawka_gui/src/gui_data.rs | 54 ++------ czkawka_gui/src/help_functions.rs | 10 +- czkawka_gui/src/main.rs | 1 + czkawka_gui/src/notebook_enums.rs | 65 ++++++++++ 12 files changed, 286 insertions(+), 344 deletions(-) create mode 100644 czkawka_gui/src/notebook_enums.rs diff --git a/czkawka_gui/src/connect_button_delete.rs b/czkawka_gui/src/connect_button_delete.rs index 52d7949..fb726f9 100644 --- a/czkawka_gui/src/connect_button_delete.rs +++ b/czkawka_gui/src/connect_button_delete.rs @@ -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: >k::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: >k::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: >k::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: >k::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: >k::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: >k::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: >k::ScrolledWindow, column_file_name: i32, let mut vec_tree_path_to_delete: Vec = Vec::new(); let mut current_iter = first_iter; if tree_model.get_value(¤t_iter, column_color).get::().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(¤t_iter, column_color).get::().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(); diff --git a/czkawka_gui/src/connect_button_save.rs b/czkawka_gui/src/connect_button_save.rs index 6d3d0eb..f01b908 100644 --- a/czkawka_gui/src/connect_button_save.rs +++ b/czkawka_gui/src/connect_button_save.rs @@ -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(); diff --git a/czkawka_gui/src/connect_button_search.rs b/czkawka_gui/src/connect_button_search.rs index 280f992..4d14e4b 100644 --- a/czkawka_gui/src/connect_button_search.rs +++ b/czkawka_gui/src/connect_button_search.rs @@ -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, ) { 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 diff --git a/czkawka_gui/src/connect_button_select.rs b/czkawka_gui/src/connect_button_select.rs index bac724f..7c99eb1 100644 --- a/czkawka_gui/src/connect_button_select.rs +++ b/czkawka_gui/src/connect_button_select.rs @@ -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> = 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>) { 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(); diff --git a/czkawka_gui/src/connect_button_symlink.rs b/czkawka_gui/src/connect_button_symlink.rs index 11ba047..7aa50cc 100644 --- a/czkawka_gui/src/connect_button_symlink.rs +++ b/czkawka_gui/src/connect_button_symlink.rs @@ -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) { diff --git a/czkawka_gui/src/connect_compute_results.rs b/czkawka_gui/src/connect_compute_results.rs index 5b01a9c..5d31b6a 100644 --- a/czkawka_gui/src/connect_compute_results.rs +++ b/czkawka_gui/src/connect_compute_results.rs @@ -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); } } } diff --git a/czkawka_gui/src/connect_notebook_tabs.rs b/czkawka_gui/src/connect_notebook_tabs.rs index 12d6aa7..9aa9083 100644 --- a/czkawka_gui/src/connect_notebook_tabs.rs +++ b/czkawka_gui/src/connect_notebook_tabs.rs @@ -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(¤t_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 ¬ebook_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(¤t_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(); diff --git a/czkawka_gui/src/connect_popovers.rs b/czkawka_gui/src/connect_popovers.rs index 0f2968c..cf929c1 100644 --- a/czkawka_gui/src/connect_popovers.rs +++ b/czkawka_gui/src/connect_popovers.rs @@ -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: >k::Popover, scrolled_window: >k::Sc #[derive(Clone)] pub struct PopoverObject { - pub name: String, + pub notebook_type: NotebookMainEnum, pub available_modes: Vec, pub scrolled_windows: gtk::ScrolledWindow, pub column_path: Option, @@ -664,9 +665,9 @@ pub struct PopoverObject { pub column_modification_as_secs: Option, } -pub fn find_name(name: &str, vec: &[PopoverObject]) -> Option { +pub fn find_name(notebook_type: &NotebookMainEnum, vec: &[PopoverObject]) -> Option { 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 { 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, diff --git a/czkawka_gui/src/gui_data.rs b/czkawka_gui/src/gui_data.rs index 22a5874..fc14caf 100644 --- a/czkawka_gui/src/gui_data.rs +++ b/czkawka_gui/src/gui_data.rs @@ -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>>>, + pub shared_buttons: Rc>>>, // Upper Notebook state - pub shared_upper_notebooks: Rc>>>, + pub shared_upper_notebooks: Rc>>>, // State of search results pub shared_duplication_state: Rc>, @@ -123,7 +122,6 @@ pub struct GuiData { pub notebook_main: gtk::Notebook, pub notebook_upper: gtk::Notebook, - pub notebook_main_children_names: Vec, pub notebook_upper_children_names: Vec, //// 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> = Rc::new(RefCell::new(HashMap::>::new())); - shared_buttons.borrow_mut().clear(); + let shared_buttons: Rc> = Rc::new(RefCell::new(HashMap::>::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 = 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> = Rc::new(RefCell::new(HashMap::>::new())); + let shared_upper_notebooks: Rc> = Rc::new(RefCell::new(HashMap::>::new())); - for i in main_notebooks_labels.iter() { - let mut temp_hashmap: HashMap = 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 = 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 = Vec::new(); let mut notebook_upper_children_names: Vec = 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, diff --git a/czkawka_gui/src/help_functions.rs b/czkawka_gui/src/help_functions.rs index 837bda4..f055f59 100644 --- a/czkawka_gui/src/help_functions.rs +++ b/czkawka_gui/src/help_functions.rs @@ -222,13 +222,7 @@ pub fn select_function_similar_images(_tree_selection: >k::TreeSelection, tree pub fn set_buttons(hashmap: &mut HashMap, 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: >k::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::>(); - 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::().expect("Invalid data in image dimension in position 0"); let number2 = vec[1].parse::().expect("Invalid data in image dimension in position 1"); (number1, number2) diff --git a/czkawka_gui/src/main.rs b/czkawka_gui/src/main.rs index 1b494da..df4eccc 100644 --- a/czkawka_gui/src/main.rs +++ b/czkawka_gui/src/main.rs @@ -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::*; diff --git a/czkawka_gui/src/notebook_enums.rs b/czkawka_gui/src/notebook_enums.rs new file mode 100644 index 0000000..c90b67e --- /dev/null +++ b/czkawka_gui/src/notebook_enums.rs @@ -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)] +}