JUCE  v6.1.6 (6.0.8-1114)
JUCE API
Looking for a senior C++ dev?
I'm looking for work. Hire me!
juce::SelectedItemSet< SelectableItemType > Class Template Reference

Manages a list of selectable items. More...

#include <juce_SelectedItemSet.h>

Inheritance diagram for juce::SelectedItemSet< SelectableItemType >:
Collaboration diagram for juce::SelectedItemSet< SelectableItemType >:

Public Types

using ItemArray = Array< SelectableItemType >
 
using ItemType = SelectableItemType
 
using ParameterType = typename TypeHelpers::ParameterType< SelectableItemType >::type
 

Public Member Functions

 SelectedItemSet ()=default
 Creates an empty set. More...
 
 SelectedItemSet (const ItemArray &items)
 Creates a set based on an array of items. More...
 
 SelectedItemSet (const SelectedItemSet &other)
 Creates a copy of another set. More...
 
void addChangeListener (ChangeListener *listener)
 Registers a listener to receive change callbacks from this broadcaster. More...
 
void addToSelection (ParameterType item)
 Selects an item. More...
 
void addToSelectionBasedOnModifiers (ParameterType item, ModifierKeys modifiers)
 Selects or deselects an item. More...
 
bool addToSelectionOnMouseDown (ParameterType item, ModifierKeys modifiers)
 Selects or deselects items that can also be dragged, based on a mouse-down event. More...
 
void addToSelectionOnMouseUp (ParameterType item, ModifierKeys modifiers, const bool wasItemDragged, const bool resultOfMouseDownSelectMethod)
 Selects or deselects items that can also be dragged, based on a mouse-up event. More...
 
const SelectableItemType * begin () const noexcept
 
SelectableItemType * begin () noexcept
 Provides iterator access to the array of items. More...
 
void changed ()
 Used internally, but can be called to force a change message to be sent to the ChangeListeners. More...
 
void changed (const bool synchronous)
 Used internally, but can be called to force a change message to be sent to the ChangeListeners. More...
 
void deselect (ParameterType item)
 Deselects an item. More...
 
void deselectAll ()
 Deselects all items. More...
 
void dispatchPendingMessages ()
 If a change message has been sent but not yet dispatched, this will call sendSynchronousChangeMessage() to make the callback immediately. More...
 
const SelectableItemType * end () const noexcept
 Provides iterator access to the array of items. More...
 
SelectableItemType * end () noexcept
 Provides iterator access to the array of items. More...
 
const ItemArraygetItemArray () const noexcept
 Provides access to the array of items. More...
 
int getNumSelected () const noexcept
 Returns the number of currently selected items. More...
 
SelectableItemType getSelectedItem (const int index) const
 Returns one of the currently selected items. More...
 
bool isSelected (ParameterType item) const noexcept
 True if this item is currently selected. More...
 
virtual void itemDeselected (SelectableItemType)
 Can be overridden to do special handling when an item is deselected. More...
 
virtual void itemSelected (SelectableItemType)
 Can be overridden to do special handling when an item is selected. More...
 
SelectedItemSetoperator= (const SelectedItemSet &other)
 Creates a copy of another set. More...
 
void removeAllChangeListeners ()
 Removes all listeners from the list. More...
 
void removeChangeListener (ChangeListener *listener)
 Unregisters a listener from the list. More...
 
void selectOnly (ParameterType item)
 Clears any other currently selected items, and selects this item. More...
 
void sendChangeMessage ()
 Causes an asynchronous change message to be sent to all the registered listeners. More...
 
void sendSynchronousChangeMessage ()
 Sends a synchronous change message to all the registered listeners. More...
 

Private Member Functions

void callListeners ()
 

Private Attributes

std::atomic< boolanyListeners { false }
 
ChangeBroadcasterCallback broadcastCallback
 
ListenerList< ChangeListenerchangeListeners
 
ItemArray selectedItems
 

Detailed Description

template<class SelectableItemType>
class juce::SelectedItemSet< SelectableItemType >

Manages a list of selectable items.

Use one of these to keep a track of things that the user has highlighted, like icons or things in a list.

The class is templated so that you can use it to hold either a set of pointers to objects, or a set of ID numbers or handles, for cases where each item may not always have a corresponding object.

To be informed when items are selected/deselected, register a ChangeListener with this object.

@tags{GUI}

Member Typedef Documentation

◆ ItemArray

template<class SelectableItemType >
using juce::SelectedItemSet< SelectableItemType >::ItemArray = Array<SelectableItemType>

◆ ItemType

template<class SelectableItemType >
using juce::SelectedItemSet< SelectableItemType >::ItemType = SelectableItemType

◆ ParameterType

template<class SelectableItemType >
using juce::SelectedItemSet< SelectableItemType >::ParameterType = typename TypeHelpers::ParameterType<SelectableItemType>::type

