diff options
author | Samuel Bowman <sam@sambowman.tech> | 2021-09-30 22:32:01 -0400 |
---|---|---|
committer | Ali Mohammad Pur <Ali.mpfard@gmail.com> | 2021-10-01 08:34:59 +0330 |
commit | e422bfbe88ae5cd9ef5c7fbee836fe0dbf90f149 (patch) | |
tree | 1a7ad29e5d7094f5e86ac8650058c07dccc653cd /Userland/Applications/Spreadsheet | |
parent | d8bac4dbdae44a5fadc53aa70fa6dc7c4bdb2a6d (diff) | |
download | serenity-e422bfbe88ae5cd9ef5c7fbee836fe0dbf90f149.zip |
Spreadsheet: Store actions in member variables on SpreadsheetWidget
Actions are now stored in member variables so they can be used
throughout SpreadsheetWidget.
Diffstat (limited to 'Userland/Applications/Spreadsheet')
-rw-r--r-- | Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp | 215 | ||||
-rw-r--r-- | Userland/Applications/Spreadsheet/SpreadsheetWidget.h | 11 |
2 files changed, 123 insertions, 103 deletions
diff --git a/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp b/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp index a3a487e4ba..bf22d4daef 100644 --- a/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp +++ b/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp @@ -83,7 +83,7 @@ SpreadsheetWidget::SpreadsheetWidget(NonnullRefPtrVector<Sheet>&& sheets, bool s m_workbook->add_sheet("Sheet 1"); m_tab_context_menu = GUI::Menu::construct(); - auto rename_action = GUI::Action::create("Rename...", [this](auto&) { + m_rename_action = GUI::Action::create("Rename...", [this](auto&) { VERIFY(m_tab_context_menu_sheet_view); auto* sheet_ptr = m_tab_context_menu_sheet_view->sheet_if_available(); @@ -96,7 +96,7 @@ SpreadsheetWidget::SpreadsheetWidget(NonnullRefPtrVector<Sheet>&& sheets, bool s m_tab_widget->set_tab_title(static_cast<GUI::Widget&>(*m_tab_context_menu_sheet_view), new_name); } }); - m_tab_context_menu->add_action(rename_action); + m_tab_context_menu->add_action(*m_rename_action); m_tab_context_menu->add_action(GUI::Action::create("Add new sheet...", [this](auto&) { String name; if (GUI::InputBox::show(window(), name, "Name for new sheet", "Create sheet") == GUI::Dialog::ExecOK) { @@ -107,6 +107,106 @@ SpreadsheetWidget::SpreadsheetWidget(NonnullRefPtrVector<Sheet>&& sheets, bool s })); setup_tabs(m_workbook->sheets()); + + m_new_action = GUI::Action::create("Add New Sheet", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-tab.png"), [&](auto&) { + add_sheet(); + }); + + m_open_action = GUI::CommonActions::make_open_action([&](auto&) { + Optional<String> load_path = GUI::FilePicker::get_open_filepath(window()); + if (!load_path.has_value()) + return; + + load(load_path.value()); + }); + + m_save_action = GUI::CommonActions::make_save_action([&](auto&) { + if (current_filename().is_empty()) { + String name = "workbook"; + Optional<String> save_path = GUI::FilePicker::get_save_filepath(window(), name, "sheets"); + if (!save_path.has_value()) + return; + + save(save_path.value()); + } else { + save(current_filename()); + } + }); + + m_save_as_action = GUI::CommonActions::make_save_as_action([&](auto&) { + String name = "workbook"; + Optional<String> save_path = GUI::FilePicker::get_save_filepath(window(), name, "sheets"); + if (!save_path.has_value()) + return; + + save(save_path.value()); + + if (!current_filename().is_empty()) + set_filename(current_filename()); + }); + + m_quit_action = GUI::CommonActions::make_quit_action([&](auto&) { + if (!request_close()) + return; + GUI::Application::the()->quit(0); + }); + + m_cut_action = GUI::CommonActions::make_cut_action([&](auto&) { clipboard_action(true); }, window()); + m_copy_action = GUI::CommonActions::make_copy_action([&](auto&) { clipboard_action(false); }, window()); + m_paste_action = GUI::CommonActions::make_paste_action([&](auto&) { + ScopeGuard update_after_paste { [&] { update(); } }; + + auto* worksheet_ptr = current_worksheet_if_available(); + if (!worksheet_ptr) { + GUI::MessageBox::show_error(window(), "There are no active worksheets"); + return; + } + auto& sheet = *worksheet_ptr; + auto& cells = sheet.selected_cells(); + VERIFY(!cells.is_empty()); + const auto& data = GUI::Clipboard::the().data_and_type(); + if (auto spreadsheet_data = data.metadata.get("text/x-spreadsheet-data"); spreadsheet_data.has_value()) { + Vector<Spreadsheet::Position> source_positions, target_positions; + auto lines = spreadsheet_data.value().split_view('\n'); + auto action = lines.take_first(); + + for (auto& line : lines) { + dbgln("Paste line '{}'", line); + auto position = sheet.position_from_url(line); + if (position.has_value()) + source_positions.append(position.release_value()); + } + + for (auto& position : sheet.selected_cells()) + target_positions.append(position); + + if (source_positions.is_empty()) + return; + + auto first_position = source_positions.take_first(); + sheet.copy_cells(move(source_positions), move(target_positions), first_position, action == "cut" ? Spreadsheet::Sheet::CopyOperation::Cut : Spreadsheet::Sheet::CopyOperation::Copy); + } else { + for (auto& cell : sheet.selected_cells()) + sheet.ensure(cell).set_data(StringView { data.data.data(), data.data.size() }); + update(); + } + }, + window()); + + m_functions_help_action = GUI::Action::create( + "&Functions Help", [&](auto&) { + if (auto* worksheet_ptr = current_worksheet_if_available()) { + auto docs = worksheet_ptr->gather_documentation(); + auto help_window = Spreadsheet::HelpWindow::the(window()); + help_window->set_docs(move(docs)); + help_window->show(); + } else { + GUI::MessageBox::show_error(window(), "Cannot prepare documentation/help without an active worksheet"); + } + }, + window()); + + m_about_action = GUI::CommonActions::make_about_action("Spreadsheet", GUI::Icon::default_icon("app-spreadsheet"), window()); } void SpreadsheetWidget::resize_event(GUI::ResizeEvent& event) @@ -391,112 +491,21 @@ void SpreadsheetWidget::clipboard_action(bool is_cut) void SpreadsheetWidget::initialize_menubar(GUI::Window& window) { auto& file_menu = window.add_menu("&File"); - - file_menu.add_action(GUI::Action::create("Add New Sheet", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-tab.png"), [&](auto&) { - add_sheet(); - })); - - file_menu.add_action(GUI::CommonActions::make_open_action([&](auto&) { - Optional<String> load_path = GUI::FilePicker::get_open_filepath(&window); - if (!load_path.has_value()) - return; - - load(load_path.value()); - })); - - file_menu.add_action(GUI::CommonActions::make_save_action([&](auto&) { - if (current_filename().is_empty()) { - String name = "workbook"; - Optional<String> save_path = GUI::FilePicker::get_save_filepath(&window, name, "sheets"); - if (!save_path.has_value()) - return; - - save(save_path.value()); - } else { - save(current_filename()); - } - })); - - file_menu.add_action(GUI::CommonActions::make_save_as_action([&](auto&) { - String name = "workbook"; - Optional<String> save_path = GUI::FilePicker::get_save_filepath(&window, name, "sheets"); - if (!save_path.has_value()) - return; - - save(save_path.value()); - - if (!current_filename().is_empty()) - set_filename(current_filename()); - })); - + file_menu.add_action(*m_new_action); + file_menu.add_action(*m_open_action); + file_menu.add_action(*m_save_action); + file_menu.add_action(*m_save_as_action); file_menu.add_separator(); - - file_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { - if (!request_close()) - return; - GUI::Application::the()->quit(0); - })); + file_menu.add_action(*m_quit_action); auto& edit_menu = window.add_menu("&Edit"); - - edit_menu.add_action(GUI::CommonActions::make_cut_action([&](auto&) { clipboard_action(true); }, &window)); - edit_menu.add_action(GUI::CommonActions::make_copy_action([&](auto&) { clipboard_action(false); }, &window)); - edit_menu.add_action(GUI::CommonActions::make_paste_action([&](auto&) { - ScopeGuard update_after_paste { [&] { update(); } }; - - auto* worksheet_ptr = current_worksheet_if_available(); - if (!worksheet_ptr) { - GUI::MessageBox::show_error(&window, "There are no active worksheets"); - return; - } - auto& sheet = *worksheet_ptr; - auto& cells = sheet.selected_cells(); - VERIFY(!cells.is_empty()); - const auto& data = GUI::Clipboard::the().data_and_type(); - if (auto spreadsheet_data = data.metadata.get("text/x-spreadsheet-data"); spreadsheet_data.has_value()) { - Vector<Spreadsheet::Position> source_positions, target_positions; - auto lines = spreadsheet_data.value().split_view('\n'); - auto action = lines.take_first(); - - for (auto& line : lines) { - dbgln("Paste line '{}'", line); - auto position = sheet.position_from_url(line); - if (position.has_value()) - source_positions.append(position.release_value()); - } - - for (auto& position : sheet.selected_cells()) - target_positions.append(position); - - if (source_positions.is_empty()) - return; - - auto first_position = source_positions.take_first(); - sheet.copy_cells(move(source_positions), move(target_positions), first_position, action == "cut" ? Spreadsheet::Sheet::CopyOperation::Cut : Spreadsheet::Sheet::CopyOperation::Copy); - } else { - for (auto& cell : sheet.selected_cells()) - sheet.ensure(cell).set_data(StringView { data.data.data(), data.data.size() }); - update(); - } - }, - &window)); + edit_menu.add_action(*m_cut_action); + edit_menu.add_action(*m_copy_action); + edit_menu.add_action(*m_paste_action); auto& help_menu = window.add_menu("&Help"); - - help_menu.add_action(GUI::Action::create( - "&Functions Help", [&](auto&) { - if (auto* worksheet_ptr = current_worksheet_if_available()) { - auto docs = worksheet_ptr->gather_documentation(); - auto help_window = Spreadsheet::HelpWindow::the(&window); - help_window->set_docs(move(docs)); - help_window->show(); - } else { - GUI::MessageBox::show_error(&window, "Cannot prepare documentation/help without an active worksheet"); - } - }, - &window)); - - help_menu.add_action(GUI::CommonActions::make_about_action("Spreadsheet", GUI::Icon::default_icon("app-spreadsheet"), &window)); + help_menu.add_action(*m_functions_help_action); + help_menu.add_action(*m_about_action); } SpreadsheetWidget::~SpreadsheetWidget() diff --git a/Userland/Applications/Spreadsheet/SpreadsheetWidget.h b/Userland/Applications/Spreadsheet/SpreadsheetWidget.h index dcdb51e4be..9748476f10 100644 --- a/Userland/Applications/Spreadsheet/SpreadsheetWidget.h +++ b/Userland/Applications/Spreadsheet/SpreadsheetWidget.h @@ -64,6 +64,17 @@ private: OwnPtr<Workbook> m_workbook; void clipboard_action(bool is_cut); + RefPtr<GUI::Action> m_new_action; + RefPtr<GUI::Action> m_open_action; + RefPtr<GUI::Action> m_save_action; + RefPtr<GUI::Action> m_save_as_action; + RefPtr<GUI::Action> m_quit_action; + RefPtr<GUI::Action> m_cut_action; + RefPtr<GUI::Action> m_copy_action; + RefPtr<GUI::Action> m_paste_action; + RefPtr<GUI::Action> m_functions_help_action; + RefPtr<GUI::Action> m_about_action; + RefPtr<GUI::Action> m_rename_action; }; } |