Merge branch 'master' of git://github.com/Lirusaito/SingularityViewer

This commit is contained in:
Siana Gearz
2013-01-02 23:00:46 +01:00
980 changed files with 2777 additions and 494 deletions

View File

@@ -378,6 +378,14 @@
<boolean>true</boolean>
</map>
<key>WindLightRefresh</key>
<map>
<key>flavor</key>
<string>llsd</string>
<key>trusted-sender</key>
<boolean>true</boolean>
</map>
<key>ParcelVoiceInfo</key>
<map>
<key>flavor</key>
@@ -386,7 +394,6 @@
<boolean>true</boolean>
</map>
<key>ParcelNavigateMedia</key>
<map>
<key>flavor</key>

View File

@@ -17,15 +17,25 @@ find_library(FMODEX_LIBRARY
if (NOT FMODEX_LIBRARY)
set(FMODEX_SDK_DIR CACHE PATH "Path to the FMOD Ex SDK.")
if (FMODEX_SDK_DIR)
find_library(FMODEX_LIBRARY
fmodex_vc fmodexL_vc fmodex fmodexL fmodex64 fmodexL64
PATHS
${FMODEX_SDK_DIR}/api/lib
${FMODEX_SDK_DIR}/api
${FMODEX_SDK_DIR}/lib
${FMODEX_SDK_DIR}
)
if(WORD_SIZE EQUAL 32)
find_library(FMODEX_LIBRARY
fmodex_vc fmodexL_vc fmodex fmodexL
PATHS
${FMODEX_SDK_DIR}/api/lib
${FMODEX_SDK_DIR}/api
${FMODEX_SDK_DIR}/lib
${FMODEX_SDK_DIR}
)
elseif(WORD_SIZE EQUAL 64)
find_library(FMODEX_LIBRARY
fmodex64 fmodexL64
PATHS
${FMODEX_SDK_DIR}/api/lib
${FMODEX_SDK_DIR}/api
${FMODEX_SDK_DIR}/lib
${FMODEX_SDK_DIR}
)
endif(WORD_SIZE EQUAL 32)
endif(FMODEX_SDK_DIR)
if(WINDOWS AND NOT FMODEX_LIBRARY)
set(FMODEX_PROG_DIR "$ENV{PROGRAMFILES}/FMOD SoundSystem/FMOD Programmers API Windows")

View File

@@ -301,6 +301,7 @@ set(viewer_SOURCE_FILES
lllogchat.cpp
llloginhandler.cpp
llmainlooprepeater.cpp
llmakeoutfitdialog.cpp
llmanip.cpp
llmaniprotate.cpp
llmanipscale.cpp
@@ -808,6 +809,7 @@ set(viewer_HEADER_FILES
lllogchat.h
llloginhandler.h
llmainlooprepeater.h
llmakeoutfitdialog.h
llmanip.h
llmaniprotate.h
llmanipscale.h

View File

@@ -275,13 +275,13 @@
<map/>
<key>osMessageAttachments</key>
<map/>
<key>osDropAttachments</key>
<key>osDropAttachment</key>
<map/>
<key>osDropAttachmentsAt</key>
<key>osDropAttachmentAt</key>
<map/>
<key>osForceDropAttachments</key>
<key>osForceDropAttachment</key>
<map/>
<key>osForceDropAttachmentsAt</key>
<key>osForceDropAttachmentAt</key>
<map/>
<key>osListenRegex</key>
<map/>

View File

@@ -760,6 +760,28 @@ Found in Advanced->Rendering->Info Displays</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>OtherChatsTornOff</key>
<map>
<key>Comment</key>
<string>When true, chats other than local chat open torn off of the Communicate window.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>OtherChatsTornOffAndMinimized</key>
<map>
<key>Comment</key>
<string>When this and OtherChatsTornOff are true, new chats open torn off and minimized.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>MarketImporterUpdateFreq</key>
<map>
<key>Comment</key>
@@ -854,6 +876,28 @@ This should be as low as possible, but too low may break functionality</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>AnnounceSnapshots</key>
<map>
<key>Comment</key>
<string>Announce if someone nearby has taken a snapshot in chat (Won't work on people who hide/quiet snapshots)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>AnnounceStreamMetadata</key>
<map>
<key>Comment</key>
<string>Announce the metadata of the track playing, in chat, during streams.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>InventorySortOrder</key>
<map>
<key>Comment</key>
@@ -5824,6 +5868,17 @@ This should be as low as possible, but too low may break functionality</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>SecondsInLog</key>
<map>
<key>Comment</key>
<string>TRUE to add seconds to timestamps for Log</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FloaterAboutRect</key>
<map>
<key>Comment</key>

View File

@@ -135,7 +135,7 @@
<key>AscentFriendColor</key>
<map>
<key>Comment</key>
<string>Color of chat messages from other residents</string>
<string>Special color to distinguish friends from other residents</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -153,7 +153,7 @@
<key>AscentLindenColor</key>
<map>
<key>Comment</key>
<string>Color of chat messages from other residents</string>
<string>Special color to distinguish Lindens(/grid operators) from other residents</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -171,7 +171,7 @@
<key>AscentMutedColor</key>
<map>
<key>Comment</key>
<string>Color of chat messages from other residents</string>
<string>Special color to distinguish those who have been muted from other residents</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -189,7 +189,7 @@
<key>AscentEstateOwnerColor</key>
<map>
<key>Comment</key>
<string>Color of chat messages from other residents</string>
<string>Special color to distinguish estate owners from other residents</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -204,7 +204,59 @@
<key>IsCOA</key>
<integer>1</integer>
</map>
<key>AscentReportClientUUID</key>
<key>ColorFriendChat</key>
<map>
<key>Comment</key>
<string>Color chat from friends using AscentFriendColor</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
<key>IsCOA</key>
<integer>1</integer>
</map>
<key>ColorLindenChat</key>
<map>
<key>Comment</key>
<string>Color chat from Lindens(/grid operators) using AscentLindenColor</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
<key>IsCOA</key>
<integer>1</integer>
</map>
<key>ColorMutedChat</key>
<map>
<key>Comment</key>
<string>Color chat from muted residents using AscentMutedColor</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
<key>IsCOA</key>
<integer>1</integer>
</map>
<key>ColorEstateOwnerChat</key>
<map>
<key>Comment</key>
<string>Color chat from estate owners using AscentEstateOwnerColor</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
<key>IsCOA</key>
<integer>1</integer>
</map>
<key>AscentReportClientUUID</key>
<map>
<key>Comment</key>
<string>Broadcasted Client Key</string>

View File

@@ -335,6 +335,8 @@ void LLPrefsAscentChat::refreshValues()
mEnableOOCAutoClose = gSavedSettings.getBOOL("AscentAutoCloseOOC");
mLinksForChattingObjects = gSavedSettings.getU32("LinksForChattingObjects");
mSecondsInChatAndIMs = gSavedSettings.getBOOL("SecondsInChatAndIMs");
mSecondsInLog = gSavedSettings.getBOOL("SecondsInLog");
mOtherChatsTornOff = gSavedSettings.getBOOL("OtherChatsTornOff");
std::string format = gSavedSettings.getString("ShortTimeFormat");
if (format.find("%p") == -1)
@@ -540,6 +542,8 @@ void LLPrefsAscentChat::cancel()
gSavedSettings.setBOOL("AscentAutoCloseOOC", mEnableOOCAutoClose);
gSavedSettings.setU32("LinksForChattingObjects", mLinksForChattingObjects);
gSavedSettings.setBOOL("SecondsInChatAndIMs", mSecondsInChatAndIMs);
gSavedSettings.setBOOL("SecondsInLog", mSecondsInLog);
gSavedSettings.setBOOL("OtherChatsTornOff", mOtherChatsTornOff);
std::string short_date, long_date, short_time, long_time, timestamp;

View File

@@ -76,6 +76,8 @@ protected:
U32 tempTimeFormat;
U32 tempDateFormat;
BOOL mSecondsInChatAndIMs;
BOOL mSecondsInLog;
BOOL mOtherChatsTornOff;
BOOL mIMResponseAnyone;
BOOL mIMResponseFriends;

View File

@@ -36,6 +36,8 @@
#include "ascentprefsvan.h"
//project includes
#include "llaudioengine.h" //For gAudiop
#include "llstreamingaudio.h" //For LLStreamingAudioInterface
#include "llcolorswatch.h"
#include "llvoavatarself.h"
#include "llagent.h"
@@ -54,6 +56,8 @@ LLPrefsAscentVan::LLPrefsAscentVan()
{
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_ascent_vanity.xml");
childSetVisible("announce_streaming_metadata", gAudiop && gAudiop->getStreamingAudioImpl() && gAudiop->getStreamingAudioImpl()->supportsMetaData());
childSetCommitCallback("tag_spoofing_combobox", onCommitClientTag, this);
childSetCommitCallback("show_my_tag_check", onCommitCheckBox, this);
@@ -152,12 +156,16 @@ void LLPrefsAscentVan::onCommitCheckBox(LLUICtrl* ctrl, void* user_data)
if (ctrl->getName() == "use_status_check")
{
BOOL showCustomColors = gSavedSettings.getBOOL("AscentUseStatusColors");
self->childSetEnabled("friends_color_textbox", showCustomColors);
self->childSetEnabled("friend_color_swatch", showCustomColors);
self->childSetEnabled("estate_owner_color_swatch", showCustomColors);
self->childSetEnabled("linden_color_swatch", showCustomColors);
self->childSetEnabled("muted_color_swatch", showCustomColors);
bool showCustomColors = gSavedSettings.getBOOL("AscentUseStatusColors");
self->childSetEnabled("friends_color_textbox", showCustomColors);
bool frColors = gSavedSettings.getBOOL("ColorFriendChat");
self->childSetEnabled("friend_color_swatch", showCustomColors || frColors);
bool eoColors = gSavedSettings.getBOOL("ColorEstateOwnerChat");
self->childSetEnabled("estate_owner_color_swatch", showCustomColors || eoColors);
bool lindColors = gSavedSettings.getBOOL("ColorLindenChat");
self->childSetEnabled("linden_color_swatch", showCustomColors || lindColors);
bool muteColors = gSavedSettings.getBOOL("ColorMutedChat");
self->childSetEnabled("muted_color_swatch", showCustomColors || muteColors);
}
else if (ctrl->getName() == "customize_own_tag_check")
{
@@ -172,7 +180,7 @@ void LLPrefsAscentVan::onCommitCheckBox(LLUICtrl* ctrl, void* user_data)
// Store current settings for cancel
void LLPrefsAscentVan::refreshValues()
{
//General --------------------------------------------------------------------------------
//Main -----------------------------------------------------------------------------------
mUseAccountSettings = gSavedSettings.getBOOL("AscentStoreSettingsPerAccount");
mShowTPScreen = !gSavedSettings.getBOOL("AscentDisableTeleportScreens");
mPlayTPSound = gSavedSettings.getBOOL("OptionPlayTpSound");
@@ -180,6 +188,8 @@ void LLPrefsAscentVan::refreshValues()
mDisableChatAnimation = gSavedSettings.getBOOL("SGDisableChatAnimation");
mAddNotReplace = gSavedSettings.getBOOL("LiruAddNotReplace");
mTurnAround = gSavedSettings.getBOOL("TurnAroundWhenWalkingBackwards");
mAnnounceSnapshots = gSavedSettings.getBOOL("AnnounceSnapshots");
mAnnounceStreamMetadata = gSavedSettings.getBOOL("AnnounceStreamMetadata");
//Tags\Colors ----------------------------------------------------------------------------
mAscentUseTag = gSavedSettings.getBOOL("AscentUseTag");
@@ -202,6 +212,10 @@ void LLPrefsAscentVan::refreshValues()
mLindenColor = gSavedSettings.getColor4("AscentLindenColor");
mMutedColor = gSavedSettings.getColor4("AscentMutedColor");
//mCustomColor = gSavedSettings.getColor4("MoyMiniMapCustomColor");
mColorFriendChat = gSavedSettings.getBOOL("ColorFriendChat");
mColorEOChat = gSavedSettings.getBOOL("ColorEstateOwnerChat");
mColorLindenChat = gSavedSettings.getBOOL("ColorLindenChat");
mColorMutedChat = gSavedSettings.getBOOL("ColorMutedChat");
//Body Dynamics --------------------------------------------------------------------------
mBreastPhysicsToggle = gSavedSettings.getBOOL("EmeraldBreastPhysicsToggle");
@@ -219,17 +233,17 @@ void LLPrefsAscentVan::refreshValues()
// Update controls based on current settings
void LLPrefsAscentVan::refresh()
{
//General --------------------------------------------------------------------------------
//Main -----------------------------------------------------------------------------------
//Tags\Colors ----------------------------------------------------------------------------
LLComboBox* combo = getChild<LLComboBox>("tag_spoofing_combobox");
combo->setCurrentByIndex(mSelectedClient);
childSetEnabled("friends_color_textbox", mUseStatusColors);
childSetEnabled("friend_color_swatch", mUseStatusColors);
childSetEnabled("estate_owner_color_swatch", mUseStatusColors);
childSetEnabled("linden_color_swatch", mUseStatusColors);
childSetEnabled("muted_color_swatch", mUseStatusColors);
childSetEnabled("friend_color_swatch", mUseStatusColors || mColorFriendChat);
childSetEnabled("estate_owner_color_swatch", mUseStatusColors || mColorEOChat);
childSetEnabled("linden_color_swatch", mUseStatusColors || mColorLindenChat);
childSetEnabled("muted_color_swatch", mUseStatusColors || mColorMutedChat);
childSetEnabled("custom_tag_label_text", mCustomTagOn);
childSetEnabled("custom_tag_label_box", mCustomTagOn);
@@ -248,7 +262,7 @@ void LLPrefsAscentVan::refresh()
// Reset settings to local copy
void LLPrefsAscentVan::cancel()
{
//General --------------------------------------------------------------------------------
//Main -----------------------------------------------------------------------------------
gSavedSettings.setBOOL("AscentStoreSettingsPerAccount", mUseAccountSettings);
gSavedSettings.setBOOL("AscentDisableTeleportScreens", !mShowTPScreen);
gSavedSettings.setBOOL("OptionPlayTpSound", mPlayTPSound);
@@ -256,6 +270,8 @@ void LLPrefsAscentVan::cancel()
gSavedSettings.setBOOL("SGDisableChatAnimation", mDisableChatAnimation);
gSavedSettings.setBOOL("LiruAddNotReplace", mAddNotReplace);
gSavedSettings.setBOOL("TurnAroundWhenWalkingBackwards", mTurnAround);
gSavedSettings.setBOOL("AnnounceSnapshots", mAnnounceSnapshots);
gSavedSettings.setBOOL("AnnounceStreamMetadata", mAnnounceStreamMetadata);
//Tags\Colors ----------------------------------------------------------------------------
gSavedSettings.setBOOL("AscentUseTag", mAscentUseTag);
@@ -278,6 +294,10 @@ void LLPrefsAscentVan::cancel()
gSavedSettings.setColor4("AscentLindenColor", mLindenColor);
gSavedSettings.setColor4("AscentMutedColor", mMutedColor);
// gSavedSettings.setColor4("MoyMiniMapCustomColor", mCustomColor);
gSavedSettings.setBOOL("ColorFriendChat", mColorFriendChat);
gSavedSettings.setBOOL("ColorEstateOwnerChat", mColorEOChat);
gSavedSettings.setBOOL("ColorLindenChat", mColorLindenChat);
gSavedSettings.setBOOL("ColorMutedChat", mColorMutedChat);
//Body Dynamics --------------------------------------------------------------------------
gSavedSettings.setBOOL("EmeraldBreastPhysicsToggle", mBreastPhysicsToggle);

View File

@@ -52,7 +52,7 @@ protected:
static void onCommitCheckBox(LLUICtrl* ctrl, void* user_data);
static void onCommitTextModified(LLUICtrl* ctrl, void* userdata);
static void onManualClientUpdate(void* data);
//General
//Main
BOOL mUseAccountSettings;
BOOL mShowTPScreen;
BOOL mPlayTPSound;
@@ -60,6 +60,8 @@ protected:
bool mDisableChatAnimation;
bool mAddNotReplace;
bool mTurnAround;
bool mAnnounceSnapshots;
bool mAnnounceStreamMetadata;
//Tags\Colors
BOOL mAscentUseTag;
std::string mReportClientUUID;
@@ -80,6 +82,10 @@ protected:
LLColor4 mEstateOwnerColor;
LLColor4 mLindenColor;
LLColor4 mMutedColor;
bool mColorFriendChat;
bool mColorEOChat;
bool mColorLindenChat;
bool mColorMutedChat;
//Body Dynamics
BOOL mBreastPhysicsToggle;
F32 mBoobMass;

View File

@@ -76,6 +76,11 @@ bool HippoGridInfo::isOpenSimulator() const
return (mPlatform == HippoGridInfo::PLATFORM_OPENSIM);
}
bool HippoGridInfo::isAurora() const
{
return (mPlatform == HippoGridInfo::PLATFORM_AURORA);
}
bool HippoGridInfo::isSecondLife() const
{
return (mPlatform == HippoGridInfo::PLATFORM_SECONDLIFE);
@@ -92,11 +97,15 @@ const std::string& HippoGridInfo::getGridName() const
return mGridName;
}
const std::string& HippoGridInfo::getGridOwner() const {
if(isSecondLife()) {
const std::string& HippoGridInfo::getGridOwner() const
{
if(isSecondLife())
{
static const std::string ll = "Linden Lab";
return ll;
} else {
}
else
{
return this->getGridName();
}
}

View File

@@ -38,6 +38,7 @@ public:
Platform getPlatform();
bool isOpenSimulator() const;
bool isAurora() const;
bool isSecondLife() const;
bool isInProductionGrid() const; // Should only be called if isSecondLife() returns true.
const std::string& getGridName() const;

View File

@@ -21,6 +21,8 @@ void HippoLimits::setLimits()
{
if (gHippoGridManager->getConnectedGrid()->getPlatform() == HippoGridInfo::PLATFORM_SECONDLIFE) {
setSecondLifeLimits();
} else if (gHippoGridManager->getConnectedGrid()->getPlatform() == HippoGridInfo::PLATFORM_AURORA) {
setAuroraLimits();
} else {
setOpenSimLimits();
}
@@ -46,6 +48,17 @@ void HippoLimits::setOpenSimLimits()
}
}
void HippoLimits::setAuroraLimits()
{
mMaxAgentGroups = gHippoGridManager->getConnectedGrid()->getMaxAgentGroups();
if (mMaxAgentGroups < 0) mMaxAgentGroups = 50;
mMaxPrimScale = 256.0f;
mMinPrimScale = 0.001f;
mMaxHeight = 8192.0f;
mMinHoleSize = 0.001f;
mMaxHollow = 99.0f;
}
void HippoLimits::setSecondLifeLimits()
{
llinfos << "Using Second Life limits." << llendl;

View File

@@ -26,6 +26,7 @@ private:
float mMinPrimScale;
void setOpenSimLimits();
void setAuroraLimits();
void setSecondLifeLimits();
};

View File

@@ -47,6 +47,8 @@
#include "rlvhandler.h"
// [/RLVa:KB]
#include "hippogridmanager.h"
std::string LLEnvPrefs::getWaterPresetName() const
{
if (mWaterPresetName.empty())
@@ -509,7 +511,8 @@ void LLEnvManagerNew::onRegionSettingsResponse(const LLSD& content)
mRegionSettingsChangeSignal();
// reset
mInterpNextChangeMessage = false;
if (!gHippoGridManager->getConnectedGrid()->isAurora()) // On Aurora, the region says when to refresh
mInterpNextChangeMessage = false;
}
void LLEnvManagerNew::onRegionSettingsApplyResponse(bool ok)
@@ -698,3 +701,36 @@ void LLEnvManagerNew::onRegionChange(bool interpolate)
// Let interested parties know agent region has been changed.
mRegionChangeSignal();
}
// Aurora-sim windlight refresh
class WindLightRefresh : public LLHTTPNode
{
/*virtual*/ void post(LLHTTPNode::ResponsePtr response, const LLSD& context, const LLSD& input) const
{
if (!input || !context || !input.isMap() || !input.has("body"))
{
llinfos << "malformed WindLightRefresh!" << llendl;
return;
}
//std::string dump = input["body"].asString();
//llwarns << dump << llendl;
LLSD body = input["body"];
LLEnvManagerNew *env = &LLEnvManagerNew::instance();
LLViewerRegion* regionp = gAgent.getRegion();
LLUUID region_uuid = regionp ? regionp->getRegionID() : LLUUID::null;
env->mNewRegionPrefs.clear();
env->mCurRegionUUID = region_uuid;
env->mInterpNextChangeMessage = !body.has("Interpolate") || body["Interpolate"].asInteger() == 1;
llinfos << "Windlight Refresh, interpolate:" << env->mInterpNextChangeMessage << llendl;
env->requestRegionSettings();
env->mRegionChangeSignal();
}
};
LLHTTPRegistration<WindLightRefresh> gHTTPRegistrationWindLightRefresh("/message/WindLightRefresh");

View File

@@ -35,11 +35,11 @@
#include "llmemory.h"
#include "llsd.h"
#include <boost/signals2.hpp>
class LLWLParamManager;
class LLWaterParamManager;
class LLWLAnimator;
class WindLightRefresh;
// generic key
struct LLEnvKey
@@ -257,6 +257,7 @@ public:
bool useRegionWater();
private:
friend class WindLightRefresh;
bool useDefaultSky();
bool useDefaultWater();

View File

@@ -161,7 +161,10 @@ LLAvatarListEntry::LLAvatarListEntry(const LLUUID& id, const std::string &name,
mIsInList(false), mAge(-1), mAgeAlert(false), mTime(time(NULL))
{
if (mID.notNull())
{
LLAvatarPropertiesProcessor::getInstance()->addObserver(mID, this);
LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(mID);
}
}
LLAvatarListEntry::~LLAvatarListEntry()
@@ -175,6 +178,7 @@ void LLAvatarListEntry::processProperties(void* data, EAvatarProcessorType type)
{
if(type == APT_PROPERTIES)
{
LLAvatarPropertiesProcessor::getInstance()->removeObserver(mID, this);
const LLAvatarData* pAvatarData = static_cast<const LLAvatarData*>(data);
if (pAvatarData && (pAvatarData->avatar_id != LLUUID::null))
{
@@ -608,10 +612,9 @@ void LLFloaterAvatarList::updateAvatarList()
else
{
// Avatar not there yet, add it
LLAvatarListEntry entry(avid, name, position);
if(announce && avatarp->getRegion() == gAgent.getRegion())
announce_keys.push(avid);
mAvatars.push_back(entry);
mAvatars.push_back(LLAvatarListEntryPtr(new LLAvatarListEntry(avid, name, position)));
}
}
else
@@ -640,10 +643,9 @@ void LLFloaterAvatarList::updateAvatarList()
}
else
{
LLAvatarListEntry entry(avid, name, position);
if(announce && gAgent.getRegion()->pointInRegionGlobal(position))
announce_keys.push(avid);
mAvatars.push_back(entry);
mAvatars.push_back(LLAvatarListEntryPtr(new LLAvatarListEntry(avid, name, position)));
}
}
}
@@ -707,10 +709,19 @@ void LLFloaterAvatarList::expireAvatarList()
// llinfos << "radar: expiring" << llendl;
for(av_list_t::iterator it = mAvatars.begin(); it != mAvatars.end();)
{
if(!it->isDead())
(it++)->getAlive();
LLAvatarListEntry* entry = it->get();
if(!entry->isDead())
{
entry->getAlive();
++it;
}
else
{
if(mAvatars.back() == *it)
{
mAvatars.pop_back();
return;
}
*it = mAvatars.back();
mAvatars.pop_back();
if(mAvatars.empty())
@@ -771,17 +782,17 @@ void LLFloaterAvatarList::refreshAvatarList()
std::string av_name;
// Skip if avatar hasn't been around
if (entry.isDead())
if (entry->isDead())
{
continue;
}
entry.setInList();
entry->setInList();
av_id = entry.getID();
av_name = entry.getName().c_str();
av_id = entry->getID();
av_name = entry->getName().c_str();
LLVector3d position = entry.getPosition();
LLVector3d position = entry->getPosition();
BOOL UnknownAltitude = false;
LLVector3d delta = position - mypos;
@@ -813,15 +824,12 @@ void LLFloaterAvatarList::refreshAvatarList()
continue;
}
//Request properties here, so we'll have them later on when we need them
LLAvatarPropertiesProcessor::getInstance()->addObserver(entry.mID, &entry);
LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(entry.mID);
element["id"] = av_id;
element["columns"][LIST_MARK]["column"] = "marked";
element["columns"][LIST_MARK]["type"] = "text";
if (entry.isMarked())
if (entry->isMarked())
{
element["columns"][LIST_MARK]["value"] = "X";
element["columns"][LIST_MARK]["color"] = LLColor4::blue.getValue();
@@ -835,7 +843,7 @@ void LLFloaterAvatarList::refreshAvatarList()
element["columns"][LIST_AVATAR_NAME]["column"] = "avatar_name";
element["columns"][LIST_AVATAR_NAME]["type"] = "text";
element["columns"][LIST_AVATAR_NAME]["value"] = av_name;
if (entry.isFocused())
if (entry->isFocused())
{
element["columns"][LIST_AVATAR_NAME]["font-style"] = "BOLD";
}
@@ -843,7 +851,7 @@ void LLFloaterAvatarList::refreshAvatarList()
//<edit> custom colors for certain types of avatars!
//Changed a bit so people can modify them in settings. And since they're colors, again it's possibly account-based. Starting to think I need a function just to determine that. - HgB
//element["columns"][LIST_AVATAR_NAME]["color"] = gColors.getColor( "MapAvatar" ).getValue();
LLViewerRegion* parent_estate = LLWorld::getInstance()->getRegionFromPosGlobal(entry.getPosition());
LLViewerRegion* parent_estate = LLWorld::getInstance()->getRegionFromPosGlobal(entry->getPosition());
LLUUID estate_owner = LLUUID::null;
if(parent_estate && parent_estate->isAlive())
{
@@ -895,7 +903,7 @@ void LLFloaterAvatarList::refreshAvatarList()
if (UnknownAltitude)
{
strcpy(temp, "?");
if (entry.isDrawn())
if (entry->isDrawn())
{
color = sRadarTextDrawDist;
}
@@ -916,7 +924,7 @@ void LLFloaterAvatarList::refreshAvatarList()
}
else
{
if (entry.isDrawn())
if (entry->isDrawn())
{
color = sRadarTextDrawDist;
}
@@ -975,7 +983,7 @@ void LLFloaterAvatarList::refreshAvatarList()
std::string activity_icon = "";
std::string activity_tip = "";
switch(entry.getActivity())
switch(entry->getActivity())
{
case LLAvatarListEntry::ACTIVITY_MOVING:
{
@@ -1030,17 +1038,17 @@ void LLFloaterAvatarList::refreshAvatarList()
element["columns"][LIST_AGE]["column"] = "age";
element["columns"][LIST_AGE]["type"] = "text";
color = sDefaultListText;
std::string age = boost::lexical_cast<std::string>(entry.mAge);
if (entry.mAge > -1)
std::string age = boost::lexical_cast<std::string>(entry->mAge);
if (entry->mAge > -1)
{
static LLCachedControl<U32> sAvatarAgeAlertDays(gSavedSettings, "AvatarAgeAlertDays");
if ((U32)entry.mAge < sAvatarAgeAlertDays)
if ((U32)entry->mAge < sAvatarAgeAlertDays)
{
color = sRadarTextYoung;
if (!entry.mAgeAlert) //Only announce age once per entry.
if (!entry->mAgeAlert) //Only announce age once per entry.
{
entry.mAgeAlert = true;
chat_avatar_status(entry.getName().c_str(), av_id, ALERT_TYPE_AGE, true);
entry->mAgeAlert = true;
chat_avatar_status(entry->getName().c_str(), av_id, ALERT_TYPE_AGE, true);
}
}
}
@@ -1051,7 +1059,7 @@ void LLFloaterAvatarList::refreshAvatarList()
element["columns"][LIST_AGE]["value"] = age;
element["columns"][LIST_AGE]["color"] = color.getValue();
int dur = difftime(time(NULL), entry.getTime());
int dur = difftime(time(NULL), entry->getTime());
int hours = dur / 3600;
int mins = (dur % 3600) / 60;
int secs = (dur % 3600) % 60;
@@ -1225,7 +1233,7 @@ LLAvatarListEntry * LLFloaterAvatarList::getAvatarEntry(LLUUID avatar)
av_list_t::iterator iter = std::find_if(mAvatars.begin(),mAvatars.end(),LLAvatarListEntry::uuidMatch(avatar));
if(iter != mAvatars.end())
return &(*iter);
return iter->get();
else
return NULL;
}
@@ -1297,7 +1305,7 @@ void LLFloaterAvatarList::removeFocusFromAll()
{
BOOST_FOREACH(av_list_t::value_type& entry, mAvatars)
{
entry.setFocus(FALSE);
entry->setFocus(FALSE);
}
}
@@ -1309,7 +1317,7 @@ void LLFloaterAvatarList::setFocusAvatar(const LLUUID& id)
if(!gAgentCamera.lookAtObject(id, false))
return;
removeFocusFromAll();
iter->setFocus(TRUE);
(*iter)->setFocus(TRUE);
}
}
@@ -1317,22 +1325,22 @@ template<typename T>
void decrement_focus_target(T begin, T end, BOOL marked_only)
{
T iter = begin;
while(iter != end && !iter->isFocused()) ++iter;
while(iter != end && !(*iter)->isFocused()) ++iter;
if(iter == end)
return;
T prev_iter = iter;
while(prev_iter != begin)
{
LLAvatarListEntry& entry = *(--prev_iter);
const LLAvatarListEntry& entry = *((--prev_iter)->get());
if(entry.isInList() && (entry.isMarked() || !marked_only) && gAgentCamera.lookAtObject(entry.getID(), false))
{
iter->setFocus(FALSE);
prev_iter->setFocus(TRUE);
gAgentCamera.lookAtObject(prev_iter->getID(), false);
(*iter)->setFocus(FALSE);
(*prev_iter)->setFocus(TRUE);
gAgentCamera.lookAtObject((*prev_iter)->getID(), false);
return;
}
}
gAgentCamera.lookAtObject(iter->getID(), false);
gAgentCamera.lookAtObject((*iter)->getID(), false);
}
void LLFloaterAvatarList::focusOnPrev(BOOL marked_only)

View File

@@ -22,6 +22,8 @@
#include <map>
#include <set>
#include <boost/shared_ptr.hpp>
class LLFloaterAvatarList;
/**
@@ -130,7 +132,7 @@ enum ACTIVITY_TYPE
struct uuidMatch
{
uuidMatch(const LLUUID& id) : mID(id) {}
bool operator()(const LLAvatarListEntry& l) { return l.getID() == mID; }
bool operator()(const boost::shared_ptr<LLAvatarListEntry>& l) { return l->getID() == mID; }
LLUUID mID;
};
@@ -243,7 +245,8 @@ public:
static void sound_trigger_hook(LLMessageSystem* msg,void **);
void sendKeys();
typedef std::vector<LLAvatarListEntry> av_list_t;
typedef boost::shared_ptr<LLAvatarListEntry> LLAvatarListEntryPtr;
typedef std::vector< LLAvatarListEntryPtr > av_list_t;
private:
// when a line editor loses keyboard focus, it is committed.

View File

@@ -317,8 +317,9 @@ void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file)
}
else
{
static LLCachedControl<bool> color_muted_chat("ColorMutedChat");
// desaturate muted chat
LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f);
LLColor4 muted_color = lerp(color, color_muted_chat ? gSavedSettings.getColor4("AscentMutedColor") : LLColor4::grey, 0.5f);
add_timestamped_line(history_editor_with_mute, chat, muted_color);
}
@@ -493,7 +494,7 @@ void LLFloaterChat::triggerAlerts(const std::string& text)
{
// Cannot instantiate LLTextParser before logging in.
if (gDirUtilp->getLindenUserDir(true).empty())
return;
return;
LLTextParser* parser = LLTextParser::getInstance();
// bool spoken=FALSE;
@@ -539,7 +540,11 @@ LLColor4 get_text_color(const LLChat& chat)
if(chat.mMuted)
{
text_color.setVec(0.8f, 0.8f, 0.8f, 1.f);
static LLCachedControl<bool> color_muted_chat("ColorMutedChat");
if (color_muted_chat)
text_color = gSavedSettings.getColor4("AscentMutedColor");
else
text_color.setVec(0.8f, 0.8f, 0.8f, 1.f);
}
else
{
@@ -549,7 +554,7 @@ LLColor4 get_text_color(const LLChat& chat)
text_color = gSavedSettings.getColor4("SystemChatColor");
break;
case CHAT_SOURCE_AGENT:
if (chat.mFromID.isNull())
if (chat.mFromID.isNull())
{
text_color = gSavedSettings.getColor4("SystemChatColor");
}
@@ -561,7 +566,34 @@ LLColor4 get_text_color(const LLChat& chat)
}
else
{
text_color = gSavedSettings.getColor4("AgentChatColor");
static LLCachedControl<bool> color_linden_chat("ColorLindenChat");
if (color_linden_chat && LLMuteList::getInstance()->isLinden(chat.mFromName))
{
text_color = gSavedSettings.getColor4("AscentLindenColor");
}
else if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
{
static LLCachedControl<bool> color_friend_chat("ColorFriendChat");
static LLCachedControl<bool> color_eo_chat("ColorEstateOwnerChat");
if (color_friend_chat && LLAvatarTracker::instance().isBuddy(chat.mFromID))
{
text_color = gSavedSettings.getColor4("AscentFriendColor");
}
else if (color_eo_chat)
{
LLViewerRegion* parent_estate = gAgent.getRegion();
if (parent_estate && parent_estate->isAlive() && chat.mFromID == parent_estate->getOwner())
text_color = gSavedSettings.getColor4("AscentEstateOwnerColor");
else
text_color = gSavedSettings.getColor4("AgentChatColor");
}
else
text_color = gSavedSettings.getColor4("AgentChatColor");
}
else
{
text_color = gSavedSettings.getColor4("AgentChatColor");
}
}
}
break;

View File

@@ -32,7 +32,6 @@
#include "llviewerprecompiledheaders.h"
#include "llappearancemgr.h"
#include "llimagejpeg.h"
#include "llfloatercustomize.h"
#include "llfontgl.h"
@@ -64,7 +63,6 @@
#include "llviewercamera.h"
#include "llappearance.h"
#include "imageids.h"
#include "llmodaldialog.h"
#include "llassetstorage.h"
#include "lltexturectrl.h"
#include "lltextureentry.h"
@@ -79,9 +77,9 @@
#include "lluictrlfactory.h"
#include "llnotificationsutil.h"
#include "llpaneleditwearable.h"
#include "llmakeoutfitdialog.h"
#include "statemachine/aifilepicker.h"
#include "hippogridmanager.h"
using namespace LLVOAvatarDefines;
@@ -119,220 +117,6 @@ BOOL edit_wearable_for_teens(LLWearableType::EType type)
}
}
class LLMakeOutfitDialog : public LLModalDialog
{
private:
std::string mFolderName;
void (*mCommitCallback)(LLMakeOutfitDialog*,void*);
void* mCallbackUserData;
std::vector<std::pair<std::string,S32> > mCheckBoxList;
public:
LLMakeOutfitDialog( void(*commit_cb)(LLMakeOutfitDialog*,void*), void* userdata )
: LLModalDialog(LLStringUtil::null,515, 510, TRUE ),
mCommitCallback( commit_cb ),
mCallbackUserData( userdata )
{
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_new_outfit_dialog.xml");
// Build list of check boxes
for( S32 i = 0; i < LLWearableType::WT_COUNT; i++ )
{
std::string name = std::string("checkbox_") + LLWearableType::getTypeLabel( (LLWearableType::EType)i );
mCheckBoxList.push_back(std::make_pair(name,i));
// Hide teen items
if (gAgent.isTeen() &&
!edit_wearable_for_teens((LLWearableType::EType)i))
{
// hide wearable checkboxes that don't apply to this account
std::string name = std::string("checkbox_") + LLWearableType::getTypeLabel( (LLWearableType::EType)i );
childSetVisible(name, FALSE);
}
}
// NOTE: .xml needs to be updated if attachments are added or their names are changed!
LLVOAvatar* avatar = gAgentAvatarp;
if( avatar )
{
for (LLVOAvatar::attachment_map_t::iterator iter = avatar->mAttachmentPoints.begin();
iter != avatar->mAttachmentPoints.end(); )
{
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
LLViewerJointAttachment* attachment = curiter->second;
S32 attachment_pt = curiter->first;
BOOL object_attached = ( attachment->getNumObjects() > 0 );
std::string name = std::string("checkbox_") + attachment->getName();
mCheckBoxList.push_back(std::make_pair(name,attachment_pt));
childSetEnabled(name, object_attached);
}
}
if(!gHippoGridManager->getConnectedGrid()->supportsInvLinks()) {
childSetEnabled("checkbox_use_links", FALSE);
childSetValue("checkbox_use_links", FALSE);
childSetEnabled("checkbox_use_outfits", FALSE);
childSetValue("checkbox_use_outfits", FALSE);
}
childSetAction("Save", onSave, this );
childSetAction("Cancel", onCancel, this );
childSetAction("Check All", onCheckAll, this );
childSetAction("Uncheck All", onUncheckAll, this );
LLCheckBoxCtrl* pOutfitFoldersCtrl = getChild<LLCheckBoxCtrl>("checkbox_use_outfits");
pOutfitFoldersCtrl->setCommitCallback(&LLMakeOutfitDialog::onOutfitFoldersToggle);
pOutfitFoldersCtrl->setCallbackUserData(this);
}
bool getUseOutfits()
{
return childGetValue("checkbox_use_outfits").asBoolean();
}
bool getUseLinks()
{
return childGetValue("checkbox_use_links").asBoolean();
}
/*bool getRenameClothing()
{
return childGetValue("rename").asBoolean();
}*/
virtual void draw()
{
BOOL one_or_more_items_selected = FALSE;
for( S32 i = 0; i < (S32)mCheckBoxList.size(); i++ )
{
if( childGetValue(mCheckBoxList[i].first).asBoolean() )
{
one_or_more_items_selected = TRUE;
break;
}
}
childSetEnabled("Save", one_or_more_items_selected );
LLModalDialog::draw();
}
const std::string& getFolderName() { return mFolderName; }
void setWearableToInclude( S32 wearable, S32 enabled, S32 selected )
{
LLWearableType::EType wtType = (LLWearableType::EType)wearable;
if ( ( (0 <= wtType) && (wtType < LLWearableType::WT_COUNT) ) &&
( (LLAssetType::AT_BODYPART != LLWearableType::getAssetType(wtType)) || (!getUseOutfits()) ) )
{
std::string name = std::string("checkbox_") + LLWearableType::getTypeLabel(wtType);
childSetEnabled(name, enabled);
childSetValue(name, selected);
}
}
void getIncludedItems( LLInventoryModel::item_array_t& item_list )
{
LLInventoryModel::cat_array_t *cats;
LLInventoryModel::item_array_t *items;
gInventory.getDirectDescendentsOf(LLAppearanceMgr::instance().getCOF(), cats, items);
for (LLInventoryModel::item_array_t::const_iterator iter = items->begin();
iter != items->end();
++iter)
{
LLViewerInventoryItem* item = (*iter);
if(!item)
continue;
if(item->isWearableType())
{
LLWearableType::EType type = item->getWearableType();
if (type < LLWearableType::WT_COUNT && childGetValue(mCheckBoxList[type].first).asBoolean())
{
item_list.push_back(item);
}
}
else
{
LLViewerJointAttachment* attachment = gAgentAvatarp->getWornAttachmentPoint(item->getLinkedUUID());
if(attachment && childGetValue(std::string("checkbox_")+attachment->getName()).asBoolean())
{
item_list.push_back(item);
}
}
}
}
static void onSave( void* userdata )
{
LLMakeOutfitDialog* self = (LLMakeOutfitDialog*) userdata;
self->mFolderName = self->childGetValue("name ed").asString();
LLStringUtil::trim(self->mFolderName);
if( !self->mFolderName.empty() )
{
if( self->mCommitCallback )
{
self->mCommitCallback( self, self->mCallbackUserData );
}
self->close(); // destroys this object
}
}
static void onCheckAll( void* userdata )
{
LLMakeOutfitDialog* self = (LLMakeOutfitDialog*) userdata;
for( S32 i = 0; i < (S32)(self->mCheckBoxList.size()); i++)
{
std::string name = self->mCheckBoxList[i].first;
if(self->childIsEnabled(name))self->childSetValue(name,TRUE);
}
}
static void onUncheckAll( void* userdata )
{
LLMakeOutfitDialog* self = (LLMakeOutfitDialog*) userdata;
for( S32 i = 0; i < (S32)(self->mCheckBoxList.size()); i++)
{
std::string name = self->mCheckBoxList[i].first;
if(self->childIsEnabled(name))self->childSetValue(name,FALSE);
}
}
static void onCancel( void* userdata )
{
LLMakeOutfitDialog* self = (LLMakeOutfitDialog*) userdata;
self->close(); // destroys this object
}
BOOL postBuild()
{
refresh();
return TRUE;
}
void refresh()
{
BOOL fUseOutfits = getUseOutfits();
for (S32 idxType = 0; idxType < LLWearableType::WT_COUNT; idxType++ )
{
LLWearableType::EType wtType = (LLWearableType::EType)idxType;
if (LLAssetType::AT_BODYPART != LLWearableType::getAssetType(wtType))
continue;
LLCheckBoxCtrl* pCheckCtrl = getChild<LLCheckBoxCtrl>(std::string("checkbox_") + LLWearableType::getTypeLabel(wtType));
if (!pCheckCtrl)
continue;
pCheckCtrl->setEnabled(!fUseOutfits);
if (fUseOutfits)
pCheckCtrl->setValue(TRUE);
}
childSetEnabled("checkbox_use_links", !fUseOutfits);
}
static void onOutfitFoldersToggle(LLUICtrl*, void* pParam)
{
LLMakeOutfitDialog* pSelf = (LLMakeOutfitDialog*)pParam;
if (pSelf)
pSelf->refresh();
}
};
////////////////////////////////////////////////////////////////////////////
void updateAvatarHeightDisplay()
@@ -393,13 +177,13 @@ LLFloaterCustomize::LLFloaterCustomize()
BOOL LLFloaterCustomize::postBuild()
{
childSetAction("Make Outfit", LLFloaterCustomize::onBtnMakeOutfit, (void*)this);
childSetAction("Ok", LLFloaterCustomize::onBtnOk, (void*)this);
childSetAction("Cancel", LLFloater::onClickClose, (void*)this);
getChild<LLUICtrl>("Make Outfit")->setCommitCallback(boost::bind(&LLFloaterCustomize::onBtnMakeOutfit, this));
getChild<LLUICtrl>("Ok")->setCommitCallback(boost::bind(&LLFloaterCustomize::onBtnOk, this));
getChild<LLUICtrl>("Cancel")->setCommitCallback(boost::bind(&LLFloater::onClickClose, this));
// reX
childSetAction("Import", LLFloaterCustomize::onBtnImport, (void*)this);
childSetAction("Export", LLFloaterCustomize::onBtnExport, (void*)this);
getChild<LLUICtrl>("Import")->setCommitCallback(boost::bind(&LLFloaterCustomize::onBtnImport, this));
getChild<LLUICtrl>("Export")->setCommitCallback(boost::bind(&LLFloaterCustomize::onBtnExport, this));
// Wearable panels
initWearablePanels();
@@ -459,7 +243,7 @@ void LLFloaterCustomize::setCurrentWearableType( LLWearableType::EType type )
}
// reX: new function
void LLFloaterCustomize::onBtnImport( void* userdata )
void LLFloaterCustomize::onBtnImport()
{
AIFilePicker* filepicker = AIFilePicker::create();
filepicker->open(FFLOAD_XML);
@@ -519,7 +303,7 @@ void LLFloaterCustomize::onBtnImport_continued(AIFilePicker* filepicker)
}
// reX: new function
void LLFloaterCustomize::onBtnExport( void* userdata )
void LLFloaterCustomize::onBtnExport()
{
AIFilePicker* filepicker = AIFilePicker::create();
filepicker->open("", FFSAVE_XML);
@@ -592,10 +376,8 @@ void LLFloaterCustomize::onBtnExport_continued(AIFilePicker* filepicker)
fclose(fp);
}
// static
void LLFloaterCustomize::onBtnOk( void* userdata )
void LLFloaterCustomize::onBtnOk()
{
LLFloaterCustomize* floater = (LLFloaterCustomize*) userdata;
gAgentWearables.saveAllWearables();
if ( gAgentAvatarp )
@@ -607,55 +389,13 @@ void LLFloaterCustomize::onBtnOk( void* userdata )
gAgent.sendAgentSetAppearance();
}
gFloaterView->sendChildToBack(floater);
gFloaterView->sendChildToBack(this);
handle_reset_view(); // Calls askToSaveIfDirty
}
// static
void LLFloaterCustomize::onBtnMakeOutfit( void* userdata )
void LLFloaterCustomize::onBtnMakeOutfit()
{
LLVOAvatar* avatar = gAgentAvatarp;
if(avatar)
{
LLMakeOutfitDialog* dialog = new LLMakeOutfitDialog( onMakeOutfitCommit, NULL );
// LLMakeOutfitDialog deletes itself.
for( S32 i = 0; i < LLWearableType::WT_COUNT; i++ )
{
BOOL enabled = (gAgentWearables.getWearableCount( (LLWearableType::EType) i )); // TODO: MULTI-WEARABLE
BOOL selected = (enabled && (LLWearableType::WT_SHIRT <= i) && (i < LLWearableType::WT_COUNT)); // only select clothing by default
if (gAgent.isTeen()
&& !edit_wearable_for_teens((LLWearableType::EType)i))
{
dialog->setWearableToInclude( i, FALSE, FALSE );
}
else
{
dialog->setWearableToInclude( i, enabled, selected );
}
}
dialog->startModal();
}
}
// static
void LLFloaterCustomize::onMakeOutfitCommit( LLMakeOutfitDialog* dialog, void* userdata )
{
LLVOAvatar* avatar = gAgentAvatarp;
if(avatar)
{
LLDynamicArray<S32> wearables_to_include;
LLDynamicArray<S32> attachments_to_include; // attachment points
LLInventoryModel::item_array_t item_list;
dialog->getIncludedItems(item_list);
// MULTI-WEARABLES TODO
if(dialog->getUseOutfits())
LLAppearanceMgr::instance().makeNewOutfitLinks( dialog->getFolderName(), item_list);
else
LLAppearanceMgr::instance().makeNewOutfitLegacy( dialog->getFolderName(), item_list, dialog->getUseLinks());
}
new LLMakeOutfitDialog(true); // LLMakeOutfitDialog deletes itself.
}
////////////////////////////////////////////////////////////////////////////

View File

@@ -98,12 +98,12 @@ public:
static LLWearableType::EType getCurrentWearableType() { return sCurrentWearableType; }
// Callbacks
static void onBtnOk( void* userdata );
static void onBtnMakeOutfit( void* userdata );
static void onMakeOutfitCommit( LLMakeOutfitDialog* dialog, void* userdata );
static void onBtnImport( void* userdata );
void onBtnOk();
void onBtnMakeOutfit();
void onMakeOutfitCommit();
void onBtnImport();
static void onBtnImport_continued(AIFilePicker* filepicker);
static void onBtnExport( void* userdata );
void onBtnExport();
static void onBtnExport_continued(AIFilePicker* filepicker);
static void onTabChanged( const LLSD& param );

View File

@@ -855,6 +855,8 @@ void LLPanelFriends::onClickIM(void* user_data)
const uuid_vec_t ids = panelp->mFriendsList->getSelectedIDs();
if(!ids.empty())
{
static LLCachedControl<bool> tear_off("OtherChatsTornOff");
if(!tear_off) gIMMgr->setFloaterOpen(TRUE);
if(ids.size() == 1)
{
LLUUID agent_id = ids[0];
@@ -862,13 +864,11 @@ void LLPanelFriends::onClickIM(void* user_data)
std::string fullname;
if(info && gCacheName->getFullName(agent_id, fullname))
{
gIMMgr->setFloaterOpen(TRUE);
gIMMgr->addSession(fullname, IM_NOTHING_SPECIAL, agent_id);
}
}
else
{
gIMMgr->setFloaterOpen(TRUE);
gIMMgr->addSession("Friends Conference", IM_SESSION_CONFERENCE_START, ids[0], ids);
}
make_ui_sound("UISndStartIM");

View File

@@ -386,7 +386,9 @@ void LLPanelGroups::startIM()
LLGroupData group_data;
if (gAgent.getGroupData(group_id, group_data))
{
gIMMgr->setFloaterOpen(TRUE);
static LLCachedControl<bool> tear_off("OtherChatsTornOff");
if (!tear_off)
gIMMgr->setFloaterOpen(TRUE);
gIMMgr->addSession(
group_data.mName,
IM_SESSION_GROUP_START,

View File

@@ -483,8 +483,8 @@ void LLIMMgr::addMessage(
}
//not sure why...but if it is from ourselves we set the target_id
//to be NULL
if( other_participant_id == gAgent.getID() )
//to be NULL, which seems to be breaking links on group chats, so let's not there.
if (other_participant_id == gAgent.getID() && !gAgent.isInGroup(session_id))
{
other_participant_id = LLUUID::null;
}
@@ -553,7 +553,6 @@ void LLIMMgr::addMessage(
// when answering questions.
if(gAgent.isGodlike())
{
// *TODO:translate (low priority, god ability)
std::ostringstream bonus_info;
bonus_info << LLTrans::getString("***")+ " "+ LLTrans::getString("IMParentEstate") + LLTrans::getString(":") + " "
<< parent_estate_id
@@ -574,9 +573,26 @@ void LLIMMgr::addMessage(
// now add message to floater
bool is_from_system = target_id.isNull() || (from == SYSTEM_FROM);
const LLColor4& color = ( is_from_system ?
gSavedSettings.getColor4("SystemChatColor") :
gSavedSettings.getColor("IMChatColor"));
static LLCachedControl<bool> color_linden_chat("ColorLindenChat");
bool linden = color_linden_chat && LLMuteList::getInstance()->isLinden(from);
static LLCachedControl<bool> color_friend_chat("ColorFriendChat");
bool contact = color_friend_chat && LLAvatarTracker::instance().isBuddy(other_participant_id);
static LLCachedControl<bool> color_eo_chat("ColorEstateOwnerChat");
bool estate_owner = false;
if (color_eo_chat)
{
LLViewerRegion* parent_estate = gAgent.getRegion();
estate_owner = (parent_estate && parent_estate->isAlive() && other_participant_id == parent_estate->getOwner());
}
const LLColor4& color = ( is_from_system ? gSavedSettings.getColor4("SystemChatColor")
: linden ? gSavedSettings.getColor4("AscentLindenColor")
: contact ? gSavedSettings.getColor4("AscentFriendColor")
: estate_owner ? gSavedSettings.getColor4("AscentEstateOwnerColor")
: gSavedSettings.getColor("IMChatColor"));
if ( !link_name )
{
floater->addHistoryLine(msg,color); // No name to prepend, so just add the message normally
@@ -731,7 +747,18 @@ LLUUID LLIMMgr::addSession(
{
noteMutedUsers(floater, ids);
}
LLFloaterChatterBox::getInstance(LLSD())->showFloater(floater);
static LLCachedControl<bool> tear_off("OtherChatsTornOff");
if(tear_off)
{
// removal sets up relationship for re-attach
LLFloaterChatterBox::getInstance(LLSD())->removeFloater(floater);
// reparent to floater view
gFloaterView->addChild(floater);
gFloaterView->bringToFront(floater);
}
else
LLFloaterChatterBox::getInstance(LLSD())->showFloater(floater);
}
else
{
@@ -1103,6 +1130,19 @@ LLFloaterIMPanel* LLIMMgr::createFloater(
dialog);
LLTabContainer::eInsertionPoint i_pt = user_initiated ? LLTabContainer::RIGHT_OF_CURRENT : LLTabContainer::END;
LLFloaterChatterBox::getInstance(LLSD())->addFloater(floater, FALSE, i_pt);
static LLCachedControl<bool> tear_off("OtherChatsTornOff");
if (tear_off)
{
LLFloaterChatterBox::getInstance(LLSD())->removeFloater(floater); // removal sets up relationship for re-attach
gFloaterView->addChild(floater); // reparent to floater view
LLFloater* focused_floater = gFloaterView->getFocusedFloater(); // obtain the focused floater
floater->open(); // make the new chat floater appear
if (focused_floater != NULL) // there was a focused floater
{
floater->setMinimized(true); // so minimize this one, for now
focused_floater->setFocus(true); // and work around focus being removed by focusing on the last
}
}
mFloaters.insert(floater->getHandle());
return floater;
}
@@ -1129,6 +1169,24 @@ LLFloaterIMPanel* LLIMMgr::createFloater(
dialog);
LLTabContainer::eInsertionPoint i_pt = user_initiated ? LLTabContainer::RIGHT_OF_CURRENT : LLTabContainer::END;
LLFloaterChatterBox::getInstance(LLSD())->addFloater(floater, FALSE, i_pt);
static LLCachedControl<bool> tear_off("OtherChatsTornOff");
if (tear_off)
{
LLFloaterChatterBox::getInstance(LLSD())->removeFloater(floater); // removal sets up relationship for re-attach
gFloaterView->addChild(floater); // reparent to floater view
LLFloater* focused_floater = gFloaterView->getFocusedFloater(); // obtain the focused floater
floater->open(); // make the new chat floater appear
static LLCachedControl<bool> minimize("OtherChatsTornOffAndMinimized");
if (focused_floater != NULL) // there was a focused floater
{
floater->setMinimized(true); // so minimize this one, for now
focused_floater->setFocus(true); // and work around focus being removed by focusing on the last
}
else if (minimize)
{
floater->setMinimized(true);
}
}
mFloaters.insert(floater->getHandle());
return floater;
}
@@ -1153,7 +1211,7 @@ void LLIMMgr::noteOfflineUsers(
std::string full_name;
if (info
&& !info->isOnline()
&& gCacheName->getFullName(ids.get(i), full_name))
&& LLAvatarNameCache::getPNSName(ids.get(i), full_name))
{
LLUIString offline = LLTrans::getString("offline_message");
offline.setArg("[NAME]", full_name);

View File

@@ -67,6 +67,7 @@
#include "llinventoryclipboard.h"
#include "llinventorymodelbackgroundfetch.h"
#include "lllineeditor.h"
#include "llmakeoutfitdialog.h"
#include "llmenugl.h"
#include "llpreviewanim.h"
#include "llpreviewgesture.h"
@@ -382,6 +383,10 @@ void do_create(LLInventoryModel *model, LLInventoryPanel *ptr, std::string type,
LLInventoryType::IT_GESTURE,
PERM_ALL);
}
else if ("outfit" == type)
{
new LLMakeOutfitDialog(false);
}
else
{
LLWearableType::EType wear_type = LLWearableType::typeNameToType(type);

View File

@@ -88,11 +88,18 @@ std::string LLLogChat::timestamp(bool withdate)
// it's daylight savings time there.
timep = utc_to_pacific_time(utc_time, gPacificDaylightTime);
static LLCachedControl<bool> withseconds("SecondsInLog");
std::string text;
if (withdate)
text = llformat("[%d/%02d/%02d %02d:%02d] ", (timep->tm_year-100)+2000, timep->tm_mon+1, timep->tm_mday, timep->tm_hour, timep->tm_min);
if (withseconds)
text = llformat("[%d-%02d-%02d %02d:%02d:%02d] ", (timep->tm_year-100)+2000, timep->tm_mon+1, timep->tm_mday, timep->tm_hour, timep->tm_min, timep->tm_sec);
else
text = llformat("[%d/%02d/%02d %02d:%02d] ", (timep->tm_year-100)+2000, timep->tm_mon+1, timep->tm_mday, timep->tm_hour, timep->tm_min);
else
text = llformat("[%02d:%02d] ", timep->tm_hour, timep->tm_min);
if (withseconds)
text = llformat("[%02d:%02d:%02d] ", timep->tm_hour, timep->tm_min, timep->tm_sec);
else
text = llformat("[%02d:%02d] ", timep->tm_hour, timep->tm_min);
return text;
}

View File

@@ -0,0 +1,218 @@
/**
* @file llmakeoutfitdialog.cpp
* @brief The Make Outfit Dialog, triggered by "Make Outfit" and similar UICtrls.
*
* $LicenseInfo:firstyear=2002&license=viewergpl$
*
* Copyright (c) 2002-2009, Linden Research, Inc.
*
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llmakeoutfitdialog.h"
#include "llagent.h"
#include "llappearancemgr.h"
#include "lluictrlfactory.h"
#include "llvoavatarself.h"
#include "hippogridmanager.h"
LLMakeOutfitDialog::LLMakeOutfitDialog(bool modal) : LLModalDialog(LLStringUtil::null, 515, 510, modal)
{
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_new_outfit_dialog.xml");
setCanClose(!modal);
setCanMinimize(!modal);
// Build list of check boxes
for (S32 i = 0; i < LLWearableType::WT_COUNT; i++)
{
std::string name = std::string("checkbox_") + LLWearableType::getTypeLabel((LLWearableType::EType)i);
mCheckBoxList.push_back(std::make_pair(name, i));
// Hide undergarments from teens
if (gAgent.isTeen() && ((LLWearableType::WT_UNDERSHIRT == (LLWearableType::EType)i) || (LLWearableType::WT_UNDERPANTS == (LLWearableType::EType)i)))
{
childSetVisible(name, false); // Lest they know what's beyond their reach.
}
else
{
bool enabled = gAgentWearables.getWearableCount((LLWearableType::EType)i); // TODO: MULTI-WEARABLE
bool selected = enabled && (LLWearableType::WT_SHIRT <= i); // only select clothing by default
childSetEnabled(name, enabled);
childSetValue(name, selected);
}
}
// NOTE: .xml needs to be updated if attachments are added or their names are changed!
LLVOAvatar* avatar = gAgentAvatarp;
if (avatar)
{
for (LLVOAvatar::attachment_map_t::iterator iter = avatar->mAttachmentPoints.begin(); iter != avatar->mAttachmentPoints.end();)
{
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
LLViewerJointAttachment* attachment = curiter->second;
S32 attachment_pt = curiter->first;
bool object_attached = (attachment->getNumObjects() > 0);
std::string name = std::string("checkbox_") + attachment->getName();
mCheckBoxList.push_back(std::make_pair(name, attachment_pt));
childSetEnabled(name, object_attached);
}
}
if (!gHippoGridManager->getConnectedGrid()->supportsInvLinks())
{
childSetEnabled("checkbox_use_links", false);
childSetValue("checkbox_use_links", false);
childSetEnabled("checkbox_use_outfits", false);
childSetValue("checkbox_use_outfits", false);
}
getChild<LLUICtrl>("Save")->setCommitCallback(boost::bind(&LLMakeOutfitDialog::onSave, this));
getChild<LLUICtrl>("Cancel")->setCommitCallback(boost::bind(&LLMakeOutfitDialog::close, this, _1));
getChild<LLUICtrl>("Check All")->setCommitCallback(boost::bind(&LLMakeOutfitDialog::onCheckAll, this, true));
getChild<LLUICtrl>("Uncheck All")->setCommitCallback(boost::bind(&LLMakeOutfitDialog::onCheckAll, this, false));
getChild<LLUICtrl>("checkbox_use_outfits")->setCommitCallback(boost::bind(&LLMakeOutfitDialog::refresh, this));
startModal();
}
//virtual
void LLMakeOutfitDialog::draw()
{
bool one_or_more_items_selected = false;
for (S32 i = 0; i < (S32)mCheckBoxList.size(); i++)
{
if (childGetValue(mCheckBoxList[i].first).asBoolean())
{
one_or_more_items_selected = true;
break;
}
}
childSetEnabled("Save", one_or_more_items_selected);
LLModalDialog::draw();
}
BOOL LLMakeOutfitDialog::postBuild()
{
refresh();
return true;
}
void LLMakeOutfitDialog::refresh()
{
bool fUseOutfits = getUseOutfits();
for (S32 idxType = 0; idxType < LLWearableType::WT_COUNT; idxType++)
{
LLWearableType::EType wtType = (LLWearableType::EType)idxType;
if (LLAssetType::AT_BODYPART != LLWearableType::getAssetType(wtType))
continue;
LLUICtrl* pCheckCtrl = getChild<LLUICtrl>(std::string("checkbox_") + LLWearableType::getTypeLabel(wtType));
if (!pCheckCtrl)
continue;
pCheckCtrl->setEnabled(!fUseOutfits);
if (fUseOutfits)
pCheckCtrl->setValue(true);
}
childSetEnabled("checkbox_use_links", !fUseOutfits);
}
void LLMakeOutfitDialog::setWearableToInclude(S32 wearable, bool enabled, bool selected)
{
LLWearableType::EType wtType = (LLWearableType::EType)wearable;
if (((0 <= wtType) && (wtType < LLWearableType::WT_COUNT)) &&
((LLAssetType::AT_BODYPART != LLWearableType::getAssetType(wtType)) || !getUseOutfits()))
{
std::string name = std::string("checkbox_") + LLWearableType::getTypeLabel(wtType);
childSetEnabled(name, enabled);
childSetValue(name, selected);
}
}
void LLMakeOutfitDialog::getIncludedItems(LLInventoryModel::item_array_t& item_list)
{
LLInventoryModel::cat_array_t *cats;
LLInventoryModel::item_array_t *items;
gInventory.getDirectDescendentsOf(LLAppearanceMgr::instance().getCOF(), cats, items);
for (LLInventoryModel::item_array_t::const_iterator iter = items->begin(); iter != items->end(); ++iter)
{
LLViewerInventoryItem* item = (*iter);
if (!item)
continue;
if (item->isWearableType())
{
LLWearableType::EType type = item->getWearableType();
if (type < LLWearableType::WT_COUNT && childGetValue(mCheckBoxList[type].first).asBoolean())
{
item_list.push_back(item);
}
}
else
{
LLViewerJointAttachment* attachment = gAgentAvatarp->getWornAttachmentPoint(item->getLinkedUUID());
if (attachment && childGetValue(std::string("checkbox_")+attachment->getName()).asBoolean())
{
item_list.push_back(item);
}
}
}
}
void LLMakeOutfitDialog::onSave()
{
std::string folder_name = childGetValue("name ed").asString();
LLStringUtil::trim(folder_name);
if (!folder_name.empty())
{
makeOutfit(folder_name);
close(); // destroys this object
}
}
void LLMakeOutfitDialog::onCheckAll(bool check)
{
for (S32 i = 0; i < (S32)(mCheckBoxList.size()); i++)
{
std::string name = mCheckBoxList[i].first;
if (childIsEnabled(name)) childSetValue(name, check);
}
}
void LLMakeOutfitDialog::makeOutfit(const std::string folder_name)
{
LLInventoryModel::item_array_t item_list;
getIncludedItems(item_list);
// MULTI-WEARABLES TODO
if (getUseOutfits())
LLAppearanceMgr::instance().makeNewOutfitLinks(folder_name, item_list);
else
LLAppearanceMgr::instance().makeNewOutfitLegacy(folder_name, item_list, getUseLinks());
}

View File

@@ -0,0 +1,66 @@
/**
* @file llmakeoutfitdialog.h
* @brief The Make Outfit Dialog, triggered by "Make Outfit" and similar UICtrls.
*
* $LicenseInfo:firstyear=2002&license=viewergpl$
*
* Copyright (c) 2002-2009, Linden Research, Inc.
*
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#ifndef LLMAKEOUTFITDIALOG_H
#define LLMAKEOUTFITDIALOG_H
#include "llinventorymodel.h"
#include "llmodaldialog.h"
class LLMakeOutfitDialog : public LLModalDialog
{
private:
std::vector<std::pair<std::string,S32> > mCheckBoxList;
public:
LLMakeOutfitDialog(bool modal = true);
/*virtual*/ void draw();
BOOL postBuild();
void refresh();
void setWearableToInclude(S32 wearable, bool enabled, bool selected); //TODO: Call this when Wearables are added or removed to update the Dialog in !modal mode.
void onSave();
void onCheckAll(bool check);
//Accessors
void getIncludedItems(LLInventoryModel::item_array_t& item_list);
bool getUseOutfits() { return childGetValue("checkbox_use_outfits").asBoolean(); }
bool getUseLinks() { return childGetValue("checkbox_use_links").asBoolean(); }
//bool getRenameClothing() { return childGetValue("rename").asBoolean(); }
protected:
void makeOutfit(const std::string folder_name);
};
#endif //LLMAKEOUTFITDIALOG_H

View File

@@ -35,6 +35,8 @@
#include "llmediaremotectrl.h"
#include "llaudioengine.h"
#include "llchat.h"
#include "llfloaterchat.h"
#include "lliconctrl.h"
#include "llmimetypes.h"
#include "lloverlaybar.h"
@@ -53,6 +55,7 @@
//
static LLRegisterWidget<LLMediaRemoteCtrl> r("media_remote");
static std::string sLastTooltip;
LLMediaRemoteCtrl::LLMediaRemoteCtrl()
{
@@ -263,10 +266,22 @@ void LLMediaRemoteCtrl::enableMediaButtons()
if(artist.isDefined() && title.isDefined())
info_text = artist.asString() + " -- " + title.asString();
else if(title.isDefined())
info_text = std::string("Title: ") + title.asString();
info_text = getString("Title") + ": " + title.asString();
else if(artist.isDefined())
info_text = std::string("Artist: ") + artist.asString();
music_pause_btn->setToolTip(info_text);
info_text = getString("Artist") + ": " + artist.asString();
if(music_pause_btn->getToolTip() != info_text) //Has info_text changed since last call?
{
music_pause_btn->setToolTip(info_text);
static LLCachedControl<bool> announce_stream_metadata("AnnounceStreamMetadata");
if(announce_stream_metadata && info_text != sLastTooltip && info_text != "Loading...") //Are we announcing? Don't annoounce what we've last announced. Don't announce Loading.
{
sLastTooltip = info_text;
LLChat chat;
chat.mText = getString("Now_playing") + " " + info_text;
chat.mSourceType = CHAT_SOURCE_SYSTEM;
LLFloaterChat::addChat(chat);
}
}
}
else
music_pause_btn->setToolTip(mCachedPauseTip);

View File

@@ -178,7 +178,7 @@
#include "llinventorypanel.h"
#include "llinventorybridge.h"
#include "llkeyboard.h"
#include "llpanellogin.h"
#include "llmakeoutfitdialog.h"
#include "llmenucommands.h"
#include "llmenugl.h"
#include "llmimetypes.h"
@@ -187,6 +187,7 @@
#include "llmoveview.h"
#include "llmutelist.h"
#include "llnotify.h"
#include "llpanellogin.h"
#include "llpanelobject.h"
#include "llparcel.h"
@@ -6524,6 +6525,10 @@ class LLShowFloater : public view_listener_t
gAgentCamera.changeCameraToCustomizeAvatar();
}
}
else if (floater_name == "outfit")
{
new LLMakeOutfitDialog(false);
}
// Phoenix: Wolfspirit: Enabled Show Floater out of viewer menu
else if (floater_name == "displayname")
{

View File

@@ -5606,7 +5606,9 @@ BOOL LLVOAvatar::processSingleAnimationStateChange( const LLUUID& anim_id, BOOL
if ( start ) // start animation
{
if (anim_id == ANIM_AGENT_TYPE && gSavedSettings.getBOOL("PlayTypingSound"))
static LLCachedControl<bool> play_typing_sound("PlayTypingSound");
static LLCachedControl<bool> announce_snapshots("AnnounceSnapshots");
if (anim_id == ANIM_AGENT_TYPE && play_typing_sound)
{
if (gAudiop)
{
@@ -5632,6 +5634,17 @@ BOOL LLVOAvatar::processSingleAnimationStateChange( const LLUUID& anim_id, BOOL
{
sitDown(TRUE);
}
else if(anim_id == ANIM_AGENT_SNAPSHOT && announce_snapshots)
{
std::string name;
LLAvatarNameCache::getPNSName(mID, name);
LLChat chat;
chat.mFromName = name;
chat.mText = name + " " + LLTrans::getString("took_a_snapshot") + ".";
chat.mURL = llformat("secondlife:///app/agent/%s/about",mID.asString().c_str());
chat.mSourceType = CHAT_SOURCE_SYSTEM;
LLFloaterChat::addChat(chat);
}
if (startMotion(anim_id))

View File

@@ -0,0 +1,203 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<settings version = "101">
<!-- WINDOWS -->
<TitleBarFocusColor value="30, 30, 30, 1" /> <!-- Focused window title bar highlight, no equivalent for unfocused windows -->
<FloaterFocusBorderColor value="0, 0, 0, 30"/> <!-- Focused window border color -->
<FloaterUnfocusBorderColor value="0, 0, 0, 30"/> <!-- Unfocused window border color -->
<FocusBackgroundColor value="31, 31, 32, 220"/> <!-- Background color of focused floaters -->
<DefaultBackgroundColor value="31, 31, 32, 190"/> <!-- Background color for unfocused floaters -->
<ColorDropShadow value="0, 0, 0, 90"/> <!-- The drop shadow behind windows and menus -->
<DefaultHighlightDark value="127, 127, 127, 0"/>
<DefaultHighlightLight value="0, 0, 0, 30"/> <!-- Unfocused border, bottom portion -->
<DefaultShadowDark value="0, 0, 0, 30"/> <!-- Background color for unfocused windows -->
<DefaultShadowLight value="190, 190, 190, 0"/> <!-- Tab area border for IMs -->
<!-- LABELS -->
<LabelDisabledColor value="210, 210, 210, 120"/> <!-- Color for unfocused window titles -->
<LabelSelectedColor value="255, 255, 255, 255"/> <!-- Color for mouseovered clickable labels, e.g. version info on the login screen -->
<LabelSelectedDisabledColor value="116, 116, 116, 128"/>
<LabelTextColor value="190, 190, 190, 210"/> <!-- Color for window labels and titles -->
<!-- LOGIN -->
<LoginProgressBarBgColor value="255, 255, 255, 255" /> <!-- Login progress bar background -->
<LoginProgressBarFgColor value="255, 255, 255, 255" /> <!-- Login progress bar -->
<LoginProgressBoxBorderColor value="0, 30, 60, 0" /> <!-- Login progress box border -->
<LoginProgressBoxCenterColor value="0, 0, 0, 200" /> <!-- Login progress box background -->
<LoginProgressBoxShadowColor value="0, 0, 0, 200" /> <!-- Login progress box shadow -->
<LoginProgressBoxTextColor value="190, 190, 190, 210"/> <!-- Login progress text -->
<!-- BUTTONS -->
<ButtonLabelColor value="190, 190, 190, 240"/> <!-- Label text color for buttons, like the "OK" text -->
<ButtonLabelSelectedColor value="220, 220, 220, 255"/> <!-- Label text color when button selected -->
<ButtonLabelDisabledColor value="190, 190, 190, 150"/> <!-- Label text color when button disabled -->
<ButtonLabelSelectedDisabledColor value="210, 210, 210, 200"/> <!-- Label text color when button disabled but selected -->
<ButtonSelectedBgColor value="62, 62, 62, 255"/> <!-- Doesn't appear to be used -->
<ButtonSelectedColor value="255, 255, 255, 255"/> <!-- Doesn't appear to be used -->
<ButtonUnselectedBgColor value="62, 62, 62, 255"/> <!-- Doesn't appear to be used -->
<ButtonUnselectedFgColor value="255, 255, 255, 255"/> <!-- Doesn't appear to be used -->
<ButtonBorderColor value="0, 128, 255, 255"/> <!-- Doesn't appear to be used -->
<ButtonFlashBgColor value="127, 127, 127, 128" /> <!-- Button color override (also checkboxes and scroll arrows) -->
<ButtonColor value="255, 255, 255, 255" /> <!-- Blended with button art, usually left as opaque white -->
<ButtonImageColor value="255, 255, 255, 240"/> <!-- Blended with button art, usually left as opaque white -->
<!-- SLIDERS -->
<SliderDisabledThumbColor value="0, 0, 0, 255" /> <!-- Doesn't appear to be used -->
<SliderThumbCenterColor value="200, 200, 200, 255"/> <!-- Unfocused slider thumb color -->
<SliderThumbOutlineColor value="255, 255, 255, 255"/> <!-- Focused slider thumb color -->
<SliderTrackColor value="255, 255, 255, 255"/> <!-- Doesn't appear to be used -->
<!-- TEXTFIELDS -->
<TextBgFocusColor value="0, 1, 3, 128"/> <!-- Text field background when receiving input (focused) -->
<TextBgReadOnlyColor value="0, 0, 0, 190"/> <!-- Text field background when read-only -->
<TextBgWriteableColor value="120, 120, 120, 30"/> <!-- Text field background when not receiving input (unfocused) -->
<TextCursorColor value="127, 127, 127, 255"/> <!-- Cursor color in notecards and scripts only -->
<TextFgColor value="210, 210, 210, 250"/> <!-- Text color for all text entry fields; cursor color for line editors -->
<TextFgReadOnlyColor value="127, 127, 127, 220"/> <!-- Text color in read-only fields -->
<TextFgTentativeColor value="127, 127, 127, 190"/> <!-- Initial entry in text entry fields, e.g. "Click here to chat." -->
<TextEmbeddedItemReadOnlyColor value="242, 147, 58, 255"/> <!-- i.e. About Land name that you don't own -->
<TextEmbeddedItemColor value="128, 128, 128, 230"/> <!-- Text of read-only items embedded in notecards -->
<TextDefaultColor value="190, 190, 190, 230"/> <!-- Non-keyword text in the script editor -->
<TextLinkColor value="127, 127, 127, 130"/> <!-- Text color of link items eg. LL login links -->
<TextLinkHoverColor value="127, 127, 127, 230"/> <!-- Text color of hovered link items eg. LL login links -->
<!-- LISTBOXES -->
<ScrollBgReadOnlyColor value="6, 6, 6, 120"/> <!-- Background of read only lists -->
<ScrollBgWriteableColor value="190, 190, 190, 90"/> <!-- Background of editable lists, e.g. groups -->
<ScrollBGStripeColor value="30,30, 30, 120"/> <!-- Background stripes in sortable lists, e.g. Events Search -->
<ScrollDisabledColor value="190, 190, 190, 210"/>
<ScrollSelectedBGColor value="127, 127, 127, 190"/> <!-- Selected item in a list highlight -->
<ScrollSelectedFGColor value="0, 0, 0, 210"/> <!-- Text color -->
<ScrollUnselectedColor value="19, 19, 19, 190"/> <!-- Text color -->
<ScrollHighlightedColor value="127, 127, 127, 90"/> <!-- Hover color -->
<ScrollbarThumbColor value="190, 190, 190, 90"/> <!-- Scroll bar -->
<ScrollbarTrackColor value="19, 19, 19, 190"/> <!-- Scroll bar background -->
<ScrollFgTentativeColor value="127, 127, 127, 160"/> <!-- Color of non-matching textfields -->
<!-- MENUS -->
<MenuBarBgColor value="2, 2, 2, 190"/> <!-- Menu bar background -->
<MenuBarGodBgColor value="60, 140, 100, 230"/> <!-- Menu bar background with God Mode enabled -->
<MenuNonProductionGodBgColor value="60, 140, 100, 230"/> <!-- Beta viewer menu bar background with God Mode enabled -->
<MenuNonProductionBgColor value="2, 2, 2, 190"/> <!-- Beta viewer menu bar background -->
<MenuDefaultBgColor value="0, 0, 0, 255"/> <!-- Menu background -->
<MenuItemDisabledColor value="160, 160, 160, 160"/> <!-- Menu text color; also text color for pie menus and treeviews (like Inventory) -->
<MenuItemEnabledColor value="220, 220, 220, 210"/> <!-- Menu text color; also text color for pie menus and treeviews (like Inventory) -->
<MenuItemHighlightBgColor value="9, 9, 9, 100"/> <!-- Highlighted menu item background color -->
<MenuItemHighlightFgColor value="127, 127, 127, 240"/> <!-- Highlighted menu text color; also treeview node selection highlight -->
<MenuPopupBgColor value="0, 0, 0, 200"/> <!-- Right-click menu background -->
<!-- PIE MENUS -->
<PieMenuBgColor value="60, 60, 60, 190"/> <!-- Color of pie menu -->
<PieMenuLineColor value="19, 19, 19, 150"/> <!-- Color of pie menu slice separators -->
<PieMenuSelectedColor value="127, 127, 127, 90"/> <!-- Color of pie menu slice when selected -->
<!-- TOOLTIPS -->
<ToolTipBgColor value="30, 30, 30, 200"/> <!-- Tool tips, i.e. "Hover Tips" -->
<ToolTipBorderColor value="30, 30, 30, 255"/> <!-- Doesn't appear to be used -->
<ToolTipTextColor value="127, 127, 127, 255"/> <!-- Tool tips text color -->
<!-- NOTIFICATION POP-UPS -->
<NotifyBoxColor value="60, 140, 100, 230"/> <!-- Notification background, i.e. tp requests -->
<NotifyTextColor value="180, 240, 220, 255"/> <!-- Notification text -->
<NotifyCautionBoxColor value="60, 140, 100, 230"/> <!-- the background color of caution permissions prompts -->
<NotifyCautionWarnColor value="180, 240, 220, 255"/> <!-- the foreground color of the special title text in caution permissions prompts -->
<GroupNotifyBoxColor value="60, 140, 100, 230"/> <!-- Group notices background -->
<GroupNotifyTextColor value="180, 240, 220, 255" /> <!-- Group notices text -->
<!-- CHAT AND IM HISTORY TEXTBOX COLORS -->
<ChatHistoryBgColor value="0, 0, 0, 100" /> <!-- Local Chat background -->
<ChatHistoryTextColor value="255, 255, 255, 255" /> <!-- Local Chat text -->
<IMHistoryBgColor value="0, 0, 0, 100" /> <!-- Instant Message background -->
<IMHistoryTextColor value="155, 175, 255, 255" /> <!-- Instant Message text -->
<!-- IN-WORLD SELECTION -->
<SilhouetteParentColor value="60, 240, 180, 255"/> <!-- Root prim selection outline -->
<SilhouetteChildColor value="0, 40, 70, 30"/> <!-- Child prim selection outline -->
<SilhouetteInspectColor value="127, 127, 127, 210"/> <!-- Silhouette selection outline -->
<HighlightParentColor value="127, 127, 127, 210"/> <!-- Selection outline on parent object -->
<HighlightChildColor value="127, 127, 127, 210"/> <!-- Selection outline on child object -->
<HighlightInspectColor value="127, 127, 127, 210"/> <!-- Selection outline when inspecting -->
<!-- EDIT MODE GRID -->
<GridFocusPointColor value="255, 255, 255, 128"/> <!-- Doesn't appear to be used -->
<GridlineColor value="127, 127, 127, 230"/> <!-- Grid color -->
<GridlineBGColor value="235, 235, 255, 200"/> <!-- Grid background color -->
<GridlineShadowColor value="0, 0, 0, 80"/> <!-- Grid drop shadow -->
<!-- PROPERTY LINES -->
<PropertyColorAvail value="0, 0, 0, 0" />
<PropertyColorGroup value="127, 127, 127, 102"/> <!-- Property group owns -->
<PropertyColorOther value="255, 0, 0, 102"/> <!-- Property others own -->
<PropertyColorSelf value="0, 255, 0, 102"/> <!-- Property you own -->
<PropertyColorForSale value="255, 128, 0, 102"/> <!-- Property for sale -->
<PropertyColorAuction value="128, 0, 255, 102" /> <!-- Match the color on the world map -->
<!-- Icon Enable/Disable -->
<IconEnabledColor value="255, 255, 255, 255"/> <!-- Media/music icon enabled -->
<IconDisabledColor value="255, 255, 255, 200"/> <!-- Media/music icon disabled -->
<!-- MAP -->
<MapAvatar value="0, 255, 0, 255" />
<MapFriend value="255, 255, 0, 255" />
<!-- MINI-MAP -->
<NetMapBackgroundColor value="127, 127, 127, 19"/> <!-- Mini-map floater background -->
<NetMapYouOwnAboveWater value="127, 127, 127, 190"/> <!-- Objects owned by you above water -->
<NetMapYouOwnBelowWater value="127, 127, 127, 180"/> <!-- Objects owned by you below water -->
<NetMapGroupOwnAboveWater value="255, 255, 255, 190"/> <!-- Group owned objects above water -->
<NetMapGroupOwnBelowWater value="255, 255, 255, 180"/> <!-- Group owned objects below water -->
<NetMapOtherOwnAboveWater value="60, 60, 60, 60"/> <!-- Objects owned by others above water -->
<NetMapOtherOwnBelowWater value="30, 30, 30, 60"/> <!-- Objects owned by others below water -->
<NetMapThisRegion value="255, 255, 255, 255" />
<NetMapLiveRegion value="204, 204, 204, 255" />
<NetMapDeadRegion value="255, 128, 128, 255" />
<NetMapFrustum value="255, 255, 255, 20" />
<NetMapFrustumRotating value="255, 255, 255, 51" />
<!-- HELP WINDOW -->
<HelpBgColor value="200, 209, 204, 255" />
<HelpFgColor value="0, 0, 0, 255" />
<HelpScrollTrackColor value="183, 184, 188, 255"/>
<HelpScrollThumbColor value="80, 96, 124, 255"/>
<HelpScrollHighlightColor value="115, 132, 155, 255" />
<HelpScrollShadowColor value="0, 0, 0, 255" />
<!-- MISC -->
<AvatarNameColor value="127, 127, 127, 230"/> <!-- Text color of avatar nametags -->
<FocusColor value="0, 0, 0, 0"/> <!-- Color of the glow around UI controls with keyboard focus -->
<FloaterButtonImageColor value="255, 255, 255, 255" /> <!-- The floater buttons (like the close box) are white images that receive this color. -->
<ButtonCautionImageColor value="255, 255, 255, 255" /> <!-- Match the caution dialog buttons to the default -->
<HealthTextColor value="255, 255, 255, 255" />
<MapAutopilotColor value="255, 128, 0, 255" />
<ContextSilhouetteColor value="239, 156, 0, 255" /> <!-- For "context" highlighting, i.e. pie menu -->
<ScriptBgReadOnlyColor value="19, 19, 19, 255"/>
<ParcelTextColor value="71, 223, 170, 255" /> <!-- Parcel name on menu bar, normal state -->
<ParcelHoverColor value="100, 235, 207, 255" /> <!-- Parcel name on menu bar, hover state -->
<TimeTextColor value="71, 223, 170, 255" /> <!-- SL Time on menu bar -->
<BalanceTextColor value="71, 223, 170, 255"/> <!-- Linden dollar balance on menu bar -->
<HealthTextColor value="71, 223, 170, 255"/> <!-- Damage meter text on menu bar -->
<GroupOverTierColor value="110, 15, 15, 255" /> <!-- Warning text in Group Info window -->
<FilterBackgroundColor value="0, 0, 20, 255"/> <!-- Matching region of Inventory search text -->
<FilterTextColor value="255, 200, 70, 255" />
<InventoryItemSuffixColor value="127, 127, 127, 210"/>
<InventorySearchStatusColor value="127, 127, 127, 255" />
<ConsoleBackground value="0, 0, 0, 255" />
<FolderViewLoadingMessageTextColor value="127, 127, 127, 255"/>
<InventoryBackgroundColor value="127, 127, 127, 19"/> <!-- Inventory background color -->
<!-- Alert box colors -->
<AlertBoxColor value="12, 12, 12, 190"/>
<AlertTextColor value="127, 127, 127, 240"/>
<AlertCautionBoxColor value="12, 12, 12, 190"/> <!-- Background color of caution alerts -->
<AlertCautionTextColor value="127, 127, 127, 240"/> <!-- Foreground color of the special title text in caution alerts -->
<!-- Multi sliders, as in the sky animation setting -->
<MultiSliderDisabledThumbColor value="0, 0, 0, 255"/>
<MultiSliderThumbCenterColor value="183, 184, 188, 255"/>
<MultiSliderThumbOutlineColor value="0, 0, 0, 255"/>
<MultiSliderTrackColor value="30, 30, 30, 255"/>
<MultiSliderThumbCenterSelectedColor value="255, 50, 50, 255"/>
<MultiSliderTriangleColor value="255, 255, 50, 255"/>
</settings>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Some files were not shown because too many files have changed in this diff Show More