1
0
Fork 0
mirror of synced 2024-05-09 15:02:24 +12:00

Update to gtk-rs 0.14 (#383)

* Update to Gtk-rs 0.14
This commit is contained in:
Rafał Mikrut 2021-06-25 18:07:13 +02:00 committed by GitHub
parent 6510173bb6
commit b5f8d6b028
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
30 changed files with 866 additions and 808 deletions

View file

@ -175,9 +175,9 @@ jobs:
rm -rf czkawka_gui rm -rf czkawka_gui
cp target/release/czkawka_gui . cp target/release/czkawka_gui .
strip czkawka_gui strip czkawka_gui
wget https://github.com/AppImage/pkg2appimage/releases/download/continuous/pkg2appimage-1806-x86_64.AppImage wget https://github.com/AppImage/pkg2appimage/releases/download/continuous/pkg2appimage-1807-x86_64.AppImage
chmod +x pkg2appimage-1806-x86_64.AppImage chmod +x pkg2appimage-1807-x86_64.AppImage
./pkg2appimage-1806-x86_64.AppImage misc/czkawka-appimage-recipe.yml ./pkg2appimage-1807-x86_64.AppImage misc/czkawka-appimage-recipe.yml
mv out/Czkawka*.AppImage out/czkawka_gui-minimal.AppImage mv out/Czkawka*.AppImage out/czkawka_gui-minimal.AppImage
- name: Minimal Appimage Upload - name: Minimal Appimage Upload

288
Cargo.lock generated
View file

@ -65,23 +65,21 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
[[package]] [[package]]
name = "atk" name = "atk"
version = "0.9.0" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812b4911e210bd51b24596244523c856ca749e6223c50a7fbbba3f89ee37c426" checksum = "a83b21d2aa75e464db56225e1bda2dd5993311ba1095acaa8fa03d1ae67026ba"
dependencies = [ dependencies = [
"atk-sys", "atk-sys",
"bitflags", "bitflags",
"glib", "glib",
"glib-sys",
"gobject-sys",
"libc", "libc",
] ]
[[package]] [[package]]
name = "atk-sys" name = "atk-sys"
version = "0.10.0" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f530e4af131d94cc4fa15c5c9d0348f0ef28bac64ba660b6b2a1cf2605dedfce" checksum = "badcf670157c84bb8b1cf6b5f70b650fed78da2033c9eed84c4e49b11cbe83ea"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
@ -164,9 +162,9 @@ checksum = "5488039ea2c6de8668351415e39a0218a8955bffadcff0cf01d1293a20854584"
[[package]] [[package]]
name = "blake3" name = "blake3"
version = "0.3.7" version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e9ff35b701f3914bdb8fad3368d822c766ef2858b2583198e41639b936f09d3f" checksum = "b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3"
dependencies = [ dependencies = [
"arrayref", "arrayref",
"arrayvec", "arrayvec",
@ -203,9 +201,9 @@ checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"
[[package]] [[package]]
name = "bzip2" name = "bzip2"
version = "0.3.3" version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b" checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0"
dependencies = [ dependencies = [
"bzip2-sys", "bzip2-sys",
"libc", "libc",
@ -213,9 +211,9 @@ dependencies = [
[[package]] [[package]]
name = "bzip2-sys" name = "bzip2-sys"
version = "0.1.10+1.0.8" version = "0.1.11+1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17fa3d1ac1ca21c5c4e36a97f3c3eb25084576f6fc47bf0139c1123434216c6c" checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
dependencies = [ dependencies = [
"cc", "cc",
"libc", "libc",
@ -224,24 +222,22 @@ dependencies = [
[[package]] [[package]]
name = "cairo-rs" name = "cairo-rs"
version = "0.9.1" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5c0f2e047e8ca53d0ff249c54ae047931d7a6ebe05d00af73e0ffeb6e34bdb8" checksum = "8d32eecb1e806433cf68063c4548bbdc15cc56d35db19d685ab60909c4c85206"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cairo-sys-rs", "cairo-sys-rs",
"glib", "glib",
"glib-sys",
"gobject-sys",
"libc", "libc",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "cairo-sys-rs" name = "cairo-sys-rs"
version = "0.10.0" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ed2639b9ad5f1d6efa76de95558e11339e7318426d84ac4890b86c03e828ca7" checksum = "d7c9c3928781e8a017ece15eace05230f04b647457d170d2d9641c94a444ff80"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@ -272,6 +268,15 @@ dependencies = [
"nom", "nom",
] ]
[[package]]
name = "cfg-expr"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30aa9e2ffbb838c6b451db14f3cd8e63ed622bf859f9956bc93845a10fafc26a"
dependencies = [
"smallvec",
]
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
version = "0.1.10" version = "0.1.10"
@ -607,6 +612,16 @@ version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
[[package]]
name = "field-offset"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92"
dependencies = [
"memoffset",
"rustc_version",
]
[[package]] [[package]]
name = "flate2" name = "flate2"
version = "1.0.20" version = "1.0.20"
@ -627,9 +642,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]] [[package]]
name = "futures" name = "futures"
version = "0.3.14" version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9d5813545e459ad3ca1bff9915e9ad7f1a47dc6a91b627ce321d5863b7dd253" checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27"
dependencies = [ dependencies = [
"futures-channel", "futures-channel",
"futures-core", "futures-core",
@ -642,9 +657,9 @@ dependencies = [
[[package]] [[package]]
name = "futures-channel" name = "futures-channel"
version = "0.3.14" version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25" checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2"
dependencies = [ dependencies = [
"futures-core", "futures-core",
"futures-sink", "futures-sink",
@ -652,15 +667,15 @@ dependencies = [
[[package]] [[package]]
name = "futures-core" name = "futures-core"
version = "0.3.14" version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815" checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1"
[[package]] [[package]]
name = "futures-executor" name = "futures-executor"
version = "0.3.14" version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10f6cb7042eda00f0049b1d2080aa4b93442997ee507eb3828e8bd7577f94c9d" checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79"
dependencies = [ dependencies = [
"futures-core", "futures-core",
"futures-task", "futures-task",
@ -669,16 +684,17 @@ dependencies = [
[[package]] [[package]]
name = "futures-io" name = "futures-io"
version = "0.3.14" version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04" checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1"
[[package]] [[package]]
name = "futures-macro" name = "futures-macro"
version = "0.3.14" version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b" checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121"
dependencies = [ dependencies = [
"autocfg",
"proc-macro-hack", "proc-macro-hack",
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -687,22 +703,23 @@ dependencies = [
[[package]] [[package]]
name = "futures-sink" name = "futures-sink"
version = "0.3.14" version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23" checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282"
[[package]] [[package]]
name = "futures-task" name = "futures-task"
version = "0.3.14" version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc" checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae"
[[package]] [[package]]
name = "futures-util" name = "futures-util"
version = "0.3.14" version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025" checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967"
dependencies = [ dependencies = [
"autocfg",
"futures-channel", "futures-channel",
"futures-core", "futures-core",
"futures-io", "futures-io",
@ -719,44 +736,37 @@ dependencies = [
[[package]] [[package]]
name = "gdk" name = "gdk"
version = "0.13.2" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db00839b2a68a7a10af3fa28dfb3febaba3a20c3a9ac2425a33b7df1f84a6b7d" checksum = "679e22651cd15888e7acd01767950edca2ee9fcd6421fbf5b3c3b420d4e88bb0"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cairo-rs", "cairo-rs",
"cairo-sys-rs",
"gdk-pixbuf", "gdk-pixbuf",
"gdk-sys", "gdk-sys",
"gio", "gio",
"gio-sys",
"glib", "glib",
"glib-sys",
"gobject-sys",
"libc", "libc",
"pango", "pango",
] ]
[[package]] [[package]]
name = "gdk-pixbuf" name = "gdk-pixbuf"
version = "0.9.0" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f6dae3cb99dd49b758b88f0132f8d401108e63ae8edd45f432d42cdff99998a" checksum = "534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f"
dependencies = [ dependencies = [
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
"gio", "gio",
"gio-sys",
"glib", "glib",
"glib-sys",
"gobject-sys",
"libc", "libc",
] ]
[[package]] [[package]]
name = "gdk-pixbuf-sys" name = "gdk-pixbuf-sys"
version = "0.10.0" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3bfe468a7f43e97b8d193a762b6c5cf67a7d36cacbc0b9291dbcae24bfea1e8f" checksum = "f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590"
dependencies = [ dependencies = [
"gio-sys", "gio-sys",
"glib-sys", "glib-sys",
@ -767,9 +777,9 @@ dependencies = [
[[package]] [[package]]
name = "gdk-sys" name = "gdk-sys"
version = "0.10.0" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a9653cfc500fd268015b1ac055ddbc3df7a5c9ea3f4ccef147b3957bd140d69" checksum = "0e091b3d3d6696949ac3b3fb3c62090e5bfd7bd6850bef5c3c5ea701de1b1f1e"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
@ -815,20 +825,16 @@ dependencies = [
[[package]] [[package]]
name = "gio" name = "gio"
version = "0.9.1" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fb60242bfff700772dae5d9e3a1f7aa2e4ebccf18b89662a16acb2822568561" checksum = "86c6823b39d46d22cac2466de261f28d7f049ebc18f7b35296a42c7ed8a88325"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"futures",
"futures-channel", "futures-channel",
"futures-core", "futures-core",
"futures-io", "futures-io",
"futures-util",
"gio-sys", "gio-sys",
"glib", "glib",
"glib-sys",
"gobject-sys",
"libc", "libc",
"once_cell", "once_cell",
"thiserror", "thiserror",
@ -836,9 +842,9 @@ dependencies = [
[[package]] [[package]]
name = "gio-sys" name = "gio-sys"
version = "0.10.1" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e24fb752f8f5d2cf6bbc2c606fd2bc989c81c5e2fe321ab974d54f8b6344eac" checksum = "c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
@ -849,33 +855,32 @@ dependencies = [
[[package]] [[package]]
name = "glib" name = "glib"
version = "0.10.3" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c685013b7515e668f1b57a165b009d4d28cb139a8a989bbd699c10dad29d0c5" checksum = "f0028bbfd270d0778540294abca11141d59cb474da4c1f61ca1e11f579c49247"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"futures-channel", "futures-channel",
"futures-core", "futures-core",
"futures-executor", "futures-executor",
"futures-task", "futures-task",
"futures-util",
"glib-macros", "glib-macros",
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
"libc", "libc",
"once_cell", "once_cell",
"smallvec",
] ]
[[package]] [[package]]
name = "glib-macros" name = "glib-macros"
version = "0.10.1" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41486a26d1366a8032b160b59065a59fb528530a46a49f627e7048fb8c064039" checksum = "9eb7bdf41972a6f6dab5d72c23d22789f400059a43ba0d72b4bb2f8664d946a9"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"heck", "heck",
"itertools", "proc-macro-crate 1.0.0",
"proc-macro-crate",
"proc-macro-error", "proc-macro-error",
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -884,9 +889,9 @@ dependencies = [
[[package]] [[package]]
name = "glib-sys" name = "glib-sys"
version = "0.10.1" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7e9b997a66e9a23d073f2b1abb4dbfc3925e0b8952f67efd8d9b6e168e4cdc1" checksum = "1c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae"
dependencies = [ dependencies = [
"libc", "libc",
"system-deps", "system-deps",
@ -900,9 +905,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
[[package]] [[package]]
name = "gobject-sys" name = "gobject-sys"
version = "0.10.0" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "952133b60c318a62bf82ee75b93acc7e84028a093e06b9e27981c2b6fe68218c" checksum = "aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@ -911,37 +916,32 @@ dependencies = [
[[package]] [[package]]
name = "gtk" name = "gtk"
version = "0.9.2" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f022f2054072b3af07666341984562c8e626a79daa8be27b955d12d06a5ad6a" checksum = "10ae864e5eab8bc8b6b8544ed259eb02dd61b25323b20e777a77aa289c05fd0c"
dependencies = [ dependencies = [
"atk", "atk",
"bitflags", "bitflags",
"cairo-rs", "cairo-rs",
"cairo-sys-rs", "field-offset",
"cc", "futures-channel",
"gdk", "gdk",
"gdk-pixbuf", "gdk-pixbuf",
"gdk-pixbuf-sys",
"gdk-sys",
"gio", "gio",
"gio-sys",
"glib", "glib",
"glib-sys",
"gobject-sys",
"gtk-sys", "gtk-sys",
"gtk3-macros",
"libc", "libc",
"once_cell", "once_cell",
"pango", "pango",
"pango-sys",
"pkg-config", "pkg-config",
] ]
[[package]] [[package]]
name = "gtk-sys" name = "gtk-sys"
version = "0.10.0" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89acda6f084863307d948ba64a4b1ef674e8527dddab147ee4cdcc194c880457" checksum = "8c14c8d3da0545785a7c5a120345b3abb534010fb8ae0f2ef3f47c027fba303e"
dependencies = [ dependencies = [
"atk-sys", "atk-sys",
"cairo-sys-rs", "cairo-sys-rs",
@ -955,6 +955,21 @@ dependencies = [
"system-deps", "system-deps",
] ]
[[package]]
name = "gtk3-macros"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21de1da96dc117443fb03c2e270b2d34b7de98d0a79a19bbb689476173745b79"
dependencies = [
"anyhow",
"heck",
"proc-macro-crate 1.0.0",
"proc-macro-error",
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "hamming" name = "hamming"
version = "0.1.3" version = "0.1.3"
@ -993,9 +1008,9 @@ checksum = "8a164bb2ceaeff4f42542bdb847c41517c78a60f5649671b2a07312b6e117549"
[[package]] [[package]]
name = "humansize" name = "humansize"
version = "1.1.0" version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6cab2627acfc432780848602f3f558f7e9dd427352224b0d9324025796d2a5e" checksum = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026"
[[package]] [[package]]
name = "id3" name = "id3"
@ -1057,9 +1072,9 @@ dependencies = [
[[package]] [[package]]
name = "itertools" name = "itertools"
version = "0.9.0" version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
dependencies = [ dependencies = [
"either", "either",
] ]
@ -1291,7 +1306,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d"
dependencies = [ dependencies = [
"darling", "darling",
"proc-macro-crate", "proc-macro-crate 0.1.5",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn", "syn",
@ -1413,7 +1428,7 @@ version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c0fd9eba1d5db0994a239e09c1be402d35622277e35468ba891aa5e3188ce7e" checksum = "1c0fd9eba1d5db0994a239e09c1be402d35622277e35468ba891aa5e3188ce7e"
dependencies = [ dependencies = [
"proc-macro-crate", "proc-macro-crate 0.1.5",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn", "syn",
@ -1469,14 +1484,12 @@ dependencies = [
[[package]] [[package]]
name = "pango" name = "pango"
version = "0.9.1" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9937068580bebd8ced19975938573803273ccbcbd598c58d4906efd4ac87c438" checksum = "415823a4fb9f1789785cd6e2d2413816f2ecff92380382969aaca9c400e13a19"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"glib", "glib",
"glib-sys",
"gobject-sys",
"libc", "libc",
"once_cell", "once_cell",
"pango-sys", "pango-sys",
@ -1484,9 +1497,9 @@ dependencies = [
[[package]] [[package]]
name = "pango-sys" name = "pango-sys"
version = "0.10.0" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d2650c8b62d116c020abd0cea26a4ed96526afda89b1c4ea567131fdefc890" checksum = "2367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
@ -1525,6 +1538,15 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
[[package]]
name = "pest"
version = "2.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
dependencies = [
"ucd-trie",
]
[[package]] [[package]]
name = "pin-project-lite" name = "pin-project-lite"
version = "0.2.6" version = "0.2.6"
@ -1570,6 +1592,16 @@ dependencies = [
"toml", "toml",
] ]
[[package]]
name = "proc-macro-crate"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92"
dependencies = [
"thiserror",
"toml",
]
[[package]] [[package]]
name = "proc-macro-error" name = "proc-macro-error"
version = "1.0.4" version = "1.0.4"
@ -1666,9 +1698,9 @@ dependencies = [
[[package]] [[package]]
name = "rayon" name = "rayon"
version = "1.5.0" version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674" checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90"
dependencies = [ dependencies = [
"autocfg", "autocfg",
"crossbeam-deque", "crossbeam-deque",
@ -1678,9 +1710,9 @@ dependencies = [
[[package]] [[package]]
name = "rayon-core" name = "rayon-core"
version = "1.9.0" version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e"
dependencies = [ dependencies = [
"crossbeam-channel", "crossbeam-channel",
"crossbeam-deque", "crossbeam-deque",
@ -1734,9 +1766,9 @@ dependencies = [
[[package]] [[package]]
name = "rodio" name = "rodio"
version = "0.13.1" version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b65c2eda643191f6d1bb12ea323a9db8d9ba95374e9be3780b5a9fb5cfb8520f" checksum = "4d98f5e557b61525057e2bc142c8cd7f0e70d75dc32852309bec440e6e046bf9"
dependencies = [ dependencies = [
"claxon", "claxon",
"cpal", "cpal",
@ -1751,6 +1783,15 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
name = "rustc_version"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
dependencies = [
"semver",
]
[[package]] [[package]]
name = "rustdct" name = "rustdct"
version = "0.4.0" version = "0.4.0"
@ -1794,6 +1835,24 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "semver"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
dependencies = [
"semver-parser",
]
[[package]]
name = "semver-parser"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
dependencies = [
"pest",
]
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.125" version = "1.0.125"
@ -1893,15 +1952,15 @@ dependencies = [
[[package]] [[package]]
name = "strum" name = "strum"
version = "0.18.0" version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b" checksum = "7318c509b5ba57f18533982607f24070a55d353e90d4cae30c467cdb2ad5ac5c"
[[package]] [[package]]
name = "strum_macros" name = "strum_macros"
version = "0.18.0" version = "0.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c" checksum = "ee8bc6b87a5112aeeab1f4a9f7ab634fe6cbefc4850006df31267f4cfb9e3149"
dependencies = [ dependencies = [
"heck", "heck",
"proc-macro2", "proc-macro2",
@ -1928,11 +1987,14 @@ dependencies = [
[[package]] [[package]]
name = "system-deps" name = "system-deps"
version = "1.3.2" version = "3.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f3ecc17269a19353b3558b313bba738b25d82993e30d62a18406a24aba4649b" checksum = "c248107ad7bc1ac07066a4d003cae9e9a7bc2e27d3418f7a9cdcdc8699dbea70"
dependencies = [ dependencies = [
"anyhow",
"cfg-expr",
"heck", "heck",
"itertools",
"pkg-config", "pkg-config",
"strum", "strum",
"strum_macros", "strum_macros",
@ -2060,6 +2122,12 @@ version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06"
[[package]]
name = "ucd-trie"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
[[package]] [[package]]
name = "unicode-segmentation" name = "unicode-segmentation"
version = "1.7.1" version = "1.7.1"
@ -2086,9 +2154,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
[[package]] [[package]]
name = "version-compare" name = "version-compare"
version = "0.0.10" version = "0.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1" checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
[[package]] [[package]]
name = "version_check" name = "version_check"
@ -2232,9 +2300,9 @@ checksum = "e575e15bedf6e57b5c2d763ffc6c3c760143466cbd09d762d539680ab5992ded"
[[package]] [[package]]
name = "zip" name = "zip"
version = "0.5.12" version = "0.5.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c83dc9b784d252127720168abd71ea82bf8c3d96b17dc565b5e2a02854f2b27" checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815"
dependencies = [ dependencies = [
"byteorder", "byteorder",
"bzip2", "bzip2",

View file

@ -10,4 +10,4 @@ repository = "https://github.com/qarmin/czkawka"
[dependencies] [dependencies]
czkawka_core = { path = "../czkawka_core" } czkawka_core = { path = "../czkawka_core" }
structopt = "0.3.18" structopt = "0.3.21"

View file

@ -10,9 +10,9 @@ repository = "https://github.com/qarmin/czkawka"
[dependencies] [dependencies]
humansize = "1" humansize = "1.1.1"
rayon = "1" rayon = "1.5.1"
crossbeam-channel = "0.5.0" crossbeam-channel = "0.5.1"
# For saving/loading config files to specific directories # For saving/loading config files to specific directories
directories-next = "2.0.0" directories-next = "2.0.0"
@ -20,7 +20,7 @@ directories-next = "2.0.0"
# Needed by similar images # Needed by similar images
img_hash = "3.1" img_hash = "3.1"
bk-tree = "0.3" bk-tree = "0.3"
image = "0.23.12" image = "0.23.14"
hamming = "0.1" hamming = "0.1"
# Needed by same music # Needed by same music
@ -28,18 +28,18 @@ bitflags = "1.2.1"
audiotags = "0.2.7182" audiotags = "0.2.7182"
# Futures - needed by async progress sender # Futures - needed by async progress sender
futures = "0.3.9" futures = "0.3.15"
# Needed by broken files # Needed by broken files
zip = "0.5.9" zip = "0.5.13"
rodio = { version = "0.13.0", optional = true } rodio = { version = "0.14.0", optional = true }
# Hashes # Hashes
blake3 = "0.3" blake3 = "0.3.8"
crc32fast = "1.2.1" crc32fast = "1.2.1"
xxhash-rust = { version = "0.8.2", features = ["xxh3"] } xxhash-rust = { version = "0.8.2", features = ["xxh3"] }
tempfile = "3.1" tempfile = "3.2"
[features] [features]
default = [] default = []

View file

@ -10,26 +10,26 @@ repository = "https://github.com/qarmin/czkawka"
[dependencies] [dependencies]
czkawka_core = { path = "../czkawka_core" } czkawka_core = { path = "../czkawka_core" }
gdk = "0.13.2" gdk = "0.14.0"
glib = "0.10.1" glib = "0.14.0"
humansize = "1" humansize = "1.1.1"
chrono = "0.4" chrono = "0.4.19"
# Used for sending stop signal across threads # Used for sending stop signal across threads
crossbeam-channel = "0.5" crossbeam-channel = "0.5.1"
# To get informations about progress # To get informations about progress
futures = "0.3.8" futures = "0.3.15"
# For saving/loading config files to specific directories # For saving/loading config files to specific directories
directories-next = "2.0.0" directories-next = "2.0.0"
# For opening files # For opening files
open = "1.4.0" open = "1.7.0"
# To get image preview # To get image preview
image = "0.23.12" image = "0.23.14"
# Move files to trash # Move files to trash
trash = "1.3.0" trash = "1.3.0"
@ -38,7 +38,7 @@ trash = "1.3.0"
winapi = { version = "0.3.9", features = ["combaseapi", "objbase", "shobjidl_core", "windef", "winerror", "wtypesbase", "winuser"] } winapi = { version = "0.3.9", features = ["combaseapi", "objbase", "shobjidl_core", "windef", "winerror", "wtypesbase", "winuser"] }
[dependencies.gtk] [dependencies.gtk]
version = "0.9.2" version = "0.14.0"
default-features = false # just in case default-features = false # just in case
features = ["v3_22"] features = ["v3_22"]

View file

@ -34,10 +34,9 @@ pub fn connect_button_delete(gui_data: &GuiData) {
return; return;
} }
match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) { match to_notebook_main_enum(notebook_main.current_page().unwrap()) {
NotebookMainEnum::Duplicate => { NotebookMainEnum::Duplicate => {
if !check_button_settings_confirm_group_deletion.get_active() || !check_if_deleting_all_files_in_group(&tree_view_duplicate_finder.clone(), ColumnsDuplicates::Color as i32, &window_main, &check_button_settings_confirm_group_deletion) if !check_button_settings_confirm_group_deletion.is_active() || !check_if_deleting_all_files_in_group(&tree_view_duplicate_finder.clone(), ColumnsDuplicates::Color as i32, &window_main, &check_button_settings_confirm_group_deletion) {
{
tree_remove(&tree_view_duplicate_finder.clone(), ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, ColumnsDuplicates::Color as i32, &gui_data); tree_remove(&tree_view_duplicate_finder.clone(), ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, ColumnsDuplicates::Color as i32, &gui_data);
} }
} }
@ -54,7 +53,7 @@ pub fn connect_button_delete(gui_data: &GuiData) {
basic_remove(&tree_view_big_files_finder.clone(), ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, &gui_data); basic_remove(&tree_view_big_files_finder.clone(), ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, &gui_data);
} }
NotebookMainEnum::SimilarImages => { NotebookMainEnum::SimilarImages => {
if !check_button_settings_confirm_group_deletion.get_active() if !check_button_settings_confirm_group_deletion.is_active()
|| !check_if_deleting_all_files_in_group(&tree_view_similar_images_finder.clone(), ColumnsSimilarImages::Color as i32, &window_main, &check_button_settings_confirm_group_deletion) || !check_if_deleting_all_files_in_group(&tree_view_similar_images_finder.clone(), ColumnsSimilarImages::Color as i32, &window_main, &check_button_settings_confirm_group_deletion)
{ {
tree_remove( tree_remove(
@ -71,8 +70,7 @@ pub fn connect_button_delete(gui_data: &GuiData) {
basic_remove(&tree_view_zeroed_files_finder.clone(), ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, &gui_data); basic_remove(&tree_view_zeroed_files_finder.clone(), ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, &gui_data);
} }
NotebookMainEnum::SameMusic => { NotebookMainEnum::SameMusic => {
if !check_button_settings_confirm_group_deletion.get_active() || !check_if_deleting_all_files_in_group(&tree_view_same_music_finder.clone(), ColumnsSameMusic::Color as i32, &window_main, &check_button_settings_confirm_group_deletion) if !check_button_settings_confirm_group_deletion.is_active() || !check_if_deleting_all_files_in_group(&tree_view_same_music_finder.clone(), ColumnsSameMusic::Color as i32, &window_main, &check_button_settings_confirm_group_deletion) {
{
tree_remove(&tree_view_same_music_finder.clone(), ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, ColumnsSameMusic::Color as i32, &gui_data); tree_remove(&tree_view_same_music_finder.clone(), ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, ColumnsSameMusic::Color as i32, &gui_data);
} }
} }
@ -87,7 +85,7 @@ pub fn connect_button_delete(gui_data: &GuiData) {
} }
pub fn check_if_can_delete_files(check_button_settings_confirm_deletion: &gtk::CheckButton, window_main: &gtk::Window) -> bool { pub fn check_if_can_delete_files(check_button_settings_confirm_deletion: &gtk::CheckButton, window_main: &gtk::Window) -> bool {
if check_button_settings_confirm_deletion.get_active() { if check_button_settings_confirm_deletion.is_active() {
let confirmation_dialog_delete = gtk::Dialog::with_buttons( let confirmation_dialog_delete = gtk::Dialog::with_buttons(
Some("Delete confirmation"), Some("Delete confirmation"),
Some(window_main), Some(window_main),
@ -99,19 +97,15 @@ pub fn check_if_can_delete_files(check_button_settings_confirm_deletion: &gtk::C
check_button.set_active(true); check_button.set_active(true);
check_button.set_halign(Align::Center); check_button.set_halign(Align::Center);
let button_box = confirmation_dialog_delete.get_children()[0].clone().downcast::<gtk::Box>().unwrap().get_children()[0] let button_box = confirmation_dialog_delete.children()[0].clone().downcast::<gtk::Box>().unwrap().children()[0].clone().downcast::<gtk::Box>().unwrap().children()[0]
.clone()
.downcast::<gtk::Box>()
.unwrap()
.get_children()[0]
.clone() .clone()
.downcast::<gtk::ButtonBox>() .downcast::<gtk::ButtonBox>()
.unwrap(); .unwrap();
let button_ok = button_box.get_children()[0].clone(); let button_ok = button_box.children()[0].clone();
button_ok.grab_focus(); button_ok.grab_focus();
let internal_box = confirmation_dialog_delete.get_children()[0].clone().downcast::<gtk::Box>().unwrap(); let internal_box = confirmation_dialog_delete.children()[0].clone().downcast::<gtk::Box>().unwrap();
internal_box.add(&label); internal_box.add(&label);
internal_box.add(&check_button); internal_box.add(&check_button);
@ -119,7 +113,7 @@ pub fn check_if_can_delete_files(check_button_settings_confirm_deletion: &gtk::C
let response_type = confirmation_dialog_delete.run(); let response_type = confirmation_dialog_delete.run();
if response_type == gtk::ResponseType::Ok { if response_type == gtk::ResponseType::Ok {
if !check_button.get_active() { if !check_button.is_active() {
check_button_settings_confirm_deletion.set_active(false); check_button_settings_confirm_deletion.set_active(false);
} }
confirmation_dialog_delete.hide(); confirmation_dialog_delete.hide();
@ -134,8 +128,8 @@ pub fn check_if_can_delete_files(check_button_settings_confirm_deletion: &gtk::C
} }
pub fn check_if_deleting_all_files_in_group(tree_view: &gtk::TreeView, column_color: i32, window_main: &gtk::Window, check_button_settings_confirm_group_deletion: &gtk::CheckButton) -> bool { pub fn check_if_deleting_all_files_in_group(tree_view: &gtk::TreeView, column_color: i32, window_main: &gtk::Window, check_button_settings_confirm_group_deletion: &gtk::CheckButton) -> bool {
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.get_selected_rows(); let (selection_rows, tree_model) = selection.selected_rows();
if selection_rows.is_empty() { if selection_rows.is_empty() {
return false; return false;
} }
@ -144,9 +138,9 @@ pub fn check_if_deleting_all_files_in_group(tree_view: &gtk::TreeView, column_co
let mut selected_all_records: bool = true; let mut selected_all_records: bool = true;
if let Some(first_iter) = tree_model.get_iter_first() { if let Some(first_iter) = tree_model.iter_first() {
let current_iter = first_iter; let current_iter = first_iter;
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR { if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!("First element, should be a header"); // First element should be header panic!("First element, should be a header"); // First element should be header
}; };
@ -158,11 +152,11 @@ pub fn check_if_deleting_all_files_in_group(tree_view: &gtk::TreeView, column_co
break; break;
} }
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR { if tree_model.value(&current_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
if selected_all_records { if selected_all_records {
break; break;
} }
} else if current_selected_row != selection_rows.len() && selection_rows[current_selected_row] == tree_model.get_path(&current_iter).unwrap() { } else if current_selected_row != selection_rows.len() && selection_rows[current_selected_row] == tree_model.path(&current_iter).unwrap() {
current_selected_row += 1; current_selected_row += 1;
} else { } else {
selected_all_records = false; selected_all_records = false;
@ -187,19 +181,19 @@ pub fn check_if_deleting_all_files_in_group(tree_view: &gtk::TreeView, column_co
check_button.set_active(true); check_button.set_active(true);
check_button.set_halign(Align::Center); check_button.set_halign(Align::Center);
let button_box = confirmation_dialog_group_delete.get_children()[0].clone().downcast::<gtk::Box>().unwrap().get_children()[0] let button_box = confirmation_dialog_group_delete.children()[0].clone().downcast::<gtk::Box>().unwrap().children()[0]
.clone() .clone()
.downcast::<gtk::Box>() .downcast::<gtk::Box>()
.unwrap() .unwrap()
.get_children()[0] .children()[0]
.clone() .clone()
.downcast::<gtk::ButtonBox>() .downcast::<gtk::ButtonBox>()
.unwrap(); .unwrap();
let button_ok = button_box.get_children()[0].clone(); let button_ok = button_box.children()[0].clone();
button_ok.grab_focus(); button_ok.grab_focus();
let internal_box = confirmation_dialog_group_delete.get_children()[0].clone().downcast::<gtk::Box>().unwrap(); let internal_box = confirmation_dialog_group_delete.children()[0].clone().downcast::<gtk::Box>().unwrap();
internal_box.add(&label); internal_box.add(&label);
internal_box.add(&label2); internal_box.add(&label2);
internal_box.add(&check_button); internal_box.add(&check_button);
@ -208,7 +202,7 @@ pub fn check_if_deleting_all_files_in_group(tree_view: &gtk::TreeView, column_co
let response_type = confirmation_dialog_group_delete.run(); let response_type = confirmation_dialog_group_delete.run();
if response_type == gtk::ResponseType::Ok { if response_type == gtk::ResponseType::Ok {
if !check_button.get_active() { if !check_button.is_active() {
check_button_settings_confirm_group_deletion.set_active(false); check_button_settings_confirm_group_deletion.set_active(false);
} }
} else { } else {
@ -225,11 +219,11 @@ pub fn check_if_deleting_all_files_in_group(tree_view: &gtk::TreeView, column_co
pub fn empty_folder_remover(tree_view: &gtk::TreeView, column_file_name: i32, column_path: i32, gui_data: &GuiData) { pub fn empty_folder_remover(tree_view: &gtk::TreeView, column_file_name: i32, column_path: i32, gui_data: &GuiData) {
let text_view_errors = gui_data.text_view_errors.clone(); let text_view_errors = gui_data.text_view_errors.clone();
let use_trash = gui_data.settings.check_button_settings_use_trash.clone().get_active(); let use_trash = gui_data.settings.check_button_settings_use_trash.clone().is_active();
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.get_selected_rows(); let (selection_rows, tree_model) = selection.selected_rows();
if selection_rows.is_empty() { if selection_rows.is_empty() {
return; return;
} }
@ -239,8 +233,8 @@ pub fn empty_folder_remover(tree_view: &gtk::TreeView, column_file_name: i32, co
// Must be deleted from end to start, because when deleting entries, TreePath(and also TreeIter) will points to invalid data // Must be deleted from end to start, because when deleting entries, TreePath(and also TreeIter) will points to invalid data
for tree_path in selection_rows.iter().rev() { for tree_path in selection_rows.iter().rev() {
let name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_file_name).get::<String>().unwrap().unwrap(); let name = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_file_name).get::<String>().unwrap();
let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_path).get::<String>().unwrap().unwrap(); let path = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_path).get::<String>().unwrap();
// We must check if folder is really empty or contains only other empty folders // We must check if folder is really empty or contains only other empty folders
let mut error_happened = false; let mut error_happened = false;
@ -294,14 +288,14 @@ pub fn empty_folder_remover(tree_view: &gtk::TreeView, column_file_name: i32, co
if !use_trash { if !use_trash {
match fs::remove_dir_all(format!("{}/{}", path, name)) { match fs::remove_dir_all(format!("{}/{}", path, name)) {
Ok(_) => { Ok(_) => {
list_store.remove(&list_store.get_iter(tree_path).unwrap()); list_store.remove(&list_store.iter(tree_path).unwrap());
} }
Err(_) => error_happened = true, Err(_) => error_happened = true,
} }
} else { } else {
match trash::delete(format!("{}/{}", path, name)) { match trash::delete(format!("{}/{}", path, name)) {
Ok(_) => { Ok(_) => {
list_store.remove(&list_store.get_iter(tree_path).unwrap()); list_store.remove(&list_store.iter(tree_path).unwrap());
} }
Err(_) => error_happened = true, Err(_) => error_happened = true,
} }
@ -312,17 +306,17 @@ pub fn empty_folder_remover(tree_view: &gtk::TreeView, column_file_name: i32, co
} }
} }
text_view_errors.get_buffer().unwrap().set_text(messages.as_str()); text_view_errors.buffer().unwrap().set_text(messages.as_str());
selection.unselect_all(); selection.unselect_all();
} }
pub fn basic_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path: i32, gui_data: &GuiData) { pub fn basic_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path: i32, gui_data: &GuiData) {
let text_view_errors = gui_data.text_view_errors.clone(); let text_view_errors = gui_data.text_view_errors.clone();
let use_trash = gui_data.settings.check_button_settings_use_trash.clone().get_active(); let use_trash = gui_data.settings.check_button_settings_use_trash.clone().is_active();
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.get_selected_rows(); let (selection_rows, tree_model) = selection.selected_rows();
if selection_rows.is_empty() { if selection_rows.is_empty() {
return; return;
} }
@ -332,38 +326,38 @@ pub fn basic_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_pat
// Must be deleted from end to start, because when deleting entries, TreePath(and also TreeIter) will points to invalid data // Must be deleted from end to start, because when deleting entries, TreePath(and also TreeIter) will points to invalid data
for tree_path in selection_rows.iter().rev() { for tree_path in selection_rows.iter().rev() {
let name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_file_name).get::<String>().unwrap().unwrap(); let name = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_file_name).get::<String>().unwrap();
let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_path).get::<String>().unwrap().unwrap(); let path = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_path).get::<String>().unwrap();
if !use_trash { if !use_trash {
match fs::remove_file(format!("{}/{}", path, name)) { match fs::remove_file(format!("{}/{}", path, name)) {
Ok(_) => { Ok(_) => {
list_store.remove(&list_store.get_iter(tree_path).unwrap()); list_store.remove(&list_store.iter(tree_path).unwrap());
} }
Err(_) => messages += format!("Failed to remove file {}/{} because file doesn't exists or you don't have permissions.\n", path, name).as_str(), Err(_) => messages += format!("Failed to remove file {}/{} because file doesn't exists or you don't have permissions.\n", path, name).as_str(),
} }
} else { } else {
match trash::delete(format!("{}/{}", path, name)) { match trash::delete(format!("{}/{}", path, name)) {
Ok(_) => { Ok(_) => {
list_store.remove(&list_store.get_iter(tree_path).unwrap()); list_store.remove(&list_store.iter(tree_path).unwrap());
} }
Err(_) => messages += format!("Failed to remove file {}/{} because file doesn't exists or you don't have permissions.\n", path, name).as_str(), Err(_) => messages += format!("Failed to remove file {}/{} because file doesn't exists or you don't have permissions.\n", path, name).as_str(),
} }
} }
} }
text_view_errors.get_buffer().unwrap().set_text(messages.as_str()); text_view_errors.buffer().unwrap().set_text(messages.as_str());
selection.unselect_all(); selection.unselect_all();
} }
// Remove all occurrences - remove every element which have same path and name as even non selected ones // Remove all occurrences - remove every element which have same path and name as even non selected ones
pub fn tree_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path: i32, column_color: i32, gui_data: &GuiData) { pub fn tree_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path: i32, column_color: i32, gui_data: &GuiData) {
let text_view_errors = gui_data.text_view_errors.clone(); let text_view_errors = gui_data.text_view_errors.clone();
let use_trash = gui_data.settings.check_button_settings_use_trash.clone().get_active(); let use_trash = gui_data.settings.check_button_settings_use_trash.clone().is_active();
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.get_selected_rows(); let (selection_rows, tree_model) = selection.selected_rows();
if selection_rows.is_empty() { if selection_rows.is_empty() {
return; return;
} }
@ -376,10 +370,10 @@ pub fn tree_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path
// Save to variable paths of files, and remove it when not removing all occurrences. // Save to variable paths of files, and remove it when not removing all occurrences.
for tree_path in selection_rows.iter().rev() { for tree_path in selection_rows.iter().rev() {
let file_name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_file_name).get::<String>().unwrap().unwrap(); let file_name = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_file_name).get::<String>().unwrap();
let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_path).get::<String>().unwrap().unwrap(); let path = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_path).get::<String>().unwrap();
list_store.remove(&list_store.get_iter(tree_path).unwrap()); list_store.remove(&list_store.iter(tree_path).unwrap());
map_with_path_to_delete.entry(path.clone()).or_insert_with(Vec::new); map_with_path_to_delete.entry(path.clone()).or_insert_with(Vec::new);
map_with_path_to_delete.get_mut(path.as_str()).unwrap().push(file_name); map_with_path_to_delete.get_mut(path.as_str()).unwrap().push(file_name);
@ -411,30 +405,30 @@ pub fn tree_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path
} }
// Remove only child from header // Remove only child from header
if let Some(first_iter) = list_store.get_iter_first() { if let Some(first_iter) = list_store.iter_first() {
let mut vec_tree_path_to_delete: Vec<gtk::TreePath> = Vec::new(); let mut vec_tree_path_to_delete: Vec<gtk::TreePath> = Vec::new();
let mut current_iter = first_iter; let mut current_iter = first_iter;
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR { if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!("First deleted element, should be a header"); // First element should be header panic!("First deleted element, should be a header"); // First element should be header
}; };
let mut next_iter; let mut next_iter;
let mut next_next_iter; let mut next_next_iter;
'main: loop { 'main: loop {
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR { if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!("First deleted element, should be a header"); // First element should be header panic!("First deleted element, should be a header"); // First element should be header
}; };
next_iter = current_iter.clone(); next_iter = current_iter.clone();
if !list_store.iter_next(&next_iter) { if !list_store.iter_next(&next_iter) {
// There is only single header left (H1 -> END) -> (NOTHING) // There is only single header left (H1 -> END) -> (NOTHING)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
break 'main; break 'main;
} }
if tree_model.get_value(&next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR { if tree_model.value(&next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
// There are two headers each others(we remove just first) -> (H1 -> H2) -> (H2) // There are two headers each others(we remove just first) -> (H1 -> H2) -> (H2)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
current_iter = next_iter.clone(); current_iter = next_iter.clone();
continue 'main; continue 'main;
} }
@ -442,15 +436,15 @@ pub fn tree_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path
next_next_iter = next_iter.clone(); next_next_iter = next_iter.clone();
if !list_store.iter_next(&next_next_iter) { if !list_store.iter_next(&next_next_iter) {
// There is only one child of header left, so we remove it with header (H1 -> C1 -> END) -> (NOTHING) // There is only one child of header left, so we remove it with header (H1 -> C1 -> END) -> (NOTHING)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.get_path(&next_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&next_iter).unwrap());
break 'main; break 'main;
} }
if tree_model.get_value(&next_next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR { if tree_model.value(&next_next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
// One child between two headers, we can remove them (H1 -> C1 -> H2) -> (H2) // One child between two headers, we can remove them (H1 -> C1 -> H2) -> (H2)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.get_path(&next_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&next_iter).unwrap());
current_iter = next_next_iter.clone(); current_iter = next_next_iter.clone();
continue 'main; continue 'main;
} }
@ -461,24 +455,24 @@ pub fn tree_remove(tree_view: &gtk::TreeView, column_file_name: i32, column_path
break 'main; break 'main;
} }
// Move to next header // Move to next header
if tree_model.get_value(&next_next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR { if tree_model.value(&next_next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
current_iter = next_next_iter.clone(); current_iter = next_next_iter.clone();
continue 'main; continue 'main;
} }
} }
} }
for tree_path in vec_tree_path_to_delete.iter().rev() { for tree_path in vec_tree_path_to_delete.iter().rev() {
list_store.remove(&list_store.get_iter(&tree_path).unwrap()); list_store.remove(&list_store.iter(&tree_path).unwrap());
} }
} }
// Last step, remove orphan header if exists // Last step, remove orphan header if exists
if let Some(iter) = list_store.get_iter_first() { if let Some(iter) = list_store.iter_first() {
if !list_store.iter_next(&iter) { if !list_store.iter_next(&iter) {
list_store.clear(); list_store.clear();
} }
} }
text_view_errors.get_buffer().unwrap().set_text(messages.as_str()); text_view_errors.buffer().unwrap().set_text(messages.as_str());
selection.unselect_all(); selection.unselect_all();
} }

View file

@ -19,7 +19,7 @@ pub fn connect_button_hardlink(gui_data: &GuiData) {
let image_preview_similar_images = gui_data.main_notebook.image_preview_similar_images.clone(); let image_preview_similar_images = gui_data.main_notebook.image_preview_similar_images.clone();
buttons_hardlink.connect_clicked(move |_| match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) { buttons_hardlink.connect_clicked(move |_| match to_notebook_main_enum(notebook_main.current_page().unwrap()) {
NotebookMainEnum::Duplicate => { NotebookMainEnum::Duplicate => {
hardlink(tree_view_duplicate_finder.clone(), ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, ColumnsDuplicates::Color as i32, &gui_data); hardlink(tree_view_duplicate_finder.clone(), ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, ColumnsDuplicates::Color as i32, &gui_data);
} }
@ -44,9 +44,9 @@ fn hardlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, c
reset_text_view(&text_view_errors); reset_text_view(&text_view_errors);
let list_store = get_list_store(&tree_view); let list_store = get_list_store(&tree_view);
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.get_selected_rows(); let (selection_rows, tree_model) = selection.selected_rows();
if selection_rows.is_empty() { if selection_rows.is_empty() {
return; return;
} }
@ -58,11 +58,11 @@ fn hardlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, c
let mut vec_tree_path_to_remove: Vec<TreePath> = Vec::new(); // List of hardlinked files without its root let mut vec_tree_path_to_remove: Vec<TreePath> = Vec::new(); // List of hardlinked files without its root
let mut vec_hardlink_data: Vec<HardlinkData> = Vec::new(); let mut vec_hardlink_data: Vec<HardlinkData> = Vec::new();
let current_iter: TreeIter = tree_model.get_iter_first().unwrap(); // Hardlink button should be only visible when more than 1 element is visible, otherwise it needs to be fixed let current_iter: TreeIter = tree_model.iter_first().unwrap(); // Hardlink button should be only visible when more than 1 element is visible, otherwise it needs to be fixed
let mut current_hardlink_data: Option<HardlinkData> = None; let mut current_hardlink_data: Option<HardlinkData> = None;
let mut current_selected_index = 0; let mut current_selected_index = 0;
loop { loop {
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR { if tree_model.value(&current_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
if let Some(current_hardlink_data) = current_hardlink_data { if let Some(current_hardlink_data) = current_hardlink_data {
if !current_hardlink_data.files_to_hardlink.is_empty() { if !current_hardlink_data.files_to_hardlink.is_empty() {
vec_hardlink_data.push(current_hardlink_data); vec_hardlink_data.push(current_hardlink_data);
@ -76,13 +76,13 @@ fn hardlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, c
continue; continue;
} }
if tree_model.get_path(&current_iter).unwrap() == selection_rows[current_selected_index] { if tree_model.path(&current_iter).unwrap() == selection_rows[current_selected_index] {
let file_name = tree_model.get_value(&current_iter, column_file_name).get::<String>().unwrap().unwrap(); let file_name = tree_model.value(&current_iter, column_file_name).get::<String>().unwrap();
let path = tree_model.get_value(&current_iter, column_path).get::<String>().unwrap().unwrap(); let path = tree_model.value(&current_iter, column_path).get::<String>().unwrap();
let full_file_path = format!("{}/{}", path, file_name); let full_file_path = format!("{}/{}", path, file_name);
if current_hardlink_data.is_some() { if current_hardlink_data.is_some() {
vec_tree_path_to_remove.push(tree_model.get_path(&current_iter).unwrap()); vec_tree_path_to_remove.push(tree_model.path(&current_iter).unwrap());
let mut temp_data = current_hardlink_data.unwrap(); let mut temp_data = current_hardlink_data.unwrap();
temp_data.files_to_hardlink.push(full_file_path); temp_data.files_to_hardlink.push(full_file_path);
current_hardlink_data = Some(temp_data); current_hardlink_data = Some(temp_data);
@ -128,34 +128,34 @@ fn hardlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, c
println!(); println!();
} }
for tree_path in vec_tree_path_to_remove.iter().rev() { for tree_path in vec_tree_path_to_remove.iter().rev() {
list_store.remove(&tree_model.get_iter(tree_path).unwrap()); list_store.remove(&tree_model.iter(tree_path).unwrap());
} }
// Remove only child from header // Remove only child from header
if let Some(first_iter) = list_store.get_iter_first() { if let Some(first_iter) = list_store.iter_first() {
let mut vec_tree_path_to_delete: Vec<gtk::TreePath> = Vec::new(); let mut vec_tree_path_to_delete: Vec<gtk::TreePath> = Vec::new();
let mut current_iter = first_iter; let mut current_iter = first_iter;
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR { if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!(); // First element should be header panic!(); // First element should be header
}; };
let mut next_iter; let mut next_iter;
let mut next_next_iter; let mut next_next_iter;
'main: loop { 'main: loop {
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR { if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!(); // First element should be header panic!(); // First element should be header
}; };
next_iter = current_iter.clone(); next_iter = current_iter.clone();
if !list_store.iter_next(&next_iter) { if !list_store.iter_next(&next_iter) {
// There is only single header left (H1 -> END) -> (NOTHING) // There is only single header left (H1 -> END) -> (NOTHING)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
break 'main; break 'main;
} }
if tree_model.get_value(&next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR { if tree_model.value(&next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
// There are two headers each others(we remove just first) -> (H1 -> H2) -> (H2) // There are two headers each others(we remove just first) -> (H1 -> H2) -> (H2)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
current_iter = next_iter.clone(); current_iter = next_iter.clone();
continue 'main; continue 'main;
} }
@ -163,15 +163,15 @@ fn hardlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, c
next_next_iter = next_iter.clone(); next_next_iter = next_iter.clone();
if !list_store.iter_next(&next_next_iter) { if !list_store.iter_next(&next_next_iter) {
// There is only one child of header left, so we remove it with header (H1 -> C1 -> END) -> (NOTHING) // There is only one child of header left, so we remove it with header (H1 -> C1 -> END) -> (NOTHING)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.get_path(&next_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&next_iter).unwrap());
break 'main; break 'main;
} }
if tree_model.get_value(&next_next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR { if tree_model.value(&next_next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
// One child between two headers, we can remove them (H1 -> C1 -> H2) -> (H2) // One child between two headers, we can remove them (H1 -> C1 -> H2) -> (H2)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.get_path(&next_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&next_iter).unwrap());
current_iter = next_next_iter.clone(); current_iter = next_next_iter.clone();
continue 'main; continue 'main;
} }
@ -182,14 +182,14 @@ fn hardlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, c
break 'main; break 'main;
} }
// Move to next header // Move to next header
if tree_model.get_value(&next_next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR { if tree_model.value(&next_next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
current_iter = next_next_iter.clone(); current_iter = next_next_iter.clone();
continue 'main; continue 'main;
} }
} }
} }
for tree_path in vec_tree_path_to_delete.iter().rev() { for tree_path in vec_tree_path_to_delete.iter().rev() {
list_store.remove(&list_store.get_iter(&tree_path).unwrap()); list_store.remove(&list_store.iter(&tree_path).unwrap());
} }
} }

View file

@ -21,7 +21,7 @@ pub fn connect_button_save(gui_data: &GuiData) {
buttons_save.connect_clicked(move |_| { buttons_save.connect_clicked(move |_| {
let file_name; let file_name;
match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) { match to_notebook_main_enum(notebook_main.current_page().unwrap()) {
NotebookMainEnum::Duplicate => { NotebookMainEnum::Duplicate => {
file_name = "results_duplicates.txt"; file_name = "results_duplicates.txt";
@ -73,7 +73,7 @@ pub fn connect_button_save(gui_data: &GuiData) {
shared_broken_files_state.borrow_mut().save_results_to_file(file_name); shared_broken_files_state.borrow_mut().save_results_to_file(file_name);
} }
} }
post_save_things(file_name, &to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &gui_data); post_save_things(file_name, &to_notebook_main_enum(notebook_main.current_page().unwrap()), &gui_data);
}); });
} }
fn post_save_things(file_name: &str, type_of_tab: &NotebookMainEnum, gui_data: &GuiData) { fn post_save_things(file_name: &str, type_of_tab: &NotebookMainEnum, gui_data: &GuiData) {

View file

@ -97,12 +97,12 @@ pub fn connect_button_search(
buttons_search_clone.connect_clicked(move |_| { buttons_search_clone.connect_clicked(move |_| {
let included_directories = get_path_buf_from_vector_of_strings(get_string_from_list_store(&tree_view_included_directories)); let included_directories = get_path_buf_from_vector_of_strings(get_string_from_list_store(&tree_view_included_directories));
let excluded_directories = get_path_buf_from_vector_of_strings(get_string_from_list_store(&tree_view_excluded_directories)); let excluded_directories = get_path_buf_from_vector_of_strings(get_string_from_list_store(&tree_view_excluded_directories));
let recursive_search = check_button_recursive.get_active(); let recursive_search = check_button_recursive.is_active();
let excluded_items = entry_excluded_items.get_text().as_str().to_string().split(',').map(|e| e.to_string()).collect::<Vec<String>>(); let excluded_items = entry_excluded_items.text().as_str().to_string().split(',').map(|e| e.to_string()).collect::<Vec<String>>();
let allowed_extensions = entry_allowed_extensions.get_text().as_str().to_string(); let allowed_extensions = entry_allowed_extensions.text().as_str().to_string();
let hide_hard_links = check_button_settings_hide_hard_links.get_active(); let hide_hard_links = check_button_settings_hide_hard_links.is_active();
let use_cache = check_button_settings_use_cache.get_active(); let use_cache = check_button_settings_use_cache.is_active();
let minimal_cache_file_size = entry_settings_cache_file_minimal_size.get_text().as_str().parse::<u64>().unwrap_or(2 * 1024 * 1024); let minimal_cache_file_size = entry_settings_cache_file_minimal_size.text().as_str().parse::<u64>().unwrap_or(2 * 1024 * 1024);
let show_dialog = Arc::new(AtomicBool::new(true)); let show_dialog = Arc::new(AtomicBool::new(true));
@ -125,7 +125,7 @@ pub fn connect_button_search(
let glib_stop_sender = glib_stop_sender.clone(); let glib_stop_sender = glib_stop_sender.clone();
let stop_receiver = stop_receiver.clone(); let stop_receiver = stop_receiver.clone();
match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) { match to_notebook_main_enum(notebook_main.current_page().unwrap()) {
NotebookMainEnum::Duplicate => { NotebookMainEnum::Duplicate => {
label_stage.show(); label_stage.show();
grid_progress_stages.show_all(); grid_progress_stages.show_all();
@ -134,25 +134,25 @@ pub fn connect_button_search(
get_list_store(&tree_view_duplicate_finder).clear(); get_list_store(&tree_view_duplicate_finder).clear();
let check_method; let check_method;
if radio_button_duplicates_name.get_active() { if radio_button_duplicates_name.is_active() {
check_method = duplicate::CheckingMethod::Name; check_method = duplicate::CheckingMethod::Name;
} else if radio_button_duplicates_size.get_active() { } else if radio_button_duplicates_size.is_active() {
check_method = duplicate::CheckingMethod::Size; check_method = duplicate::CheckingMethod::Size;
} else if radio_button_duplicates_hashmb.get_active() { } else if radio_button_duplicates_hashmb.is_active() {
check_method = duplicate::CheckingMethod::HashMb; check_method = duplicate::CheckingMethod::HashMb;
} else if radio_button_duplicates_hash.get_active() { } else if radio_button_duplicates_hash.is_active() {
check_method = duplicate::CheckingMethod::Hash; check_method = duplicate::CheckingMethod::Hash;
} else { } else {
panic!("No radio button is pressed"); panic!("No radio button is pressed");
} }
let minimal_file_size = entry_duplicate_minimal_size.get_text().as_str().parse::<u64>().unwrap_or(1024); let minimal_file_size = entry_duplicate_minimal_size.text().as_str().parse::<u64>().unwrap_or(1024);
let hash_type: HashType; let hash_type: HashType;
if radio_button_hash_type_blake3.get_active() { if radio_button_hash_type_blake3.is_active() {
hash_type = duplicate::HashType::Blake3; hash_type = duplicate::HashType::Blake3;
} else if radio_button_hash_type_crc32.get_active() { } else if radio_button_hash_type_crc32.is_active() {
hash_type = duplicate::HashType::Crc32; hash_type = duplicate::HashType::Crc32;
} else if radio_button_hash_type_xxh3.get_active() { } else if radio_button_hash_type_xxh3.is_active() {
hash_type = duplicate::HashType::Xxh3; hash_type = duplicate::HashType::Xxh3;
} else { } else {
panic!("No radio button is pressed"); panic!("No radio button is pressed");
@ -223,7 +223,7 @@ pub fn connect_button_search(
get_list_store(&tree_view_big_files_finder).clear(); get_list_store(&tree_view_big_files_finder).clear();
let numbers_of_files_to_check = entry_big_files_number.get_text().as_str().parse::<usize>().unwrap_or(50); let numbers_of_files_to_check = entry_big_files_number.text().as_str().parse::<usize>().unwrap_or(50);
let futures_sender_big_file = futures_sender_big_file.clone(); let futures_sender_big_file = futures_sender_big_file.clone();
// Find big files // Find big files
@ -268,20 +268,20 @@ pub fn connect_button_search(
get_list_store(&tree_view_similar_images_finder).clear(); get_list_store(&tree_view_similar_images_finder).clear();
let minimal_file_size = entry_similar_images_minimal_size.get_text().as_str().parse::<u64>().unwrap_or(1024 * 16); let minimal_file_size = entry_similar_images_minimal_size.text().as_str().parse::<u64>().unwrap_or(1024 * 16);
let similarity; let similarity;
if radio_button_similar_images_minimal.get_active() { if radio_button_similar_images_minimal.is_active() {
similarity = similar_images::Similarity::Minimal; similarity = similar_images::Similarity::Minimal;
} else if radio_button_similar_images_very_small.get_active() { } else if radio_button_similar_images_very_small.is_active() {
similarity = similar_images::Similarity::VerySmall; similarity = similar_images::Similarity::VerySmall;
} else if radio_button_similar_images_small.get_active() { } else if radio_button_similar_images_small.is_active() {
similarity = similar_images::Similarity::Small; similarity = similar_images::Similarity::Small;
} else if radio_button_similar_images_medium.get_active() { } else if radio_button_similar_images_medium.is_active() {
similarity = similar_images::Similarity::Medium; similarity = similar_images::Similarity::Medium;
} else if radio_button_similar_images_high.get_active() { } else if radio_button_similar_images_high.is_active() {
similarity = similar_images::Similarity::High; similarity = similar_images::Similarity::High;
} else if radio_button_similar_images_very_high.get_active() { } else if radio_button_similar_images_very_high.is_active() {
similarity = similar_images::Similarity::VeryHigh; similarity = similar_images::Similarity::VeryHigh;
} else { } else {
panic!("No radio button is pressed"); panic!("No radio button is pressed");
@ -331,23 +331,23 @@ pub fn connect_button_search(
get_list_store(&tree_view_same_music_finder).clear(); get_list_store(&tree_view_same_music_finder).clear();
let minimal_file_size = entry_same_music_minimal_size.get_text().as_str().parse::<u64>().unwrap_or(1024); let minimal_file_size = entry_same_music_minimal_size.text().as_str().parse::<u64>().unwrap_or(1024);
let mut music_similarity: MusicSimilarity = MusicSimilarity::NONE; let mut music_similarity: MusicSimilarity = MusicSimilarity::NONE;
if check_button_music_title.get_active() { if check_button_music_title.is_active() {
music_similarity |= MusicSimilarity::TITLE; music_similarity |= MusicSimilarity::TITLE;
} }
if check_button_music_artist.get_active() { if check_button_music_artist.is_active() {
music_similarity |= MusicSimilarity::ARTIST; music_similarity |= MusicSimilarity::ARTIST;
} }
if check_button_music_album_title.get_active() { if check_button_music_album_title.is_active() {
music_similarity |= MusicSimilarity::ALBUM_TITLE; music_similarity |= MusicSimilarity::ALBUM_TITLE;
} }
if check_button_music_album_artist.get_active() { if check_button_music_album_artist.is_active() {
music_similarity |= MusicSimilarity::ALBUM_ARTIST; music_similarity |= MusicSimilarity::ALBUM_ARTIST;
} }
if check_button_music_year.get_active() { if check_button_music_year.is_active() {
music_similarity |= MusicSimilarity::YEAR; music_similarity |= MusicSimilarity::YEAR;
} }

View file

@ -39,7 +39,7 @@ pub fn connect_button_select(gui_data: &GuiData) {
let buttons_select = gui_data.bottom_buttons.buttons_select.clone(); let buttons_select = gui_data.bottom_buttons.buttons_select.clone();
buttons_select_clone.connect_clicked(move |_| { buttons_select_clone.connect_clicked(move |_| {
show_required_popovers(&gui_data, &to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &hashmap); show_required_popovers(&gui_data, &to_notebook_main_enum(notebook_main.current_page().unwrap()), &hashmap);
popover_select.set_relative_to(Some(&buttons_select)); popover_select.set_relative_to(Some(&buttons_select));
popover_select.popup(); popover_select.popup();
}); });

View file

@ -6,7 +6,7 @@ pub fn connect_button_stop(gui_data: &GuiData) {
let button_stop_in_dialog = gui_data.progress_window.button_stop_in_dialog.clone(); let button_stop_in_dialog = gui_data.progress_window.button_stop_in_dialog.clone();
let stop_sender = gui_data.stop_sender.clone(); let stop_sender = gui_data.stop_sender.clone();
button_stop_in_dialog.connect_key_release_event(move |_, e| { button_stop_in_dialog.connect_key_release_event(move |_, e| {
if e.get_keycode() == Some(36) { if e.keycode() == Some(36) {
// Only accept enter key to stop search // Only accept enter key to stop search
stop_sender.send(()).unwrap(); stop_sender.send(()).unwrap();
} }

View file

@ -18,7 +18,7 @@ pub fn connect_button_symlink(gui_data: &GuiData) {
let image_preview_similar_images = gui_data.main_notebook.image_preview_similar_images.clone(); let image_preview_similar_images = gui_data.main_notebook.image_preview_similar_images.clone();
buttons_symlink.connect_clicked(move |_| match to_notebook_main_enum(notebook_main.get_current_page().unwrap()) { buttons_symlink.connect_clicked(move |_| match to_notebook_main_enum(notebook_main.current_page().unwrap()) {
NotebookMainEnum::Duplicate => { NotebookMainEnum::Duplicate => {
symlink(tree_view_duplicate_finder.clone(), ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, ColumnsDuplicates::Color as i32, &gui_data); symlink(tree_view_duplicate_finder.clone(), ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, ColumnsDuplicates::Color as i32, &gui_data);
} }
@ -43,9 +43,9 @@ fn symlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, co
reset_text_view(&text_view_errors); reset_text_view(&text_view_errors);
let list_store = get_list_store(&tree_view); let list_store = get_list_store(&tree_view);
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.get_selected_rows(); let (selection_rows, tree_model) = selection.selected_rows();
if selection_rows.is_empty() { if selection_rows.is_empty() {
return; return;
} }
@ -57,11 +57,11 @@ fn symlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, co
let mut vec_tree_path_to_remove: Vec<TreePath> = Vec::new(); // List of symlinked files without its root let mut vec_tree_path_to_remove: Vec<TreePath> = Vec::new(); // List of symlinked files without its root
let mut vec_symlink_data: Vec<SymlinkData> = Vec::new(); let mut vec_symlink_data: Vec<SymlinkData> = Vec::new();
let current_iter: TreeIter = tree_model.get_iter_first().unwrap(); // Symlink button should be only visible when more than 1 element is visible, otherwise it needs to be fixed let current_iter: TreeIter = tree_model.iter_first().unwrap(); // Symlink button should be only visible when more than 1 element is visible, otherwise it needs to be fixed
let mut current_symlink_data: Option<SymlinkData> = None; let mut current_symlink_data: Option<SymlinkData> = None;
let mut current_selected_index = 0; let mut current_selected_index = 0;
loop { loop {
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR { if tree_model.value(&current_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
if let Some(current_symlink_data) = current_symlink_data { if let Some(current_symlink_data) = current_symlink_data {
if !current_symlink_data.files_to_symlink.is_empty() { if !current_symlink_data.files_to_symlink.is_empty() {
vec_symlink_data.push(current_symlink_data); vec_symlink_data.push(current_symlink_data);
@ -75,13 +75,13 @@ fn symlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, co
continue; continue;
} }
if tree_model.get_path(&current_iter).unwrap() == selection_rows[current_selected_index] { if tree_model.path(&current_iter).unwrap() == selection_rows[current_selected_index] {
let file_name = tree_model.get_value(&current_iter, column_file_name).get::<String>().unwrap().unwrap(); let file_name = tree_model.value(&current_iter, column_file_name).get::<String>().unwrap();
let path = tree_model.get_value(&current_iter, column_path).get::<String>().unwrap().unwrap(); let path = tree_model.value(&current_iter, column_path).get::<String>().unwrap();
let full_file_path = format!("{}/{}", path, file_name); let full_file_path = format!("{}/{}", path, file_name);
if current_symlink_data.is_some() { if current_symlink_data.is_some() {
vec_tree_path_to_remove.push(tree_model.get_path(&current_iter).unwrap()); vec_tree_path_to_remove.push(tree_model.path(&current_iter).unwrap());
let mut temp_data = current_symlink_data.unwrap(); let mut temp_data = current_symlink_data.unwrap();
temp_data.files_to_symlink.push(full_file_path); temp_data.files_to_symlink.push(full_file_path);
current_symlink_data = Some(temp_data); current_symlink_data = Some(temp_data);
@ -149,34 +149,34 @@ fn symlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, co
println!(); println!();
} }
for tree_path in vec_tree_path_to_remove.iter().rev() { for tree_path in vec_tree_path_to_remove.iter().rev() {
list_store.remove(&tree_model.get_iter(tree_path).unwrap()); list_store.remove(&tree_model.iter(tree_path).unwrap());
} }
// Remove only child from header // Remove only child from header
if let Some(first_iter) = list_store.get_iter_first() { if let Some(first_iter) = list_store.iter_first() {
let mut vec_tree_path_to_delete: Vec<gtk::TreePath> = Vec::new(); let mut vec_tree_path_to_delete: Vec<gtk::TreePath> = Vec::new();
let mut current_iter = first_iter; let mut current_iter = first_iter;
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR { if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!(); // First element should be header panic!(); // First element should be header
}; };
let mut next_iter; let mut next_iter;
let mut next_next_iter; let mut next_next_iter;
'main: loop { 'main: loop {
if tree_model.get_value(&current_iter, column_color).get::<String>().unwrap().unwrap() != HEADER_ROW_COLOR { if tree_model.value(&current_iter, column_color).get::<String>().unwrap() != HEADER_ROW_COLOR {
panic!(); // First element should be header panic!(); // First element should be header
}; };
next_iter = current_iter.clone(); next_iter = current_iter.clone();
if !list_store.iter_next(&next_iter) { if !list_store.iter_next(&next_iter) {
// There is only single header left (H1 -> END) -> (NOTHING) // There is only single header left (H1 -> END) -> (NOTHING)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
break 'main; break 'main;
} }
if tree_model.get_value(&next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR { if tree_model.value(&next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
// There are two headers each others(we remove just first) -> (H1 -> H2) -> (H2) // There are two headers each others(we remove just first) -> (H1 -> H2) -> (H2)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
current_iter = next_iter.clone(); current_iter = next_iter.clone();
continue 'main; continue 'main;
} }
@ -184,15 +184,15 @@ fn symlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, co
next_next_iter = next_iter.clone(); next_next_iter = next_iter.clone();
if !list_store.iter_next(&next_next_iter) { if !list_store.iter_next(&next_next_iter) {
// There is only one child of header left, so we remove it with header (H1 -> C1 -> END) -> (NOTHING) // There is only one child of header left, so we remove it with header (H1 -> C1 -> END) -> (NOTHING)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.get_path(&next_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&next_iter).unwrap());
break 'main; break 'main;
} }
if tree_model.get_value(&next_next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR { if tree_model.value(&next_next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
// One child between two headers, we can remove them (H1 -> C1 -> H2) -> (H2) // One child between two headers, we can remove them (H1 -> C1 -> H2) -> (H2)
vec_tree_path_to_delete.push(list_store.get_path(&current_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&current_iter).unwrap());
vec_tree_path_to_delete.push(list_store.get_path(&next_iter).unwrap()); vec_tree_path_to_delete.push(list_store.path(&next_iter).unwrap());
current_iter = next_next_iter.clone(); current_iter = next_next_iter.clone();
continue 'main; continue 'main;
} }
@ -203,14 +203,14 @@ fn symlink(tree_view: gtk::TreeView, column_file_name: i32, column_path: i32, co
break 'main; break 'main;
} }
// Move to next header // Move to next header
if tree_model.get_value(&next_next_iter, column_color).get::<String>().unwrap().unwrap() == HEADER_ROW_COLOR { if tree_model.value(&next_next_iter, column_color).get::<String>().unwrap() == HEADER_ROW_COLOR {
current_iter = next_next_iter.clone(); current_iter = next_next_iter.clone();
continue 'main; continue 'main;
} }
} }
} }
for tree_path in vec_tree_path_to_delete.iter().rev() { for tree_path in vec_tree_path_to_delete.iter().rev() {
list_store.remove(&list_store.get_iter(&tree_path).unwrap()); list_store.remove(&list_store.iter(&tree_path).unwrap());
} }
} }

View file

@ -42,6 +42,9 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
let window_progress = gui_data.progress_window.window_progress.clone(); let window_progress = gui_data.progress_window.window_progress.clone();
let taskbar_state = gui_data.taskbar_state.clone(); let taskbar_state = gui_data.taskbar_state.clone();
let main_context = glib::MainContext::default();
let _guard = main_context.acquire().unwrap();
glib_stop_receiver.attach(None, move |msg| { glib_stop_receiver.attach(None, move |msg| {
buttons_search.show(); buttons_search.show();
@ -94,8 +97,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{ {
let list_store = get_list_store(&tree_view_duplicate_finder); let list_store = get_list_store(&tree_view_duplicate_finder);
let col_indices = [0, 1, 2, 3, 4, 5];
match df.get_check_method() { match df.get_check_method() {
CheckingMethod::Name => { CheckingMethod::Name => {
let btreemap = df.get_files_sorted_by_names(); let btreemap = df.get_files_sorted_by_names();
@ -113,26 +114,27 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
vector.clone() vector.clone()
}; };
let values: [&dyn ToValue; 6] = [ let values: [(u32, &dyn ToValue); 6] = [
&name, (0, &name),
&(format!("{} results", vector.len())), (1, (&(format!("{} results", vector.len())))),
&"".to_string(), // No text in 3 column (2, (&"".to_string())), // No text in 3 column
&(0), // Not used here (3, (&(0))), // Not used here
&(HEADER_ROW_COLOR.to_string()), (4, &(HEADER_ROW_COLOR.to_string())),
&(TEXT_COLOR.to_string()), (5, &(TEXT_COLOR.to_string())),
]; ];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
for entry in vector { for entry in vector {
let (directory, file) = split_path(&entry.path); let (directory, file) = split_path(&entry.path);
let values: [&dyn ToValue; 6] = [ let values: [(u32, &dyn ToValue); 6] = [
&file, (0, &file),
&directory, (1, &directory),
&(format!("{} - ({})", NaiveDateTime::from_timestamp(entry.modified_date as i64, 0).to_string(), entry.size.file_size(options::BINARY).unwrap())), (2, &(format!("{} - ({})", NaiveDateTime::from_timestamp(entry.modified_date as i64, 0).to_string(), entry.size.file_size(options::BINARY).unwrap()))),
&(entry.modified_date), (3, &(entry.modified_date)),
&(MAIN_ROW_COLOR.to_string()), (4, &(MAIN_ROW_COLOR.to_string())),
&(TEXT_COLOR.to_string()), (5, &(TEXT_COLOR.to_string())),
]; ];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
} }
} }
@ -153,26 +155,32 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
vector.clone() vector.clone()
}; };
let values: [&dyn ToValue; 6] = [ let values: [(u32, &dyn ToValue); 6] = [
&(format!("{} x {} ({} bytes)", vector.len(), size.file_size(options::BINARY).unwrap(), size)), (0, &(format!("{} x {} ({} bytes)", vector.len(), size.file_size(options::BINARY).unwrap(), size))),
&(format!("{} ({} bytes) lost", ((vector.len() - 1) as u64 * *size as u64).file_size(options::BINARY).unwrap(), (vector.len() - 1) as u64 * *size as u64)), (
&"".to_string(), // No text in 3 column 1,
&(0), // Not used here &(format!("{} ({} bytes) lost", ((vector.len() - 1) as u64 * *size as u64).file_size(options::BINARY).unwrap(), (vector.len() - 1) as u64 * *size as u64)),
&(HEADER_ROW_COLOR.to_string()), ),
&(TEXT_COLOR.to_string()), (2, &"".to_string()), // No text in 3 column
(3, &(0)),
(4, &(HEADER_ROW_COLOR.to_string())),
(5, &(TEXT_COLOR.to_string())),
]; ];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
for entry in vector { for entry in vector {
let (directory, file) = split_path(&entry.path); let (directory, file) = split_path(&entry.path);
let values: [&dyn ToValue; 6] = [
&file, let values: [(u32, &dyn ToValue); 6] = [
&directory, (0, &file),
&(NaiveDateTime::from_timestamp(entry.modified_date as i64, 0).to_string()), (1, &directory),
&(entry.modified_date), (2, &(NaiveDateTime::from_timestamp(entry.modified_date as i64, 0).to_string())),
&(MAIN_ROW_COLOR.to_string()), (3, &(entry.modified_date)),
&(TEXT_COLOR.to_string()), (4, &(MAIN_ROW_COLOR.to_string())),
(5, &(TEXT_COLOR.to_string())),
]; ];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
} }
} }
} }
@ -192,27 +200,30 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
} else { } else {
vector.clone() vector.clone()
}; };
let values: [(u32, &dyn ToValue); 6] = [
let values: [&dyn ToValue; 6] = [ (0, &(format!("{} x {} ({} bytes)", vector.len(), size.file_size(options::BINARY).unwrap(), size))),
&(format!("{} x {} ({} bytes)", vector.len(), size.file_size(options::BINARY).unwrap(), size)), (
&(format!("{} ({} bytes) lost", ((vector.len() - 1) as u64 * *size as u64).file_size(options::BINARY).unwrap(), (vector.len() - 1) as u64 * *size as u64)), 1,
&"".to_string(), // No text in 3 column &(format!("{} ({} bytes) lost", ((vector.len() - 1) as u64 * *size as u64).file_size(options::BINARY).unwrap(), (vector.len() - 1) as u64 * *size as u64)),
&(0), // Not used here ),
&(HEADER_ROW_COLOR.to_string()), (2, &"".to_string()), // No text in 3 column
&(TEXT_COLOR.to_string()), (3, &(0)), // Not used here
(4, &(HEADER_ROW_COLOR.to_string())),
(5, &(TEXT_COLOR.to_string())),
]; ];
list_store.set(&list_store.append(), &col_indices, &values);
list_store.set(&list_store.append(), &values);
for entry in vector { for entry in vector {
let (directory, file) = split_path(&entry.path); let (directory, file) = split_path(&entry.path);
let values: [&dyn ToValue; 6] = [ let values: [(u32, &dyn ToValue); 6] = [
&file, (0, &file),
&directory, (1, &directory),
&(NaiveDateTime::from_timestamp(entry.modified_date as i64, 0).to_string()), (2, &(NaiveDateTime::from_timestamp(entry.modified_date as i64, 0).to_string())),
&(entry.modified_date), (3, &(entry.modified_date)),
&(MAIN_ROW_COLOR.to_string()), (4, &(MAIN_ROW_COLOR.to_string())),
&(TEXT_COLOR.to_string()), (5, &(TEXT_COLOR.to_string())),
]; ];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
} }
} }
@ -260,8 +271,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{ {
let list_store = get_list_store(&tree_view_empty_folder_finder); let list_store = get_list_store(&tree_view_empty_folder_finder);
let col_indices = [0, 1, 2];
let hashmap = ef.get_empty_folder_list(); let hashmap = ef.get_empty_folder_list();
let mut vector = hashmap.keys().cloned().collect::<Vec<PathBuf>>(); let mut vector = hashmap.keys().cloned().collect::<Vec<PathBuf>>();
@ -272,8 +281,8 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
for path in vector { for path in vector {
let (directory, file) = split_path(&path); let (directory, file) = split_path(&path);
let values: [&dyn ToValue; 3] = [&file, &directory, &(NaiveDateTime::from_timestamp(hashmap.get(&path).unwrap().modified_date as i64, 0).to_string())]; let values: [(u32, &dyn ToValue); 3] = [(0, &file), (1, &directory), (2, &(NaiveDateTime::from_timestamp(hashmap.get(&path).unwrap().modified_date as i64, 0).to_string()))];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
print_text_messages_to_text_view(text_messages, &text_view_errors); print_text_messages_to_text_view(text_messages, &text_view_errors);
} }
@ -310,8 +319,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{ {
let list_store = get_list_store(&tree_view_empty_files_finder); let list_store = get_list_store(&tree_view_empty_files_finder);
let col_indices = [0, 1, 2];
let vector = vf.get_empty_files(); let vector = vf.get_empty_files();
// Sort // Sort
@ -323,8 +330,8 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
for file_entry in vector { for file_entry in vector {
let (directory, file) = split_path(&file_entry.path); let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 3] = [&file, &directory, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())]; let values: [(u32, &dyn ToValue); 3] = [(0, &file), (1, &directory), (2, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()))];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
print_text_messages_to_text_view(text_messages, &text_view_errors); print_text_messages_to_text_view(text_messages, &text_view_errors);
} }
@ -361,8 +368,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{ {
let list_store = get_list_store(&tree_view_big_files_finder); let list_store = get_list_store(&tree_view_big_files_finder);
let col_indices = [0, 1, 2, 3];
let btreemap = bf.get_big_files(); let btreemap = bf.get_big_files();
for (size, vector) in btreemap.iter().rev() { for (size, vector) in btreemap.iter().rev() {
@ -373,13 +378,13 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
}); });
for file_entry in vector { for file_entry in vector {
let (directory, file) = split_path(&file_entry.path); let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 4] = [ let values: [(u32, &dyn ToValue); 4] = [
&(format!("{} ({} bytes)", size.file_size(options::BINARY).unwrap(), size)), (0, &(format!("{} ({} bytes)", size.file_size(options::BINARY).unwrap(), size))),
&file, (1, &file),
&directory, (2, &directory),
&(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()), (3, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())),
]; ];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
} }
print_text_messages_to_text_view(text_messages, &text_view_errors); print_text_messages_to_text_view(text_messages, &text_view_errors);
@ -417,8 +422,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{ {
let list_store = get_list_store(&tree_view_temporary_files_finder); let list_store = get_list_store(&tree_view_temporary_files_finder);
let col_indices = [0, 1, 2];
let vector = tf.get_temporary_files(); let vector = tf.get_temporary_files();
// Sort // Sort
@ -430,8 +433,8 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
for file_entry in vector { for file_entry in vector {
let (directory, file) = split_path(&file_entry.path); let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 3] = [&file, &directory, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())]; let values: [(u32, &dyn ToValue); 3] = [(0, &file), (1, &directory), (2, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()))];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
print_text_messages_to_text_view(text_messages, &text_view_errors); print_text_messages_to_text_view(text_messages, &text_view_errors);
} }
@ -468,8 +471,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{ {
let list_store = get_list_store(&tree_view_similar_images_finder); let list_store = get_list_store(&tree_view_similar_images_finder);
let col_indices = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
let vec_struct_similar = sf.get_similar_images(); let vec_struct_similar = sf.get_similar_images();
for vec_file_entry in vec_struct_similar.iter() { for vec_file_entry in vec_struct_similar.iter() {
@ -486,36 +487,36 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
}; };
// Header // Header
let values: [&dyn ToValue; 10] = [ let values: [(u32, &dyn ToValue); 10] = [
&"".to_string(), (0, &"".to_string()),
&"".to_string(), (1, &"".to_string()),
&(0), (2, &(0)),
&"".to_string(), (3, &"".to_string()),
&"".to_string(), (4, &"".to_string()),
&"".to_string(), (5, &"".to_string()),
&"".to_string(), (6, &"".to_string()),
&(0), (7, &(0)),
&(HEADER_ROW_COLOR.to_string()), (8, &(HEADER_ROW_COLOR.to_string())),
&(TEXT_COLOR.to_string()), (9, &(TEXT_COLOR.to_string())),
]; ];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
// Meat // Meat
for file_entry in vec_file_entry.iter() { for file_entry in vec_file_entry.iter() {
let (directory, file) = split_path(&file_entry.path); let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 10] = [ let values: [(u32, &dyn ToValue); 10] = [
&(get_text_from_similarity(&file_entry.similarity).to_string()), (0, &(get_text_from_similarity(&file_entry.similarity).to_string())),
&file_entry.size.file_size(options::BINARY).unwrap(), (1, &file_entry.size.file_size(options::BINARY).unwrap()),
&file_entry.size, (2, &file_entry.size),
&file_entry.dimensions, (3, &file_entry.dimensions),
&file, (4, &file),
&directory, (5, &directory),
&(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()), (6, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())),
&(file_entry.modified_date), (7, &(file_entry.modified_date)),
&(MAIN_ROW_COLOR.to_string()), (8, &(MAIN_ROW_COLOR.to_string())),
&(TEXT_COLOR.to_string()), (9, &(TEXT_COLOR.to_string())),
]; ];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
} }
@ -558,8 +559,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{ {
let list_store = get_list_store(&tree_view_zeroed_files_finder); let list_store = get_list_store(&tree_view_zeroed_files_finder);
let col_indices = [0, 1, 2, 3, 4];
let vector = zf.get_zeroed_files(); let vector = zf.get_zeroed_files();
// Sort // Sort
@ -571,14 +570,14 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
for file_entry in vector { for file_entry in vector {
let (directory, file) = split_path(&file_entry.path); let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 5] = [ let values: [(u32, &dyn ToValue); 5] = [
&(file_entry.size.file_size(options::BINARY).unwrap()), (0, &(file_entry.size.file_size(options::BINARY).unwrap())),
&(file_entry.size), (1, &(file_entry.size)),
&file, (2, &file),
&directory, (3, &directory),
&(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()), (4, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())),
]; ];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
print_text_messages_to_text_view(text_messages, &text_view_errors); print_text_messages_to_text_view(text_messages, &text_view_errors);
} }
@ -615,8 +614,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{ {
let list_store = get_list_store(&tree_view_same_music_finder); let list_store = get_list_store(&tree_view_same_music_finder);
let col_indices = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
let vector = mf.get_duplicated_music_entries(); let vector = mf.get_duplicated_music_entries();
let music_similarity = *mf.get_music_similarity(); let music_similarity = *mf.get_music_similarity();
@ -642,55 +639,70 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
vec_file_entry.clone() vec_file_entry.clone()
}; };
let values: [&dyn ToValue; 13] = [ let values: [(u32, &dyn ToValue); 13] = [
&"".to_string(), (0, &"".to_string()),
&(0), (1, &(0)),
&"".to_string(), (2, &"".to_string()),
&"".to_string(), (3, &"".to_string()),
&(match is_title { (
true => text.clone(), 4,
false => "".to_string(), &(match is_title {
}), true => text.clone(),
&(match is_artist { false => "".to_string(),
true => text.clone(), }),
false => "".to_string(), ),
}), (
&(match is_album_title { 5,
true => text.clone(), &(match is_artist {
false => "".to_string(), true => text.clone(),
}), false => "".to_string(),
&(match is_album_artist { }),
true => text.clone(), ),
false => "".to_string(), (
}), 6,
&(match is_year { &(match is_album_title {
true => text.clone(), true => text.clone(),
false => "".to_string(), false => "".to_string(),
}), }),
&"".to_string(), ),
&(0), (
&(HEADER_ROW_COLOR.to_string()), 7,
&(TEXT_COLOR.to_string()), &(match is_album_artist {
true => text.clone(),
false => "".to_string(),
}),
),
(
8,
&(match is_year {
true => text.clone(),
false => "".to_string(),
}),
),
(9, &"".to_string()),
(10, &(0)),
(11, &(HEADER_ROW_COLOR.to_string())),
(12, &(TEXT_COLOR.to_string())),
]; ];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
for file_entry in vec_file_entry { for file_entry in vec_file_entry {
let (directory, file) = split_path(&file_entry.path); let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 13] = [ let values: [(u32, &dyn ToValue); 13] = [
&file_entry.size.file_size(options::BINARY).unwrap(), (0, &file_entry.size.file_size(options::BINARY).unwrap()),
&file_entry.size, (1, &file_entry.size),
&file, (2, &file),
&directory, (3, &directory),
&file_entry.title, (4, &file_entry.title),
&file_entry.artist, (5, &file_entry.artist),
&file_entry.album_title, (6, &file_entry.album_title),
&file_entry.album_artist, (7, &file_entry.album_artist),
&file_entry.year.to_string(), (8, &file_entry.year.to_string()),
&(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()), (9, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())),
&(file_entry.modified_date), (10, &(file_entry.modified_date)),
&(MAIN_ROW_COLOR.to_string()), (11, &(MAIN_ROW_COLOR.to_string())),
&(TEXT_COLOR.to_string()), (12, &(TEXT_COLOR.to_string())),
]; ];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
} }
print_text_messages_to_text_view(text_messages, &text_view_errors); print_text_messages_to_text_view(text_messages, &text_view_errors);
@ -732,8 +744,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{ {
let list_store = get_list_store(&tree_view_invalid_symlinks); let list_store = get_list_store(&tree_view_invalid_symlinks);
let col_indices = [0, 1, 2, 3, 4];
let vector = ifs.get_invalid_symlinks(); let vector = ifs.get_invalid_symlinks();
// Sort // Sort
@ -746,14 +756,14 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
for file_entry in vector { for file_entry in vector {
let (directory, file) = split_path(&file_entry.symlink_path); let (directory, file) = split_path(&file_entry.symlink_path);
let values: [&dyn ToValue; 5] = [ let values: [(u32, &dyn ToValue); 5] = [
&file, (0, &file),
&directory, (1, &directory),
&file_entry.destination_path.to_string_lossy().to_string(), (2, &file_entry.destination_path.to_string_lossy().to_string()),
&get_text_from_invalid_symlink_cause(&file_entry.type_of_error), (3, &get_text_from_invalid_symlink_cause(&file_entry.type_of_error)),
&(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()), (4, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())),
]; ];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
print_text_messages_to_text_view(text_messages, &text_view_errors); print_text_messages_to_text_view(text_messages, &text_view_errors);
} }
@ -790,8 +800,6 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
{ {
let list_store = get_list_store(&tree_view_broken_files); let list_store = get_list_store(&tree_view_broken_files);
let col_indices = [0, 1, 2, 3];
let vector = br.get_broken_files(); let vector = br.get_broken_files();
// Sort // Sort
@ -803,8 +811,8 @@ pub fn connect_compute_results(gui_data: &GuiData, glib_stop_receiver: Receiver<
for file_entry in vector { for file_entry in vector {
let (directory, file) = split_path(&file_entry.path); let (directory, file) = split_path(&file_entry.path);
let values: [&dyn ToValue; 4] = [&file, &directory, &file_entry.error_string, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string())]; let values: [(u32, &dyn ToValue); 4] = [(0, &file), (1, &directory), (2, &file_entry.error_string), (3, &(NaiveDateTime::from_timestamp(file_entry.modified_date as i64, 0).to_string()))];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
print_text_messages_to_text_view(text_messages, &text_view_errors); print_text_messages_to_text_view(text_messages, &text_view_errors);
} }

View file

@ -22,9 +22,9 @@ pub fn connect_notebook_tabs(gui_data: &GuiData) {
{ {
for (index, upper_tab) in get_all_upper_tabs().iter().enumerate() { for (index, upper_tab) in get_all_upper_tabs().iter().enumerate() {
if *shared_upper_notebooks.borrow_mut().get_mut(&current_tab_in_main_notebook).unwrap().get_mut(upper_tab).unwrap() { if *shared_upper_notebooks.borrow_mut().get_mut(&current_tab_in_main_notebook).unwrap().get_mut(upper_tab).unwrap() {
notebook_upper.get_children().get(index).unwrap().show(); notebook_upper.children().get(index).unwrap().show();
} else { } else {
notebook_upper.get_children().get(index).unwrap().hide(); notebook_upper.children().get(index).unwrap().hide();
} }
} }
} }

View file

@ -10,26 +10,26 @@ use gtk::TreeIter;
// e.g. 'tar.gz' will be selected instead 'tar.gz (copy)' etc. // e.g. 'tar.gz' will be selected instead 'tar.gz (copy)' etc.
fn popover_select_all(popover: &gtk::Popover, tree_view: &gtk::TreeView) { fn popover_select_all(popover: &gtk::Popover, tree_view: &gtk::TreeView) {
let selection = tree_view.get_selection(); let selection = tree_view.selection();
selection.select_all(); selection.select_all();
popover.popdown(); popover.popdown();
} }
fn popover_unselect_all(popover: &gtk::Popover, tree_view: &gtk::TreeView) { fn popover_unselect_all(popover: &gtk::Popover, tree_view: &gtk::TreeView) {
let selection = tree_view.get_selection(); let selection = tree_view.selection();
selection.unselect_all(); selection.unselect_all();
popover.popdown(); popover.popdown();
} }
fn popover_reverse(popover: &gtk::Popover, tree_view: &gtk::TreeView) { fn popover_reverse(popover: &gtk::Popover, tree_view: &gtk::TreeView) {
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let (vector_tree_path, tree_model) = selection.get_selected_rows(); let (vector_tree_path, tree_model) = selection.selected_rows();
if vector_tree_path.is_empty() { if vector_tree_path.is_empty() {
selection.select_all(); selection.select_all();
} else { } else {
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut current_path_index = 0; let mut current_path_index = 0;
let mut tree_iter_selected: TreeIter; let mut tree_iter_selected: TreeIter;
@ -37,8 +37,8 @@ fn popover_reverse(popover: &gtk::Popover, tree_view: &gtk::TreeView) {
if current_path_index >= vector_tree_path.len() { if current_path_index >= vector_tree_path.len() {
selection.select_iter(&tree_iter_all); selection.select_iter(&tree_iter_all);
} else { } else {
tree_iter_selected = tree_model.get_iter(vector_tree_path.get(current_path_index).unwrap()).unwrap(); tree_iter_selected = tree_model.iter(vector_tree_path.get(current_path_index).unwrap()).unwrap();
if tree_model.get_path(&tree_iter_all).unwrap() == tree_model.get_path(&tree_iter_selected).unwrap() { if tree_model.path(&tree_iter_all).unwrap() == tree_model.path(&tree_iter_selected).unwrap() {
selection.unselect_iter(&tree_iter_selected); selection.unselect_iter(&tree_iter_selected);
current_path_index += 1; current_path_index += 1;
} else { } else {
@ -55,10 +55,10 @@ fn popover_reverse(popover: &gtk::Popover, tree_view: &gtk::TreeView) {
} }
fn popover_all_except_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_modification_as_secs: i32, column_file_name: i32) { fn popover_all_except_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_modification_as_secs: i32, column_file_name: i32) {
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let tree_model = tree_view.get_model().unwrap(); let tree_model = tree_view.model().unwrap();
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut end: bool = false; let mut end: bool = false;
@ -71,7 +71,7 @@ fn popover_all_except_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
let mut file_length: usize = 0; let mut file_length: usize = 0;
loop { loop {
let color = tree_model.get_value(&tree_iter_all, column_color).get::<String>().unwrap().unwrap(); let color = tree_model.value(&tree_iter_all, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR { if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter_all) { if !tree_model.iter_next(&tree_iter_all) {
end = true; end = true;
@ -79,8 +79,8 @@ fn popover_all_except_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
break; break;
} }
tree_iter_array.push(tree_iter_all.clone()); tree_iter_array.push(tree_iter_all.clone());
let modification = tree_model.get_value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap().unwrap(); let modification = tree_model.value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap();
let current_file_length = tree_model.get_value(&tree_iter_all, column_file_name).get::<String>().unwrap().unwrap().len(); let current_file_length = tree_model.value(&tree_iter_all, column_file_name).get::<String>().unwrap().len();
if modification < oldest_modification_time || (modification == oldest_modification_time && current_file_length < file_length) { if modification < oldest_modification_time || (modification == oldest_modification_time && current_file_length < file_length) {
file_length = current_file_length; file_length = current_file_length;
oldest_modification_time = modification; oldest_modification_time = modification;
@ -113,10 +113,10 @@ fn popover_all_except_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
popover.popdown(); popover.popdown();
} }
fn popover_all_except_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_modification_as_secs: i32, column_file_name: i32) { fn popover_all_except_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_modification_as_secs: i32, column_file_name: i32) {
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let tree_model = tree_view.get_model().unwrap(); let tree_model = tree_view.model().unwrap();
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut end: bool = false; let mut end: bool = false;
@ -129,7 +129,7 @@ fn popover_all_except_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
let mut file_length: usize = 0; let mut file_length: usize = 0;
loop { loop {
let color = tree_model.get_value(&tree_iter_all, column_color).get::<String>().unwrap().unwrap(); let color = tree_model.value(&tree_iter_all, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR { if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter_all) { if !tree_model.iter_next(&tree_iter_all) {
end = true; end = true;
@ -137,8 +137,8 @@ fn popover_all_except_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
break; break;
} }
tree_iter_array.push(tree_iter_all.clone()); tree_iter_array.push(tree_iter_all.clone());
let modification = tree_model.get_value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap().unwrap(); let modification = tree_model.value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap();
let current_file_length = tree_model.get_value(&tree_iter_all, column_file_name).get::<String>().unwrap().unwrap().len(); let current_file_length = tree_model.value(&tree_iter_all, column_file_name).get::<String>().unwrap().len();
if modification > newest_modification_time || (modification == newest_modification_time && current_file_length < file_length) { if modification > newest_modification_time || (modification == newest_modification_time && current_file_length < file_length) {
file_length = current_file_length; file_length = current_file_length;
newest_modification_time = modification; newest_modification_time = modification;
@ -171,10 +171,10 @@ fn popover_all_except_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
popover.popdown(); popover.popdown();
} }
fn popover_one_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_modification_as_secs: i32, column_file_name: i32) { fn popover_one_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_modification_as_secs: i32, column_file_name: i32) {
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let tree_model = tree_view.get_model().unwrap(); let tree_model = tree_view.model().unwrap();
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut end: bool = false; let mut end: bool = false;
@ -187,7 +187,7 @@ fn popover_one_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_
let mut file_length: usize = 0; let mut file_length: usize = 0;
loop { loop {
let color = tree_model.get_value(&tree_iter_all, column_color).get::<String>().unwrap().unwrap(); let color = tree_model.value(&tree_iter_all, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR { if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter_all) { if !tree_model.iter_next(&tree_iter_all) {
end = true; end = true;
@ -195,8 +195,8 @@ fn popover_one_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_
break; break;
} }
tree_iter_array.push(tree_iter_all.clone()); tree_iter_array.push(tree_iter_all.clone());
let modification = tree_model.get_value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap().unwrap(); let modification = tree_model.value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap();
let current_file_length = tree_model.get_value(&tree_iter_all, column_file_name).get::<String>().unwrap().unwrap().len(); let current_file_length = tree_model.value(&tree_iter_all, column_file_name).get::<String>().unwrap().len();
if modification < oldest_modification_time || (modification == oldest_modification_time && current_file_length > file_length) { if modification < oldest_modification_time || (modification == oldest_modification_time && current_file_length > file_length) {
file_length = current_file_length; file_length = current_file_length;
oldest_modification_time = modification; oldest_modification_time = modification;
@ -229,10 +229,10 @@ fn popover_one_oldest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_
popover.popdown(); popover.popdown();
} }
fn popover_one_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_modification_as_secs: i32, column_file_name: i32) { fn popover_one_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_modification_as_secs: i32, column_file_name: i32) {
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let tree_model = tree_view.get_model().unwrap(); let tree_model = tree_view.model().unwrap();
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut end: bool = false; let mut end: bool = false;
@ -244,7 +244,7 @@ fn popover_one_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_
let mut file_length: usize = 0; let mut file_length: usize = 0;
loop { loop {
let color = tree_model.get_value(&tree_iter_all, column_color).get::<String>().unwrap().unwrap(); let color = tree_model.value(&tree_iter_all, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR { if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter_all) { if !tree_model.iter_next(&tree_iter_all) {
end = true; end = true;
@ -252,8 +252,8 @@ fn popover_one_newest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_
break; break;
} }
tree_iter_array.push(tree_iter_all.clone()); tree_iter_array.push(tree_iter_all.clone());
let modification = tree_model.get_value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap().unwrap(); let modification = tree_model.value(&tree_iter_all, column_modification_as_secs).get::<u64>().unwrap();
let current_file_length = tree_model.get_value(&tree_iter_all, column_file_name).get::<String>().unwrap().unwrap().len(); let current_file_length = tree_model.value(&tree_iter_all, column_file_name).get::<String>().unwrap().len();
if modification > newest_modification_time || (modification == newest_modification_time && current_file_length > file_length) { if modification > newest_modification_time || (modification == newest_modification_time && current_file_length > file_length) {
file_length = current_file_length; file_length = current_file_length;
newest_modification_time = modification; newest_modification_time = modification;
@ -330,7 +330,7 @@ fn popover_select_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view:
grid.attach(&entry_name, 1, 2, 1, 1); grid.attach(&entry_name, 1, 2, 1, 1);
grid.attach(&entry_name_path, 1, 3, 1, 1); grid.attach(&entry_name_path, 1, 3, 1, 1);
for widgets in confirmation_dialog_delete.get_children() { for widgets in confirmation_dialog_delete.children() {
// By default GtkBox is child of dialog, so we can easily add other things to it // By default GtkBox is child of dialog, so we can easily add other things to it
widgets.downcast::<gtk::Box>().unwrap().add(&grid); widgets.downcast::<gtk::Box>().unwrap().add(&grid);
} }
@ -339,15 +339,15 @@ fn popover_select_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view:
let response_type = confirmation_dialog_delete.run(); let response_type = confirmation_dialog_delete.run();
if response_type == gtk::ResponseType::Ok { if response_type == gtk::ResponseType::Ok {
if radio_path.get_active() { if radio_path.is_active() {
wildcard_type = WildcardType::Path; wildcard_type = WildcardType::Path;
wildcard = entry_path.get_text().to_string(); wildcard = entry_path.text().to_string();
} else if radio_name.get_active() { } else if radio_name.is_active() {
wildcard_type = WildcardType::Name; wildcard_type = WildcardType::Name;
wildcard = entry_name.get_text().to_string(); wildcard = entry_name.text().to_string();
} else if radio_name_path.get_active() { } else if radio_name_path.is_active() {
wildcard_type = WildcardType::PathName; wildcard_type = WildcardType::PathName;
wildcard = entry_name_path.get_text().to_string(); wildcard = entry_name_path.text().to_string();
} else { } else {
panic!("Non handled option in select wildcard"); panic!("Non handled option in select wildcard");
} }
@ -365,14 +365,14 @@ fn popover_select_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view:
#[cfg(target_family = "windows")] #[cfg(target_family = "windows")]
let wildcard = wildcard.as_str(); let wildcard = wildcard.as_str();
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let tree_model = tree_view.get_model().unwrap(); let tree_model = tree_view.model().unwrap();
let tree_iter = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records let tree_iter = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
loop { loop {
if let Some(column_color) = column_color { if let Some(column_color) = column_color {
let color = tree_model.get_value(&tree_iter, column_color).get::<String>().unwrap().unwrap(); let color = tree_model.value(&tree_iter, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR { if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter) { if !tree_model.iter_next(&tree_iter) {
break; break;
@ -381,8 +381,8 @@ fn popover_select_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view:
} }
} }
let path = tree_model.get_value(&tree_iter, column_path).get::<String>().unwrap().unwrap(); let path = tree_model.value(&tree_iter, column_path).get::<String>().unwrap();
let name = tree_model.get_value(&tree_iter, column_file_name).get::<String>().unwrap().unwrap(); let name = tree_model.value(&tree_iter, column_file_name).get::<String>().unwrap();
match wildcard_type { match wildcard_type {
WildcardType::Path => { WildcardType::Path => {
if Common::regex_check(wildcard, path) { if Common::regex_check(wildcard, path) {
@ -458,15 +458,15 @@ fn popover_unselect_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view
let response_type = confirmation_dialog_delete.run(); let response_type = confirmation_dialog_delete.run();
if response_type == gtk::ResponseType::Ok { if response_type == gtk::ResponseType::Ok {
if radio_path.get_active() { if radio_path.is_active() {
wildcard_type = WildcardType::Path; wildcard_type = WildcardType::Path;
wildcard = entry_path.get_text().to_string(); wildcard = entry_path.text().to_string();
} else if radio_name.get_active() { } else if radio_name.is_active() {
wildcard_type = WildcardType::Name; wildcard_type = WildcardType::Name;
wildcard = entry_name.get_text().to_string(); wildcard = entry_name.text().to_string();
} else if radio_name_path.get_active() { } else if radio_name_path.is_active() {
wildcard_type = WildcardType::PathName; wildcard_type = WildcardType::PathName;
wildcard = entry_name_path.get_text().to_string(); wildcard = entry_name_path.text().to_string();
} else { } else {
panic!("Non handled option in unselect wildcard"); panic!("Non handled option in unselect wildcard");
} }
@ -484,14 +484,14 @@ fn popover_unselect_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view
#[cfg(target_family = "windows")] #[cfg(target_family = "windows")]
let wildcard = wildcard.as_str(); let wildcard = wildcard.as_str();
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let tree_model = tree_view.get_model().unwrap(); let tree_model = tree_view.model().unwrap();
let tree_iter = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records let tree_iter = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
loop { loop {
if let Some(column_color) = column_color { if let Some(column_color) = column_color {
let color = tree_model.get_value(&tree_iter, column_color).get::<String>().unwrap().unwrap(); let color = tree_model.value(&tree_iter, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR { if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter) { if !tree_model.iter_next(&tree_iter) {
break; break;
@ -500,8 +500,8 @@ fn popover_unselect_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view
} }
} }
let path = tree_model.get_value(&tree_iter, column_path).get::<String>().unwrap().unwrap(); let path = tree_model.value(&tree_iter, column_path).get::<String>().unwrap();
let name = tree_model.get_value(&tree_iter, column_file_name).get::<String>().unwrap().unwrap(); let name = tree_model.value(&tree_iter, column_file_name).get::<String>().unwrap();
match wildcard_type { match wildcard_type {
WildcardType::Path => { WildcardType::Path => {
if Common::regex_check(wildcard, path) { if Common::regex_check(wildcard, path) {
@ -528,10 +528,10 @@ fn popover_unselect_custom(popover: &gtk::Popover, gui_data: &GuiData, tree_view
} }
fn popover_all_except_biggest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_size_as_bytes: i32, column_dimensions: i32) { fn popover_all_except_biggest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_size_as_bytes: i32, column_dimensions: i32) {
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let tree_model = tree_view.get_model().unwrap(); let tree_model = tree_view.model().unwrap();
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut end: bool = false; let mut end: bool = false;
@ -543,7 +543,7 @@ fn popover_all_except_biggest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
let mut biggest_number_of_pixels: u64 = 0; let mut biggest_number_of_pixels: u64 = 0;
loop { loop {
let color = tree_model.get_value(&tree_iter_all, column_color).get::<String>().unwrap().unwrap(); let color = tree_model.value(&tree_iter_all, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR { if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter_all) { if !tree_model.iter_next(&tree_iter_all) {
end = true; end = true;
@ -551,8 +551,8 @@ fn popover_all_except_biggest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
break; break;
} }
tree_iter_array.push(tree_iter_all.clone()); tree_iter_array.push(tree_iter_all.clone());
let size_as_bytes = tree_model.get_value(&tree_iter_all, column_size_as_bytes).get::<u64>().unwrap().unwrap(); let size_as_bytes = tree_model.value(&tree_iter_all, column_size_as_bytes).get::<u64>().unwrap();
let dimensions_string = tree_model.get_value(&tree_iter_all, column_dimensions).get::<String>().unwrap().unwrap(); let dimensions_string = tree_model.value(&tree_iter_all, column_dimensions).get::<String>().unwrap();
let dimensions = change_dimension_to_krotka(dimensions_string); let dimensions = change_dimension_to_krotka(dimensions_string);
let number_of_pixels = dimensions.0 * dimensions.1; let number_of_pixels = dimensions.0 * dimensions.1;
@ -589,10 +589,10 @@ fn popover_all_except_biggest(popover: &gtk::Popover, tree_view: &gtk::TreeView,
popover.popdown(); popover.popdown();
} }
fn popover_all_except_smallest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_size_as_bytes: i32, column_dimensions: i32) { fn popover_all_except_smallest(popover: &gtk::Popover, tree_view: &gtk::TreeView, column_color: i32, column_size_as_bytes: i32, column_dimensions: i32) {
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let tree_model = tree_view.get_model().unwrap(); let tree_model = tree_view.model().unwrap();
let tree_iter_all = tree_model.get_iter_first().unwrap(); // Never should be available button where there is no available records let tree_iter_all = tree_model.iter_first().unwrap(); // Never should be available button where there is no available records
let mut end: bool = false; let mut end: bool = false;
@ -604,7 +604,7 @@ fn popover_all_except_smallest(popover: &gtk::Popover, tree_view: &gtk::TreeView
let mut smallest_number_of_pixels: u64 = u64::MAX; let mut smallest_number_of_pixels: u64 = u64::MAX;
loop { loop {
let color = tree_model.get_value(&tree_iter_all, column_color).get::<String>().unwrap().unwrap(); let color = tree_model.value(&tree_iter_all, column_color).get::<String>().unwrap();
if color == HEADER_ROW_COLOR { if color == HEADER_ROW_COLOR {
if !tree_model.iter_next(&tree_iter_all) { if !tree_model.iter_next(&tree_iter_all) {
end = true; end = true;
@ -612,8 +612,8 @@ fn popover_all_except_smallest(popover: &gtk::Popover, tree_view: &gtk::TreeView
break; break;
} }
tree_iter_array.push(tree_iter_all.clone()); tree_iter_array.push(tree_iter_all.clone());
let size_as_bytes = tree_model.get_value(&tree_iter_all, column_size_as_bytes).get::<u64>().unwrap().unwrap(); let size_as_bytes = tree_model.value(&tree_iter_all, column_size_as_bytes).get::<u64>().unwrap();
let dimensions_string = tree_model.get_value(&tree_iter_all, column_dimensions).get::<String>().unwrap().unwrap(); let dimensions_string = tree_model.value(&tree_iter_all, column_dimensions).get::<String>().unwrap();
let dimensions = change_dimension_to_krotka(dimensions_string); let dimensions = change_dimension_to_krotka(dimensions_string);
let number_of_pixels = dimensions.0 * dimensions.1; let number_of_pixels = dimensions.0 * dimensions.1;
@ -802,7 +802,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone(); let vec_popover_objects = popover_objects.clone();
buttons_popover_select_all.connect_clicked(move |_| { buttons_popover_select_all.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap(); let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_select_all(&popover_select, &object_popover.tree_view); popover_select_all(&popover_select, &object_popover.tree_view);
}); });
@ -811,7 +811,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone(); let vec_popover_objects = popover_objects.clone();
buttons_popover_unselect_all.connect_clicked(move |_| { buttons_popover_unselect_all.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap(); let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_unselect_all(&popover_select, &object_popover.tree_view); popover_unselect_all(&popover_select, &object_popover.tree_view);
}); });
@ -820,7 +820,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone(); let vec_popover_objects = popover_objects.clone();
buttons_popover_reverse.connect_clicked(move |_| { buttons_popover_reverse.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap(); let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_reverse(&popover_select, &object_popover.tree_view); popover_reverse(&popover_select, &object_popover.tree_view);
}); });
@ -829,7 +829,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone(); let vec_popover_objects = popover_objects.clone();
buttons_popover_select_all_except_oldest.connect_clicked(move |_| { buttons_popover_select_all_except_oldest.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap(); let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_all_except_oldest( popover_all_except_oldest(
&popover_select, &popover_select,
&object_popover.tree_view, &object_popover.tree_view,
@ -844,7 +844,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone(); let vec_popover_objects = popover_objects.clone();
buttons_popover_select_all_except_newest.connect_clicked(move |_| { buttons_popover_select_all_except_newest.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap(); let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_all_except_newest( popover_all_except_newest(
&popover_select, &popover_select,
&object_popover.tree_view, &object_popover.tree_view,
@ -859,7 +859,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone(); let vec_popover_objects = popover_objects.clone();
buttons_popover_select_one_oldest.connect_clicked(move |_| { buttons_popover_select_one_oldest.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap(); let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_one_oldest( popover_one_oldest(
&popover_select, &popover_select,
&object_popover.tree_view, &object_popover.tree_view,
@ -874,7 +874,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone(); let vec_popover_objects = popover_objects.clone();
buttons_popover_select_one_newest.connect_clicked(move |_| { buttons_popover_select_one_newest.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap(); let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_one_newest( popover_one_newest(
&popover_select, &popover_select,
&object_popover.tree_view, &object_popover.tree_view,
@ -890,7 +890,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let vec_popover_objects = popover_objects.clone(); let vec_popover_objects = popover_objects.clone();
let gui_data_clone = gui_data.clone(); let gui_data_clone = gui_data.clone();
buttons_popover_select_custom.connect_clicked(move |_| { buttons_popover_select_custom.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap(); let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_select_custom( popover_select_custom(
&popover_select, &popover_select,
&gui_data_clone, &gui_data_clone,
@ -907,7 +907,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let vec_popover_objects = popover_objects.clone(); let vec_popover_objects = popover_objects.clone();
let gui_data_clone = gui_data.clone(); let gui_data_clone = gui_data.clone();
buttons_popover_unselect_custom.connect_clicked(move |_| { buttons_popover_unselect_custom.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap(); let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_unselect_custom( popover_unselect_custom(
&popover_select, &popover_select,
&gui_data_clone, &gui_data_clone,
@ -923,7 +923,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects.clone(); let vec_popover_objects = popover_objects.clone();
buttons_popover_select_all_images_except_biggest.connect_clicked(move |_| { buttons_popover_select_all_images_except_biggest.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap(); let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_all_except_biggest( popover_all_except_biggest(
&popover_select, &popover_select,
&object_popover.tree_view, &object_popover.tree_view,
@ -938,7 +938,7 @@ pub fn connect_popovers(gui_data: &GuiData) {
let notebook_main = gui_data.main_notebook.notebook_main.clone(); let notebook_main = gui_data.main_notebook.notebook_main.clone();
let vec_popover_objects = popover_objects; //.clone(); let vec_popover_objects = popover_objects; //.clone();
buttons_popover_select_all_images_except_smallest.connect_clicked(move |_| { buttons_popover_select_all_images_except_smallest.connect_clicked(move |_| {
let object_popover = find_name(&to_notebook_main_enum(notebook_main.get_current_page().unwrap()), &vec_popover_objects).unwrap(); let object_popover = find_name(&to_notebook_main_enum(notebook_main.current_page().unwrap()), &vec_popover_objects).unwrap();
popover_all_except_smallest( popover_all_except_smallest(
&popover_select, &popover_select,
&object_popover.tree_view, &object_popover.tree_view,

View file

@ -4,7 +4,8 @@ use crate::taskbar_progress::tbp_flags::TBPF_INDETERMINATE;
use czkawka_core::{big_file, broken_files, duplicate, empty_files, empty_folder, invalid_symlinks, same_music, similar_images, temporary, zeroed}; use czkawka_core::{big_file, broken_files, duplicate, empty_files, empty_folder, invalid_symlinks, same_music, similar_images, temporary, zeroed};
use futures::StreamExt; use futures::StreamExt;
use gtk::{LabelExt, ProgressBarExt, WidgetExt};
use gtk::prelude::*;
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
pub fn connect_progress_window( pub fn connect_progress_window(
@ -21,6 +22,7 @@ pub fn connect_progress_window(
mut futures_receiver_broken_files: futures::channel::mpsc::UnboundedReceiver<broken_files::ProgressData>, mut futures_receiver_broken_files: futures::channel::mpsc::UnboundedReceiver<broken_files::ProgressData>,
) { ) {
let main_context = glib::MainContext::default(); let main_context = glib::MainContext::default();
let _guard = main_context.acquire().unwrap();
{ {
// Duplicate Files // Duplicate Files

View file

@ -16,7 +16,7 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
let dialog_manual_add_directory = gtk::Dialog::with_buttons(Some("Add directory manually"), Some(&window_main), gtk::DialogFlags::MODAL, &[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)]); let dialog_manual_add_directory = gtk::Dialog::with_buttons(Some("Add directory manually"), Some(&window_main), gtk::DialogFlags::MODAL, &[("Ok", gtk::ResponseType::Ok), ("Close", gtk::ResponseType::Cancel)]);
let entry: gtk::Entry = gtk::Entry::new(); let entry: gtk::Entry = gtk::Entry::new();
for widgets in dialog_manual_add_directory.get_children() { for widgets in dialog_manual_add_directory.children() {
// By default GtkBox is child of dialog, so we can easily add other things to it // By default GtkBox is child of dialog, so we can easily add other things to it
widgets.clone().downcast::<gtk::Box>().unwrap().add(&entry); widgets.clone().downcast::<gtk::Box>().unwrap().add(&entry);
} }
@ -25,7 +25,7 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
let response_type = dialog_manual_add_directory.run(); let response_type = dialog_manual_add_directory.run();
if response_type == gtk::ResponseType::Ok { if response_type == gtk::ResponseType::Ok {
let text = entry.get_text().to_string().trim().to_string(); let text = entry.text().to_string().trim().to_string();
#[cfg(target_family = "windows")] #[cfg(target_family = "windows")]
let text = Common::normalize_windows_path(text).to_string_lossy().to_string(); let text = Common::normalize_windows_path(text).to_string_lossy().to_string();
@ -33,10 +33,8 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
if !text.is_empty() { if !text.is_empty() {
let list_store = get_list_store(&tree_view_included_directories); let list_store = get_list_store(&tree_view_included_directories);
let col_indices = [0]; let values: [(u32, &dyn ToValue); 1] = [(0, &text)];
list_store.set(&list_store.append(), &values);
let values: [&dyn ToValue; 1] = [&text];
list_store.set(&list_store.append(), &col_indices, &values);
} }
} else { } else {
dialog_manual_add_directory.close(); dialog_manual_add_directory.close();
@ -59,7 +57,7 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
); );
let entry: gtk::Entry = gtk::Entry::new(); let entry: gtk::Entry = gtk::Entry::new();
for widgets in dialog_manual_add_directory.get_children() { for widgets in dialog_manual_add_directory.children() {
// By default GtkBox is child of dialog, so we can easily add other things to it // By default GtkBox is child of dialog, so we can easily add other things to it
widgets.clone().downcast::<gtk::Box>().unwrap().add(&entry); widgets.clone().downcast::<gtk::Box>().unwrap().add(&entry);
} }
@ -68,7 +66,7 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
let response_type = dialog_manual_add_directory.run(); let response_type = dialog_manual_add_directory.run();
if response_type == gtk::ResponseType::Ok { if response_type == gtk::ResponseType::Ok {
let text = entry.get_text().to_string().trim().to_string(); let text = entry.text().to_string().trim().to_string();
#[cfg(target_family = "windows")] #[cfg(target_family = "windows")]
let text = Common::normalize_windows_path(text).to_string_lossy().to_string(); let text = Common::normalize_windows_path(text).to_string_lossy().to_string();
@ -76,10 +74,8 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
if !text.is_empty() { if !text.is_empty() {
let list_store = get_list_store(&tree_view_excluded_directories); let list_store = get_list_store(&tree_view_excluded_directories);
let col_indices = [0]; let values: [(u32, &dyn ToValue); 1] = [(0, &text)];
list_store.set(&list_store.append(), &values);
let values: [&dyn ToValue; 1] = [&text];
list_store.set(&list_store.append(), &col_indices, &values);
} }
} else { } else {
dialog_manual_add_directory.close(); dialog_manual_add_directory.close();
@ -104,14 +100,13 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
chooser.show_all(); chooser.show_all();
let response_type = chooser.run(); let response_type = chooser.run();
if response_type == gtk::ResponseType::Ok { if response_type == gtk::ResponseType::Ok {
let folder = chooser.get_filenames(); let folder = chooser.filenames();
let list_store = get_list_store(&tree_view_included_directories); let list_store = get_list_store(&tree_view_included_directories);
let col_indices = [0];
for file_entry in &folder { for file_entry in &folder {
let values: [&dyn ToValue; 1] = [&file_entry.to_string_lossy().to_string()]; let values: [(u32, &dyn ToValue); 1] = [(0, &file_entry.to_string_lossy().to_string())];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
} }
chooser.close(); chooser.close();
@ -133,15 +128,13 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
chooser.show_all(); chooser.show_all();
let response_type = chooser.run(); let response_type = chooser.run();
if response_type == gtk::ResponseType::Ok { if response_type == gtk::ResponseType::Ok {
let folder = chooser.get_filenames(); let folder = chooser.filenames();
let list_store = get_list_store(&tree_view_excluded_directories); let list_store = get_list_store(&tree_view_excluded_directories);
let col_indices = [0];
for file_entry in &folder { for file_entry in &folder {
let values: [&dyn ToValue; 1] = [&file_entry.to_string_lossy().to_string()]; let values: [(u32, &dyn ToValue); 1] = [(0, &file_entry.to_string_lossy().to_string())];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
} }
chooser.close(); chooser.close();
@ -153,12 +146,12 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone(); let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone();
buttons_remove_excluded_directory.connect_clicked(move |_| { buttons_remove_excluded_directory.connect_clicked(move |_| {
let list_store = get_list_store(&tree_view_excluded_directories); let list_store = get_list_store(&tree_view_excluded_directories);
let selection = tree_view_excluded_directories.get_selection(); let selection = tree_view_excluded_directories.selection();
let (vec_tree_path, _tree_model) = selection.get_selected_rows(); let (vec_tree_path, _tree_model) = selection.selected_rows();
for tree_path in vec_tree_path.iter().rev() { for tree_path in vec_tree_path.iter().rev() {
list_store.remove(&list_store.get_iter(tree_path).unwrap()); list_store.remove(&list_store.iter(tree_path).unwrap());
} }
}); });
} }
@ -168,12 +161,12 @@ pub fn connect_selection_of_directories(gui_data: &GuiData) {
let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone(); let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone();
buttons_remove_included_directory.connect_clicked(move |_| { buttons_remove_included_directory.connect_clicked(move |_| {
let list_store = get_list_store(&tree_view_included_directories); let list_store = get_list_store(&tree_view_included_directories);
let selection = tree_view_included_directories.get_selection(); let selection = tree_view_included_directories.selection();
let (vec_tree_path, _tree_model) = selection.get_selected_rows(); let (vec_tree_path, _tree_model) = selection.selected_rows();
for tree_path in vec_tree_path.iter().rev() { for tree_path in vec_tree_path.iter().rev() {
list_store.remove(&list_store.get_iter(tree_path).unwrap()); list_store.remove(&list_store.iter(tree_path).unwrap());
} }
}); });
} }

View file

@ -4,149 +4,149 @@ use gtk::prelude::*;
// TODO add option to open files and folders from context menu activated by pressing ONCE with right mouse button // TODO add option to open files and folders from context menu activated by pressing ONCE with right mouse button
pub fn opening_double_click_function_duplicates(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { pub fn opening_double_click_function_duplicates(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { } else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, OpenMode::OnlyPath); common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, OpenMode::OnlyPath);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_enter_function_duplicates(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit { pub fn opening_enter_function_duplicates(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) { if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsDuplicates::Name as i32, ColumnsDuplicates::Path as i32, OpenMode::PathAndName);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_double_click_function_empty_folders(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { pub fn opening_double_click_function_empty_folders(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { } else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, OpenMode::OnlyPath); common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, OpenMode::OnlyPath);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_enter_function_empty_folders(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit { pub fn opening_enter_function_empty_folders(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) { if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, OpenMode::PathAndName);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_double_click_function_empty_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { pub fn opening_double_click_function_empty_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { } else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, OpenMode::OnlyPath); common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, OpenMode::OnlyPath);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_enter_function_empty_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit { pub fn opening_enter_function_empty_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) { if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, OpenMode::PathAndName);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_double_click_function_temporary_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { pub fn opening_double_click_function_temporary_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { } else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, OpenMode::OnlyPath); common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, OpenMode::OnlyPath);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_enter_function_temporary_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit { pub fn opening_enter_function_temporary_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) { if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, OpenMode::PathAndName);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_double_click_function_big_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { pub fn opening_double_click_function_big_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { } else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, OpenMode::OnlyPath); common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, OpenMode::OnlyPath);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_enter_function_big_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit { pub fn opening_enter_function_big_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) { if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, OpenMode::PathAndName);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_double_click_function_zeroed_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { pub fn opening_double_click_function_zeroed_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { } else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, OpenMode::OnlyPath); common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, OpenMode::OnlyPath);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_enter_function_zeroed_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit { pub fn opening_enter_function_zeroed_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) { if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, OpenMode::PathAndName);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_double_click_function_same_music(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { pub fn opening_double_click_function_same_music(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { } else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, OpenMode::OnlyPath); common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, OpenMode::OnlyPath);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_enter_function_same_music(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit { pub fn opening_enter_function_same_music(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) { if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsSameMusic::Name as i32, ColumnsSameMusic::Path as i32, OpenMode::PathAndName);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_double_click_function_similar_images(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { pub fn opening_double_click_function_similar_images(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { } else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32, OpenMode::OnlyPath); common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32, OpenMode::OnlyPath);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_enter_function_similar_images(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit { pub fn opening_enter_function_similar_images(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) { if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsSimilarImages::Name as i32, ColumnsSimilarImages::Path as i32, OpenMode::PathAndName);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_double_click_function_invalid_symlinks(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { pub fn opening_double_click_function_invalid_symlinks(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { } else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, OpenMode::OnlyPath); common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, OpenMode::OnlyPath);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_enter_function_invalid_symlinks(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit { pub fn opening_enter_function_invalid_symlinks(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) { if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, OpenMode::PathAndName);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_double_click_function_broken_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit { pub fn opening_double_click_function_broken_files(tree_view: &gtk::TreeView, event: &gdk::EventButton) -> gtk::Inhibit {
if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 1 { if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 1 {
common_open_function(tree_view, ColumnsBrokenFiles::Name as i32, ColumnsBrokenFiles::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsBrokenFiles::Name as i32, ColumnsBrokenFiles::Path as i32, OpenMode::PathAndName);
} else if event.get_event_type() == gdk::EventType::DoubleButtonPress && event.get_button() == 3 { } else if event.event_type() == gdk::EventType::DoubleButtonPress && event.button() == 3 {
common_open_function(tree_view, ColumnsBrokenFiles::Name as i32, ColumnsBrokenFiles::Path as i32, OpenMode::OnlyPath); common_open_function(tree_view, ColumnsBrokenFiles::Name as i32, ColumnsBrokenFiles::Path as i32, OpenMode::OnlyPath);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
} }
pub fn opening_enter_function_broken_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit { pub fn opening_enter_function_broken_files(tree_view: &gtk::TreeView, event: &gdk::EventKey) -> gtk::Inhibit {
if event.get_keycode() == Some(36) { if event.keycode() == Some(36) {
common_open_function(tree_view, ColumnsBrokenFiles::Name as i32, ColumnsBrokenFiles::Path as i32, OpenMode::PathAndName); common_open_function(tree_view, ColumnsBrokenFiles::Name as i32, ColumnsBrokenFiles::Path as i32, OpenMode::PathAndName);
} }
gtk::Inhibit(false) gtk::Inhibit(false)
@ -158,13 +158,13 @@ pub enum OpenMode {
} }
pub fn common_open_function(tree_view: &gtk::TreeView, column_name: i32, column_path: i32, opening_mode: OpenMode) { pub fn common_open_function(tree_view: &gtk::TreeView, column_name: i32, column_path: i32, opening_mode: OpenMode) {
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let (selection_rows, tree_model) = selection.get_selected_rows(); let (selection_rows, tree_model) = selection.selected_rows();
for tree_path in selection_rows.iter().rev() { for tree_path in selection_rows.iter().rev() {
let end_path; let end_path;
let name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_name).get::<String>().unwrap().unwrap(); let name = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_name).get::<String>().unwrap();
let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), column_path).get::<String>().unwrap().unwrap(); let path = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_path).get::<String>().unwrap();
match opening_mode { match opening_mode {
OpenMode::OnlyPath => { OpenMode::OnlyPath => {

View file

@ -12,12 +12,12 @@ pub struct GuiAbout {
impl GuiAbout { impl GuiAbout {
pub fn create_from_builder(builder: &gtk::Builder) -> Self { pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let about_dialog: gtk::AboutDialog = builder.get_object("about_dialog").unwrap(); let about_dialog: gtk::AboutDialog = builder.object("about_dialog").unwrap();
about_dialog.set_position(WindowPosition::Center); about_dialog.set_position(WindowPosition::Center);
let button_repository: gtk::Button = builder.get_object("button_repository").unwrap(); let button_repository: gtk::Button = builder.object("button_repository").unwrap();
let button_donation: gtk::Button = builder.get_object("button_donation").unwrap(); let button_donation: gtk::Button = builder.object("button_donation").unwrap();
let button_instruction: gtk::Button = builder.get_object("button_instruction").unwrap(); let button_instruction: gtk::Button = builder.object("button_instruction").unwrap();
Self { Self {
about_dialog, about_dialog,

View file

@ -16,14 +16,14 @@ pub struct GuiBottomButtons {
impl GuiBottomButtons { impl GuiBottomButtons {
pub fn create_from_builder(builder: &gtk::Builder) -> Self { pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let buttons_search: gtk::Button = builder.get_object("buttons_search").unwrap(); let buttons_search: gtk::Button = builder.object("buttons_search").unwrap();
let buttons_select: gtk::Button = builder.get_object("buttons_select").unwrap(); let buttons_select: gtk::Button = builder.object("buttons_select").unwrap();
let buttons_delete: gtk::Button = builder.get_object("buttons_delete").unwrap(); let buttons_delete: gtk::Button = builder.object("buttons_delete").unwrap();
let buttons_save: gtk::Button = builder.get_object("buttons_save").unwrap(); let buttons_save: gtk::Button = builder.object("buttons_save").unwrap();
let buttons_symlink: gtk::Button = builder.get_object("buttons_symlink").unwrap(); let buttons_symlink: gtk::Button = builder.object("buttons_symlink").unwrap();
let buttons_hardlink: gtk::Button = builder.get_object("buttons_hardlink").unwrap(); let buttons_hardlink: gtk::Button = builder.object("buttons_hardlink").unwrap();
let buttons_show_errors: gtk::Button = builder.get_object("buttons_show_errors").unwrap(); let buttons_show_errors: gtk::Button = builder.object("buttons_show_errors").unwrap();
let buttons_names = ["search".to_string(), "select".to_string(), "delete".to_string(), "save".to_string(), "symlink".to_string(), "hardlink".to_string()]; let buttons_names = ["search".to_string(), "select".to_string(), "delete".to_string(), "save".to_string(), "symlink".to_string(), "hardlink".to_string()];
let buttons_array = [buttons_search.clone(), buttons_select.clone(), buttons_delete.clone(), buttons_save.clone(), buttons_symlink.clone(), buttons_hardlink.clone()]; let buttons_array = [buttons_search.clone(), buttons_select.clone(), buttons_delete.clone(), buttons_save.clone(), buttons_symlink.clone(), buttons_hardlink.clone()];

View file

@ -84,7 +84,7 @@ impl GuiData {
let builder = Builder::from_string(glade_src.as_str()); let builder = Builder::from_string(glade_src.as_str());
//// Windows //// Windows
let window_main: gtk::Window = builder.get_object("window_main").unwrap(); let window_main: gtk::Window = builder.object("window_main").unwrap();
window_main.show_all(); window_main.show_all();
window_main.set_title("Czkawka"); window_main.set_title("Czkawka");
window_main.set_position(WindowPosition::Center); window_main.set_position(WindowPosition::Center);
@ -146,11 +146,11 @@ impl GuiData {
let shared_broken_files_state: Rc<RefCell<_>> = Rc::new(RefCell::new(BrokenFiles::new())); let shared_broken_files_state: Rc<RefCell<_>> = Rc::new(RefCell::new(BrokenFiles::new()));
//// Entry //// Entry
let entry_info: gtk::Entry = builder.get_object("entry_info").unwrap(); let entry_info: gtk::Entry = builder.object("entry_info").unwrap();
//// Bottom //// Bottom
let text_view_errors: gtk::TextView = builder.get_object("text_view_errors").unwrap(); let text_view_errors: gtk::TextView = builder.object("text_view_errors").unwrap();
let scrolled_window_errors: gtk::ScrolledWindow = builder.get_object("scrolled_window_errors").unwrap(); let scrolled_window_errors: gtk::ScrolledWindow = builder.object("scrolled_window_errors").unwrap();
scrolled_window_errors.show_all(); // Not sure why needed, but without it text view errors sometimes hide itself scrolled_window_errors.show_all(); // Not sure why needed, but without it text view errors sometimes hide itself
// Used for sending stop signal to thread // Used for sending stop signal to thread

View file

@ -8,8 +8,8 @@ pub struct GuiHeader {
impl GuiHeader { impl GuiHeader {
pub fn create_from_builder(builder: &gtk::Builder) -> Self { pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let button_settings: gtk::Button = builder.get_object("button_settings").unwrap(); let button_settings: gtk::Button = builder.object("button_settings").unwrap();
let button_app_info: gtk::Button = builder.get_object("button_app_info").unwrap(); let button_app_info: gtk::Button = builder.object("button_app_info").unwrap();
Self { button_settings, button_app_info } Self { button_settings, button_app_info }
} }
} }

View file

@ -62,18 +62,18 @@ pub struct GuiMainNotebook {
impl GuiMainNotebook { impl GuiMainNotebook {
pub fn create_from_builder(builder: &gtk::Builder) -> Self { pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let notebook_main: gtk::Notebook = builder.get_object("notebook_main").unwrap(); let notebook_main: gtk::Notebook = builder.object("notebook_main").unwrap();
let scrolled_window_duplicate_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_duplicate_finder").unwrap(); let scrolled_window_duplicate_finder: gtk::ScrolledWindow = builder.object("scrolled_window_duplicate_finder").unwrap();
let scrolled_window_empty_folder_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_empty_folder_finder").unwrap(); let scrolled_window_empty_folder_finder: gtk::ScrolledWindow = builder.object("scrolled_window_empty_folder_finder").unwrap();
let scrolled_window_empty_files_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_empty_files_finder").unwrap(); let scrolled_window_empty_files_finder: gtk::ScrolledWindow = builder.object("scrolled_window_empty_files_finder").unwrap();
let scrolled_window_temporary_files_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_temporary_files_finder").unwrap(); let scrolled_window_temporary_files_finder: gtk::ScrolledWindow = builder.object("scrolled_window_temporary_files_finder").unwrap();
let scrolled_window_big_files_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_big_files_finder").unwrap(); let scrolled_window_big_files_finder: gtk::ScrolledWindow = builder.object("scrolled_window_big_files_finder").unwrap();
let scrolled_window_similar_images_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_similar_images_finder").unwrap(); let scrolled_window_similar_images_finder: gtk::ScrolledWindow = builder.object("scrolled_window_similar_images_finder").unwrap();
let scrolled_window_zeroed_files_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_zeroed_files_finder").unwrap(); let scrolled_window_zeroed_files_finder: gtk::ScrolledWindow = builder.object("scrolled_window_zeroed_files_finder").unwrap();
let scrolled_window_same_music_finder: gtk::ScrolledWindow = builder.get_object("scrolled_window_same_music_finder").unwrap(); let scrolled_window_same_music_finder: gtk::ScrolledWindow = builder.object("scrolled_window_same_music_finder").unwrap();
let scrolled_window_invalid_symlinks: gtk::ScrolledWindow = builder.get_object("scrolled_window_invalid_symlinks").unwrap(); let scrolled_window_invalid_symlinks: gtk::ScrolledWindow = builder.object("scrolled_window_invalid_symlinks").unwrap();
let scrolled_window_broken_files: gtk::ScrolledWindow = builder.get_object("scrolled_window_broken_files").unwrap(); let scrolled_window_broken_files: gtk::ScrolledWindow = builder.object("scrolled_window_broken_files").unwrap();
let tree_view_duplicate_finder: gtk::TreeView = TreeView::new(); let tree_view_duplicate_finder: gtk::TreeView = TreeView::new();
let tree_view_empty_folder_finder: gtk::TreeView = TreeView::new(); let tree_view_empty_folder_finder: gtk::TreeView = TreeView::new();
@ -86,36 +86,36 @@ impl GuiMainNotebook {
let tree_view_invalid_symlinks: gtk::TreeView = TreeView::new(); let tree_view_invalid_symlinks: gtk::TreeView = TreeView::new();
let tree_view_broken_files: gtk::TreeView = TreeView::new(); let tree_view_broken_files: gtk::TreeView = TreeView::new();
let entry_similar_images_minimal_size: gtk::Entry = builder.get_object("entry_similar_images_minimal_size").unwrap(); let entry_similar_images_minimal_size: gtk::Entry = builder.object("entry_similar_images_minimal_size").unwrap();
let entry_duplicate_minimal_size: gtk::Entry = builder.get_object("entry_duplicate_minimal_size").unwrap(); let entry_duplicate_minimal_size: gtk::Entry = builder.object("entry_duplicate_minimal_size").unwrap();
let entry_big_files_number: gtk::Entry = builder.get_object("entry_big_files_number").unwrap(); let entry_big_files_number: gtk::Entry = builder.object("entry_big_files_number").unwrap();
let entry_same_music_minimal_size: gtk::Entry = builder.get_object("entry_same_music_minimal_size").unwrap(); let entry_same_music_minimal_size: gtk::Entry = builder.object("entry_same_music_minimal_size").unwrap();
//// Check Buttons //// Check Buttons
let check_button_music_title: gtk::CheckButton = builder.get_object("check_button_music_title").unwrap(); let check_button_music_title: gtk::CheckButton = builder.object("check_button_music_title").unwrap();
let check_button_music_artist: gtk::CheckButton = builder.get_object("check_button_music_artist").unwrap(); let check_button_music_artist: gtk::CheckButton = builder.object("check_button_music_artist").unwrap();
let check_button_music_album_title: gtk::CheckButton = builder.get_object("check_button_music_album_title").unwrap(); let check_button_music_album_title: gtk::CheckButton = builder.object("check_button_music_album_title").unwrap();
let check_button_music_album_artist: gtk::CheckButton = builder.get_object("check_button_music_album_artist").unwrap(); let check_button_music_album_artist: gtk::CheckButton = builder.object("check_button_music_album_artist").unwrap();
let check_button_music_year: gtk::CheckButton = builder.get_object("check_button_music_year").unwrap(); let check_button_music_year: gtk::CheckButton = builder.object("check_button_music_year").unwrap();
//// Radio Buttons //// Radio Buttons
let radio_button_duplicates_name: gtk::RadioButton = builder.get_object("radio_button_duplicates_name").unwrap(); let radio_button_duplicates_name: gtk::RadioButton = builder.object("radio_button_duplicates_name").unwrap();
let radio_button_duplicates_size: gtk::RadioButton = builder.get_object("radio_button_duplicates_size").unwrap(); let radio_button_duplicates_size: gtk::RadioButton = builder.object("radio_button_duplicates_size").unwrap();
let radio_button_duplicates_hashmb: gtk::RadioButton = builder.get_object("radio_button_duplicates_hashmb").unwrap(); let radio_button_duplicates_hashmb: gtk::RadioButton = builder.object("radio_button_duplicates_hashmb").unwrap();
let radio_button_duplicates_hash: gtk::RadioButton = builder.get_object("radio_button_duplicates_hash").unwrap(); let radio_button_duplicates_hash: gtk::RadioButton = builder.object("radio_button_duplicates_hash").unwrap();
let radio_button_similar_images_minimal: gtk::RadioButton = builder.get_object("radio_button_similar_images_minimal").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.get_object("radio_button_similar_images_very_small").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.get_object("radio_button_similar_images_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.get_object("radio_button_similar_images_medium").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.get_object("radio_button_similar_images_high").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.get_object("radio_button_similar_images_very_high").unwrap(); let radio_button_similar_images_very_high: gtk::RadioButton = builder.object("radio_button_similar_images_very_high").unwrap();
let radio_button_hash_type_blake3: gtk::RadioButton = builder.get_object("radio_button_hash_type_blake3").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.get_object("radio_button_hash_type_crc32").unwrap(); let radio_button_hash_type_crc32: gtk::RadioButton = builder.object("radio_button_hash_type_crc32").unwrap();
let radio_button_hash_type_xxh3: gtk::RadioButton = builder.get_object("radio_button_hash_type_xxh3").unwrap(); let radio_button_hash_type_xxh3: gtk::RadioButton = builder.object("radio_button_hash_type_xxh3").unwrap();
let image_preview_similar_images: gtk::Image = builder.get_object("image_preview_similar_images").unwrap(); let image_preview_similar_images: gtk::Image = builder.object("image_preview_similar_images").unwrap();
Self { Self {
notebook_main, notebook_main,

View file

@ -28,28 +28,28 @@ pub struct GuiPopovers {
impl GuiPopovers { impl GuiPopovers {
pub fn create_from_builder(builder: &gtk::Builder) -> Self { pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let buttons_popover_select_all: gtk::Button = builder.get_object("buttons_popover_select_all").unwrap(); let buttons_popover_select_all: gtk::Button = builder.object("buttons_popover_select_all").unwrap();
let buttons_popover_unselect_all: gtk::Button = builder.get_object("buttons_popover_unselect_all").unwrap(); let buttons_popover_unselect_all: gtk::Button = builder.object("buttons_popover_unselect_all").unwrap();
let buttons_popover_reverse: gtk::Button = builder.get_object("buttons_popover_reverse").unwrap(); let buttons_popover_reverse: gtk::Button = builder.object("buttons_popover_reverse").unwrap();
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_oldest: gtk::Button = builder.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_all_except_newest: gtk::Button = builder.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_oldest: gtk::Button = builder.object("buttons_popover_select_one_oldest").unwrap();
let buttons_popover_select_one_newest: gtk::Button = builder.get_object("buttons_popover_select_one_newest").unwrap(); let buttons_popover_select_one_newest: gtk::Button = builder.object("buttons_popover_select_one_newest").unwrap();
let buttons_popover_select_custom: gtk::Button = builder.get_object("buttons_popover_select_custom").unwrap(); let buttons_popover_select_custom: gtk::Button = builder.object("buttons_popover_select_custom").unwrap();
let buttons_popover_unselect_custom: gtk::Button = builder.get_object("buttons_popover_unselect_custom").unwrap(); let buttons_popover_unselect_custom: gtk::Button = builder.object("buttons_popover_unselect_custom").unwrap();
let buttons_popover_select_all_images_except_biggest: gtk::Button = builder.get_object("buttons_popover_select_all_images_except_biggest").unwrap(); let buttons_popover_select_all_images_except_biggest: gtk::Button = builder.object("buttons_popover_select_all_images_except_biggest").unwrap();
let buttons_popover_select_all_images_except_smallest: gtk::Button = builder.get_object("buttons_popover_select_all_images_except_smallest").unwrap(); let buttons_popover_select_all_images_except_smallest: gtk::Button = builder.object("buttons_popover_select_all_images_except_smallest").unwrap();
let separator_select_image_size: gtk::Separator = builder.get_object("separator_select_image_size").unwrap(); let separator_select_image_size: gtk::Separator = builder.object("separator_select_image_size").unwrap();
let separator_select_reverse: gtk::Separator = builder.get_object("separator_select_reverse").unwrap(); let separator_select_reverse: gtk::Separator = builder.object("separator_select_reverse").unwrap();
let separator_select_date: gtk::Separator = builder.get_object("separator_select_date").unwrap(); let separator_select_date: gtk::Separator = builder.object("separator_select_date").unwrap();
let separator_select_custom: gtk::Separator = builder.get_object("separator_select_custom").unwrap(); let separator_select_custom: gtk::Separator = builder.object("separator_select_custom").unwrap();
let buttons_popover_right_click_open_file: gtk::Button = builder.get_object("buttons_popover_right_click_open_file").unwrap(); let buttons_popover_right_click_open_file: gtk::Button = builder.object("buttons_popover_right_click_open_file").unwrap();
let buttons_popover_right_click_open_folder: gtk::Button = builder.get_object("buttons_popover_right_click_open_folder").unwrap(); let buttons_popover_right_click_open_folder: gtk::Button = builder.object("buttons_popover_right_click_open_folder").unwrap();
let popover_select: gtk::Popover = builder.get_object("popover_select").unwrap(); let popover_select: gtk::Popover = builder.object("popover_select").unwrap();
let popover_right_click: gtk::Popover = builder.get_object("popover_right_click").unwrap(); let popover_right_click: gtk::Popover = builder.object("popover_right_click").unwrap();
Self { Self {
buttons_popover_select_all, buttons_popover_select_all,

View file

@ -16,16 +16,16 @@ pub struct GuiProgressDialog {
impl GuiProgressDialog { impl GuiProgressDialog {
pub fn create_from_builder(builder: &gtk::Builder) -> Self { pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let window_progress: gtk::Window = builder.get_object("window_progress").unwrap(); let window_progress: gtk::Window = builder.object("window_progress").unwrap();
let progress_bar_current_stage: gtk::ProgressBar = builder.get_object("progress_bar_current_stage").unwrap(); let progress_bar_current_stage: gtk::ProgressBar = builder.object("progress_bar_current_stage").unwrap();
let progress_bar_all_stages: gtk::ProgressBar = builder.get_object("progress_bar_all_stages").unwrap(); let progress_bar_all_stages: gtk::ProgressBar = builder.object("progress_bar_all_stages").unwrap();
let label_stage: gtk::Label = builder.get_object("label_stage").unwrap(); let label_stage: gtk::Label = builder.object("label_stage").unwrap();
let grid_progress_stages: gtk::Grid = builder.get_object("grid_progress_stages").unwrap(); let grid_progress_stages: gtk::Grid = builder.object("grid_progress_stages").unwrap();
let button_stop_in_dialog: gtk::Button = builder.get_object("button_stop_in_dialog").unwrap(); let button_stop_in_dialog: gtk::Button = builder.object("button_stop_in_dialog").unwrap();
Self { Self {
window_progress, window_progress,

View file

@ -29,29 +29,29 @@ pub struct GuiSettings {
impl GuiSettings { impl GuiSettings {
pub fn create_from_builder(builder: &gtk::Builder) -> Self { pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let window_settings: gtk::Window = builder.get_object("window_settings").unwrap(); let window_settings: gtk::Window = builder.object("window_settings").unwrap();
window_settings.set_position(WindowPosition::Center); window_settings.set_position(WindowPosition::Center);
// General // General
let check_button_settings_save_at_exit: gtk::CheckButton = builder.get_object("check_button_settings_save_at_exit").unwrap(); let check_button_settings_save_at_exit: gtk::CheckButton = builder.object("check_button_settings_save_at_exit").unwrap();
let check_button_settings_load_at_start: gtk::CheckButton = builder.get_object("check_button_settings_load_at_start").unwrap(); let check_button_settings_load_at_start: gtk::CheckButton = builder.object("check_button_settings_load_at_start").unwrap();
let check_button_settings_confirm_deletion: gtk::CheckButton = builder.get_object("check_button_settings_confirm_deletion").unwrap(); let check_button_settings_confirm_deletion: gtk::CheckButton = builder.object("check_button_settings_confirm_deletion").unwrap();
let check_button_settings_confirm_group_deletion: gtk::CheckButton = builder.get_object("check_button_settings_confirm_group_deletion").unwrap(); let check_button_settings_confirm_group_deletion: gtk::CheckButton = builder.object("check_button_settings_confirm_group_deletion").unwrap();
let check_button_settings_show_text_view: gtk::CheckButton = builder.get_object("check_button_settings_show_text_view").unwrap(); let check_button_settings_show_text_view: gtk::CheckButton = builder.object("check_button_settings_show_text_view").unwrap();
let check_button_settings_use_cache: gtk::CheckButton = builder.get_object("check_button_settings_use_cache").unwrap(); let check_button_settings_use_cache: gtk::CheckButton = builder.object("check_button_settings_use_cache").unwrap();
let check_button_settings_use_trash: gtk::CheckButton = builder.get_object("check_button_settings_use_trash").unwrap(); let check_button_settings_use_trash: gtk::CheckButton = builder.object("check_button_settings_use_trash").unwrap();
// Duplicates // Duplicates
let check_button_settings_hide_hard_links: gtk::CheckButton = builder.get_object("check_button_settings_hide_hard_links").unwrap(); let check_button_settings_hide_hard_links: gtk::CheckButton = builder.object("check_button_settings_hide_hard_links").unwrap();
let entry_settings_cache_file_minimal_size: gtk::Entry = builder.get_object("entry_settings_cache_file_minimal_size").unwrap(); let entry_settings_cache_file_minimal_size: gtk::Entry = builder.object("entry_settings_cache_file_minimal_size").unwrap();
// Similar Images // Similar Images
let check_button_settings_show_preview_similar_images: gtk::CheckButton = builder.get_object("check_button_settings_show_preview_similar_images").unwrap(); let check_button_settings_show_preview_similar_images: gtk::CheckButton = builder.object("check_button_settings_show_preview_similar_images").unwrap();
// Saving/Loading/Resetting configuration // Saving/Loading/Resetting configuration
let button_settings_save_configuration: gtk::Button = builder.get_object("button_settings_save_configuration").unwrap(); let button_settings_save_configuration: gtk::Button = builder.object("button_settings_save_configuration").unwrap();
let button_settings_load_configuration: gtk::Button = builder.get_object("button_settings_load_configuration").unwrap(); let button_settings_load_configuration: gtk::Button = builder.object("button_settings_load_configuration").unwrap();
let button_settings_reset_configuration: gtk::Button = builder.get_object("button_settings_reset_configuration").unwrap(); let button_settings_reset_configuration: gtk::Button = builder.object("button_settings_reset_configuration").unwrap();
Self { Self {
window_settings, window_settings,

View file

@ -26,25 +26,25 @@ pub struct GuiUpperNotebook {
impl GuiUpperNotebook { impl GuiUpperNotebook {
pub fn create_from_builder(builder: &gtk::Builder) -> Self { pub fn create_from_builder(builder: &gtk::Builder) -> Self {
let notebook_upper: gtk::Notebook = builder.get_object("notebook_upper").unwrap(); let notebook_upper: gtk::Notebook = builder.object("notebook_upper").unwrap();
let scrolled_window_included_directories: gtk::ScrolledWindow = builder.get_object("scrolled_window_included_directories").unwrap(); let scrolled_window_included_directories: gtk::ScrolledWindow = builder.object("scrolled_window_included_directories").unwrap();
let scrolled_window_excluded_directories: gtk::ScrolledWindow = builder.get_object("scrolled_window_excluded_directories").unwrap(); let scrolled_window_excluded_directories: gtk::ScrolledWindow = builder.object("scrolled_window_excluded_directories").unwrap();
let tree_view_included_directories: gtk::TreeView = TreeView::new(); let tree_view_included_directories: gtk::TreeView = TreeView::new();
let tree_view_excluded_directories: gtk::TreeView = TreeView::new(); let tree_view_excluded_directories: gtk::TreeView = TreeView::new();
let entry_allowed_extensions: gtk::Entry = builder.get_object("entry_allowed_extensions").unwrap(); let entry_allowed_extensions: gtk::Entry = builder.object("entry_allowed_extensions").unwrap();
let entry_excluded_items: gtk::Entry = builder.get_object("entry_excluded_items").unwrap(); let entry_excluded_items: gtk::Entry = builder.object("entry_excluded_items").unwrap();
let check_button_recursive: gtk::CheckButton = builder.get_object("check_button_recursive").unwrap(); let check_button_recursive: gtk::CheckButton = builder.object("check_button_recursive").unwrap();
let buttons_manual_add_directory: gtk::Button = builder.get_object("buttons_manual_add_directory").unwrap(); let buttons_manual_add_directory: gtk::Button = builder.object("buttons_manual_add_directory").unwrap();
let buttons_add_included_directory: gtk::Button = builder.get_object("buttons_add_included_directory").unwrap(); let buttons_add_included_directory: gtk::Button = builder.object("buttons_add_included_directory").unwrap();
let buttons_remove_included_directory: gtk::Button = builder.get_object("buttons_remove_included_directory").unwrap(); let buttons_remove_included_directory: gtk::Button = builder.object("buttons_remove_included_directory").unwrap();
let buttons_manual_add_excluded_directory: gtk::Button = builder.get_object("buttons_manual_add_excluded_directory").unwrap(); let buttons_manual_add_excluded_directory: gtk::Button = builder.object("buttons_manual_add_excluded_directory").unwrap();
let buttons_add_excluded_directory: gtk::Button = builder.get_object("buttons_add_excluded_directory").unwrap(); let buttons_add_excluded_directory: gtk::Button = builder.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.object("buttons_remove_excluded_directory").unwrap();
Self { Self {
notebook_upper, notebook_upper,

View file

@ -124,14 +124,14 @@ pub fn get_string_from_list_store(tree_view: &gtk::TreeView) -> Vec<String> {
let mut string_vector: Vec<String> = Vec::new(); let mut string_vector: Vec<String> = Vec::new();
let tree_iter = match list_store.get_iter_first() { let tree_iter = match list_store.iter_first() {
Some(t) => t, Some(t) => t,
None => { None => {
return string_vector; return string_vector;
} }
}; };
loop { loop {
string_vector.push(list_store.get_value(&tree_iter, 0).get::<String>().unwrap().unwrap()); string_vector.push(list_store.value(&tree_iter, 0).get::<String>().unwrap());
if !list_store.iter_next(&tree_iter) { if !list_store.iter_next(&tree_iter) {
return string_vector; return string_vector;
} }
@ -182,16 +182,16 @@ pub fn print_text_messages_to_text_view(text_messages: &Messages, text_view: &gt
messages += "\n"; messages += "\n";
} }
text_view.get_buffer().unwrap().set_text(messages.as_str()); text_view.buffer().unwrap().set_text(messages.as_str());
} }
pub fn reset_text_view(text_view: &TextView) { pub fn reset_text_view(text_view: &TextView) {
text_view.get_buffer().unwrap().set_text(""); text_view.buffer().unwrap().set_text("");
} }
pub fn add_text_to_text_view(text_view: &TextView, string_to_append: &str) { pub fn add_text_to_text_view(text_view: &TextView, string_to_append: &str) {
let buffer = text_view.get_buffer().unwrap(); let buffer = text_view.buffer().unwrap();
let current_text = match buffer.get_text(&buffer.get_start_iter(), &buffer.get_end_iter(), true) { let current_text = match buffer.text(&buffer.start_iter(), &buffer.end_iter(), true) {
Some(t) => t.to_string(), Some(t) => t.to_string(),
None => "".to_string(), None => "".to_string(),
}; };
@ -199,10 +199,10 @@ pub fn add_text_to_text_view(text_view: &TextView, string_to_append: &str) {
} }
pub fn select_function_duplicates(_tree_selection: &gtk::TreeSelection, tree_model: &gtk::TreeModel, tree_path: &gtk::TreePath, _is_path_currently_selected: bool) -> bool { pub fn select_function_duplicates(_tree_selection: &gtk::TreeSelection, tree_model: &gtk::TreeModel, tree_path: &gtk::TreePath, _is_path_currently_selected: bool) -> bool {
// let name = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(),ColumnsDuplicates::Name as i32).get::<String>().unwrap().unwrap(); // let name = tree_model.value(&tree_model.iter(tree_path).unwrap(),ColumnsDuplicates::Name as i32).get::<String>().unwrap();
// let path = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), ColumnsDuplicates::Path as i32).get::<String>().unwrap().unwrap(); // let path = tree_model.value(&tree_model.iter(tree_path).unwrap(), ColumnsDuplicates::Path as i32).get::<String>().unwrap();
// let modification = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(),ColumnsDuplicates::Modification as i32).get::<String>().unwrap().unwrap(); // let modification = tree_model.value(&tree_model.iter(tree_path).unwrap(),ColumnsDuplicates::Modification as i32).get::<String>().unwrap();
let color = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), ColumnsDuplicates::Color as i32).get::<String>().unwrap().unwrap(); let color = tree_model.value(&tree_model.iter(tree_path).unwrap(), ColumnsDuplicates::Color as i32).get::<String>().unwrap();
if color == HEADER_ROW_COLOR { if color == HEADER_ROW_COLOR {
return false; return false;
@ -211,7 +211,7 @@ pub fn select_function_duplicates(_tree_selection: &gtk::TreeSelection, tree_mod
true true
} }
pub fn select_function_same_music(_tree_selection: &gtk::TreeSelection, tree_model: &gtk::TreeModel, tree_path: &gtk::TreePath, _is_path_currently_selected: bool) -> bool { pub fn select_function_same_music(_tree_selection: &gtk::TreeSelection, tree_model: &gtk::TreeModel, tree_path: &gtk::TreePath, _is_path_currently_selected: bool) -> bool {
let color = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), ColumnsSameMusic::Color as i32).get::<String>().unwrap().unwrap(); let color = tree_model.value(&tree_model.iter(tree_path).unwrap(), ColumnsSameMusic::Color as i32).get::<String>().unwrap();
if color == HEADER_ROW_COLOR { if color == HEADER_ROW_COLOR {
return false; return false;
@ -220,7 +220,7 @@ pub fn select_function_same_music(_tree_selection: &gtk::TreeSelection, tree_mod
true true
} }
pub fn select_function_similar_images(_tree_selection: &gtk::TreeSelection, tree_model: &gtk::TreeModel, tree_path: &gtk::TreePath, _is_path_currently_selected: bool) -> bool { pub fn select_function_similar_images(_tree_selection: &gtk::TreeSelection, tree_model: &gtk::TreeModel, tree_path: &gtk::TreePath, _is_path_currently_selected: bool) -> bool {
let color = tree_model.get_value(&tree_model.get_iter(tree_path).unwrap(), ColumnsSimilarImages::Color as i32).get::<String>().unwrap().unwrap(); let color = tree_model.value(&tree_model.iter(tree_path).unwrap(), ColumnsSimilarImages::Color as i32).get::<String>().unwrap();
if color == HEADER_ROW_COLOR { if color == HEADER_ROW_COLOR {
return false; return false;
@ -274,10 +274,10 @@ pub fn get_text_from_invalid_symlink_cause(error: &invalid_symlinks::ErrorType)
} }
pub fn get_list_store(tree_view: &gtk::TreeView) -> ListStore { pub fn get_list_store(tree_view: &gtk::TreeView) -> ListStore {
tree_view.get_model().unwrap().downcast::<gtk::ListStore>().unwrap() tree_view.model().unwrap().downcast::<gtk::ListStore>().unwrap()
} }
pub fn get_dialog_box_child(dialog: &gtk::Dialog) -> gtk::Box { pub fn get_dialog_box_child(dialog: &gtk::Dialog) -> gtk::Box {
dialog.get_children()[0].clone().downcast::<gtk::Box>().unwrap() dialog.children()[0].clone().downcast::<gtk::Box>().unwrap()
} }
pub fn change_dimension_to_krotka(dimensions: String) -> (u64, u64) { pub fn change_dimension_to_krotka(dimensions: String) -> (u64, u64) {

View file

@ -53,19 +53,19 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
// Duplicate Files // Duplicate Files
{ {
let col_types: [glib::types::Type; 6] = [ let col_types: [glib::types::Type; 6] = [
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::U64, glib::types::Type::U64,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
]; ];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types); let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store); let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple); tree_view.selection().set_mode(SelectionMode::Multiple);
tree_view.get_selection().set_select_function(Some(Box::new(select_function_duplicates))); tree_view.selection().set_select_function(Some(Box::new(select_function_duplicates)));
create_tree_view_duplicates(&mut tree_view); create_tree_view_duplicates(&mut tree_view);
@ -73,7 +73,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
tree_view.connect_key_press_event(opening_enter_function_duplicates); tree_view.connect_key_press_event(opening_enter_function_duplicates);
tree_view.connect_button_release_event(move |_tree_view, _e| { tree_view.connect_button_release_event(move |_tree_view, _e| {
// println!("{}", e.get_button()); // println!("{}", e.button());
gtk::Inhibit(false) gtk::Inhibit(false)
}); });
@ -83,16 +83,16 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone(); let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| { tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() { if let Some(button_number) = e.keycode() {
// Handle delete button // Handle delete button
if button_number == 119 { if button_number == 119 {
if tree_view.get_selection().get_selected_rows().0.is_empty() { if tree_view.selection().selected_rows().0.is_empty() {
return gtk::Inhibit(false); return gtk::Inhibit(false);
} }
if !check_if_can_delete_files(&gui_data.settings.check_button_settings_confirm_deletion, &gui_data.window_main) { if !check_if_can_delete_files(&gui_data.settings.check_button_settings_confirm_deletion, &gui_data.window_main) {
return gtk::Inhibit(false); return gtk::Inhibit(false);
} }
if gui_data.settings.check_button_settings_confirm_group_deletion.get_active() if gui_data.settings.check_button_settings_confirm_group_deletion.is_active()
&& check_if_deleting_all_files_in_group(&tree_view.clone(), ColumnsDuplicates::Color as i32, &gui_data.window_main, &gui_data.settings.check_button_settings_confirm_group_deletion) && check_if_deleting_all_files_in_group(&tree_view.clone(), ColumnsDuplicates::Color as i32, &gui_data.window_main, &gui_data.settings.check_button_settings_confirm_group_deletion)
{ {
return gtk::Inhibit(false); return gtk::Inhibit(false);
@ -105,12 +105,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
} }
// Empty Folders // Empty Folders
{ {
let col_types: [glib::types::Type; 3] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String]; let col_types: [glib::types::Type; 3] = [glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types); let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store); let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple); tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_empty_folders(&mut tree_view); create_tree_view_empty_folders(&mut tree_view);
@ -123,7 +123,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone(); let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| { tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() { if let Some(button_number) = e.keycode() {
// Handle delete button // Handle delete button
if button_number == 119 { if button_number == 119 {
empty_folder_remover(&tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, &gui_data); empty_folder_remover(&tree_view, ColumnsEmptyFolders::Name as i32, ColumnsEmptyFolders::Path as i32, &gui_data);
@ -134,12 +134,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
} }
// Empty Files // Empty Files
{ {
let col_types: [glib::types::Type; 3] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String]; let col_types: [glib::types::Type; 3] = [glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types); let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store); let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple); tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_empty_files(&mut tree_view); create_tree_view_empty_files(&mut tree_view);
@ -152,7 +152,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone(); let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| { tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() { if let Some(button_number) = e.keycode() {
// Handle delete button // Handle delete button
if button_number == 119 { if button_number == 119 {
basic_remove(&tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, &gui_data); basic_remove(&tree_view, ColumnsEmptyFiles::Name as i32, ColumnsEmptyFiles::Path as i32, &gui_data);
@ -163,12 +163,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
} }
// Temporary Files // Temporary Files
{ {
let col_types: [glib::types::Type; 3] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String]; let col_types: [glib::types::Type; 3] = [glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types); let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store); let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple); tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_temporary_files(&mut tree_view); create_tree_view_temporary_files(&mut tree_view);
@ -181,7 +181,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone(); let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| { tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() { if let Some(button_number) = e.keycode() {
// Handle delete button // Handle delete button
if button_number == 119 { if button_number == 119 {
basic_remove(&tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, &gui_data); basic_remove(&tree_view, ColumnsTemporaryFiles::Name as i32, ColumnsTemporaryFiles::Path as i32, &gui_data);
@ -192,12 +192,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
} }
// Big Files // Big Files
{ {
let col_types: [glib::types::Type; 4] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String]; let col_types: [glib::types::Type; 4] = [glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types); let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store); let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple); tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_big_files(&mut tree_view); create_tree_view_big_files(&mut tree_view);
@ -210,7 +210,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone(); let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| { tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() { if let Some(button_number) = e.keycode() {
// Handle delete button // Handle delete button
if button_number == 119 { if button_number == 119 {
basic_remove(&tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, &gui_data); basic_remove(&tree_view, ColumnsBigFiles::Name as i32, ColumnsBigFiles::Path as i32, &gui_data);
@ -225,23 +225,23 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
image_preview_similar_images.hide(); image_preview_similar_images.hide();
let col_types: [glib::types::Type; 10] = [ let col_types: [glib::types::Type; 10] = [
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::U64, glib::types::Type::U64,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::U64, glib::types::Type::U64,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
]; ];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types); let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store); let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple); tree_view.selection().set_mode(SelectionMode::Multiple);
tree_view.get_selection().set_select_function(Some(Box::new(select_function_similar_images))); tree_view.selection().set_select_function(Some(Box::new(select_function_similar_images)));
create_tree_view_similar_images(&mut tree_view); create_tree_view_similar_images(&mut tree_view);
@ -261,16 +261,16 @@ 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 check_button_settings_show_preview_similar_images = gui_data.settings.check_button_settings_show_preview_similar_images.clone();
let gui_data = gui_data.clone(); let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| { tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() { if let Some(button_number) = e.keycode() {
// Handle delete button // Handle delete button
if button_number == 119 { if button_number == 119 {
if tree_view.get_selection().get_selected_rows().0.is_empty() { if tree_view.selection().selected_rows().0.is_empty() {
return gtk::Inhibit(false); return gtk::Inhibit(false);
} }
if !check_if_can_delete_files(&gui_data.settings.check_button_settings_confirm_deletion, &gui_data.window_main) { if !check_if_can_delete_files(&gui_data.settings.check_button_settings_confirm_deletion, &gui_data.window_main) {
return gtk::Inhibit(false); return gtk::Inhibit(false);
} }
if gui_data.settings.check_button_settings_confirm_group_deletion.get_active() if gui_data.settings.check_button_settings_confirm_group_deletion.is_active()
&& check_if_deleting_all_files_in_group(&tree_view.clone(), ColumnsSimilarImages::Color as i32, &gui_data.window_main, &gui_data.settings.check_button_settings_confirm_group_deletion) && check_if_deleting_all_files_in_group(&tree_view.clone(), ColumnsSimilarImages::Color as i32, &gui_data.window_main, &gui_data.settings.check_button_settings_confirm_group_deletion)
{ {
return gtk::Inhibit(false); return gtk::Inhibit(false);
@ -285,12 +285,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
} }
// Zeroed Files // Zeroed Files
{ {
let col_types: [glib::types::Type; 5] = [glib::types::Type::String, glib::types::Type::U64, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String]; let col_types: [glib::types::Type; 5] = [glib::types::Type::STRING, glib::types::Type::U64, glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types); let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store); let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple); tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_zeroed_files(&mut tree_view); create_tree_view_zeroed_files(&mut tree_view);
@ -303,7 +303,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone(); let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| { tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() { if let Some(button_number) = e.keycode() {
// Handle delete button // Handle delete button
if button_number == 119 { if button_number == 119 {
basic_remove(&tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, &gui_data); basic_remove(&tree_view, ColumnsZeroedFiles::Name as i32, ColumnsZeroedFiles::Path as i32, &gui_data);
@ -315,28 +315,28 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
// Same Music // Same Music
{ {
let col_types: [glib::types::Type; 13] = [ let col_types: [glib::types::Type; 13] = [
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::U64, glib::types::Type::U64,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::U64, glib::types::Type::U64,
glib::types::Type::String, glib::types::Type::STRING,
glib::types::Type::String, glib::types::Type::STRING,
]; ];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types); let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store); let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple); tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_same_music(&mut tree_view); create_tree_view_same_music(&mut tree_view);
tree_view.get_selection().set_select_function(Some(Box::new(select_function_same_music))); tree_view.selection().set_select_function(Some(Box::new(select_function_same_music)));
tree_view.connect_button_press_event(opening_double_click_function_same_music); tree_view.connect_button_press_event(opening_double_click_function_same_music);
tree_view.connect_key_press_event(opening_enter_function_same_music); tree_view.connect_key_press_event(opening_enter_function_same_music);
@ -347,16 +347,16 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone(); let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| { tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() { if let Some(button_number) = e.keycode() {
// Handle delete button // Handle delete button
if button_number == 119 { if button_number == 119 {
if tree_view.get_selection().get_selected_rows().0.is_empty() { if tree_view.selection().selected_rows().0.is_empty() {
return gtk::Inhibit(false); return gtk::Inhibit(false);
} }
if !check_if_can_delete_files(&gui_data.settings.check_button_settings_confirm_deletion, &gui_data.window_main) { if !check_if_can_delete_files(&gui_data.settings.check_button_settings_confirm_deletion, &gui_data.window_main) {
return gtk::Inhibit(false); return gtk::Inhibit(false);
} }
if gui_data.settings.check_button_settings_confirm_group_deletion.get_active() if gui_data.settings.check_button_settings_confirm_group_deletion.is_active()
&& check_if_deleting_all_files_in_group(&tree_view.clone(), ColumnsSameMusic::Color as i32, &gui_data.window_main, &gui_data.settings.check_button_settings_confirm_group_deletion) && check_if_deleting_all_files_in_group(&tree_view.clone(), ColumnsSameMusic::Color as i32, &gui_data.window_main, &gui_data.settings.check_button_settings_confirm_group_deletion)
{ {
return gtk::Inhibit(false); return gtk::Inhibit(false);
@ -369,12 +369,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
} }
// Invalid Symlinks // Invalid Symlinks
{ {
let col_types: [glib::types::Type; 5] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String]; let col_types: [glib::types::Type; 5] = [glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types); let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store); let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple); tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_invalid_symlinks(&mut tree_view); create_tree_view_invalid_symlinks(&mut tree_view);
@ -387,7 +387,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone(); let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| { tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() { if let Some(button_number) = e.keycode() {
// Handle delete button // Handle delete button
if button_number == 119 { if button_number == 119 {
basic_remove(&tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, &gui_data); basic_remove(&tree_view, ColumnsInvalidSymlinks::Name as i32, ColumnsInvalidSymlinks::Path as i32, &gui_data);
@ -398,12 +398,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
} }
// Broken Files // Broken Files
{ {
let col_types: [glib::types::Type; 4] = [glib::types::Type::String, glib::types::Type::String, glib::types::Type::String, glib::types::Type::String]; let col_types: [glib::types::Type; 4] = [glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING, glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types); let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store); let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple); tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_broken_files(&mut tree_view); create_tree_view_broken_files(&mut tree_view);
@ -416,7 +416,7 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
let gui_data = gui_data.clone(); let gui_data = gui_data.clone();
tree_view.connect_key_release_event(move |tree_view, e| { tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() { if let Some(button_number) = e.keycode() {
// Handle delete button // Handle delete button
if button_number == 119 { if button_number == 119 {
basic_remove(&tree_view, ColumnsBrokenFiles::Name as i32, ColumnsBrokenFiles::Path as i32, &gui_data); basic_remove(&tree_view, ColumnsBrokenFiles::Name as i32, ColumnsBrokenFiles::Path as i32, &gui_data);
@ -435,12 +435,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
// Set Included Directory // Set Included Directory
{ {
let col_types: [glib::types::Type; 1] = [glib::types::Type::String]; let col_types: [glib::types::Type; 1] = [glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types); let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store); let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple); tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_directories(&mut tree_view); create_tree_view_directories(&mut tree_view);
@ -449,16 +449,16 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
scrolled_window_included_directories.show_all(); scrolled_window_included_directories.show_all();
tree_view.connect_key_release_event(move |tree_view, e| { tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() { if let Some(button_number) = e.keycode() {
// Handle delete button // Handle delete button
if button_number == 119 { if button_number == 119 {
let list_store = get_list_store(&tree_view); let list_store = get_list_store(&tree_view);
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let (vec_tree_path, _tree_model) = selection.get_selected_rows(); let (vec_tree_path, _tree_model) = selection.selected_rows();
for tree_path in vec_tree_path.iter().rev() { for tree_path in vec_tree_path.iter().rev() {
list_store.remove(&list_store.get_iter(tree_path).unwrap()); list_store.remove(&list_store.iter(tree_path).unwrap());
} }
} }
} }
@ -467,12 +467,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
} }
// Set Excluded Directory // Set Excluded Directory
{ {
let col_types: [glib::types::Type; 1] = [glib::types::Type::String]; let col_types: [glib::types::Type; 1] = [glib::types::Type::STRING];
let list_store: gtk::ListStore = gtk::ListStore::new(&col_types); let list_store: gtk::ListStore = gtk::ListStore::new(&col_types);
let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store); let mut tree_view: gtk::TreeView = TreeView::with_model(&list_store);
tree_view.get_selection().set_mode(SelectionMode::Multiple); tree_view.selection().set_mode(SelectionMode::Multiple);
create_tree_view_directories(&mut tree_view); create_tree_view_directories(&mut tree_view);
@ -481,16 +481,16 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
scrolled_window_excluded_directories.show_all(); scrolled_window_excluded_directories.show_all();
tree_view.connect_key_release_event(move |tree_view, e| { tree_view.connect_key_release_event(move |tree_view, e| {
if let Some(button_number) = e.get_keycode() { if let Some(button_number) = e.keycode() {
// Handle delete button // Handle delete button
if button_number == 119 { if button_number == 119 {
let list_store = get_list_store(&tree_view); let list_store = get_list_store(&tree_view);
let selection = tree_view.get_selection(); let selection = tree_view.selection();
let (vec_tree_path, _tree_model) = selection.get_selected_rows(); let (vec_tree_path, _tree_model) = selection.selected_rows();
for tree_path in vec_tree_path.iter().rev() { for tree_path in vec_tree_path.iter().rev() {
list_store.remove(&list_store.get_iter(tree_path).unwrap()); list_store.remove(&list_store.iter(tree_path).unwrap());
} }
} }
} }
@ -513,12 +513,12 @@ pub fn initialize_gui(gui_data: &mut GuiData) {
} }
} }
fn show_preview(tree_view: &TreeView, text_view_errors: &TextView, check_button_settings_show_preview_similar_images: &CheckButton, image_preview_similar_images: &Image) { fn show_preview(tree_view: &TreeView, text_view_errors: &TextView, check_button_settings_show_preview_similar_images: &CheckButton, image_preview_similar_images: &Image) {
let (selected_rows, tree_model) = tree_view.get_selection().get_selected_rows(); let (selected_rows, tree_model) = tree_view.selection().selected_rows();
let mut created_image = false; let mut created_image = false;
// Only show preview when selected is only one item, because there is no method to recognize current clicked item in multiselection // Only show preview when selected is only one item, because there is no method to recognize current clicked item in multiselection
if selected_rows.len() == 1 && check_button_settings_show_preview_similar_images.get_active() { if selected_rows.len() == 1 && check_button_settings_show_preview_similar_images.is_active() {
let tree_path = selected_rows[0].clone(); let tree_path = selected_rows[0].clone();
if let Some(proj_dirs) = ProjectDirs::from("pl", "Qarmin", "Czkawka") { if let Some(proj_dirs) = ProjectDirs::from("pl", "Qarmin", "Czkawka") {
// TODO labels on {} are in testing stage, so we just ignore for now this warning until found better idea how to fix this // TODO labels on {} are in testing stage, so we just ignore for now this warning until found better idea how to fix this
@ -534,8 +534,8 @@ fn show_preview(tree_view: &TreeView, text_view_errors: &TextView, check_button_
add_text_to_text_view(&text_view_errors, format!("Failed to create dir {} needed by image preview", cache_dir.display()).as_str()); add_text_to_text_view(&text_view_errors, format!("Failed to create dir {} needed by image preview", cache_dir.display()).as_str());
break 'dir; break 'dir;
} }
let path = tree_model.get_value(&tree_model.get_iter(&tree_path).unwrap(), ColumnsSimilarImages::Path as i32).get::<String>().unwrap().unwrap(); let path = tree_model.value(&tree_model.iter(&tree_path).unwrap(), ColumnsSimilarImages::Path as i32).get::<String>().unwrap();
let name = tree_model.get_value(&tree_model.get_iter(&tree_path).unwrap(), ColumnsSimilarImages::Name as i32).get::<String>().unwrap().unwrap(); let name = tree_model.value(&tree_model.iter(&tree_path).unwrap(), ColumnsSimilarImages::Name as i32).get::<String>().unwrap();
let file_name = format!("{}/{}", path, name); let file_name = format!("{}/{}", path, name);
let file_name = file_name.as_str(); let file_name = file_name.as_str();

View file

@ -2,7 +2,6 @@ use crate::gui_data::*;
use crate::help_functions::*; use crate::help_functions::*;
use directories_next::ProjectDirs; use directories_next::ProjectDirs;
use gtk::prelude::*; use gtk::prelude::*;
use gtk::{EntryExt, GtkListStoreExt, ToggleButtonExt};
use std::fs::File; use std::fs::File;
use std::io::Write; use std::io::Write;
use std::path::Path; use std::path::Path;
@ -18,7 +17,7 @@ pub fn save_configuration(gui_data: &GuiData, manual_execution: bool) {
reset_text_view(&text_view_errors); reset_text_view(&text_view_errors);
if !manual_execution && !check_button_settings_save_at_exit.get_active() { if !manual_execution && !check_button_settings_save_at_exit.is_active() {
// When check button is deselected, not save configuration at exit // When check button is deselected, not save configuration at exit
return; return;
} }
@ -43,9 +42,9 @@ pub fn save_configuration(gui_data: &GuiData, manual_execution: bool) {
data_to_save.push("--included_directories:".to_string()); data_to_save.push("--included_directories:".to_string());
let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone(); let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone();
let list_store = get_list_store(&tree_view_included_directories); let list_store = get_list_store(&tree_view_included_directories);
if let Some(iter) = list_store.get_iter_first() { if let Some(iter) = list_store.iter_first() {
loop { loop {
data_to_save.push(list_store.get_value(&iter, ColumnsDirectory::Path as i32).get::<String>().unwrap().unwrap()); data_to_save.push(list_store.value(&iter, ColumnsDirectory::Path as i32).get::<String>().unwrap());
if !list_store.iter_next(&iter) { if !list_store.iter_next(&iter) {
break; break;
} }
@ -56,9 +55,9 @@ pub fn save_configuration(gui_data: &GuiData, manual_execution: bool) {
data_to_save.push("--excluded_directories:".to_string()); data_to_save.push("--excluded_directories:".to_string());
let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone(); let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone();
let list_store = get_list_store(&tree_view_excluded_directories); let list_store = get_list_store(&tree_view_excluded_directories);
if let Some(iter) = list_store.get_iter_first() { if let Some(iter) = list_store.iter_first() {
loop { loop {
data_to_save.push(list_store.get_value(&iter, ColumnsDirectory::Path as i32).get::<String>().unwrap().unwrap()); data_to_save.push(list_store.value(&iter, ColumnsDirectory::Path as i32).get::<String>().unwrap());
if !list_store.iter_next(&iter) { if !list_store.iter_next(&iter) {
break; break;
} }
@ -69,7 +68,7 @@ pub fn save_configuration(gui_data: &GuiData, manual_execution: bool) {
//// Excluded Items //// Excluded Items
data_to_save.push("--excluded_items:".to_string()); data_to_save.push("--excluded_items:".to_string());
let entry_excluded_items = gui_data.upper_notebook.entry_excluded_items.clone(); let entry_excluded_items = gui_data.upper_notebook.entry_excluded_items.clone();
for item in entry_excluded_items.get_text().split(',') { for item in entry_excluded_items.text().split(',') {
if item.trim().is_empty() { if item.trim().is_empty() {
continue; continue;
} }
@ -79,7 +78,7 @@ pub fn save_configuration(gui_data: &GuiData, manual_execution: bool) {
//// Allowed extensions //// Allowed extensions
data_to_save.push("--allowed_extensions:".to_string()); data_to_save.push("--allowed_extensions:".to_string());
let entry_allowed_extensions = gui_data.upper_notebook.entry_allowed_extensions.clone(); let entry_allowed_extensions = gui_data.upper_notebook.entry_allowed_extensions.clone();
for extension in entry_allowed_extensions.get_text().split(',') { for extension in entry_allowed_extensions.text().split(',') {
if extension.trim().is_empty() { if extension.trim().is_empty() {
continue; continue;
} }
@ -89,52 +88,52 @@ pub fn save_configuration(gui_data: &GuiData, manual_execution: bool) {
//// Save at exit //// Save at exit
data_to_save.push("--save_at_exit:".to_string()); data_to_save.push("--save_at_exit:".to_string());
let check_button_settings_save_at_exit = gui_data.settings.check_button_settings_save_at_exit.clone(); let check_button_settings_save_at_exit = gui_data.settings.check_button_settings_save_at_exit.clone();
data_to_save.push(check_button_settings_save_at_exit.get_active().to_string()); data_to_save.push(check_button_settings_save_at_exit.is_active().to_string());
//// Load at start //// Load at start
data_to_save.push("--load_at_start:".to_string()); data_to_save.push("--load_at_start:".to_string());
let check_button_settings_load_at_start = gui_data.settings.check_button_settings_load_at_start.clone(); let check_button_settings_load_at_start = gui_data.settings.check_button_settings_load_at_start.clone();
data_to_save.push(check_button_settings_load_at_start.get_active().to_string()); data_to_save.push(check_button_settings_load_at_start.is_active().to_string());
//// Confirm deletion of files //// Confirm deletion of files
data_to_save.push("--confirm_deletion:".to_string()); data_to_save.push("--confirm_deletion:".to_string());
let check_button_settings_confirm_deletion = gui_data.settings.check_button_settings_confirm_deletion.clone(); let check_button_settings_confirm_deletion = gui_data.settings.check_button_settings_confirm_deletion.clone();
data_to_save.push(check_button_settings_confirm_deletion.get_active().to_string()); data_to_save.push(check_button_settings_confirm_deletion.is_active().to_string());
//// Confirm deletion of all files in group //// Confirm deletion of all files in group
data_to_save.push("--confirm_group_deletion:".to_string()); data_to_save.push("--confirm_group_deletion:".to_string());
let check_button_settings_confirm_group_deletion = gui_data.settings.check_button_settings_confirm_group_deletion.clone(); let check_button_settings_confirm_group_deletion = gui_data.settings.check_button_settings_confirm_group_deletion.clone();
data_to_save.push(check_button_settings_confirm_group_deletion.get_active().to_string()); data_to_save.push(check_button_settings_confirm_group_deletion.is_active().to_string());
//// Show image previews in similar images //// Show image previews in similar images
data_to_save.push("--show_previews:".to_string()); data_to_save.push("--show_previews:".to_string());
let check_button_settings_show_preview_similar_images = gui_data.settings.check_button_settings_show_preview_similar_images.clone(); let check_button_settings_show_preview_similar_images = gui_data.settings.check_button_settings_show_preview_similar_images.clone();
data_to_save.push(check_button_settings_show_preview_similar_images.get_active().to_string()); data_to_save.push(check_button_settings_show_preview_similar_images.is_active().to_string());
//// Show bottom text panel with errors //// Show bottom text panel with errors
data_to_save.push("--bottom_text_panel:".to_string()); data_to_save.push("--bottom_text_panel:".to_string());
let check_button_settings_show_text_view = gui_data.settings.check_button_settings_show_text_view.clone(); let check_button_settings_show_text_view = gui_data.settings.check_button_settings_show_text_view.clone();
data_to_save.push(check_button_settings_show_text_view.get_active().to_string()); data_to_save.push(check_button_settings_show_text_view.is_active().to_string());
//// Hide/Show hard linked files, with same inodes //// Hide/Show hard linked files, with same inodes
data_to_save.push("--hide_hard_links:".to_string()); data_to_save.push("--hide_hard_links:".to_string());
let check_button_settings_hide_hard_links = gui_data.settings.check_button_settings_hide_hard_links.clone(); let check_button_settings_hide_hard_links = gui_data.settings.check_button_settings_hide_hard_links.clone();
data_to_save.push(check_button_settings_hide_hard_links.get_active().to_string()); data_to_save.push(check_button_settings_hide_hard_links.is_active().to_string());
//// Use cache system //// Use cache system
data_to_save.push("--use_cache:".to_string()); data_to_save.push("--use_cache:".to_string());
let check_button_settings_use_cache = gui_data.settings.check_button_settings_use_cache.clone(); let check_button_settings_use_cache = gui_data.settings.check_button_settings_use_cache.clone();
data_to_save.push(check_button_settings_use_cache.get_active().to_string()); data_to_save.push(check_button_settings_use_cache.is_active().to_string());
//// Delete to trash //// Delete to trash
data_to_save.push("--use_trash:".to_string()); data_to_save.push("--use_trash:".to_string());
let check_button_settings_use_trash = gui_data.settings.check_button_settings_use_trash.clone(); let check_button_settings_use_trash = gui_data.settings.check_button_settings_use_trash.clone();
data_to_save.push(check_button_settings_use_trash.get_active().to_string()); data_to_save.push(check_button_settings_use_trash.is_active().to_string());
//// minimal cache file size //// minimal cache file size
data_to_save.push("--cache_minimal_file_size:".to_string()); data_to_save.push("--cache_minimal_file_size:".to_string());
let entry_settings_cache_file_minimal_size = gui_data.settings.entry_settings_cache_file_minimal_size.clone(); let entry_settings_cache_file_minimal_size = gui_data.settings.entry_settings_cache_file_minimal_size.clone();
data_to_save.push(entry_settings_cache_file_minimal_size.get_text().as_str().parse::<u64>().unwrap_or(2 * 1024 * 1024).to_string()); data_to_save.push(entry_settings_cache_file_minimal_size.text().as_str().parse::<u64>().unwrap_or(2 * 1024 * 1024).to_string());
} }
// Creating/Opening config file // Creating/Opening config file
@ -433,11 +432,9 @@ pub fn load_configuration(gui_data: &GuiData, manual_execution: bool) {
let list_store = get_list_store(&tree_view_included_directories); let list_store = get_list_store(&tree_view_included_directories);
list_store.clear(); list_store.clear();
let col_indices = [0];
for directory in included_directories { for directory in included_directories {
let values: [&dyn ToValue; 1] = [&directory]; let values: [(u32, &dyn ToValue); 1] = [(0, &directory)];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
//// Exclude Directories //// Exclude Directories
@ -445,11 +442,9 @@ pub fn load_configuration(gui_data: &GuiData, manual_execution: bool) {
let list_store = get_list_store(&tree_view_excluded_directories); let list_store = get_list_store(&tree_view_excluded_directories);
list_store.clear(); list_store.clear();
let col_indices = [0];
for directory in excluded_directories { for directory in excluded_directories {
let values: [&dyn ToValue; 1] = [&directory]; let values: [(u32, &dyn ToValue); 1] = [(0, &directory)];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
//// Excluded Items //// Excluded Items
@ -497,7 +492,6 @@ pub fn reset_configuration(gui_data: &GuiData, manual_clearing: bool) {
// Resetting included directories // Resetting included directories
{ {
let col_indices = [0];
let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone(); let tree_view_included_directories = gui_data.upper_notebook.tree_view_included_directories.clone();
let list_store = get_list_store(&tree_view_included_directories); let list_store = get_list_store(&tree_view_included_directories);
list_store.clear(); list_store.clear();
@ -517,19 +511,18 @@ pub fn reset_configuration(gui_data: &GuiData, manual_clearing: bool) {
} }
}; };
let values: [&dyn ToValue; 1] = [&current_dir]; let values: [(u32, &dyn ToValue); 1] = [(0, &current_dir)];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
// Resetting excluded directories // Resetting excluded directories
{ {
let col_indices = [0];
let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone(); let tree_view_excluded_directories = gui_data.upper_notebook.tree_view_excluded_directories.clone();
let list_store = get_list_store(&tree_view_excluded_directories); let list_store = get_list_store(&tree_view_excluded_directories);
list_store.clear(); list_store.clear();
if cfg!(target_family = "unix") { if cfg!(target_family = "unix") {
for i in ["/proc", "/dev", "/sys", "/run", "/snap"].iter() { for i in ["/proc", "/dev", "/sys", "/run", "/snap"].iter() {
let values: [&dyn ToValue; 1] = [&i]; let values: [(u32, &dyn ToValue); 1] = [(0, &i)];
list_store.set(&list_store.append(), &col_indices, &values); list_store.set(&list_store.append(), &values);
} }
} }
} }