use adw::prelude::*; pub fn build_output_page() -> adw::NavigationPage { let scrolled = gtk::ScrolledWindow::builder() .hscrollbar_policy(gtk::PolicyType::Never) .vexpand(true) .build(); let content = gtk::Box::builder() .orientation(gtk::Orientation::Vertical) .spacing(12) .margin_top(12) .margin_bottom(12) .margin_start(24) .margin_end(24) .build(); // Operation summary let summary_group = adw::PreferencesGroup::builder() .title("Operation Summary") .description("Review your processing settings before starting") .build(); let summary_placeholder = adw::ActionRow::builder() .title("No operations configured") .subtitle("Go back and configure your workflow settings") .build(); summary_placeholder.add_prefix(>k::Image::from_icon_name("dialog-information-symbolic")); summary_group.add(&summary_placeholder); content.append(&summary_group); // Output directory let output_group = adw::PreferencesGroup::builder() .title("Output Directory") .build(); let output_row = adw::ActionRow::builder() .title("Output Location") .subtitle("processed/ (subfolder next to originals)") .activatable(true) .build(); output_row.add_prefix(>k::Image::from_icon_name("folder-symbolic")); let choose_button = gtk::Button::builder() .icon_name("folder-open-symbolic") .tooltip_text("Choose output folder") .valign(gtk::Align::Center) .action_name("win.choose-output") .build(); choose_button.add_css_class("flat"); output_row.add_suffix(&choose_button); output_row.add_suffix(>k::Image::from_icon_name("go-next-symbolic")); let structure_row = adw::SwitchRow::builder() .title("Preserve Directory Structure") .subtitle("Keep subfolder hierarchy in output") .active(false) .build(); output_group.add(&output_row); output_group.add(&structure_row); content.append(&output_group); // Overwrite behavior let overwrite_group = adw::PreferencesGroup::builder() .title("If Files Already Exist") .build(); let overwrite_row = adw::ComboRow::builder() .title("Overwrite Behavior") .subtitle("What to do when output file already exists") .build(); let overwrite_model = gtk::StringList::new(&[ "Ask before overwriting", "Auto-rename with suffix", "Always overwrite", "Skip existing files", ]); overwrite_row.set_model(Some(&overwrite_model)); overwrite_group.add(&overwrite_row); content.append(&overwrite_group); // Image count let stats_group = adw::PreferencesGroup::builder() .title("Batch Info") .build(); let count_row = adw::ActionRow::builder() .title("Images to process") .subtitle("0 images") .build(); count_row.add_prefix(>k::Image::from_icon_name("image-x-generic-symbolic")); stats_group.add(&count_row); content.append(&stats_group); scrolled.set_child(Some(&content)); let clamp = adw::Clamp::builder() .maximum_size(600) .child(&scrolled) .build(); adw::NavigationPage::builder() .title("Output & Process") .tag("step-output") .child(&clamp) .build() }