Complete cleanup of fspanelimcontrolpanel.cpp/h

master
Ansariel 2013-08-07 17:29:51 +02:00
parent 56c4dfde2f
commit 621117bbc6
3 changed files with 9 additions and 318 deletions

View File

@ -1218,7 +1218,7 @@ void FSFloaterIM::sessionInitReplyReceived(const LLUUID& im_session_id)
// updating "Call" button from group control panel here to enable it without placing into draw() (EXT-4796)
if(gAgent.isInGroup(im_session_id))
{
mControlPanel->updateCallButton();
updateCallButton();
}
//*TODO here we should remove "starting session..." warning message if we added it in postBuild() (IB)

View File

@ -28,248 +28,23 @@
#include "llviewerprecompiledheaders.h"
#include "llfloaterreg.h"
#include "fspanelimcontrolpanel.h"
#include "llagent.h"
#include "llappviewer.h" // for gDisconnected
#include "llavataractions.h"
#include "llavatariconctrl.h"
#include "llbutton.h"
#include "llgroupactions.h"
#include "llavatarlist.h"
#include "fsparticipantlist.h"
#include "llimview.h"
#include "llvoicechannel.h"
#include "llspeakers.h"
void FSPanelChatControlPanel::onCallButtonClicked()
{
gIMMgr->startCall(mSessionId);
}
void FSPanelChatControlPanel::onEndCallButtonClicked()
{
gIMMgr->endCall(mSessionId);
}
void FSPanelChatControlPanel::onOpenVoiceControlsClicked()
{
LLFloaterReg::showInstance("fs_voice_controls");
}
void FSPanelChatControlPanel::onChange(EStatusType status, const std::string &channelURI, bool proximal)
{
if(status == STATUS_JOINING || status == STATUS_LEFT_CHANNEL)
{
return;
}
updateCallButton();
}
void FSPanelChatControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state)
{
updateButtons(new_state);
}
void FSPanelChatControlPanel::updateCallButton()
{
// hide/show call button
bool voice_enabled = LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking();
LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(mSessionId);
if (!session)
{
getChildView("call_btn")->setEnabled(false);
return;
}
bool session_initialized = session->mSessionInitialized;
bool callback_enabled = session->mCallBackEnabled;
BOOL enable_connect = session_initialized
&& voice_enabled
&& callback_enabled;
getChildView("call_btn")->setEnabled(enable_connect);
}
void FSPanelChatControlPanel::updateButtons(LLVoiceChannel::EState state)
{
bool is_call_started = state >= LLVoiceChannel::STATE_CALL_STARTED;
getChildView("end_call_btn_panel")->setVisible( is_call_started);
getChildView("voice_ctrls_btn_panel")->setVisible( is_call_started && findChild<LLView>("voice_ctrls_btn_panel"));
getChildView("call_btn_panel")->setVisible( ! is_call_started);
getChildView("volume_ctrl_panel")->setVisible(state == LLVoiceChannel::STATE_CONNECTED);
updateCallButton();
}
FSPanelChatControlPanel::~FSPanelChatControlPanel()
{
}
BOOL FSPanelChatControlPanel::postBuild()
{
return TRUE;
}
void FSPanelChatControlPanel::setSessionId(const LLUUID& session_id)
{
//Method is called twice for AdHoc and Group chat. Second time when server init reply received
mSessionId = session_id;
}
FSPanelIMControlPanel::FSPanelIMControlPanel()
{
}
FSPanelIMControlPanel::~FSPanelIMControlPanel()
{
}
BOOL FSPanelIMControlPanel::postBuild()
{
childSetAction("mute_btn", boost::bind(&FSPanelIMControlPanel::onClickMuteVolume, this));
childSetAction("block_btn", boost::bind(&FSPanelIMControlPanel::onClickBlock, this));
childSetAction("unblock_btn", boost::bind(&FSPanelIMControlPanel::onClickUnblock, this));
getChild<LLUICtrl>("volume_slider")->setCommitCallback(boost::bind(&FSPanelIMControlPanel::onVolumeChange, this, _2));
setFocusReceivedCallback(boost::bind(&FSPanelIMControlPanel::onFocusReceived, this));
return FSPanelChatControlPanel::postBuild();
}
void FSPanelIMControlPanel::draw()
{
bool is_muted = LLMuteList::getInstance()->isMuted(mAvatarID);
getChild<LLUICtrl>("block_btn_panel")->setVisible(!is_muted);
getChild<LLUICtrl>("unblock_btn_panel")->setVisible(is_muted);
if (getChildView("volume_ctrl_panel")->getVisible())
{
bool is_muted_voice = LLMuteList::getInstance()->isMuted(mAvatarID, LLMute::flagVoiceChat);
LLUICtrl* mute_btn = getChild<LLUICtrl>("mute_btn");
mute_btn->setValue( is_muted_voice );
LLUICtrl* volume_slider = getChild<LLUICtrl>("volume_slider");
volume_slider->setEnabled( !is_muted_voice );
F32 volume;
if (is_muted_voice)
{
// it's clearer to display their volume as zero
volume = 0.f;
}
else
{
// actual volume
volume = LLVoiceClient::getInstance()->getUserVolume(mAvatarID);
}
volume_slider->setValue( (F64)volume );
}
FSPanelChatControlPanel::draw();
}
void FSPanelIMControlPanel::onClickMuteVolume()
{
// By convention, we only display and toggle voice mutes, not all mutes
LLMuteList* mute_list = LLMuteList::getInstance();
bool is_muted = mute_list->isMuted(mAvatarID, LLMute::flagVoiceChat);
LLMute mute(mAvatarID, getChild<LLTextBox>("avatar_name")->getText(), LLMute::AGENT);
if (!is_muted)
{
mute_list->add(mute, LLMute::flagVoiceChat);
}
else
{
mute_list->remove(mute, LLMute::flagVoiceChat);
}
}
void FSPanelIMControlPanel::onClickBlock()
{
LLMute mute(mAvatarID, getChild<LLTextBox>("avatar_name")->getText(), LLMute::AGENT);
LLMuteList::getInstance()->add(mute);
}
void FSPanelIMControlPanel::onClickUnblock()
{
LLMute mute(mAvatarID, getChild<LLTextBox>("avatar_name")->getText(), LLMute::AGENT);
LLMuteList::getInstance()->remove(mute);
}
void FSPanelIMControlPanel::onVolumeChange(const LLSD& data)
{
F32 volume = (F32)data.asReal();
LLVoiceClient::getInstance()->setUserVolume(mAvatarID, volume);
}
void FSPanelIMControlPanel::onFocusReceived()
{
// Disable all the buttons (Call, Teleport, etc) if disconnected.
if (gDisconnected)
{
setAllChildrenEnabled(FALSE);
}
}
void FSPanelIMControlPanel::setSessionId(const LLUUID& session_id)
{
FSPanelChatControlPanel::setSessionId(session_id);
LLIMModel& im_model = LLIMModel::instance();
mAvatarID = im_model.getOtherParticipantID(session_id);
}
//virtual
void FSPanelIMControlPanel::changed(U32 mask)
{
getChildView("add_friend_btn")->setEnabled(!LLAvatarActions::isFriend(mAvatarID));
// Disable "Teleport" button if friend is offline
if(LLAvatarActions::isFriend(mAvatarID))
{
getChildView("teleport_btn")->setEnabled(LLAvatarTracker::instance().isBuddyOnline(mAvatarID));
}
}
void FSPanelIMControlPanel::onNameCache(const LLUUID& id, const std::string& full_name, bool is_group)
{
if ( id == mAvatarID )
{
std::string avatar_name = full_name;
getChild<LLTextBox>("avatar_name")->setValue(avatar_name);
getChild<LLTextBox>("avatar_name")->setToolTip(avatar_name);
bool is_linden = LLStringUtil::endsWith(full_name, " Linden");
getChild<LLUICtrl>("mute_btn")->setEnabled( !is_linden);
}
}
FSPanelGroupControlPanel::FSPanelGroupControlPanel(const LLUUID& session_id):
mParticipantList(NULL)
{
}
BOOL FSPanelGroupControlPanel::postBuild()
{
return FSPanelChatControlPanel::postBuild();
}
FSPanelGroupControlPanel::~FSPanelGroupControlPanel()
{
delete mParticipantList;
@ -281,34 +56,10 @@ void FSPanelGroupControlPanel::draw()
{
// Need to resort the participant list if it's in sort by recent speaker order.
if (mParticipantList)
mParticipantList->update();
FSPanelChatControlPanel::draw();
}
void FSPanelGroupControlPanel::onGroupInfoButtonClicked()
{
LLGroupActions::show(mGroupID);
}
void FSPanelGroupControlPanel::onSortMenuItemClicked(const LLSD& userdata)
{
// TODO: Check this code when when sort order menu will be added. (EM)
if (false && !mParticipantList)
return;
std::string chosen_item = userdata.asString();
if (chosen_item == "sort_name")
{
mParticipantList->setSortOrder(LLParticipantList::E_SORT_BY_NAME);
mParticipantList->update();
}
}
void FSPanelGroupControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state)
{
FSPanelChatControlPanel::onVoiceChannelStateChanged(old_state, new_state);
mParticipantList->setSpeakingIndicatorsVisible(new_state >= LLVoiceChannel::STATE_CALL_STARTED);
FSPanelChatControlPanel::draw();
}
void FSPanelGroupControlPanel::setSessionId(const LLUUID& session_id)
@ -325,13 +76,7 @@ void FSPanelGroupControlPanel::setSessionId(const LLUUID& session_id)
}
}
FSPanelAdHocControlPanel::FSPanelAdHocControlPanel(const LLUUID& session_id):FSPanelGroupControlPanel(session_id)
FSPanelAdHocControlPanel::FSPanelAdHocControlPanel(const LLUUID& session_id)
: FSPanelGroupControlPanel(session_id)
{
}
BOOL FSPanelAdHocControlPanel::postBuild()
{
//We don't need LLPanelGroupControlPanel::postBuild() to be executed as there is no group_info_btn at AdHoc chat
return FSPanelChatControlPanel::postBuild();
}