Constructor & Destructor Documentation

◆ SelectedItemSet() [1/3]

template<class SelectableItemType >
juce::SelectedItemSet< SelectableItemType >::SelectedItemSet ( )
default

Creates an empty set.

◆ SelectedItemSet() [2/3]

template<class SelectableItemType >
juce::SelectedItemSet< SelectableItemType >::SelectedItemSet ( const ItemArray items)
inlineexplicit

Creates a set based on an array of items.

◆ SelectedItemSet() [3/3]

template<class SelectableItemType >
juce::SelectedItemSet< SelectableItemType >::SelectedItemSet ( const SelectedItemSet< SelectableItemType > &  other)
inline

Creates a copy of another set.

Member Function Documentation

◆ addChangeListener()

void juce::ChangeBroadcaster::addChangeListener ( ChangeListener listener)
inherited

Registers a listener to receive change callbacks from this broadcaster.

Trying to add a listener that's already on the list will have no effect.

◆ addToSelection()

◆ addToSelectionBasedOnModifiers()

template<class SelectableItemType >
void juce::SelectedItemSet< SelectableItemType >::addToSelectionBasedOnModifiers ( ParameterType  item,
ModifierKeys  modifiers 
)
inline

Selects or deselects an item.

This will use the modifier keys to decide whether to deselect other items first.

So if the shift key is held down, the item will be added without deselecting anything (same as calling addToSelection() )

If no modifiers are down, the current selection will be cleared first (same as calling selectOnly() )

If the ctrl (or command on the Mac) key is held down, the item will be toggled - so it'll be added to the set unless it's already there, in which case it'll be deselected.

If the items that you're selecting can also be dragged, you may need to use the addToSelectionOnMouseDown() and addToSelectionOnMouseUp() calls to handle the subtleties of this kind of usage.

See also
selectOnly, addToSelection, addToSelectionOnMouseDown, addToSelectionOnMouseUp

References juce::SelectedItemSet< SelectableItemType >::addToSelection(), juce::SelectedItemSet< SelectableItemType >::deselect(), juce::ModifierKeys::isCommandDown(), juce::SelectedItemSet< SelectableItemType >::isSelected(), juce::ModifierKeys::isShiftDown(), and juce::SelectedItemSet< SelectableItemType >::selectOnly().

Referenced by juce::SelectedItemSet< SelectableItemType >::addToSelectionOnMouseDown(), and juce::SelectedItemSet< SelectableItemType >::addToSelectionOnMouseUp().

◆ addToSelectionOnMouseDown()

template<class SelectableItemType >
bool juce::SelectedItemSet< SelectableItemType >::addToSelectionOnMouseDown ( ParameterType  item,
ModifierKeys  modifiers 
)
inline

Selects or deselects items that can also be dragged, based on a mouse-down event.

If you call addToSelectionOnMouseDown() at the start of your mouseDown event, and then call addToSelectionOnMouseUp() at the end of your mouseUp event, this makes it easy to handle multiple-selection of sets of objects that can also be dragged.

For example, if you have several items already selected, and you click on one of them (without dragging), then you'd expect this to deselect the other, and just select the item you clicked on. But if you had clicked on this item and dragged it, you'd have expected them all to stay selected.

When you call this method, you'll need to store the boolean result, because the addToSelectionOnMouseUp() method will need to be know this value.

See also
addToSelectionOnMouseUp, addToSelectionBasedOnModifiers

References juce::SelectedItemSet< SelectableItemType >::addToSelectionBasedOnModifiers(), juce::ModifierKeys::isPopupMenu(), and juce::SelectedItemSet< SelectableItemType >::isSelected().

◆ addToSelectionOnMouseUp()

template<class SelectableItemType >
void juce::SelectedItemSet< SelectableItemType >::addToSelectionOnMouseUp ( ParameterType  item,
ModifierKeys  modifiers,
const bool  wasItemDragged,
const bool  resultOfMouseDownSelectMethod 
)
inline

Selects or deselects items that can also be dragged, based on a mouse-up event.

Call this during a mouseUp callback, when you have previously called the addToSelectionOnMouseDown() method during your mouseDown event.

See addToSelectionOnMouseDown() for more info

Parameters
itemthe item to select (or deselect)
modifiersthe modifiers from the mouse-up event
wasItemDraggedtrue if your item was dragged during the mouse click
resultOfMouseDownSelectMethodthis is the boolean return value that came back from the addToSelectionOnMouseDown() call that you should have made during the matching mouseDown event

References juce::SelectedItemSet< SelectableItemType >::addToSelectionBasedOnModifiers().

◆ begin() [1/2]

template<class SelectableItemType >
const SelectableItemType* juce::SelectedItemSet< SelectableItemType >::begin ( ) const
inlinenoexcept

◆ begin() [2/2]

