/* * Copyright (c) 2020, the SerenityOS developers. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include "Forward.h" #include "Spreadsheet.h" #include #include namespace Spreadsheet { class Workbook { public: Workbook(NonnullRefPtrVector&& sheets); Result save(StringView filename); Result load(StringView filename); const String& current_filename() const { return m_current_filename; } bool set_filename(const String& filename); bool dirty() { return m_dirty; } void set_dirty(bool dirty) { m_dirty = dirty; } bool has_sheets() const { return !m_sheets.is_empty(); } const NonnullRefPtrVector& sheets() const { return m_sheets; } NonnullRefPtrVector sheets() { return m_sheets; } Sheet& add_sheet(StringView name) { auto sheet = Sheet::construct(name, *this); m_sheets.append(sheet); return *sheet; } WorkbookObject* workbook_object() { return m_workbook_object; } JS::VM& vm() { return *m_vm; } JS::VM const& vm() const { return *m_vm; } private: NonnullRefPtrVector m_sheets; NonnullRefPtr m_vm; NonnullOwnPtr m_interpreter; JS::VM::InterpreterExecutionScope m_interpreter_scope; WorkbookObject* m_workbook_object { nullptr }; JS::ExecutionContext m_main_execution_context; String m_current_filename; bool m_dirty { false }; }; }