Spreadsheet: Highlight the source causing an exception in red

This commit makes the cell editor highlight the likely source of the
exception in red.
This commit is contained in:
AnotherTest 2020-12-28 20:46:39 +03:30 committed by Andreas Kling
parent b34b681811
commit aa5b43a2bc
Notes: sideshowbarker 2024-07-19 00:28:33 +09:00
3 changed files with 21 additions and 0 deletions

View file

@ -53,6 +53,19 @@ void CellSyntaxHighlighter::rehighlight(Gfx::Palette palette)
false,
false,
nullptr);
if (m_cell && m_cell->exception()) {
auto range = m_cell->exception()->source_ranges().first();
GUI::TextRange text_range { { range.start.line - 1, range.start.column }, { range.end.line - 1, range.end.column - 1 } };
m_editor->document().spans().prepend({ text_range,
Color::Black,
Color::Red,
false,
false,
false,
nullptr });
}
m_editor->update();
}
CellSyntaxHighlighter::~CellSyntaxHighlighter()

View file

@ -26,6 +26,7 @@
#pragma once
#include "Cell.h"
#include <LibGUI/JSSyntaxHighlighter.h>
#include <LibGUI/SyntaxHighlighter.h>
@ -37,6 +38,10 @@ public:
virtual ~CellSyntaxHighlighter() override;
virtual void rehighlight(Gfx::Palette) override;
void set_cell(const Cell* cell) { m_cell = cell; }
private:
const Cell* m_cell { nullptr };
};
}

View file

@ -142,6 +142,7 @@ void SpreadsheetWidget::setup_tabs(NonnullRefPtrVector<Sheet> new_sheets)
update();
};
m_cell_value_editor->set_enabled(true);
static_cast<CellSyntaxHighlighter*>(const_cast<GUI::SyntaxHighlighter*>(m_cell_value_editor->syntax_highlighter()))->set_cell(&cell);
return;
}
@ -169,9 +170,11 @@ void SpreadsheetWidget::setup_tabs(NonnullRefPtrVector<Sheet> new_sheets)
}
};
m_cell_value_editor->set_enabled(true);
static_cast<CellSyntaxHighlighter*>(const_cast<GUI::SyntaxHighlighter*>(m_cell_value_editor->syntax_highlighter()))->set_cell(cells.first());
};
m_selected_view->on_selection_dropped = [&]() {
m_cell_value_editor->set_enabled(false);
static_cast<CellSyntaxHighlighter*>(const_cast<GUI::SyntaxHighlighter*>(m_cell_value_editor->syntax_highlighter()))->set_cell(nullptr);
m_cell_value_editor->set_text("");
m_current_cell_label->set_enabled(false);
m_current_cell_label->set_text("");