Use GtkScale instead radio buttons for similarity (#397)
* Use GtkScale instead radio buttons for similarity * Fixes
This commit is contained in:
parent
a623f2be00
commit
0e9b8a1651
74
Cargo.lock
generated
74
Cargo.lock
generated
|
@ -156,13 +156,9 @@ checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
|
|||
|
||||
[[package]]
|
||||
name = "bk-tree"
|
||||
version = "0.4.0"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6121f6e107e94d717b5ca2631d56e7c2ed1542a21b2eb87b4bda1d6c1420ef3f"
|
||||
dependencies = [
|
||||
"fnv",
|
||||
"triple_accel",
|
||||
]
|
||||
checksum = "5488039ea2c6de8668351415e39a0218a8955bffadcff0cf01d1293a20854584"
|
||||
|
||||
[[package]]
|
||||
name = "blake3"
|
||||
|
@ -187,9 +183,9 @@ checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631"
|
|||
|
||||
[[package]]
|
||||
name = "bytemuck"
|
||||
version = "1.7.0"
|
||||
version = "1.7.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9966d2ab714d0f785dbac0a0396251a35280aeb42413281617d0209ab4898435"
|
||||
checksum = "72957246c41db82b8ef88a5486143830adeb8227ef9837740bdec67724cf2c5b"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
|
@ -274,9 +270,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "cfg-expr"
|
||||
version = "0.7.4"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "30aa9e2ffbb838c6b451db14f3cd8e63ed622bf859f9956bc93845a10fafc26a"
|
||||
checksum = "70a1d12766bbdd5d44caab5df04a9bffec9cd855a1b44b15de5665d70c085f94"
|
||||
dependencies = [
|
||||
"smallvec",
|
||||
]
|
||||
|
@ -645,9 +641,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
|||
|
||||
[[package]]
|
||||
name = "futures"
|
||||
version = "0.3.15"
|
||||
version = "0.3.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27"
|
||||
checksum = "1adc00f486adfc9ce99f77d717836f0c5aa84965eb0b4f051f4e83f7cab53f8b"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
|
@ -660,9 +656,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "futures-channel"
|
||||
version = "0.3.15"
|
||||
version = "0.3.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2"
|
||||
checksum = "74ed2411805f6e4e3d9bc904c95d5d423b89b3b25dc0250aa74729de20629ff9"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
|
@ -670,15 +666,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "futures-core"
|
||||
version = "0.3.15"
|
||||
version = "0.3.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1"
|
||||
checksum = "af51b1b4a7fdff033703db39de8802c673eb91855f2e0d47dcf3bf2c0ef01f99"
|
||||
|
||||
[[package]]
|
||||
name = "futures-executor"
|
||||
version = "0.3.15"
|
||||
version = "0.3.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79"
|
||||
checksum = "4d0d535a57b87e1ae31437b892713aee90cd2d7b0ee48727cd11fc72ef54761c"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-task",
|
||||
|
@ -687,15 +683,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "futures-io"
|
||||
version = "0.3.15"
|
||||
version = "0.3.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1"
|
||||
checksum = "0b0e06c393068f3a6ef246c75cdca793d6a46347e75286933e5e75fd2fd11582"
|
||||
|
||||
[[package]]
|
||||
name = "futures-macro"
|
||||
version = "0.3.15"
|
||||
version = "0.3.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121"
|
||||
checksum = "c54913bae956fb8df7f4dc6fc90362aa72e69148e3f39041fbe8742d21e0ac57"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"proc-macro-hack",
|
||||
|
@ -706,21 +702,21 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "futures-sink"
|
||||
version = "0.3.15"
|
||||
version = "0.3.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282"
|
||||
checksum = "c0f30aaa67363d119812743aa5f33c201a7a66329f97d1a887022971feea4b53"
|
||||
|
||||
[[package]]
|
||||
name = "futures-task"
|
||||
version = "0.3.15"
|
||||
version = "0.3.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae"
|
||||
checksum = "bbe54a98670017f3be909561f6ad13e810d9a51f3f061b902062ca3da80799f2"
|
||||
|
||||
[[package]]
|
||||
name = "futures-util"
|
||||
version = "0.3.15"
|
||||
version = "0.3.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967"
|
||||
checksum = "67eb846bfd58e44a8481a00049e82c43e0ccb5d61f8dc071057cb19249dd4d78"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"futures-channel",
|
||||
|
@ -1649,9 +1645,9 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
|
|||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.27"
|
||||
version = "1.0.28"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038"
|
||||
checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612"
|
||||
dependencies = [
|
||||
"unicode-xid",
|
||||
]
|
||||
|
@ -1985,9 +1981,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
|
|||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.73"
|
||||
version = "1.0.74"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7"
|
||||
checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -1996,9 +1992,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "system-deps"
|
||||
version = "3.1.2"
|
||||
version = "3.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7ab7dbd121ce66af2176147a48c7e01aaf1f001837a18a7cf4317858606bbdf8"
|
||||
checksum = "480c269f870722b3b08d2f13053ce0c2ab722839f472863c3e2d61ff3a1c2fa6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"cfg-expr",
|
||||
|
@ -2079,9 +2075,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "tinyvec"
|
||||
version = "1.3.0"
|
||||
version = "1.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ac2e1d4bd0f75279cfd5a076e0d578bbf02c22b7c39e766c437dd49b3ec43e0"
|
||||
checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338"
|
||||
dependencies = [
|
||||
"tinyvec_macros",
|
||||
]
|
||||
|
@ -2126,12 +2122,6 @@ dependencies = [
|
|||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "triple_accel"
|
||||
version = "0.3.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "622b09ce2fe2df4618636fb92176d205662f59803f39e70d1c333393082de96c"
|
||||
|
||||
[[package]]
|
||||
name = "typenum"
|
||||
version = "1.13.0"
|
||||
|
|
|
@ -286,14 +286,15 @@ fn parse_delete_method(src: &str) -> Result<DeleteMethod, &'static str> {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO For now it looks different
|
||||
fn parse_similar_images_similarity(src: &str) -> Result<Similarity, &'static str> {
|
||||
match src.to_ascii_lowercase().replace('_', "").as_str() {
|
||||
"minimal" => Ok(Similarity::Minimal),
|
||||
"verysmall" => Ok(Similarity::VerySmall),
|
||||
"small" => Ok(Similarity::Small),
|
||||
"medium" => Ok(Similarity::Medium),
|
||||
"high" => Ok(Similarity::High),
|
||||
"veryhigh" => Ok(Similarity::VeryHigh),
|
||||
"minimal" => Ok(Similarity::Similar(5)),
|
||||
"verysmall" => Ok(Similarity::Similar(4)),
|
||||
"small" => Ok(Similarity::Similar(3)),
|
||||
"medium" => Ok(Similarity::Similar(2)),
|
||||
"high" => Ok(Similarity::Similar(1)),
|
||||
"veryhigh" => Ok(Similarity::Similar(0)),
|
||||
_ => Err("Couldn't parse the delete method (allowed: verysmall, small, medium, high, veryhigh)"),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ directories-next = "2.0.0"
|
|||
|
||||
# Needed by similar images
|
||||
img_hash = "3.2.0"
|
||||
bk-tree = "0.4.0"
|
||||
bk-tree = "0.3.0" # Do not update. Updating broke of searching for similar hashes
|
||||
image = "0.23.14"
|
||||
hamming = "0.1.3"
|
||||
|
||||
|
|
|
@ -38,12 +38,7 @@ pub struct ProgressData {
|
|||
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Debug)]
|
||||
pub enum Similarity {
|
||||
None,
|
||||
Minimal,
|
||||
VerySmall,
|
||||
Small,
|
||||
Medium,
|
||||
High,
|
||||
VeryHigh,
|
||||
Similar(u64),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
|
@ -60,14 +55,14 @@ pub struct FileEntry {
|
|||
struct Hamming;
|
||||
|
||||
impl bk_tree::Metric<Node> for Hamming {
|
||||
fn distance(&self, a: &Node, b: &Node) -> u32 {
|
||||
hamming::distance_fast(a, b).unwrap() as u32
|
||||
fn distance(&self, a: &Node, b: &Node) -> u64 {
|
||||
hamming::distance_fast(a, b).unwrap() as u64
|
||||
}
|
||||
|
||||
// TODO Probably needs to be implemented
|
||||
fn threshold_distance(&self, _a: &Node, _b: &Node, _threshold: u32) -> Option<u32> {
|
||||
None
|
||||
}
|
||||
// // TODO Probably needs to be implemented
|
||||
// fn threshold_distance(&self, _a: &Node, _b: &Node, _threshold: u32) -> Option<u32> {
|
||||
// None
|
||||
// }
|
||||
}
|
||||
|
||||
/// Struct to store most basics info about all folder
|
||||
|
@ -115,7 +110,7 @@ impl SimilarImages {
|
|||
minimal_file_size: 1024 * 16, // 16 KB should be enough to exclude too small images from search
|
||||
image_hashes: Default::default(),
|
||||
stopped_search: false,
|
||||
similarity: Similarity::High,
|
||||
similarity: Similarity::Similar(1),
|
||||
images_to_check: Default::default(),
|
||||
use_cache: true,
|
||||
}
|
||||
|
@ -416,6 +411,10 @@ impl SimilarImages {
|
|||
let hash = hasher.hash_image(&image);
|
||||
let mut buf = [0u8; 8];
|
||||
buf.copy_from_slice(&hash.as_bytes());
|
||||
if buf.iter().all(|e| *e == 0) {
|
||||
// A little broken image
|
||||
return Some(None);
|
||||
}
|
||||
file_entry.hash = buf;
|
||||
|
||||
Some(Some((file_entry, buf)))
|
||||
|
@ -455,14 +454,9 @@ impl SimilarImages {
|
|||
Common::print_time(hash_map_modification, SystemTime::now(), "sort_images - saving data to files".to_string());
|
||||
let hash_map_modification = SystemTime::now();
|
||||
|
||||
let similarity: u32 = match self.similarity {
|
||||
Similarity::VeryHigh => 0,
|
||||
Similarity::High => 1,
|
||||
Similarity::Medium => 2,
|
||||
Similarity::Small => 3,
|
||||
Similarity::VerySmall => 4,
|
||||
Similarity::Minimal => 5,
|
||||
_ => panic!("0-5 similarity levels are allowed, check if not added more."),
|
||||
let similarity: u64 = match self.similarity {
|
||||
Similarity::Similar(k) => k,
|
||||
_ => panic!(),
|
||||
};
|
||||
|
||||
// TODO
|
||||
|
@ -500,7 +494,7 @@ impl SimilarImages {
|
|||
dimensions: fe.dimensions.clone(),
|
||||
modified_date: fe.modified_date,
|
||||
hash: fe.hash,
|
||||
similarity: Similarity::VeryHigh,
|
||||
similarity: Similarity::Similar(0),
|
||||
})
|
||||
.collect();
|
||||
|
||||
|
@ -522,15 +516,7 @@ impl SimilarImages {
|
|||
dimensions: fe.dimensions.clone(),
|
||||
modified_date: fe.modified_date,
|
||||
hash: [0; 8],
|
||||
similarity: match similarity {
|
||||
0 => Similarity::VeryHigh,
|
||||
1 => Similarity::High,
|
||||
2 => Similarity::Medium,
|
||||
3 => Similarity::Small,
|
||||
4 => Similarity::VerySmall,
|
||||
5 => Similarity::Minimal,
|
||||
_ => panic!("0-5 similarity levels are allowed, check if not added more."),
|
||||
},
|
||||
similarity: Similarity::Similar(*similarity),
|
||||
})
|
||||
.collect::<Vec<_>>()),
|
||||
);
|
||||
|
@ -664,18 +650,6 @@ impl PrintResults for SimilarImages {
|
|||
}
|
||||
}
|
||||
|
||||
fn get_string_from_similarity(similarity: &Similarity) -> &str {
|
||||
match similarity {
|
||||
Similarity::Minimal => "Minimal",
|
||||
Similarity::VerySmall => "Very Small",
|
||||
Similarity::Small => "Small",
|
||||
Similarity::Medium => "Medium",
|
||||
Similarity::High => "High",
|
||||
Similarity::VeryHigh => "Very High",
|
||||
Similarity::None => panic!(),
|
||||
}
|
||||
}
|
||||
|
||||
fn save_hashes_to_file(hashmap: &BTreeMap<String, FileEntry>, text_messages: &mut Messages) {
|
||||
if let Some(proj_dirs) = ProjectDirs::from("pl", "Qarmin", "Czkawka") {
|
||||
// Lin: /home/username/.cache/czkawka
|
||||
|
@ -810,3 +784,27 @@ fn load_hashes_from_file(text_messages: &mut Messages) -> Option<BTreeMap<String
|
|||
text_messages.messages.push("Cannot find or open system config dir to save cache file".to_string());
|
||||
None
|
||||
}
|
||||
pub fn get_string_from_similarity(similarity: &Similarity) -> String {
|
||||
match similarity {
|
||||
Similarity::None => {
|
||||
panic!()
|
||||
}
|
||||
Similarity::Similar(k) => {
|
||||
if *k < 1 {
|
||||
format!("Very High {}", *k)
|
||||
} else if *k < 2 {
|
||||
format!("High {}", *k)
|
||||
} else if *k < 4 {
|
||||
format!("Medium {}", *k)
|
||||
} else if *k < 6 {
|
||||
format!("Small {}", *k)
|
||||
} else if *k < 9 {
|
||||
format!("Very Small {}", *k)
|
||||
} else if *k < 13 {
|
||||
format!("Minimal {}", *k)
|
||||
} else {
|
||||
panic!()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,12 +53,7 @@ pub fn connect_button_search(
|
|||
let radio_button_duplicates_size = gui_data.main_notebook.radio_button_duplicates_size.clone();
|
||||
let radio_button_duplicates_hashmb = gui_data.main_notebook.radio_button_duplicates_hashmb.clone();
|
||||
let radio_button_duplicates_hash = gui_data.main_notebook.radio_button_duplicates_hash.clone();
|
||||
let radio_button_similar_images_minimal = gui_data.main_notebook.radio_button_similar_images_minimal.clone();
|
||||
let radio_button_similar_images_very_small = gui_data.main_notebook.radio_button_similar_images_very_small.clone();
|
||||
let radio_button_similar_images_small = gui_data.main_notebook.radio_button_similar_images_small.clone();
|
||||
let radio_button_similar_images_medium = gui_data.main_notebook.radio_button_similar_images_medium.clone();
|
||||
let radio_button_similar_images_high = gui_data.main_notebook.radio_button_similar_images_high.clone();
|
||||
let radio_button_similar_images_very_high = gui_data.main_notebook.radio_button_similar_images_very_high.clone();
|
||||
let scale_similarity = gui_data.main_notebook.scale_similarity.clone();
|
||||
let entry_duplicate_minimal_size = gui_data.main_notebook.entry_duplicate_minimal_size.clone();
|
||||
let stop_receiver = gui_data.stop_receiver.clone();
|
||||
let entry_big_files_number = gui_data.main_notebook.entry_big_files_number.clone();
|
||||
|
@ -270,22 +265,7 @@ pub fn connect_button_search(
|
|||
|
||||
let minimal_file_size = entry_similar_images_minimal_size.text().as_str().parse::<u64>().unwrap_or(1024 * 16);
|
||||
|
||||
let similarity;
|
||||
if radio_button_similar_images_minimal.is_active() {
|
||||
similarity = similar_images::Similarity::Minimal;
|
||||
} else if radio_button_similar_images_very_small.is_active() {
|
||||
similarity = similar_images::Similarity::VerySmall;
|
||||
} else if radio_button_similar_images_small.is_active() {
|
||||
similarity = similar_images::Similarity::Small;
|
||||
} else if radio_button_similar_images_medium.is_active() {
|
||||
similarity = similar_images::Similarity::Medium;
|
||||
} else if radio_button_similar_images_high.is_active() {
|
||||
similarity = similar_images::Similarity::High;
|
||||
} else if radio_button_similar_images_very_high.is_active() {
|
||||
similarity = similar_images::Similarity::VeryHigh;
|
||||
} else {
|
||||
panic!("No radio button is pressed");
|
||||
}
|
||||
let similarity = similar_images::Similarity::Similar(scale_similarity.value() as u64);
|
||||
|
||||
let futures_sender_similar_images = futures_sender_similar_images.clone();
|
||||
// Find similar images
|
||||
|
|
|
@ -7,6 +7,7 @@ use crate::notebook_enums::*;
|
|||
use chrono::NaiveDateTime;
|
||||
use czkawka_core::duplicate::CheckingMethod;
|
||||
use czkawka_core::same_music::MusicSimilarity;
|
||||
use czkawka_core::similar_images;
|
||||
use glib::Receiver;
|
||||
use gtk::prelude::*;
|
||||
use std::path::PathBuf;
|
||||
|
@ -522,7 +523,7 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
|
|||
let values: [(u32, &dyn ToValue); 12] = [
|
||||
(0, &true),
|
||||
(1, &false),
|
||||
(2, &(get_text_from_similarity(&file_entry.similarity).to_string())),
|
||||
(2, &(similar_images::get_string_from_similarity(&file_entry.similarity).to_string())),
|
||||
(3, &file_entry.size.file_size(options::BINARY).unwrap()),
|
||||
(4, &file_entry.size),
|
||||
(5, &file_entry.dimensions),
|
||||
|
|
|
@ -46,12 +46,7 @@ pub struct GuiMainNotebook {
|
|||
pub radio_button_duplicates_hashmb: gtk::RadioButton,
|
||||
pub radio_button_duplicates_hash: gtk::RadioButton,
|
||||
|
||||
pub radio_button_similar_images_minimal: gtk::RadioButton,
|
||||
pub radio_button_similar_images_very_small: gtk::RadioButton,
|
||||
pub radio_button_similar_images_small: gtk::RadioButton,
|
||||
pub radio_button_similar_images_medium: gtk::RadioButton,
|
||||
pub radio_button_similar_images_high: gtk::RadioButton,
|
||||
pub radio_button_similar_images_very_high: gtk::RadioButton,
|
||||
pub scale_similarity: gtk::Scale,
|
||||
|
||||
pub radio_button_hash_type_blake3: gtk::RadioButton,
|
||||
pub radio_button_hash_type_crc32: gtk::RadioButton,
|
||||
|
@ -104,12 +99,7 @@ impl GuiMainNotebook {
|
|||
let radio_button_duplicates_hashmb: gtk::RadioButton = builder.object("radio_button_duplicates_hashmb").unwrap();
|
||||
let radio_button_duplicates_hash: gtk::RadioButton = builder.object("radio_button_duplicates_hash").unwrap();
|
||||
|
||||
let radio_button_similar_images_minimal: gtk::RadioButton = builder.object("radio_button_similar_images_minimal").unwrap();
|
||||
let radio_button_similar_images_very_small: gtk::RadioButton = builder.object("radio_button_similar_images_very_small").unwrap();
|
||||
let radio_button_similar_images_small: gtk::RadioButton = builder.object("radio_button_similar_images_small").unwrap();
|
||||
let radio_button_similar_images_medium: gtk::RadioButton = builder.object("radio_button_similar_images_medium").unwrap();
|
||||
let radio_button_similar_images_high: gtk::RadioButton = builder.object("radio_button_similar_images_high").unwrap();
|
||||
let radio_button_similar_images_very_high: gtk::RadioButton = builder.object("radio_button_similar_images_very_high").unwrap();
|
||||
let scale_similarity: gtk::Scale = builder.object("scale_similarity").unwrap();
|
||||
|
||||
let radio_button_hash_type_blake3: gtk::RadioButton = builder.object("radio_button_hash_type_blake3").unwrap();
|
||||
let radio_button_hash_type_crc32: gtk::RadioButton = builder.object("radio_button_hash_type_crc32").unwrap();
|
||||
|
@ -152,12 +142,7 @@ impl GuiMainNotebook {
|
|||
radio_button_duplicates_size,
|
||||
radio_button_duplicates_hashmb,
|
||||
radio_button_duplicates_hash,
|
||||
radio_button_similar_images_minimal,
|
||||
radio_button_similar_images_very_small,
|
||||
radio_button_similar_images_small,
|
||||
radio_button_similar_images_medium,
|
||||
radio_button_similar_images_high,
|
||||
radio_button_similar_images_very_high,
|
||||
scale_similarity,
|
||||
radio_button_hash_type_blake3,
|
||||
radio_button_hash_type_crc32,
|
||||
radio_button_hash_type_xxh3,
|
||||
|
|
|
@ -7,7 +7,7 @@ use czkawka_core::empty_folder::EmptyFolder;
|
|||
use czkawka_core::invalid_symlinks;
|
||||
use czkawka_core::invalid_symlinks::InvalidSymlinks;
|
||||
use czkawka_core::same_music::SameMusic;
|
||||
use czkawka_core::similar_images::{SimilarImages, Similarity};
|
||||
use czkawka_core::similar_images::SimilarImages;
|
||||
use czkawka_core::temporary::Temporary;
|
||||
use czkawka_core::zeroed::ZeroedFiles;
|
||||
use gtk::prelude::*;
|
||||
|
@ -258,28 +258,6 @@ pub fn hide_all_buttons(buttons_array: &[gtk::Button]) {
|
|||
}
|
||||
}
|
||||
|
||||
// pub fn hide_all_buttons_except(except_name: &str, buttons_array: &[gtk::Button], button_names: &[String]) {
|
||||
// for (index, button) in buttons_array.iter().enumerate() {
|
||||
// if except_name == button_names[index] {
|
||||
// button.show();
|
||||
// } else {
|
||||
// button.hide();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
pub fn get_text_from_similarity(similarity: &Similarity) -> &str {
|
||||
match similarity {
|
||||
Similarity::None => "Original",
|
||||
Similarity::Minimal => "Minimal",
|
||||
Similarity::VerySmall => "Very Small",
|
||||
Similarity::Small => "Small",
|
||||
Similarity::Medium => "Medium",
|
||||
Similarity::High => "High",
|
||||
Similarity::VeryHigh => "Very High",
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_text_from_invalid_symlink_cause(error: &invalid_symlinks::ErrorType) -> &str {
|
||||
match error {
|
||||
invalid_symlinks::ErrorType::InfiniteRecursion => "Infinite recursion",
|
||||
|
|
|
@ -48,6 +48,14 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
|
|||
let check_button_settings_show_preview_similar_images = gui_data.settings.check_button_settings_show_preview_similar_images.clone();
|
||||
let text_view_errors = gui_data.text_view_errors.clone();
|
||||
|
||||
let scale_similarity = gui_data.main_notebook.scale_similarity.clone();
|
||||
|
||||
// Set step increment
|
||||
{
|
||||
scale_similarity.set_range(0_f64, 12_f64);
|
||||
scale_similarity.adjustment().set_step_increment(1_f64);
|
||||
}
|
||||
|
||||
// Set Main Scrolled Window Treeviews
|
||||
{
|
||||
// Duplicate Files
|
||||
|
|
|
@ -32,6 +32,11 @@ Author: Rafał Mikrut
|
|||
<!-- interface-name Czkawka -->
|
||||
<!-- interface-description Czkawka is simple and fast app to find duplicates, empty folders, similar images etc. -->
|
||||
<!-- interface-authors Rafa\305\202 Mikrut -->
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="upper">100</property>
|
||||
<property name="step-increment">1</property>
|
||||
<property name="page-increment">10</property>
|
||||
</object>
|
||||
<object class="GtkWindow" id="window_main">
|
||||
<property name="can-focus">False</property>
|
||||
<property name="default-width">1100</property>
|
||||
|
@ -1075,13 +1080,10 @@ Author: Rafał Mikrut
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radio_button_similar_images_minimal">
|
||||
<property name="label" translatable="yes">Minimal</property>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">False</property>
|
||||
<property name="draw-indicator">True</property>
|
||||
<property name="group">radio_button_similar_images_very_high</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes"> Very High </property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -1090,28 +1092,25 @@ Author: Rafał Mikrut
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radio_button_similar_images_very_small">
|
||||
<property name="label" translatable="yes">Very Small</property>
|
||||
<object class="GtkScale" id="scale_similarity">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">False</property>
|
||||
<property name="draw-indicator">True</property>
|
||||
<property name="group">radio_button_similar_images_very_high</property>
|
||||
<property name="fill-level">100</property>
|
||||
<property name="round-digits">1</property>
|
||||
<property name="digits">0</property>
|
||||
<property name="value-pos">right</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radio_button_similar_images_small">
|
||||
<property name="label" translatable="yes">Small</property>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">False</property>
|
||||
<property name="draw-indicator">True</property>
|
||||
<property name="group">radio_button_similar_images_very_high</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes"> Minimal </property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -1119,51 +1118,6 @@ Author: Rafał Mikrut
|
|||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radio_button_similar_images_medium">
|
||||
<property name="label" translatable="yes">Medium</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">False</property>
|
||||
<property name="draw-indicator">True</property>
|
||||
<property name="group">radio_button_similar_images_very_high</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radio_button_similar_images_high">
|
||||
<property name="label" translatable="yes">High</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">False</property>
|
||||
<property name="draw-indicator">True</property>
|
||||
<property name="group">radio_button_similar_images_very_high</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radio_button_similar_images_very_high">
|
||||
<property name="label" translatable="yes">Very High</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">False</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw-indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
|
Loading…
Reference in a new issue