mimick/settings_window/
library.rs1use adw::prelude::*;
2use libadwaita as adw;
3
4pub struct LibraryWidgets {
5 pub library_group: adw::PreferencesGroup,
6 pub preview_full_row: adw::SwitchRow,
7 pub grid_quality_row: adw::ComboRow,
8 pub raw_full_decode_row: adw::SwitchRow,
9 pub raw_cache_row: adw::SwitchRow,
10 pub disk_cache_row: adw::SpinRow,
11 pub download_folder_row: adw::ActionRow,
12 pub download_change_btn: gtk::Button,
13 pub download_clear_btn: gtk::Button,
14 pub border_width_row: adw::SpinRow,
15 pub border_color_btn: gtk::ColorDialogButton,
16}
17
18pub fn build_library_group(settings_page: &adw::PreferencesPage) -> LibraryWidgets {
19 let library_group = adw::PreferencesGroup::builder()
20 .title("Library")
21 .description("Library browser settings.")
22 .build();
23 settings_page.add(&library_group);
24
25 let preview_full_row = adw::SwitchRow::builder()
26 .title("Open Originals in Lightbox")
27 .subtitle("Use full-resolution instead of the 1440px preview.")
28 .build();
29 library_group.add(&preview_full_row);
30
31 let quality_options =
32 gtk::StringList::new(&["Auto (per cell size)", "Thumbnail", "Preview", "Full Size"]);
33 let grid_quality_row = adw::ComboRow::builder()
34 .title("Library Thumbnail Quality")
35 .subtitle("Higher quality uses more memory.")
36 .model(&quality_options)
37 .build();
38 library_group.add(&grid_quality_row);
39
40 let raw_full_decode_row = adw::SwitchRow::builder()
41 .title("Full RAW Decoding")
42 .subtitle("Sensor data instead of embedded previews. Slower.")
43 .build();
44 library_group.add(&raw_full_decode_row);
45
46 let raw_cache_row = adw::SwitchRow::builder()
47 .title("Cache Decoded RAW Files")
48 .subtitle("Instant re-opens. Uses disk space.")
49 .build();
50 library_group.add(&raw_cache_row);
51
52 let disk_cache_adj = gtk::Adjustment::new(2000.0, 200.0, 10000.0, 100.0, 500.0, 0.0);
53 let disk_cache_row = adw::SpinRow::builder()
54 .title("Disk Cache Size (MB)")
55 .subtitle("Cap across all on-disk caches. Pruned at startup.")
56 .adjustment(&disk_cache_adj)
57 .build();
58 library_group.add(&disk_cache_row);
59
60 let download_folder_row = adw::ActionRow::builder()
61 .title("Download Folder")
62 .subtitle("Not set")
63 .subtitle_lines(1)
64 .build();
65 let download_change_btn = gtk::Button::builder()
66 .label("Change")
67 .valign(gtk::Align::Center)
68 .css_classes(["flat"])
69 .build();
70 let download_clear_btn = gtk::Button::builder()
71 .icon_name("edit-clear-symbolic")
72 .tooltip_text("Clear saved folder")
73 .valign(gtk::Align::Center)
74 .css_classes(["flat"])
75 .visible(false)
76 .build();
77 download_folder_row.add_suffix(&download_clear_btn);
78 download_folder_row.add_suffix(&download_change_btn);
79 library_group.add(&download_folder_row);
80
81 let border_width_adj = gtk::Adjustment::new(0.0, 0.0, 50.0, 0.1, 1.0, 0.0);
82 let border_width_row = adw::SpinRow::builder()
83 .title("Grid Border Width")
84 .subtitle("Gap between grid tiles in pixels.")
85 .adjustment(&border_width_adj)
86 .digits(1)
87 .build();
88 library_group.add(&border_width_row);
89
90 let border_color_row = adw::ActionRow::builder().title("Grid Border Color").build();
91 let border_color_dialog = gtk::ColorDialog::builder().build();
92 let border_color_btn = gtk::ColorDialogButton::builder()
93 .dialog(&border_color_dialog)
94 .valign(gtk::Align::Center)
95 .build();
96 border_color_row.add_suffix(&border_color_btn);
97 library_group.add(&border_color_row);
98
99 LibraryWidgets {
100 library_group,
101 preview_full_row,
102 grid_quality_row,
103 raw_full_decode_row,
104 raw_cache_row,
105 disk_cache_row,
106 download_folder_row,
107 download_change_btn,
108 download_clear_btn,
109 border_width_row,
110 border_color_btn,
111 }
112}