mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 11:48:10 +00:00
LibGUI: Add GModelSelection to help implementing multiple-select views
Each GAbstractView now has a GModelSelection backed by a simple HashTable<GModelIndex>. When the selection changes somehow, the view gets notified via the notify_selection_changed() callback. In the future it will probably make sense to move to using some kind of ranges as the internal representation instead.
This commit is contained in:
parent
19b69741ed
commit
82559e211d
5 changed files with 95 additions and 0 deletions
41
Libraries/LibGUI/GModelSelection.h
Normal file
41
Libraries/LibGUI/GModelSelection.h
Normal file
|
@ -0,0 +1,41 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/HashTable.h>
|
||||
#include <LibGUI/GModelIndex.h>
|
||||
|
||||
class GAbstractView;
|
||||
|
||||
class GModelSelection {
|
||||
public:
|
||||
GModelSelection(GAbstractView& view)
|
||||
: m_view(view)
|
||||
{
|
||||
}
|
||||
|
||||
bool is_empty() const { return m_indexes.is_empty(); }
|
||||
bool contains(const GModelIndex& index) const { return m_indexes.contains(index); }
|
||||
|
||||
void set(const GModelIndex&);
|
||||
void add(const GModelIndex&);
|
||||
bool remove(const GModelIndex&);
|
||||
void clear();
|
||||
|
||||
template<typename Callback>
|
||||
void for_each_index(Callback callback)
|
||||
{
|
||||
for (auto& index : m_indexes)
|
||||
callback(index);
|
||||
}
|
||||
|
||||
// FIXME: This doesn't guarantee that what you get is the lowest or "first" index selected..
|
||||
GModelIndex first() const
|
||||
{
|
||||
if (m_indexes.is_empty())
|
||||
return {};
|
||||
return *m_indexes.begin();
|
||||
}
|
||||
|
||||
private:
|
||||
GAbstractView& m_view;
|
||||
HashTable<GModelIndex> m_indexes;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue