Merge branch 'master' of git://github.com/Lirusaito/SingularityViewer
@@ -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>
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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/>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -76,6 +76,8 @@ protected:
|
||||
U32 tempTimeFormat;
|
||||
U32 tempDateFormat;
|
||||
BOOL mSecondsInChatAndIMs;
|
||||
BOOL mSecondsInLog;
|
||||
BOOL mOtherChatsTornOff;
|
||||
|
||||
BOOL mIMResponseAnyone;
|
||||
BOOL mIMResponseFriends;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -26,6 +26,7 @@ private:
|
||||
float mMinPrimScale;
|
||||
|
||||
void setOpenSimLimits();
|
||||
void setAuroraLimits();
|
||||
void setSecondLifeLimits();
|
||||
};
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
218
indra/newview/llmakeoutfitdialog.cpp
Normal 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());
|
||||
}
|
||||
|
||||
66
indra/newview/llmakeoutfitdialog.h
Normal 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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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")
|
||||
{
|
||||
|
||||
@@ -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))
|
||||
|
||||
203
indra/newview/skins/Blackdark/colors.xml
Normal 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>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/active_speakers.tga
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/active_voice_tab.tga
Normal file
|
After Width: | Height: | Size: 556 B |
BIN
indra/newview/skins/Blackdark/textures/arrow_down.tga
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/arrow_up.tga
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/badge_error.j2c
Normal file
BIN
indra/newview/skins/Blackdark/textures/badge_note.j2c
Normal file
BIN
indra/newview/skins/Blackdark/textures/badge_ok.j2c
Normal file
BIN
indra/newview/skins/Blackdark/textures/badge_warn.j2c
Normal file
BIN
indra/newview/skins/Blackdark/textures/black.tga
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/btn_chatbar.tga
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/btn_chatbar_selected.tga
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/button_anim_pause.tga
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
BIN
indra/newview/skins/Blackdark/textures/button_anim_play.tga
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
BIN
indra/newview/skins/Blackdark/textures/button_anim_stop.tga
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 16 KiB |
BIN
indra/newview/skins/Blackdark/textures/button_enabled_32x128.tga
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/cam_rotate_in.tga
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
indra/newview/skins/Blackdark/textures/cam_rotate_out.tga
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
indra/newview/skins/Blackdark/textures/cam_tracking_in.tga
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
indra/newview/skins/Blackdark/textures/cam_tracking_out.tga
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
indra/newview/skins/Blackdark/textures/cam_zoom_minus_in.tga
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/cam_zoom_out.tga
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/cam_zoom_plus_in.tga
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/checkbox_enabled_true.tga
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/circle.tga
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/close_in_blue.tga
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/close_inactive.tga
Normal file
BIN
indra/newview/skins/Blackdark/textures/close_inactive_blue.tga
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/closebox.tga
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/combobox_arrow.tga
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/darkgray.tga
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/default_land_picture.j2c
Normal file
BIN
indra/newview/skins/Blackdark/textures/direction_arrow.tga
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/down_arrow.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
indra/newview/skins/Blackdark/textures/eye_button_active.tga
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/eye_button_inactive.tga
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
BIN
indra/newview/skins/Blackdark/textures/ff_edit_mine_button.tga
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
indra/newview/skins/Blackdark/textures/ff_edit_theirs_button.tga
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
BIN
indra/newview/skins/Blackdark/textures/ff_visible_map_button.tga
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
BIN
indra/newview/skins/Blackdark/textures/flyout_btn_left.tga
Normal file
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
BIN
indra/newview/skins/Blackdark/textures/flyout_btn_right.tga
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 3.8 KiB |