CharacterMap: Add output box for copying arbitrary character sequences

This adds a TextBox along the bottom of the window. Double-clicking on a
character will append it to this box, which you can edit as any other
TextBox, or click the copy button to copy the output to the clipboard.
This commit is contained in:
Sam Atkins 2022-01-11 20:24:11 +00:00 committed by Andreas Kling
parent ff500ffcc4
commit 9ca8428238
Notes: sideshowbarker 2024-07-17 20:46:15 +09:00
3 changed files with 36 additions and 0 deletions

View File

@ -14,6 +14,7 @@
#include <LibGUI/Icon.h>
#include <LibGUI/Label.h>
#include <LibGUI/Menu.h>
#include <LibGUI/TextBox.h>
#include <LibGUI/Toolbar.h>
#include <LibUnicode/CharacterTypes.h>
@ -24,6 +25,8 @@ CharacterMapWidget::CharacterMapWidget()
m_toolbar = find_descendant_of_type_named<GUI::Toolbar>("toolbar");
m_font_name_label = find_descendant_of_type_named<GUI::Label>("font_name");
m_glyph_map = find_descendant_of_type_named<GUI::GlyphMapWidget>("glyph_map");
m_output_box = find_descendant_of_type_named<GUI::TextBox>("output_box");
m_copy_output_button = find_descendant_of_type_named<GUI::Button>("copy_output_button");
m_statusbar = find_descendant_of_type_named<GUI::Statusbar>("statusbar");
m_choose_font_action = GUI::Action::create("Choose Font...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-font-editor.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
@ -54,6 +57,17 @@ CharacterMapWidget::CharacterMapWidget()
update_statusbar();
};
m_glyph_map->on_glyph_double_clicked = [&](int code_point) {
StringBuilder builder;
builder.append(m_output_box->text());
builder.append_code_point(code_point);
m_output_box->set_text(builder.string_view());
};
m_copy_output_button->on_click = [&](auto) {
GUI::Clipboard::the().set_plain_text(m_output_box->text());
};
did_change_font();
update_statusbar();
}
@ -77,6 +91,7 @@ void CharacterMapWidget::did_change_font()
{
m_glyph_map->set_font(font());
m_font_name_label->set_text(font().qualified_name());
m_output_box->set_font(font());
}
void CharacterMapWidget::update_statusbar()

View File

@ -27,6 +27,8 @@ private:
RefPtr<GUI::Toolbar> m_toolbar;
RefPtr<GUI::Label> m_font_name_label;
RefPtr<GUI::GlyphMapWidget> m_glyph_map;
RefPtr<GUI::TextBox> m_output_box;
RefPtr<GUI::Button> m_copy_output_button;
RefPtr<GUI::Statusbar> m_statusbar;
RefPtr<GUI::Action> m_choose_font_action;

View File

@ -38,6 +38,25 @@
name: "glyph_map"
}
@GUI::Widget {
shrink_to_fit: true
layout: @GUI::HorizontalBoxLayout {
spacing: 4
margins: [0, 2, 0, 2]
}
@GUI::TextBox {
name: "output_box"
}
@GUI::Button {
name: "copy_output_button"
icon: "/res/icons/16x16/edit-copy.png"
fixed_width: 22
}
}
@GUI::Statusbar {
name: "statusbar"
}