initial commit
This commit is contained in:
161
src/ui/settings.rs
Normal file
161
src/ui/settings.rs
Normal file
@@ -0,0 +1,161 @@
|
||||
use crate::app::EncodingSettings;
|
||||
use eframe::egui;
|
||||
|
||||
pub struct Settings;
|
||||
|
||||
impl Settings {
|
||||
pub fn new() -> Self {
|
||||
Self
|
||||
}
|
||||
|
||||
pub fn show(&mut self, ui: &mut egui::Ui, settings: &mut EncodingSettings) {
|
||||
ui.heading("Encoding Settings");
|
||||
ui.add_space(12.0);
|
||||
|
||||
// Quality slider
|
||||
ui.horizontal(|ui| {
|
||||
ui.label("Quality:");
|
||||
ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
|
||||
ui.label(format!("{}", settings.quality));
|
||||
});
|
||||
});
|
||||
let quality_slider = egui::Slider::new(&mut settings.quality, 0..=100)
|
||||
.show_value(false);
|
||||
ui.add(quality_slider);
|
||||
ui.add_space(4.0);
|
||||
ui.label(
|
||||
egui::RichText::new("0 = smallest file, 100 = best quality")
|
||||
.small()
|
||||
.weak(),
|
||||
);
|
||||
|
||||
ui.add_space(12.0);
|
||||
|
||||
// Alpha quality slider
|
||||
ui.horizontal(|ui| {
|
||||
ui.label("Alpha Quality:");
|
||||
ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
|
||||
ui.label(format!("{}", settings.alpha_quality));
|
||||
});
|
||||
});
|
||||
let alpha_slider = egui::Slider::new(&mut settings.alpha_quality, 0..=100)
|
||||
.show_value(false);
|
||||
ui.add(alpha_slider);
|
||||
ui.add_space(4.0);
|
||||
ui.label(
|
||||
egui::RichText::new("Separate quality for transparency")
|
||||
.small()
|
||||
.weak(),
|
||||
);
|
||||
|
||||
ui.add_space(12.0);
|
||||
|
||||
// Speed slider
|
||||
ui.horizontal(|ui| {
|
||||
ui.label("Speed:");
|
||||
ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
|
||||
ui.label(format!("{}", settings.speed));
|
||||
});
|
||||
});
|
||||
let speed_slider = egui::Slider::new(&mut settings.speed, 0..=10)
|
||||
.show_value(false);
|
||||
ui.add(speed_slider);
|
||||
ui.add_space(4.0);
|
||||
ui.label(
|
||||
egui::RichText::new("0 = slowest/best, 10 = fastest")
|
||||
.small()
|
||||
.weak(),
|
||||
);
|
||||
|
||||
ui.add_space(16.0);
|
||||
ui.separator();
|
||||
ui.add_space(8.0);
|
||||
|
||||
// Lossless checkbox
|
||||
let mut lossless = settings.lossless;
|
||||
if ui.checkbox(&mut lossless, "Lossless mode").changed() {
|
||||
settings.lossless = lossless;
|
||||
if lossless {
|
||||
settings.quality = 100;
|
||||
settings.alpha_quality = 100;
|
||||
}
|
||||
}
|
||||
ui.add_space(4.0);
|
||||
ui.label(
|
||||
egui::RichText::new("Perfect quality, larger files")
|
||||
.small()
|
||||
.weak(),
|
||||
);
|
||||
|
||||
ui.add_space(16.0);
|
||||
ui.separator();
|
||||
ui.add_space(8.0);
|
||||
|
||||
// FPS Override
|
||||
ui.label("FPS Override (for videos):");
|
||||
ui.add_space(4.0);
|
||||
|
||||
let has_override = settings.fps_override.is_some();
|
||||
let mut fps_value = settings.fps_override.unwrap_or(30.0);
|
||||
|
||||
ui.horizontal(|ui| {
|
||||
let mut use_override = has_override;
|
||||
if ui.checkbox(&mut use_override, "").changed() {
|
||||
if use_override {
|
||||
settings.fps_override = Some(fps_value);
|
||||
} else {
|
||||
settings.fps_override = None;
|
||||
}
|
||||
}
|
||||
|
||||
ui.add_enabled_ui(has_override, |ui| {
|
||||
let fps_edit = egui::DragValue::new(&mut fps_value)
|
||||
.speed(0.5)
|
||||
.range(1.0..=120.0)
|
||||
.suffix(" fps");
|
||||
if ui.add(fps_edit).changed() && has_override {
|
||||
settings.fps_override = Some(fps_value);
|
||||
}
|
||||
});
|
||||
|
||||
if !has_override {
|
||||
ui.label(egui::RichText::new("Auto-detect").weak());
|
||||
}
|
||||
});
|
||||
|
||||
ui.add_space(16.0);
|
||||
ui.separator();
|
||||
ui.add_space(8.0);
|
||||
|
||||
// Output directory
|
||||
ui.label("Output Directory:");
|
||||
ui.add_space(4.0);
|
||||
|
||||
if ui
|
||||
.checkbox(&mut settings.use_same_directory, "Same as source")
|
||||
.changed()
|
||||
{
|
||||
if settings.use_same_directory {
|
||||
settings.output_directory = None;
|
||||
}
|
||||
}
|
||||
|
||||
ui.add_enabled_ui(!settings.use_same_directory, |ui| {
|
||||
ui.horizontal(|ui| {
|
||||
let dir_text = settings
|
||||
.output_directory
|
||||
.as_ref()
|
||||
.map(|p| p.display().to_string())
|
||||
.unwrap_or_else(|| "Not set".to_string());
|
||||
|
||||
ui.label(egui::RichText::new(&dir_text).small());
|
||||
});
|
||||
|
||||
if ui.button("Browse...").clicked() {
|
||||
if let Some(path) = rfd::FileDialog::new().pick_folder() {
|
||||
settings.output_directory = Some(path);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user