use super::calibration_wizard::{CalibrationWizard, WizardAction};
use super::Editor;
use crate::input::handler::InputResult;
use crossterm::event::KeyEvent;
use rust_i18n::t;
impl Editor {
pub fn open_calibration_wizard(&mut self) {
self.calibration_wizard = Some(CalibrationWizard::new());
self.set_status_message(t!("calibration.started").to_string());
}
pub fn save_calibration(&mut self, wizard: CalibrationWizard) {
let translator = wizard.build_translator();
let count = translator.len();
if let Err(e) = translator.save_default() {
tracing::error!("Failed to save key calibration: {}", e);
self.set_status_message(
t!("calibration.save_error", error = e.to_string()).to_string(),
);
return;
}
self.key_translator = translator;
self.set_status_message(t!("calibration.saved", count = count).to_string());
}
pub fn handle_calibration_input(&mut self, event: &KeyEvent) -> InputResult {
let mut wizard = match self.calibration_wizard.take() {
Some(w) => w,
None => return InputResult::Ignored,
};
let action = if wizard.has_pending_confirmation() {
wizard.handle_confirmation_key(*event)
} else if wizard.is_verify_phase() {
wizard.handle_verify_key(*event)
} else {
wizard.handle_capture_key(*event)
};
if let Some(msg) = wizard.status_message.take() {
self.set_status_message(msg);
}
match action {
WizardAction::Continue
| WizardAction::GoBack
| WizardAction::SkipGroup
| WizardAction::KeyCaptured
| WizardAction::KeyVerified
| WizardAction::ReservedKey
| WizardAction::ShowConfirmation => {
self.calibration_wizard = Some(wizard);
}
WizardAction::Abort => {
self.set_status_message(t!("calibration.aborted").to_string());
}
WizardAction::Save => {
self.save_calibration(wizard);
}
WizardAction::Restart => {
self.calibration_wizard = Some(wizard);
}
}
InputResult::Consumed
}
pub fn is_calibration_active(&self) -> bool {
self.calibration_wizard.is_some()
}
}