1use libadwaita::prelude::*;
2
3pub struct FilterWidgets {
4 pub revealer: gtk::Revealer,
5 pub filename_row: libadwaita::EntryRow,
6 pub description_row: libadwaita::EntryRow,
7 pub ocr_row: libadwaita::EntryRow,
8 pub type_row: libadwaita::ComboRow,
9 pub favorite_row: libadwaita::SwitchRow,
10 pub archived_row: libadwaita::SwitchRow,
11 pub motion_row: libadwaita::SwitchRow,
12 pub not_in_album_row: libadwaita::SwitchRow,
13 pub with_deleted_row: libadwaita::SwitchRow,
14 pub visibility_row: libadwaita::ComboRow,
15 pub rating_row: libadwaita::ComboRow,
16 pub taken_after_row: libadwaita::EntryRow,
17 pub taken_before_row: libadwaita::EntryRow,
18 pub created_after_row: libadwaita::EntryRow,
19 pub created_before_row: libadwaita::EntryRow,
20 pub make_row: libadwaita::EntryRow,
21 pub model_row: libadwaita::EntryRow,
22 pub lens_row: libadwaita::EntryRow,
23 pub country_row: libadwaita::EntryRow,
24 pub state_row: libadwaita::EntryRow,
25 pub city_row: libadwaita::EntryRow,
26}
27
28pub(super) fn build_text_group() -> (
29 libadwaita::PreferencesGroup,
30 libadwaita::EntryRow,
31 libadwaita::EntryRow,
32 libadwaita::EntryRow,
33) {
34 let group = libadwaita::PreferencesGroup::builder()
35 .title("Text")
36 .build();
37 let filename = libadwaita::EntryRow::builder()
38 .title("Filename contains")
39 .build();
40 let desc = libadwaita::EntryRow::builder()
41 .title("Description contains")
42 .build();
43 let ocr = libadwaita::EntryRow::builder()
44 .title("OCR text contains")
45 .build();
46 group.add(&filename);
47 group.add(&desc);
48 group.add(&ocr);
49 (group, filename, desc, ocr)
50}
51
52fn combo_row(title: &str, items: &[&str]) -> libadwaita::ComboRow {
53 libadwaita::ComboRow::builder()
54 .title(title)
55 .model(>k::StringList::new(items))
56 .build()
57}
58
59#[allow(clippy::type_complexity)]
60pub(super) fn build_flags_group() -> (
61 libadwaita::PreferencesGroup,
62 libadwaita::ComboRow,
63 libadwaita::SwitchRow,
64 libadwaita::SwitchRow,
65 libadwaita::SwitchRow,
66 libadwaita::SwitchRow,
67 libadwaita::SwitchRow,
68 libadwaita::ComboRow,
69 libadwaita::ComboRow,
70) {
71 fn switch(t: &str) -> libadwaita::SwitchRow {
72 libadwaita::SwitchRow::builder().title(t).build()
73 }
74
75 let group = libadwaita::PreferencesGroup::builder()
76 .title("Type and flags")
77 .build();
78 let type_row = combo_row("Asset type", &["Any", "Image only", "Video only"]);
79 let fav = switch("Favourites only");
80 let archived = switch("Archived only");
81 let motion = switch("Motion photos only");
82 let not_album = switch("Not in any album");
83 let deleted = switch("Include deleted");
84 let vis = combo_row(
85 "Visibility",
86 &["Any", "Timeline", "Archive", "Hidden", "Locked"],
87 );
88 let rating = combo_row("Minimum rating", &["Any", "1+", "2+", "3+", "4+", "5"]);
89 group.add(&type_row);
90 group.add(&fav);
91 group.add(&archived);
92 group.add(&motion);
93 group.add(¬_album);
94 group.add(&deleted);
95 group.add(&vis);
96 group.add(&rating);
97 (
98 group, type_row, fav, archived, motion, not_album, deleted, vis, rating,
99 )
100}
101
102pub(super) fn build_date_group() -> (
103 libadwaita::PreferencesGroup,
104 libadwaita::EntryRow,
105 libadwaita::EntryRow,
106 libadwaita::EntryRow,
107 libadwaita::EntryRow,
108) {
109 let group = libadwaita::PreferencesGroup::builder()
110 .title("Date range")
111 .description("e.g. 2024-01-15")
112 .build();
113 let taken_after = libadwaita::EntryRow::builder().title("Taken after").build();
114 let taken_before = libadwaita::EntryRow::builder()
115 .title("Taken before")
116 .build();
117 let created_after = libadwaita::EntryRow::builder()
118 .title("Created after")
119 .build();
120 let created_before = libadwaita::EntryRow::builder()
121 .title("Created before")
122 .build();
123 group.add(&taken_after);
124 group.add(&taken_before);
125 group.add(&created_after);
126 group.add(&created_before);
127 (
128 group,
129 taken_after,
130 taken_before,
131 created_after,
132 created_before,
133 )
134}
135
136pub(super) fn build_camera_group() -> (
137 libadwaita::PreferencesGroup,
138 libadwaita::EntryRow,
139 libadwaita::EntryRow,
140 libadwaita::EntryRow,
141) {
142 let group = libadwaita::PreferencesGroup::builder()
143 .title("Camera")
144 .build();
145 let make = libadwaita::EntryRow::builder().title("Make").build();
146 let model = libadwaita::EntryRow::builder().title("Model").build();
147 let lens = libadwaita::EntryRow::builder().title("Lens model").build();
148 group.add(&make);
149 group.add(&model);
150 group.add(&lens);
151 (group, make, model, lens)
152}
153
154pub(super) fn build_location_group() -> (
155 libadwaita::PreferencesGroup,
156 libadwaita::EntryRow,
157 libadwaita::EntryRow,
158 libadwaita::EntryRow,
159) {
160 let group = libadwaita::PreferencesGroup::builder()
161 .title("Location")
162 .build();
163 let country = libadwaita::EntryRow::builder().title("Country").build();
164 let state = libadwaita::EntryRow::builder()
165 .title("State / region")
166 .build();
167 let city = libadwaita::EntryRow::builder().title("City").build();
168 group.add(&country);
169 group.add(&state);
170 group.add(&city);
171 (group, country, state, city)
172}