diff --git a/src/main.rs b/src/main.rs index f1352fe..33d692a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -91,6 +91,14 @@ fn build_ui(app: &Application) { action_toggle_neighbour .connect_activate(move |_, _| _sender.send(Message::UI(UIMessage::ToggleGrid)).unwrap()); + let _sender = sender.clone(); + image_ui + .skip_marked_checkbox + .connect_toggled(move |check_button| { + let value = check_button.is_active(); + _sender.send(Message::SkipMarkedToogled(value)).unwrap(); + }); + let _sender = sender.clone(); let action_focus_scale_increment = SimpleAction::new("increment_focus_scale", None); action_focus_scale_increment.connect_activate(move |_, _| { diff --git a/src/state/mod.rs b/src/state/mod.rs index 9a6267d..d906443 100644 --- a/src/state/mod.rs +++ b/src/state/mod.rs @@ -17,6 +17,7 @@ pub enum Message { PreviousImage, UI(UIMessage), OpenFile(File), + SkipMarkedToogled(bool), Quit, } @@ -39,6 +40,7 @@ pub struct State { file_name: Option, annotation_cache: Vec, pub root_path: Option, + skip_marked: bool, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct LightAnnotation { @@ -64,6 +66,7 @@ impl State { file_name: None, annotation_cache: Vec::new(), root_path: None, + skip_marked: true, } } @@ -101,6 +104,9 @@ impl State { Message::FocusLevelChange(lvl) => { self.set_focus_image_index(Some(*lvl)); } + Message::SkipMarkedToogled(value) => { + self.skip_marked = value.clone(); + } Message::UI(_) => {} } } @@ -159,8 +165,18 @@ impl State { let len = self.stacks.len(); if len == 0 { self.stack_index = None; - } else if self.stack_index.map_or_else(|| false, |x| x + 1 < len) { - self.stack_index = self.stack_index.map(|x| x + 1) + } else { + loop { + if self.stack_index.map_or_else(|| false, |x| x + 1 < len) { + self.stack_index = self.stack_index.map(|x| x + 1) + } else { + break; + } + + if !self.skip_marked || self.get_current_foucs_stack_best_index() == None { + break; + } + } } eprintln!("{:?}", self.stack_index) diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 2ef4d40..e159342 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -7,8 +7,9 @@ use gtk::{ BoxExt, ButtonExt, DialogExt, FileChooserExt, GridExt, GtkApplicationExt, GtkWindowExt, RangeExt, ScaleExt, ToggleButtonExt, WidgetExt, }, - ActionBar, AspectFrame, Box, Button, FileChooserAction, FileChooserDialog, FileFilter, Grid, - Image, Orientation, PositionType, ResponseType, Scale, Separator, ToggleButton, + ActionBar, AspectFrame, Box, Button, CheckButton, FileChooserAction, FileChooserDialog, + FileFilter, Grid, Image, Orientation, PositionType, ResponseType, Scale, Separator, + ToggleButton, }; use crate::{ @@ -32,6 +33,7 @@ pub struct ImageUI { pub focus_neighbours_aspect_frame: Arc, pub neighbour_toggle_button: ToggleButton, + pub skip_marked_checkbox: CheckButton, pub open_button: Arc, pub back_button: Arc