LMMS
Loading...
Searching...
No Matches
juce_SelectedItemSet.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce
27{
28
29//==============================================================================
44template <class SelectableItemType>
46{
47public:
48 //==============================================================================
49 using ItemType = SelectableItemType;
52
53 //==============================================================================
55 SelectedItemSet() = default;
56
58 explicit SelectedItemSet (const ItemArray& items)
59 : selectedItems (items)
60 {
61 }
62
68
70 SelectedItemSet& operator= (const SelectedItemSet& other)
71 {
72 if (selectedItems != other.selectedItems)
73 {
74 changed();
75
76 for (int i = selectedItems.size(); --i >= 0;)
77 if (! other.isSelected (selectedItems.getReference (i)))
78 itemDeselected (selectedItems.removeAndReturn (i));
79
80 for (auto& i : other.selectedItems)
81 {
82 if (! isSelected (i))
83 {
84 selectedItems.add (i);
86 }
87 }
88 }
89
90 return *this;
91 }
92
93 //==============================================================================
102 {
103 if (isSelected (item))
104 {
105 for (int i = selectedItems.size(); --i >= 0;)
106 {
107 if (selectedItems.getUnchecked(i) != item)
108 {
109 deselect (selectedItems.getUnchecked(i));
110 i = jmin (i, selectedItems.size());
111 }
112 }
113 }
114 else
115 {
116 changed();
117 deselectAll();
118
119 selectedItems.add (item);
120 itemSelected (item);
121 }
122 }
123
129 {
130 if (! isSelected (item))
131 {
132 changed();
133
134 selectedItems.add (item);
135 itemSelected (item);
136 }
137 }
138
161 ModifierKeys modifiers)
162 {
163 if (modifiers.isShiftDown())
164 {
165 addToSelection (item);
166 }
167 else if (modifiers.isCommandDown())
168 {
169 if (isSelected (item))
170 deselect (item);
171 else
172 addToSelection (item);
173 }
174 else
175 {
176 selectOnly (item);
177 }
178 }
179
198 ModifierKeys modifiers)
199 {
200 if (isSelected (item))
201 return ! modifiers.isPopupMenu();
202
203 addToSelectionBasedOnModifiers (item, modifiers);
204 return false;
205 }
206
222 ModifierKeys modifiers,
223 const bool wasItemDragged,
224 const bool resultOfMouseDownSelectMethod)
225 {
226 if (resultOfMouseDownSelectMethod && ! wasItemDragged)
227 addToSelectionBasedOnModifiers (item, modifiers);
228 }
229
232 {
233 const int i = selectedItems.indexOf (item);
234
235 if (i >= 0)
236 {
237 changed();
238 itemDeselected (selectedItems.removeAndReturn (i));
239 }
240 }
241
244 {
245 if (selectedItems.size() > 0)
246 {
247 changed();
248
249 for (int i = selectedItems.size(); --i >= 0;)
250 {
251 itemDeselected (selectedItems.removeAndReturn (i));
252 i = jmin (i, selectedItems.size());
253 }
254 }
255 }
256
257 //==============================================================================
262
267 SelectableItemType getSelectedItem (const int index) const { return selectedItems [index]; }
268
270 bool isSelected (ParameterType item) const noexcept { return selectedItems.contains (item); }
271
274
276 SelectableItemType* begin() noexcept { return selectedItems.begin(); }
277
278 const SelectableItemType* begin() const noexcept { return selectedItems.begin(); }
279
281 SelectableItemType* end() noexcept { return selectedItems.end(); }
282
284 const SelectableItemType* end() const noexcept { return selectedItems.end(); }
285
286 //==============================================================================
292 virtual void itemSelected (SelectableItemType) {}
293
299 virtual void itemDeselected (SelectableItemType) {}
300
304 void changed()
305 {
307 }
308
312 void changed (const bool synchronous)
313 {
314 if (synchronous)
316 else
318 }
319
320private:
321 //==============================================================================
323
325};
326
327} // namespace juce
Type jmin(const Type a, const Type b)
Definition MathsFunctions.h:60
#define noexcept
Definition DistrhoDefines.h:72
Definition juce_Array.h:56
void sendChangeMessage()
Definition juce_ChangeBroadcaster.cpp:65
ChangeBroadcaster() noexcept
Definition juce_ChangeBroadcaster.cpp:26
void sendSynchronousChangeMessage()
Definition juce_ChangeBroadcaster.cpp:71
Definition juce_ModifierKeys.h:41
bool isCommandDown() const noexcept
Definition juce_ModifierKeys.h:68
bool isPopupMenu() const noexcept
Definition juce_ModifierKeys.h:78
bool isShiftDown() const noexcept
Definition juce_ModifierKeys.h:99
void addToSelectionOnMouseUp(ParameterType item, ModifierKeys modifiers, const bool wasItemDragged, const bool resultOfMouseDownSelectMethod)
Definition juce_SelectedItemSet.h:221
typename TypeHelpers::ParameterType< SelectableItemType >::type ParameterType
Definition juce_SelectedItemSet.h:51
void addToSelection(ParameterType item)
Definition juce_SelectedItemSet.h:128
bool addToSelectionOnMouseDown(ParameterType item, ModifierKeys modifiers)
Definition juce_SelectedItemSet.h:197
int getNumSelected() const noexcept
Definition juce_SelectedItemSet.h:261
bool isSelected(ParameterType item) const noexcept
Definition juce_SelectedItemSet.h:270
SelectedItemSet(const ItemArray &items)
Definition juce_SelectedItemSet.h:58
const SelectableItemType * end() const noexcept
Definition juce_SelectedItemSet.h:284
void deselectAll()
Definition juce_SelectedItemSet.h:243
void selectOnly(ParameterType item)
Definition juce_SelectedItemSet.h:101
void changed()
Definition juce_SelectedItemSet.h:304
SelectableItemType getSelectedItem(const int index) const
Definition juce_SelectedItemSet.h:267
SelectableItemType * begin() noexcept
Definition juce_SelectedItemSet.h:276
Array< SelectableItemType > ItemArray
Definition juce_SelectedItemSet.h:50
void changed(const bool synchronous)
Definition juce_SelectedItemSet.h:312
SelectedItemSet(const SelectedItemSet &other)
Definition juce_SelectedItemSet.h:64
const SelectableItemType * begin() const noexcept
Definition juce_SelectedItemSet.h:278
ItemArray selectedItems
Definition juce_SelectedItemSet.h:322
virtual void itemSelected(SelectableItemType)
Definition juce_SelectedItemSet.h:292
virtual void itemDeselected(SelectableItemType)
Definition juce_SelectedItemSet.h:299
const ItemArray & getItemArray() const noexcept
Definition juce_SelectedItemSet.h:273
void addToSelectionBasedOnModifiers(ParameterType item, ModifierKeys modifiers)
Definition juce_SelectedItemSet.h:160
void deselect(ParameterType item)
Definition juce_SelectedItemSet.h:231
SelectableItemType * end() noexcept
Definition juce_SelectedItemSet.h:281
SelectableItemType ItemType
Definition juce_SelectedItemSet.h:49
register unsigned i
Definition inflate.c:1575
#define JUCE_LEAK_DETECTOR(OwnerClass)
Definition juce_LeakedObjectDetector.h:138
Definition carla_juce.cpp:31
const Type & type
Definition juce_MathsFunctions.h:632
#define const
Definition zconf.h:137