Sfoglia il codice sorgente

HexEditor: Added fill selection action.

Added the ability to fill the current selection with a given byte.
Brandon Scott 5 anni fa
parent
commit
c77fe5161c

+ 14 - 0
Applications/HexEditor/HexEditor.cpp

@@ -44,6 +44,20 @@ void HexEditor::set_buffer(const ByteBuffer& buffer)
     update_status();
 }
 
+void HexEditor::fill_selection(u8 fill_byte)
+{
+    if (m_selection_start == -1 || m_selection_end == -1 || (m_selection_end - m_selection_start) < 0 || m_buffer.is_empty())
+        return;
+
+    for (int i = m_selection_start; i <= m_selection_end; i++) {
+        m_tracked_changes.set(i, m_buffer.data()[i]);
+        m_buffer.data()[i] = fill_byte;
+    }
+
+    update();
+    did_change();
+}
+
 void HexEditor::set_position(int position)
 {
     if (position > m_buffer.size())

+ 1 - 0
Applications/HexEditor/HexEditor.h

@@ -22,6 +22,7 @@ public:
     void set_readonly(bool);
 
     void set_buffer(const ByteBuffer&);
+    void fill_selection(u8 fill_byte);
     bool write_to_file(const StringView& path);
 
     bool copy_selected_text_to_clipboard();

+ 8 - 0
Applications/HexEditor/HexEditorWidget.cpp

@@ -147,6 +147,14 @@ HexEditorWidget::HexEditorWidget()
     });
 
     auto edit_menu = make<GMenu>("Edit");
+    edit_menu->add_action(GAction::create("Fill selection...", [&](const GAction&) {
+        auto input_box = GInputBox::construct("Fill byte (hex):", "Fill Selection", this);
+        if (input_box->exec() == GInputBox::ExecOK && !input_box->text_value().is_empty()) {
+            auto fill_byte = strtol(input_box->text_value().characters(), nullptr, 16);
+            m_editor->fill_selection(fill_byte);
+        }
+    }));
+    edit_menu->add_separator();
     edit_menu->add_action(*m_goto_decimal_offset_action);
     edit_menu->add_action(*m_goto_hex_offset_action);
     edit_menu->add_separator();