openshot-audio  0.1.7
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) 2015 - ROLI Ltd.
6 
7  Permission is granted to use this software under the terms of either:
8  a) the GPL v2 (or any later version)
9  b) the Affero GPL v3
10 
11  Details of these licenses can be found at: www.gnu.org/licenses
12 
13  JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
14  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15  A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 
17  ------------------------------------------------------------------------------
18 
19  To release a closed-source product which uses JUCE, commercial licenses are
20  available: visit www.juce.com for more information.
21 
22  ==============================================================================
23 */
24 
25 #ifndef JUCE_SELECTEDITEMSET_H_INCLUDED
26 #define JUCE_SELECTEDITEMSET_H_INCLUDED
27 
28 
29 //==============================================================================
42 template <class SelectableItemType>
44 {
45 public:
46  //==============================================================================
47  typedef SelectableItemType ItemType;
49  typedef PARAMETER_TYPE (SelectableItemType) ParameterType;
50 
51  //==============================================================================
54  {
55  }
56 
58  explicit SelectedItemSet (const ItemArray& items)
59  : selectedItems (items)
60  {
61  }
62 
65  : selectedItems (other.selectedItems)
66  {
67  }
68 
71  {
72  if (selectedItems != other.selectedItems)
73  {
74  selectedItems = other.selectedItems;
75  changed();
76  }
77 
78  return *this;
79  }
80 
81  //==============================================================================
89  void selectOnly (ParameterType item)
90  {
91  if (isSelected (item))
92  {
93  for (int i = selectedItems.size(); --i >= 0;)
94  {
95  if (selectedItems.getUnchecked(i) != item)
96  {
97  deselect (selectedItems.getUnchecked(i));
98  i = jmin (i, selectedItems.size());
99  }
100  }
101  }
102  else
103  {
104  deselectAll();
105  changed();
106 
107  selectedItems.add (item);
108  itemSelected (item);
109  }
110  }
111 
116  void addToSelection (ParameterType item)
117  {
118  if (! isSelected (item))
119  {
120  changed();
121 
122  selectedItems.add (item);
123  itemSelected (item);
124  }
125  }
126 
148  void addToSelectionBasedOnModifiers (ParameterType item,
149  ModifierKeys modifiers)
150  {
151  if (modifiers.isShiftDown())
152  {
153  addToSelection (item);
154  }
155  else if (modifiers.isCommandDown())
156  {
157  if (isSelected (item))
158  deselect (item);
159  else
160  addToSelection (item);
161  }
162  else
163  {
164  selectOnly (item);
165  }
166  }
167 
185  bool addToSelectionOnMouseDown (ParameterType item,
186  ModifierKeys modifiers)
187  {
188  if (isSelected (item))
189  return ! modifiers.isPopupMenu();
190 
191  addToSelectionBasedOnModifiers (item, modifiers);
192  return false;
193  }
194 
209  void addToSelectionOnMouseUp (ParameterType item,
210  ModifierKeys modifiers,
211  const bool wasItemDragged,
212  const bool resultOfMouseDownSelectMethod)
213  {
214  if (resultOfMouseDownSelectMethod && ! wasItemDragged)
215  addToSelectionBasedOnModifiers (item, modifiers);
216  }
217 
219  void deselect (ParameterType item)
220  {
221  const int i = selectedItems.indexOf (item);
222 
223  if (i >= 0)
224  {
225  changed();
226  itemDeselected (selectedItems.remove (i));
227  }
228  }
229 
231  void deselectAll()
232  {
233  if (selectedItems.size() > 0)
234  {
235  changed();
236 
237  for (int i = selectedItems.size(); --i >= 0;)
238  {
239  itemDeselected (selectedItems.remove (i));
240  i = jmin (i, selectedItems.size());
241  }
242  }
243  }
244 
245  //==============================================================================
249  int getNumSelected() const noexcept { return selectedItems.size(); }
250 
255  SelectableItemType getSelectedItem (const int index) const { return selectedItems [index]; }
256 
258  bool isSelected (ParameterType item) const noexcept { return selectedItems.contains (item); }
259 
261  const ItemArray& getItemArray() const noexcept { return selectedItems; }
262 
264  SelectableItemType* begin() const noexcept { return selectedItems.begin(); }
265 
267  SelectableItemType* end() const noexcept { return selectedItems.end(); }
268 
269  //==============================================================================
275  virtual void itemSelected (SelectableItemType) {}
276 
282  virtual void itemDeselected (SelectableItemType) {}
283 
287  void changed()
288  {
290  }
291 
295  void changed (const bool synchronous)
296  {
297  if (synchronous)
299  else
301  }
302 
303 private:
304  //==============================================================================
305  ItemArray selectedItems;
306 
308 };
309 
310 
311 #endif // JUCE_SELECTEDITEMSET_H_INCLUDED
SelectedItemSet(const ItemArray &items)
Definition: juce_SelectedItemSet.h:58
void sendChangeMessage()
Definition: juce_ChangeBroadcaster.cpp:61
void changed()
Definition: juce_SelectedItemSet.h:287
int getNumSelected() const noexcept
Definition: juce_SelectedItemSet.h:249
void addToSelectionBasedOnModifiers(ParameterType item, ModifierKeys modifiers)
Definition: juce_SelectedItemSet.h:148
#define noexcept
Definition: juce_CompilerSupport.h:141
const ItemArray & getItemArray() const noexcept
Definition: juce_SelectedItemSet.h:261
SelectableItemType getSelectedItem(const int index) const
Definition: juce_SelectedItemSet.h:255
typedef PARAMETER_TYPE(SelectableItemType) ParameterType
Type jmin(const Type a, const Type b)
Definition: juce_core.h:113
Definition: juce_ModifierKeys.h:38
SelectedItemSet & operator=(const SelectedItemSet &other)
Definition: juce_SelectedItemSet.h:70
bool isCommandDown() const noexcept
Definition: juce_ModifierKeys.h:66
bool contains(ParameterType elementToLookFor) const
Definition: juce_Array.h:373
void add(const ElementType &newElement)
Definition: juce_Array.h:392
Definition: juce_ChangeBroadcaster.h:35
ElementType * end() const noexcept
Definition: juce_Array.h:336
SelectedItemSet()
Definition: juce_SelectedItemSet.h:53
void addToSelection(ParameterType item)
Definition: juce_SelectedItemSet.h:116
bool isPopupMenu() const noexcept
Definition: juce_ModifierKeys.h:76
void changed(const bool synchronous)
Definition: juce_SelectedItemSet.h:295
ElementType * begin() const noexcept
Definition: juce_Array.h:328
Array< SelectableItemType > ItemArray
Definition: juce_SelectedItemSet.h:48
int indexOf(ParameterType elementToLookFor) const
Definition: juce_Array.h:355
bool isSelected(ParameterType item) const noexcept
Definition: juce_SelectedItemSet.h:258
void sendSynchronousChangeMessage()
Definition: juce_ChangeBroadcaster.cpp:67
void deselect(ParameterType item)
Definition: juce_SelectedItemSet.h:219
virtual void itemSelected(SelectableItemType)
Definition: juce_SelectedItemSet.h:275
bool isShiftDown() const noexcept
Definition: juce_ModifierKeys.h:97
bool addToSelectionOnMouseDown(ParameterType item, ModifierKeys modifiers)
Definition: juce_SelectedItemSet.h:185
ElementType remove(const int indexToRemove)
Definition: juce_Array.h:795
void addToSelectionOnMouseUp(ParameterType item, ModifierKeys modifiers, const bool wasItemDragged, const bool resultOfMouseDownSelectMethod)
Definition: juce_SelectedItemSet.h:209
Definition: juce_Array.h:60
virtual void itemDeselected(SelectableItemType)
Definition: juce_SelectedItemSet.h:282
void selectOnly(ParameterType item)
Definition: juce_SelectedItemSet.h:89
ElementType getUnchecked(const int index) const
Definition: juce_Array.h:258
SelectableItemType ItemType
Definition: juce_SelectedItemSet.h:47
Definition: juce_SelectedItemSet.h:43
#define JUCE_LEAK_DETECTOR(OwnerClass)
Definition: juce_LeakedObjectDetector.h:141
SelectableItemType * begin() const noexcept
Definition: juce_SelectedItemSet.h:264
SelectedItemSet(const SelectedItemSet &other)
Definition: juce_SelectedItemSet.h:64
void deselectAll()
Definition: juce_SelectedItemSet.h:231
SelectableItemType * end() const noexcept
Definition: juce_SelectedItemSet.h:267
int size() const noexcept
Definition: juce_Array.h:221