summaryrefslogtreecommitdiff
path: root/muse2/muse/midiedit/dcanvas.cpp
diff options
context:
space:
mode:
authorFlorian Jung <flo@windfisch.org>2011-10-06 11:37:57 +0000
committerFlorian Jung <flo@windfisch.org>2011-10-06 11:37:57 +0000
commitf60ddccd6d328a5cebc4d524246e33b399a8dfdd (patch)
treec96d609c0b1e2eb6cb74b700dbb960c8cab726fd /muse2/muse/midiedit/dcanvas.cpp
parent421cb6dbce48a6c1044dd37e8f710b83db5d11a9 (diff)
you can now hide and show drumlist instruments
squashed some minor bugs
Diffstat (limited to 'muse2/muse/midiedit/dcanvas.cpp')
-rw-r--r--muse2/muse/midiedit/dcanvas.cpp32
1 files changed, 27 insertions, 5 deletions
diff --git a/muse2/muse/midiedit/dcanvas.cpp b/muse2/muse/midiedit/dcanvas.cpp
index 34173780..c6b39e76 100644
--- a/muse2/muse/midiedit/dcanvas.cpp
+++ b/muse2/muse/midiedit/dcanvas.cpp
@@ -1317,8 +1317,11 @@ void DrumCanvas::rebuildOurDrumMap()
if (!old_style_drummap_mode)
{
+ bool need_update = false;
+
TrackList* tl=song->tracks();
QList< QSet<Track*> > track_groups;
+ QVector<instrument_number_mapping_t> old_instrument_map = instrument_map;
instrument_map.clear();
@@ -1396,6 +1399,9 @@ void DrumCanvas::rebuildOurDrumMap()
bool mute=true;
bool hidden=true;
+
+ if (drumEditor->ignore_hide()) hidden=false;
+
for (QSet<Track*>::iterator track=group->begin(); track!=group->end() && (mute || hidden); track++)
{
if (dynamic_cast<MidiTrack*>(*track)->drummap()[pitch].mute == false)
@@ -1408,7 +1414,14 @@ void DrumCanvas::rebuildOurDrumMap()
if (!hidden)
{
for (QSet<Track*>::iterator track=group->begin(); track!=group->end(); track++)
- dynamic_cast<MidiTrack*>(*track)->drummap()[pitch].mute=mute;
+ {
+ DrumMap* dm = &dynamic_cast<MidiTrack*>(*track)->drummap()[pitch];
+ if (dm->mute != mute)
+ {
+ dm->mute=mute;
+ need_update = true;
+ }
+ }
if (dynamic_cast<MidiTrack*>(*group->begin())->drummap()[pitch].anote != pitch)
printf("THIS SHOULD NEVER HAPPEN: track's_drummap[pitch].anote (%i)!= pitch (%i) !!!\n",dynamic_cast<MidiTrack*>(*group->begin())->drummap()[pitch].anote,pitch);
@@ -1435,10 +1448,19 @@ void DrumCanvas::rebuildOurDrumMap()
for (int i=0;i<size;i++)
ourDrumMap[i] = dynamic_cast<MidiTrack*>(*instrument_map[i].tracks.begin())->drummap()[instrument_map[i].pitch];
- if (debugMsg) printf("rebuilt drummap, size is now %i\n",size);
+ if (instrument_map!=old_instrument_map)
+ {
+ if (debugMsg) printf("rebuilt drummap and instrument map, size is now %i\n",size);
- songChanged(SC_EVENT_INSERTED); // force an update of the itemlist
-
- emit ourDrumMapChanged();
+ songChanged(SC_EVENT_INSERTED); // force an update of the itemlist
+ emit ourDrumMapChanged(true);
+ }
+ else
+ emit ourDrumMapChanged(false);
+
+ if (need_update)
+ song->update(SC_DRUMMAP, true); // i know, this causes a recursion, which possibly
+ // isn't the most elegant solution here. but it will
+ // never be an infinite recursion
}
}