/* * Copyright (c) 2020, the SerenityOS developers. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include "Forward.h" #include "Spreadsheet.h" #include namespace Spreadsheet { class Workbook { public: Workbook(NonnullRefPtrVector&& sheets, GUI::Window& parent_window); ErrorOr open_file(String const& filename, Core::Stream::File&); ErrorOr write_to_file(String const& filename, Core::Stream::File&); ErrorOr import_file(String const& filename, Core::Stream::File&); DeprecatedString const& current_filename() const { return m_current_filename; } bool set_filename(DeprecatedString const& filename); bool dirty() { return m_dirty; } void set_dirty(bool dirty) { m_dirty = dirty; } bool has_sheets() const { return !m_sheets.is_empty(); } NonnullRefPtrVector const& 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; GUI::Window& m_parent_window; DeprecatedString m_current_filename; bool m_dirty { false }; }; }