--- linuxsampler/trunk/src/drivers/midi/MidiInstrumentMapper.cpp 2007/03/25 18:59:14 1130 +++ linuxsampler/trunk/src/drivers/midi/MidiInstrumentMapper.cpp 2007/03/29 09:40:45 1135 @@ -47,11 +47,11 @@ // for synchronization of midiMaps Mutex midiMapsMutex; - ListenerList MidiInstrumentMapper::llMidiInstrumentCountListeners; ListenerList MidiInstrumentMapper::llMidiInstrumentInfoListeners; ListenerList MidiInstrumentMapper::llMidiInstrumentMapCountListeners; ListenerList MidiInstrumentMapper::llMidiInstrumentMapInfoListeners; + int MidiInstrumentMapper::DefaultMap; void MidiInstrumentMapper::AddMidiInstrumentCountListener(MidiInstrumentCountListener* l) { llMidiInstrumentCountListeners.AddListener(l); @@ -278,6 +278,13 @@ return result; } + int MidiInstrumentMapper::GetMapCount() { + midiMapsMutex.Lock(); + int i = midiMaps.size(); + midiMapsMutex.Unlock(); + return i; + } + int MidiInstrumentMapper::AddMap(String MapName) throw (Exception) { int ID; midiMapsMutex.Lock(); @@ -300,9 +307,12 @@ } __create_map: midiMaps[ID].name = MapName; - midiMapsMutex.Unlock(); - + fireMidiInstrumentMapCountChanged(Maps().size()); + // If there were no maps until now we must set a default map. + if (midiMaps.size() == 1) SetDefaultMap(ID); + midiMapsMutex.Unlock(); + return ID; } @@ -334,15 +344,34 @@ void MidiInstrumentMapper::RemoveMap(int Map) { midiMapsMutex.Lock(); midiMaps.erase(Map); - midiMapsMutex.Unlock(); + if(Map == GetDefaultMap()) { + SetDefaultMap(midiMaps.empty() ? -1 : (*(midiMaps.begin())).first); + } fireMidiInstrumentMapCountChanged(Maps().size()); + midiMapsMutex.Unlock(); } void MidiInstrumentMapper::RemoveAllMaps() { midiMapsMutex.Lock(); midiMaps.clear(); - midiMapsMutex.Unlock(); + SetDefaultMap(-1); fireMidiInstrumentMapCountChanged(Maps().size()); + midiMapsMutex.Unlock(); + } + + int MidiInstrumentMapper::GetDefaultMap() { + midiMapsMutex.Lock(); + int i = DefaultMap; + midiMapsMutex.Unlock(); + return i; + } + + void MidiInstrumentMapper::SetDefaultMap(int MapId) { + midiMapsMutex.Lock(); + DefaultMap = MapId; + midiMapsMutex.Unlock(); + + if (MapId != -1) fireMidiInstrumentMapInfoChanged(MapId); } optional MidiInstrumentMapper::GetEntry(int Map, midi_prog_index_t Index) {