From: Paul Davis Date: Tue, 11 Nov 2014 02:28:21 +0000 (-0500) Subject: when creating a new MIDI scene change, check existing scene changes for equality... X-Git-Tag: 4.0-rc1~1413 X-Git-Url: https://main.carlh.net/gitweb/?p=ardour.git;a=commitdiff_plain;h=e27651d31521a527a2acaf570512a44163b5c638 when creating a new MIDI scene change, check existing scene changes for equality and reuse their color (which may or may not be set) --- diff --git a/libs/ardour/midi_scene_changer.cc b/libs/ardour/midi_scene_changer.cc index 75a1a98cb7..e799b5a2ce 100644 --- a/libs/ardour/midi_scene_changer.cc +++ b/libs/ardour/midi_scene_changer.cc @@ -310,6 +310,19 @@ MIDISceneChanger::program_change_input (MIDI::Parser& parser, MIDI::byte program MIDISceneChange* msc =new MIDISceneChange (channel, bank, program & 0x7f); + /* check for identical scene change so we can re-use color, if any */ + + Locations::LocationList copy (locations->list()); + + for (Locations::LocationList::const_iterator l = copy.begin(); l != copy.end(); ++l) { + boost::shared_ptr m = boost::dynamic_pointer_cast((*l)->scene_change()); + + if (m && (*m.get()) == *msc) { + msc->set_color (m->color ()); + break; + } + } + loc->set_scene_change (boost::shared_ptr (msc)); /* this will generate a "changed" signal to be emitted by locations,