Merge branch 'master' of git://github.com/siana/SingularityViewer
This commit is contained in:
@@ -563,8 +563,8 @@ void LLDir::setLindenUserDir(const std::string &grid, const std::string &first,
|
||||
{
|
||||
std::string gridlower(grid);
|
||||
LLStringUtil::toLower(gridlower);
|
||||
mPerAccountChatLogsDir += "@";
|
||||
mPerAccountChatLogsDir += gridlower;
|
||||
mLindenUserDir += "@";
|
||||
mLindenUserDir += gridlower;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -394,7 +394,7 @@ void LLPrefsAscentSysImpl::apply()
|
||||
//Missing the echo/log option.
|
||||
gSavedSettings.setBOOL("PlayTypingSound", childGetValue("play_typing_sound_check"));
|
||||
gSavedSettings.setBOOL("AscentHideTypingNotification", childGetValue("hide_typing_check"));
|
||||
gSavedSettings.setBOOL("AscentInstantMessageAnnounceIncoming", childGetValue("AscentInstantMessageAnnounceIncoming").asBoolean());
|
||||
gSavedPerAccountSettings.setBOOL("AscentInstantMessageAnnounceIncoming", childGetValue("AscentInstantMessageAnnounceIncoming").asBoolean());
|
||||
gSavedSettings.setBOOL("AscentAllowMUpose", childGetValue("allow_mu_pose_check").asBoolean());
|
||||
gSavedSettings.setBOOL("AscentAutoCloseOOC", childGetValue("close_ooc_check").asBoolean());
|
||||
//gSavedSettings.setU32("LinksForChattingObjects", childGetValue("objects_link"). );
|
||||
|
||||
@@ -95,6 +95,15 @@ const std::string& HippoGridInfo::getGridName() const
|
||||
return mGridName;
|
||||
}
|
||||
|
||||
const std::string& HippoGridInfo::getGridOwner() const {
|
||||
if(isSecondLife()) {
|
||||
static const std::string ll = "Linden Lab";
|
||||
return ll;
|
||||
} else {
|
||||
return this->getGridName();
|
||||
}
|
||||
}
|
||||
|
||||
const std::string& HippoGridInfo::getLoginUri() const
|
||||
{
|
||||
return mLoginUri;
|
||||
|
||||
@@ -40,6 +40,7 @@ public:
|
||||
bool isSecondLife() const;
|
||||
const std::string& getGridNick() const;
|
||||
const std::string& getGridName() const;
|
||||
const std::string& getGridOwner() const;
|
||||
const std::string& getLoginUri() const;
|
||||
const std::string& getLoginPage() const;
|
||||
const std::string& getHelperUri() const;
|
||||
|
||||
@@ -75,6 +75,8 @@
|
||||
#include "llmutelist.h"
|
||||
#include "llstylemap.h"
|
||||
|
||||
#include "boost/algorithm/string.hpp"
|
||||
|
||||
// [RLVa:KB]
|
||||
#include "rlvhandler.h"
|
||||
// [/RLVa:KB]
|
||||
@@ -2499,11 +2501,13 @@ void LLFloaterIMPanel::showSessionEventError(
|
||||
const std::string& error_string)
|
||||
{
|
||||
LLSD args;
|
||||
args["REASON"] =
|
||||
LLFloaterIM::sErrorStringsMap[error_string];
|
||||
args["EVENT"] =
|
||||
LLFloaterIM::sEventStringsMap[event_string];
|
||||
args["RECIPIENT"] = getTitle();
|
||||
std::string recipient = getTitle();
|
||||
std::string reason = LLFloaterIM::sErrorStringsMap[error_string];
|
||||
boost::replace_all(reason, "[RECIPIENT]", recipient);
|
||||
std::string event = LLFloaterIM::sEventStringsMap[event_string];
|
||||
boost::replace_all(event, "[RECIPIENT]", recipient);
|
||||
args["REASON"] = reason;
|
||||
args["EVENT"] = event;
|
||||
|
||||
LLNotifications::instance().add(
|
||||
"ChatterBoxSessionEventError",
|
||||
|
||||
@@ -583,6 +583,7 @@ void LLNotifyBox::format(std::string& msg, const LLStringUtil::format_map_t& arg
|
||||
LLStringUtil::format_map_t targs = args;
|
||||
targs["[SECOND_LIFE]"] = gHippoGridManager->getConnectedGrid()->getGridName();
|
||||
targs["[GRID_NAME]"] = gHippoGridManager->getConnectedGrid()->getGridName();
|
||||
targs["[GRID_OWNER]"] = gHippoGridManager->getConnectedGrid()->getGridOwner();
|
||||
targs["[GRID_SITE]"] = gHippoGridManager->getConnectedGrid()->getWebSite();
|
||||
targs["[CURRENCY]"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
|
||||
targs["[VIEWER_NAME]"] = "Singularity Viewer";
|
||||
|
||||
@@ -1102,8 +1102,12 @@ void LLPanelLogin::onClickConnect(void *)
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotifications::instance().add("MustHaveAccountToLogIn", LLSD(), LLSD(),
|
||||
LLPanelLogin::newAccountAlertCallback);
|
||||
if (gHippoGridManager->getConnectedGrid()->getRegisterUrl().empty()) {
|
||||
LLNotifications::instance().add("MustHaveAccountToLogInNoLinks");
|
||||
} else {
|
||||
LLNotifications::instance().add("MustHaveAccountToLogIn", LLSD(), LLSD(),
|
||||
LLPanelLogin::newAccountAlertCallback);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1129,7 +1133,14 @@ bool LLPanelLogin::newAccountAlertCallback(const LLSD& notification, const LLSD&
|
||||
// static
|
||||
void LLPanelLogin::onClickNewAccount(void*)
|
||||
{
|
||||
LLWeb::loadURLExternal( CREATE_ACCOUNT_URL );
|
||||
const std::string &url = gHippoGridManager->getConnectedGrid()->getRegisterUrl();
|
||||
if (!url.empty()) {
|
||||
llinfos << "Going to account creation URL." << llendl;
|
||||
LLWeb::loadURLExternal(url);
|
||||
} else {
|
||||
llinfos << "Account creation URL is empty." << llendl;
|
||||
sInstance->setFocus(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
@@ -1174,7 +1185,12 @@ void LLPanelLogin::onClickForgotPassword(void*)
|
||||
{
|
||||
if (sInstance )
|
||||
{
|
||||
LLWeb::loadURLExternal(sInstance->getString( "forgot_password_url" ));
|
||||
const std::string &url = gHippoGridManager->getConnectedGrid()->getPasswordUrl();
|
||||
if (!url.empty()) {
|
||||
LLWeb::loadURLExternal(url);
|
||||
} else {
|
||||
llwarns << "Link for 'forgotton password' not set." << llendl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1050,7 +1050,12 @@ bool LLViewerImage::updateFetch()
|
||||
// We've changed the number of components, so we need to move any
|
||||
// objects using this pool to a different pool.
|
||||
mComponents = mRawImage->getComponents();
|
||||
gImageList.dirtyImage(this);
|
||||
|
||||
for(U32 i = 0 ; i < mNumFaces ; i++)
|
||||
{
|
||||
mFaceList[i]->dirtyTexture() ;
|
||||
}
|
||||
//gImageList.dirtyImage(this);
|
||||
}
|
||||
|
||||
mFullWidth = mRawImage->getWidth() << mRawDiscardLevel;
|
||||
|
||||
@@ -75,10 +75,6 @@
|
||||
// for MD5 hash
|
||||
#include "llmd5.h"
|
||||
|
||||
// <edit>
|
||||
#include "llworld.h"
|
||||
// </edit>
|
||||
|
||||
#define USE_SESSION_GROUPS 0
|
||||
|
||||
static bool sConnectingToAgni = false;
|
||||
@@ -1120,7 +1116,6 @@ LLVoiceClient::LLVoiceClient()
|
||||
mCommandCookie = 0;
|
||||
mCurrentParcelLocalID = 0;
|
||||
mLoginRetryCount = 0;
|
||||
mPosLocked = false;
|
||||
|
||||
mSpeakerVolume = 0;
|
||||
mMicVolume = 0;
|
||||
@@ -1153,7 +1148,6 @@ LLVoiceClient::LLVoiceClient()
|
||||
mTuningMicVolumeDirty = true;
|
||||
mTuningSpeakerVolume = 0;
|
||||
mTuningSpeakerVolumeDirty = true;
|
||||
|
||||
|
||||
// gMuteListp isn't set up at this point, so we defer this until later.
|
||||
// gMuteListp->addObserver(&mutelist_listener);
|
||||
@@ -2572,7 +2566,7 @@ void LLVoiceClient::sessionCreateSendMessage(sessionState *session, bool startAu
|
||||
if(!session->mHash.empty())
|
||||
{
|
||||
stream
|
||||
<< "<llfloat>" << LLURI::escape(session->mHash, allowed_chars) << "</Password>"
|
||||
<< "<Password>" << LLURI::escape(session->mHash, allowed_chars) << "</Password>"
|
||||
<< "<PasswordHashAlgorithm>SHA1UserName</PasswordHashAlgorithm>";
|
||||
}
|
||||
|
||||
@@ -3620,7 +3614,7 @@ void LLVoiceClient::sendFriendsListUpdates()
|
||||
<< "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Account.BuddySet.1\">"
|
||||
<< "<AccountHandle>" << mAccountHandle << "</AccountHandle>"
|
||||
<< "<BuddyURI>" << buddy->mURI << "</BuddyURI>"
|
||||
<< "<DisplayName>" << buddy->mDisplayName << "</DisplayName>"
|
||||
<< "<DisplayName>" << buddy->mDisplayName << "</DisplayName>"
|
||||
<< "<BuddyData></BuddyData>" // Without this, SLVoice doesn't seem to parse the command.
|
||||
<< "<GroupID>0</GroupID>"
|
||||
<< "</Request>\n\n\n";
|
||||
@@ -4846,20 +4840,6 @@ LLVoiceClient::participantState::participantState(const std::string &uri) :
|
||||
{
|
||||
}
|
||||
|
||||
// <edit>
|
||||
//static
|
||||
void LLVoiceClient::sessionState::onAvatarNameLookup(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* user_data)
|
||||
{
|
||||
LLChat chat;
|
||||
std::string name(first + " " + last);
|
||||
chat.mFromName = name;
|
||||
chat.mURL = llformat("secondlife:///app/agent/%s/about",id.asString().c_str());
|
||||
chat.mText = name+" is possibly eavesdropping in voice.";
|
||||
chat.mSourceType = CHAT_SOURCE_SYSTEM;
|
||||
LLFloaterChat::addChat(chat);
|
||||
}
|
||||
// </edit>
|
||||
|
||||
LLVoiceClient::participantState *LLVoiceClient::sessionState::addParticipant(const std::string &uri)
|
||||
{
|
||||
participantState *result = NULL;
|
||||
@@ -4904,30 +4884,6 @@ LLVoiceClient::participantState *LLVoiceClient::sessionState::addParticipant(con
|
||||
|
||||
if(result->updateMuteState())
|
||||
mVolumeDirty = true;
|
||||
// <edit>
|
||||
if(nameFromsipURI(uri) != gVoiceClient->mAccountName)
|
||||
{
|
||||
bool found = true;
|
||||
for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
|
||||
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
|
||||
{
|
||||
LLViewerRegion* regionp = *iter;
|
||||
// let us check to see if they are actually in the sim
|
||||
if(regionp)
|
||||
{
|
||||
if(regionp->mMapAvatarIDs.find(id) != -1)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!found)
|
||||
// They are not in my list of people in my sims, they must be a spy.
|
||||
gCacheName->getName(id, onAvatarNameLookup, NULL);
|
||||
}
|
||||
// </edit>
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -5202,19 +5158,16 @@ void LLVoiceClient::switchChannel(
|
||||
|
||||
void LLVoiceClient::joinSession(sessionState *session)
|
||||
{
|
||||
if(!mPosLocked)
|
||||
mNextAudioSession = session;
|
||||
|
||||
if(getState() <= stateNoChannel)
|
||||
{
|
||||
mNextAudioSession = session;
|
||||
|
||||
if(getState() <= stateNoChannel)
|
||||
{
|
||||
// We're already set up to join a channel, just needed to fill in the session handle
|
||||
}
|
||||
else
|
||||
{
|
||||
// State machine will come around and rejoin if uri/handle is not empty.
|
||||
sessionTerminate();
|
||||
}
|
||||
// We're already set up to join a channel, just needed to fill in the session handle
|
||||
}
|
||||
else
|
||||
{
|
||||
// State machine will come around and rejoin if uri/handle is not empty.
|
||||
sessionTerminate();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5229,23 +5182,20 @@ void LLVoiceClient::setSpatialChannel(
|
||||
const std::string &uri,
|
||||
const std::string &credentials)
|
||||
{
|
||||
if(!mPosLocked)
|
||||
{
|
||||
mSpatialSessionURI = uri;
|
||||
mSpatialSessionCredentials = credentials;
|
||||
mAreaVoiceDisabled = mSpatialSessionURI.empty();
|
||||
mSpatialSessionURI = uri;
|
||||
mSpatialSessionCredentials = credentials;
|
||||
mAreaVoiceDisabled = mSpatialSessionURI.empty();
|
||||
|
||||
LL_DEBUGS("Voice") << "got spatial channel uri: \"" << uri << "\"" << LL_ENDL;
|
||||
|
||||
if((mAudioSession && !(mAudioSession->mIsSpatial)) || (mNextAudioSession && !(mNextAudioSession->mIsSpatial)))
|
||||
{
|
||||
// User is in a non-spatial chat or joining a non-spatial chat. Don't switch channels.
|
||||
LL_INFOS("Voice") << "in non-spatial chat, not switching channels" << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
switchChannel(mSpatialSessionURI, true, false, false, mSpatialSessionCredentials);
|
||||
}
|
||||
LL_DEBUGS("Voice") << "got spatial channel uri: \"" << uri << "\"" << LL_ENDL;
|
||||
|
||||
if((mAudioSession && !(mAudioSession->mIsSpatial)) || (mNextAudioSession && !(mNextAudioSession->mIsSpatial)))
|
||||
{
|
||||
// User is in a non-spatial chat or joining a non-spatial chat. Don't switch channels.
|
||||
LL_INFOS("Voice") << "in non-spatial chat, not switching channels" << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
switchChannel(mSpatialSessionURI, true, false, false, mSpatialSessionCredentials);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5477,23 +5427,20 @@ void LLVoiceClient::declineInvite(std::string &sessionHandle)
|
||||
|
||||
void LLVoiceClient::leaveNonSpatialChannel()
|
||||
{
|
||||
if(!mPosLocked)
|
||||
{
|
||||
LL_DEBUGS("Voice")
|
||||
<< "called in state " << state2string(getState())
|
||||
<< LL_ENDL;
|
||||
|
||||
// Make sure we don't rejoin the current session.
|
||||
sessionState *oldNextSession = mNextAudioSession;
|
||||
mNextAudioSession = NULL;
|
||||
|
||||
// Most likely this will still be the current session at this point, but check it anyway.
|
||||
reapSession(oldNextSession);
|
||||
|
||||
verifySessionState();
|
||||
|
||||
sessionTerminate();
|
||||
}
|
||||
LL_DEBUGS("Voice")
|
||||
<< "called in state " << state2string(getState())
|
||||
<< LL_ENDL;
|
||||
|
||||
// Make sure we don't rejoin the current session.
|
||||
sessionState *oldNextSession = mNextAudioSession;
|
||||
mNextAudioSession = NULL;
|
||||
|
||||
// Most likely this will still be the current session at this point, but check it anyway.
|
||||
reapSession(oldNextSession);
|
||||
|
||||
verifySessionState();
|
||||
|
||||
sessionTerminate();
|
||||
}
|
||||
|
||||
std::string LLVoiceClient::getCurrentChannel()
|
||||
@@ -5722,7 +5669,7 @@ void LLVoiceClient::enforceTether(void)
|
||||
void LLVoiceClient::updatePosition(void)
|
||||
{
|
||||
|
||||
if(gVoiceClient && !gVoiceClient->getPosLocked())
|
||||
if(gVoiceClient)
|
||||
{
|
||||
LLVOAvatar *agent = gAgent.getAvatarObject();
|
||||
LLViewerRegion *region = gAgent.getRegion();
|
||||
@@ -5761,45 +5708,39 @@ void LLVoiceClient::updatePosition(void)
|
||||
|
||||
void LLVoiceClient::setCameraPosition(const LLVector3d &position, const LLVector3 &velocity, const LLMatrix3 &rot)
|
||||
{
|
||||
if(!mPosLocked)
|
||||
mCameraRequestedPosition = position;
|
||||
|
||||
if(mCameraVelocity != velocity)
|
||||
{
|
||||
mCameraRequestedPosition = position;
|
||||
|
||||
if(mCameraVelocity != velocity)
|
||||
{
|
||||
mCameraVelocity = velocity;
|
||||
mSpatialCoordsDirty = true;
|
||||
}
|
||||
|
||||
if(mCameraRot != rot)
|
||||
{
|
||||
mCameraRot = rot;
|
||||
mSpatialCoordsDirty = true;
|
||||
}
|
||||
mCameraVelocity = velocity;
|
||||
mSpatialCoordsDirty = true;
|
||||
}
|
||||
|
||||
if(mCameraRot != rot)
|
||||
{
|
||||
mCameraRot = rot;
|
||||
mSpatialCoordsDirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
void LLVoiceClient::setAvatarPosition(const LLVector3d &position, const LLVector3 &velocity, const LLMatrix3 &rot)
|
||||
{
|
||||
if(!mPosLocked)
|
||||
if(dist_vec(mAvatarPosition, position) > 0.1)
|
||||
{
|
||||
if(dist_vec(mAvatarPosition, position) > 0.1)
|
||||
{
|
||||
mAvatarPosition = position;
|
||||
mSpatialCoordsDirty = true;
|
||||
}
|
||||
|
||||
if(mAvatarVelocity != velocity)
|
||||
{
|
||||
mAvatarVelocity = velocity;
|
||||
mSpatialCoordsDirty = true;
|
||||
}
|
||||
|
||||
if(mAvatarRot != rot)
|
||||
{
|
||||
mAvatarRot = rot;
|
||||
mSpatialCoordsDirty = true;
|
||||
}
|
||||
mAvatarPosition = position;
|
||||
mSpatialCoordsDirty = true;
|
||||
}
|
||||
|
||||
if(mAvatarVelocity != velocity)
|
||||
{
|
||||
mAvatarVelocity = velocity;
|
||||
mSpatialCoordsDirty = true;
|
||||
}
|
||||
|
||||
if(mAvatarRot != rot)
|
||||
{
|
||||
mAvatarRot = rot;
|
||||
mSpatialCoordsDirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5820,7 +5761,7 @@ bool LLVoiceClient::channelFromRegion(LLViewerRegion *region, std::string &name)
|
||||
|
||||
void LLVoiceClient::leaveChannel(void)
|
||||
{
|
||||
if(!mPosLocked && getState() == stateRunning)
|
||||
if(getState() == stateRunning)
|
||||
{
|
||||
LL_DEBUGS("Voice") << "leaving channel for teleport/logout" << LL_ENDL;
|
||||
mChannelName.clear();
|
||||
@@ -5859,7 +5800,7 @@ void LLVoiceClient::setVoiceEnabled(bool enabled)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Turning voice off loses your current channel -- this makes sure the UI isn't out of sync when you re-enable it.
|
||||
// Turning voice off looses your current channel -- this makes sure the UI isn't out of sync when you re-enable it.
|
||||
LLVoiceChannel::getCurrentVoiceChannel()->deactivate();
|
||||
}
|
||||
}
|
||||
@@ -5867,9 +5808,7 @@ void LLVoiceClient::setVoiceEnabled(bool enabled)
|
||||
|
||||
bool LLVoiceClient::voiceEnabled()
|
||||
{
|
||||
static const LLCachedControl<bool> enable_voice_chat("EnableVoiceChat",false);
|
||||
static const LLCachedControl<bool> cmd_line_disable_voice("CmdLineDisableVoice",false);
|
||||
return enable_voice_chat && !cmd_line_disable_voice;
|
||||
return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice");
|
||||
}
|
||||
|
||||
void LLVoiceClient::setLipSyncEnabled(BOOL enabled)
|
||||
@@ -5890,16 +5829,6 @@ BOOL LLVoiceClient::lipSyncEnabled()
|
||||
}
|
||||
}
|
||||
|
||||
BOOL LLVoiceClient::getPosLocked()
|
||||
{
|
||||
return mPosLocked;
|
||||
}
|
||||
|
||||
void LLVoiceClient::setPosLocked(bool locked)
|
||||
{
|
||||
mPosLocked = locked;
|
||||
}
|
||||
|
||||
void LLVoiceClient::setUsePTT(bool usePTT)
|
||||
{
|
||||
if(usePTT && !mUsePTT)
|
||||
|
||||
@@ -175,10 +175,6 @@ static void updatePosition(void);
|
||||
void setAvatarPosition(const LLVector3d &position, const LLVector3 &velocity, const LLMatrix3 &rot);
|
||||
bool channelFromRegion(LLViewerRegion *region, std::string &name);
|
||||
void leaveChannel(void); // call this on logout or teleport begin
|
||||
|
||||
// This should be called when the code detects we have changed parcels.
|
||||
// It initiates the call to the server that gets the parcel channel.
|
||||
void parcelChanged();
|
||||
|
||||
|
||||
void setMuteMic(bool muted); // Use this to mute the local mic (for when the client is minimized, etc), ignoring user PTT state.
|
||||
@@ -196,8 +192,6 @@ static void updatePosition(void);
|
||||
void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal)
|
||||
void setLipSyncEnabled(BOOL enabled);
|
||||
BOOL lipSyncEnabled();
|
||||
void setPosLocked(bool locked);
|
||||
BOOL getPosLocked(); //whether our position is locked to keep us nearby
|
||||
|
||||
// PTT key triggering
|
||||
void keyDown(KEY key, MASK mask);
|
||||
@@ -299,10 +293,6 @@ static void updatePosition(void);
|
||||
sessionState();
|
||||
~sessionState();
|
||||
|
||||
// <edit>
|
||||
static void onAvatarNameLookup(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* user_data);
|
||||
// </edit>
|
||||
|
||||
participantState *addParticipant(const std::string &uri);
|
||||
// Note: after removeParticipant returns, the participant* that was passed to it will have been deleted.
|
||||
// Take care not to use the pointer again after that.
|
||||
@@ -656,6 +646,10 @@ static void updatePosition(void);
|
||||
bool mCaptureDeviceDirty;
|
||||
bool mRenderDeviceDirty;
|
||||
|
||||
// This should be called when the code detects we have changed parcels.
|
||||
// It initiates the call to the server that gets the parcel channel.
|
||||
void parcelChanged();
|
||||
|
||||
void switchChannel(std::string uri = std::string(), bool spatial = true, bool no_reconnect = false, bool is_p2p = false, std::string hash = "");
|
||||
void joinSession(sessionState *session);
|
||||
|
||||
@@ -738,8 +732,6 @@ static std::string nameFromsipURI(const std::string &uri);
|
||||
LLTimer mUpdateTimer;
|
||||
|
||||
BOOL mLipSyncEnabled;
|
||||
|
||||
bool mPosLocked;
|
||||
|
||||
typedef std::set<LLVoiceClientParticipantObserver*> observer_set_t;
|
||||
observer_set_t mParticipantObservers;
|
||||
|
||||
@@ -76,10 +76,6 @@ BOOL LLVoiceRemoteCtrl::postBuild()
|
||||
mTalkLockBtn = getChild<LLButton>("ptt_lock");
|
||||
mTalkLockBtn->setClickedCallback(onBtnLock);
|
||||
mTalkLockBtn->setCallbackUserData(this);
|
||||
|
||||
mPosLockBtn = getChild<LLButton>("pos_lock_btn");
|
||||
mPosLockBtn->setClickedCallback(onClickPosLock);
|
||||
mPosLockBtn->setCallbackUserData(this);
|
||||
|
||||
mSpeakersBtn = getChild<LLButton>("speakers_btn");
|
||||
mSpeakersBtn->setClickedCallback(onClickSpeakers);
|
||||
@@ -88,7 +84,14 @@ BOOL LLVoiceRemoteCtrl::postBuild()
|
||||
childSetAction("show_channel", onClickPopupBtn, this);
|
||||
childSetAction("end_call_btn", onClickEndCall, this);
|
||||
|
||||
|
||||
LLTextBox* text = getChild<LLTextBox>("channel_label");
|
||||
if (text)
|
||||
{
|
||||
text->setUseEllipses(TRUE);
|
||||
}
|
||||
|
||||
childSetAction("voice_channel_bg", onClickVoiceChannel, this);
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -103,7 +106,6 @@ void LLVoiceRemoteCtrl::draw()
|
||||
}
|
||||
|
||||
mTalkBtn->setEnabled(voice_active);
|
||||
mPosLockBtn->setEnabled(voice_active);
|
||||
mTalkLockBtn->setEnabled(voice_active);
|
||||
|
||||
// propagate ptt state to button display,
|
||||
@@ -113,9 +115,7 @@ void LLVoiceRemoteCtrl::draw()
|
||||
mTalkBtn->setToggleState(!gSavedSettings.getBOOL("PTTCurrentlyEnabled") || gVoiceClient->getUserPTTState());
|
||||
}
|
||||
mSpeakersBtn->setToggleState(LLFloaterActiveSpeakers::instanceVisible(LLSD()));
|
||||
mPosLockBtn->setToggleState(gVoiceClient->getPosLocked());
|
||||
mTalkLockBtn->setToggleState(!gSavedSettings.getBOOL("PTTCurrentlyEnabled"));
|
||||
|
||||
|
||||
std::string talk_blip_image;
|
||||
if (gVoiceClient->getIsSpeaking(gAgent.getID()))
|
||||
@@ -169,7 +169,36 @@ void LLVoiceRemoteCtrl::draw()
|
||||
&& current_channel->isActive()
|
||||
&& current_channel != LLVoiceChannelProximal::getInstance());
|
||||
|
||||
childSetValue("channel_label", active_channel_name);
|
||||
childSetToolTip("voice_channel_bg", active_channel_name);
|
||||
|
||||
if (current_channel)
|
||||
{
|
||||
LLIconCtrl* voice_channel_icon = getChild<LLIconCtrl>("voice_channel_icon");
|
||||
if (voice_channel_icon && voice_floater)
|
||||
{
|
||||
voice_channel_icon->setImage(voice_floater->getString("voice_icon"));
|
||||
}
|
||||
|
||||
LLButton* voice_channel_bg = getChild<LLButton>("voice_channel_bg");
|
||||
if (voice_channel_bg)
|
||||
{
|
||||
LLColor4 bg_color;
|
||||
if (current_channel->isActive())
|
||||
{
|
||||
bg_color = lerp(LLColor4::green, LLColor4::white, 0.7f);
|
||||
}
|
||||
else if (current_channel->getState() == LLVoiceChannel::STATE_ERROR)
|
||||
{
|
||||
bg_color = lerp(LLColor4::red, LLColor4::white, 0.7f);
|
||||
}
|
||||
else // active, but not connected
|
||||
{
|
||||
bg_color = lerp(LLColor4::yellow, LLColor4::white, 0.7f);
|
||||
}
|
||||
voice_channel_bg->setImageColor(bg_color);
|
||||
}
|
||||
}
|
||||
|
||||
LLButton* expand_button = getChild<LLButton>("show_channel");
|
||||
if (expand_button)
|
||||
@@ -249,17 +278,6 @@ void LLVoiceRemoteCtrl::onClickEndCall(void* user_data)
|
||||
}
|
||||
}
|
||||
|
||||
//static
|
||||
void LLVoiceRemoteCtrl::onClickPosLock(void* user_data)
|
||||
{
|
||||
gVoiceClient->setPosLocked(!gVoiceClient->getPosLocked());
|
||||
llwarns << gVoiceClient->getPosLocked() << llendl;
|
||||
|
||||
if(!gVoiceClient->getPosLocked())
|
||||
{
|
||||
gVoiceClient->parcelChanged(); //force it to get a new SIP url based on our actual location
|
||||
}
|
||||
}
|
||||
|
||||
void LLVoiceRemoteCtrl::onClickSpeakers(void *user_data)
|
||||
{
|
||||
|
||||
@@ -54,13 +54,11 @@ public:
|
||||
static void onClickPopupBtn(void* user_data);
|
||||
static void onClickVoiceChannel(void* user_data);
|
||||
static void onClickEndCall(void* user_data);
|
||||
static void onClickPosLock(void* user_data);
|
||||
|
||||
protected:
|
||||
LLButton* mTalkBtn;
|
||||
LLButton* mTalkLockBtn;
|
||||
LLButton* mSpeakersBtn;
|
||||
LLButton* mPosLockBtn;
|
||||
};
|
||||
|
||||
#endif // LL_LLVOICEREMOTECTRL_H
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
name="MissingAlert"
|
||||
label="Unknown Alert Message"
|
||||
type="alertmodal">
|
||||
Your version of Singularity Viewer does not know how to display the alert message it just received.
|
||||
Your version of [VIEWER_NAME] does not know how to display the alert message it just received.
|
||||
|
||||
Error details: The alert called '[_NAME]' was not found in notifications.xml.
|
||||
<usetemplate
|
||||
@@ -190,7 +190,7 @@ No tutorial is currently available.
|
||||
icon="alertmodal.tga"
|
||||
name="BadInstallation"
|
||||
type="alertmodal">
|
||||
An error occurred while updating Singularity Viewer. Please download the latest version from the official download site or use the Linden Lab SecondLife Viewer from secondlife.com.
|
||||
An error occurred while updating [VIEWER_NAME]. Please download the latest version from the official download site.
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="Ok"/>
|
||||
@@ -465,7 +465,7 @@ Selecting "Show in Search" will show:
|
||||
type="alertmodal">
|
||||
You can propose to another Resident or dissolve an existing partnership through the [SECOND_LIFE] website.
|
||||
|
||||
Go to the Second Life web site for more information on partnering?
|
||||
Go to the [GRID_NAME] web site for more information on partnering?
|
||||
<usetemplate
|
||||
name="okcancelbuttons"
|
||||
notext="Cancel"
|
||||
@@ -548,7 +548,7 @@ Your selling price will be [CURRENCY][SALE_PRICE] and will be authorized for sal
|
||||
icon="alertmodal.tga"
|
||||
name="ConfirmLandSaleToAnyoneChange"
|
||||
type="alertmodal">
|
||||
ATTENTION: Clicking 'sell to anyone' makes your land available to the entire Second Life community, even those not in this region.
|
||||
ATTENTION: Clicking 'sell to anyone' makes your land available to the entire [GRID_NAME] community, even those not in this region.
|
||||
|
||||
The selected [LAND_SIZE] m² land is being set for sale.
|
||||
Your selling price will be [CURRENCY][SALE_PRICE] and will be authorized for sale to [NAME].
|
||||
@@ -832,15 +832,24 @@ You can not wear that item because it has not yet loaded. Please try again in a
|
||||
name="MustHaveAccountToLogIn"
|
||||
type="alertmodal">
|
||||
Oops! Something was left blank.
|
||||
You need to enter both the First and Last name of your avatar.
|
||||
You need to enter the First and Last name, or Username of your avatar.
|
||||
|
||||
You need an account to enter [SECOND_LIFE]. Would you like to create one now?
|
||||
You need an account to enter [GRID_NAME]. Would you like to create one now?
|
||||
<usetemplate
|
||||
name="okcancelbuttons"
|
||||
notext="Try again"
|
||||
yestext="Create a new account"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="MustHaveAccountToLogInNoLinks"
|
||||
type="alertmodal">
|
||||
You need to enter the First and Last name, or Username of your avatar.
|
||||
|
||||
You need an account to enter [GRID_NAME].
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="AddClassified"
|
||||
@@ -1153,7 +1162,7 @@ Unable to write file [[FILE]]
|
||||
icon="alertmodal.tga"
|
||||
name="UnsupportedHardware"
|
||||
type="alertmodal">
|
||||
Warning: Your system does not meet Second Life minimum system requirements. If you continue using Singularity Viewer, you may experience poor performance. Linden Lab cannot provide technical support for unsupported system configurations.
|
||||
Warning: Your system does not meet [VIEWER_NAME] minimum system requirements. If you continue using [VIEWER_NAME], you may experience poor performance. [GRID_OWNER] cannot provide technical support for unsupported system configurations.
|
||||
|
||||
MINSPECS
|
||||
Do you wish to visit [_URL] for more information?
|
||||
@@ -1173,7 +1182,7 @@ Warning: Your system does not meet Second Life minimum system requirements. If y
|
||||
name="UnknownGPU"
|
||||
type="alertmodal">
|
||||
Your system contains a graphics card that is unknown to us at this time.
|
||||
This is often the case with new hardware we haven't had a chance to test. Singularity Viewer will most likely run properly, but you may need to adjust your graphics settings to something more appropriate.
|
||||
This is often the case with new hardware we haven't had a chance to test. [VIEWER_NAME] will most likely run properly, but you may need to adjust your graphics settings to something more appropriate.
|
||||
(Edit menu > Preferences > Graphics).
|
||||
<form name="form">
|
||||
<ignore name="ignore"
|
||||
@@ -1511,7 +1520,7 @@ Corrupt resource file: [FILE]
|
||||
icon="alertmodal.tga"
|
||||
name="UnknownResourceFileVersion"
|
||||
type="alertmodal">
|
||||
Unknown Linden resource file version in file: [FILE]
|
||||
Unknown resource file version in file: [FILE]
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
@@ -1786,7 +1795,7 @@ Cannot find the region this land is in.
|
||||
icon="alertmodal.tga"
|
||||
name="CannotCloseFloaterBuyLand"
|
||||
type="alertmodal">
|
||||
You cannot close the Buy Land window until Second Life estimates the price of this transaction.
|
||||
You cannot close the Buy Land window until [GRID_NAME] estimates the price of this transaction.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
@@ -2470,7 +2479,7 @@ Return to www.secondlife.com to create a new account?
|
||||
icon="alertmodal.tga"
|
||||
name="LoginPacketNeverReceived"
|
||||
type="alertmodal">
|
||||
We're having trouble connecting. There may be a problem with your internet connection or the Second Life servers.
|
||||
We're having trouble connecting. There may be a problem with your internet connection or the [GRID_NAME] servers.
|
||||
|
||||
You can either check your internet connection and try again in a few minutes, click Help to connect to our support site, or click Teleport to attempt to teleport home.
|
||||
<form name="form">
|
||||
@@ -2880,7 +2889,7 @@ Visit the [SECOND_LIFE] Wiki for info on how to use the Public Issue Tracker.
|
||||
icon="alertmodal.tga"
|
||||
name="WebLaunchSupportWiki"
|
||||
type="alertmodal">
|
||||
Go to the Official Linden Blog, for the latest news and information.
|
||||
Go to the Official [GRID_OWNER] Blog, for the latest news and information.
|
||||
<usetemplate
|
||||
ignoretext="When launching web browser to view the blog"
|
||||
name="okcancelignore"
|
||||
@@ -2953,7 +2962,7 @@ Do you REALLY want to kick all users off the grid?
|
||||
icon="alertmodal.tga"
|
||||
name="MuteLinden"
|
||||
type="alertmodal">
|
||||
Sorry, you cannot mute a Linden.
|
||||
Sorry, you cannot mute an employee of [GRID_OWNER].
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
@@ -3197,7 +3206,7 @@ Type a short announcement which will be sent to everyone currently in your estat
|
||||
label="Change Linden Estate"
|
||||
name="ChangeLindenEstate"
|
||||
type="alert">
|
||||
You are about to change a Linden owned estate (mainland, teen grid, orientation, etc.).
|
||||
You are about to change a Governance-owned estate (mainland, teen grid, orientation, etc.).
|
||||
|
||||
This is EXTREMELY DANGEROUS because it can fundamentally affect the user experience. On the mainland, it will change thousands of regions and make the spaceserver hiccup.
|
||||
|
||||
@@ -3213,7 +3222,7 @@ Proceed?
|
||||
label="Change Linden Estate Access"
|
||||
name="ChangeLindenAccess"
|
||||
type="alert">
|
||||
You are about to change the access list for a Linden owned estate (mainland, teen grid, orientation, etc.).
|
||||
You are about to change the access list for a Governance-owned estate (mainland, teen grid, orientation, etc.).
|
||||
|
||||
This is DANGEROUS and should only be done to invoke the hack allowing objects/[CURRENCY] to be transfered in/out of a grid.
|
||||
It will change thousands of regions and make the spaceserver hiccup.
|
||||
@@ -3946,7 +3955,7 @@ Estate managers can only be added or removed by the owner of the estate, not by
|
||||
label="Use Global Time"
|
||||
name="HelpEstateUseGlobalTime"
|
||||
type="alertmodal">
|
||||
This checkbox makes the sun in your estate follow the same position as on the Linden-owned 'mainland' estates.
|
||||
This checkbox makes the sun in your estate follow the same position as on the Governance-owned 'mainland' estates.
|
||||
|
||||
Default: on
|
||||
</notification>
|
||||
@@ -4001,7 +4010,7 @@ Access to this estate will be limited to groups listed here and any Residents ab
|
||||
name="HelpEstateAbuseEmailAddress"
|
||||
type="alertmodal">
|
||||
Setting this to a valid email address will cause abuse reports on this estate to be sent to that address.
|
||||
Setting it blank will cause abuse reports to be sent only to Linden Lab.
|
||||
Setting it blank will cause abuse reports to be sent only to [GRID_NAME].
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
@@ -4027,7 +4036,7 @@ Default: off
|
||||
label="Voice Version Mismatch"
|
||||
name="VoiceVersionMismatch"
|
||||
type="alertmodal">
|
||||
This version of Singularity Viewer is not compatible with the Voice Chat feature in this region. Please try the most recent official Linden Lab SecondLife Viewer before reporting to Singularity developers.
|
||||
This version of [VIEWER_NAME] is not compatible with the Voice Chat feature in this region. Please upgrate to the latest version.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
@@ -4259,7 +4268,7 @@ There are no items in this object that you are allowed to copy.
|
||||
icon="alertmodal.tga"
|
||||
name="WebLaunchAccountHistory"
|
||||
type="alertmodal">
|
||||
Go to the Second Life web site to see your account history?
|
||||
Go to the [GRID_NAME] web site to see your account history?
|
||||
<usetemplate
|
||||
ignoretext="When loading account history web page"
|
||||
name="okcancelignore"
|
||||
@@ -4271,9 +4280,9 @@ Go to the Second Life web site to see your account history?
|
||||
icon="alertmodal.tga"
|
||||
name="ClickOpenF1Help"
|
||||
type="alertmodal">
|
||||
Visit the Second Life Support Web site?
|
||||
Visit the [GRID_NAME] Support Web site?
|
||||
<usetemplate
|
||||
ignoretext="When visiting the Second Life Support Website."
|
||||
ignoretext="When visiting the [GRID_NAME] Support Website."
|
||||
name="okcancelignore"
|
||||
notext="Cancel"
|
||||
yestext="Go"/>
|
||||
@@ -4292,7 +4301,7 @@ This grid has no link for support.
|
||||
type="alertmodal">
|
||||
Are you sure you want to quit?
|
||||
<usetemplate
|
||||
ignoretext="When Quitting Singularity Viewer."
|
||||
ignoretext="When Quitting [VIEWER_NAME]."
|
||||
name="okcancelignore"
|
||||
notext="Continue"
|
||||
yestext="Quit"/>
|
||||
@@ -4316,14 +4325,14 @@ http://secondlife.com/support/incidentreport.php
|
||||
icon="alertmodal.tga"
|
||||
name="HelpReportAbuseEmailEO"
|
||||
type="alertmodal">
|
||||
IMPORTANT: This report will go to the owner of the region you are currently in and not to Linden Lab.
|
||||
IMPORTANT: This report will go to the owner of the region you are currently in and not to [GRID_OWNER].
|
||||
|
||||
As a service to residents and visitors, the owner of the region you are in has elected to receive and resolve all reports originating in this region. Linden Lab will not investigate reports you file from this location.
|
||||
As a service to residents and visitors, the owner of the region you are in has elected to receive and resolve all reports originating in this region. [GRID_OWNER] will not investigate reports you file from this location.
|
||||
|
||||
The region owner will resolve reports based on the local rules of this region as outlined in the estate Covenant.
|
||||
(View covenants by going to the World menu and selecting About Land.)
|
||||
|
||||
The resolution of this report applies only to this Region; Residents access to other areas of Second Life will not be affected by the outcome of this report. Only Linden Lab can restrict access to the entirety of Second Life.
|
||||
The resolution of this report applies only to this Region; Residents access to other areas of [GRID_NAME] will not be affected by the outcome of this report. Only [GRID_OWNER] can restrict access to the entirety of [GRID_NAME].
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
@@ -4416,15 +4425,15 @@ Dear Resident,
|
||||
|
||||
You appear to be reporting intellectual property infringement. Please make sure you are reporting it correctly:
|
||||
|
||||
(1) The Abuse Process. You may submit an abuse report if you believe a Resident is exploiting the Second Life permissions system, for example, by using CopyBot or similar copying tools, to infringe intellectual property rights. The Abuse Team investigates and issues appropriate disciplinary action for behavior that violates the Second Life Community Standards or Terms of Service. However, the Abuse Team does not handle and will not respond to requests to remove content from the Second Life world.
|
||||
(1) The Abuse Process. You may submit an abuse report if you believe a Resident is exploiting the [GRID_NAME] permissions system, for example, by using CopyBot or similar copying tools, to infringe intellectual property rights. The Abuse Team investigates and issues appropriate disciplinary action for behavior that violates the [GRID_NAME] Community Standards or Terms of Service. However, the Abuse Team does not handle and will not respond to requests to remove content from the [GRID_NAME] world.
|
||||
|
||||
(2) The DMCA or Content Removal Process. To request removal of content from Second Life, you MUST submit a valid notification of infringement as provided in our DMCA Policy at http://secondlife.com/corporate/dmca.php.
|
||||
(2) The DMCA or Content Removal Process. To request removal of content from [GRID_NAME], you MUST submit a valid notification of infringement as provided in our DMCA Policy.
|
||||
|
||||
If you still wish to continue with the abuse process, please close this window and finish submitting your report. You may need to select the specific category 'CopyBot or Permissions Exploit'.
|
||||
|
||||
Thank you,
|
||||
|
||||
Linden Lab
|
||||
[GRID_OWNER]
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
@@ -4668,7 +4677,7 @@ Click "Advanced Water" to bring up an editor with more advanced settin
|
||||
icon="alertmodal.tga"
|
||||
name="HelpDayCycle"
|
||||
type="alertmodal">
|
||||
The Day Cycle Editor gives you control over the sky during Second Life's day/night cycle. This is the cycle that is used by the Basic Environment Editor's Time of Day slider.
|
||||
The Day Cycle Editor gives you control over the sky during [GRID_NAME]'s day/night cycle. This is the cycle that is used by the Basic Environment Editor's Time of Day slider.
|
||||
|
||||
The Day Cycle Editor works by setting keyframes. These are nodes (represented by the gray blips on the time graph) that have Sky Presets associated with them. As the Time of Day progresses, the WindLight sky "animates" as it interpolates between these keyframes.
|
||||
|
||||
@@ -4835,7 +4844,7 @@ Controls the speed of the clouds as they move in the Y direction.
|
||||
icon="alertmodal.tga"
|
||||
name="HelpClassicClouds"
|
||||
type="alertmodal">
|
||||
Check this box to enable rendering of Second Life's older classic clouds in addition to WindLight's clouds.
|
||||
Check this box to enable rendering of older classic clouds in addition to WindLight's clouds.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
@@ -5088,7 +5097,7 @@ Would you like to automatically wear the clothing item you create?
|
||||
name="NotAgeVerified"
|
||||
type="alertmodal">
|
||||
You need to be age-verified in order to access this parcel.
|
||||
Would you like to visit the Second Life website to verify your age?
|
||||
Would you like to visit the [GRID_NAME] website to verify your age?
|
||||
|
||||
[_URL]
|
||||
<url option="0" name="url">
|
||||
@@ -5107,7 +5116,7 @@ Would you like to visit the Second Life website to verify your age?
|
||||
name="Cannot enter parcel: no payment info on file"
|
||||
type="alertmodal">
|
||||
This parcel requires that you have payment information on file before you can access it.
|
||||
Would you like to visit the Second Life website to set this up?
|
||||
Would you like to visit the [GRID_NAME] website to set this up?
|
||||
|
||||
[_URL]
|
||||
<url option="0" name="url">
|
||||
@@ -6185,7 +6194,7 @@ Failed to find [TYPE] named [DESC] in database.
|
||||
icon="notify.tga"
|
||||
name="InvalidWearable"
|
||||
type="notify">
|
||||
The item you are trying to wear uses a feature that your viewer can't read. Please consider using the latest official SecondLife viewer by Linden Lab.
|
||||
The item you are trying to wear uses a feature that your viewer can't read. Please consider using the latest [VIEWER_NAME].
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
@@ -6404,7 +6413,7 @@ Flexible objects may not be physical and must be phantom until the flexible chec
|
||||
name="FirstDebugMenus"
|
||||
type="notify">
|
||||
You have enabled the Advanced menu.
|
||||
This menu contains features useful for developers debugging Singularity Viewer.
|
||||
This menu contains features useful for developers debugging [VIEWER_NAME].
|
||||
To toggle this menu on Windows press Ctrl-Alt-D. On Mac press Cmd-Opt-Shift-D.
|
||||
</notification>
|
||||
|
||||
@@ -6727,9 +6736,7 @@ The URL you clicked cannot be opened from this web browser.
|
||||
</global>
|
||||
|
||||
<global name="UnsupportedGLRequirements">
|
||||
You do not appear to have the proper hardware requirements for Singularity Viewer. The viewer requires an OpenGL graphics card that has multitexture support. If this is the case, you may want to make sure that you have the latest drivers for your graphics card, and service packs and patches for your operating system.
|
||||
|
||||
If you continue to have problems, please consider using Linden Lab official SecondLife Viewer.
|
||||
You do not appear to have the proper hardware requirements for [VIEWER_NAME]. The viewer requires an OpenGL graphics card that has multitexture support. If this is the case, you may want to make sure that you have the latest drivers for your graphics card, and service packs and patches for your operating system.
|
||||
</global>
|
||||
|
||||
<global name="UnsupportedCPUAmount">
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
min_val="30" mouse_opaque="true" name="afk_timeout_spinner" width="202" />
|
||||
<check_box bottom="-265" enabled="true"
|
||||
follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
|
||||
label="Notify when in-world money ([CURRENCY]) spent or received" left="151"
|
||||
label="Notify when in-world currency is spent or received" left="151"
|
||||
mouse_opaque="true" name="notify_money_change_checkbox" radio_style="false"
|
||||
width="256" />
|
||||
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
name="speakers_btn"
|
||||
tool_tip="Show list of residents using voice chat around you" width="38" />
|
||||
<button bottom="-22" height="22" label="Talk" left_delta="40" name="push_to_talk"
|
||||
tab_stop="false" tool_tip="Hold the button to talk" width="64" />
|
||||
tab_stop="false" tool_tip="Hold the button to talk" width="60" />
|
||||
<button bottom="-19" height="16" image_selected="ptt_lock_on.tga"
|
||||
image_unselected="ptt_lock_off.tga" label="" left_delta="4" name="ptt_lock"
|
||||
scale_image="false" toggle="true"
|
||||
@@ -14,6 +14,6 @@
|
||||
<icon bottom="-19" height="16" image_name="icn_voice_ptt-off.tga" left_delta="42"
|
||||
name="voice_volume" width="16" />
|
||||
<button bottom="-22" control_name="ShowVoiceChannelPopup" height="22" label=""
|
||||
left_delta="20" name="show_channel" scale_image="true" toggle="true"
|
||||
left_delta="16" name="show_channel" scale_image="true" toggle="true"
|
||||
tool_tip="Click to show current voice channel" width="22" />
|
||||
</panel>
|
||||
|
||||
@@ -5,7 +5,16 @@
|
||||
<panel bottom="1" filename="panel_bg_tab.xml" name="panel_bg_tab" height="47" left="0" width="130" />
|
||||
<button bottom="-20" height="20" image_overlay="icn_voice-call-end.tga" label=""
|
||||
left="4" name="end_call_btn" tool_tip="Click to hang up" width="20" />
|
||||
<button bottom="-20" height="20" image_selected="pos_lock_on.tga" image_unselected="pos_lock_off.tga" label=""
|
||||
left_delta="28" name="pos_lock_btn" tool_tip="Click to lock position" width="20" toggle="true" scale_image="false" />
|
||||
<button bottom="-21" height="22" image_disabled="icn_rounded-text-field.tga"
|
||||
image_disabled_selected="icn_rounded-text-field.tga"
|
||||
image_hover_selected="icn_rounded-text-field.tga"
|
||||
image_hover_unselected="icn_rounded-text-field.tga"
|
||||
image_selected="icn_rounded-text-field.tga"
|
||||
image_unselected="icn_rounded-text-field.tga" label="" left_delta="23"
|
||||
name="voice_channel_bg" scale_image="true" width="102" />
|
||||
<icon bottom="-18" height="16" image_name="icn_voice-localchat.tga" label=""
|
||||
left_delta="4" mouse_opaque="false" name="voice_channel_icon" width="16" />
|
||||
<text bottom="-19" font="SansSerifSmall" height="16" label="" left_delta="18"
|
||||
mouse_opaque="false" name="channel_label" text_color="0 0 0" width="65" />
|
||||
<panel bottom="13" filename="panel_voice_controls.xml" left="1" />
|
||||
</panel>
|
||||
|
||||
Reference in New Issue
Block a user