1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 12:55:09 +00:00

LibGUI: Allow HeaderView column selectability to be toggled

Previously, any TableView column could be made visible through a
context menu shown by right clicking on the table header. This change
allows columns to be marked as non-selectable, so their visibility
cannot be toggled in this way.
This commit is contained in:
Tim Ledbetter 2024-01-12 18:17:11 +00:00 committed by Andrew Kaster
parent 4ffd43a5f4
commit 1eb1f7bde9
2 changed files with 15 additions and 0 deletions

View file

@ -342,6 +342,16 @@ void HeaderView::set_section_visible(int section, bool visible)
update(); update();
} }
void HeaderView::set_section_selectable(int section, bool selectable)
{
auto& data = section_data(section);
if (data.selectable == selectable)
return;
data.selectable = selectable;
if (m_context_menu)
m_context_menu = nullptr;
}
Menu& HeaderView::ensure_context_menu() Menu& HeaderView::ensure_context_menu()
{ {
// FIXME: This menu needs to be rebuilt if the model is swapped out, // FIXME: This menu needs to be rebuilt if the model is swapped out,
@ -358,6 +368,8 @@ Menu& HeaderView::ensure_context_menu()
int section_count = this->section_count(); int section_count = this->section_count();
for (int section = 0; section < section_count; ++section) { for (int section = 0; section < section_count; ++section) {
auto& column_data = this->section_data(section); auto& column_data = this->section_data(section);
if (!column_data.selectable)
continue;
auto name = model()->column_name(section).release_value_but_fixme_should_propagate_errors().to_byte_string(); auto name = model()->column_name(section).release_value_but_fixme_should_propagate_errors().to_byte_string();
column_data.visibility_action = Action::create_checkable(name, [this, section](auto& action) { column_data.visibility_action = Action::create_checkable(name, [this, section](auto& action) {
set_section_visible(section, action.is_checked()); set_section_visible(section, action.is_checked());

View file

@ -36,6 +36,8 @@ public:
bool is_section_visible(int section) const; bool is_section_visible(int section) const;
void set_section_visible(int section, bool); void set_section_visible(int section, bool);
void set_section_selectable(int section, bool);
int section_count() const; int section_count() const;
Gfx::IntRect section_rect(int section) const; Gfx::IntRect section_rect(int section) const;
@ -92,6 +94,7 @@ private:
bool has_initialized_size { false }; bool has_initialized_size { false };
bool has_initialized_default_size { false }; bool has_initialized_default_size { false };
bool visibility { true }; bool visibility { true };
bool selectable { true };
RefPtr<Action> visibility_action; RefPtr<Action> visibility_action;
Gfx::TextAlignment alignment { Gfx::TextAlignment::CenterLeft }; Gfx::TextAlignment alignment { Gfx::TextAlignment::CenterLeft };
}; };