Skip to content

Commit

Permalink
Calculator: Add support for copy+paste using system clipboard
Browse files Browse the repository at this point in the history
  • Loading branch information
bcoles authored and awesomekling committed Feb 24, 2021
1 parent 1ba1ca7 commit 9bc3c3c
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 1 deletion.
11 changes: 11 additions & 0 deletions Userland/Applications/Calculator/CalculatorWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
2 changes: 2 additions & 0 deletions Userland/Applications/Calculator/CalculatorWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
17 changes: 16 additions & 1 deletion Userland/Applications/Calculator/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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));
Expand All @@ -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));

Expand Down

0 comments on commit 9bc3c3c

Please sign in to comment.