use std::collections::HashMap;
-use std::cmp::max;
use itertools::Itertools;
use super::activity_stack::{
let mut rmaxwid = 0;
for line in &self.lines {
if let MenuLine::Key(mk) = line {
- let (lwid, rwid) = mk.get_widths();
- lmaxwid = max(lmaxwid, lwid);
- rmaxwid = max(rmaxwid, rwid);
+ mk.check_widths(&mut lmaxwid, &mut rmaxwid);
}
}
for line in &mut self.lines {
use itertools::Itertools;
-use std::cmp::max;
use std::iter::once;
use strum::IntoEnumIterator;
use sys_locale::get_locale;
fn fix_widths(&mut self) -> (usize, usize) {
let mut lmaxwid = 0;
let mut rmaxwid = 0;
- let mut check_widths = |ml: &MenuKeypressLine| {
- let (lwid, rwid) = ml.get_widths();
- lmaxwid = max(lmaxwid, lwid);
- rmaxwid = max(rmaxwid, rwid);
- };
- check_widths(&self.ml_post);
- check_widths(&self.ml_cancel);
- check_widths(&self.ml_edit);
- check_widths(&self.ml_content_warning);
- check_widths(&self.ml_language);
+ self.ml_post.check_widths(&mut lmaxwid, &mut rmaxwid);
+ self.ml_cancel.check_widths(&mut lmaxwid, &mut rmaxwid);
+ self.ml_edit.check_widths(&mut lmaxwid, &mut rmaxwid);
+ self.ml_content_warning.check_widths(&mut lmaxwid, &mut rmaxwid);
+ self.ml_language.check_widths(&mut lmaxwid, &mut rmaxwid);
for vis in Visibility::iter() {
- check_widths(&Self::visibility_item(vis));
+ Self::visibility_item(vis).check_widths(&mut lmaxwid, &mut rmaxwid);
}
if let Some(ref ml) = self.editor_prompt {
- check_widths(ml);
+ ml.check_widths(&mut lmaxwid, &mut rmaxwid);
}
self.ml_post.reset_widths();
rmaxwid: usize,
}
+pub trait MenuKeypressLineGeneral {
+ fn check_widths(&self, lmaxwid: &mut usize, rmaxwid: &mut usize);
+ fn reset_widths(&mut self);
+ fn ensure_widths(&mut self, lmaxwid: usize, rmaxwid: usize);
+}
+
impl MenuKeypressLine {
pub fn new(key: OurKey, description: ColouredString)
-> Self {
rmaxwid: rwid,
}
}
+}
- pub fn get_widths(&self) -> (usize, usize) { (self.lwid, self.rwid) }
- pub fn reset_widths(&mut self) {
+impl MenuKeypressLineGeneral for MenuKeypressLine {
+ fn check_widths(&self, lmaxwid: &mut usize, rmaxwid: &mut usize) {
+ *lmaxwid = max(*lmaxwid, self.lwid);
+ *rmaxwid = max(*rmaxwid, self.rwid);
+ }
+ fn reset_widths(&mut self) {
self.lmaxwid = self.lwid;
self.rmaxwid = self.rwid;
}
- pub fn ensure_widths(&mut self, lmaxwid: usize, rmaxwid: usize) {
+ fn ensure_widths(&mut self, lmaxwid: usize, rmaxwid: usize) {
self.lmaxwid = max(self.lmaxwid, lmaxwid);
self.rmaxwid = max(self.rmaxwid, rmaxwid);
}