From 7e7a603f4cc7a22c25353197d9f0ae0b835765fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Sun, 22 Oct 2023 11:32:13 +0200 Subject: [PATCH] Active --- .github/workflows/linux_cli.yml | 2 +- .github/workflows/linux_gui.yml | 4 +- czkawka_cli/Cargo.toml | 2 +- czkawka_core/Cargo.toml | 2 +- czkawka_gui/Cargo.toml | 2 +- czkawka_slint_gui/icons/logo.png | Bin 0 -> 11273 bytes czkawka_slint_gui/icons/settings.png | Bin 0 -> 4667 bytes czkawka_slint_gui/ui/action_buttons.slint | 31 ++++++++ czkawka_slint_gui/ui/left_side_panel.slint | 55 ++++++++----- czkawka_slint_gui/ui/main_lists.slint | 38 +++++++++ czkawka_slint_gui/ui/main_window.slint | 74 +++++++++--------- .../ui/selectable_tree_view.slint | 4 +- instructions/Compilation.md | 2 +- 13 files changed, 152 insertions(+), 64 deletions(-) create mode 100644 czkawka_slint_gui/icons/logo.png create mode 100644 czkawka_slint_gui/icons/settings.png create mode 100644 czkawka_slint_gui/ui/action_buttons.slint create mode 100644 czkawka_slint_gui/ui/main_lists.slint diff --git a/.github/workflows/linux_cli.yml b/.github/workflows/linux_cli.yml index 70f3c9b..f306f97 100644 --- a/.github/workflows/linux_cli.yml +++ b/.github/workflows/linux_cli.yml @@ -12,7 +12,7 @@ jobs: linux-cli: strategy: matrix: - toolchain: [ stable, 1.70.0 ] + toolchain: [ stable, 1.72.1 ] type: [ release ] runs-on: ubuntu-20.04 steps: diff --git a/.github/workflows/linux_gui.yml b/.github/workflows/linux_gui.yml index 96c8147..bcdd94a 100644 --- a/.github/workflows/linux_gui.yml +++ b/.github/workflows/linux_gui.yml @@ -12,7 +12,7 @@ jobs: linux-gui: strategy: matrix: - toolchain: [ stable, 1.70.0 ] + toolchain: [ stable, 1.72.1 ] type: [ release ] runs-on: ubuntu-22.04 steps: @@ -29,7 +29,7 @@ jobs: env: CARGO_INCREMENTAL: 0 RUSTFLAGS: "-C debuginfo=0" - if: ${{ (matrix.type == 'release') && (matrix.toolchain == '1.70.0') }} + if: ${{ (matrix.type == 'release') && (matrix.toolchain == '1.72.1') }} - name: Store Linux GUI Heif uses: actions/upload-artifact@v3 diff --git a/czkawka_cli/Cargo.toml b/czkawka_cli/Cargo.toml index 783596e..2eb75bc 100644 --- a/czkawka_cli/Cargo.toml +++ b/czkawka_cli/Cargo.toml @@ -3,7 +3,7 @@ name = "czkawka_cli" version = "6.1.0" authors = ["Rafał Mikrut "] edition = "2021" -rust-version = "1.70.0" +rust-version = "1.72.1" description = "CLI frontend of Czkawka" license = "MIT" homepage = "https://github.com/qarmin/czkawka" diff --git a/czkawka_core/Cargo.toml b/czkawka_core/Cargo.toml index ba49cc3..b8bc819 100644 --- a/czkawka_core/Cargo.toml +++ b/czkawka_core/Cargo.toml @@ -3,7 +3,7 @@ name = "czkawka_core" version = "6.1.0" authors = ["Rafał Mikrut "] edition = "2021" -rust-version = "1.70.0" +rust-version = "1.72.1" description = "Core of Czkawka app" license = "MIT" homepage = "https://github.com/qarmin/czkawka" diff --git a/czkawka_gui/Cargo.toml b/czkawka_gui/Cargo.toml index 431bdb9..7db4db6 100644 --- a/czkawka_gui/Cargo.toml +++ b/czkawka_gui/Cargo.toml @@ -3,7 +3,7 @@ name = "czkawka_gui" version = "6.1.0" authors = ["Rafał Mikrut "] edition = "2021" -rust-version = "1.70.0" +rust-version = "1.72.1" description = "GTK frontend of Czkawka" license = "MIT" homepage = "https://github.com/qarmin/czkawka" diff --git a/czkawka_slint_gui/icons/logo.png b/czkawka_slint_gui/icons/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1064e495efc39aef590c67b8cd65c910bb2761fe GIT binary patch literal 11273 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 U#}1JMR~Z^ubDQ0_ci~R_ALpmYng9R* literal 0 HcmV?d00001 diff --git a/czkawka_slint_gui/icons/settings.png b/czkawka_slint_gui/icons/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..475bd01adb8fb40bf5615f9b1645d1c769fb24b5 GIT binary patch literal 4667 zcmeHKeNYo;8eh*U6j8wIyX0 z`9|N8B^jP8J9CvMt%}B%qY4^Q41a$ijz5ibKi*3kT4!vGzn!&58?s31y>@AMi|*!g z>C-zyh|r8~a9^UvAut|Prc^M+0yyfe2avwJb$*Ss<-|6cZ2szn z_QcuS=SB8j8s3@JhbB72v)3|)#r-#CMj5IPy!~o94?)u!`P5X4DK&L8a1d_mQ(Fz0 z$C9Ftm*xK6S`_`5;>)mI)L)Ip=*s!eSYpqG?5AETxf4t9nMEbhGcK(EMNISRpaqW7 z#U(S6Z%pqzf86w`F>AQYS`mKr!?lS$m+LPbnckS*!si!6e=_)5OU}|xr`s6%o?`Q~ z!SV;_mNh5##kcqBk6yoWwZHUPN9~RwvGM$S$DtjW(Tvor+bmGepRc{*O}dMOl~mPN4qP3a_D4&>-bKB= zVGCDSZ@&ET;rf;JL$|VDe?LYz?`_}f9QXl(<`naw5DU%O6eGBlG%MIRrO)L76$(KK zi9Qd_RB{q*;~c!(p!oXm`wEz64T=Jd88v%Sxe7kB&dcT2<>WDSm5iQMB(4fc@KFH3 z#Yr^mb2;52dT#VQ5tSCJ|WibAsmP8GZyOehH@iWq%-HLh3{0w;J`J7rBv zAAtZ*21SJ=c_@{trlv+&qgD!DhYHi{^(qus;Wz>`5V6)R(LTg2#>o%?j5JPUyu3%^ z1ve~X(l((=GAI;a9Uk@1+u`3sCY(yPm<$SBiQbb~oU~*I1_nho@2>LQ zTgc;GT&_gRY+_nHsn=+=8VyEj^;p1XKVClP6+tD+m>8;52Ug^?P#_pUEG^e502qyu zO7(KIBzW@#!D&#)5U^}HwrmFN#L^O-MoSz3MR7HSp%jkip*l)UQfl=I6sOQ}`U1<_ zYyX?J+&pkXAmy372==e_ivk^$%dHJO1siEfP!o`W`3%OrYHZ$*a3)XI z`}i3txBIvQfS%f9Qv6QQHAUB?7?_muRCP_!H7N!rr94$#|2Miq?wuGpH+a#j0q4P@ z)r;qXv*b+M;~8ntUHQB7$ewLL@}MVkjR--?IQcit*Pd7ngh7(YYz*oPiJbXJ+@YN8 zG9Y?bG8Rgyf=fPlK>qh(j)iM@sREYYhYOybvj8Y{n9`E-3Xcus7ti?s4t?vyP+80O z%Hnkq|M&yj|F-qwPRpsXGL^V}Q&{uzu+EL=m!7RAi6dppl04a)a{t18Srs1KxciL$ zgM&}b4gJcHl^GWDq9f|lg!RD@(B`9#U+rmcy||?GZ^3WO(6k-3orWzP1G?WN?dmR3 zusbf_Oxk@z;#O@Q3|bJ0pM6jWYg-og(Ki>qKwm4b>T2>>_65J#aO%Xj%C@eS;FRYU jo~VClx$gLxL;cY5)fu< scanning; + in-out property active-tab; + + HorizontalBox { + height: 50px; + scan_button:= Button { + enabled: !scanning; + text: "Scan"; + clicked => { + root.scanned(active-tab); + } + } + delete_button:= Button { + enabled: !scanning; + text: "Delete"; + clicked => { + root.deleted(); + } + } + } +} \ No newline at end of file diff --git a/czkawka_slint_gui/ui/left_side_panel.slint b/czkawka_slint_gui/ui/left_side_panel.slint index b3bdef0..d35458a 100644 --- a/czkawka_slint_gui/ui/left_side_panel.slint +++ b/czkawka_slint_gui/ui/left_side_panel.slint @@ -17,28 +17,47 @@ component TabItem { export component LeftSidePanel { in-out property active-tab; in-out property scanning; + width: 120px; VerticalLayout { - width: 120px; - spacing: 3px; - - TabItem { - scanning: scanning; - text: "Empty Folders"; - active-tab <=> root.active-tab; - curr_tab: CurrentTab.EmptyFolders; + spacing: 20px; + Rectangle { + height: 100px; + Image { + width: root.width; + source: @image-url("../icons/logo.png"); + } } - TabItem { - scanning: scanning; - text: "Empty Files"; - active-tab <=> root.active-tab; - curr_tab: CurrentTab.EmptyFiles; + VerticalLayout { + spacing: 3px; + alignment: center; + + TabItem { + scanning: scanning; + text: "Empty Folders"; + active-tab <=> root.active-tab; + curr_tab: CurrentTab.EmptyFolders; + } + TabItem { + scanning: scanning; + text: "Empty Files"; + active-tab <=> root.active-tab; + curr_tab: CurrentTab.EmptyFiles; + } + TabItem { + scanning: scanning; + text: "Similar Images"; + active-tab <=> root.active-tab; + curr_tab: CurrentTab.SimilarImages; + } } - TabItem { - scanning: scanning; - text: "Similar Images"; - active-tab <=> root.active-tab; - curr_tab: CurrentTab.SimilarImages; + HorizontalLayout { + height: 20px; + alignment: end; + Image { + width: 20px; + source: @image-url("../icons/settings.png"); + } } } } \ No newline at end of file diff --git a/czkawka_slint_gui/ui/main_lists.slint b/czkawka_slint_gui/ui/main_lists.slint new file mode 100644 index 0000000..1cc1045 --- /dev/null +++ b/czkawka_slint_gui/ui/main_lists.slint @@ -0,0 +1,38 @@ +import { Button, VerticalBox , HorizontalBox, TabWidget, ListView, StandardListView, StandardTableView, CheckBox} from "std-widgets.slint"; +import {SelectableTableView} from "selectable_tree_view.slint"; +import {LeftSidePanel} from "left_side_panel.slint"; +import {CurrentTab} from "common.slint"; + +export component MainList { + in-out property active-tab; + + in-out property <[{checked: bool, header_row: bool, selected_row: bool, val:[string]}]> empty_folder_model; + in-out property <[{checked: bool, header_row: bool, selected_row: bool, val:[string]}]> empty_files_model; + in-out property <[{checked: bool, header_row: bool, selected_row: bool, val:[string]}]> similar_images_model; + +// TODO - using root.active-tab in visible property will not clear model + if root.active-tab == CurrentTab.EmptyFolders: SelectableTableView { + min-width: 200px; + + columns: ["Selection", "Folder Name", "Path"]; + last-column: "Modification Date"; + column-sizes: [30px, 100px, 100px, 100px]; + values <=> empty-folder-model; + } + if root.active-tab == CurrentTab.EmptyFiles: SelectableTableView { + min-width: 200px; + + columns: ["Selection", "Folder Name", "Path"]; + last-column: "Modification Date"; + column-sizes: [30px, 100px, 100px, 100px]; + values <=> empty-files-model; + } + if root.active-tab == CurrentTab.SimilarImages: SelectableTableView { + min-width: 200px; + + columns: ["Selection", "Folder Name", "Path"]; + last-column: "Modification Date"; + column-sizes: [30px, 100px, 100px, 100px]; + values <=> similar-images-model; + } +} \ No newline at end of file diff --git a/czkawka_slint_gui/ui/main_window.slint b/czkawka_slint_gui/ui/main_window.slint index 8533755..7d79dd7 100644 --- a/czkawka_slint_gui/ui/main_window.slint +++ b/czkawka_slint_gui/ui/main_window.slint @@ -1,12 +1,17 @@ import { Button, VerticalBox , HorizontalBox, TabWidget, ListView, StandardListView, StandardTableView, CheckBox} from "std-widgets.slint"; import {SelectableTableView} from "selectable_tree_view.slint"; import {LeftSidePanel} from "left_side_panel.slint"; +import {MainList} from "main_lists.slint"; import {CurrentTab} from "common.slint"; +import { ActionButtons } from "action_buttons.slint"; export component MainWindow inherits Window { callback deleted; callback scanned(CurrentTab); min-width: 300px; + preferred-width: 1024px; + min-height: 300px; + preferred-height: 600px; in-out property scanning: false; @@ -22,6 +27,22 @@ export component MainWindow inherits Window { {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , + {checked: false, selected_row: false, header_row: false, val: ["witasphere", "/Xd1/Imagerren2", "25.11.1991"]} , {checked: true, selected_row: false, header_row: false, val: ["lokkaler", "/Xd1/Vide2", "01.23.1911"]} ]; in-out property <[{checked: bool, header_row: bool, selected_row: bool, val:[string]}]> empty_files_model: []; @@ -31,53 +52,30 @@ export component MainWindow inherits Window { VerticalBox { HorizontalBox { + vertical-stretch: 1.0; // min-width: 600px; preferred-height: 300px; LeftSidePanel { - max-width: 10px; // Just forces the smallest possible - scanning: root.scanning; + horizontal-stretch: 0.0; + scanning <=> root.scanning; active-tab <=> root.active-tab; } - // TODO - using root.active-tab in visible property will not clear model - if root.active-tab == CurrentTab.EmptyFolders: SelectableTableView { - min-width: 200px; - - columns: ["Selection", "Folder Name", "Path"]; - last-column: "Modification Date"; - column-sizes: [30px, 100px, 100px, 100px]; - values <=> empty-folder-model; - } - if root.active-tab == CurrentTab.EmptyFiles: SelectableTableView { - min-width: 200px; - - columns: ["Selection", "Folder Name", "Path", "Modification Date"]; - values <=> empty-files-model; - } - if root.active-tab == CurrentTab.SimilarImages: SelectableTableView { - min-width: 200px; - - columns: ["Selection", "Folder Name", "Path", "Modification Date"]; - values <=> similar-images-model; + MainList { + horizontal-stretch: 1.0; + active-tab <=> root.active-tab; + empty_folder_model <=> root.empty_folder_model; + empty_files_model <=> root.empty_files_model; + similar_images_model <=> root.similar_images_model; } } - HorizontalBox { - height: 50px; - scan_button:= Button { - enabled: !scanning; - text: "Scan"; - clicked => { - root.scanned(active-tab); - } - } - delete_button:= Button { - enabled: !scanning; - text: "Delete"; - clicked => { - root.deleted(); - } - } + ActionButtons { + vertical-stretch: 0.0; + scanning <=> root.scanning; + active-tab <=> root.active-tab; + deleted => {root.deleted();} + scanned(item) => {root.scanned(item);} } } } diff --git a/czkawka_slint_gui/ui/selectable_tree_view.slint b/czkawka_slint_gui/ui/selectable_tree_view.slint index f2b2cf7..90de282 100644 --- a/czkawka_slint_gui/ui/selectable_tree_view.slint +++ b/czkawka_slint_gui/ui/selectable_tree_view.slint @@ -7,7 +7,7 @@ export component SelectableTableView inherits Rectangle { in-out property <[length]> column_sizes: [200px, 100px, 100px, 100px]; private property <[length]> real_sizes: [0px,0px,0px,0px,0px,0px,0px,0px,0px,0px,0px,0px,0px,0px,0px,0px,0px,0px]; - private property column_number: 4; + private property column_number: column-sizes.length + 1; in-out property selected_item: -1; @@ -51,8 +51,10 @@ export component SelectableTableView inherits Rectangle { } list_view := ListView { min-width: 100px; + for r[idx] in root.values : Rectangle { height: 30px; + // TODO move this into singleton background: r.header-row ? #888888 : (touch-area.has-hover ? (r.selected_row ? #cccccc : #dddddd) : (r.selected_row ? #cccccc: #dddddd)); // background: touch-area.has-hover ? (selected ? #333333 : #222222) : (selected ? #333333: #222222); diff --git a/instructions/Compilation.md b/instructions/Compilation.md index 2fe33b4..535318f 100644 --- a/instructions/Compilation.md +++ b/instructions/Compilation.md @@ -12,7 +12,7 @@ New versions of GTK fixes some bugs, so e.g. middle button selection will work o | Program | Min | What for | |---------|--------|--------------------------------------------------------------------------------------| -| Rust | 1.70.0 | The minimum version of rust does not depend on anything, so it can change frequently | +| Rust | 1.72.1 | The minimum version of rust does not depend on anything, so it can change frequently | | GTK | 4.6 | Only for the `GTK` backend | #### Debian / Ubuntu