mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-06 16:09:30 +00:00
HexEditor: Add comments to annotations
The comment appears as a tooltip when hovering over the annotation. A couple of properties of the TextEditor would ideally be set in GML, but either don't have a setter exposed, or the GML compiler doesn't recognise the enum. I'll fix those up after the current big GML compiler PR gets merged.
This commit is contained in:
parent
4b1c7533f5
commit
a54952795a
|
@ -50,11 +50,16 @@ EditAnnotationDialog::EditAnnotationDialog(GUI::Window* parent_window, NonnullRe
|
|||
m_start_offset = find_descendant_of_type_named<GUI::NumericInput>("start_offset");
|
||||
m_end_offset = find_descendant_of_type_named<GUI::NumericInput>("end_offset");
|
||||
m_background_color = find_descendant_of_type_named<GUI::ColorInput>("background_color");
|
||||
m_comments = find_descendant_of_type_named<GUI::TextEditor>("comments");
|
||||
m_save_button = find_descendant_of_type_named<GUI::DialogButton>("save_button");
|
||||
m_cancel_button = find_descendant_of_type_named<GUI::DialogButton>("cancel_button");
|
||||
|
||||
// FIXME: This could be specified in GML, but the GML doesn't like property setters that aren't `set_FOO()`.
|
||||
m_background_color->set_color_has_alpha_channel(false);
|
||||
// FIXME: Move this to GML too.
|
||||
m_comments->set_wrapping_mode(GUI::TextEditor::WrapAtWords);
|
||||
// FIXME: `font_type: "Normal"` in GML once the compiler supports that.
|
||||
m_comments->set_font(widget->font());
|
||||
|
||||
// NOTE: The NumericInput stores an i64, so not all size_t values can fit. But I don't think we'll be
|
||||
// hex-editing files larger than 9000 petabytes for the foreseeable future!
|
||||
|
@ -74,6 +79,7 @@ EditAnnotationDialog::EditAnnotationDialog(GUI::Window* parent_window, NonnullRe
|
|||
m_start_offset->set_value(m_annotation->start_offset);
|
||||
m_end_offset->set_value(m_annotation->end_offset);
|
||||
m_background_color->set_color(m_annotation->background_color);
|
||||
m_comments->set_text(m_annotation->comments);
|
||||
},
|
||||
[this](Selection& selection) {
|
||||
set_title("Add Annotation"sv);
|
||||
|
@ -84,6 +90,7 @@ EditAnnotationDialog::EditAnnotationDialog(GUI::Window* parent_window, NonnullRe
|
|||
m_end_offset->set_value(selection.is_empty() ? selection.end : selection.end - 1);
|
||||
// Default to the most recently used annotation color.
|
||||
m_background_color->set_color(s_most_recent_color);
|
||||
m_comments->clear();
|
||||
});
|
||||
|
||||
m_save_button->on_click = [this](auto) {
|
||||
|
@ -93,6 +100,7 @@ EditAnnotationDialog::EditAnnotationDialog(GUI::Window* parent_window, NonnullRe
|
|||
.start_offset = min(start_offset, end_offset),
|
||||
.end_offset = max(start_offset, end_offset),
|
||||
.background_color = m_background_color->color(),
|
||||
.comments = MUST(String::from_byte_string(m_comments->text())),
|
||||
};
|
||||
if (m_annotation.has_value()) {
|
||||
*m_annotation = move(result);
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <LibGUI/ColorInput.h>
|
||||
#include <LibGUI/Dialog.h>
|
||||
#include <LibGUI/NumericInput.h>
|
||||
#include <LibGUI/TextEditor.h>
|
||||
|
||||
class EditAnnotationDialog : public GUI::Dialog {
|
||||
C_OBJECT_ABSTRACT(EditAnnotationDialog)
|
||||
|
@ -32,6 +33,7 @@ private:
|
|||
RefPtr<GUI::NumericInput> m_start_offset;
|
||||
RefPtr<GUI::NumericInput> m_end_offset;
|
||||
RefPtr<GUI::ColorInput> m_background_color;
|
||||
RefPtr<GUI::TextEditor> m_comments;
|
||||
RefPtr<GUI::Button> m_save_button;
|
||||
RefPtr<GUI::Button> m_cancel_button;
|
||||
};
|
||||
|
|
|
@ -54,6 +54,22 @@
|
|||
}
|
||||
}
|
||||
|
||||
@GUI::Widget {
|
||||
layout: @GUI::VerticalBoxLayout {
|
||||
margins: [4]
|
||||
}
|
||||
preferred_height: "fit"
|
||||
|
||||
@GUI::Label {
|
||||
text: "Comments:"
|
||||
text_alignment: "CenterLeft"
|
||||
}
|
||||
|
||||
@GUI::TextEditor {
|
||||
name: "comments"
|
||||
}
|
||||
}
|
||||
|
||||
@GUI::Widget {
|
||||
layout: @GUI::HorizontalBoxLayout {
|
||||
margins: [4]
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
#include <AK/HashMap.h>
|
||||
#include <AK/NonnullOwnPtr.h>
|
||||
#include <AK/String.h>
|
||||
#include <AK/StringView.h>
|
||||
#include <AK/Time.h>
|
||||
#include <AK/Types.h>
|
||||
|
@ -23,6 +24,7 @@ struct Annotation {
|
|||
size_t start_offset { 0 };
|
||||
size_t end_offset { 0 };
|
||||
Gfx::Color background_color { Color::from_argb(0xfffce94f) };
|
||||
String comments {};
|
||||
|
||||
bool operator==(Annotation const& other) const = default;
|
||||
};
|
||||
|
|
|
@ -363,7 +363,11 @@ void HexEditor::mousemove_event(GUI::MouseEvent& event)
|
|||
|
||||
update();
|
||||
update_status();
|
||||
set_tooltip(""_string);
|
||||
} else {
|
||||
set_tooltip(m_hovered_annotation.has_value() ? m_hovered_annotation->comments : ""_string);
|
||||
}
|
||||
show_or_hide_tooltip();
|
||||
}
|
||||
|
||||
void HexEditor::mouseup_event(GUI::MouseEvent& event)
|
||||
|
|
Loading…
Reference in a new issue