소스 검색

HexEditor: Make `HexEditor::open_new_file` fallible and reduce branching

Returning a `bool` is meaningless, so let's make it more expresive :^)
James Puleo 3 년 전
부모
커밋
88cf40179d
3개의 변경된 파일15개의 추가작업 그리고 18개의 파일을 삭제
  1. 3 8
      Userland/Applications/HexEditor/HexEditor.cpp
  2. 1 1
      Userland/Applications/HexEditor/HexEditor.h
  3. 11 9
      Userland/Applications/HexEditor/HexEditorWidget.cpp

+ 3 - 8
Userland/Applications/HexEditor/HexEditor.cpp

@@ -49,14 +49,9 @@ HexEditor::HexEditor()
     m_blink_timer->start();
 }
 
-bool HexEditor::open_new_file(size_t size)
+ErrorOr<void> HexEditor::open_new_file(size_t size)
 {
-    auto maybe_buffer = ByteBuffer::create_zeroed(size);
-    if (maybe_buffer.is_error()) {
-        return false;
-    }
-
-    m_document = make<HexDocumentMemory>(maybe_buffer.release_value());
+    m_document = make<HexDocumentMemory>(TRY(ByteBuffer::create_zeroed(size)));
     set_content_length(m_document->size());
     m_position = 0;
     m_cursor_at_low_nibble = false;
@@ -66,7 +61,7 @@ bool HexEditor::open_new_file(size_t size)
     update();
     update_status();
 
-    return true;
+    return {};
 }
 
 void HexEditor::open_file(NonnullRefPtr<Core::File> file)

+ 1 - 1
Userland/Applications/HexEditor/HexEditor.h

@@ -33,7 +33,7 @@ public:
     virtual ~HexEditor() override = default;
 
     size_t buffer_size() const { return m_document->size(); }
-    bool open_new_file(size_t size);
+    ErrorOr<void> open_new_file(size_t size);
     void open_file(NonnullRefPtr<Core::File> file);
     void fill_selection(u8 fill_byte);
     Optional<u8> get_byte(size_t position);

+ 11 - 9
Userland/Applications/HexEditor/HexEditorWidget.cpp

@@ -95,17 +95,19 @@ HexEditorWidget::HexEditorWidget()
     m_new_action = GUI::Action::create("New", { Mod_Ctrl, Key_N }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new.png"sv).release_value_but_fixme_should_propagate_errors(), [this](const GUI::Action&) {
         String value;
         if (request_close() && GUI::InputBox::show(window(), value, "Enter new file size:"sv, "New file size"sv) == GUI::InputBox::ExecResult::OK && !value.is_empty()) {
-            auto file_size = value.to_int();
-            if (file_size.has_value() && file_size.value() > 0) {
-                window()->set_modified(false);
-                if (!m_editor->open_new_file(file_size.value())) {
-                    GUI::MessageBox::show(window(), "Entered file size is too large."sv, "Error"sv, GUI::MessageBox::Type::Error);
-                    return;
-                }
-                set_path({});
-            } else {
+            auto file_size = value.to_uint();
+            if (!file_size.has_value()) {
                 GUI::MessageBox::show(window(), "Invalid file size entered."sv, "Error"sv, GUI::MessageBox::Type::Error);
+                return;
             }
+
+            if (auto error = m_editor->open_new_file(file_size.value()); error.is_error()) {
+                GUI::MessageBox::show(window(), String::formatted("Unable to open new file: {}"sv, error.error()), "Error"sv, GUI::MessageBox::Type::Error);
+                return;
+            }
+
+            set_path({});
+            window()->set_modified(false);
         }
     });