mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 12:17:35 +00:00
Calculator: Use numeric InputBox for digit rounding and shrinking
Calc was using a bespoke SpinBox dialog which is no longer necessary.
This commit is contained in:
parent
a55d2be147
commit
8d86f2e69f
4 changed files with 9 additions and 109 deletions
|
@ -9,7 +9,6 @@ set(SOURCES
|
||||||
main.cpp
|
main.cpp
|
||||||
Calculator.cpp
|
Calculator.cpp
|
||||||
CalculatorWidget.cpp
|
CalculatorWidget.cpp
|
||||||
RoundingDialog.cpp
|
|
||||||
Keypad.cpp
|
Keypad.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,71 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2022, Lucas Chollet <lucas.chollet@free.fr>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "RoundingDialog.h"
|
|
||||||
#include <LibGUI/BoxLayout.h>
|
|
||||||
#include <LibGUI/Button.h>
|
|
||||||
#include <LibGUI/Label.h>
|
|
||||||
#include <LibGUI/SpinBox.h>
|
|
||||||
#include <LibGUI/TextEditor.h>
|
|
||||||
|
|
||||||
RoundingDialog::ExecResult RoundingDialog::show(GUI::Window* parent_window, StringView title, unsigned& rounding_value)
|
|
||||||
{
|
|
||||||
auto dialog = RoundingDialog::construct(parent_window, title);
|
|
||||||
|
|
||||||
if (parent_window) {
|
|
||||||
dialog->set_icon(parent_window->icon());
|
|
||||||
dialog->center_within(*parent_window);
|
|
||||||
}
|
|
||||||
|
|
||||||
dialog->m_rounding_spinbox->set_value(rounding_value);
|
|
||||||
|
|
||||||
auto const result = dialog->exec();
|
|
||||||
|
|
||||||
if (result != GUI::Dialog::ExecResult::OK)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
rounding_value = dialog->m_rounding_spinbox->value();
|
|
||||||
|
|
||||||
return GUI::Dialog::ExecResult::OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
RoundingDialog::RoundingDialog(GUI::Window* parent_window, StringView title)
|
|
||||||
: Dialog(parent_window)
|
|
||||||
{
|
|
||||||
resize(m_dialog_length, m_dialog_height);
|
|
||||||
set_resizable(false);
|
|
||||||
set_title(title);
|
|
||||||
|
|
||||||
auto main_widget = set_main_widget<GUI::Widget>().release_value_but_fixme_should_propagate_errors();
|
|
||||||
|
|
||||||
main_widget->set_fill_with_background_color(true);
|
|
||||||
main_widget->set_layout<GUI::VerticalBoxLayout>();
|
|
||||||
|
|
||||||
m_rounding_spinbox = GUI::SpinBox::construct();
|
|
||||||
m_buttons_container = GUI::Widget::construct();
|
|
||||||
m_ok_button = GUI::DialogButton::construct("OK"_short_string);
|
|
||||||
m_cancel_button = GUI::DialogButton::construct("Cancel"_short_string);
|
|
||||||
|
|
||||||
main_widget->add_child(*m_rounding_spinbox);
|
|
||||||
main_widget->add_child(*m_buttons_container);
|
|
||||||
|
|
||||||
m_buttons_container->set_layout<GUI::HorizontalBoxLayout>();
|
|
||||||
m_buttons_container->add_spacer().release_value_but_fixme_should_propagate_errors();
|
|
||||||
m_buttons_container->add_child(*m_ok_button);
|
|
||||||
m_buttons_container->add_child(*m_cancel_button);
|
|
||||||
|
|
||||||
m_rounding_spinbox->on_return_pressed = [this] {
|
|
||||||
m_ok_button->click();
|
|
||||||
};
|
|
||||||
|
|
||||||
m_ok_button->on_click = [this](auto) {
|
|
||||||
done(ExecResult::OK);
|
|
||||||
};
|
|
||||||
|
|
||||||
m_cancel_button->on_click = [this](auto) {
|
|
||||||
done(ExecResult::Cancel);
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2022, Lucas Chollet <lucas.chollet@free.fr>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <AK/Vector.h>
|
|
||||||
#include <LibGUI/Dialog.h>
|
|
||||||
|
|
||||||
class RoundingDialog : public GUI::Dialog {
|
|
||||||
C_OBJECT(RoundingDialog);
|
|
||||||
|
|
||||||
public:
|
|
||||||
static ExecResult show(GUI::Window* parent_window, StringView title, unsigned& rounding_value);
|
|
||||||
|
|
||||||
private:
|
|
||||||
RoundingDialog(GUI::Window* parent_window, StringView title);
|
|
||||||
virtual ~RoundingDialog() override = default;
|
|
||||||
|
|
||||||
RefPtr<GUI::SpinBox> m_rounding_spinbox;
|
|
||||||
RefPtr<GUI::Widget> m_buttons_container;
|
|
||||||
RefPtr<GUI::DialogButton> m_ok_button;
|
|
||||||
RefPtr<GUI::DialogButton> m_cancel_button;
|
|
||||||
|
|
||||||
static constexpr unsigned m_dialog_length = 200;
|
|
||||||
static constexpr unsigned m_dialog_height = 54;
|
|
||||||
};
|
|
|
@ -5,7 +5,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "CalculatorWidget.h"
|
#include "CalculatorWidget.h"
|
||||||
#include "RoundingDialog.h"
|
|
||||||
#include <LibCore/System.h>
|
#include <LibCore/System.h>
|
||||||
#include <LibCrypto/NumberTheory/ModularFunctions.h>
|
#include <LibCrypto/NumberTheory/ModularFunctions.h>
|
||||||
#include <LibGUI/Action.h>
|
#include <LibGUI/Action.h>
|
||||||
|
@ -13,6 +12,7 @@
|
||||||
#include <LibGUI/Application.h>
|
#include <LibGUI/Application.h>
|
||||||
#include <LibGUI/Clipboard.h>
|
#include <LibGUI/Clipboard.h>
|
||||||
#include <LibGUI/Icon.h>
|
#include <LibGUI/Icon.h>
|
||||||
|
#include <LibGUI/InputBox.h>
|
||||||
#include <LibGUI/Menu.h>
|
#include <LibGUI/Menu.h>
|
||||||
#include <LibGUI/Menubar.h>
|
#include <LibGUI/Menubar.h>
|
||||||
#include <LibGUI/Window.h>
|
#include <LibGUI/Window.h>
|
||||||
|
@ -90,22 +90,23 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
|
|
||||||
constexpr auto format { "&Custom - {} ..."sv };
|
constexpr auto format { "&Custom - {} ..."sv };
|
||||||
auto round_custom = GUI::Action::create_checkable(DeprecatedString::formatted(format, 0), [&](auto& action) {
|
auto round_custom = GUI::Action::create_checkable(DeprecatedString::formatted(format, 0), [&](auto& action) {
|
||||||
unsigned custom_rounding_length = widget->rounding_length();
|
int custom_rounding_length = widget->rounding_length();
|
||||||
|
auto result = GUI::InputBox::show_numeric(window, custom_rounding_length, 0, 100, "Round to"sv);
|
||||||
if (RoundingDialog::show(window, "Choose custom rounding"sv, custom_rounding_length) == GUI::Dialog::ExecResult::OK) {
|
if (!result.is_error() && result.value() == GUI::Dialog::ExecResult::OK) {
|
||||||
action.set_text(DeprecatedString::formatted(format, custom_rounding_length));
|
action.set_text(DeprecatedString::formatted(format, custom_rounding_length));
|
||||||
widget->set_rounding_length(custom_rounding_length);
|
widget->set_rounding_length(custom_rounding_length);
|
||||||
last_rounding_mode.clear();
|
last_rounding_mode.clear();
|
||||||
} else if (last_rounding_mode.has_value())
|
} else if (last_rounding_mode.has_value())
|
||||||
round_menu.action_at(last_rounding_mode.value())->activate();
|
round_menu.action_at(last_rounding_mode.value())
|
||||||
|
->activate();
|
||||||
});
|
});
|
||||||
|
|
||||||
widget->set_rounding_custom(round_custom, format);
|
widget->set_rounding_custom(round_custom, format);
|
||||||
|
|
||||||
auto shrink_action = GUI::Action::create("&Shrink...", TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/edit-cut.png"sv)), [&](auto&) {
|
auto shrink_action = GUI::Action::create("&Shrink...", TRY(Gfx::Bitmap::load_from_file("/res/icons/16x16/edit-cut.png"sv)), [&](auto&) {
|
||||||
unsigned shrink_length = widget->rounding_length();
|
int shrink_length = widget->rounding_length();
|
||||||
|
auto result = GUI::InputBox::show_numeric(window, shrink_length, 0, 100, "Shrink to"sv);
|
||||||
if (RoundingDialog::show(window, "Choose shrinking length"sv, shrink_length) == GUI::Dialog::ExecResult::OK) {
|
if (!result.is_error() && result.value() == GUI::Dialog::ExecResult::OK) {
|
||||||
round_custom->set_checked(true);
|
round_custom->set_checked(true);
|
||||||
round_custom->set_text(DeprecatedString::formatted(format, shrink_length));
|
round_custom->set_text(DeprecatedString::formatted(format, shrink_length));
|
||||||
widget->set_rounding_length(shrink_length);
|
widget->set_rounding_length(shrink_length);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue