diff options
author | Brendan Coles <bcoles@gmail.com> | 2021-02-24 14:35:39 +0000 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-02-24 22:01:37 +0100 |
commit | 9bc3c3c9628926de22fe19f12672472fc9dfe661 (patch) | |
tree | 6b8d60ac855e03cc07ba7e81bca50c5a3dd9931b /Userland/Applications | |
parent | 1ba1ca76d8c8922916984d42f081f08b7839d54b (diff) | |
download | serenity-9bc3c3c9628926de22fe19f12672472fc9dfe661.zip |
Calculator: Add support for copy+paste using system clipboard
Diffstat (limited to 'Userland/Applications')
-rw-r--r-- | Userland/Applications/Calculator/CalculatorWidget.cpp | 11 | ||||
-rw-r--r-- | Userland/Applications/Calculator/CalculatorWidget.h | 2 | ||||
-rw-r--r-- | Userland/Applications/Calculator/main.cpp | 17 |
3 files changed, 29 insertions, 1 deletions
diff --git a/Userland/Applications/Calculator/CalculatorWidget.cpp b/Userland/Applications/Calculator/CalculatorWidget.cpp index df648640a0..f2ae66413a 100644 --- a/Userland/Applications/Calculator/CalculatorWidget.cpp +++ b/Userland/Applications/Calculator/CalculatorWidget.cpp @@ -147,6 +147,17 @@ void CalculatorWidget::add_digit_button(GUI::Button& button, int digit) }; } +String CalculatorWidget::get_entry() +{ + return m_entry->text(); +} + +void CalculatorWidget::set_entry(double value) +{ + m_keypad.set_value(value); + update_display(); +} + void CalculatorWidget::update_display() { m_entry->set_text(m_keypad.to_string()); diff --git a/Userland/Applications/Calculator/CalculatorWidget.h b/Userland/Applications/Calculator/CalculatorWidget.h index 31d9548b3c..857f27fc82 100644 --- a/Userland/Applications/Calculator/CalculatorWidget.h +++ b/Userland/Applications/Calculator/CalculatorWidget.h @@ -36,6 +36,8 @@ class CalculatorWidget final : public GUI::Widget { C_OBJECT(CalculatorWidget) public: virtual ~CalculatorWidget() override; + String get_entry(); + void set_entry(double); private: CalculatorWidget(); diff --git a/Userland/Applications/Calculator/main.cpp b/Userland/Applications/Calculator/main.cpp index a2a10f1029..91ee969d23 100644 --- a/Userland/Applications/Calculator/main.cpp +++ b/Userland/Applications/Calculator/main.cpp @@ -27,6 +27,7 @@ #include "CalculatorWidget.h" #include <LibGUI/Action.h> #include <LibGUI/Application.h> +#include <LibGUI/Clipboard.h> #include <LibGUI/Icon.h> #include <LibGUI/Menu.h> #include <LibGUI/MenuBar.h> @@ -62,7 +63,7 @@ int main(int argc, char** argv) window->set_resizable(false); window->resize(254, 213); - window->set_main_widget<CalculatorWidget>(); + auto& widget = window->set_main_widget<CalculatorWidget>(); window->show(); window->set_icon(app_icon.bitmap_for_size(16)); @@ -75,6 +76,20 @@ int main(int argc, char** argv) return; })); + auto& edit_menu = menubar->add_menu("Edit"); + edit_menu.add_action(GUI::Action::create("Copy", { Mod_Ctrl, Key_C }, Gfx::Bitmap::load_from_file("/res/icons/16x16/edit-copy.png"), [&](const GUI::Action&) { + GUI::Clipboard::the().set_plain_text(widget.get_entry()); + })); + edit_menu.add_action(GUI::Action::create("Paste", { Mod_Ctrl, Key_V }, Gfx::Bitmap::load_from_file("/res/icons/16x16/paste.png"), [&](const GUI::Action&) { + auto clipboard = GUI::Clipboard::the().data_and_type(); + if (clipboard.mime_type == "text/plain") { + if (!clipboard.data.is_empty()) { + auto data = atof(StringView(clipboard.data).to_string().characters()); + widget.set_entry(data); + } + } + })); + auto& help_menu = menubar->add_menu("Help"); help_menu.add_action(GUI::CommonActions::make_about_action("Calculator", app_icon, window)); |