From: Ian Jackson Date: Sun, 4 Feb 2024 18:46:34 +0000 (+0000) Subject: optiuons: Break out YourOptionsMenuContents X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=51c4de764a262e91544685a1131c4cbb2d53fa10;p=mastodonochrome.git optiuons: Break out YourOptionsMenuContents Much textual churn, but no functional change. --- diff --git a/src/options.rs b/src/options.rs index 5b75364..72838e4 100644 --- a/src/options.rs +++ b/src/options.rs @@ -13,6 +13,10 @@ struct YourOptionsMenu { title: FileHeader, normal_status: FileStatusLineFinal, edit_status: FileStatusLineFinal, + c: YourOptionsMenuContents, +} + +struct YourOptionsMenuContents { el_display_name: EditableMenuLine, // N cl_default_vis: CyclingMenuLine, cl_default_sensitive: CyclingMenuLine, @@ -130,10 +134,7 @@ impl YourOptionsMenu { ac.bot, ); - let mut menu = YourOptionsMenu { - title, - normal_status, - edit_status, + let mut c = YourOptionsMenuContents { el_display_name, cl_default_vis, cl_default_sensitive, @@ -144,10 +145,18 @@ impl YourOptionsMenu { cl_hide_collections, cl_indexable, }; - menu.fix_widths(); + c.fix_widths(); + let menu = YourOptionsMenu { + title, + normal_status, + edit_status, + c, + }; Ok(menu) } +} +impl YourOptionsMenuContents { fn fix_widths(&mut self) -> (usize, usize) { let mut lmaxwid = 0; let mut rmaxwid = 0; @@ -188,18 +197,22 @@ impl YourOptionsMenu { (lmaxwid, rmaxwid) } +} +// XXXX join these two impl blocks again +impl YourOptionsMenu { fn submit(&self, client: &mut Client) -> LogicalAction { + let c = &self.c; let details = AccountDetails { - display_name: self.el_display_name.get_data().clone(), - default_visibility: self.cl_default_vis.get_value(), - default_sensitive: self.cl_default_sensitive.get_value(), - default_language: self.el_default_language.get_data().clone(), - locked: self.cl_locked.get_value(), - bot: self.cl_bot.get_value(), - discoverable: self.cl_discoverable.get_value(), - hide_collections: self.cl_hide_collections.get_value(), - indexable: self.cl_indexable.get_value(), + display_name: c.el_display_name.get_data().clone(), + default_visibility: c.cl_default_vis.get_value(), + default_sensitive: c.cl_default_sensitive.get_value(), + default_language: c.el_default_language.get_data().clone(), + locked: c.cl_locked.get_value(), + bot: c.cl_bot.get_value(), + discoverable: c.cl_discoverable.get_value(), + hide_collections: c.cl_hide_collections.get_value(), + indexable: c.cl_indexable.get_value(), }; match client.set_account_details(&client.our_account_id(), details) { @@ -219,33 +232,33 @@ impl ActivityState for YourOptionsMenu { let mut cursorpos = CursorPosition::End; lines.extend_from_slice(&self.title.render(w)); lines.extend_from_slice(&BlankLine::render_static()); - lines.push(self.el_display_name.render( + lines.push(self.c.el_display_name.render( w, &mut cursorpos, lines.len(), )); lines.extend_from_slice(&BlankLine::render_static()); - lines.extend_from_slice(&self.cl_default_vis.render(w)); - lines.push(self.el_default_language.render( + lines.extend_from_slice(&self.c.cl_default_vis.render(w)); + lines.push(self.c.el_default_language.render( w, &mut cursorpos, lines.len(), )); - lines.extend_from_slice(&self.cl_default_sensitive.render(w)); + lines.extend_from_slice(&self.c.cl_default_sensitive.render(w)); lines.extend_from_slice(&BlankLine::render_static()); - lines.extend_from_slice(&self.cl_locked.render(w)); - lines.extend_from_slice(&self.cl_hide_collections.render(w)); - lines.extend_from_slice(&self.cl_discoverable.render(w)); - lines.extend_from_slice(&self.cl_indexable.render(w)); + lines.extend_from_slice(&self.c.cl_locked.render(w)); + lines.extend_from_slice(&self.c.cl_hide_collections.render(w)); + lines.extend_from_slice(&self.c.cl_discoverable.render(w)); + lines.extend_from_slice(&self.c.cl_indexable.render(w)); lines.extend_from_slice(&BlankLine::render_static()); - lines.extend_from_slice(&self.cl_bot.render(w)); + lines.extend_from_slice(&self.c.cl_bot.render(w)); while lines.len() + 1 < h { lines.extend_from_slice(&BlankLine::render_static()); } - if self.el_display_name.is_editing() - || self.el_default_language.is_editing() + if self.c.el_display_name.is_editing() + || self.c.el_default_language.is_editing() { lines.extend_from_slice(&self.edit_status.render(w)); } else { @@ -261,32 +274,32 @@ impl ActivityState for YourOptionsMenu { client: &mut Client, ) -> LogicalAction { // Let editable menu lines have first crack at the keypress - if self.el_display_name.handle_keypress(key) - || self.el_default_language.handle_keypress(key) + if self.c.el_display_name.handle_keypress(key) + || self.c.el_default_language.handle_keypress(key) { - self.fix_widths(); + self.c.fix_widths(); return LogicalAction::Nothing; } match key { Space => self.submit(client), Pr('q') | Pr('Q') | Return => LogicalAction::Pop, - Pr('n') | Pr('N') => self.el_display_name.start_editing(), - Pr('v') | Pr('V') => self.cl_default_vis.cycle(), - Pr('l') | Pr('L') => self.el_default_language.start_editing(), - Pr('s') | Pr('S') => self.cl_default_sensitive.cycle(), - Ctrl('K') => self.cl_locked.cycle(), - Ctrl('F') => self.cl_hide_collections.cycle(), - Ctrl('D') => self.cl_discoverable.cycle(), - Ctrl('X') => self.cl_indexable.cycle(), - Ctrl('B') => self.cl_bot.cycle(), + Pr('n') | Pr('N') => self.c.el_display_name.start_editing(), + Pr('v') | Pr('V') => self.c.cl_default_vis.cycle(), + Pr('l') | Pr('L') => self.c.el_default_language.start_editing(), + Pr('s') | Pr('S') => self.c.cl_default_sensitive.cycle(), + Ctrl('K') => self.c.cl_locked.cycle(), + Ctrl('F') => self.c.cl_hide_collections.cycle(), + Ctrl('D') => self.c.cl_discoverable.cycle(), + Ctrl('X') => self.c.cl_indexable.cycle(), + Ctrl('B') => self.c.cl_bot.cycle(), _ => LogicalAction::Nothing, } } fn resize(&mut self, w: usize, _h: usize) { - self.el_display_name.resize(w); - self.el_default_language.resize(w); + self.c.el_display_name.resize(w); + self.c.el_default_language.resize(w); } }