Add support for selecting and unselecting all records in duplicate finder
This commit is contained in:
parent
4bca6a133d
commit
f550b42fc2
|
@ -298,8 +298,7 @@ impl SaveResults for EmptyFolder {
|
||||||
|
|
||||||
if !self.empty_folder_list.is_empty() {
|
if !self.empty_folder_list.is_empty() {
|
||||||
file.write_all(b"-------------------------------------------------Empty folder list-------------------------------------------------\n").unwrap();
|
file.write_all(b"-------------------------------------------------Empty folder list-------------------------------------------------\n").unwrap();
|
||||||
file.write_all(("Found ".to_string() + self.information.number_of_empty_folders.to_string().as_str() + " empty folders\n").as_bytes())
|
file.write_all(("Found ".to_string() + self.information.number_of_empty_folders.to_string().as_str() + " empty folders\n").as_bytes()).unwrap();
|
||||||
.unwrap();
|
|
||||||
for name in self.empty_folder_list.keys() {
|
for name in self.empty_folder_list.keys() {
|
||||||
file.write_all((name.clone() + "\n").as_bytes()).unwrap();
|
file.write_all((name.clone() + "\n").as_bytes()).unwrap();
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,8 +8,6 @@ license = "MIT"
|
||||||
homepage = "https://github.com/qarmin/czkawka"
|
homepage = "https://github.com/qarmin/czkawka"
|
||||||
repository = "https://github.com/qarmin/czkawka"
|
repository = "https://github.com/qarmin/czkawka"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
czkawka_core = { path = "../czkawka_core" }
|
czkawka_core = { path = "../czkawka_core" }
|
||||||
gdk = "0.13.2"
|
gdk = "0.13.2"
|
||||||
|
@ -23,5 +21,5 @@ chrono = "0.4"
|
||||||
[dependencies.gtk]
|
[dependencies.gtk]
|
||||||
version = "0.9.2"
|
version = "0.9.2"
|
||||||
default-features = false # just in case
|
default-features = false # just in case
|
||||||
features = ["v3_18"]
|
features = ["v3_24"]
|
||||||
|
|
||||||
|
|
|
@ -1270,4 +1270,105 @@ Author: Rafał Mikrut
|
||||||
<placeholder/>
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkPopover" id="popover_select">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="buttons_popover_select_all">
|
||||||
|
<property name="label" translatable="yes">Select All</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="buttons_popover_unselect_all">
|
||||||
|
<property name="label" translatable="yes">Unselect All</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="buttons_popover_reverse">
|
||||||
|
<property name="label" translatable="yes">Reverse Selection</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">3</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="buttons_popover_select_all_except_oldest">
|
||||||
|
<property name="label" translatable="yes">Select all except oldest</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">4</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="buttons_popover_select_all_except_newest">
|
||||||
|
<property name="label" translatable="yes">Select all except newest</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">5</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="buttons_popover_select_one_oldest">
|
||||||
|
<property name="label" translatable="yes">Select one oldest</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">6</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="buttons_popover_select_one_newest">
|
||||||
|
<property name="label" translatable="yes">Select one newest</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">7</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
</interface>
|
</interface>
|
||||||
|
|
|
@ -6,6 +6,7 @@ use humansize::{file_size_opts as options, FileSize};
|
||||||
extern crate gtk;
|
extern crate gtk;
|
||||||
use crate::help_functions::*;
|
use crate::help_functions::*;
|
||||||
use chrono::NaiveDateTime;
|
use chrono::NaiveDateTime;
|
||||||
|
use czkawka_core::common_traits::SaveResults;
|
||||||
use czkawka_core::duplicate::CheckingMethod;
|
use czkawka_core::duplicate::CheckingMethod;
|
||||||
use czkawka_core::empty_folder::EmptyFolder;
|
use czkawka_core::empty_folder::EmptyFolder;
|
||||||
use duplicate::DuplicateFinder;
|
use duplicate::DuplicateFinder;
|
||||||
|
@ -16,7 +17,6 @@ use std::collections::HashMap;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::time::UNIX_EPOCH;
|
use std::time::UNIX_EPOCH;
|
||||||
use std::{env, fs, process};
|
use std::{env, fs, process};
|
||||||
use czkawka_core::common_traits::SaveResults;
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// Printing version
|
// Printing version
|
||||||
|
@ -89,15 +89,17 @@ fn main() {
|
||||||
let buttons_add_excluded_directory: gtk::Button = builder.get_object("buttons_add_excluded_directory").unwrap();
|
let buttons_add_excluded_directory: gtk::Button = builder.get_object("buttons_add_excluded_directory").unwrap();
|
||||||
let buttons_remove_excluded_directory: gtk::Button = builder.get_object("buttons_remove_excluded_directory").unwrap();
|
let buttons_remove_excluded_directory: gtk::Button = builder.get_object("buttons_remove_excluded_directory").unwrap();
|
||||||
|
|
||||||
// Not used buttons for now
|
// Buttons search popover buttons
|
||||||
buttons_stop.hide();
|
let buttons_popover_select_all: gtk::Button = builder.get_object("buttons_popover_select_all").unwrap();
|
||||||
buttons_resume.hide();
|
let buttons_popover_unselect_all: gtk::Button = builder.get_object("buttons_popover_unselect_all").unwrap();
|
||||||
buttons_pause.hide();
|
// let buttons_popover_reverse: gtk::Button = builder.get_object("buttons_popover_reverse").unwrap();
|
||||||
buttons_select.hide();
|
// let buttons_popover_select_all_except_oldest: gtk::Button = builder.get_object("buttons_popover_select_all_except_oldest").unwrap();
|
||||||
|
// let buttons_popover_select_all_except_newest: gtk::Button = builder.get_object("buttons_popover_select_all_except_newest").unwrap();
|
||||||
|
// let buttons_popover_select_one_oldest: gtk::Button = builder.get_object("buttons_popover_select_one_oldest").unwrap();
|
||||||
|
// let buttons_popover_select_one_newest: gtk::Button = builder.get_object("buttons_popover_select_one_newest").unwrap();
|
||||||
|
|
||||||
//// Popovers
|
//// Popovers
|
||||||
// let popover_select: gtk::Popover = builder.get_object("popover_select").unwrap();
|
let popover_select: gtk::Popover = builder.get_object("popover_select").unwrap();
|
||||||
// let popover_select2: gtk::PopoverMenu = builder.get_object("popover_select2").unwrap();
|
|
||||||
|
|
||||||
//// Check Buttons
|
//// Check Buttons
|
||||||
let check_button_recursive: gtk::CheckButton = builder.get_object("check_button_recursive").unwrap();
|
let check_button_recursive: gtk::CheckButton = builder.get_object("check_button_recursive").unwrap();
|
||||||
|
@ -139,6 +141,10 @@ fn main() {
|
||||||
buttons_search.show();
|
buttons_search.show();
|
||||||
buttons_save.hide();
|
buttons_save.hide();
|
||||||
buttons_delete.hide();
|
buttons_delete.hide();
|
||||||
|
buttons_stop.hide();
|
||||||
|
buttons_resume.hide();
|
||||||
|
buttons_pause.hide();
|
||||||
|
buttons_select.hide();
|
||||||
|
|
||||||
// Set Main ScrolledWindow Treeviews
|
// Set Main ScrolledWindow Treeviews
|
||||||
{
|
{
|
||||||
|
@ -538,9 +544,9 @@ fn main() {
|
||||||
}
|
}
|
||||||
// Delete button
|
// Delete button
|
||||||
{
|
{
|
||||||
|
let scrolled_window_duplicate_finder = scrolled_window_duplicate_finder.clone();
|
||||||
let notebook_chooser_tool_children_names = notebook_chooser_tool_children_names.clone();
|
let notebook_chooser_tool_children_names = notebook_chooser_tool_children_names.clone();
|
||||||
let notebook_chooser_tool = notebook_chooser_tool.clone();
|
let notebook_chooser_tool = notebook_chooser_tool.clone();
|
||||||
let text_view_errors = text_view_errors.clone();
|
|
||||||
buttons_delete.connect_clicked(move |_| match notebook_chooser_tool_children_names.get(notebook_chooser_tool.get_current_page().unwrap() as usize).unwrap().as_str() {
|
buttons_delete.connect_clicked(move |_| match notebook_chooser_tool_children_names.get(notebook_chooser_tool.get_current_page().unwrap() as usize).unwrap().as_str() {
|
||||||
"notebook_duplicate_finder_label" => {
|
"notebook_duplicate_finder_label" => {
|
||||||
let tree_view = scrolled_window_duplicate_finder.get_children().get(0).unwrap().clone().downcast::<gtk::TreeView>().unwrap();
|
let tree_view = scrolled_window_duplicate_finder.get_children().get(0).unwrap().clone().downcast::<gtk::TreeView>().unwrap();
|
||||||
|
@ -599,22 +605,13 @@ fn main() {
|
||||||
{
|
{
|
||||||
let notebook_chooser_tool_children_names = notebook_chooser_tool_children_names.clone();
|
let notebook_chooser_tool_children_names = notebook_chooser_tool_children_names.clone();
|
||||||
let notebook_chooser_tool = notebook_chooser_tool.clone();
|
let notebook_chooser_tool = notebook_chooser_tool.clone();
|
||||||
buttons_select.connect_clicked(move |_| match notebook_chooser_tool_children_names.get(notebook_chooser_tool.get_current_page().unwrap() as usize).unwrap().as_str() {
|
let buttons_select_clone = buttons_select.clone();
|
||||||
|
let popover_select = popover_select.clone();
|
||||||
|
buttons_select_clone.connect_clicked(move |_| match notebook_chooser_tool_children_names.get(notebook_chooser_tool.get_current_page().unwrap() as usize).unwrap().as_str() {
|
||||||
"notebook_duplicate_finder_label" => {
|
"notebook_duplicate_finder_label" => {
|
||||||
// let popover_select = gtk::PopoverMenu::new();
|
// Only popup popup
|
||||||
// // popover_select.popup();
|
popover_select.set_relative_to(Some(&buttons_select));
|
||||||
// popover_select.show_all();
|
popover_select.popup();
|
||||||
println!("Printed");
|
|
||||||
// let popover_menu = gtk::PopoverMenu::new();
|
|
||||||
// let button_all_except_newest = gtk::Button::with_label("All except newest");
|
|
||||||
// let button_all_except_oldest = gtk::Button::with_label("All except oldest");
|
|
||||||
// let button_only_newest = gtk::Button::with_label("Only newest");
|
|
||||||
// let button_only_oldest= gtk::Button::with_label("Only oldest");
|
|
||||||
// popover_menu.set_child_position(&button_all_except_newest,0);
|
|
||||||
// popover_menu.set_child_position(&button_all_except_oldest,1);
|
|
||||||
// popover_menu.set_child_position(&button_only_newest,2);
|
|
||||||
// popover_menu.set_child_position(&button_only_oldest,3);
|
|
||||||
// popover_menu.popup();
|
|
||||||
}
|
}
|
||||||
"scrolled_window_empty_folder_finder" => {
|
"scrolled_window_empty_folder_finder" => {
|
||||||
// Do nothing
|
// Do nothing
|
||||||
|
@ -637,9 +634,7 @@ fn main() {
|
||||||
{
|
{
|
||||||
buttons_save.hide();
|
buttons_save.hide();
|
||||||
*shared_buttons.borrow_mut().get_mut("duplicate").unwrap().get_mut("save").unwrap() = false;
|
*shared_buttons.borrow_mut().get_mut("duplicate").unwrap().get_mut("save").unwrap() = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
"scrolled_window_empty_folder_finder" => {
|
"scrolled_window_empty_folder_finder" => {
|
||||||
let file_name = "results_empty_folder.txt";
|
let file_name = "results_empty_folder.txt";
|
||||||
|
@ -652,13 +647,40 @@ fn main() {
|
||||||
{
|
{
|
||||||
buttons_save.hide();
|
buttons_save.hide();
|
||||||
*shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("save").unwrap() = false;
|
*shared_buttons.borrow_mut().get_mut("empty_folder").unwrap().get_mut("save").unwrap() = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
e => panic!("Not existent {}", e),
|
e => panic!("Not existent {}", e),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Popover Buttons
|
||||||
|
{
|
||||||
|
// Select all button
|
||||||
|
{
|
||||||
|
let scrolled_window_duplicate_finder = scrolled_window_duplicate_finder.clone();
|
||||||
|
let popover_select = popover_select.clone();
|
||||||
|
buttons_popover_select_all.connect_clicked(move |_| {
|
||||||
|
let tree_view = scrolled_window_duplicate_finder.get_children().get(0).unwrap().clone().downcast::<gtk::TreeView>().unwrap();
|
||||||
|
let selection = tree_view.get_selection();
|
||||||
|
|
||||||
|
selection.select_all();
|
||||||
|
popover_select.popdown();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unselect all button
|
||||||
|
{
|
||||||
|
// let scrolled_window_duplicate_finder = scrolled_window_duplicate_finder.clone();
|
||||||
|
// let popover_select = popover_select.clone();
|
||||||
|
buttons_popover_unselect_all.connect_clicked(move |_| {
|
||||||
|
let tree_view = scrolled_window_duplicate_finder.get_children().get(0).unwrap().clone().downcast::<gtk::TreeView>().unwrap();
|
||||||
|
let selection = tree_view.get_selection();
|
||||||
|
|
||||||
|
selection.unselect_all();
|
||||||
|
popover_select.popdown();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
// Upper Notepad
|
// Upper Notepad
|
||||||
{
|
{
|
||||||
// Add included directory
|
// Add included directory
|
||||||
|
|
Loading…
Reference in a new issue