Skip to main content

mimick/settings_window/
library.rs

1use 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}