View File

@ -30,74 +30,30 @@
#define FS_PANELIMCONTROLPANEL_H
#include "llpanel.h"
#include "llvoicechannel.h"
#include "llcallingcard.h"
class LLParticipantList;
class FSPanelChatControlPanel
: public LLPanel
, public LLVoiceClientStatusObserver
{
public:
FSPanelChatControlPanel() :
mSessionId(LLUUID()) {};
~FSPanelChatControlPanel();
virtual BOOL postBuild();
void onCallButtonClicked();
void onEndCallButtonClicked();
void onOpenVoiceControlsClicked();
// Implements LLVoiceClientStatusObserver::onChange() to enable the call
// button when voice is available
/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
virtual void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state);
void updateButtons(LLVoiceChannel::EState state);
// Enables/disables call button depending on voice availability
void updateCallButton();
~FSPanelChatControlPanel() { }
virtual void setSessionId(const LLUUID& session_id);
const LLUUID& getSessionId() { return mSessionId; }
private:
LLUUID mSessionId;
// connection to voice channel state change signal
boost::signals2::connection mVoiceChannelStateChangeConnection;
};
class FSPanelIMControlPanel : public FSPanelChatControlPanel, LLFriendObserver
class FSPanelIMControlPanel : public FSPanelChatControlPanel
{
public:
FSPanelIMControlPanel();
~FSPanelIMControlPanel();
BOOL postBuild();
void setSessionId(const LLUUID& session_id);
// LLFriendObserver trigger
virtual void changed(U32 mask);
protected:
void onNameCache(const LLUUID& id, const std::string& full_name, bool is_group);
private:
void onFocusReceived();
void onClickMuteVolume();
void onClickBlock();
void onClickUnblock();
/*virtual*/ void draw();
void onVolumeChange(const LLSD& data);
LLUUID mAvatarID;
FSPanelIMControlPanel() { }
~FSPanelIMControlPanel() { }
};
@ -107,8 +63,6 @@ public:
FSPanelGroupControlPanel(const LLUUID& session_id);
~FSPanelGroupControlPanel();
BOOL postBuild();
void setSessionId(const LLUUID& session_id);
/*virtual*/ void draw();
@ -116,20 +70,12 @@ protected:
LLUUID mGroupID;
LLParticipantList* mParticipantList;
private:
void onGroupInfoButtonClicked();
void onSortMenuItemClicked(const LLSD& userdata);
/*virtual*/ void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state);
};
class FSPanelAdHocControlPanel : public FSPanelGroupControlPanel
{
public:
FSPanelAdHocControlPanel(const LLUUID& session_id);
BOOL postBuild();
};
#endif // FS_PANELIMCONTROLPANEL_H