chiark / gitweb /
optiuons: Break out YourOptionsMenuContents
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 4 Feb 2024 18:46:34 +0000 (18:46 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 4 Feb 2024 20:38:09 +0000 (20:38 +0000)
Much textual churn, but no functional change.

src/options.rs

index 5b7536427c6e55e1739c84097ac8a36da5f3d09b..72838e442989814cbcde85f1d6e92e9b39c58f75 100644 (file)
@@ -13,6 +13,10 @@ struct YourOptionsMenu {
     title: FileHeader,
     normal_status: FileStatusLineFinal,
     edit_status: FileStatusLineFinal,
+    c: YourOptionsMenuContents,
+}
+
+struct YourOptionsMenuContents {
     el_display_name: EditableMenuLine<String>, // N
     cl_default_vis: CyclingMenuLine<Visibility>,
     cl_default_sensitive: CyclingMenuLine<bool>,
@@ -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);
     }
 }