use czkawka_core::common_messages::Messages; use gtk::prelude::*; use gtk::TreeViewColumn; use std::collections::HashMap; pub enum ColumnsDuplicates { // Columns for duplicate treeview Name = 0, Path, Modification, ModificationAsSecs, Color, TextColor, } pub enum ColumnsEmptyFolders { // Columns for empty folder treeview Name = 0, Path, Modification, } pub enum ColumnsDirectory { // Columns for Included and Excluded Directories in upper Notebook Path = 0, } pub enum ColumnsBigFiles { // Columns for Big Files Size = 0, Name, Path, Modification, } pub enum ColumnsEmptyFiles { // Columns for Big Files Name = 0, Path, Modification, } pub enum ColumnsTemporaryFiles { // Columns for Big Files Name = 0, Path, Modification, } pub const TEXT_COLOR: &str = "#ffffff"; pub const MAIN_ROW_COLOR: &str = "#343434"; pub const HEADER_ROW_COLOR: &str = "#272727"; //pub const MAIN_ROW_COLOR: &str = "#f4f434"; // TEST //pub const HEADER_ROW_COLOR: &str = "#010101"; // TEST pub fn create_tree_view_duplicates(tree_view: &mut gtk::TreeView) { let renderer = gtk::CellRendererText::new(); let name_column: gtk::TreeViewColumn = TreeViewColumn::new(); name_column.pack_start(&renderer, true); name_column.set_title("File Name"); name_column.set_resizable(true); name_column.set_min_width(50); name_column.add_attribute(&renderer, "text", ColumnsDuplicates::Name as i32); name_column.add_attribute(&renderer, "background", ColumnsDuplicates::Color as i32); name_column.add_attribute(&renderer, "foreground", ColumnsDuplicates::TextColor as i32); tree_view.append_column(&name_column); let renderer = gtk::CellRendererText::new(); let path_column: gtk::TreeViewColumn = TreeViewColumn::new(); path_column.pack_start(&renderer, true); path_column.set_title("Path"); path_column.set_resizable(true); path_column.set_min_width(100); path_column.add_attribute(&renderer, "text", ColumnsDuplicates::Path as i32); path_column.add_attribute(&renderer, "background", ColumnsDuplicates::Color as i32); path_column.add_attribute(&renderer, "foreground", ColumnsDuplicates::TextColor as i32); tree_view.append_column(&path_column); let renderer = gtk::CellRendererText::new(); let modification_date_column: gtk::TreeViewColumn = TreeViewColumn::new(); modification_date_column.pack_start(&renderer, true); modification_date_column.set_title("Modification Date"); modification_date_column.set_resizable(true); modification_date_column.set_min_width(100); modification_date_column.add_attribute(&renderer, "text", ColumnsDuplicates::Modification as i32); modification_date_column.add_attribute(&renderer, "background", ColumnsDuplicates::Color as i32); modification_date_column.add_attribute(&renderer, "foreground", ColumnsDuplicates::TextColor as i32); tree_view.append_column(&modification_date_column); tree_view.set_vexpand(true); } pub fn create_tree_view_empty_folders(tree_view: &mut gtk::TreeView) { let renderer = gtk::CellRendererText::new(); let name_column: gtk::TreeViewColumn = TreeViewColumn::new(); name_column.pack_start(&renderer, true); name_column.set_title("Folder Name"); name_column.set_resizable(true); name_column.set_min_width(50); name_column.add_attribute(&renderer, "text", ColumnsEmptyFolders::Name as i32); tree_view.append_column(&name_column); let renderer = gtk::CellRendererText::new(); let path_column: gtk::TreeViewColumn = TreeViewColumn::new(); path_column.pack_start(&renderer, true); path_column.set_title("Path"); path_column.set_resizable(true); path_column.set_min_width(100); path_column.add_attribute(&renderer, "text", ColumnsEmptyFolders::Path as i32); tree_view.append_column(&path_column); let renderer = gtk::CellRendererText::new(); let modification_date_column: gtk::TreeViewColumn = TreeViewColumn::new(); modification_date_column.pack_start(&renderer, true); modification_date_column.set_title("Modification Date"); modification_date_column.set_resizable(true); modification_date_column.set_min_width(100); modification_date_column.add_attribute(&renderer, "text", ColumnsEmptyFolders::Modification as i32); tree_view.append_column(&modification_date_column); tree_view.set_vexpand(true); } pub fn create_tree_view_big_files(tree_view: &mut gtk::TreeView) { let renderer = gtk::CellRendererText::new(); let name_column: gtk::TreeViewColumn = TreeViewColumn::new(); name_column.pack_start(&renderer, true); name_column.set_title("Size"); name_column.set_resizable(true); name_column.set_min_width(50); name_column.add_attribute(&renderer, "text", ColumnsBigFiles::Size as i32); tree_view.append_column(&name_column); let renderer = gtk::CellRendererText::new(); let name_column: gtk::TreeViewColumn = TreeViewColumn::new(); name_column.pack_start(&renderer, true); name_column.set_title("File Name"); name_column.set_resizable(true); name_column.set_min_width(50); name_column.add_attribute(&renderer, "text", ColumnsBigFiles::Name as i32); tree_view.append_column(&name_column); let renderer = gtk::CellRendererText::new(); let path_column: gtk::TreeViewColumn = TreeViewColumn::new(); path_column.pack_start(&renderer, true); path_column.set_title("Path"); path_column.set_resizable(true); path_column.set_min_width(100); path_column.add_attribute(&renderer, "text", ColumnsBigFiles::Path as i32); tree_view.append_column(&path_column); let renderer = gtk::CellRendererText::new(); let modification_date_column: gtk::TreeViewColumn = TreeViewColumn::new(); modification_date_column.pack_start(&renderer, true); modification_date_column.set_title("Modification Date"); modification_date_column.set_resizable(true); modification_date_column.set_min_width(100); modification_date_column.add_attribute(&renderer, "text", ColumnsBigFiles::Modification as i32); tree_view.append_column(&modification_date_column); tree_view.set_vexpand(true); } pub fn create_tree_view_temporary_files(tree_view: &mut gtk::TreeView) { let renderer = gtk::CellRendererText::new(); let name_column: gtk::TreeViewColumn = TreeViewColumn::new(); name_column.pack_start(&renderer, true); name_column.set_title("File Name"); name_column.set_resizable(true); name_column.set_min_width(50); name_column.add_attribute(&renderer, "text", ColumnsTemporaryFiles::Name as i32); tree_view.append_column(&name_column); let renderer = gtk::CellRendererText::new(); let path_column: gtk::TreeViewColumn = TreeViewColumn::new(); path_column.pack_start(&renderer, true); path_column.set_title("Path"); path_column.set_resizable(true); path_column.set_min_width(100); path_column.add_attribute(&renderer, "text", ColumnsTemporaryFiles::Path as i32); tree_view.append_column(&path_column); let renderer = gtk::CellRendererText::new(); let modification_date_column: gtk::TreeViewColumn = TreeViewColumn::new(); modification_date_column.pack_start(&renderer, true); modification_date_column.set_title("Modification Date"); modification_date_column.set_resizable(true); modification_date_column.set_min_width(100); modification_date_column.add_attribute(&renderer, "text", ColumnsTemporaryFiles::Modification as i32); tree_view.append_column(&modification_date_column); tree_view.set_vexpand(true); } pub fn create_tree_view_empty_files(tree_view: &mut gtk::TreeView) { let renderer = gtk::CellRendererText::new(); let name_column: gtk::TreeViewColumn = TreeViewColumn::new(); name_column.pack_start(&renderer, true); name_column.set_title("File Name"); name_column.set_resizable(true); name_column.set_min_width(50); name_column.add_attribute(&renderer, "text", ColumnsEmptyFiles::Name as i32); tree_view.append_column(&name_column); let renderer = gtk::CellRendererText::new(); let path_column: gtk::TreeViewColumn = TreeViewColumn::new(); path_column.pack_start(&renderer, true); path_column.set_title("Path"); path_column.set_resizable(true); path_column.set_min_width(100); path_column.add_attribute(&renderer, "text", ColumnsEmptyFiles::Path as i32); tree_view.append_column(&path_column); let renderer = gtk::CellRendererText::new(); let modification_date_column: gtk::TreeViewColumn = TreeViewColumn::new(); modification_date_column.pack_start(&renderer, true); modification_date_column.set_title("Modification Date"); modification_date_column.set_resizable(true); modification_date_column.set_min_width(100); modification_date_column.add_attribute(&renderer, "text", ColumnsEmptyFiles::Modification as i32); tree_view.append_column(&modification_date_column); tree_view.set_vexpand(true); } pub fn create_tree_view_directories(tree_view: &mut gtk::TreeView) { let renderer = gtk::CellRendererText::new(); let name_column: gtk::TreeViewColumn = TreeViewColumn::new(); name_column.pack_start(&renderer, true); name_column.add_attribute(&renderer, "text", ColumnsDirectory::Path as i32); tree_view.append_column(&name_column); tree_view.set_headers_visible(false); } pub fn get_string_from_list_store(scrolled_window: >k::ScrolledWindow) -> String { let tree_view: gtk::TreeView = scrolled_window.get_children().get(0).unwrap().clone().downcast::().unwrap(); let list_store: gtk::ListStore = tree_view.get_model().unwrap().downcast::().unwrap(); let mut first: bool = true; let mut return_string: String = "".to_string(); let tree_iter = match list_store.get_iter_first() { Some(t) => t, None => return return_string, }; loop { if !first { return_string += ","; } else { first = false; } return_string += list_store.get_value(&tree_iter, 0).get::().unwrap().unwrap().as_str(); if !list_store.iter_next(&tree_iter) { return return_string; } } } pub fn print_text_messages_to_text_view(text_messages: &Messages, text_view: >k::TextView) { let mut messages: String = String::from(""); if !text_messages.messages.is_empty() { messages += "############### MESSAGES ###############\n"; } for text in &text_messages.messages { messages += text.as_str(); messages += "\n"; } if !text_messages.messages.is_empty() { messages += "\n"; } if !text_messages.warnings.is_empty() { messages += "############### WARNINGS ###############\n"; } for text in &text_messages.warnings { messages += text.as_str(); messages += "\n"; } if !text_messages.warnings.is_empty() { messages += "\n"; } if !text_messages.errors.is_empty() { messages += "############### ERRORS ###############\n"; } for text in &text_messages.errors { messages += text.as_str(); messages += "\n"; } if !text_messages.errors.is_empty() { messages += "\n"; } text_view.get_buffer().unwrap().set_text(messages.as_str()); } pub fn select_function_3column(_tree_selection: >k::TreeSelection, tree_model: >k::TreeModel, tree_path: >k::TreePath, _is_path_currently_selected: bool) -> bool { // let name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(),ColumnsDuplicates::Name as i32).get::().unwrap().unwrap(); // let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), ColumnsDuplicates::Path as i32).get::().unwrap().unwrap(); // let modification = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(),ColumnsDuplicates::Modification as i32).get::().unwrap().unwrap(); let color = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), ColumnsDuplicates::Color as i32).get::().unwrap().unwrap(); if color == HEADER_ROW_COLOR { return false; } true } pub fn set_buttons(hashmap: &mut HashMap, buttons_array: &[gtk::Button], button_names: &[&str]) { for (index, button) in buttons_array.iter().enumerate() { if *hashmap.get_mut(button_names[index]).unwrap() { button.show(); } else { button.hide(); } } } // pub fn hide_all_buttons(buttons_array: &[gtk::Button]) { // for button in buttons_array { // button.hide(); // } // } pub fn hide_all_buttons_except(except_name: &str, buttons_array: &[gtk::Button], button_names: &[&str]) { for (index, button) in buttons_array.iter().enumerate() { if except_name == button_names[index] { button.show(); } else { button.hide(); } } }