1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 01:27:43 +00:00

LibGUI: Add ability to disable multiselect for views

This commit is contained in:
Tom 2020-07-11 23:11:53 -06:00 committed by Andreas Kling
parent f266f0e880
commit d4c6ae8263
5 changed files with 45 additions and 3 deletions

View file

@ -375,4 +375,16 @@ void AbstractView::drop_event(DropEvent& event)
on_drop(index, event);
}
void AbstractView::set_multi_select(bool multi_select)
{
if (m_multi_select == multi_select)
return;
m_multi_select = multi_select;
if (!multi_select && m_selection.size() > 1) {
auto first_selected = m_selection.first();
m_selection.clear();
m_selection.set(first_selected);
}
}
}

View file

@ -47,6 +47,9 @@ public:
bool is_editable() const { return m_editable; }
void set_editable(bool editable) { m_editable = editable; }
bool is_multi_select() const { return m_multi_select; }
void set_multi_select(bool);
virtual bool accepts_focus() const override { return true; }
virtual void did_update_model(unsigned flags);
virtual void did_update_selection();
@ -110,6 +113,7 @@ private:
OwnPtr<ModelEditingDelegate> m_editing_delegate;
ModelSelection m_selection;
bool m_activates_on_selection { false };
bool m_multi_select { true };
};
}

View file

@ -221,10 +221,12 @@ void IconView::mousedown_event(MouseEvent& event)
auto adjusted_position = to_content_position(event.position());
m_might_drag = false;
if (is_multi_select()) {
m_rubber_banding = true;
m_rubber_band_origin = adjusted_position;
m_rubber_band_current = adjusted_position;
}
}
void IconView::mouseup_event(MouseEvent& event)
{

View file

@ -108,6 +108,7 @@ MultiView::MultiView()
build_actions();
set_view_mode(ViewMode::Icon);
apply_multi_select();
}
MultiView::~MultiView()
@ -194,4 +195,21 @@ void MultiView::build_actions()
#endif
}
void MultiView::apply_multi_select()
{
m_table_view->set_multi_select(m_multi_select);
m_icon_view->set_multi_select(m_multi_select);
#ifdef MULTIVIEW_WITH_COLUMNSVIEW
//m_columns_view->set_multi_select(m_multi_select);
#endif
}
void MultiView::set_multi_select(bool multi_select)
{
if (m_multi_select == multi_select)
return;
m_multi_select = multi_select;
apply_multi_select();
}
}

View file

@ -103,10 +103,14 @@ public:
Action& view_as_columns_action() { return *m_view_as_columns_action; }
#endif
bool is_multi_select() const { return m_multi_select; }
void set_multi_select(bool);
private:
MultiView();
void build_actions();
void apply_multi_select();
ViewMode m_view_mode { Invalid };
int m_model_column { 0 };
@ -126,6 +130,8 @@ private:
#endif
OwnPtr<ActionGroup> m_view_type_action_group;
bool m_multi_select { true };
};
}