Handle users joining and leaving properly in audio context and gui

Before this change signals when users were joining or leaving
the voice room were not properly handled. A new signal in audio
context is emitted now and gui will rebuild the user list when it
is emitted.
This commit is contained in:
Roland Winklmeier
2015-03-13 20:56:04 +01:00
committed by Klaus Basan
parent a50e45e451
commit 0760a67138
5 changed files with 29 additions and 5 deletions

View File

@@ -84,6 +84,9 @@ namespace BlackCore
//! \details the flag indicates, whether a room got connected or disconnected
void changedVoiceRooms(const BlackMisc::Audio::CVoiceRoomList &voiceRooms, bool connected);
//! Voice room members changed
void changedVoiceRoomMembers();
//! Audio volume changed
//! \sa setVoiceOutputVolume
void changedAudioVolume(int volume);

View File

@@ -49,9 +49,13 @@ namespace BlackCore
m_channel1 = m_voice->createVoiceChannel();
m_channel1->setMyAircraftCallsign(ownCallsign);
connect(m_channel1.data(), &IVoiceChannel::connectionStatusChanged, this, &CContextAudio::ps_connectionStatusChanged);
connect(m_channel1.data(), &IVoiceChannel::userJoinedRoom, this, &CContextAudio::ps_userJoinedRoom);
connect(m_channel1.data(), &IVoiceChannel::userLeftRoom, this, &CContextAudio::ps_userLeftRoom);
m_channel2 = m_voice->createVoiceChannel();
m_channel2->setMyAircraftCallsign(ownCallsign);
connect(m_channel2.data(), &IVoiceChannel::connectionStatusChanged, this, &CContextAudio::ps_connectionStatusChanged);
connect(m_channel1.data(), &IVoiceChannel::userJoinedRoom, this, &CContextAudio::ps_userJoinedRoom);
connect(m_channel1.data(), &IVoiceChannel::userLeftRoom, this, &CContextAudio::ps_userLeftRoom);
m_voiceInputDevice = m_voice->createInputDevice();
m_voiceOutputDevice = m_voice->createOutputDevice();
@@ -546,6 +550,16 @@ namespace BlackCore
}
}
void CContextAudio::ps_userJoinedRoom(const CCallsign & /**callsign**/)
{
emit this->changedVoiceRoomMembers();
}
void CContextAudio::ps_userLeftRoom(const CCallsign & /**callsign**/)
{
emit this->changedVoiceRoomMembers();
}
QSharedPointer<IVoiceChannel> CContextAudio::getVoiceChannelBy(const CVoiceRoom &voiceRoom)
{
QSharedPointer<IVoiceChannel> voiceChannel;

View File

@@ -139,6 +139,12 @@ namespace BlackCore
void ps_setVoiceTransmission(bool enable);
//! User joined the room
void ps_userJoinedRoom(const BlackMisc::Aviation::CCallsign &callsign);
//! User left the room
void ps_userLeftRoom(const BlackMisc::Aviation::CCallsign &callsign);
private:
const int MinUnmuteVolume = 20; //!< minimum volume when unmuted

View File

@@ -40,6 +40,7 @@ namespace BlackGui
void CVoiceRoomsComponent::runtimeHasBeenSet()
{
this->connect(this->getIContextAudio(), &IContextAudio::changedVoiceRooms, this, &CVoiceRoomsComponent::ps_updateAudioVoiceRoomsFromContext);
this->connect(this->getIContextAudio(), &IContextAudio::changedVoiceRoomMembers, this, &CVoiceRoomsComponent::ps_updateVoiceRoomMembers);
}
void CVoiceRoomsComponent::ps_onVoiceRoomOverrideChanged(bool checked)
@@ -102,7 +103,7 @@ namespace BlackGui
}
if (changedUrl1 || changedUrl2)
{
this->updateVoiceRoomMembers();
this->ps_updateVoiceRoomMembers();
// notify
if (this->getIContextAudio())
@@ -115,7 +116,7 @@ namespace BlackGui
}
}
void CVoiceRoomsComponent::updateVoiceRoomMembers()
void CVoiceRoomsComponent::ps_updateVoiceRoomMembers()
{
if (!this->getIContextAudio()) { return; }
if (!this->ui->le_CockpitVoiceRoomCom1->text().trimmed().isEmpty())

View File

@@ -51,13 +51,13 @@ namespace BlackGui
//! Set the voice room url fields (checkboxes, line edits)
void ps_updateAudioVoiceRoomsFromContext(const BlackMisc::Audio::CVoiceRoomList &selectedVoiceRooms, bool connected);
//! Update voice room views
void ps_updateVoiceRoomMembers();
private:
//! Set the URL fields
void setVoiceRoomUrlFieldsReadOnlyState();
//! Update voice room views
void updateVoiceRoomMembers();
QScopedPointer<Ui::CVoiceRoomsComponent> ui;
};