mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-01-06 16:45:03 +00:00
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:
committed by
Andreas Kling
parent
ff500ffcc4
commit
9ca8428238
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user