From b3a9a25416f4d3643c672b671e8038758f263bb9 Mon Sep 17 00:00:00 2001 From: AnotherTest Date: Sun, 20 Dec 2020 15:09:57 +0330 Subject: [PATCH] Spreadsheet: Make it possible to rename sheets --- .../Spreadsheet/SpreadsheetWidget.cpp | 29 +++++++++++++++++++ Applications/Spreadsheet/SpreadsheetWidget.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/Applications/Spreadsheet/SpreadsheetWidget.cpp b/Applications/Spreadsheet/SpreadsheetWidget.cpp index a079a73266..5734b888f0 100644 --- a/Applications/Spreadsheet/SpreadsheetWidget.cpp +++ b/Applications/Spreadsheet/SpreadsheetWidget.cpp @@ -27,10 +27,12 @@ #include "SpreadsheetWidget.h" #include "CellSyntaxHighlighter.h" #include "HelpWindow.h" +#include "LibGUI/InputBox.h" #include #include #include #include +#include #include #include #include @@ -81,6 +83,28 @@ SpreadsheetWidget::SpreadsheetWidget(NonnullRefPtrVector&& sheets, bool s if (!m_workbook->has_sheets() && should_add_sheet_if_empty) m_workbook->add_sheet("Sheet 1"); + m_tab_context_menu = GUI::Menu::construct(); + auto rename_action = GUI::Action::create("Rename...", [this](auto&) { + ASSERT(m_tab_context_menu_sheet_view); + + auto& sheet = m_tab_context_menu_sheet_view->sheet(); + String new_name; + if (GUI::InputBox::show(new_name, window(), String::formatted("New name for '{}'", sheet.name()), "Rename sheet") == GUI::Dialog::ExecOK) { + sheet.set_name(new_name); + sheet.update(); + m_tab_widget->set_tab_title(static_cast(*m_tab_context_menu_sheet_view), new_name); + } + }); + m_tab_context_menu->add_action(rename_action); + m_tab_context_menu->add_action(GUI::Action::create("Add new sheet...", [this](auto&) { + String name; + if (GUI::InputBox::show(name, window(), "Name for new sheet", "Create sheet") == GUI::Dialog::ExecOK) { + NonnullRefPtrVector new_sheets; + new_sheets.append(m_workbook->add_sheet(name)); + setup_tabs(move(new_sheets)); + } + })); + setup_tabs(m_workbook->sheets()); } @@ -159,6 +183,11 @@ void SpreadsheetWidget::setup_tabs(NonnullRefPtrVector new_sheets) m_tab_widget->on_change = [change = move(change)](auto& selected_widget) { change(selected_widget); }; + + m_tab_widget->on_context_menu_request = [&](auto& widget, auto& event) { + m_tab_context_menu_sheet_view = widget; + m_tab_context_menu->popup(event.screen_position()); + }; } void SpreadsheetWidget::save(const StringView& filename) diff --git a/Applications/Spreadsheet/SpreadsheetWidget.h b/Applications/Spreadsheet/SpreadsheetWidget.h index 27060b2843..10eb908da0 100644 --- a/Applications/Spreadsheet/SpreadsheetWidget.h +++ b/Applications/Spreadsheet/SpreadsheetWidget.h @@ -69,6 +69,8 @@ private: RefPtr m_current_cell_label; RefPtr m_cell_value_editor; RefPtr m_tab_widget; + RefPtr m_tab_context_menu; + RefPtr m_tab_context_menu_sheet_view; bool m_should_change_selected_cells { false }; OwnPtr m_workbook;