Improve UX, add popover tour, metadata, and hicolor icons
This commit is contained in:
@@ -57,7 +57,9 @@ pub fn build_settings_dialog() -> adw::PreferencesDialog {
|
||||
.activatable(true)
|
||||
.visible(config.output_fixed_path.is_some())
|
||||
.build();
|
||||
fixed_path_row.add_prefix(>k::Image::from_icon_name("folder-open-symbolic"));
|
||||
let fp_icon = gtk::Image::from_icon_name("folder-open-symbolic");
|
||||
fp_icon.set_accessible_role(gtk::AccessibleRole::Presentation);
|
||||
fixed_path_row.add_prefix(&fp_icon);
|
||||
|
||||
let choose_fixed_btn = gtk::Button::builder()
|
||||
.icon_name("document-open-symbolic")
|
||||
@@ -65,6 +67,9 @@ pub fn build_settings_dialog() -> adw::PreferencesDialog {
|
||||
.valign(gtk::Align::Center)
|
||||
.build();
|
||||
choose_fixed_btn.add_css_class("flat");
|
||||
choose_fixed_btn.update_property(&[
|
||||
gtk::accessible::Property::Label("Choose output folder"),
|
||||
]);
|
||||
fixed_path_row.add_suffix(&choose_fixed_btn);
|
||||
|
||||
// Shared state for fixed path
|
||||
@@ -164,7 +169,34 @@ pub fn build_settings_dialog() -> adw::PreferencesDialog {
|
||||
.build();
|
||||
reset_button.add_css_class("destructive-action");
|
||||
|
||||
// Reset welcome wizard / tutorial
|
||||
let reset_welcome_state: std::rc::Rc<Cell<bool>> = std::rc::Rc::new(Cell::new(false));
|
||||
|
||||
let reset_welcome_row = adw::ActionRow::builder()
|
||||
.title("Reset welcome wizard")
|
||||
.subtitle("Show the setup wizard and tutorial again on next launch")
|
||||
.build();
|
||||
|
||||
let reset_welcome_btn = gtk::Button::builder()
|
||||
.label("Reset")
|
||||
.valign(gtk::Align::Center)
|
||||
.build();
|
||||
reset_welcome_btn.add_css_class("destructive-action");
|
||||
|
||||
{
|
||||
let rws = reset_welcome_state.clone();
|
||||
let row = reset_welcome_row.clone();
|
||||
reset_welcome_btn.connect_clicked(move |btn| {
|
||||
rws.set(true);
|
||||
btn.set_sensitive(false);
|
||||
row.set_subtitle("Will show on next launch");
|
||||
});
|
||||
}
|
||||
|
||||
reset_welcome_row.add_suffix(&reset_welcome_btn);
|
||||
|
||||
ui_group.add(&skill_row);
|
||||
ui_group.add(&reset_welcome_row);
|
||||
general_page.add(&ui_group);
|
||||
|
||||
// File Manager Integration
|
||||
@@ -432,6 +464,9 @@ pub fn build_settings_dialog() -> adw::PreferencesDialog {
|
||||
.css_classes(["boxed-list"])
|
||||
.build();
|
||||
watch_list.set_widget_name("watch-folder-list");
|
||||
watch_list.update_property(&[
|
||||
gtk::accessible::Property::Label("Configured watch folders for automatic processing"),
|
||||
]);
|
||||
|
||||
// Shared state for watch folders
|
||||
let watch_folders_state: std::rc::Rc<std::cell::RefCell<Vec<pixstrip_core::watcher::WatchFolder>>> =
|
||||
@@ -564,9 +599,10 @@ pub fn build_settings_dialog() -> adw::PreferencesDialog {
|
||||
|
||||
// Save settings when the dialog closes
|
||||
dialog.connect_closed(move |_| {
|
||||
let welcome_reset = reset_welcome_state.get();
|
||||
let new_config = AppConfig {
|
||||
first_run_complete: true,
|
||||
tutorial_complete: true, // preserve if settings are being saved
|
||||
first_run_complete: !welcome_reset,
|
||||
tutorial_complete: !welcome_reset,
|
||||
output_subfolder: subfolder_row.text().to_string(),
|
||||
output_fixed_path: if output_mode_row.selected() == 1 {
|
||||
fixed_path_state.borrow().clone()
|
||||
|
||||
Reference in New Issue
Block a user