summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/llcallfloater.cpp64
-rw-r--r--indra/newview/llcallfloater.h10
-rw-r--r--indra/newview/llparticipantlist.cpp2
-rw-r--r--indra/newview/llspeakingindicatormanager.cpp4
-rw-r--r--indra/newview/llvoicechannel.h2
-rw-r--r--indra/newview/llvoiceclient.cpp35
-rw-r--r--indra/newview/llvoiceclient.h17
-rw-r--r--indra/newview/skins/default/xui/en/floater_voice_controls.xml12
9 files changed, 106 insertions, 51 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 4ca23e14a1..63e8775d04 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -10405,6 +10405,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>VoiceFontDefault</key>
+ <map>
+ <key>Comment</key>
+ <string>Selected voice font</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </map>
<key>AutoDisengageMic</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index f41875f67b..703c7dd435 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -115,7 +115,8 @@ LLCallFloater::LLCallFloater(const LLSD& key)
mSpeakerDelayRemover = new LLSpeakersDelayActionsStorage(boost::bind(&LLCallFloater::removeVoiceLeftParticipant, this, _1), voice_left_remove_delay);
mFactoryMap["non_avatar_caller"] = LLCallbackMap(create_non_avatar_caller, NULL);
- LLVoiceClient::getInstance()->addObserver(this);
+ LLVoiceClient::instance().addObserver(dynamic_cast<LLVoiceClientParticipantObserver*>(this));
+ LLVoiceClient::instance().addObserver(dynamic_cast<LLVoiceClientFontsObserver*>(this));
LLTransientFloaterMgr::getInstance()->addControlView(this);
// force docked state since this floater doesn't save it between recreations
@@ -135,7 +136,8 @@ LLCallFloater::~LLCallFloater()
if(LLVoiceClient::instanceExists())
{
- LLVoiceClient::instance().removeObserver(this);
+ LLVoiceClient::instance().removeObserver(dynamic_cast<LLVoiceClientParticipantObserver*>(this));
+ LLVoiceClient::instance().removeObserver(dynamic_cast<LLVoiceClientFontsObserver*>(this));
}
LLTransientFloaterMgr::getInstance()->removeControlView(this);
}
@@ -208,11 +210,8 @@ void LLCallFloater::draw()
}
// virtual
-void LLCallFloater::onChange()
+void LLCallFloater::onParticipantsChanged()
{
- // *FIX: Temporarily dumping this here till I decide where it should go
- updateVoiceFont();
-
if (NULL == mParticipants) return;
updateParticipantsVoiceState();
@@ -226,42 +225,23 @@ void LLCallFloater::onChange()
}
}
-//////////////////////////////////////////////////////////////////////////
-/// PRIVATE SECTION
-//////////////////////////////////////////////////////////////////////////
-
-void LLCallFloater::leaveCall()
-{
- LLVoiceChannel* voice_channel = LLVoiceChannel::getCurrentVoiceChannel();
- if (voice_channel)
- {
- gIMMgr->endCall(voice_channel->getSessionID());
- }
-}
-
-/* static */
-void LLCallFloater::commitVoiceFont(LLUICtrl* ctrl, void* userdata)
-{
- LLVoiceClient::getInstance()->setVoiceFont(ctrl->getValue());
-}
-
-void LLCallFloater::updateVoiceFont()
+// virtual
+void LLCallFloater::onVoiceFontsChanged()
{
if (mVoiceFont)
{
mVoiceFont->removeall();
mVoiceFont->add(getString("no_voice_font"), LLUUID::null);
- if (LLVoiceClient::getInstance()->hasVoiceFonts())
+ if (LLVoiceClient::instance().hasVoiceFonts())
{
- const LLVoiceClient::voice_font_list_t font_list = LLVoiceClient::getInstance()->getVoiceFontList();
-
+ const LLVoiceClient::voice_font_list_t font_list = LLVoiceClient::instance().getVoiceFontList();
for (LLVoiceClient::voice_font_list_t::const_iterator it = font_list.begin(); it != font_list.end(); ++it)
{
mVoiceFont->add(*(it->first), *(it->second), ADD_BOTTOM);
}
mVoiceFont->setEnabled(true);
- mVoiceFont->setValue(LLVoiceClient::getInstance()->getVoiceFont());
+ mVoiceFont->setValue(LLVoiceClient::instance().getVoiceFont());
}
else
{
@@ -270,6 +250,25 @@ void LLCallFloater::updateVoiceFont()
}
}
+//////////////////////////////////////////////////////////////////////////
+/// PRIVATE SECTION
+//////////////////////////////////////////////////////////////////////////
+
+void LLCallFloater::leaveCall()
+{
+ LLVoiceChannel* voice_channel = LLVoiceChannel::getCurrentVoiceChannel();
+ if (voice_channel)
+ {
+ gIMMgr->endCall(voice_channel->getSessionID());
+ }
+}
+
+/* static */
+void LLCallFloater::commitVoiceFont(LLUICtrl* ctrl, void* userdata)
+{
+ LLVoiceClient::getInstance()->setVoiceFont(ctrl->getValue());
+}
+
void LLCallFloater::updateSession()
{
LLVoiceChannel* voice_channel = LLVoiceChannel::getCurrentVoiceChannel();
@@ -334,7 +333,7 @@ void LLCallFloater::updateSession()
}
updateTitle();
-
+
//hide "Leave Call" button for nearby chat
bool is_local_chat = mVoiceType == VC_LOCAL_CHAT;
childSetVisible("leave_call_btn_panel", !is_local_chat);
@@ -787,9 +786,6 @@ void LLCallFloater::updateState(const LLVoiceChannel::EState& new_state)
{
reset(new_state);
}
-
- // *FIX: Dumped here till I decide where to put it
- updateVoiceFont();
}
void LLCallFloater::reset(const LLVoiceChannel::EState& new_state)
diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h
index 9a13d853c9..160eff312c 100644
--- a/indra/newview/llcallfloater.h
+++ b/indra/newview/llcallfloater.h
@@ -58,7 +58,9 @@ class LLSpeakersDelayActionsStorage;
* When the Resident is engaged in any chat except Nearby Chat, the Voice Control Panel
* also provides a 'Leave Call' button to allow the Resident to leave that voice channel.
*/
-class LLCallFloater : public LLTransientDockableFloater, LLVoiceClientParticipantObserver
+class LLCallFloater : public LLTransientDockableFloater,
+ LLVoiceClientParticipantObserver,
+ LLVoiceClientFontsObserver
{
public:
@@ -76,7 +78,10 @@ public:
*
* Refreshes list to display participants not in voice as disabled.
*/
- /*virtual*/ void onChange();
+ /*virtual*/ void onParticipantsChanged();
+
+ /// Called by LLVoiceClient::notifyVoiceFontObservers when voice font list is changed.
+ /*virtual*/ void onVoiceFontsChanged();
static void sOnCurrentChannelChanged(const LLUUID& session_id);
@@ -103,7 +108,6 @@ private:
void leaveCall();
static void commitVoiceFont(LLUICtrl*,void* userdata);
- void updateVoiceFont();
/**
* Updates mSpeakerManager and list according to current Voice Channel
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index c3748ca81d..d0c882e16e 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -92,7 +92,7 @@ public:
mAvalineCallers.insert(avaline_caller_id);
}
- void onChange()
+ void onParticipantsChanged()
{
uuid_set_t participant_uuids;
LLVoiceClient::getInstance()->getParticipantsUUIDSet(participant_uuids);
diff --git a/indra/newview/llspeakingindicatormanager.cpp b/indra/newview/llspeakingindicatormanager.cpp
index cc06179481..70028dc21b 100644
--- a/indra/newview/llspeakingindicatormanager.cpp
+++ b/indra/newview/llspeakingindicatormanager.cpp
@@ -107,7 +107,7 @@ private:
* So, method does not calculate difference between these list it only switches off already
* switched on indicators and switches on indicators of voice channel participants
*/
- void onChange();
+ void onParticipantsChanged();
/**
* Changes state of indicators specified by LLUUIDs
@@ -205,7 +205,7 @@ void SpeakingIndicatorManager::sOnCurrentChannelChanged(const LLUUID& /*session_
mSwitchedIndicatorsOn.clear();
}
-void SpeakingIndicatorManager::onChange()
+void SpeakingIndicatorManager::onParticipantsChanged()
{
LL_DEBUGS("SpeakingIndicator") << "Voice participant list was changed, updating indicators" << LL_ENDL;
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
index 941cccacc3..5236b11853 100644
--- a/indra/newview/llvoicechannel.h
+++ b/indra/newview/llvoicechannel.h
@@ -112,7 +112,7 @@ protected:
void doSetState(const EState& state);
void setURI(std::string uri);
- // there can be two directions ICOMING and OUTGOING
+ // there can be two directions INCOMING and OUTGOING
EDirection mCallDirection;
std::string mURI;
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index b1f0380029..d131285512 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -6641,6 +6641,7 @@ LLVoiceClient::sessionState::sessionState() :
mMuteDirty(false),
mParticipantsChanged(false)
{
+ mVoiceFontID = LLUUID(gSavedSettings.getString("VoiceFontDefault"));
}
LLVoiceClient::sessionState::~sessionState()
@@ -7263,8 +7264,11 @@ bool LLVoiceClient::setVoiceFont(const LLUUID& id)
if (id.isNull() || (mVoiceFontMap.find(&id) != mVoiceFontMap.end()))
{
- // *TODO: Check for expired fonts
+ // *TODO: Check for expired fonts?
mAudioSession->mVoiceFontID = id;
+
+ // *TODO: Separate voice font defaults for spatial chat and IM?
+ gSavedSettings.setString("VoiceFontDefault", id.asString());
}
else
{
@@ -7273,6 +7277,7 @@ bool LLVoiceClient::setVoiceFont(const LLUUID& id)
}
sessionSetVoiceFontSendMessage(mAudioSession);
+ notifyVoiceFontObservers();
return true;
}
@@ -7339,6 +7344,7 @@ void LLVoiceClient::accountGetSessionFontsResponse(int statusCode, const std::st
{
setState(stateVoiceFontsReceived);
}
+ notifyVoiceFontObservers();
}
void LLVoiceClient::addObserver(LLVoiceClientParticipantObserver* observer)
@@ -7358,12 +7364,35 @@ void LLVoiceClient::notifyParticipantObservers()
)
{
LLVoiceClientParticipantObserver* observer = *it;
- observer->onChange();
- // In case onChange() deleted an entry.
+ observer->onParticipantsChanged();
+ // In case onParticipantsChanged() deleted an entry.
it = mParticipantObservers.upper_bound(observer);
}
}
+void LLVoiceClient::addObserver(LLVoiceClientFontsObserver* observer)
+{
+ mVoiceFontObservers.insert(observer);
+}
+
+void LLVoiceClient::removeObserver(LLVoiceClientFontsObserver* observer)
+{
+ mVoiceFontObservers.erase(observer);
+}
+
+void LLVoiceClient::notifyVoiceFontObservers()
+{
+ for (voice_font_observer_set_t::iterator it = mVoiceFontObservers.begin();
+ it != mVoiceFontObservers.end();
+ )
+ {
+ LLVoiceClientFontsObserver* observer = *it;
+ observer->onVoiceFontsChanged();
+ // In case onVoiceFontsChanged() deleted an entry.
+ it = mVoiceFontObservers.upper_bound(observer);
+ }
+}
+
void LLVoiceClient::addObserver(LLVoiceClientStatusObserver* observer)
{
mStatusObservers.insert(observer);
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 16fcb1d3f6..a1083652aa 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -49,7 +49,14 @@ class LLVoiceClientParticipantObserver
{
public:
virtual ~LLVoiceClientParticipantObserver() { }
- virtual void onChange() = 0;
+ virtual void onParticipantsChanged() = 0;
+};
+
+class LLVoiceClientFontsObserver
+{
+public:
+ virtual ~LLVoiceClientFontsObserver() { }
+ virtual void onVoiceFontsChanged() = 0;
};
class LLVoiceClientStatusObserver
@@ -500,6 +507,9 @@ static void updatePosition(void);
void addObserver(LLVoiceClientParticipantObserver* observer);
void removeObserver(LLVoiceClientParticipantObserver* observer);
+ void addObserver(LLVoiceClientFontsObserver* observer);
+ void removeObserver(LLVoiceClientFontsObserver* observer);
+
void addObserver(LLVoiceClientStatusObserver* observer);
void removeObserver(LLVoiceClientStatusObserver* observer);
@@ -832,6 +842,11 @@ static std::string nameFromsipURI(const std::string &uri);
void notifyParticipantObservers();
+ typedef std::set<LLVoiceClientFontsObserver*> voice_font_observer_set_t;
+ voice_font_observer_set_t mVoiceFontObservers;
+
+ void notifyVoiceFontObservers();
+
typedef std::set<LLVoiceClientStatusObserver*> status_observer_set_t;
status_observer_set_t mStatusObservers;
diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
index e7c5770a08..885c8304eb 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -101,20 +101,20 @@
orientation="horizontal"
width="263">
<layout_panel
- auto_resize="false"
+ auto_resize="true"
user_resize="false"
follows="top|left"
height="26"
visible="true"
layout="topleft"
name="voice_font_panel"
- width="120">
+ width="150">
<combo_box
- follows="left|top"
+ follows="left|top|right"
height="23"
name="voice_font"
top_pad="0"
- width="120">
+ width="150">
<combo_box.item
label="No Voice Effect"
name="no_voice_font"
@@ -124,14 +124,14 @@
<layout_panel
auto_resize="false"
user_resize="false"
- follows="top|left"
+ follows="top|right"
height="26"
visible="true"
layout="topleft"
name="leave_call_btn_panel"
width="100">
<button
- follows="right|top"
+ follows="right|top"
height="23"
top_pad="0"
label="Leave Call"