let result = tui.main_loop();
let _ = &tui.subthread_sender; // FIXME: this just suppresses a warning
- let _ = &tui.client; // FIXME: this just suppresses a warning
disable_raw_mode()?;
stdout().execute(LeaveAlternateScreen)?;
Event::Key(key) => {
if key.kind == KeyEventKind::Press {
for ourkey in Self::translate_keypress(key) {
- match self.state.handle_keypress(ourkey) {
+ match self.state.handle_keypress(
+ ourkey, &mut self.client) {
PhysicalAction::Beep => {
Self::beep()?
},
activity_state: Box<dyn ActivityState>,
}
-fn new_activity_state(activity: Activity) -> Box<dyn ActivityState> {
+fn new_activity_state(activity: Activity, _client: &mut Client) ->
+ Box<dyn ActivityState>
+{
match activity {
Activity::NonUtil(NonUtilityActivity::MainMenu) => main_menu(),
Activity::Util(UtilityActivity::UtilsMenu) => utils_menu(),
impl TuiLogicalState {
fn new() -> Self {
let activity_stack = ActivityStack::new();
- let activity_state = new_activity_state(activity_stack.top());
+ // It would be nice to construct this by calling
+ // new_activity_state, but we don't have a &mut Client to give
+ // it, and in this case we know we don't need one.
+ let activity_state = main_menu();
TuiLogicalState {
activity_stack: activity_stack,
}
}
- fn handle_keypress(&mut self, key: OurKey) -> PhysicalAction {
+ fn handle_keypress(&mut self, key: OurKey, client: &mut Client) ->
+ PhysicalAction
+ {
let logact = match key {
// Central handling of [ESC]: it _always_ goes to the
// utilities menu, from any UI context at all.
LogicalAction::NYI => PhysicalAction::Beep,
LogicalAction::Goto(activity) => {
self.activity_stack.goto(activity);
- self.changed_activity();
+ self.changed_activity(client);
PhysicalAction::Nothing
},
LogicalAction::Pop => {
self.activity_stack.pop();
- self.changed_activity();
+ self.changed_activity(client);
PhysicalAction::Nothing
},
}
}
- fn changed_activity(&mut self) {
- self.activity_state = new_activity_state(self.activity_stack.top());
+ fn changed_activity(&mut self, client: &mut Client) {
+ self.activity_state = new_activity_state(
+ self.activity_stack.top(), client);
}
}