@@ -109,6 +109,16 @@ namespace dspx {
109109 }
110110 connectItem (item);
111111 selectedItems.insert (item);
112+ const auto clipType = item->type ();
113+ selectedClipTypes[item] = clipType;
114+ switch (clipType) {
115+ case Clip::Singing:
116+ ++selectedSingingClipCount;
117+ break ;
118+ case Clip::Audio:
119+ ++selectedAudioClipCount;
120+ break ;
121+ }
112122
113123 // Update clipToClipSequence
114124 auto clipSeq = item->clipSequence ();
@@ -128,6 +138,18 @@ namespace dspx {
128138 if (!selectedItems.remove (item)) {
129139 return false ;
130140 }
141+ if (selectedClipTypes.contains (item)) {
142+ const auto clipType = selectedClipTypes.value (item);
143+ switch (clipType) {
144+ case Clip::Singing:
145+ --selectedSingingClipCount;
146+ break ;
147+ case Clip::Audio:
148+ --selectedAudioClipCount;
149+ break ;
150+ }
151+ }
152+ selectedClipTypes.remove (item);
131153
132154 // Update clipSequencesWithSelectedItems
133155 auto clipSeq = clipToClipSequence.value (item);
@@ -164,8 +186,12 @@ namespace dspx {
164186 return ;
165187 }
166188 const int oldCount = selectedItems.size ();
189+ const int oldSingingClipCount = selectedSingingClipCount;
190+ const int oldAudioClipCount = selectedAudioClipCount;
167191 bool selectionChanged = removeFromSelection (item);
168192 bool countChanged = selectionChanged && oldCount != selectedItems.size ();
193+ bool singingClipCountChanged = selectionChanged && oldSingingClipCount != selectedSingingClipCount;
194+ bool audioClipCountChanged = selectionChanged && oldAudioClipCount != selectedAudioClipCount;
169195 bool currentChanged = false ;
170196 bool clipSequencesChanged = selectionChanged;
171197
@@ -181,6 +207,12 @@ namespace dspx {
181207 if (countChanged) {
182208 Q_EMIT q_ptr->selectedCountChanged ();
183209 }
210+ if (singingClipCountChanged) {
211+ Q_EMIT q_ptr->selectedSingingClipCountChanged ();
212+ }
213+ if (audioClipCountChanged) {
214+ Q_EMIT q_ptr->selectedAudioClipCountChanged ();
215+ }
184216 }
185217 if (clipSequencesChanged) {
186218 Q_EMIT q_ptr->clipSequencesWithSelectedItemsChanged ();
@@ -231,6 +263,16 @@ namespace dspx {
231263 return d->selectedItems .size ();
232264 }
233265
266+ int ClipSelectionModel::selectedSingingClipCount () const {
267+ Q_D (const ClipSelectionModel);
268+ return d->selectedSingingClipCount ;
269+ }
270+
271+ int ClipSelectionModel::selectedAudioClipCount () const {
272+ Q_D (const ClipSelectionModel);
273+ return d->selectedAudioClipCount ;
274+ }
275+
234276 QList<ClipSequence *> ClipSelectionModel::clipSequencesWithSelectedItems () const {
235277 Q_D (const ClipSelectionModel);
236278 return d->clipSequencesWithSelectedItems .keys ();
@@ -243,6 +285,8 @@ namespace dspx {
243285
244286 void ClipSelectionModelPrivate::select (Clip *item, SelectionModel::SelectionCommand command) {
245287 const int oldCount = selectedItems.size ();
288+ const int oldSingingClipCount = selectedSingingClipCount;
289+ const int oldAudioClipCount = selectedAudioClipCount;
246290 bool selectionChanged = false ;
247291
248292 if (command & SelectionModel::ClearPreviousSelection) {
@@ -270,6 +314,12 @@ namespace dspx {
270314 if (oldCount != selectedItems.size ()) {
271315 Q_EMIT q_ptr->selectedCountChanged ();
272316 }
317+ if (oldSingingClipCount != selectedSingingClipCount) {
318+ Q_EMIT q_ptr->selectedSingingClipCountChanged ();
319+ }
320+ if (oldAudioClipCount != selectedAudioClipCount) {
321+ Q_EMIT q_ptr->selectedAudioClipCountChanged ();
322+ }
273323 }
274324 if (clipSequencesChanged) {
275325 Q_EMIT q_ptr->clipSequencesWithSelectedItemsChanged ();
0 commit comments