Skip to content

Commit

Permalink
Better to 4 conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
qarmin committed Dec 16, 2021
1 parent f215692 commit 864078b
Show file tree
Hide file tree
Showing 6 changed files with 109 additions and 45 deletions.
5 changes: 3 additions & 2 deletions czkawka_gui/gtk3togtk4migration.md
Expand Up @@ -140,6 +140,7 @@ self.notebook_upper.children() - children are not visible
tree_view.connect_button_release_event(move |tree_view, _event| - is missing
missing move in closures above - save_configuration(false, &gui_data.upper_notebook and below et stop_sender = gui_data.stop_sender.clone();
missing resize, what should I do?


- change upper window from paned to normal box, because paned behave strange
- Convert FileDialog to FileDialogNative
- Convert FileDialog to be async

89 changes: 51 additions & 38 deletions czkawka_gui/src/gui_main_notebook.rs
@@ -1,9 +1,10 @@
use crate::fl;
use crate::help_combo_box::IMAGES_HASH_SIZE_COMBO_BOX;
use crate::help_functions::get_all_children;
use czkawka_core::similar_images::{get_string_from_similarity, Similarity, SIMILAR_VALUES};
use gtk4::prelude::*;
use gtk4::Inhibit;
use gtk4::{EventControllerKey, TreeView};
use gtk4::{Inhibit, Widget};

use crate::notebook_enums::{NotebookMainEnum, NUMBER_OF_NOTEBOOK_MAIN_TABS};

Expand Down Expand Up @@ -45,6 +46,8 @@ pub struct GuiMainNotebook {
pub evk_tree_view_invalid_symlinks: gtk4::EventControllerKey,
pub evk_tree_view_broken_files: gtk4::EventControllerKey,

pub gc_tree_view_duplicate_finder: gtk4::GestureClick,

// General

// Duplicate
Expand Down Expand Up @@ -122,38 +125,40 @@ impl GuiMainNotebook {
let tree_view_invalid_symlinks: gtk4::TreeView = TreeView::new();
let tree_view_broken_files: gtk4::TreeView = TreeView::new();

let evk_tree_view_duplicate_finder: gtk4::EventControllerKey = EventControllerKey::new();
let evk_tree_view_empty_folder_finder: gtk4::EventControllerKey = EventControllerKey::new();
let evk_tree_view_empty_files_finder: gtk4::EventControllerKey = EventControllerKey::new();
let evk_tree_view_temporary_files_finder: gtk4::EventControllerKey = EventControllerKey::new();
let evk_tree_view_big_files_finder: gtk4::EventControllerKey = EventControllerKey::new();
let evk_tree_view_similar_images_finder: gtk4::EventControllerKey = EventControllerKey::new();
let evk_tree_view_similar_videos_finder: gtk4::EventControllerKey = EventControllerKey::new();
let evk_tree_view_same_music_finder: gtk4::EventControllerKey = EventControllerKey::new();
let evk_tree_view_invalid_symlinks: gtk4::EventControllerKey = EventControllerKey::new();
let evk_tree_view_broken_files: gtk4::EventControllerKey = EventControllerKey::new();

// TODO GTK 4
// let evk_tree_view_duplicate_finder: gtk4::EventControllerKey = EventControllerKey::new();
// tree_view_duplicate_finder.add_controller(&evk_tree_view_duplicate_finder);
// let evk_tree_view_empty_folder_finder: gtk4::EventControllerKey = EventControllerKey::new();
// tree_view_empty_folder_finder.add_controller(&evk_tree_view_empty_folder_finder);
// let evk_tree_view_empty_files_finder: gtk4::EventControllerKey = EventControllerKey::new();
// tree_view_empty_files_finder.add_controller(&evk_tree_view_empty_files_finder);
// let evk_tree_view_temporary_files_finder: gtk4::EventControllerKey = EventControllerKey::new();
// tree_view_temporary_files_finder.add_controller(&evk_tree_view_temporary_files_finder);
// let evk_tree_view_big_files_finder: gtk4::EventControllerKey = EventControllerKey::new();
// tree_view_big_files_finder.add_controller(&evk_tree_view_big_files_finder);
// let evk_tree_view_similar_images_finder: gtk4::EventControllerKey = EventControllerKey::new();
// tree_view_similar_images_finder.add_controller(&evk_tree_view_similar_images_finder);
// let evk_tree_view_similar_videos_finder: gtk4::EventControllerKey = EventControllerKey::new();
// tree_view_similar_videos_finder.add_controller(&evk_tree_view_similar_videos_finder);
// let evk_tree_view_same_music_finder: gtk4::EventControllerKey = EventControllerKey::new();
// tree_view_same_music_finder.add_controller(&evk_tree_view_same_music_finder);
// let evk_tree_view_invalid_symlinks: gtk4::EventControllerKey = EventControllerKey::new();
// tree_view_invalid_symlinks.add_controller(&evk_tree_view_invalid_symlinks);
// let evk_tree_view_broken_files: gtk4::EventControllerKey = EventControllerKey::new();
// tree_view_broken_files.add_controller(&evk_tree_view_broken_files);

let gc_tree_view_duplicate_finder: gtk4::GestureClick = gtk4::GestureClick::new();

// TODO GTK 4
let evk_tree_view_duplicate_finder: gtk4::EventControllerKey = EventControllerKey::new();
// tree_view_duplicate_finder.add_controller(&evk_tree_view_duplicate_finder);
let evk_tree_view_empty_folder_finder: gtk4::EventControllerKey = EventControllerKey::new();
tree_view_empty_folder_finder.add_controller(&evk_tree_view_empty_folder_finder);
let evk_tree_view_empty_files_finder: gtk4::EventControllerKey = EventControllerKey::new();
tree_view_empty_files_finder.add_controller(&evk_tree_view_empty_files_finder);
let evk_tree_view_temporary_files_finder: gtk4::EventControllerKey = EventControllerKey::new();
tree_view_temporary_files_finder.add_controller(&evk_tree_view_temporary_files_finder);
let evk_tree_view_big_files_finder: gtk4::EventControllerKey = EventControllerKey::new();
tree_view_big_files_finder.add_controller(&evk_tree_view_big_files_finder);
let evk_tree_view_similar_images_finder: gtk4::EventControllerKey = EventControllerKey::new();
tree_view_similar_images_finder.add_controller(&evk_tree_view_similar_images_finder);
let evk_tree_view_similar_videos_finder: gtk4::EventControllerKey = EventControllerKey::new();
tree_view_similar_videos_finder.add_controller(&evk_tree_view_similar_videos_finder);
let evk_tree_view_same_music_finder: gtk4::EventControllerKey = EventControllerKey::new();
tree_view_same_music_finder.add_controller(&evk_tree_view_same_music_finder);
let evk_tree_view_invalid_symlinks: gtk4::EventControllerKey = EventControllerKey::new();
tree_view_invalid_symlinks.add_controller(&evk_tree_view_invalid_symlinks);
let evk_tree_view_broken_files: gtk4::EventControllerKey = EventControllerKey::new();
tree_view_broken_files.add_controller(&evk_tree_view_broken_files);

let combo_box_duplicate_check_method: gtk4::ComboBoxText = builder.object("combo_box_duplicate_check_method").unwrap();
let combo_box_duplicate_hash_type: gtk4::ComboBoxText = builder.object("combo_box_duplicate_hash_type").unwrap();
Expand Down Expand Up @@ -259,6 +264,7 @@ impl GuiMainNotebook {
combo_box_duplicate_hash_type,
combo_box_image_hash_size,
check_button_video_ignore_same_size,
gc_tree_view_duplicate_finder,
}
}

Expand Down Expand Up @@ -340,21 +346,28 @@ impl GuiMainNotebook {

// Change name of main notebook tabs
// let vec_children: Vec<gtk4::Widget> = self.notebook_main.children();
//
// for (main_enum, fl_thing) in [
// (NotebookMainEnum::Duplicate as usize, fl!("main_notebook_duplicates")),
// (NotebookMainEnum::EmptyDirectories as usize, fl!("main_notebook_empty_directories")),
// (NotebookMainEnum::BigFiles as usize, fl!("main_notebook_big_files")),
// (NotebookMainEnum::EmptyFiles as usize, fl!("main_notebook_empty_files")),
// (NotebookMainEnum::Temporary as usize, fl!("main_notebook_temporary")),
// (NotebookMainEnum::SimilarImages as usize, fl!("main_notebook_similar_images")),
// (NotebookMainEnum::SimilarVideos as usize, fl!("main_notebook_similar_videos")),
// (NotebookMainEnum::SameMusic as usize, fl!("main_notebook_same_music")),
// (NotebookMainEnum::Symlinks as usize, fl!("main_notebook_symlinks")),
// (NotebookMainEnum::BrokenFiles as usize, fl!("main_notebook_broken_files")),
// ] {
// self.notebook_main.tab_label(&vec_children[main_enum]).unwrap().downcast::<gtk4::Label>().unwrap().set_text(&fl_thing);
// }
// AAAAAAAAAAAAAAAAAAAAAAA
let mut vec_children: Vec<gtk4::Widget> = get_all_children(&self.notebook_main.clone().upcast::<Widget>());
let mut vec_children2: Vec<gtk4::Widget> = get_all_children(&vec_children[1]);
println!("{:?}", vec_children);
println!("{:?}", get_all_children(&vec_children[1]));
println!("{:?}", self.notebook_main.pages());
println!("{:?}", self.notebook_main.n_pages());

for (main_enum, fl_thing) in [
(NotebookMainEnum::Duplicate as usize, fl!("main_notebook_duplicates")),
(NotebookMainEnum::EmptyDirectories as usize, fl!("main_notebook_empty_directories")),
(NotebookMainEnum::BigFiles as usize, fl!("main_notebook_big_files")),
(NotebookMainEnum::EmptyFiles as usize, fl!("main_notebook_empty_files")),
(NotebookMainEnum::Temporary as usize, fl!("main_notebook_temporary")),
(NotebookMainEnum::SimilarImages as usize, fl!("main_notebook_similar_images")),
(NotebookMainEnum::SimilarVideos as usize, fl!("main_notebook_similar_videos")),
(NotebookMainEnum::SameMusic as usize, fl!("main_notebook_same_music")),
(NotebookMainEnum::Symlinks as usize, fl!("main_notebook_symlinks")),
(NotebookMainEnum::BrokenFiles as usize, fl!("main_notebook_broken_files")),
] {
self.notebook_main.tab_label(&vec_children2[main_enum]).unwrap().downcast::<gtk4::Label>().unwrap().set_text(&fl_thing);
}

// Change names of columns
let names_of_columns = [
Expand Down
16 changes: 16 additions & 0 deletions czkawka_gui/src/help_functions.rs
Expand Up @@ -555,3 +555,19 @@ pub fn get_custom_label_from_label_with_image(button: &gtk4::Button) -> gtk4::La
pub fn get_custom_label_from_label_with_image_menu_button(button: &gtk4::MenuButton) -> gtk4::Label {
gtk4::Label::new(None)
}

pub fn get_all_children(wid : &gtk4::Widget) -> Vec<gtk4::Widget>{
let mut vector = vec![];
if let Some(mut child) = wid.first_child(){
vector.push(child.clone());
loop{
child = match child.next_sibling(){
Some(t) => t,
None => break
};
vector.push(child.clone());
}
}

return vector;
}
27 changes: 24 additions & 3 deletions czkawka_gui/src/initialize_gui.rs
Expand Up @@ -153,9 +153,9 @@ pub fn initialize_gui(gui_data: &mut GuiData) {

{
// EVK
let evk = EventControllerKey::new();
let evk = gui_data.main_notebook.evk_tree_view_duplicate_finder.clone();
tree_view.add_controller(&evk);
evk.connect_key_pressed(opening_enter_function_ported);
gui_data.main_notebook.evk_tree_view_duplicate_finder = evk;
}
{
// Other connects
Expand All @@ -164,7 +164,28 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let image_preview_duplicates = gui_data.main_notebook.image_preview_duplicates.clone();
let preview_path = gui_data.preview_path.clone();

//tree_view.connect_button_press_event(opening_double_click_function);
/////////////A AAAAAAAAAAAAAAAAAAAAA

let gc_tree_view_duplicate_finder = gui_data.main_notebook.gc_tree_view_duplicate_finder.clone();
tree_view.add_controller(&gc_tree_view_duplicate_finder);
gc_tree_view_duplicate_finder.set_button(0);
gc_tree_view_duplicate_finder.connect_pressed(opening_double_click_function);

gc_tree_view_duplicate_finder.connect_pressed(move |gtk_gesture_left_click, _, _, _| {
let tree_view = gtk_gesture_left_click.widget().unwrap().downcast::<gtk4::TreeView>().unwrap();
let nb_object = &NOTEBOOKS_INFOS[NotebookMainEnum::Duplicate as usize];
let preview_path = preview_path.clone();
show_preview(
&tree_view,
&text_view_errors,
&check_button_settings_show_preview_duplicates,
&image_preview_duplicates,
preview_path,
nb_object.column_path,
nb_object.column_name,
);
});
// tree_view.connect_button_press_event(opening_double_click_function);
// tree_view.connect_button_release_event(move |tree_view, _event| {
// let nb_object = &NOTEBOOKS_INFOS[NotebookMainEnum::Duplicate as usize];
// let preview_path = preview_path.clone();
Expand Down
15 changes: 14 additions & 1 deletion czkawka_gui/src/opening_selecting_records.rs
@@ -1,7 +1,7 @@
use crate::help_functions::*;
use gdk4::ModifierType;
use gtk4::prelude::*;
use gtk4::Inhibit;
use gtk4::{GestureClick, Inhibit};

// TODO add option to open files and folders from context menu activated by pressing ONCE with right mouse button

Expand All @@ -28,6 +28,19 @@ pub fn opening_enter_function_ported(event_controller: &gtk4::EventControllerKey
Inhibit(false) // True catches signal, and don't send it to function, e.g. up button is catched and don't move selection
}

pub fn opening_double_click_function(gesture_click: &GestureClick, number_of_clicks: i32, b: f64, c: f64) {
let tree_view = gesture_click.widget().unwrap().downcast::<gtk4::TreeView>().unwrap();

let nt_object = get_notebook_object_from_tree_view(&tree_view);
if number_of_clicks == 2 {
if gesture_click.current_button() == 1 {
common_open_function(&tree_view, nt_object.column_name, nt_object.column_path, OpenMode::PathAndName);
} else if gesture_click.current_button() == 3 {
common_open_function(&tree_view, nt_object.column_name, nt_object.column_path, OpenMode::OnlyPath);
}
}
}

// pub fn opening_double_click_function(tree_view: &gtk4::TreeView, event: &gdk4::EventButton) -> gtk4::Inhibit {
// // let nt_object = get_notebook_object_from_tree_view(tree_view);
// // if event.event_type() == gdk4::EventType::DoubleButtonPress && event.button() == 1 {
Expand Down
2 changes: 1 addition & 1 deletion i18n/en/czkawka_gui.ftl
Expand Up @@ -62,7 +62,7 @@ image_hash_alg_tooltip =
main_notebook_duplicates = Duplicate Files
main_notebook_empty_directories = Empty Directories
main_notebook_big_files = Big Files
main_notebook_big_files = BigTranslated Files
main_notebook_empty_files = Empty Files
main_notebook_temporary = Temporary Files
main_notebook_similar_images = Similar Images
Expand Down

0 comments on commit 864078b

Please sign in to comment.