summaryrefslogtreecommitdiff
path: root/muse2/muse/song.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/song.cpp')
-rw-r--r--muse2/muse/song.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/muse2/muse/song.cpp b/muse2/muse/song.cpp
index 8b8f6e15..484e2d42 100644
--- a/muse2/muse/song.cpp
+++ b/muse2/muse/song.cpp
@@ -243,6 +243,11 @@ Track* Song::addTrack(Undo& operations, Track::TrackType type, Track* insertAt)
track->setType(Track::MIDI);
if (MusEGlobal::config.unhideTracks) MidiTrack::setVisible(true);
break;
+ case Track::NEW_DRUM:
+ track = new MidiTrack();
+ track->setType(Track::NEW_DRUM);
+ ((MidiTrack*)track)->setOutChannel(9);
+ break;
case Track::DRUM:
track = new MidiTrack();
track->setType(Track::DRUM);
@@ -328,7 +333,7 @@ Track* Song::addTrack(Undo& operations, Track::TrackType type, Track* insertAt)
{
defOutFound = true;
mt->setOutPort(i);
- if(type != Track::DRUM) // p4.0.17 Leave drum tracks at channel 10.
+ if(type != Track::DRUM && type != Track::NEW_DRUM) // p4.0.17 Leave drum tracks at channel 10.
mt->setOutChannel(ch);
updateFlags |= SC_ROUTE;
break;
@@ -349,6 +354,7 @@ Track* Song::addTrack(Undo& operations, Track::TrackType type, Track* insertAt)
switch(type) {
//case Track::MIDI:
//case Track::DRUM:
+ //case Track::NEW_DRUM:
//case Track::AUDIO_OUTPUT:
// break;
@@ -512,7 +518,7 @@ void Song::remapPortDrumCtrlEvents(int mapidx, int newnote, int newchan, int new
{
MidiPart* part = (MidiPart*)(ip->second);
const EventList* el = part->cevents();
- // unsigned len = part->lenTick(); // unneeded, see below.
+ // unsigned len = part->lenTick(); // Commented out by flo, see below
for(ciEvent ie = el->begin(); ie != el->end(); ++ie)
{
const Event& ev = ie->second;
@@ -585,13 +591,15 @@ void Song::changeAllPortDrumCtrlEvents(bool add, bool drumonly)
{
MidiPart* part = (MidiPart*)(ip->second);
const EventList* el = part->cevents();
- unsigned len = part->lenTick();
+ // unsigned len = part->lenTick(); // Commented out by flo, see below
for(ciEvent ie = el->begin(); ie != el->end(); ++ie)
{
const Event& ev = ie->second;
// Added by T356. Do not handle events which are past the end of the part.
- if(ev.tick() >= len)
- break;
+ // Commented out by flo: yes, DO handle them! these are "hidden events"
+ // which may be revealed later again!
+ // if(ev.tick() >= len)
+ // break;
if(ev.type() != Controller)
continue;
@@ -1272,11 +1280,13 @@ void Song::rewindStart()
// update
//---------------------------------------------------------
-void Song::update(int flags)
+void Song::update(int flags, bool allowRecursion)
{
static int level = 0; // DEBUG
- if (level) {
- printf("Song::update %08x, level %d\n", flags, level);
+ if (level && !allowRecursion) {
+ printf("THIS SHOULD NEVER HAPPEN: unallowed recursion in Song::update(%08x), level %d!\n"
+ " the songChanged() signal is NOT emitted. this will\n"
+ " probably cause windows being not up-to-date.\n", flags, level);
return;
}
++level;
@@ -2911,6 +2921,7 @@ void Song::insertTrack2(Track* track, int idx)
switch(track->type()) {
case Track::MIDI:
case Track::DRUM:
+ case Track::NEW_DRUM:
_midis.push_back((MidiTrack*)track);
// Added by T356.
//((MidiTrack*)track)->addPortCtrlEvents();
@@ -3148,6 +3159,7 @@ void Song::removeTrack2(Track* track)
switch(track->type()) {
case Track::MIDI:
case Track::DRUM:
+ case Track::NEW_DRUM:
// Added by T356.
//((MidiTrack*)track)->removePortCtrlEvents();
removePortCtrlEvents(((MidiTrack*)track));