From 5f76ab9836aaf5ae4c2a083b9f3284b3deb401fa Mon Sep 17 00:00:00 2001 From: Marco Santos <101365429+mscode98@users.noreply.github.com> Date: Wed, 21 Sep 2022 00:03:49 +0100 Subject: [PATCH] Spreadsheet: Add toolbar actions to change the cell style --- .../Spreadsheet/ConditionalFormatting.h | 5 +++ .../Spreadsheet/SpreadsheetWidget.cpp | 36 +++++++++++++++++++ .../Spreadsheet/SpreadsheetWidget.h | 3 ++ 3 files changed, 44 insertions(+) diff --git a/Userland/Applications/Spreadsheet/ConditionalFormatting.h b/Userland/Applications/Spreadsheet/ConditionalFormatting.h index 3c52faffd9f..38d38c187fe 100644 --- a/Userland/Applications/Spreadsheet/ConditionalFormatting.h +++ b/Userland/Applications/Spreadsheet/ConditionalFormatting.h @@ -22,6 +22,11 @@ struct ConditionalFormat : public Format { String condition; }; +enum class FormatType { + Background = 0, + Foreground = 1 +}; + class ConditionView : public GUI::Widget { C_OBJECT(ConditionView) public: diff --git a/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp b/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp index 744b161c696..b3072b7a151 100644 --- a/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp +++ b/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -250,6 +251,21 @@ SpreadsheetWidget::SpreadsheetWidget(GUI::Window& parent_window, NonnullRefPtrVe m_undo_action->set_enabled(false); m_redo_action->set_enabled(false); + m_change_background_color_action = GUI::Action::create( + "&Change Background Color", { Mod_Ctrl, Key_B }, Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/bucket.png"sv).release_value_but_fixme_should_propagate_errors(), [&](auto&) { + change_cell_static_color_format(Spreadsheet::FormatType::Background); + }, + window()); + + m_change_foreground_color_action = GUI::Action::create( + "&Change Foreground Color", { Mod_Ctrl, Key_T }, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/text-color.png"sv).release_value_but_fixme_should_propagate_errors(), [&](auto&) { + change_cell_static_color_format(Spreadsheet::FormatType::Foreground); + }, + window()); + + m_change_background_color_action->set_enabled(false); + m_change_foreground_color_action->set_enabled(false); + m_functions_help_action = GUI::Action::create( "&Functions Help", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-help.png"sv).release_value_but_fixme_should_propagate_errors(), [&](auto&) { if (auto* worksheet_ptr = current_worksheet_if_available()) { @@ -274,6 +290,9 @@ SpreadsheetWidget::SpreadsheetWidget(GUI::Window& parent_window, NonnullRefPtrVe toolbar.add_action(*m_paste_action); toolbar.add_action(*m_undo_action); toolbar.add_action(*m_redo_action); + toolbar.add_separator(); + toolbar.add_action(*m_change_background_color_action); + toolbar.add_action(*m_change_foreground_color_action); m_cut_action->set_enabled(false); m_copy_action->set_enabled(false); @@ -334,6 +353,8 @@ void SpreadsheetWidget::setup_tabs(NonnullRefPtrVector new_sheets) m_insert_emoji_action->set_enabled(true); m_current_cell_label->set_enabled(true); m_cell_value_editor->set_enabled(true); + m_change_background_color_action->set_enabled(true); + m_change_foreground_color_action->set_enabled(true); if (selection.size() == 1) { auto& position = selection.first(); @@ -455,6 +476,21 @@ void SpreadsheetWidget::redo() update(); } +void SpreadsheetWidget::change_cell_static_color_format(Spreadsheet::FormatType format_type) +{ + VERIFY(current_worksheet_if_available()); + + auto dialog = GUI::ColorPicker::construct(Color::White, window(), "Select Color"); + if (dialog->exec() == GUI::Dialog::ExecResult::OK) { + for (auto& position : current_worksheet_if_available()->selected_cells()) { + if (format_type == Spreadsheet::FormatType::Background) + current_worksheet_if_available()->at(position)->type_metadata().static_format.background_color = dialog->color(); + else + current_worksheet_if_available()->at(position)->type_metadata().static_format.foreground_color = dialog->color(); + } + } +} + void SpreadsheetWidget::save(Core::File& file) { auto result = m_workbook->write_to_file(file); diff --git a/Userland/Applications/Spreadsheet/SpreadsheetWidget.h b/Userland/Applications/Spreadsheet/SpreadsheetWidget.h index 89a126b7b14..5ade32dc803 100644 --- a/Userland/Applications/Spreadsheet/SpreadsheetWidget.h +++ b/Userland/Applications/Spreadsheet/SpreadsheetWidget.h @@ -50,6 +50,7 @@ public: void undo(); void redo(); + void change_cell_static_color_format(Spreadsheet::FormatType); auto& undo_stack() { return m_undo_stack; } private: @@ -92,6 +93,8 @@ private: RefPtr m_insert_emoji_action; RefPtr m_undo_action; RefPtr m_redo_action; + RefPtr m_change_background_color_action; + RefPtr m_change_foreground_color_action; RefPtr m_functions_help_action; RefPtr m_about_action;