2020-09-30 05:44:20 +13:00
use czkawka_core ::common_messages ::Messages ;
use gtk ::prelude ::* ;
use gtk ::TreeViewColumn ;
2020-10-08 09:22:39 +13:00
use std ::collections ::HashMap ;
2020-09-30 05:44:20 +13:00
2020-10-01 19:53:17 +13:00
pub enum ColumnsDuplicates {
2020-10-02 02:55:45 +13:00
// Columns for duplicate treeview
2020-10-01 19:53:17 +13:00
Name = 0 ,
Path ,
Modification ,
ModificationAsSecs ,
Color ,
2020-10-02 02:25:58 +13:00
TextColor ,
2020-10-01 19:53:17 +13:00
}
2020-10-02 02:25:58 +13:00
2020-10-02 06:26:25 +13:00
pub enum ColumnsEmptyFolders {
2020-10-02 02:55:45 +13:00
// Columns for empty folder treeview
2020-09-30 05:44:20 +13:00
Name = 0 ,
Path ,
Modification ,
}
pub enum ColumnsDirectory {
// Columns for Included and Excluded Directories in upper Notebook
Path = 0 ,
}
2020-10-02 06:26:25 +13:00
pub enum ColumnsBigFiles {
Size = 0 ,
Name ,
Path ,
Modification ,
}
pub enum ColumnsEmptyFiles {
Name = 0 ,
Path ,
Modification ,
}
pub enum ColumnsTemporaryFiles {
Name = 0 ,
Path ,
Modification ,
}
2020-09-30 05:44:20 +13:00
2020-10-02 02:25:58 +13:00
pub const TEXT_COLOR : & str = " #ffffff " ;
2020-09-30 05:44:20 +13:00
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
2020-10-02 06:26:25 +13:00
pub fn create_tree_view_duplicates ( tree_view : & mut gtk ::TreeView ) {
2020-09-30 05:44:20 +13:00
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 ) ;
2020-10-01 19:53:17 +13:00
name_column . add_attribute ( & renderer , " text " , ColumnsDuplicates ::Name as i32 ) ;
name_column . add_attribute ( & renderer , " background " , ColumnsDuplicates ::Color as i32 ) ;
2020-10-02 02:25:58 +13:00
name_column . add_attribute ( & renderer , " foreground " , ColumnsDuplicates ::TextColor as i32 ) ;
2020-10-02 06:26:25 +13:00
tree_view . append_column ( & name_column ) ;
2020-09-30 05:44:20 +13:00
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 ) ;
2020-10-01 19:53:17 +13:00
path_column . add_attribute ( & renderer , " text " , ColumnsDuplicates ::Path as i32 ) ;
path_column . add_attribute ( & renderer , " background " , ColumnsDuplicates ::Color as i32 ) ;
2020-10-02 02:25:58 +13:00
path_column . add_attribute ( & renderer , " foreground " , ColumnsDuplicates ::TextColor as i32 ) ;
2020-10-02 06:26:25 +13:00
tree_view . append_column ( & path_column ) ;
2020-09-30 05:44:20 +13:00
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 ) ;
2020-10-01 19:53:17 +13:00
modification_date_column . add_attribute ( & renderer , " text " , ColumnsDuplicates ::Modification as i32 ) ;
modification_date_column . add_attribute ( & renderer , " background " , ColumnsDuplicates ::Color as i32 ) ;
2020-10-02 02:25:58 +13:00
modification_date_column . add_attribute ( & renderer , " foreground " , ColumnsDuplicates ::TextColor as i32 ) ;
2020-10-02 06:26:25 +13:00
tree_view . append_column ( & modification_date_column ) ;
2020-09-30 05:44:20 +13:00
2020-10-02 06:26:25 +13:00
tree_view . set_vexpand ( true ) ;
2020-09-30 05:44:20 +13:00
}
2020-10-02 06:26:25 +13:00
pub fn create_tree_view_empty_folders ( tree_view : & mut gtk ::TreeView ) {
2020-09-30 05:44:20 +13:00
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 ) ;
2020-10-02 06:26:25 +13:00
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 ) ;
2020-09-30 05:44:20 +13:00
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 ) ;
2020-10-02 06:26:25 +13:00
path_column . add_attribute ( & renderer , " text " , ColumnsBigFiles ::Path as i32 ) ;
tree_view . append_column ( & path_column ) ;
2020-09-30 05:44:20 +13:00
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 ) ;
2020-10-02 06:26:25 +13:00
modification_date_column . add_attribute ( & renderer , " text " , ColumnsBigFiles ::Modification as i32 ) ;
tree_view . append_column ( & modification_date_column ) ;
2020-09-30 05:44:20 +13:00
2020-10-02 06:26:25 +13:00
tree_view . set_vexpand ( true ) ;
2020-09-30 05:44:20 +13:00
}
2020-10-02 06:26:25 +13:00
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 ) {
2020-09-30 05:44:20 +13:00
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 ) ;
2020-10-02 06:26:25 +13:00
tree_view . append_column ( & name_column ) ;
2020-09-30 05:44:20 +13:00
2020-10-02 06:26:25 +13:00
tree_view . set_headers_visible ( false ) ;
2020-09-30 05:44:20 +13:00
}
pub fn get_string_from_list_store ( scrolled_window : & gtk ::ScrolledWindow ) -> String {
let tree_view : gtk ::TreeView = scrolled_window . get_children ( ) . get ( 0 ) . unwrap ( ) . clone ( ) . downcast ::< gtk ::TreeView > ( ) . unwrap ( ) ;
let list_store : gtk ::ListStore = tree_view . get_model ( ) . unwrap ( ) . downcast ::< gtk ::ListStore > ( ) . unwrap ( ) ;
2020-09-30 07:19:36 +13:00
let mut first : bool = true ;
2020-09-30 05:44:20 +13:00
2020-09-30 07:19:36 +13:00
let mut return_string : String = " " . to_string ( ) ;
2020-09-30 05:44:20 +13:00
let tree_iter = match list_store . get_iter_first ( ) {
Some ( t ) = > t ,
2020-09-30 07:19:36 +13:00
None = > return return_string ,
2020-09-30 05:44:20 +13:00
} ;
2020-09-30 07:19:36 +13:00
loop {
if ! first {
return_string + = " , " ;
} else {
first = false ;
}
return_string + = list_store . get_value ( & tree_iter , 0 ) . get ::< String > ( ) . unwrap ( ) . unwrap ( ) . as_str ( ) ;
if ! list_store . iter_next ( & tree_iter ) {
return return_string ;
}
}
2020-09-30 05:44:20 +13:00
}
2020-10-02 06:26:25 +13:00
2020-09-30 05:44:20 +13:00
pub fn print_text_messages_to_text_view ( text_messages : & Messages , text_view : & gtk ::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 : & gtk ::TreeSelection , tree_model : & gtk ::TreeModel , tree_path : & gtk ::TreePath , _is_path_currently_selected : bool ) -> bool {
2020-10-01 19:53:17 +13:00
// let name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(),ColumnsDuplicates::Name as i32).get::<String>().unwrap().unwrap();
// let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), ColumnsDuplicates::Path as i32).get::<String>().unwrap().unwrap();
// let modification = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(),ColumnsDuplicates::Modification as i32).get::<String>().unwrap().unwrap();
let color = tree_model . get_value ( & tree_model . get_iter ( tree_path ) . unwrap ( ) , ColumnsDuplicates ::Color as i32 ) . get ::< String > ( ) . unwrap ( ) . unwrap ( ) ;
2020-09-30 05:44:20 +13:00
if color = = HEADER_ROW_COLOR {
return false ;
}
true
}
2020-10-08 09:22:39 +13:00
pub fn set_buttons ( hashmap : & mut HashMap < String , bool > , 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 ( ) ;
}
}
}