/* * Copyright (c) 2020-2022, the SerenityOS developers. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include "SpreadsheetView.h" #include "Workbook.h" #include #include #include #include namespace Spreadsheet { class SpreadsheetWidget final : public GUI::Widget , public GUI::Clipboard::ClipboardClient { C_OBJECT(SpreadsheetWidget); public: virtual ~SpreadsheetWidget() override = default; void save(StringView filename); void load_file(Core::File&); bool request_close(); void add_sheet(); void add_sheet(NonnullRefPtr&&); String const& current_filename() const { return m_workbook->current_filename(); } SpreadsheetView* current_view() { return static_cast(m_tab_widget->active_widget()); } Sheet* current_worksheet_if_available() { return current_view() ? current_view()->sheet_if_available() : nullptr; } void update_window_title(); Workbook& workbook() { return *m_workbook; } Workbook const& workbook() const { return *m_workbook; } const GUI::ModelIndex* current_selection_cursor() { if (!current_view()) return nullptr; return current_view()->cursor(); } void initialize_menubar(GUI::Window&); void undo(); void redo(); auto& undo_stack() { return m_undo_stack; } private: // ^GUI::Widget virtual void resize_event(GUI::ResizeEvent&) override; // ^GUI::Clipboard::ClipboardClient virtual void clipboard_content_did_change(String const& mime_type) override; explicit SpreadsheetWidget(GUI::Window& window, NonnullRefPtrVector&& sheets = {}, bool should_add_sheet_if_empty = true); void setup_tabs(NonnullRefPtrVector new_sheets); void try_generate_tip_for_input_expression(StringView source, size_t offset); RefPtr m_current_cell_label; RefPtr m_cell_value_editor; RefPtr m_inline_documentation_window; RefPtr m_inline_documentation_label; RefPtr m_tab_widget; RefPtr m_tab_context_menu; RefPtr m_tab_context_menu_sheet_view; bool m_should_change_selected_cells { false }; GUI::UndoStack m_undo_stack; OwnPtr m_workbook; void clipboard_action(bool is_cut); RefPtr m_new_action; RefPtr m_open_action; RefPtr m_save_action; RefPtr m_save_as_action; RefPtr m_quit_action; RefPtr m_cut_action; RefPtr m_copy_action; RefPtr m_paste_action; RefPtr m_undo_action; RefPtr m_redo_action; RefPtr m_functions_help_action; RefPtr m_about_action; RefPtr m_rename_action; }; }