From fab1ad3a11db274695ac8ddabaf24aa1a0ef1d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Tue, 9 May 2023 17:16:24 +0200 Subject: [PATCH] Partial changes --- czkawka_gui/src/create_tree_view.rs | 332 ++++++++-------------------- czkawka_gui/src/initialize_gui.rs | 2 +- 2 files changed, 95 insertions(+), 239 deletions(-) diff --git a/czkawka_gui/src/create_tree_view.rs b/czkawka_gui/src/create_tree_view.rs index f093bdd..604b9f1 100644 --- a/czkawka_gui/src/create_tree_view.rs +++ b/czkawka_gui/src/create_tree_view.rs @@ -1,5 +1,6 @@ use gtk4::prelude::*; -use gtk4::{CellRendererText, CellRendererToggle, TreeView, TreeViewColumn}; +use gtk4::subclass::tree_view; +use gtk4::{CellRendererText, CellRendererToggle, ListStore, TreeView, TreeViewColumn}; use crate::help_functions::*; @@ -471,263 +472,118 @@ pub fn create_tree_view_similar_videos(tree_view: &TreeView) { } pub fn create_tree_view_same_music(tree_view: &TreeView) { - let model = get_list_store(tree_view); - - let renderer = CellRendererToggle::new(); - renderer.connect_toggled(move |_r, path| { - let iter = model.iter(&path).unwrap(); - let mut fixed = model.get::(&iter, ColumnsSameMusic::SelectionButton as i32); - fixed = !fixed; - model.set_value(&iter, ColumnsSameMusic::SelectionButton as u32, &fixed.to_value()); - }); - let column = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_resizable(false); - column.set_fixed_width(30); - column.add_attribute(&renderer, "activatable", ColumnsSameMusic::ActivatableSelectButton as i32); - column.add_attribute(&renderer, "active", ColumnsSameMusic::SelectionButton as i32); - column.add_attribute(&renderer, "cell-background", ColumnsSameMusic::Color as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Size"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsSameMusic::Size as i32); - column.add_attribute(&renderer, "background", ColumnsSameMusic::Color as i32); - column.add_attribute(&renderer, "foreground", ColumnsSameMusic::TextColor as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("File Name"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsSameMusic::Name as i32); - column.add_attribute(&renderer, "background", ColumnsSameMusic::Color as i32); - column.add_attribute(&renderer, "foreground", ColumnsSameMusic::TextColor as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Title"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsSameMusic::Title as i32); - column.add_attribute(&renderer, "background", ColumnsSameMusic::Color as i32); - column.add_attribute(&renderer, "foreground", ColumnsSameMusic::TextColor as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Artist"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsSameMusic::Artist as i32); - column.add_attribute(&renderer, "background", ColumnsSameMusic::Color as i32); - column.add_attribute(&renderer, "foreground", ColumnsSameMusic::TextColor as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Year"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsSameMusic::Year as i32); - column.add_attribute(&renderer, "background", ColumnsSameMusic::Color as i32); - column.add_attribute(&renderer, "foreground", ColumnsSameMusic::TextColor as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Bitrate"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsSameMusic::Bitrate as i32); - column.add_attribute(&renderer, "background", ColumnsSameMusic::Color as i32); - column.add_attribute(&renderer, "foreground", ColumnsSameMusic::TextColor as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Length"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsSameMusic::Length as i32); - column.add_attribute(&renderer, "background", ColumnsSameMusic::Color as i32); - column.add_attribute(&renderer, "foreground", ColumnsSameMusic::TextColor as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Genre"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsSameMusic::Genre as i32); - column.add_attribute(&renderer, "background", ColumnsSameMusic::Color as i32); - column.add_attribute(&renderer, "foreground", ColumnsSameMusic::TextColor as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Path"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsSameMusic::Path as i32); - column.add_attribute(&renderer, "background", ColumnsSameMusic::Color as i32); - column.add_attribute(&renderer, "foreground", ColumnsSameMusic::TextColor as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Modification Date"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsSameMusic::Modification as i32); - column.add_attribute(&renderer, "background", ColumnsSameMusic::Color as i32); - column.add_attribute(&renderer, "foreground", ColumnsSameMusic::TextColor as i32); - tree_view.append_column(&column); - tree_view.set_vexpand(true); + + let model = get_list_store(tree_view); + let columns_colors = (ColumnsSameMusic::Color as i32, ColumnsSameMusic::TextColor as i32); + let activatable_colors = (ColumnsSameMusic::ActivatableSelectButton as i32, ColumnsSameMusic::Color as i32); + + create_default_selection_button_column(&tree_view, ColumnsSameMusic::SelectionButton as i32, model, Some(activatable_colors)); + + create_default_column(&tree_view, ColumnsSameMusic::Size as i32, None, Some(columns_colors)); + create_default_column(&tree_view, ColumnsSameMusic::Name as i32, None, Some(columns_colors)); + create_default_column(&tree_view, ColumnsSameMusic::Title as i32, None, Some(columns_colors)); + create_default_column(&tree_view, ColumnsSameMusic::Artist as i32, None, Some(columns_colors)); + create_default_column(&tree_view, ColumnsSameMusic::Year as i32, None, Some(columns_colors)); + create_default_column(&tree_view, ColumnsSameMusic::Bitrate as i32, None, Some(columns_colors)); + create_default_column(&tree_view, ColumnsSameMusic::Length as i32, None, Some(columns_colors)); + create_default_column(&tree_view, ColumnsSameMusic::Genre as i32, None, Some(columns_colors)); + create_default_column(&tree_view, ColumnsSameMusic::Path as i32, None, Some(columns_colors)); + create_default_column(&tree_view, ColumnsSameMusic::Modification as i32, None, Some(columns_colors)); } pub fn create_tree_view_invalid_symlinks(tree_view: &TreeView) { + tree_view.set_vexpand(true); + let model = get_list_store(tree_view); - let renderer = CellRendererToggle::new(); - renderer.connect_toggled(move |_r, path| { - let iter = model.iter(&path).unwrap(); - let mut fixed = model.get::(&iter, ColumnsInvalidSymlinks::SelectionButton as i32); - fixed = !fixed; - model.set_value(&iter, ColumnsInvalidSymlinks::SelectionButton as u32, &fixed.to_value()); - }); - let column = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_resizable(false); - column.set_fixed_width(30); - column.add_attribute(&renderer, "active", ColumnsInvalidSymlinks::SelectionButton as i32); - tree_view.append_column(&column); + create_default_selection_button_column(&tree_view, ColumnsInvalidSymlinks::SelectionButton as i32, model, None); - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Symlink File Name"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsInvalidSymlinks::Name as i32); - column.set_sort_column_id(ColumnsInvalidSymlinks::Name as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Symlink Folder"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsInvalidSymlinks::Path as i32); - column.set_sort_column_id(ColumnsInvalidSymlinks::Path as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Destination Path"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsInvalidSymlinks::DestinationPath as i32); - column.set_sort_column_id(ColumnsInvalidSymlinks::DestinationPath as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Type of Error"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsInvalidSymlinks::TypeOfError as i32); - column.set_sort_column_id(ColumnsInvalidSymlinks::TypeOfError as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Modification Date"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsInvalidSymlinks::Modification as i32); - column.set_sort_column_id(ColumnsInvalidSymlinks::ModificationAsSecs as i32); - tree_view.append_column(&column); - - tree_view.set_vexpand(true); + create_default_column(&tree_view, ColumnsInvalidSymlinks::Name as i32, None, None); + create_default_column(&tree_view, ColumnsInvalidSymlinks::Path as i32, None, None); + create_default_column(&tree_view, ColumnsInvalidSymlinks::DestinationPath as i32, None, None); + create_default_column(&tree_view, ColumnsInvalidSymlinks::TypeOfError as i32, None, None); + create_default_column( + &tree_view, + ColumnsInvalidSymlinks::Modification as i32, + Some(ColumnsInvalidSymlinks::ModificationAsSecs as i32), + None, + ); } pub fn create_tree_view_broken_files(tree_view: &TreeView) { + tree_view.set_vexpand(true); + let model = get_list_store(tree_view); + create_default_selection_button_column(&tree_view, ColumnsBrokenFiles::SelectionButton as i32, model, None); + + create_default_column(&tree_view, ColumnsBrokenFiles::Name as i32, None, None); + create_default_column(&tree_view, ColumnsBrokenFiles::Path as i32, None, None); + create_default_column(&tree_view, ColumnsBrokenFiles::ErrorType as i32, None, None); + create_default_column( + &tree_view, + ColumnsBrokenFiles::Modification as i32, + Some(ColumnsBrokenFiles::ModificationAsSecs as i32), + None, + ); +} + +pub fn create_tree_view_bad_extensions(tree_view: &TreeView) { + tree_view.set_vexpand(true); + + let model = get_list_store(tree_view); + + create_default_selection_button_column(&tree_view, ColumnsBadExtensions::SelectionButton as i32, model, None); + + create_default_column(&tree_view, ColumnsBadExtensions::Name as i32, None, None); + create_default_column(&tree_view, ColumnsBadExtensions::Path as i32, None, None); + create_default_column(&tree_view, ColumnsBadExtensions::CurrentExtension as i32, None, None); + create_default_column(&tree_view, ColumnsBadExtensions::ValidExtensions as i32, None, None); +} + +fn create_default_selection_button_column( + tree_view: &TreeView, + column_id: i32, + model: ListStore, + activatable_color_columns: Option<(i32, i32)>, +) -> (CellRendererToggle, TreeViewColumn) { let renderer = CellRendererToggle::new(); renderer.connect_toggled(move |_r, path| { let iter = model.iter(&path).unwrap(); - let mut fixed = model.get::(&iter, ColumnsBrokenFiles::SelectionButton as i32); + let mut fixed = model.get::(&iter, column_id); fixed = !fixed; - model.set_value(&iter, ColumnsBrokenFiles::SelectionButton as u32, &fixed.to_value()); + model.set_value(&iter, column_id as u32, &fixed.to_value()); }); let column = TreeViewColumn::new(); column.pack_start(&renderer, true); column.set_resizable(false); column.set_fixed_width(30); - column.add_attribute(&renderer, "active", ColumnsBrokenFiles::SelectionButton as i32); + column.add_attribute(&renderer, "active", column_id); + if let Some(activatable_color_columns) = activatable_color_columns { + column.add_attribute(&renderer, "activatable", activatable_color_columns.0); + column.add_attribute(&renderer, "cell-background", activatable_color_columns.1); + } tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Name"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsBrokenFiles::Name as i32); - column.set_sort_column_id(ColumnsBrokenFiles::Name as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Path"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsBrokenFiles::Path as i32); - column.set_sort_column_id(ColumnsBrokenFiles::Path as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("ErrorType"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsBrokenFiles::ErrorType as i32); - column.set_sort_column_id(ColumnsBrokenFiles::ErrorType as i32); - tree_view.append_column(&column); - - let renderer = CellRendererText::new(); - let column: TreeViewColumn = TreeViewColumn::new(); - column.pack_start(&renderer, true); - column.set_title("Modification Date"); - column.set_resizable(true); - column.set_min_width(50); - column.add_attribute(&renderer, "text", ColumnsBrokenFiles::Modification as i32); - column.set_sort_column_id(ColumnsBrokenFiles::ModificationAsSecs as i32); - tree_view.append_column(&column); - - tree_view.set_vexpand(true); + (renderer, column) +} + +fn create_default_column(tree_view: &TreeView, column_id: i32, sort_column_id: Option, colors_columns_id: Option<(i32, i32)>) -> (CellRendererText, TreeViewColumn) { + let renderer = CellRendererText::new(); + let column: TreeViewColumn = TreeViewColumn::new(); + column.pack_start(&renderer, true); + column.set_resizable(true); + column.set_min_width(50); + column.add_attribute(&renderer, "text", column_id); + if let Some(sort_column_id) = sort_column_id { + column.set_sort_column_id(sort_column_id); + } else { + column.set_sort_column_id(column_id); + } + if let Some(colors_columns_id) = colors_columns_id { + column.add_attribute(&renderer, "background", colors_columns_id.0); + column.add_attribute(&renderer, "foreground", colors_columns_id.1); + } + tree_view.append_column(&column); + (renderer, column) } diff --git a/czkawka_gui/src/initialize_gui.rs b/czkawka_gui/src/initialize_gui.rs index 527d180..97f19ba 100644 --- a/czkawka_gui/src/initialize_gui.rs +++ b/czkawka_gui/src/initialize_gui.rs @@ -287,7 +287,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) { tree_view.set_model(Some(&list_store)); tree_view.selection().set_mode(SelectionMode::Multiple); - create_tree_view_broken_files(&tree_view); + create_tree_view_bad_extensions(&tree_view); tree_view.set_widget_name("tree_view_bad_extensions"); scrolled_window.set_child(Some(&tree_view));