More GTK 4 related changes (#474)
* More GTK 4 related changes * More changes * Change button to MenuButton
This commit is contained in:
parent
c7b9abcfa0
commit
8c4c67e26f
|
@ -96,10 +96,10 @@ pub async fn check_if_can_delete_files(check_button_settings_confirm_deletion: &
|
|||
true
|
||||
}
|
||||
|
||||
fn create_dialog_ask_for_deletion(_window_main: >k::Window) -> (Dialog, CheckButton) {
|
||||
let confirmation_dialog_delete = gtk::Dialog::builder().title("Delete confirmation").build();
|
||||
let button_ok = confirmation_dialog_delete.add_button("Ok", ResponseType::Ok);
|
||||
confirmation_dialog_delete.add_button("Close", ResponseType::Cancel);
|
||||
fn create_dialog_ask_for_deletion(window_main: >k::Window) -> (Dialog, CheckButton) {
|
||||
let dialog = gtk::Dialog::builder().title("Delete confirmation").transient_for(window_main).build();
|
||||
let button_ok = dialog.add_button("Ok", ResponseType::Ok);
|
||||
dialog.add_button("Close", ResponseType::Cancel);
|
||||
|
||||
let label: gtk::Label = gtk::Label::new(Some("Are you sure that you want to delete files?"));
|
||||
let check_button: gtk::CheckButton = gtk::CheckButton::with_label("Ask next time");
|
||||
|
@ -108,18 +108,18 @@ fn create_dialog_ask_for_deletion(_window_main: >k::Window) -> (Dialog, CheckB
|
|||
|
||||
button_ok.grab_focus();
|
||||
|
||||
let internal_box = get_dialog_box_child(&confirmation_dialog_delete);
|
||||
let internal_box = get_dialog_box_child(&dialog);
|
||||
internal_box.add(&label);
|
||||
internal_box.add(&check_button);
|
||||
|
||||
confirmation_dialog_delete.show_all();
|
||||
(confirmation_dialog_delete, check_button)
|
||||
dialog.show_all();
|
||||
(dialog, check_button)
|
||||
}
|
||||
|
||||
fn create_dialog_group_deletion(_window_main: >k::Window) -> (Dialog, CheckButton) {
|
||||
let confirmation_dialog_group_delete = gtk::Dialog::builder().title("Confirmation of deleting all files in group").build();
|
||||
let button_ok = confirmation_dialog_group_delete.add_button("Ok", ResponseType::Ok);
|
||||
confirmation_dialog_group_delete.add_button("Close", ResponseType::Cancel);
|
||||
fn create_dialog_group_deletion(window_main: >k::Window) -> (Dialog, CheckButton) {
|
||||
let dialog = gtk::Dialog::builder().title("Confirmation of deleting all files in group").transient_for(window_main).build();
|
||||
let button_ok = dialog.add_button("Ok", ResponseType::Ok);
|
||||
dialog.add_button("Close", ResponseType::Cancel);
|
||||
|
||||
let label: gtk::Label = gtk::Label::new(Some("In some groups there are selected all records."));
|
||||
let label2: gtk::Label = gtk::Label::new(Some("Are you sure that you want to delete them?"));
|
||||
|
@ -129,13 +129,13 @@ fn create_dialog_group_deletion(_window_main: >k::Window) -> (Dialog, CheckBut
|
|||
|
||||
button_ok.grab_focus();
|
||||
|
||||
let internal_box = get_dialog_box_child(&confirmation_dialog_group_delete);
|
||||
let internal_box = get_dialog_box_child(&dialog);
|
||||
internal_box.add(&label);
|
||||
internal_box.add(&label2);
|
||||
internal_box.add(&check_button);
|
||||
|
||||
confirmation_dialog_group_delete.show_all();
|
||||
(confirmation_dialog_group_delete, check_button)
|
||||
dialog.show_all();
|
||||
(dialog, check_button)
|
||||
}
|
||||
|
||||
pub async fn check_if_deleting_all_files_in_group(tree_view: >k::TreeView, column_color: i32, column_selection: i32, window_main: >k::Window, check_button_settings_confirm_group_deletion: >k::CheckButton) -> bool {
|
||||
|
|
|
@ -169,44 +169,32 @@ pub fn hardlink_symlink(tree_view: >k::TreeView, column_file_name: i32, column
|
|||
for symhardlink_data in vec_symhardlink_data {
|
||||
dbg!(&symhardlink_data);
|
||||
for file_to_hardlink in symhardlink_data.files_to_symhardlink {
|
||||
match make_hard_link(&PathBuf::from(&symhardlink_data.original_data), &PathBuf::from(&file_to_hardlink)) {
|
||||
Ok(_) => (),
|
||||
Err(e) => {
|
||||
add_text_to_text_view(text_view_errors, format!("Failed to hardlink {}, reason {}", file_to_hardlink, e).as_str());
|
||||
continue;
|
||||
}
|
||||
if let Err(e) = make_hard_link(&PathBuf::from(&symhardlink_data.original_data), &PathBuf::from(&file_to_hardlink)) {
|
||||
add_text_to_text_view(text_view_errors, format!("Failed to hardlink {}, reason {}", file_to_hardlink, e).as_str());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for symhardlink_data in vec_symhardlink_data {
|
||||
for file_to_symlink in symhardlink_data.files_to_symhardlink {
|
||||
match fs::remove_file(&file_to_symlink) {
|
||||
Ok(_) => (),
|
||||
Err(e) => {
|
||||
add_text_to_text_view(text_view_errors, format!("Failed to remove file {} when creating symlink, reason {}", file_to_symlink, e).as_str());
|
||||
continue;
|
||||
}
|
||||
if let Err(e) = fs::remove_file(&file_to_symlink) {
|
||||
add_text_to_text_view(text_view_errors, format!("Failed to remove file {} when creating symlink, reason {}", file_to_symlink, e).as_str());
|
||||
continue;
|
||||
};
|
||||
|
||||
#[cfg(target_family = "unix")]
|
||||
{
|
||||
match std::os::unix::fs::symlink(&symhardlink_data.original_data, &file_to_symlink) {
|
||||
Ok(_) => (),
|
||||
Err(e) => {
|
||||
add_text_to_text_view(text_view_errors, format!("Failed to remove file {} when creating symlink, reason {}", file_to_symlink, e).as_str());
|
||||
continue;
|
||||
}
|
||||
if let Err(e) = std::os::unix::fs::symlink(&symhardlink_data.original_data, &file_to_symlink) {
|
||||
add_text_to_text_view(text_view_errors, format!("Failed to remove file {} when creating symlink, reason {}", file_to_symlink, e).as_str());
|
||||
continue;
|
||||
};
|
||||
}
|
||||
#[cfg(target_family = "windows")]
|
||||
{
|
||||
match std::os::windows::fs::symlink_file(&symhardlink_data.original_data, &file_to_symlink) {
|
||||
Ok(_) => (),
|
||||
Err(e) => {
|
||||
add_text_to_text_view(&text_view_errors, format!("Failed to remove file {} when creating symlink, reason {}", file_to_symlink, e).as_str());
|
||||
continue;
|
||||
}
|
||||
if let Err(e) = std::os::windows::fs::symlink_file(&symhardlink_data.original_data, &file_to_symlink) {
|
||||
add_text_to_text_view(&text_view_errors, format!("Failed to remove file {} when creating symlink, reason {}", file_to_symlink, e).as_str());
|
||||
continue;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,6 +56,7 @@ fn move_things(tree_view: >k::TreeView, column_file_name: i32, column_path: i3
|
|||
let chooser = gtk::FileChooserDialog::builder()
|
||||
.title("Choose folder to which you want to move duplicated files")
|
||||
.action(gtk::FileChooserAction::SelectFolder)
|
||||
.transient_for(window_main)
|
||||
.build();
|
||||
chooser.add_button("Ok", ResponseType::Ok);
|
||||
chooser.add_button("Close", ResponseType::Cancel);
|
||||
|
@ -63,12 +64,9 @@ fn move_things(tree_view: >k::TreeView, column_file_name: i32, column_path: i3
|
|||
chooser.set_select_multiple(false);
|
||||
chooser.show_all();
|
||||
|
||||
window_main.set_sensitive(false);
|
||||
|
||||
let entry_info = entry_info.clone();
|
||||
let text_view_errors = text_view_errors.clone();
|
||||
let tree_view = tree_view.clone();
|
||||
let window_main = window_main.clone();
|
||||
chooser.connect_response(move |file_chooser, response_type| {
|
||||
if response_type == gtk::ResponseType::Ok {
|
||||
let folders = file_chooser.filenames();
|
||||
|
@ -84,7 +82,6 @@ fn move_things(tree_view: >k::TreeView, column_file_name: i32, column_path: i3
|
|||
}
|
||||
}
|
||||
file_chooser.close();
|
||||
window_main.set_sensitive(true);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ use std::thread;
|
|||
|
||||
use glib::Sender;
|
||||
use gtk::prelude::*;
|
||||
use gtk::WindowPosition;
|
||||
use img_hash::{FilterType, HashAlg};
|
||||
|
||||
use czkawka_core::big_file::BigFile;
|
||||
|
@ -131,9 +130,6 @@ pub fn connect_button_search(
|
|||
|
||||
entry_info.set_text("Searching data, it may take a while, please wait...");
|
||||
|
||||
// Set dialog to center to current screen(it is impossible to center it to main window)
|
||||
window_progress.set_position(WindowPosition::Center);
|
||||
|
||||
// Resets progress bars
|
||||
progress_bar_all_stages.set_fraction(0 as f64);
|
||||
progress_bar_current_stage.set_fraction(0 as f64);
|
||||
|
|
|
@ -26,13 +26,11 @@ pub fn connect_button_select(gui_data: &GuiData) {
|
|||
|
||||
let popovers = gui_data.popovers.clone();
|
||||
let notebook_main = gui_data.main_notebook.notebook_main.clone();
|
||||
let buttons_select_clone = gui_data.bottom_buttons.buttons_select.clone();
|
||||
let popover_select = gui_data.popovers.popover_select.clone();
|
||||
let buttons_select = gui_data.bottom_buttons.buttons_select.clone();
|
||||
|
||||
buttons_select_clone.connect_clicked(move |_| {
|
||||
buttons_select.connect_clicked(move |_| {
|
||||
show_required_popovers(&popovers, &to_notebook_main_enum(notebook_main.current_page().unwrap()), &hashmap);
|
||||
popover_select.set_relative_to(Some(&buttons_select));
|
||||
popover_select.popup();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
use gtk::prelude::*;
|
||||
|
||||
use crate::gui_data::GuiData;
|
||||
use crate::help_functions::KEY_ENTER;
|
||||
|
||||
pub fn connect_button_stop(gui_data: &GuiData) {
|
||||
let button_stop_in_dialog = gui_data.progress_window.button_stop_in_dialog.clone();
|
||||
let evk_button_stop_in_dialog = gui_data.progress_window.evk_button_stop_in_dialog.clone();
|
||||
let stop_sender = gui_data.stop_sender.clone();
|
||||
button_stop_in_dialog.connect_key_release_event(move |_, e| {
|
||||
if e.keycode() == Some(36) {
|
||||
evk_button_stop_in_dialog.connect_key_released(move |_, _, key_code, _| {
|
||||
if key_code == KEY_ENTER {
|
||||
// Only accept enter key to stop search
|
||||
stop_sender.send(()).unwrap();
|
||||
}
|
||||
gtk::Inhibit(false)
|
||||
});
|
||||
|
||||
let button_stop_in_dialog = gui_data.progress_window.button_stop_in_dialog.clone();
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
use gtk::prelude::*;
|
||||
use gtk::WindowPosition;
|
||||
|
||||
use crate::gui_data::GuiData;
|
||||
|
||||
|
@ -7,12 +6,11 @@ pub fn connect_button_about(gui_data: &GuiData) {
|
|||
let about_dialog = gui_data.about.about_dialog.clone();
|
||||
let button_app_info = gui_data.header.button_app_info.clone();
|
||||
button_app_info.connect_clicked(move |_| {
|
||||
about_dialog.set_position(WindowPosition::Center);
|
||||
about_dialog.show();
|
||||
|
||||
// Prevent from deleting dialog after close
|
||||
about_dialog.connect_delete_event(|e, _f| {
|
||||
e.hide();
|
||||
about_dialog.connect_delete_event(|dialog, _| {
|
||||
dialog.hide();
|
||||
Inhibit(true)
|
||||
});
|
||||
});
|
||||
|
|
|
@ -213,7 +213,7 @@ fn popover_one_oldest_newest(popover: >k::Popover, tree_view: >k::TreeView,
|
|||
popover.popdown();
|
||||
}
|
||||
|
||||
fn popover_custom_select_unselect(popover: >k::Popover, _window_main: &Window, tree_view: >k::TreeView, column_color: Option<i32>, column_file_name: i32, column_path: i32, column_button_selection: u32, select_things: bool) {
|
||||
fn popover_custom_select_unselect(popover: >k::Popover, window_main: &Window, tree_view: >k::TreeView, column_color: Option<i32>, column_file_name: i32, column_path: i32, column_button_selection: u32, select_things: bool) {
|
||||
popover.popdown();
|
||||
|
||||
enum WildcardType {
|
||||
|
@ -227,11 +227,11 @@ fn popover_custom_select_unselect(popover: >k::Popover, _window_main: &Window,
|
|||
true => "Select Custom",
|
||||
};
|
||||
|
||||
// Accept Dialog
|
||||
// Dialog for select/unselect items
|
||||
{
|
||||
let confirmation_dialog_select_unselect = gtk::Dialog::builder().title(window_title).build();
|
||||
confirmation_dialog_select_unselect.add_button("Ok", ResponseType::Ok);
|
||||
confirmation_dialog_select_unselect.add_button("Close", ResponseType::Cancel);
|
||||
let dialog = gtk::Dialog::builder().title(window_title).transient_for(window_main).build();
|
||||
dialog.add_button("Ok", ResponseType::Ok);
|
||||
dialog.add_button("Close", ResponseType::Cancel);
|
||||
|
||||
let label: gtk::Label = gtk::Label::new(Some("Usage: */folder-nr*/* or name-version-*.txt"));
|
||||
|
||||
|
@ -264,13 +264,13 @@ fn popover_custom_select_unselect(popover: >k::Popover, _window_main: &Window,
|
|||
grid.attach(&entry_name, 1, 2, 1, 1);
|
||||
grid.attach(&entry_name_path, 1, 3, 1, 1);
|
||||
|
||||
let box_widget = get_dialog_box_child(&confirmation_dialog_select_unselect);
|
||||
let box_widget = get_dialog_box_child(&dialog);
|
||||
box_widget.add(&grid);
|
||||
|
||||
confirmation_dialog_select_unselect.show_all();
|
||||
dialog.show_all();
|
||||
|
||||
let tree_view = tree_view.clone();
|
||||
confirmation_dialog_select_unselect.connect_response(move |confirmation_dialog_select_unselect, response_type| {
|
||||
dialog.connect_response(move |confirmation_dialog_select_unselect, response_type| {
|
||||
let wildcard_type: WildcardType;
|
||||
let wildcard: String;
|
||||
|
||||
|
|
|
@ -79,17 +79,14 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
|
|||
fn add_chosen_directories(window_main: &Window, tree_view: &TreeView, excluded_items: bool) {
|
||||
let folders_to = if excluded_items { "Folders to exclude" } else { "Folders to include" };
|
||||
|
||||
let chooser = gtk::FileChooserDialog::builder().title(folders_to).action(gtk::FileChooserAction::SelectFolder).build();
|
||||
let chooser = gtk::FileChooserDialog::builder().title(folders_to).action(gtk::FileChooserAction::SelectFolder).transient_for(window_main).build();
|
||||
chooser.add_button("Ok", ResponseType::Ok);
|
||||
chooser.add_button("Close", ResponseType::Cancel);
|
||||
|
||||
chooser.set_select_multiple(true);
|
||||
chooser.show_all();
|
||||
|
||||
window_main.set_sensitive(false);
|
||||
|
||||
let tree_view = tree_view.clone();
|
||||
let window_main = window_main.clone();
|
||||
chooser.connect_response(move |chooser, response_type| {
|
||||
if response_type == gtk::ResponseType::Ok {
|
||||
let folder = chooser.filenames();
|
||||
|
@ -102,26 +99,22 @@ fn add_chosen_directories(window_main: &Window, tree_view: &TreeView, excluded_i
|
|||
}
|
||||
}
|
||||
chooser.close();
|
||||
window_main.set_sensitive(true);
|
||||
});
|
||||
}
|
||||
|
||||
fn add_manually_directories(window_main: &Window, tree_view: &TreeView) {
|
||||
let dialog_manual_add_directory = gtk::Dialog::builder().title("Add directory manually").build();
|
||||
dialog_manual_add_directory.add_button("Ok", ResponseType::Ok);
|
||||
dialog_manual_add_directory.add_button("Close", ResponseType::Cancel);
|
||||
|
||||
window_main.set_sensitive(false);
|
||||
let dialog = gtk::Dialog::builder().title("Add directory manually").transient_for(window_main).build();
|
||||
dialog.add_button("Ok", ResponseType::Ok);
|
||||
dialog.add_button("Close", ResponseType::Cancel);
|
||||
|
||||
let entry: gtk::Entry = gtk::Entry::new();
|
||||
|
||||
get_dialog_box_child(&dialog_manual_add_directory).add(&entry);
|
||||
get_dialog_box_child(&dialog).add(&entry);
|
||||
|
||||
dialog_manual_add_directory.show_all();
|
||||
dialog.show_all();
|
||||
|
||||
let tree_view = tree_view.clone();
|
||||
let window_main = window_main.clone();
|
||||
dialog_manual_add_directory.connect_response(move |dialog_manual_add_directory, response_type| {
|
||||
dialog.connect_response(move |dialog, response_type| {
|
||||
if response_type == gtk::ResponseType::Ok {
|
||||
let text = entry.text().to_string().trim().to_string();
|
||||
|
||||
|
@ -135,7 +128,6 @@ fn add_manually_directories(window_main: &Window, tree_view: &TreeView) {
|
|||
list_store.set(&list_store.append(), &values);
|
||||
}
|
||||
}
|
||||
dialog_manual_add_directory.close();
|
||||
window_main.set_sensitive(true);
|
||||
dialog.close();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ use czkawka_core::common_messages::Messages;
|
|||
use czkawka_core::duplicate::HashType;
|
||||
use directories_next::ProjectDirs;
|
||||
use gtk::prelude::*;
|
||||
use gtk::{LabelBuilder, ResponseType, WindowPosition};
|
||||
use gtk::{LabelBuilder, ResponseType, Window};
|
||||
use image::imageops::FilterType;
|
||||
use img_hash::HashAlg;
|
||||
use std::collections::BTreeMap;
|
||||
|
@ -19,7 +19,6 @@ pub fn connect_settings(gui_data: &GuiData) {
|
|||
let window_main = gui_data.window_main.clone();
|
||||
let window_settings = gui_data.settings.window_settings.clone();
|
||||
button_settings.connect_clicked(move |_| {
|
||||
window_main.set_position(WindowPosition::Center);
|
||||
window_main.set_sensitive(false);
|
||||
window_settings.show();
|
||||
});
|
||||
|
@ -27,7 +26,7 @@ pub fn connect_settings(gui_data: &GuiData) {
|
|||
let window_main = gui_data.window_main.clone();
|
||||
let window_settings = gui_data.settings.window_settings.clone();
|
||||
|
||||
window_settings.connect_delete_event(move |window, _y| {
|
||||
window_settings.connect_delete_event(move |window, _| {
|
||||
window.hide();
|
||||
window_main.set_sensitive(true);
|
||||
gtk::Inhibit(true)
|
||||
|
@ -94,11 +93,9 @@ pub fn connect_settings(gui_data: &GuiData) {
|
|||
let entry_settings_cache_file_minimal_size = gui_data.settings.entry_settings_cache_file_minimal_size.clone();
|
||||
|
||||
button_settings_duplicates_clear_cache.connect_clicked(move |_| {
|
||||
let dialog = create_clear_cache_dialog("duplicates");
|
||||
let dialog = create_clear_cache_dialog("duplicates", &settings_window);
|
||||
dialog.show_all();
|
||||
settings_window.set_sensitive(false);
|
||||
|
||||
let settings_window = settings_window.clone();
|
||||
let text_view_errors = text_view_errors.clone();
|
||||
let entry_settings_cache_file_minimal_size = entry_settings_cache_file_minimal_size.clone();
|
||||
|
||||
|
@ -121,7 +118,6 @@ pub fn connect_settings(gui_data: &GuiData) {
|
|||
text_view_errors.buffer().unwrap().set_text(messages.create_messages_text().as_str());
|
||||
}
|
||||
dialog.close();
|
||||
settings_window.set_sensitive(true);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -131,11 +127,9 @@ pub fn connect_settings(gui_data: &GuiData) {
|
|||
let text_view_errors = gui_data.text_view_errors.clone();
|
||||
|
||||
button_settings_similar_images_clear_cache.connect_clicked(move |_| {
|
||||
let dialog = create_clear_cache_dialog("similar images");
|
||||
let dialog = create_clear_cache_dialog("similar images", &settings_window);
|
||||
dialog.show_all();
|
||||
settings_window.set_sensitive(false);
|
||||
|
||||
let settings_window = settings_window.clone();
|
||||
let text_view_errors = text_view_errors.clone();
|
||||
|
||||
dialog.connect_response(move |dialog, response_type| {
|
||||
|
@ -155,7 +149,6 @@ pub fn connect_settings(gui_data: &GuiData) {
|
|||
text_view_errors.buffer().unwrap().set_text(messages.create_messages_text().as_str());
|
||||
}
|
||||
dialog.close();
|
||||
settings_window.set_sensitive(true);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -165,11 +158,9 @@ pub fn connect_settings(gui_data: &GuiData) {
|
|||
let text_view_errors = gui_data.text_view_errors.clone();
|
||||
|
||||
button_settings_similar_videos_clear_cache.connect_clicked(move |_| {
|
||||
let dialog = create_clear_cache_dialog("similar videos");
|
||||
let dialog = create_clear_cache_dialog("similar videos", &settings_window);
|
||||
dialog.show_all();
|
||||
settings_window.set_sensitive(false);
|
||||
|
||||
let settings_window = settings_window.clone();
|
||||
let text_view_errors = text_view_errors.clone();
|
||||
|
||||
dialog.connect_response(move |dialog, response_type| {
|
||||
|
@ -183,15 +174,14 @@ pub fn connect_settings(gui_data: &GuiData) {
|
|||
text_view_errors.buffer().unwrap().set_text(messages.create_messages_text().as_str());
|
||||
}
|
||||
dialog.close();
|
||||
settings_window.set_sensitive(true);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn create_clear_cache_dialog(title_str: &str) -> gtk::Dialog {
|
||||
let dialog = gtk::Dialog::builder().title(format!("Clearing {} cache", title_str).as_str()).build();
|
||||
fn create_clear_cache_dialog(title_str: &str, window_settings: &Window) -> gtk::Dialog {
|
||||
let dialog = gtk::Dialog::builder().title(format!("Clearing {} cache", title_str).as_str()).transient_for(window_settings).build();
|
||||
dialog.add_button("OK", ResponseType::Ok);
|
||||
dialog.add_button("Cancel", ResponseType::Cancel);
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ pub fn connect_similar_image_size_change(gui_data: &GuiData) {
|
|||
{
|
||||
let radio_button_similar_hash_size_4 = gui_data.main_notebook.radio_button_similar_hash_size_4.clone();
|
||||
let scale_similarity_similar_images = gui_data.main_notebook.scale_similarity_similar_images.clone();
|
||||
radio_button_similar_hash_size_4.connect_clicked(move |_| {
|
||||
radio_button_similar_hash_size_4.connect_toggled(move |_| {
|
||||
scale_similarity_similar_images.set_range(0_f64, SIMILAR_VALUES[0][5] as f64);
|
||||
scale_similarity_similar_images.set_fill_level(SIMILAR_VALUES[0][5] as f64);
|
||||
});
|
||||
|
@ -17,7 +17,7 @@ pub fn connect_similar_image_size_change(gui_data: &GuiData) {
|
|||
{
|
||||
let radio_button_similar_hash_size_8 = gui_data.main_notebook.radio_button_similar_hash_size_8.clone();
|
||||
let scale_similarity_similar_images = gui_data.main_notebook.scale_similarity_similar_images.clone();
|
||||
radio_button_similar_hash_size_8.connect_clicked(move |_| {
|
||||
radio_button_similar_hash_size_8.connect_toggled(move |_| {
|
||||
scale_similarity_similar_images.set_range(0_f64, SIMILAR_VALUES[1][5] as f64);
|
||||
scale_similarity_similar_images.set_fill_level(SIMILAR_VALUES[1][5] as f64);
|
||||
});
|
||||
|
@ -25,7 +25,7 @@ pub fn connect_similar_image_size_change(gui_data: &GuiData) {
|
|||
{
|
||||
let radio_button_similar_hash_size_16 = gui_data.main_notebook.radio_button_similar_hash_size_16.clone();
|
||||
let scale_similarity_similar_images = gui_data.main_notebook.scale_similarity_similar_images.clone();
|
||||
radio_button_similar_hash_size_16.connect_clicked(move |_| {
|
||||
radio_button_similar_hash_size_16.connect_toggled(move |_| {
|
||||
scale_similarity_similar_images.set_range(0_f64, SIMILAR_VALUES[2][5] as f64);
|
||||
scale_similarity_similar_images.set_fill_level(SIMILAR_VALUES[2][5] as f64);
|
||||
});
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use gtk::prelude::*;
|
||||
use gtk::{Builder, WindowPosition};
|
||||
use gtk::{Builder, Window};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct GuiAbout {
|
||||
|
@ -11,12 +11,12 @@ pub struct GuiAbout {
|
|||
}
|
||||
|
||||
impl GuiAbout {
|
||||
pub fn create_from_builder() -> Self {
|
||||
pub fn create_from_builder(window_main: &Window) -> Self {
|
||||
let glade_src = include_str!("../ui/about_dialog.glade").to_string();
|
||||
let builder = Builder::from_string(glade_src.as_str());
|
||||
|
||||
let about_dialog: gtk::AboutDialog = builder.object("about_dialog").unwrap();
|
||||
about_dialog.set_position(WindowPosition::Center);
|
||||
about_dialog.set_transient_for(Some(window_main));
|
||||
|
||||
let button_repository: gtk::Button = builder.object("button_repository").unwrap();
|
||||
button_repository.set_tooltip_text(Some("Link to repository page with source code."));
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
use gtk::prelude::*;
|
||||
use gtk::Button;
|
||||
use gtk::Widget;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct GuiBottomButtons {
|
||||
pub buttons_search: gtk::Button,
|
||||
pub buttons_select: gtk::Button,
|
||||
pub buttons_select: gtk::MenuButton,
|
||||
pub buttons_delete: gtk::Button,
|
||||
pub buttons_save: gtk::Button,
|
||||
pub buttons_symlink: gtk::Button,
|
||||
|
@ -12,13 +12,13 @@ pub struct GuiBottomButtons {
|
|||
pub buttons_move: gtk::Button,
|
||||
pub buttons_show_errors: gtk::Button,
|
||||
pub buttons_names: [String; 7],
|
||||
pub buttons_array: [Button; 7],
|
||||
pub buttons_array: [Widget; 7],
|
||||
}
|
||||
|
||||
impl GuiBottomButtons {
|
||||
pub fn create_from_builder(builder: >k::Builder) -> Self {
|
||||
pub fn create_from_builder(builder: >k::Builder, popover_select: >k::Popover) -> Self {
|
||||
let buttons_search: gtk::Button = builder.object("buttons_search").unwrap();
|
||||
let buttons_select: gtk::Button = builder.object("buttons_select").unwrap();
|
||||
let buttons_select: gtk::MenuButton = builder.object("buttons_select").unwrap();
|
||||
let buttons_delete: gtk::Button = builder.object("buttons_delete").unwrap();
|
||||
let buttons_save: gtk::Button = builder.object("buttons_save").unwrap();
|
||||
let buttons_symlink: gtk::Button = builder.object("buttons_symlink").unwrap();
|
||||
|
@ -49,15 +49,18 @@ impl GuiBottomButtons {
|
|||
"hardlink".to_string(),
|
||||
"move".to_string(),
|
||||
];
|
||||
let buttons_array = [
|
||||
buttons_search.clone(),
|
||||
buttons_select.clone(),
|
||||
buttons_delete.clone(),
|
||||
buttons_save.clone(),
|
||||
buttons_symlink.clone(),
|
||||
buttons_hardlink.clone(),
|
||||
buttons_move.clone(),
|
||||
let buttons_array: [Widget; 7] = [
|
||||
buttons_search.clone().upcast::<Widget>(),
|
||||
buttons_select.clone().upcast::<Widget>(),
|
||||
buttons_delete.clone().upcast::<Widget>(),
|
||||
buttons_save.clone().upcast::<Widget>(),
|
||||
buttons_symlink.clone().upcast::<Widget>(),
|
||||
buttons_hardlink.clone().upcast::<Widget>(),
|
||||
buttons_move.clone().upcast::<Widget>(),
|
||||
];
|
||||
|
||||
buttons_select.set_popover(Some(popover_select));
|
||||
|
||||
Self {
|
||||
buttons_search,
|
||||
buttons_select,
|
||||
|
|
|
@ -4,7 +4,7 @@ use std::rc::Rc;
|
|||
|
||||
use crossbeam_channel::unbounded;
|
||||
use gtk::prelude::*;
|
||||
use gtk::{Builder, WindowPosition};
|
||||
use gtk::Builder;
|
||||
|
||||
use czkawka_core::big_file::BigFile;
|
||||
use czkawka_core::broken_files::BrokenFiles;
|
||||
|
@ -89,15 +89,14 @@ impl GuiData {
|
|||
let window_main: gtk::Window = builder.object("window_main").unwrap();
|
||||
window_main.show_all();
|
||||
window_main.set_title("Czkawka");
|
||||
window_main.set_position(WindowPosition::Center);
|
||||
window_main.set_application(Some(application));
|
||||
|
||||
let main_notebook = GuiMainNotebook::create_from_builder(&builder);
|
||||
let upper_notebook = GuiUpperNotebook::create_from_builder(&builder);
|
||||
let popovers = GuiPopovers::create_from_builder();
|
||||
let bottom_buttons = GuiBottomButtons::create_from_builder(&builder);
|
||||
let bottom_buttons = GuiBottomButtons::create_from_builder(&builder, &popovers.popover_select);
|
||||
let progress_window = GuiProgressDialog::create_from_builder(&window_main);
|
||||
let about = GuiAbout::create_from_builder();
|
||||
let about = GuiAbout::create_from_builder(&window_main);
|
||||
let header = GuiHeader::create_from_builder(&builder);
|
||||
let settings = GuiSettings::create_from_builder(&window_main);
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ pub struct GuiMainNotebook {
|
|||
pub tree_view_invalid_symlinks: gtk::TreeView,
|
||||
pub tree_view_broken_files: gtk::TreeView,
|
||||
|
||||
pub evk_tree_view_duplicate_finder: gtk::EventControllerKey, // TODO, in GTK4 this can be changed to e.g. add_widget - https://discourse.gnome.org/t/how-to-convert-code-to-use-eventcontrollerkey/8198/2
|
||||
pub evk_tree_view_duplicate_finder: gtk::EventControllerKey, // TODO, in GTK4 this can be changed to e.g. add_controller which is not 100% compatible with this - https://discourse.gnome.org/t/how-to-convert-code-to-use-eventcontrollerkey/8198/2
|
||||
pub evk_tree_view_empty_folder_finder: gtk::EventControllerKey,
|
||||
pub evk_tree_view_empty_files_finder: gtk::EventControllerKey,
|
||||
pub evk_tree_view_temporary_files_finder: gtk::EventControllerKey,
|
||||
|
@ -130,6 +130,28 @@ impl GuiMainNotebook {
|
|||
let evk_tree_view_invalid_symlinks: gtk::EventControllerKey = EventControllerKey::new(&tree_view_invalid_symlinks);
|
||||
let evk_tree_view_broken_files: gtk::EventControllerKey = EventControllerKey::new(&tree_view_broken_files);
|
||||
|
||||
// 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 entry_similar_images_minimal_size: gtk::Entry = builder.object("entry_similar_images_minimal_size").unwrap();
|
||||
let entry_similar_images_maximal_size: gtk::Entry = builder.object("entry_similar_images_maximal_size").unwrap();
|
||||
let entry_similar_videos_minimal_size: gtk::Entry = builder.object("entry_similar_videos_minimal_size").unwrap();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use gtk::prelude::*;
|
||||
use gtk::{Builder, Window};
|
||||
use gtk::{Builder, EventControllerKey, Window};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct GuiProgressDialog {
|
||||
|
@ -13,6 +13,7 @@ pub struct GuiProgressDialog {
|
|||
pub grid_progress_stages: gtk::Grid,
|
||||
|
||||
pub button_stop_in_dialog: gtk::Button,
|
||||
pub evk_button_stop_in_dialog: gtk::EventControllerKey,
|
||||
}
|
||||
|
||||
impl GuiProgressDialog {
|
||||
|
@ -22,7 +23,6 @@ impl GuiProgressDialog {
|
|||
|
||||
let window_progress: gtk::Window = builder.object("window_progress").unwrap();
|
||||
window_progress.set_transient_for(Some(window_main));
|
||||
window_progress.set_modal(true);
|
||||
|
||||
let progress_bar_current_stage: gtk::ProgressBar = builder.object("progress_bar_current_stage").unwrap();
|
||||
let progress_bar_all_stages: gtk::ProgressBar = builder.object("progress_bar_all_stages").unwrap();
|
||||
|
@ -32,6 +32,7 @@ impl GuiProgressDialog {
|
|||
let grid_progress_stages: gtk::Grid = builder.object("grid_progress_stages").unwrap();
|
||||
|
||||
let button_stop_in_dialog: gtk::Button = builder.object("button_stop_in_dialog").unwrap();
|
||||
let evk_button_stop_in_dialog = EventControllerKey::new(&button_stop_in_dialog);
|
||||
|
||||
Self {
|
||||
window_progress,
|
||||
|
@ -40,6 +41,7 @@ impl GuiProgressDialog {
|
|||
label_stage,
|
||||
grid_progress_stages,
|
||||
button_stop_in_dialog,
|
||||
evk_button_stop_in_dialog,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ use std::collections::HashMap;
|
|||
use std::path::{Path, PathBuf};
|
||||
|
||||
use gtk::prelude::*;
|
||||
use gtk::{ListStore, TextView};
|
||||
use gtk::{ListStore, TextView, Widget};
|
||||
|
||||
use czkawka_core::big_file::BigFile;
|
||||
use czkawka_core::broken_files::BrokenFiles;
|
||||
|
@ -396,7 +396,7 @@ pub fn add_text_to_text_view(text_view: &TextView, string_to_append: &str) {
|
|||
buffer.set_text(format!("{}\n{}", current_text, string_to_append).as_str());
|
||||
}
|
||||
|
||||
pub fn set_buttons(hashmap: &mut HashMap<String, bool>, buttons_array: &[gtk::Button], button_names: &[String]) {
|
||||
pub fn set_buttons(hashmap: &mut HashMap<String, bool>, buttons_array: &[gtk::Widget], button_names: &[String]) {
|
||||
for (index, button) in buttons_array.iter().enumerate() {
|
||||
if *hashmap.get_mut(button_names[index].as_str()).unwrap() {
|
||||
button.show();
|
||||
|
@ -406,7 +406,7 @@ pub fn set_buttons(hashmap: &mut HashMap<String, bool>, buttons_array: &[gtk::Bu
|
|||
}
|
||||
}
|
||||
|
||||
pub fn hide_all_buttons(buttons_array: &[gtk::Button]) {
|
||||
pub fn hide_all_buttons(buttons_array: &[Widget]) {
|
||||
for button in buttons_array {
|
||||
button.hide();
|
||||
}
|
||||
|
@ -449,8 +449,7 @@ pub fn get_notebook_enum_from_tree_view(tree_view: >k::TreeView) -> NotebookMa
|
|||
"tree_view_invalid_symlinks" => NotebookMainEnum::Symlinks,
|
||||
"tree_view_broken_files" => NotebookMainEnum::BrokenFiles,
|
||||
e => {
|
||||
eprintln!("{}", e);
|
||||
panic!()
|
||||
panic!("{}", e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -467,7 +467,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
|
|||
let window_progress = gui_data.progress_window.window_progress.clone();
|
||||
let stop_sender = gui_data.stop_sender.clone();
|
||||
|
||||
window_progress.connect_delete_event(move |_e, _y| {
|
||||
window_progress.connect_delete_event(move |_, _| {
|
||||
stop_sender.send(()).unwrap();
|
||||
gtk::Inhibit(true)
|
||||
});
|
||||
|
|
|
@ -2078,9 +2078,10 @@ Author: Rafał Mikrut
|
|||
<property name="can-focus">False</property>
|
||||
<property name="spacing">2</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="buttons_select">
|
||||
<object class="GtkMenuButton" id="buttons_select">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="focus-on-click">False</property>
|
||||
<property name="receives-default">True</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
|
@ -2162,7 +2163,7 @@ Author: Rafał Mikrut
|
|||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -2206,7 +2207,7 @@ Author: Rafał Mikrut
|
|||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -2250,7 +2251,7 @@ Author: Rafał Mikrut
|
|||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -2294,7 +2295,7 @@ Author: Rafał Mikrut
|
|||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
|
@ -2338,7 +2339,7 @@ Author: Rafał Mikrut
|
|||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">5</property>
|
||||
<property name="position">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
|
|
Loading…
Reference in a new issue