1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 05:27:46 +00:00

Calculator: Add keyboard input for more operations

This commit is contained in:
ForLoveOfCats 2022-02-06 14:30:35 -05:00 committed by Linus Groh
parent 19f80f88bf
commit 697e1810bf
2 changed files with 23 additions and 5 deletions

View file

@ -106,13 +106,18 @@ CalculatorWidget::CalculatorWidget()
};
}
void CalculatorWidget::perform_operation(Calculator::Operation operation)
{
KeypadValue argument = m_keypad.value();
KeypadValue res = m_calculator.begin_operation(operation, argument);
m_keypad.set_value(res);
update_display();
}
void CalculatorWidget::add_operation_button(GUI::Button& button, Calculator::Operation operation)
{
button.on_click = [this, operation](auto) {
KeypadValue argument = m_keypad.value();
KeypadValue res = m_calculator.begin_operation(operation, argument);
m_keypad.set_value(res);
update_display();
perform_operation(operation);
};
}
@ -170,13 +175,25 @@ void CalculatorWidget::keydown_event(GUI::KeyEvent& event)
} else if (event.code_point() == '.') {
m_keypad.type_decimal_point();
mimic_pressed_button(m_decimal_point_button);
} else if (event.key() == KeyCode::Key_Escape) {
} else if (event.key() == KeyCode::Key_Escape || event.key() == KeyCode::Key_Delete) {
m_keypad.set_value(0.0);
m_calculator.clear_operation();
mimic_pressed_button(m_clear_button);
} else if (event.key() == KeyCode::Key_Backspace) {
m_keypad.type_backspace();
mimic_pressed_button(m_backspace_button);
} else if (event.key() == KeyCode::Key_Backslash) {
perform_operation(Calculator::Operation::ToggleSign);
mimic_pressed_button(m_sign_button);
} else if (event.key() == KeyCode::Key_S) {
perform_operation(Calculator::Operation::Sqrt);
mimic_pressed_button(m_sqrt_button);
} else if (event.key() == KeyCode::Key_Percent) {
perform_operation(Calculator::Operation::Percent);
mimic_pressed_button(m_percent_button);
} else if (event.key() == KeyCode::Key_I) {
perform_operation(Calculator::Operation::Inverse);
mimic_pressed_button(m_inverse_button);
} else {
Calculator::Operation operation;

View file

@ -27,6 +27,7 @@ private:
void add_digit_button(GUI::Button&, int digit);
void mimic_pressed_button(RefPtr<GUI::Button>);
void perform_operation(Calculator::Operation operation);
void update_display();
virtual void keydown_event(GUI::KeyEvent&) override;