template<class SelectableItemType >
SelectableItemType* juce::SelectedItemSet< SelectableItemType >::begin ( )
inlinenoexcept

◆ callListeners()

void juce::ChangeBroadcaster::callListeners ( )
privateinherited

◆ changed() [1/2]

◆ changed() [2/2]

template<class SelectableItemType >
void juce::SelectedItemSet< SelectableItemType >::changed ( const bool  synchronous)
inline

Used internally, but can be called to force a change message to be sent to the ChangeListeners.

References juce::ChangeBroadcaster::sendChangeMessage(), and juce::ChangeBroadcaster::sendSynchronousChangeMessage().

◆ deselect()

◆ deselectAll()

◆ dispatchPendingMessages()

void juce::ChangeBroadcaster::dispatchPendingMessages ( )
inherited

If a change message has been sent but not yet dispatched, this will call sendSynchronousChangeMessage() to make the callback immediately.

For thread-safety reasons, you must only call this method on the main message thread.

◆ end() [1/2]

template<class SelectableItemType >
const SelectableItemType* juce::SelectedItemSet< SelectableItemType >::end ( ) const
inlinenoexcept

◆ end() [2/2]

template<class SelectableItemType >
SelectableItemType* juce::SelectedItemSet< SelectableItemType >::end ( )
inlinenoexcept

◆ getItemArray()

template<class SelectableItemType >
const ItemArray& juce::SelectedItemSet< SelectableItemType >::getItemArray ( ) const
inlinenoexcept

Provides access to the array of items.

References juce::SelectedItemSet< SelectableItemType >::selectedItems.

◆ getNumSelected()

template<class SelectableItemType >
int juce::SelectedItemSet< SelectableItemType >::getNumSelected ( ) const
inlinenoexcept

◆ getSelectedItem()

template<class SelectableItemType >
SelectableItemType juce::SelectedItemSet< SelectableItemType >::getSelectedItem ( const int  index) const
inline

Returns one of the currently selected items.

If the index is out-of-range, this returns a default-constructed SelectableItemType.

See also
getNumSelected

References juce::gl::index, and juce::SelectedItemSet< SelectableItemType >::selectedItems.

◆ isSelected()

◆ itemDeselected()

template<class SelectableItemType >
virtual void juce::SelectedItemSet< SelectableItemType >::itemDeselected ( SelectableItemType  )
inlinevirtual

Can be overridden to do special handling when an item is deselected.

For example, if the item is an object, you might want to call it and tell it that it's being deselected.

Referenced by juce::SelectedItemSet< SelectableItemType >::deselect(), juce::SelectedItemSet< SelectableItemType >::deselectAll(), and juce::SelectedItemSet< SelectableItemType >::operator=().

◆ itemSelected()

template<class SelectableItemType >
virtual void juce::SelectedItemSet< SelectableItemType >::itemSelected ( SelectableItemType  )
inlinevirtual

Can be overridden to do special handling when an item is selected.

For example, if the item is an object, you might want to call it and tell it that it's being selected.

Referenced by juce::SelectedItemSet< SelectableItemType >::addToSelection(), juce::SelectedItemSet< SelectableItemType >::operator=(), and juce::SelectedItemSet< SelectableItemType >::selectOnly().

◆ operator=()

◆ removeAllChangeListeners()

void juce::ChangeBroadcaster::removeAllChangeListeners ( )
inherited

Removes all listeners from the list.

◆ removeChangeListener()

void juce::ChangeBroadcaster::removeChangeListener ( ChangeListener listener)
inherited

Unregisters a listener from the list.

If the listener isn't on the list, this won't have any effect.

◆ selectOnly()

◆ sendChangeMessage()

void juce::ChangeBroadcaster::sendChangeMessage ( )
inherited

Causes an asynchronous change message to be sent to all the registered listeners.

The message will be delivered asynchronously by the main message thread, so this method will return immediately. To call the listeners synchronously use sendSynchronousChangeMessage().

Referenced by juce::SelectedItemSet< SelectableItemType >::changed().

◆ sendSynchronousChangeMessage()

void juce::ChangeBroadcaster::sendSynchronousChangeMessage ( )
inherited

Sends a synchronous change message to all the registered listeners.

This will immediately call all the listeners that are registered. For thread-safety reasons, you must only call this method on the main message thread.

See also
dispatchPendingMessages

Referenced by juce::SelectedItemSet< SelectableItemType >::changed().

Member Data Documentation

◆ anyListeners

std::atomic<bool> juce::ChangeBroadcaster::anyListeners { false }
privateinherited

◆ broadcastCallback

ChangeBroadcasterCallback juce::ChangeBroadcaster::broadcastCallback
privateinherited

◆ changeListeners

ListenerList<ChangeListener> juce::ChangeBroadcaster::changeListeners
privateinherited

◆ selectedItems


The documentation for this class was generated from the following file: