Merge remote-tracking branch 'lirusaito/master'

Conflicts:
	indra/newview/llviewermessage.cpp
	indra/newview/skins/default/xui/fr/panel_preferences_ascent_chat.xml
	indra/newview/skins/default/xui/fr/panel_preferences_general.xml
This commit is contained in:
Latif Khalifa
2013-04-23 12:17:08 +02:00
43 changed files with 3042 additions and 3219 deletions

View File

@@ -693,6 +693,17 @@ Found in Advanced->Rendering->Info Displays</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FakeAway</key>
<map>
<key>HideFromEditor</key>
<integer>1</integer>
<key>Persist</key>
<integer>0</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>InstantMessageLogPathAnyAccount</key>
<map>
<key>Comment</key>
@@ -5493,6 +5504,28 @@ This should be as low as possible, but too low may break functionality</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>ClickActionBuyEnabled</key>
<map>
<key>Comment</key>
<string>Enable click to buy actions in tool pie menu</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>ClickActionPayEnabled</key>
<map>
<key>Comment</key>
<string>Enable click to pay actions in tool pie menu</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>DoubleClickAutoPilot</key>
<map>
<key>Comment</key>
@@ -5537,10 +5570,21 @@ This should be as low as possible, but too low may break functionality</string>
<key>Value</key>
<real>0.10000000149</real>
</map>
<key>DragAndDropDistanceThreshold</key>
<map>
<key>Comment</key>
<string>Number of pixels that mouse should move before triggering drag and drop mode</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
<integer>3</integer>
</map>
<key>DropShadowButton</key>
<map>
<key>Comment</key>
<string>Drop shadow width for buttons (pixels)</string>
<string>Drop shadow width for buttons (pixels)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -5647,6 +5691,17 @@ This should be as low as possible, but too low may break functionality</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>EnableGrab</key>
<map>
<key>Comment</key>
<string>Use Ctrl+mouse to grab and manipulate objects</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>EnableGestureSounds</key>
<map>
<key>Comment</key>
@@ -13008,6 +13063,17 @@ This should be as low as possible, but too low may break functionality</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>DisableClickSitOtherOwner</key>
<map>
<key>Comment</key>
<string>Never sit by clicking a prim that isn't owned by you</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>PlayIMSound</key>
<map>
<key>Comment</key>
@@ -16360,6 +16426,17 @@ This should be as low as possible, but too low may break functionality</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>ClickToWalk</key>
<map>
<key>Comment</key>
<string>Click in world to walk to location</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>SimulateFBOFailure</key>
<map>
<key>Comment</key>

View File

@@ -80,6 +80,9 @@ LLPrefsAscentSys::LLPrefsAscentSys()
childSetCommitCallback("AscentCmdLineTP2", onCommitCmdLine, this);
childSetCommitCallback("SinguCmdLineAway", onCommitCmdLine, this);
//Security ----------------------------------------------------------------------------
childSetCommitCallback("disable_click_sit_check", onCommitCheckBox, this);
//Build -------------------------------------------------------------------------------
childSetCommitCallback("next_owner_copy", onCommitCheckBox, this);
childSetEnabled("next_owner_transfer", gSavedSettings.getBOOL("NextOwnerCopy"));
@@ -129,59 +132,57 @@ LLPrefsAscentSys::~LLPrefsAscentSys()
//static
void LLPrefsAscentSys::onCommitCheckBox(LLUICtrl* ctrl, void* user_data)
{
LLPrefsAscentSys* self = (LLPrefsAscentSys*)user_data;
LLPrefsAscentSys* self = static_cast<LLPrefsAscentSys*>(user_data);
// llinfos << "Change to " << ctrl->getControlName() << " aka " << ctrl->getName() << llendl;
if (ctrl->getName() == "speed_rez_check")
{
bool enabled = self->childGetValue("speed_rez_check").asBoolean();
self->childSetEnabled("speed_rez_interval", enabled);
self->childSetEnabled("speed_rez_seconds", enabled);
}
else if (ctrl->getName() == "double_click_teleport_check")
{
bool enabled = self->childGetValue("double_click_teleport_check").asBoolean();
self->childSetEnabled("center_after_teleport_check", enabled);
self->childSetEnabled("offset_teleport_check", enabled);
}
else if (ctrl->getName() == "system_folder_check")
{
bool enabled = self->childGetValue("system_folder_check").asBoolean();
self->childSetEnabled("temp_in_system_check", enabled);
}
else if (ctrl->getName() == "enable_clouds")
{
bool enabled = self->childGetValue("enable_clouds").asBoolean();
self->childSetEnabled("enable_classic_clouds", enabled);
}
else if (ctrl->getName() == "power_user_check")
{
bool enabled = self->childGetValue("power_user_check").asBoolean();
self->childSetEnabled("power_user_confirm_check", enabled);
self->childSetValue("power_user_confirm_check", false);
}
else if (ctrl->getName() == "power_user_confirm_check")
{
bool enabled = self->childGetValue("power_user_confirm_check").asBoolean();
gSavedSettings.setBOOL("AscentPowerfulWizard", enabled);
if (enabled)
{
LLVector3d lpos_global = gAgent.getPositionGlobal();
gAudiop->triggerSound(LLUUID("58a38e89-44c6-c52b-deb8-9f1ddc527319"), gAgent.getID(), 1.0f, LLAudioEngine::AUDIO_TYPE_UI, lpos_global);
LLChat chat;
chat.mSourceType = CHAT_SOURCE_SYSTEM;
chat.mText = LLTrans::getString("PowerUser1") + "\n" + LLTrans::getString("PowerUser2") + "\n" + LLTrans::getString("Unlocked:") + "\n" + LLTrans::getString("PowerUser3") + "\n- " + LLTrans::getString("RightClick") + " > " + LLTrans::getString("PowerUser4") + "\n- " + LLTrans::getString("RightClick") + " > " + LLTrans::getString("PowerUser5");
LLFloaterChat::addChat(chat);
}
}
else if (ctrl->getName() == "next_owner_copy")
const std::string name = ctrl->getName();
bool enabled = ctrl->getValue().asBoolean();
if (name == "speed_rez_check")
{
bool copy = gSavedSettings.getBOOL("NextOwnerCopy");
if (!copy) gSavedSettings.setBOOL("NextOwnerTransfer", true);
self->childSetEnabled("next_owner_transfer", copy);
self->childSetEnabled("speed_rez_interval", enabled);
self->childSetEnabled("speed_rez_seconds", enabled);
}
else if (name == "double_click_teleport_check")
{
self->childSetEnabled("center_after_teleport_check", enabled);
self->childSetEnabled("offset_teleport_check", enabled);
}
else if (name == "system_folder_check")
{
self->childSetEnabled("temp_in_system_check", enabled);
}
else if (name == "enable_clouds")
{
self->childSetEnabled("enable_classic_clouds", enabled);
}
else if (name == "power_user_check")
{
self->childSetEnabled("power_user_confirm_check", enabled);
self->childSetValue("power_user_confirm_check", false);
}
else if (name == "power_user_confirm_check")
{
gSavedSettings.setBOOL("AscentPowerfulWizard", enabled);
if (enabled)
{
LLVector3d lpos_global = gAgent.getPositionGlobal();
gAudiop->triggerSound(LLUUID("58a38e89-44c6-c52b-deb8-9f1ddc527319"), gAgent.getID(), 1.0f, LLAudioEngine::AUDIO_TYPE_UI, lpos_global);
LLChat chat;
chat.mSourceType = CHAT_SOURCE_SYSTEM;
chat.mText = LLTrans::getString("PowerUser1") + "\n" + LLTrans::getString("PowerUser2") + "\n" + LLTrans::getString("Unlocked:") + "\n" + LLTrans::getString("PowerUser3") + "\n- " + LLTrans::getString("RightClick") + " > " + LLTrans::getString("PowerUser4") + "\n- " + LLTrans::getString("RightClick") + " > " + LLTrans::getString("PowerUser5");
LLFloaterChat::addChat(chat);
}
}
else if (name == "disable_click_sit_check")
{
self->childSetEnabled("disable_click_sit_own_check", !enabled);
}
else if (name == "next_owner_copy")
{
if (!enabled) gSavedSettings.setBOOL("NextOwnerTransfer", true);
self->childSetEnabled("next_owner_transfer", enabled);
}
}
@@ -313,6 +314,7 @@ void LLPrefsAscentSys::refreshValues()
mDetachBridge = gSavedSettings.getBOOL("SGDetachBridge");
mRevokePermsOnStandUp = gSavedSettings.getBOOL("RevokePermsOnStandUp");
mDisableClickSit = gSavedSettings.getBOOL("DisableClickSit");
mDisableClickSitOtherOwner = gSavedSettings.getBOOL("DisableClickSitOtherOwner");
mDisplayScriptJumps = gSavedSettings.getBOOL("AscentDisplayTotalScriptJumps");
mNumScriptDiff = gSavedSettings.getF32("Ascentnumscriptdiff");
@@ -463,6 +465,7 @@ void LLPrefsAscentSys::cancel()
gSavedSettings.setBOOL("SGDetachBridge", mDetachBridge);
gSavedSettings.setBOOL("RevokePermsOnStandUp", mRevokePermsOnStandUp);
gSavedSettings.setBOOL("DisableClickSit", mDisableClickSit);
gSavedSettings.setBOOL("DisableClickSitOtherOwner", mDisableClickSitOtherOwner);
gSavedSettings.setBOOL("AscentDisplayTotalScriptJumps", mDisplayScriptJumps);
gSavedSettings.setF32("Ascentnumscriptdiff", mNumScriptDiff);

View File

@@ -104,6 +104,7 @@ protected:
BOOL mDetachBridge;
BOOL mRevokePermsOnStandUp;
BOOL mDisableClickSit;
bool mDisableClickSitOtherOwner;
BOOL mDisplayScriptJumps;
F32 mNumScriptDiff;
//Build -------------------------------------------------------------------------------

View File

@@ -229,9 +229,6 @@ private:
// Statics
//
BOOL LLAgent::exlPhantom = 0;
BOOL LLAgent::mForceTPose = 0;
const F32 LLAgent::TYPING_TIMEOUT_SECS = 5.f;
std::map<std::string, std::string> LLAgent::sTeleportErrorMessages;
@@ -652,17 +649,6 @@ BOOL LLAgent::getFlying() const
return mControlFlags & AGENT_CONTROL_FLY;
}
// Better Set Phantom options ~Charbl
void LLAgent::setPhantom(BOOL phantom)
{
exlPhantom = phantom;
}
BOOL LLAgent::getPhantom()
{
return exlPhantom;
}
//-----------------------------------------------------------------------------
// setFlying()
//-----------------------------------------------------------------------------
@@ -727,8 +713,14 @@ void LLAgent::setFlying(BOOL fly)
//-----------------------------------------------------------------------------
// toggleFlying()
//-----------------------------------------------------------------------------
// static
void LLAgent::toggleFlying()
{
if ( gAgent.mAutoPilot )
{
LLToolPie::instance().stopClickToWalk();
}
BOOL fly = !gAgent.getFlying();
gAgent.setFlying( fly );
@@ -758,20 +750,6 @@ void LLAgent::standUp()
// [/RLVa:KB]
}
void LLAgent::togglePhantom()
{
BOOL phan = !(exlPhantom);
setPhantom( phan );
}
void LLAgent::toggleTPosed()
{
BOOL posed = !(mForceTPose);
setTPosed(posed);
}
void LLAgent::handleServerBakeRegionTransition(const LLUUID& region_id)
{
llinfos << "called" << llendl;
@@ -1315,17 +1293,6 @@ LLQuaternion LLAgent::getQuat() const
//-----------------------------------------------------------------------------
U32 LLAgent::getControlFlags()
{
/*
// HACK -- avoids maintenance of control flags when camera mode is turned on or off,
// only worries about it when the flags are measured
if (mCameraMode == CAMERA_MODE_MOUSELOOK)
{
if ( !(mControlFlags & AGENT_CONTROL_MOUSELOOK) )
{
mControlFlags |= AGENT_CONTROL_MOUSELOOK;
}
}
*/
return mControlFlags;
}
@@ -1419,9 +1386,8 @@ void LLAgent::setAFK()
//-----------------------------------------------------------------------------
void LLAgent::clearAFK()
{
if (gSavedSettings.getBOOL("FakeAway")) return;
gAwayTriggerTimer.reset();
if (!gSavedSettings.controlExists("FakeAway")) gSavedSettings.declareBOOL("FakeAway", FALSE, "", NO_PERSIST);
if (gSavedSettings.getBOOL("FakeAway") == TRUE) return;
// Gods can sometimes get into away state (via gestures)
// without setting the appropriate control flag. JC
@@ -1917,8 +1883,7 @@ BOOL LLAgent::needsRenderHead()
//-----------------------------------------------------------------------------
void LLAgent::startTyping()
{
if (gSavedSettings.getBOOL("FakeAway"))
return;
if (gSavedSettings.getBOOL("FakeAway")) return;
mTypingTimer.reset();
if (getRenderState() & AGENT_STATE_TYPING)
@@ -2035,6 +2000,7 @@ void LLAgent::endAnimationUpdateUI()
{
(*mMouselookModeOutSignal)();
}
// Only pop if we have pushed...
if (TRUE == mViewsPushed)
{
@@ -4092,6 +4058,7 @@ void LLAgent::teleportViaLandmark(const LLUUID& landmark_asset_id)
return;
}
// [/RLVa:KB]
mTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLandmark(landmark_asset_id));
startTeleportRequest();
}
@@ -4189,6 +4156,7 @@ void LLAgent::teleportViaLocation(const LLVector3d& pos_global)
}
}
// [/RLVa:KB]
mTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLocation(pos_global));
startTeleportRequest();
}
@@ -4261,6 +4229,7 @@ void LLAgent::teleportViaLocationLookAt(const LLVector3d& pos_global)
return;
}
// [/RLVa:KB]
mTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLocationLookAt(pos_global));
startTeleportRequest();
}
@@ -4729,6 +4698,16 @@ void LLAgent::sendAgentUpdateUserInfo(bool im_via_email, const std::string& dire
gMessageSystem->addString("DirectoryVisibility", directory_visibility);
gAgent.sendReliableMessage();
}
void LLAgent::dumpGroupInfo()
{
llinfos << "group " << mGroupName << llendl;
llinfos << "ID " << mGroupID << llendl;
llinfos << "powers " << mGroupPowers << llendl;
llinfos << "title " << mGroupTitle << llendl;
//llinfos << "insig " << mGroupInsigniaID << llendl;
}
// Draw a representation of current autopilot target
void LLAgent::renderAutoPilotTarget()
{
@@ -4974,4 +4953,5 @@ void LLTeleportRequestViaLocationLookAt::restartTeleport()
{
gAgent.doTeleportViaLocationLookAt(getPosGlobal());
}
// EOF

View File

@@ -94,12 +94,13 @@ struct LLGroupData
// forward declarations
//
//------------------------------------------------------------------------
// LLAgent
//------------------------------------------------------------------------
class LLAgent : public LLOldEvents::LLObservable
{
LOG_CLASS(LLAgent);
public:
friend class LLAgentDropGroupViewerNode;
@@ -160,7 +161,7 @@ public:
public:
void getName(std::string& name); //Legacy
void buildFullname(std::string &name) const; //Legacy
// *TODO remove, is not used as of August 20, 2009
//*TODO remove, is not used as of August 20, 2009
void buildFullnameAndTitle(std::string &name) const;
//--------------------------------------------------------------------
@@ -169,11 +170,11 @@ public:
public:
// On the very first login, gender isn't chosen until the user clicks
// in a dialog. We don't render the avatar until they choose.
BOOL isGenderChosen() const { return mGenderChosen; }
void setGenderChosen(BOOL b) { mGenderChosen = b; }
private:
BOOL isGenderChosen() const { return mGenderChosen; }
void setGenderChosen(BOOL b) { mGenderChosen = b; }
private:
BOOL mGenderChosen;
/** Identity
** **
*******************************************************************************/
@@ -182,7 +183,7 @@ public:
** **
** POSITION
**/
//--------------------------------------------------------------------
// Position
//--------------------------------------------------------------------
@@ -215,9 +216,9 @@ public:
void resetAxes();
void resetAxes(const LLVector3 &look_at); // Makes reasonable left and up
// The following three get*Axis functions return direction avatar is looking, not camera.
const LLVector3& getAtAxis() const { return mFrameAgent.getAtAxis(); }
const LLVector3& getUpAxis() const { return mFrameAgent.getUpAxis(); }
const LLVector3& getLeftAxis() const { return mFrameAgent.getLeftAxis(); }
const LLVector3& getAtAxis() const { return mFrameAgent.getAtAxis(); }
const LLVector3& getUpAxis() const { return mFrameAgent.getUpAxis(); }
const LLVector3& getLeftAxis() const { return mFrameAgent.getLeftAxis(); }
LLQuaternion getQuat() const; // Returns the quat that represents the rotation of the agent in the absolute frame
private:
LLVector3d mAgentOriginGlobal; // Origin of agent coords from global coords
@@ -229,7 +230,7 @@ private:
//--------------------------------------------------------------------
public:
void setStartPosition(U32 location_id); // Marks current location as start, sends information to servers
void setHomePosRegion( const U64& region_handle, const LLVector3& pos_region );
void setHomePosRegion(const U64& region_handle, const LLVector3& pos_region);
BOOL getHomePosGlobal(LLVector3d* pos_global);
private:
BOOL mHaveHomePosition;
@@ -277,18 +278,18 @@ public:
private:
std::set<U64> mRegionsVisited; // Stat - what distinct regions has the avatar been to?
F64 mDistanceTraveled; // Stat - how far has the avatar moved?
LLVector3d mLastPositionGlobal; // Used to calculate travel distance
LLVector3d mLastPositionGlobal; // Used to calculate travel distance
/** Position
** **
*******************************************************************************/
/********************************************************************************
** **
** ACTIONS
**/
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// Fidget
//--------------------------------------------------------------------
// Trigger random fidget animations
@@ -311,7 +312,7 @@ public:
static void toggleFlying();
static bool enableFlying();
BOOL canFly(); // Does this parcel allow you to fly?
//--------------------------------------------------------------------
// Chat
//--------------------------------------------------------------------
@@ -405,7 +406,7 @@ public:
BOOL getBusy() const;
private:
BOOL mIsBusy;
//--------------------------------------------------------------------
// Grab
//--------------------------------------------------------------------
@@ -443,7 +444,7 @@ private:
//--------------------------------------------------------------------
// Animations
//--------------------------------------------------------------------
//--------------------------------------------------------------------
public:
void stopCurrentAnimations();
void requestStopMotion(LLMotion* motion);
@@ -675,7 +676,7 @@ public:
// ! BACKWARDS COMPATIBILITY ! This function can go away after the AO transition (see llstartup.cpp).
void setAOTransition();
private:
LLAgentAccess *mAgentAccess;
LLAgentAccess * mAgentAccess;
//--------------------------------------------------------------------
// God
@@ -720,7 +721,8 @@ public:
bool isAdult() const;
void setTeen(bool teen);
void setMaturity(char text);
static int convertTextToMaturity(char text);
static int convertTextToMaturity(char text);
private:
bool mIsDoSendMaturityPreferenceToServer;
unsigned int mMaturityPreferenceRequestId;
@@ -743,7 +745,6 @@ private:
bool validateMaturity(const LLSD& newvalue);
/** Access
** **
*******************************************************************************/
@@ -778,20 +779,20 @@ private:
// HUD
//--------------------------------------------------------------------
public:
const LLColor4 &getEffectColor();
void setEffectColor(const LLColor4 &color);
const LLColor4 &getEffectColor();
void setEffectColor(const LLColor4 &color);
private:
LLColor4 *mEffectColor;
/** Rendering
** **
*******************************************************************************/
/********************************************************************************
** **
** GROUPS
**/
public:
const LLUUID &getGroupID() const { return mGroupID; }
// Get group information by group_id, or FALSE if not in group.
@@ -828,7 +829,7 @@ public:
private:
std::string mGroupTitle; // Honorific, like "Sir"
BOOL mHideGroupTitle;
//--------------------------------------------------------------------
// Group Powers
//--------------------------------------------------------------------
@@ -882,54 +883,22 @@ public:
/** Messaging
** **
*******************************************************************************/
*******************************************************************************/
/********************************************************************************
** **
** DEBUGGING
**/
public:
static void clearVisualParams(void *);
void dumpGroupInfo();
static void clearVisualParams(void *);
friend std::ostream& operator<<(std::ostream &s, const LLAgent &sphere);
/** Debugging
** **
*******************************************************************************/
/********************************************************************************
** **
** Phantom mode!
**/
public:
static BOOL getPhantom();
static void setPhantom(BOOL phantom);
static void togglePhantom();
private:
static BOOL exlPhantom;
/** PHANTOM
** **
*******************************************************************************/
/********************************************************************************
** **
** Depreciated stuff. Move when ready.
**/
public:
//What's this t-posed stuff from?
static BOOL isTPosed() { return mForceTPose; }
static void setTPosed(BOOL TPose) { mForceTPose = TPose; }
static void toggleTPosed();
private:
static BOOL mForceTPose;
/** DEPRECIATED
** **
*******************************************************************************/
};
extern LLAgent gAgent;

View File

@@ -3,10 +3,9 @@
* @brief The LLAppViewer class definitions
*
* $LicenseInfo:firstyear=2007&license=viewergpl$
*
* Second Life Viewer Source Code
* Copyright (c) 2007-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
@@ -30,8 +29,8 @@
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llappviewer.h"
#include "hippogridmanager.h"
@@ -41,7 +40,6 @@
#include "llfeaturemanager.h"
#include "lluictrlfactory.h"
#include "lltexteditor.h"
#include "llalertdialog.h"
#include "llerrorcontrol.h"
#include "lleventtimer.h"
#include "llviewertexturelist.h"
@@ -56,14 +54,13 @@
#include "llmd5.h"
#include "llmeshrepository.h"
#include "llpumpio.h"
#include "llimpanel.h"
#include "llmimetypes.h"
#include "llstartup.h"
#include "llfocusmgr.h"
#include "llviewerjoystick.h"
#include "llfloaterjoystick.h"
#include "llares.h"
#include "llfloatersnapshot.h"
#include "llcurl.h"
#include "llcalc.h"
#include "lltexturestats.h"
#include "llviewerwindow.h"
#include "llviewerdisplay.h"
@@ -80,7 +77,9 @@
#include "llfirstuse.h"
#include "llrender.h"
#include "llvector4a.h"
#include "llfontfreetype.h"
#include "llimpanel.h" // For LLVoiceClient and LLVoiceChannel
#include "llvoavatarself.h"
#include "llprogressview.h"
#include "llvocache.h"
#include "llvopartgroup.h"
#include "llfloaterteleporthistory.h"
@@ -92,10 +91,10 @@
#include "llavatarnamecache.h"
#include "lldiriterator.h"
#include "llimagej2c.h"
#include "llmemory.h"
#include "llprimitive.h"
#include "llnotifications.h"
#include "llnotificationsutil.h"
#include "llcurl.h"
#include <boost/bind.hpp>
#if LL_WINDOWS
@@ -121,7 +120,6 @@
#include "aihttptimeoutpolicy.h"
// </edit>
// The files below handle dependencies from cleanup.
#include "llcalc.h"
#include "llkeyframemotion.h"
#include "llworldmap.h"
#include "llhudmanager.h"
@@ -133,7 +131,6 @@
#include "llviewermenu.h"
#include "llselectmgr.h"
#include "lltrans.h"
#include "lltrans.h"
#include "lltracker.h"
#include "llviewerparcelmgr.h"
#include "llworldmapview.h"
@@ -144,15 +141,12 @@
#include "lldebugview.h"
#include "llconsole.h"
#include "llcontainerview.h"
#include "llfloaterstats.h"
#include "llhoverview.h"
#include "llfloatermemleak.h"
#include "llsdserialize.h"
#include "llworld.h"
#include "llhudeffecttrail.h"
#include "llhudeffectlookat.h"
#include "llvectorperfoptions.h"
#include "llurlsimstring.h"
#include "llwatchdog.h"
@@ -160,24 +154,23 @@
// Included so that constants/settings might be initialized
// in save_settings_to_globals()
#include "llbutton.h"
#include "llcombobox.h"
#include "llstatusbar.h"
#include "llsurface.h"
#include "llvosky.h"
#include "llvotree.h"
#include "llvoavatarself.h"
#include "llfolderview.h"
#include "lltoolbar.h"
#include "llframestats.h"
#include "llagentpilot.h"
#include "llsrv.h"
#include "llvovolume.h"
#include "llflexibleobject.h"
#include "llvosurfacepatch.h"
#include "llcommandlineparser.h"
#include "llfloatermemleak.h"
#include "llfloatersnapshot.h"
#include "llfloaterinventory.h"
// includes for idle() idleShutdown()
#include "floaterao.h"
#include "llviewercontrol.h"
#include "lleventnotifier.h"
#include "llcallbacklist.h"
@@ -192,10 +185,7 @@
#include "llviewerthrottle.h"
#include "llparcel.h"
#include "llviewerassetstats.h"
#include "llcommandlineparser.h"
#include "llprogressview.h"
#include "llmemory.h"
#include "llmainlooprepeater.h"
// [RLVa:KB]
@@ -223,12 +213,6 @@
//----------------------------------------------------------------------------
// viewer.cpp - these are only used in viewer, should be easily moved.
#if LL_DARWIN
extern void init_apple_menu(const char* product);
#endif // LL_DARWIN
@@ -486,6 +470,7 @@ static void settings_to_globals()
LLSurface::setTextureSize(gSavedSettings.getU32("RegionTextureSize"));
LLRender::sGLCoreProfile = gSavedSettings.getBOOL("RenderGLCoreProfile");
LLImageGL::sGlobalUseAnisotropic = gSavedSettings.getBOOL("RenderAnisotropic");
LLImageGL::sCompressTextures = gSavedSettings.getBOOL("RenderCompressTextures");
LLVOVolume::sLODFactor = gSavedSettings.getF32("RenderVolumeLODFactor");
@@ -1199,6 +1184,7 @@ bool LLAppViewer::mainLoop()
// canonical per-frame event
mainloop.post(newFrame);
if (!LLApp::isExiting())
{
pingMainloopTimeout("Main:JoystickKeyboard");
@@ -1206,7 +1192,7 @@ bool LLAppViewer::mainLoop()
// Scan keyboard for movement keys. Command keys and typing
// are handled by windows callbacks. Don't do this until we're
// done initializing. JC
if (gViewerWindow->mWindow->getVisible()
if (gViewerWindow->mWindow->getVisible()
&& gViewerWindow->getActive()
&& !gViewerWindow->getWindow()->getMinimized()
&& LLStartUp::getStartupState() == STATE_STARTED
@@ -1323,7 +1309,6 @@ bool LLAppViewer::mainLoop()
ms_sleep(500);
}
const F64 max_idle_time = run_multiple_threads ? 0.0 : llmin(.005*10.0*gFrameIntervalSeconds, 0.005); // 50ms/second, no more than 5ms/frame
idleTimer.reset();
while(1)
@@ -1385,7 +1370,6 @@ bool LLAppViewer::mainLoop()
pingMainloopTimeout("Main:End");
}
}
catch(std::bad_alloc)
{
@@ -1741,7 +1725,8 @@ bool LLAppViewer::cleanup()
writeDebugInfo();
if(!gDirUtilp->getLindenUserDir(true).empty())
LLViewerMedia::saveCookieFile();
LLViewerMedia::saveCookieFile();
// Stop the plugin read thread if it's running.
LLPluginProcessParent::setUseReadThread(false);
// Stop curl responder call backs.
@@ -1761,11 +1746,11 @@ bool LLAppViewer::cleanup()
pending += LLAppViewer::getTextureFetch()->update(1); // unpauses the texture fetch thread
pending += LLVFSThread::updateClass(0);
pending += LLLFSThread::updateClass(0);
if (pending == 0)
if (!pending)
{
break;
}
if (idleTimer.getElapsedTimeF64() >= max_idle_time)
else if (idleTimer.getElapsedTimeF64() >= max_idle_time)
{
llwarns << "Quitting with pending background tasks." << llendl;
break;
@@ -1930,6 +1915,7 @@ bool LLAppViewer::initThreads()
// Mesh streaming and caching
gMeshRepo.init();
// *FIX: no error handling here!
return true;
}
@@ -2125,20 +2111,14 @@ bool LLAppViewer::initConfiguration()
if(!loadSettingsFromDirectory(settings_w, "Default", set_defaults))
{
std::ostringstream msg;
msg << "Second Life could not load its default settings file. \n"
<< "The installation may be corrupted. \n";
OSMessageBox(
msg.str(),
LLStringUtil::null,
OSMB_OK);
msg << "Unable to load default settings file. The installation may be corrupted.";
OSMessageBox(msg.str(),LLStringUtil::null,OSMB_OK);
return false;
}
LLUICtrlFactory::getInstance()->setupPaths(); // setup paths for LLTrans based on settings files only
LLTrans::parseStrings("strings.xml", default_trans_args);
//COA vars in gSavedSettings will be linked to gSavedPerAccountSettings entries that will be created if not present.
//Signals will be shared between linked vars.
gSavedSettings.connectCOAVars(gSavedPerAccountSettings);
@@ -2168,8 +2148,8 @@ bool LLAppViewer::initConfiguration()
// timeout for mac and linux. There is no call stack info
// on these platform to help debug.
#ifndef LL_RELEASE_FOR_DOWNLOAD
gSavedSettings.setBOOL("WatchdogEnabled", FALSE);
gSavedSettings.setBOOL("QAMode", TRUE );
gSavedSettings.setBOOL("WatchdogEnabled", 0);
#endif
#ifndef LL_WINDOWS
@@ -2213,6 +2193,7 @@ bool LLAppViewer::initConfiguration()
LLControlGroupCLP clp;
std::string cmd_line_config = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,
"cmd_line.xml");
clp.configure(cmd_line_config, &gSavedSettings);
if(!initParseCommandLine(clp))
@@ -2248,9 +2229,8 @@ bool LLAppViewer::initConfiguration()
clp.notify();
// Register the core crash option as soon as we can
// if we want gdb post-mortum on cores we need to be up and running
// if we want gdb post-mortem on cores we need to be up and running
// ASAP or we might miss init issue etc.
if(clp.hasOption("disablecrashlogger"))
{
llwarns << "Crashes will be handled by system, stack trace logs and crash logger are both disabled" <<llendl;
@@ -2278,36 +2258,6 @@ bool LLAppViewer::initConfiguration()
return false;
}
//////////////////////////
// Apply settings...
if(clp.hasOption("setdefault"))
{
//const LLCommandLineParser::token_vector_t& setdefault = clp.getOption("setdefault");
//if(0x1 & setdefault.size())
//{
// llwarns << "Invalid '--setdefault' parameter count." << llendl;
//}
//else
//{
// LLCommandLineParser::token_vector_t::const_iterator itr = setdefault.begin();
// for(; itr != setdefault.end(); ++itr)
// {
// const std::string& name = *itr;
// const std::string& value = *(++itr);
// LLControlVariable* c = gSettings[sGlobalSettingsName]->getControl(name);
// if(c)
// {
// c->setDefault(value);
// }
// else
// {
// llwarns << "'--setdefault' specified with unknown setting: '"
// << name << "'." << llendl;
// }
// }
//}
}
if(clp.hasOption("set"))
{
const LLCommandLineParser::token_vector_t& set_values = clp.getOption("set");
@@ -2551,7 +2501,7 @@ bool LLAppViewer::initConfiguration()
if ( nextLoginLocation.length() )
{
LLURLSimString::setString( nextLoginLocation );
};
}
gLastRunVersion = gSavedSettings.getString("LastRunVersion");
@@ -2743,7 +2693,6 @@ void LLAppViewer::writeSystemInfo()
gDebugInfo["SLLog"] = LLError::logFileName();
gDebugInfo["ClientInfo"]["Name"] = gVersionChannel;
gDebugInfo["ClientInfo"]["MajorVersion"] = gVersionMajor;
gDebugInfo["ClientInfo"]["MinorVersion"] = gVersionMinor;
gDebugInfo["ClientInfo"]["PatchVersion"] = gVersionPatch;
@@ -2751,7 +2700,6 @@ void LLAppViewer::writeSystemInfo()
gDebugInfo["CAFilename"] = gDirUtilp->getCAFile();
//need to put in something to lie about this stuff
gDebugInfo["CPUInfo"]["CPUString"] = gSysCPU.getCPUString();
gDebugInfo["CPUInfo"]["CPUFamily"] = gSysCPU.getFamily();
gDebugInfo["CPUInfo"]["CPUMhz"] = gSysCPU.getMHz();
@@ -2764,10 +2712,10 @@ void LLAppViewer::writeSystemInfo()
gDebugInfo["OSInfo"] = getOSInfo().getOSStringSimple();
// The user is not logged on yet, but record the current grid choice login url
// which may have been the intended grid. This can b
// which may have been the intended grid.
gDebugInfo["GridName"] = LLViewerLogin::getInstance()->getGridLabel();
// *FIX:Mani - move this ddown in llappviewerwin32
// *FIX:Mani - move this down in llappviewerwin32
#ifdef LL_WINDOWS
DWORD thread_id = GetCurrentThreadId();
gDebugInfo["MainloopThreadID"] = (S32)thread_id;
@@ -2817,6 +2765,7 @@ void LLAppViewer::handleViewerCrash()
llinfos << "Last render pool type: " << LLPipeline::sCurRenderPoolType << llendl ;
LLMemory::logMemoryInfo(true) ;
//print out recorded call stacks if there are any.
LLError::LLCallStacks::print();
@@ -2845,7 +2794,6 @@ void LLAppViewer::handleViewerCrash()
//We already do this in writeSystemInfo(), but we do it again here to make /sure/ we have a version
//to check against no matter what
gDebugInfo["ClientInfo"]["Name"] = gVersionChannel;
gDebugInfo["ClientInfo"]["MajorVersion"] = gVersionMajor;
@@ -3023,13 +2971,11 @@ void LLAppViewer::initMarkerFile()
std::string llerror_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, LLERROR_MARKER_FILE_NAME);
std::string error_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ERROR_MARKER_FILE_NAME);
if (LLAPRFile::isExist(mMarkerFileName, LL_APR_RB) && !anotherInstanceRunning())
{
gLastExecEvent = LAST_EXEC_FROZE;
LL_INFOS("MarkerFile") << "Exec marker found: program froze on previous execution" << LL_ENDL;
}
if(LLAPRFile::isExist(logout_marker_file, LL_APR_RB))
{
gLastExecEvent = LAST_EXEC_LOGOUT_FROZE;
@@ -3741,17 +3687,6 @@ void LLAppViewer::loadNameCache()
{
if(gCacheName->importFile(cache_file)) return;
}
// Try to load from the legacy format. This should go away after a
// while. Phoenix 2008-01-30
#if 0
LLFILE* name_cache_fp = LLFile::fopen(name_cache, "r"); // Flawfinder: ignore
if (name_cache_fp)
{
gCacheName->importFile(name_cache_fp);
fclose(name_cache_fp);
}
#endif
}
void LLAppViewer::saveNameCache()
@@ -3804,6 +3739,7 @@ static LLFastTimer::DeclareTimer FTM_WORLD_UPDATE("Update World");
static LLFastTimer::DeclareTimer FTM_NETWORK("Network");
static LLFastTimer::DeclareTimer FTM_AGENT_NETWORK("Agent Network");
static LLFastTimer::DeclareTimer FTM_VLMANAGER("VL Manager");
///////////////////////////////////////////////////////
// idle()
//
@@ -3864,7 +3800,6 @@ void LLAppViewer::idle()
//
// Special case idle if still starting up
//
if (LLStartUp::getStartupState() < STATE_STARTED)
{
// Skip rest if idle startup returns false (essentially, no world yet)
@@ -3916,10 +3851,7 @@ void LLAppViewer::idle()
LLFastTimer t(FTM_AGENT_UPDATE);
// Send avatar and camera info
last_control_flags = gAgent.getControlFlags();
if(!gAgent.getPhantom())
{
send_agent_update(TRUE);
}
send_agent_update(TRUE);
agent_update_timer.reset();
}
}
@@ -3929,7 +3861,6 @@ void LLAppViewer::idle()
// Manage statistics
//
//
{
// Initialize the viewer_stats_timer with an already elapsed time
// of SEND_STATS_PERIOD so that the initial stats report will
@@ -4328,7 +4259,6 @@ void LLAppViewer::sendLogoutRequest()
{
if(!mLogoutRequestSent && gMessageSystem)
{
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_LogoutRequest);
msg->nextBlockFast(_PREHASH_AgentData);
@@ -4432,6 +4362,7 @@ static LLFastTimer::DeclareTimer FTM_RETRANSMIT("Retransmit");
static LLFastTimer::DeclareTimer FTM_TIMEOUT_CHECK("Timeout Check");
static LLFastTimer::DeclareTimer FTM_DYNAMIC_THROTTLE("Dynamic Throttle");
static LLFastTimer::DeclareTimer FTM_CHECK_REGION_CIRCUIT("Check Region Circuit");
void LLAppViewer::idleNetwork()
{
pingMainloopTimeout("idleNetwork");
@@ -4449,7 +4380,8 @@ void LLAppViewer::idleNetwork()
// Read all available packets from network
const S64 frame_count = gFrameCount; // U32->S64
F32 total_time = 0.0f;
while (gMessageSystem->checkAllMessages(frame_count, gServicePump))
while (gMessageSystem->checkAllMessages(frame_count, gServicePump))
{
if (gDoDisconnect)
{

View File

@@ -88,10 +88,6 @@
#include "lltrans.h"
// <edit>
#include "llviewercontrol.h"
// </edit>
// [RLVa:KB]
#include "rlvhandler.h"
// [/RLVa:KB]

View File

@@ -295,6 +295,7 @@ public:
mAvatarPauseHandles.clear();
mQualityMouseUpConnection.disconnect();
}
static void onClickDiscard(void* data);
static void onClickKeep(void* data);
static void onCommitSave(LLUICtrl* ctrl, void* data);
static void onClickNewSnapshot(void* data);
@@ -1851,7 +1852,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater, bool de
floater->childSetVisible("keep_aspect", is_advance);
floater->childSetVisible("type_label3", is_advance);
floater->childSetVisible("format_label", is_advance && is_local);
floater->childSetVisible("local_format_combo", is_local);
floater->childSetVisible("local_format_combo", is_advance && is_local);
floater->childSetVisible("layer_types", is_advance);
floater->childSetVisible("layer_type_label", is_advance);
floater->childSetVisible("aspect_one_label", is_advance);
@@ -1863,7 +1864,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater, bool de
floater->childSetVisible("keep_open_check", is_advance);
floater->childSetVisible("freeze_time_check", is_advance);
floater->childSetVisible("auto_snapshot_check", is_advance);
floater->childSetVisible("image_quality_slider", show_slider);
floater->childSetVisible("image_quality_slider", is_advance && show_slider);
floater->childSetVisible("temp_check", is_advance);
BOOL got_bytes = previewp && previewp->getDataSize() > 0;
@@ -1931,6 +1932,23 @@ void LLFloaterSnapshot::Impl::checkAutoSnapshot(LLSnapshotLivePreview* previewp,
}
}
// static
void LLFloaterSnapshot::Impl::onClickDiscard(void* data)
{
LLFloaterSnapshot* view = static_cast<LLFloaterSnapshot*>(data);
if (gSavedSettings.getBOOL("FreezeTime"))
{
LLSnapshotLivePreview* previewp = view->impl.getPreviewView();
if (previewp && previewp->getShowFreezeFrameSnapshot())
previewp->showFreezeFrameSnapshot(false);
view->impl.freezeTime(false);
}
else
{
view->close();
}
}
// static
void LLFloaterSnapshot::Impl::onCommitFeedResolution(LLUICtrl* ctrl, void* data)
{
@@ -2924,6 +2942,7 @@ BOOL LLFloaterSnapshot::postBuild()
childSetAction("send_btn", Impl::onClickKeep, this);
childSetAction("feed_btn", Impl::onClickKeep, this);
childSetCommitCallback("save_btn", Impl::onCommitSave, this);
childSetAction("discard_btn", Impl::onClickDiscard, this);
childSetCommitCallback("image_quality_slider", Impl::onCommitQuality, this);
childSetValue("image_quality_slider", gSavedSettings.getS32("SnapshotQuality"));

View File

@@ -31,79 +31,26 @@
*/
#include "llviewerprecompiledheaders.h"
#include <utility> // for std::pair<>
#include "llinventorypanel.h"
#include "llpanelobjectinventory.h"
#include "llinventorybridge.h"
#include "message.h"
#include "llagent.h"
#include "llagentwearables.h"
#include "llcallingcard.h"
#include "llcheckboxctrl.h" // for radio buttons
#include "llfoldervieweventlistener.h"
#include "llnotificationsutil.h"
#include "llradiogroup.h"
#include "llspinctrl.h"
#include "lltextbox.h"
#include "llui.h"
#include "llviewercontrol.h"
#include "llfirstuse.h"
#include "llfloateravatarinfo.h"
#include "llfloaterchat.h"
#include "llfloatercustomize.h"
#include "llfloaterinventory.h"
#include "llfloaterproperties.h"
#include "llfocusmgr.h"
#include "llfolderview.h"
#include "llgesturemgr.h"
#include "lliconctrl.h"
#include "llimview.h"
#include "llinventoryfunctions.h"
#include "llinventorybridge.h"
#include "llinventoryclipboard.h"
#include "llinventorymodelbackgroundfetch.h"
#include "lllineeditor.h"
#include "llinventorypanel.h"
#include "llmakeoutfitdialog.h"
#include "llmenugl.h"
#include "llpreviewanim.h"
#include "llpreviewgesture.h"
#include "llpreviewlandmark.h"
#include "llpreviewnotecard.h"
#include "llpreviewscript.h"
#include "llpreviewsound.h"
#include "llpreviewtexture.h"
#include "llresmgr.h"
#include "llscrollcontainer.h"
#include "llimview.h"
#include "lltooldraganddrop.h"
#include "llviewertexturelist.h"
#include "llviewerinventory.h"
#include "llviewerobjectlist.h"
#include "llviewerwindow.h"
#include "llnotificationsutil.h"
#include "llpanelmaininventory.h"
#include "llpanelobjectinventory.h"
#include "llpreview.h" // For LLMultiPreview
#include "llfoldervieweventlistener.h"
#include "lltrans.h"
#include "llvoavatarself.h"
#include "llwearable.h"
#include "llwearablelist.h"
#include "llviewermessage.h"
#include "llviewerregion.h"
#include "lltabcontainer.h"
#include "lluictrlfactory.h"
#include "llselectmgr.h"
// <edit>
#include "lllocalinventory.h"
#include "statemachine/aifilepicker.h"
// </edit>
extern LLUUID gAgentID;
using namespace LLOldEvents;
const std::string NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not)
const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably not)
const std::string NEW_GESTURE_NAME = "New Gesture"; // *TODO:Translate? (probably not)
typedef LLMemberListener<LLPanelObjectInventory> object_inventory_listener_t;
typedef LLMemberListener<LLInventoryView> inventory_listener_t;
typedef LLMemberListener<LLInventoryPanel> inventory_panel_listener_t;
@@ -116,42 +63,39 @@ bool doToSelected(LLFolderView* folder, std::string action)
folder->startRenamingSelectedItem();
return true;
}
if ("delete" == action)
else if ("delete" == action)
{
folder->removeSelectedItems();
return true;
}
if ("copy" == action || "cut" == action)
else if ("copy" == action || "cut" == action)
{
LLInventoryClipboard::instance().reset();
}
std::set<LLUUID> selected_items = folder->getSelectionList();
LLMultiPreview* multi_previewp = NULL;
LLMultiProperties* multi_propertiesp = NULL;
LLMultiFloater* multi_floaterp = NULL;
if (("task_open" == action || "open" == action) && selected_items.size() > 1)
{
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
multi_previewp = new LLMultiPreview(LLRect(left, top, left + 300, top - 100));
gFloaterView->addChild(multi_previewp);
multi_floaterp = new LLMultiPreview(LLRect(left, top, left + 300, top - 100));
gFloaterView->addChild(multi_floaterp);
LLFloater::setFloaterHost(multi_previewp);
LLFloater::setFloaterHost(multi_floaterp);
}
else if (("task_properties" == action || "properties" == action) && selected_items.size() > 1)
{
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
multi_propertiesp = new LLMultiProperties(LLRect(left, top, left + 100, top - 100));
gFloaterView->addChild(multi_propertiesp);
multi_floaterp = new LLMultiProperties(LLRect(left, top, left + 100, top - 100));
gFloaterView->addChild(multi_floaterp);
LLFloater::setFloaterHost(multi_propertiesp);
LLFloater::setFloaterHost(multi_floaterp);
}
std::set<LLUUID>::iterator set_iter;
@@ -167,13 +111,9 @@ bool doToSelected(LLFolderView* folder, std::string action)
}
LLFloater::setFloaterHost(NULL);
if (multi_previewp)
if (multi_floaterp)
{
multi_previewp->open();
}
else if (multi_propertiesp)
{
multi_propertiesp->open(); /*Flawfinder: ignore*/
multi_floaterp->open();
}
return true;
@@ -183,12 +123,11 @@ class LLDoToSelectedPanel : public object_inventory_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
std::string action = userdata.asString();
LLPanelObjectInventory *panel = mPtr;
LLFolderView* folder = panel->getRootFolder();
if(!folder) return true;
return doToSelected(folder, action);
return doToSelected(folder, userdata.asString());
}
};
@@ -196,12 +135,11 @@ class LLDoToSelectedFloater : public inventory_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
std::string action = userdata.asString();
LLInventoryPanel *panel = mPtr->getPanel();
LLFolderView* folder = panel->getRootFolder();
if(!folder) return true;
return doToSelected(folder, action);
return doToSelected(folder, userdata.asString());
}
};
@@ -209,12 +147,11 @@ class LLDoToSelected : public inventory_panel_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
std::string action = userdata.asString();
LLInventoryPanel *panel = mPtr;
LLFolderView* folder = panel->getRootFolder();
if(!folder) return true;
return doToSelected(folder, action);
return doToSelected(folder, userdata.asString());
}
};
@@ -356,7 +293,7 @@ void do_create(LLInventoryModel *model, LLInventoryPanel *ptr, std::string type,
else if ("lsl" == type)
{
LLUUID parent_id = self ? self->getUUID() : model->findCategoryUUIDForType(LLFolderType::FT_LSL_TEXT);
ptr->createNewItem(NEW_LSL_NAME,
ptr->createNewItem(LLTrans::getString("New Script"),
parent_id,
LLAssetType::AT_LSL_TEXT,
LLInventoryType::IT_LSL,
@@ -365,7 +302,7 @@ void do_create(LLInventoryModel *model, LLInventoryPanel *ptr, std::string type,
else if ("notecard" == type)
{
LLUUID parent_id = self ? self->getUUID() : model->findCategoryUUIDForType(LLFolderType::FT_NOTECARD);
ptr->createNewItem(NEW_NOTECARD_NAME,
ptr->createNewItem(LLTrans::getString("New Note"),
parent_id,
LLAssetType::AT_NOTECARD,
LLInventoryType::IT_NOTECARD,
@@ -374,7 +311,7 @@ void do_create(LLInventoryModel *model, LLInventoryPanel *ptr, std::string type,
else if ("gesture" == type)
{
LLUUID parent_id = self ? self->getUUID() : model->findCategoryUUIDForType(LLFolderType::FT_GESTURE);
ptr->createNewItem(NEW_GESTURE_NAME,
ptr->createNewItem(LLTrans::getString("New Gesture"),
parent_id,
LLAssetType::AT_GESTURE,
LLInventoryType::IT_GESTURE,
@@ -383,11 +320,11 @@ void do_create(LLInventoryModel *model, LLInventoryPanel *ptr, std::string type,
else if ("outfit" == type)
{
new LLMakeOutfitDialog(false);
return;
}
else
{
LLWearableType::EType wear_type = LLWearableType::typeNameToType(type);
LLAgentWearables::createWearable(wear_type, false, self ? self->getUUID() : LLUUID::null);
LLAgentWearables::createWearable(LLWearableType::typeNameToType(type), false, self ? self->getUUID() : LLUUID::null);
}
ptr->getRootFolder()->setNeedsAutoRename(TRUE);
}
@@ -411,14 +348,6 @@ class LLDoCreateFloater : public inventory_listener_t
LLInventoryModel* model = mPtr->getPanel()->getModel();
if(!model) return false;
std::string type = userdata.asString();
// <edit>
if(type == "pretend")
{
LLFloaterNewLocalInventory* floater = new LLFloaterNewLocalInventory();
floater->center();
}
else
// </edit>
do_create(model, mPtr->getPanel(), type);
return true;
}
@@ -484,28 +413,6 @@ class LLSetSortBy : public inventory_listener_t
}
};
// <edit>
class LLLoadInvCacheFloater : public inventory_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
LLInventoryModel* model = mPtr->getPanel()->getModel();
if(!model) return false;
AIFilePicker* filepicker = AIFilePicker::create();
filepicker->open(FFLOAD_INVGZ, "", "invgz");
filepicker->run(boost::bind(&LLLoadInvCacheFloater::filepicker_callback, this, filepicker));
return true;
}
void filepicker_callback(AIFilePicker* filepicker)
{
if(filepicker->hasFilename())
{
LLLocalInventory::loadInvCache(filepicker->getFilename());
}
}
};
class LLRefreshInvModel : public inventory_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -522,8 +429,7 @@ class LLSetSearchType : public inventory_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
std::string toggle = userdata.asString();
U32 flags = mPtr->getActivePanel()->getRootFolder()->toggleSearchType(toggle);
U32 flags = mPtr->getActivePanel()->getRootFolder()->toggleSearchType(userdata.asString());
mPtr->getControl("Inventory.SearchName")->setValue((BOOL)(flags & 1));
mPtr->getControl("Inventory.SearchDesc")->setValue((BOOL)(flags & 2));
mPtr->getControl("Inventory.SearchCreator")->setValue((BOOL)(flags & 4));
@@ -546,8 +452,7 @@ class LLBeginIMSession : public inventory_panel_listener_t
LLDynamicArray<LLUUID> members;
EInstantMessage type = IM_SESSION_CONFERENCE_START;
std::set<LLUUID>::const_iterator iter;
for (iter = selected_items.begin(); iter != selected_items.end(); iter++)
for (std::set<LLUUID>::const_iterator iter = selected_items.begin(); iter != selected_items.end(); iter++)
{
LLUUID item = *iter;
@@ -577,11 +482,10 @@ class LLBeginIMSession : public inventory_panel_listener_t
{
// create the session
gIMMgr->setFloaterOpen(TRUE);
S32 i;
LLAvatarTracker& at = LLAvatarTracker::instance();
LLUUID id;
for(i = 0; i < count; ++i)
for(S32 i = 0; i < count; ++i)
{
id = item_array.get(i)->getCreatorUUID();
if(at.isBuddyOnline(id))
@@ -660,27 +564,28 @@ class LLAttachObject : public inventory_panel_listener_t
break;
}
}
if (attachmentp == NULL)
if (!attachmentp)
{
return true;
}
LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getItem(id);
if(item && gInventory.isObjectDescendentOf(id, gInventory.getRootFolderID()))
if (LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getItem(id))
{
rez_attachment(item, attachmentp); // don't replace if called from an "Attach To..." menu
}
else if(item && item->isFinished())
{
// must be in library. copy it to our inventory and put it on.
LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(rez_attachment_cb, _1, attachmentp, false));
copy_inventory_item(
gAgent.getID(),
item->getPermissions().getOwner(),
item->getUUID(),
LLUUID::null,
std::string(),
cb);
if(gInventory.isObjectDescendentOf(id, gInventory.getRootFolderID()))
{
rez_attachment(item, attachmentp); // don't replace if called from an "Attach To..." menu
}
else if(item->isFinished())
{
// must be in library. copy it to our inventory and put it on.
LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(rez_attachment_cb, _1, attachmentp, false));
copy_inventory_item(
gAgentID,
item->getPermissions().getOwner(),
item->getUUID(),
LLUUID::null,
std::string(),
cb);
}
}
gFocusMgr.setKeyboardFocus(NULL);
@@ -688,16 +593,6 @@ class LLAttachObject : public inventory_panel_listener_t
}
};
/*
class LL : public listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
return true;
}
};
*/
void init_object_inventory_panel_actions(LLPanelObjectInventory *panel)
{
(new LLDoToSelectedPanel())->registerListener(panel, "Inventory.DoToSelected");
@@ -709,9 +604,6 @@ void init_inventory_actions(LLInventoryView *floater)
(new LLCloseAllFoldersFloater())->registerListener(floater, "Inventory.CloseAllFolders");
(new LLEmptyTrashFloater())->registerListener(floater, "Inventory.EmptyTrash");
(new LLDoCreateFloater())->registerListener(floater, "Inventory.DoCreate");
// <edit>
(new LLLoadInvCacheFloater())->registerListener(floater, "Inventory.LoadInvCache");
// </edit>
(new LLNewWindow())->registerListener(floater, "Inventory.NewWindow");
(new LLShowFilters())->registerListener(floater, "Inventory.ShowFilters");
@@ -719,7 +611,6 @@ void init_inventory_actions(LLInventoryView *floater)
(new LLSetSortBy())->registerListener(floater, "Inventory.SetSortBy");
(new LLSetSearchType())->registerListener(floater, "Inventory.SetSearchType");
}
void init_inventory_panel_actions(LLInventoryPanel *panel)

File diff suppressed because it is too large Load Diff

View File

@@ -74,7 +74,6 @@ BOOL LLInventoryModel::sFirstTimeInViewer2 = TRUE;
///----------------------------------------------------------------------------
//BOOL decompress_file(const char* src_filename, const char* dst_filename);
const char CACHE_FORMAT_STRING[] = "%s.inv";
struct InventoryIDPtrLess
@@ -531,8 +530,8 @@ private:
LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
LLFolderType::EType preferred_type,
const std::string& pname,
void (*callback)(const LLSD&, void*)/*=NULL*/,
void* user_data/*=NULL*/)
void (*callback)(const LLSD&, void*), //Default to NULL
void* user_data) //Default to NULL
{
LLUUID id;
if(!isInventoryUsable())
@@ -1100,9 +1099,6 @@ void LLInventoryModel::changeItemParent(LLViewerInventoryItem* item,
const LLUUID& new_parent_id,
BOOL restamp)
{
// <edit>
bool send_parent_update = gInventory.isObjectDescendentOf(item->getUUID(), gInventory.getRootFolderID());
// </edit>
if (item->getParentUUID() == new_parent_id)
{
LL_DEBUGS("Inventory") << "'" << item->getName() << "' (" << item->getUUID()
@@ -1123,7 +1119,7 @@ void LLInventoryModel::changeItemParent(LLViewerInventoryItem* item,
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
new_item->setParent(new_parent_id);
// <edit>
if(send_parent_update)
if(gInventory.isObjectDescendentOf(item->getUUID(), gInventory.getRootFolderID()))
// </edit>
new_item->updateParentOnServer(restamp);
updateItem(new_item);
@@ -1254,7 +1250,7 @@ void LLInventoryModel::purgeDescendentsOf(const LLUUID& id)
return;
}
LLPointer<LLViewerInventoryCategory> cat = getCategory(id);
if(cat.notNull())
if (cat.notNull())
{
if (LLInventoryClipboard::instance().hasContents() && LLInventoryClipboard::instance().isCutMode())
{
@@ -1290,7 +1286,7 @@ void LLInventoryModel::purgeDescendentsOf(const LLUUID& id)
// Fast purge
// do the cache accounting
llinfos << "LLInventoryModel::purgeDescendentsOf " << cat->getName()
<< llendl;
<< llendl;
S32 descendents = cat->getDescendentCount();
if(descendents > 0)
{
@@ -1325,6 +1321,7 @@ void LLInventoryModel::purgeDescendentsOf(const LLUUID& id)
{
deleteObject(items.get(i)->getUUID());
}
count = categories.count();
for(S32 i = 0; i < count; ++i)
{
@@ -1377,7 +1374,6 @@ void LLInventoryModel::notifyObservers()
iter != mObservers.end(); )
{
LLInventoryObserver* observer = *iter;
observer->changed(mModifyMask);
// safe way to increment since changed may delete entries! (@!##%@!@&*!)
@@ -1563,7 +1559,7 @@ void LLInventoryModel::addCategory(LLViewerInventoryCategory* category)
}
// try to localize default names first. See EXT-8319, EXT-7051.
//category->localizeName();
category->localizeName();
// Insert category uniquely into the map
mCategoryMap[category->getUUID()] = category; // LLPointer will deref and delete the old one
@@ -1643,7 +1639,7 @@ void LLInventoryModel::accountForUpdate(const LLCategoryUpdate& update) const
cat->setVersion(++version);
lldebugs << "accounted: '" << cat->getName() << "' "
<< version << " with " << descendents_actual
<< " descendents." << llendl;
<< " descendents." << llendl;
}
}
if(!accounted)
@@ -1890,7 +1886,7 @@ bool LLInventoryModel::loadSkeleton(
LLViewerInventoryCategory* tcat = *cit;
// we can safely ignore anything loaded from file, but
// not sent down in the skeleton.
// not sent down in the skeleton. Must have been removed from inventory.
if (cit == not_cached)
{
continue;
@@ -2351,73 +2347,6 @@ bool LLUUIDAndName::operator>(const LLUUIDAndName& rhs) const
return (mID > rhs.mID);
}
// Given the current state of the inventory items, figure out the
// clone information. *FIX: This is sub-optimal, since we can insert
// this information snurgically, but this makes sure the implementation
// works before we worry about optimization.
//void LLInventoryModel::recalculateCloneInformation()
//{
// //dumpInventory();
//
// // This implements a 'multi-map' like structure to keep track of
// // how many clones we find.
// typedef LLDynamicArray<LLViewerInventoryItem*> viewer_item_array_t;
// typedef std::map<LLUUIDAndName, viewer_item_array_t*> clone_map_t;
// clone_map_t clone_map;
// LLUUIDAndName id_and_name;
// viewer_item_array_t* clones = NULL;
// LLViewerInventoryItem* item = NULL;
// for(item = (LLViewerInventoryItem*)mItemMap.getFirstData();
// item != NULL;
// item = (LLViewerInventoryItem*)mItemMap.getNextData())
// {
// if(item->getType() == LLAssetType::AT_CALLINGCARD)
// {
// // if it's a calling card, we key off of the creator id, not
// // the asset id.
// id_and_name.mID = item->getCreatorUUID();
// }
// else
// {
// // if it's not a calling card, we key clones from the
// // asset id.
// id_and_name.mID = item->getAssetUUID();
// }
// if(id_and_name.mID == LLUUID::null)
// {
// continue;
// }
// id_and_name.mName = item->getName();
// if(clone_map.checkData(id_and_name))
// {
// clones = clone_map.getData(id_and_name);
// }
// else
// {
// clones = new viewer_item_array_t;
// clone_map.addData(id_and_name, clones);
// }
// clones->put(item);
// }
//
// S32 count = 0;
// for(clones = clone_map.getFirstData();
// clones != NULL;
// clones = clone_map.getNextData())
// {
// count = clones->count();
// for(S32 i = 0; i < count; i++)
// {
// item = clones->get(i);
// item->setCloneCount(count - 1);
// //clones[i] = NULL;
// }
// delete clones;
// }
// clone_map.removeAllData();
// //dumpInventory();
//}
// static
bool LLInventoryModel::loadFromFile(const std::string& filename,
LLInventoryModel::cat_array_t& categories,
@@ -2480,7 +2409,7 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
{
if (is_cache_obsolete)
break;
LLPointer<LLViewerInventoryItem> inv_item = new LLViewerInventoryItem;
if( inv_item->importFileLocal(file) )
{
@@ -3002,7 +2931,7 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
// << titem->getParentUUID() << llendl;
U32 callback_id;
msg->getU32Fast(_PREHASH_ItemData, _PREHASH_CallbackID, callback_id);
if(titem->getUUID().notNull())
if(titem->getUUID().notNull() ) // && callback_id.notNull() )
{
items.push_back(titem);
cblist.push_back(InventoryCallbackInfo(callback_id, titem->getUUID()));
@@ -3116,6 +3045,7 @@ void LLInventoryModel::processInventoryDescendents(LLMessageSystem* msg,void**)
msg->getS32("AgentData", "Version", version);
S32 descendents;
msg->getS32("AgentData", "Descendents", descendents);
S32 i;
S32 count = msg->getNumberOfBlocksFast(_PREHASH_FolderData);
LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id);
@@ -3421,7 +3351,8 @@ void LLInventoryModel::updateItemsOrder(LLInventoryModel::item_array_t& items, c
}
//* @param[in] items vector of items in order to be saved.
/*void LLInventoryModel::saveItemsOrder(const LLInventoryModel::item_array_t& items)
/*
void LLInventoryModel::saveItemsOrder(const LLInventoryModel::item_array_t& items)
{
int sortField = 0;
@@ -3441,8 +3372,8 @@ void LLInventoryModel::updateItemsOrder(LLInventoryModel::item_array_t& items, c
}
notifyObservers();
}*/
}
*/
// See also LLInventorySort where landmarks in the Favorites folder are sorted.
/*class LLViewerInventoryItemSort
{
@@ -3466,7 +3397,8 @@ public:
// * @param source_item_id - LLUUID of the source item to be moved into new position
// * @param target_item_id - LLUUID of the target item before which source item should be placed.
/*void LLInventoryModel::rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id)
/*
void LLInventoryModel::rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id)
{
LLInventoryModel::cat_array_t cats;
LLInventoryModel::item_array_t items;
@@ -3481,7 +3413,10 @@ public:
updateItemsOrder(items, source_item_id, target_item_id);
saveItemsOrder(items);
}*/
}
*/
//----------------------------------------------------------------------------
// *NOTE: DEBUG functionality
void LLInventoryModel::dumpInventory() const
{
@@ -3493,8 +3428,8 @@ void LLInventoryModel::dumpInventory() const
if(cat)
{
llinfos << " " << cat->getUUID() << " '" << cat->getName() << "' "
<< cat->getVersion() << " " << cat->getDescendentCount() << " parent: " << cat->getParentUUID()
<< LL_ENDL;
<< cat->getVersion() << " " << cat->getDescendentCount() << " parent: " << cat->getParentUUID()
<< llendl;
}
else
{

View File

@@ -102,12 +102,12 @@ void LLInventoryCompletionObserver::changed(U32 mask)
{
// scan through the incomplete items and move or erase them as
// appropriate.
if(!mIncomplete.empty())
if (!mIncomplete.empty())
{
for(uuid_vec_t::iterator it = mIncomplete.begin(); it < mIncomplete.end(); )
for (uuid_vec_t::iterator it = mIncomplete.begin(); it < mIncomplete.end(); )
{
LLViewerInventoryItem* item = gInventory.getItem(*it);
if(!item)
const LLViewerInventoryItem* item = gInventory.getItem(*it);
if (!item)
{
it = mIncomplete.erase(it);
continue;
@@ -120,7 +120,7 @@ void LLInventoryCompletionObserver::changed(U32 mask)
}
++it;
}
if(mIncomplete.empty())
if (mIncomplete.empty())
{
done();
}
@@ -129,7 +129,7 @@ void LLInventoryCompletionObserver::changed(U32 mask)
void LLInventoryCompletionObserver::watchItem(const LLUUID& id)
{
if(id.notNull())
if (id.notNull())
{
mIncomplete.push_back(id);
}
@@ -158,6 +158,7 @@ void LLInventoryFetchItemsObserver::changed(U32 mask)
// appropriate.
if (!mIncomplete.empty())
{
// Have we exceeded max wait time?
bool timeout_expired = mFetchingPeriod.hasExpired();
@@ -201,6 +202,7 @@ void LLInventoryFetchItemsObserver::changed(U32 mask)
void fetch_items_from_llsd(const LLSD& items_llsd)
{
if (!items_llsd.size() || gDisconnected) return;
LLSD body;
body[0]["cap_name"] = "FetchInventory2";
body[1]["cap_name"] = "FetchLib2";
@@ -244,7 +246,7 @@ void fetch_items_from_llsd(const LLSD& items_llsd)
for (S32 j=0; j<body[i]["items"].size(); j++)
{
LLSD item_entry = body[i]["items"][j];
if(start_new_message)
if (start_new_message)
{
start_new_message = FALSE;
msg->newMessageFast(_PREHASH_FetchInventory);
@@ -255,13 +257,13 @@ void fetch_items_from_llsd(const LLSD& items_llsd)
msg->nextBlockFast(_PREHASH_InventoryData);
msg->addUUIDFast(_PREHASH_OwnerID, item_entry["owner_id"].asUUID());
msg->addUUIDFast(_PREHASH_ItemID, item_entry["item_id"].asUUID());
if(msg->isSendFull(NULL))
if (msg->isSendFull(NULL))
{
start_new_message = TRUE;
gAgent.sendReliableMessage();
}
}
if(!start_new_message)
if (!start_new_message)
{
gAgent.sendReliableMessage();
}
@@ -335,8 +337,8 @@ void LLInventoryFetchDescendentsObserver::changed(U32 mask)
{
for (uuid_vec_t::iterator it = mIncomplete.begin(); it < mIncomplete.end();)
{
LLViewerInventoryCategory* cat = gInventory.getCategory(*it);
if(!cat)
const LLViewerInventoryCategory* cat = gInventory.getCategory(*it);
if (!cat)
{
it = mIncomplete.erase(it);
continue;
@@ -465,7 +467,7 @@ void LLInventoryFetchComboObserver::startFetch()
void LLInventoryExistenceObserver::watchItem(const LLUUID& id)
{
if(id.notNull())
if (id.notNull())
{
mMIA.push_back(id);
}
@@ -475,12 +477,12 @@ void LLInventoryExistenceObserver::changed(U32 mask)
{
// scan through the incomplete items and move or erase them as
// appropriate.
if(!mMIA.empty())
if (!mMIA.empty())
{
for(uuid_vec_t::iterator it = mMIA.begin(); it < mMIA.end(); )
for (uuid_vec_t::iterator it = mMIA.begin(); it < mMIA.end(); )
{
LLViewerInventoryItem* item = gInventory.getItem(*it);
if(!item)
if (!item)
{
++it;
continue;
@@ -488,7 +490,7 @@ void LLInventoryExistenceObserver::changed(U32 mask)
mExist.push_back(*it);
it = mMIA.erase(it);
}
if(mMIA.empty())
if (mMIA.empty())
{
done();
}
@@ -589,7 +591,7 @@ void LLInventoryAddedObserver::changed(U32 mask)
LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_InventoryData);
for(S32 i = 0; i < num_blocks; ++i)
for (S32 i = 0; i < num_blocks; ++i)
{
titem->unpackMessage(msg, _PREHASH_InventoryData, i);
if (!(titem->getUUID().isNull()))
@@ -639,18 +641,18 @@ LLInventoryTransactionObserver::LLInventoryTransactionObserver(const LLTransacti
void LLInventoryTransactionObserver::changed(U32 mask)
{
if(mask & LLInventoryObserver::ADD)
if (mask & LLInventoryObserver::ADD)
{
// This could be it - see if we are processing a bulk update
LLMessageSystem* msg = gMessageSystem;
if(msg->getMessageName()
if (msg->getMessageName()
&& (0 == strcmp(msg->getMessageName(), "BulkUpdateInventory")))
{
// we have a match for the message - now check the
// transaction id.
LLUUID id;
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_TransactionID, id);
if(id == mTransactionID)
if (id == mTransactionID)
{
// woo hoo, we found it
uuid_vec_t folders;
@@ -658,19 +660,19 @@ void LLInventoryTransactionObserver::changed(U32 mask)
S32 count;
count = msg->getNumberOfBlocksFast(_PREHASH_FolderData);
S32 i;
for(i = 0; i < count; ++i)
for (i = 0; i < count; ++i)
{
msg->getUUIDFast(_PREHASH_FolderData, _PREHASH_FolderID, id, i);
if(id.notNull())
if (id.notNull())
{
folders.push_back(id);
}
}
count = msg->getNumberOfBlocksFast(_PREHASH_ItemData);
for(i = 0; i < count; ++i)
for (i = 0; i < count; ++i)
{
msg->getUUIDFast(_PREHASH_ItemData, _PREHASH_ItemID, id, i);
if(id.notNull())
if (id.notNull())
{
items.push_back(id);
}

View File

@@ -113,10 +113,10 @@ static bool nameSplit(const std::string& full, std::string& first, std::string&
first = fragments[0];
if (fragments.size() == 1)
{
if (gHippoGridManager->getConnectedGrid()->isSecondLife())
last = "Resident";
else
if (gHippoGridManager->getConnectedGrid()->isAurora())
last = "";
else
last = "Resident";
}
else
last = fragments[1];

View File

@@ -2490,6 +2490,18 @@ void LLPanelObject::onCopyRot(void* user_data)
gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(stringVec));
}
namespace
{
bool texturePermsCheck(const LLUUID& id)
{
return (id.notNull() && !gInventory.isObjectDescendentOf(id, gInventory.getLibraryRootFolderID())
&& id != LLUUID(gSavedSettings.getString("UIImgWhiteUUID"))
&& id != LLUUID(gSavedSettings.getString("UIImgInvisibleUUID"))
&& id != LLUUID(std::string("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903")) // alpha
&& LLPanelObject::findItemID(id).isNull());
}
}
void LLPanelObject::onCopyParams(void* user_data)
{
LLPanelObject* self = (LLPanelObject*) user_data;
@@ -2500,36 +2512,19 @@ void LLPanelObject::onCopyParams(void* user_data)
LLViewerObject* objp = self->mObject;
mClipboardFlexiParams = (LLFlexibleObjectData*)objp->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE);
mClipboardLightParams = (LLLightParams*)objp->getParameterEntry(LLNetworkData::PARAMS_LIGHT);
mClipboardSculptParams = (LLSculptParams*)objp->getParameterEntry(LLNetworkData::PARAMS_SCULPT);
mClipboardFlexiParams = objp->getParameterEntryInUse(LLNetworkData::PARAMS_FLEXIBLE) ? static_cast<LLFlexibleObjectData*>(objp->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE)) : NULL;
mClipboardLightParams = objp->getParameterEntryInUse(LLNetworkData::PARAMS_LIGHT) ? static_cast<LLLightParams*>(objp->getParameterEntry(LLNetworkData::PARAMS_LIGHT)) : NULL;
mClipboardSculptParams = objp->getParameterEntryInUse(LLNetworkData::PARAMS_SCULPT) ? static_cast<LLSculptParams*>(objp->getParameterEntry(LLNetworkData::PARAMS_SCULPT)) : NULL;
if (mClipboardSculptParams)
{
LLUUID id = mClipboardSculptParams->getSculptTexture();
// Texture perms check
if (!(id.isNull() || gInventory.isObjectDescendentOf(id, gInventory.getLibraryRootFolderID())
|| id == LLUUID(gSavedSettings.getString("UIImgWhiteUUID"))
|| id == LLUUID(gSavedSettings.getString("UIImgInvisibleUUID"))
|| id == LLUUID(std::string("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"))) // alpha
&& findItemID(id).isNull())
{
mClipboardSculptParams->setSculptTexture(LLUUID(SCULPT_DEFAULT_TEXTURE));
}
const LLUUID id = mClipboardSculptParams->getSculptTexture();
if (id != LLUUID(SCULPT_DEFAULT_TEXTURE) && !texturePermsCheck(id))
mClipboardSculptParams = NULL;
}
mClipboardLightImageParams = (LLLightImageParams*)objp->getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE);
if (mClipboardLightImageParams)
mClipboardLightImageParams = objp->getParameterEntryInUse(LLNetworkData::PARAMS_LIGHT_IMAGE) ? static_cast<LLLightImageParams*>(objp->getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE)) : NULL;
if (mClipboardLightImageParams && texturePermsCheck(mClipboardLightImageParams->getLightTexture()))
{
LLUUID id = mClipboardLightImageParams->getLightTexture();
// Texture perms check
if (!(id.isNull() || gInventory.isObjectDescendentOf(id, gInventory.getLibraryRootFolderID())
|| id == LLUUID(gSavedSettings.getString("UIImgWhiteUUID"))
|| id == LLUUID(gSavedSettings.getString("UIImgInvisibleUUID"))
|| id == LLUUID("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"))) // alpha
{
mClipboardLightImageParams->setLightTexture(findItemID(id));
}
mClipboardLightImageParams = NULL;
}
}
@@ -2542,16 +2537,27 @@ void LLPanelObject::onPasteParams(void* user_data)
LLViewerObject* objp = self->mObject;
objp->updateVolume(mClipboardVolumeParams);
if (mClipboardFlexiParams)
objp->setParameterEntry(LLNetworkData::PARAMS_FLEXIBLE, *mClipboardFlexiParams, true);
else
objp->setParameterEntryInUse(LLNetworkData::PARAMS_FLEXIBLE, false, true);
if (mClipboardLightParams)
objp->setParameterEntry(LLNetworkData::PARAMS_LIGHT, *mClipboardLightParams, true);
else
objp->setParameterEntryInUse(LLNetworkData::PARAMS_LIGHT, false, true);
if (mClipboardSculptParams)
objp->setParameterEntry(LLNetworkData::PARAMS_SCULPT, *mClipboardSculptParams, true);
else
objp->setParameterEntryInUse(LLNetworkData::PARAMS_SCULPT, false, true);
if (mClipboardLightImageParams)
objp->setParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE, *mClipboardLightImageParams, true);
else
objp->setParameterEntryInUse(LLNetworkData::PARAMS_LIGHT_IMAGE, false, true);
objp->updateVolume(mClipboardVolumeParams);
}
void LLPanelObject::onLinkObj(void* user_data)

File diff suppressed because it is too large Load Diff

View File

@@ -3,10 +3,9 @@
* @brief LLToolPie class header file
*
* $LicenseInfo:firstyear=2001&license=viewergpl$
*
* Second Life Viewer Source Code
* Copyright (c) 2001-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
@@ -42,9 +41,11 @@ class LLObjectSelection;
class LLToolPie : public LLTool, public LLSingleton<LLToolPie>
{
LOG_CLASS(LLToolPie);
public:
LLToolPie( );
// Virtual functions inherited from LLMouseHandler
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
@@ -58,36 +59,61 @@ public:
virtual void stopEditing();
virtual void onMouseCaptureLost();
virtual void handleSelect();
virtual void handleDeselect();
virtual LLTool* getOverrideTool(MASK mask);
LLPickInfo& getPick() { return mPick; }
// [RLVa:KB] - Checked: 2010-03-06 (RLVa-1.2.0c) | Added: RLVa-1.2.0a
LLPickInfo& getHoverPick() { return mHoverPick; }
// [/RLVa:KB]
U8 getClickAction() { return mClickAction; }
LLViewerObject* getClickActionObject() { return mClickActionObject; }
LLObjectSelection* getLeftClickSelection() { return (LLObjectSelection*)mLeftClickSelection; }
void resetSelection();
void walkToClickedLocation();
void blockClickToWalk() { mBlockClickToWalk = true; }
void stopClickToWalk();
static void leftMouseCallback(const LLPickInfo& pick_info);
static void rightMouseCallback(const LLPickInfo& pick_info);
static void selectionPropertiesReceived();
private:
BOOL outsideSlop(S32 x, S32 y, S32 start_x, S32 start_y);
BOOL pickAndShowMenu(BOOL edit_menu);
BOOL useClickAction(BOOL always_show, MASK mask, LLViewerObject* object,
LLViewerObject* parent);
BOOL outsideSlop (S32 x, S32 y, S32 start_x, S32 start_y);
BOOL handleLeftClickPick();
BOOL handleRightClickPick();
BOOL useClickAction (MASK mask, LLViewerObject* object,LLViewerObject* parent);
void showVisualContextMenuEffect();
ECursorType cursorFromObject(LLViewerObject* object);
bool handleMediaClick(const LLPickInfo& info);
bool handleMediaHover(const LLPickInfo& info);
bool handleMediaMouseUp();
void steerCameraWithMouse(S32 x, S32 y);
void startCameraSteering();
void stopCameraSteering();
bool inCameraSteerMode();
private:
BOOL mPieMouseButtonDown;
BOOL mGrabMouseButtonDown;
BOOL mMouseOutsideSlop; // for this drag, has mouse moved outside slop region
bool mMouseButtonDown;
bool mMouseOutsideSlop; // for this drag, has mouse moved outside slop region
S32 mMouseDownX;
S32 mMouseDownY;
S32 mMouseSteerX;
S32 mMouseSteerY;
bool mClockwise;
bool mBlockClickToWalk;
LLUUID mMediaMouseCaptureID;
LLPickInfo mPick;
LLPickInfo mHoverPick;
LLPickInfo mSteerPick;
LLPointer<LLViewerObject> mClickActionObject;
U8 mClickAction;
LLSafeHandle<LLObjectSelection> mLeftClickSelection;
const LLCachedControl<bool> mClickActionBuyEnabled;
const LLCachedControl<bool> mClickActionPayEnabled;
};
#endif

View File

@@ -33,7 +33,6 @@
#ifndef LL_LLVIEWERGESTURE_H
#define LL_LLVIEWERGESTURE_H
#include "llanimationstates.h"
#include "lluuid.h"
#include "llstring.h"
#include "lldarray.h"

View File

@@ -63,11 +63,140 @@
#include "llfloatercustomize.h"
// <edit>
#include "llappviewer.h" // System Folders
// </edit>
// Two do-nothing ops for use in callbacks.
void no_op_inventory_func(const LLUUID&) {}
void no_op() {}
// </edit>
///----------------------------------------------------------------------------
/// Helper class to store special inventory item names and their localized values.
///----------------------------------------------------------------------------
class LLLocalizedInventoryItemsDictionary : public LLSingleton<LLLocalizedInventoryItemsDictionary>
{
public:
std::map<std::string, std::string> mInventoryItemsDict;
LLLocalizedInventoryItemsDictionary()
{
mInventoryItemsDict["New Shape"] = LLTrans::getString("New Shape");
mInventoryItemsDict["New Skin"] = LLTrans::getString("New Skin");
mInventoryItemsDict["New Hair"] = LLTrans::getString("New Hair");
mInventoryItemsDict["New Eyes"] = LLTrans::getString("New Eyes");
mInventoryItemsDict["New Shirt"] = LLTrans::getString("New Shirt");
mInventoryItemsDict["New Pants"] = LLTrans::getString("New Pants");
mInventoryItemsDict["New Shoes"] = LLTrans::getString("New Shoes");
mInventoryItemsDict["New Socks"] = LLTrans::getString("New Socks");
mInventoryItemsDict["New Jacket"] = LLTrans::getString("New Jacket");
mInventoryItemsDict["New Gloves"] = LLTrans::getString("New Gloves");
mInventoryItemsDict["New Undershirt"] = LLTrans::getString("New Undershirt");
mInventoryItemsDict["New Underpants"] = LLTrans::getString("New Underpants");
mInventoryItemsDict["New Skirt"] = LLTrans::getString("New Skirt");
mInventoryItemsDict["New Alpha"] = LLTrans::getString("New Alpha");
mInventoryItemsDict["New Tattoo"] = LLTrans::getString("New Tattoo");
mInventoryItemsDict["New Physics"] = LLTrans::getString("New Physics");
mInventoryItemsDict["Invalid Wearable"] = LLTrans::getString("Invalid Wearable");
mInventoryItemsDict["New Gesture"] = LLTrans::getString("New Gesture");
mInventoryItemsDict["New Script"] = LLTrans::getString("New Script");
mInventoryItemsDict["New Folder"] = LLTrans::getString("New Folder");
mInventoryItemsDict["New Note"] = LLTrans::getString("New Note");
mInventoryItemsDict["Contents"] = LLTrans::getString("Contents");
mInventoryItemsDict["Gesture"] = LLTrans::getString("Gesture");
mInventoryItemsDict["Male Gestures"] = LLTrans::getString("Male Gestures");
mInventoryItemsDict["Female Gestures"] = LLTrans::getString("Female Gestures");
mInventoryItemsDict["Other Gestures"] = LLTrans::getString("Other Gestures");
mInventoryItemsDict["Speech Gestures"] = LLTrans::getString("Speech Gestures");
mInventoryItemsDict["Common Gestures"] = LLTrans::getString("Common Gestures");
//predefined gestures
//male
mInventoryItemsDict["Male - Excuse me"] = LLTrans::getString("Male - Excuse me");
mInventoryItemsDict["Male - Get lost"] = LLTrans::getString("Male - Get lost"); // double space after Male. EXT-8319
mInventoryItemsDict["Male - Blow kiss"] = LLTrans::getString("Male - Blow kiss");
mInventoryItemsDict["Male - Boo"] = LLTrans::getString("Male - Boo");
mInventoryItemsDict["Male - Bored"] = LLTrans::getString("Male - Bored");
mInventoryItemsDict["Male - Hey"] = LLTrans::getString("Male - Hey");
mInventoryItemsDict["Male - Laugh"] = LLTrans::getString("Male - Laugh");
mInventoryItemsDict["Male - Repulsed"] = LLTrans::getString("Male - Repulsed");
mInventoryItemsDict["Male - Shrug"] = LLTrans::getString("Male - Shrug");
mInventoryItemsDict["Male - Stick tougue out"] = LLTrans::getString("Male - Stick tougue out");
mInventoryItemsDict["Male - Wow"] = LLTrans::getString("Male - Wow");
//female
mInventoryItemsDict["Female - Chuckle"] = LLTrans::getString("Female - Chuckle");
mInventoryItemsDict["Female - Cry"] = LLTrans::getString("Female - Cry");
mInventoryItemsDict["Female - Embarrassed"] = LLTrans::getString("Female - Embarrassed");
mInventoryItemsDict["Female - Excuse me"] = LLTrans::getString("Female - Excuse me");
mInventoryItemsDict["Female - Get lost"] = LLTrans::getString("Female - Get lost"); // double space after Female. EXT-8319
mInventoryItemsDict["Female - Blow kiss"] = LLTrans::getString("Female - Blow kiss");
mInventoryItemsDict["Female - Boo"] = LLTrans::getString("Female - Boo");
mInventoryItemsDict["Female - Bored"] = LLTrans::getString("Female - Bored");
mInventoryItemsDict["Female - Hey"] = LLTrans::getString("Female - Hey");
mInventoryItemsDict["Female - Hey baby"] = LLTrans::getString("Female - Hey baby");
mInventoryItemsDict["Female - Laugh"] = LLTrans::getString("Female - Laugh");
mInventoryItemsDict["Female - Looking good"] = LLTrans::getString("Female - Looking good");
mInventoryItemsDict["Female - Over here"] = LLTrans::getString("Female - Over here");
mInventoryItemsDict["Female - Please"] = LLTrans::getString("Female - Please");
mInventoryItemsDict["Female - Repulsed"] = LLTrans::getString("Female - Repulsed");
mInventoryItemsDict["Female - Shrug"] = LLTrans::getString("Female - Shrug");
mInventoryItemsDict["Female - Stick tougue out"]= LLTrans::getString("Female - Stick tougue out");
mInventoryItemsDict["Female - Wow"] = LLTrans::getString("Female - Wow");
//common
mInventoryItemsDict["/bow"] = LLTrans::getString("/bow");
mInventoryItemsDict["/clap"] = LLTrans::getString("/clap");
mInventoryItemsDict["/count"] = LLTrans::getString("/count");
mInventoryItemsDict["/extinguish"] = LLTrans::getString("/extinguish");
mInventoryItemsDict["/kmb"] = LLTrans::getString("/kmb");
mInventoryItemsDict["/muscle"] = LLTrans::getString("/muscle");
mInventoryItemsDict["/no"] = LLTrans::getString("/no");
mInventoryItemsDict["/no!"] = LLTrans::getString("/no!");
mInventoryItemsDict["/paper"] = LLTrans::getString("/paper");
mInventoryItemsDict["/pointme"] = LLTrans::getString("/pointme");
mInventoryItemsDict["/pointyou"] = LLTrans::getString("/pointyou");
mInventoryItemsDict["/rock"] = LLTrans::getString("/rock");
mInventoryItemsDict["/scissor"] = LLTrans::getString("/scissor");
mInventoryItemsDict["/smoke"] = LLTrans::getString("/smoke");
mInventoryItemsDict["/stretch"] = LLTrans::getString("/stretch");
mInventoryItemsDict["/whistle"] = LLTrans::getString("/whistle");
mInventoryItemsDict["/yes"] = LLTrans::getString("/yes");
mInventoryItemsDict["/yes!"] = LLTrans::getString("/yes!");
mInventoryItemsDict["afk"] = LLTrans::getString("afk");
mInventoryItemsDict["dance1"] = LLTrans::getString("dance1");
mInventoryItemsDict["dance2"] = LLTrans::getString("dance2");
mInventoryItemsDict["dance3"] = LLTrans::getString("dance3");
mInventoryItemsDict["dance4"] = LLTrans::getString("dance4");
mInventoryItemsDict["dance5"] = LLTrans::getString("dance5");
mInventoryItemsDict["dance6"] = LLTrans::getString("dance6");
mInventoryItemsDict["dance7"] = LLTrans::getString("dance7");
mInventoryItemsDict["dance8"] = LLTrans::getString("dance8");
}
/**
* Finds passed name in dictionary and replaces it with found localized value.
*
* @param object_name - string to be localized.
* @return true if passed name was found and localized, false otherwise.
*/
bool localizeInventoryObjectName(std::string& object_name)
{
LL_DEBUGS("InventoryLocalize") << "Searching for localization: " << object_name << LL_ENDL;
std::map<std::string, std::string>::const_iterator dictionary_iter = mInventoryItemsDict.find(object_name);
bool found = dictionary_iter != mInventoryItemsDict.end();
if(found)
{
object_name = dictionary_iter->second;
LL_DEBUGS("InventoryLocalize") << "Found, new name is: " << object_name << LL_ENDL;
}
return found;
}
};
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
@@ -165,13 +294,10 @@ void LLViewerInventoryItem::cloneViewerItem(LLPointer<LLViewerInventoryItem>& ne
void LLViewerInventoryItem::removeFromServer()
{
// <edit> this check is ghetto
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot)))
{
return;
}
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot))) return;
// </edit>
llinfos << "Removing inventory item " << mUUID << " from server."
<< llendl;
lldebugs << "Removing inventory item " << mUUID << " from server."
<< llendl;
LLInventoryModel::LLCategoryUpdate up(mParentUUID, -1);
gInventory.accountForUpdate(up);
@@ -189,22 +315,14 @@ void LLViewerInventoryItem::removeFromServer()
void LLViewerInventoryItem::updateServer(BOOL is_new) const
{
// <edit>
//if(gAgent.getID() != mPermissions.getOwner())
//{
// // *FIX: deal with this better.
// llwarns << "LLViewerInventoryItem::updateServer() - for unowned item"
// << llendl;
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot)))
{
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot))) return;
// </edit>
return;
}
if(!mIsComplete)
{
// *FIX: deal with this better.
llwarns << "LLViewerInventoryItem::updateServer() - for incomplete item"
<< llendl;
LLNotificationsUtil::add("IncompleteInventoryItem");
LLNotificationsUtil::add("IncompleteInventoryItem");
return;
}
if(gAgent.getID() != mPermissions.getOwner())
@@ -286,6 +404,9 @@ void LLViewerInventoryItem::fetchFromServer(void) const
BOOL LLViewerInventoryItem::unpackMessage(LLSD item)
{
BOOL rv = LLInventoryItem::fromLLSD(item);
LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName);
mIsComplete = TRUE;
return rv;
}
@@ -294,6 +415,9 @@ BOOL LLViewerInventoryItem::unpackMessage(LLSD item)
BOOL LLViewerInventoryItem::unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num)
{
BOOL rv = LLInventoryItem::unpackMessage(msg, block, block_num);
LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName);
mIsComplete = TRUE;
return rv;
}
@@ -429,7 +553,7 @@ void LLViewerInventoryCategory::copyViewerCategory(const LLViewerInventoryCatego
{
copyCategory(other);
mOwnerID = other->mOwnerID;
mVersion = other->mVersion;
setVersion(other->getVersion());
mDescendentCount = other->mDescendentCount;
mDescendentsRequested = other->mDescendentsRequested;
}
@@ -505,7 +629,7 @@ bool LLViewerInventoryCategory::fetch()
// <edit>
if((mUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot))) return false;
// </edit>
if((VERSION_UNKNOWN == mVersion) &&
if((VERSION_UNKNOWN == getVersion()) &&
(!mDescendentsRequested.getStarted() ||
mDescendentsRequested.hasExpired())) //Expired check prevents multiple downloads.
{
@@ -720,6 +844,12 @@ void LLViewerInventoryCategory::changeType(LLFolderType::EType new_folder_type)
setPreferredType(new_folder_type);
gInventory.addChangedMask(LLInventoryObserver::LABEL, folder_id);
}
void LLViewerInventoryCategory::localizeName()
{
LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName);
}
///----------------------------------------------------------------------------
/// Local function definitions
///----------------------------------------------------------------------------
@@ -858,6 +988,25 @@ void create_inventory_item(const LLUUID& agent_id, const LLUUID& session_id,
U32 next_owner_perm,
LLPointer<LLInventoryCallback> cb)
{
//check if name is equal to one of special inventory items names
//EXT-5839
std::string server_name = name;
{
std::map<std::string, std::string>::const_iterator dictionary_iter;
for (dictionary_iter = LLLocalizedInventoryItemsDictionary::getInstance()->mInventoryItemsDict.begin();
dictionary_iter != LLLocalizedInventoryItemsDictionary::getInstance()->mInventoryItemsDict.end();
dictionary_iter++)
{
const std::string& localized_name = dictionary_iter->second;
if(localized_name == name)
{
server_name = dictionary_iter->first;
}
}
}
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_CreateInventoryItem);
msg->nextBlock(_PREHASH_AgentData);
@@ -871,7 +1020,7 @@ void create_inventory_item(const LLUUID& agent_id, const LLUUID& session_id,
msg->addS8Fast(_PREHASH_Type, (S8)asset_type);
msg->addS8Fast(_PREHASH_InvType, (S8)inv_type);
msg->addU8Fast(_PREHASH_WearableType, (U8)wtype);
msg->addStringFast(_PREHASH_Name, name);
msg->addStringFast(_PREHASH_Name, server_name);
msg->addStringFast(_PREHASH_Description, desc);
gAgent.sendReliableMessage();

View File

@@ -3,10 +3,9 @@
* @brief Declaration of the inventory bits that only used on the viewer.
*
* $LicenseInfo:firstyear=2002&license=viewergpl$
*
* Second Life Viewer Source Code
* 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
@@ -211,7 +210,7 @@ public:
// Returns true if a fetch was issued.
bool fetch();
// used to help make cacheing more robust - for example, if
// used to help make caching more robust - for example, if
// someone is getting 4 packets but logs out after 3. the viewer
// may never know the cache is wrong.
enum { DESCENDENT_COUNT_UNKNOWN = -1 };
@@ -219,7 +218,7 @@ public:
void setDescendentCount(S32 descendents) { mDescendentCount = descendents; }
// file handling on the viewer. These are not meant for anything
// other than cacheing.
// other than caching.
bool exportFileLocal(LLFILE* fp) const;
bool importFileLocal(LLFILE* fp);
void determineFolderType();
@@ -227,6 +226,7 @@ public:
private:
friend class LLInventoryModel;
void localizeName(); // intended to be called from the LLInventoryModel
protected:
LLUUID mOwnerID;
@@ -327,6 +327,7 @@ extern LLInventoryCallbackManager gInventoryCallbacks;
#define NOT_WEARABLE (LLWearableType::EType)0
// *TODO: Find a home for these
void create_inventory_item(const LLUUID& agent_id, const LLUUID& session_id,
const LLUUID& parent, const LLTransactionID& transaction_id,
const std::string& name,

File diff suppressed because it is too large Load Diff

View File

@@ -83,14 +83,13 @@ void confirm_replace_attachment(S32 option, void* user_data);
void handle_detach_from_avatar(void* user_data);
void attach_label(std::string& label, void* user_data);
void detach_label(std::string& label, void* user_data);
BOOL object_selected_and_point_valid(void* user_data);
BOOL object_attached(void* user_data);
void handle_detach(void*);
// [SL:KB] - Patch: Inventory-AttachmentEdit - Checked: 2010-08-25 (Catznip-2.2.0a) | Added: Catznip-2.1.2a
void handle_attachment_edit(const LLUUID& idItem);
// [/SL:KB]
BOOL enable_god_full(void* user_data);
BOOL enable_god_liaison(void* user_data);
BOOL enable_god_customer_service(void* user_data);
BOOL enable_god_basic(void* user_data);
void handle_show_newest_map(void*);
void set_underclothes_menu_options();
void exchange_callingcard(const LLUUID& dest_id);
@@ -98,6 +97,9 @@ void exchange_callingcard(const LLUUID& dest_id);
void handle_gestures(void*);
void handle_sit_down(void*);
void handle_object_build(void*);
void handle_object_touch();
bool enable_object_open();
void handle_object_open();
bool visible_take_object();
bool enable_object_take_copy();
@@ -108,9 +110,18 @@ bool enable_object_delete();
void handle_buy();
void handle_take();
void handle_take_copy();
void handle_look_at_selection(const LLSD& param);
void handle_object_return();
void handle_object_delete();
// Takes avatar UUID, or if no UUID passed, uses last selected object
void handle_avatar_freeze(const LLSD& avatar_id);
// Takes avatar UUID, or if no UUID passed, uses last selected object
void handle_avatar_eject(const LLSD& avatar_id);
bool enable_freeze_eject(const LLSD& avatar_id);
// Can anyone take a free copy of the object?
// *TODO: Move to separate file
bool anyone_copy_selection(LLSelectNode* nodep);
@@ -123,9 +134,9 @@ void handle_save_snapshot(void *);
void handle_toggle_flycam();
void handle_fake_away_status(void*);
bool handle_sit_or_stand();
bool handle_give_money_dialog();
bool handle_object_open();
void handle_object_sit_or_stand();
void handle_give_money_dialog();
bool enable_pay_object();
bool enable_buy_object();
bool handle_go_to();
@@ -158,19 +169,12 @@ extern LLViewerMenuHolderGL* gMenuHolder;
extern LLMenuBarGL* gLoginMenuBarView;
// Pie menus
extern LLPieMenu *gPieSelf;
extern LLPieMenu *gPieAvatar;
extern LLPieMenu *gPieObject;
extern LLPieMenu *gPieAttachment;
extern LLPieMenu *gPieLand;
extern LLPieMenu* gPieRate;
// Pie menus
extern LLPieMenu *gPieSelfSimple;
extern LLPieMenu *gPieAvatarSimple;
extern LLPieMenu *gPieObjectSimple;
extern LLPieMenu *gPieAttachmentSimple;
extern LLPieMenu *gPieLandSimple;
extern LLPieMenu *gPieSelf;
extern LLPieMenu *gPieAvatar;
extern LLPieMenu *gPieObject;
extern LLPieMenu *gPieAttachment;
extern LLPieMenu *gPieLand;
extern LLPieMenu *gPieRate;
// Needed to build menus when attachment site list available
extern LLMenuGL* gAttachSubMenu;

View File

@@ -3,10 +3,9 @@
* @brief Dumping ground for viewer-side message system callbacks.
*
* $LicenseInfo:firstyear=2002&license=viewergpl$
*
* Second Life Viewer Source Code
* 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
@@ -34,80 +33,53 @@
#include "llviewermessage.h"
#include <boost/lexical_cast.hpp>
#include <deque>
#include "llimagejpeg.h"
#include "llagentui.h"
#include "llanimationstates.h"
#include "llaudioengine.h"
#include "llavatarnamecache.h"
#include "indra_constants.h"
#include "../lscript/lscript_byteformat.h" //Need LSCRIPTRunTimePermissionBits and SCRIPT_PERMISSION_*
#include "llfloaterbump.h"
#include "llassetstorage.h"
#include "llcachename.h"
#include "llchat.h"
#include "lldbstrings.h"
#include "lleconomy.h"
#include "llfocusmgr.h"
#include "llfollowcamparams.h"
#include "llinstantmessage.h"
#include "llquantize.h"
#include "llregionflags.h"
#include "llinventorydefines.h"
#include "llregionhandle.h"
#include "llsdserialize.h"
#include "llstring.h"
#include "llteleportflags.h"
#include "lltracker.h"
#include "lltransactionflags.h"
#include "llvfile.h"
#include "llvfs.h"
#include "llxfermanager.h"
#include "mean_collision_data.h"
#include "message.h"
#include "sound_ids.h"
#include "lleventtimer.h"
#include "llmd5.h"
#include "llagent.h"
#include "llagentcamera.h"
#include "llcallingcard.h"
#include "llconsole.h"
#include "llvieweraudio.h"
#include "llviewercontrol.h"
#include "lldrawpool.h"
#include "llfirstuse.h"
#include "llfloateranimpreview.h"
#include "llfloaterbump.h"
#include "llfloaterbuycurrency.h"
#include "llfloaterbuyland.h"
#include "llfloaterchat.h"
#include "llfloatergroupinfo.h"
#include "llfloaterimagepreview.h"
#include "llfloaterinventory.h"
#include "llfloaterland.h"
#include "llfloaterregioninfo.h"
#include "llfloaterlandholdings.h"
#include "llurldispatcher.h"
#include "llfloatermute.h"
#include "llfloaterpostcard.h"
#include "llfloaterpreference.h"
#include "llfloaterteleporthistory.h"
#include "llfollowcam.h"
#include "llgroupnotify.h"
#include "llhudeffect.h"
#include "llhudeffecttrail.h"
#include "llhudmanager.h"
#include "llimpanel.h"
#include "llinventorydefines.h"
#include "llinventorybridge.h"
#include "llinventorymodel.h"
#include "llinventorypanel.h"
#include "llmenugl.h"
#include "llmutelist.h"
#include "llnotify.h"
#include "llnotifications.h"
#include "llnotificationsutil.h"
#include "llpanelgrouplandmoney.h"
#include "llpanelmaininventory.h"
#include "llselectmgr.h"
#include "llstartup.h"
#include "llsky.h"
@@ -115,48 +87,33 @@
#include "llstatusbar.h"
#include "llimview.h"
#include "llfloateractivespeakers.h"
#include "lltexturestats.h"
#include "lltool.h"
#include "lltoolbar.h"
#include "lltoolmgr.h"
#include "lltrans.h"
#include "llfoldertype.h"
#include "llui.h" // for make_ui_sound
#include "lluploaddialog.h"
#include "llviewercamera.h"
#include "llviewerdisplay.h"
#include "llviewerfoldertype.h"
#include "llviewergenericmessage.h"
#include "llviewermenu.h"
#include "llviewerinventory.h"
#include "llviewerjoystick.h"
#include "llviewerobject.h"
#include "llviewerobjectlist.h"
#include "llviewerparcelmgr.h"
#include "llviewerpartsource.h"
#include "llviewerstats.h"
#include "llviewertexteditor.h"
#include "llviewerthrottle.h"
#include "llviewerwindow.h"
#include "llvlmanager.h"
#include "llvoavatar.h"
#include "llweb.h"
#include "llworld.h"
#include "pipeline.h"
#include "llappviewer.h"
#include "llfloaterworldmap.h"
#include "llviewerdisplay.h"
#include "llkeythrottle.h"
#include "llagentui.h"
#include "llviewerregion.h"
// <edit>
#include "llviewernetwork.h"
// </edit>
// [RLVa:KB]
// [RLVa:KB] - Checked: 2010-03-09 (RLVa-1.2.0a)
#include "llfloateravatarinfo.h" // Checked: 2009-07-08 (RLVa-1.0.0e)
#include "rlvhandler.h"
#include "rlvinventory.h"
#include "rlvui.h"
#include "rlvcommon.h"
// [/RLVa:KB]
#if SHY_MOD //Command handler
@@ -169,9 +126,6 @@
#include "sgversion.h"
#include "m7wlinterface.h"
#include "llwlparammanager.h"
#include "llwaterparammanager.h"
#include "llgiveinventory.h"
#include <boost/tokenizer.hpp>
@@ -190,10 +144,6 @@ static const boost::regex NEWLINES("\\n{1}");
extern AIHTTPTimeoutPolicy authHandler_timeout;
// [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e)
#include "llfloateravatarinfo.h"
// [/RLVa:KB]
//
// Constants
//
@@ -314,9 +264,6 @@ static LLNotificationFunctorRegistration friendship_offer_callback_reg_nm("Offer
void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_group,
S32 trx_type, const std::string& desc)
{
// <edit>
//if(!region) return;
// </edit>
if(0 == amount || !region) return;
amount = abs(amount);
LL_INFOS("Messaging") << "give_money(" << uuid << "," << amount << ")"<< LL_ENDL;
@@ -1115,7 +1062,9 @@ public:
// If we now try to remove the inventory item, it will cause a nested
// notifyObservers() call, which won't work.
// So defer moving the item to trash until viewer gets idle (in a moment).
LLAppViewer::instance()->addOnIdleCallback(boost::bind(&LLInventoryModel::removeItem, &gInventory, mObjectID));
// Use removeObject() rather than removeItem() because at this level,
// the object could be either an item or a folder.
LLAppViewer::instance()->addOnIdleCallback(boost::bind(&LLInventoryModel::removeObject, &gInventory, mObjectID));
gInventory.removeObserver(this);
delete this;
}
@@ -1272,12 +1221,14 @@ void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name)
return;
}
////////////////////////////////////////////////////////////////////////////////
// Highlight item
//Not sure about this check. Could make it easy to miss incoming items.
//don't dick with highlight while the user is working
//if(inventory_has_focus && !user_is_away)
// break;
LL_DEBUGS("Messaging") << "Highlighting" << item->getUUID() << LL_ENDL;
//highlight item
LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus();
view->getPanel()->setSelection(item->getUUID(), TAKE_FOCUS_NO);
@@ -1381,7 +1332,7 @@ LLSD LLOfferInfo::asLLSD()
}
bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& response)
{
{
LLChat chat;
std::string log_message;
S32 button = LLNotificationsUtil::getSelectedOption(notification, response);
@@ -1415,8 +1366,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
msg->addUUIDFast(_PREHASH_RegionID, LLUUID::null);
msg->addVector3Fast(_PREHASH_Position, gAgent.getPositionAgent());
LLInventoryObserver* opener = NULL;
LLViewerInventoryCategory* catp = NULL;
catp = (LLViewerInventoryCategory*)gInventory.getCategory(mObjectID);
LLViewerInventoryCategory* catp = gInventory.getCategory(mObjectID);
LLViewerInventoryItem* itemp = NULL;
if(!catp)
{
@@ -1921,6 +1871,36 @@ static std::string clean_name_from_im(const std::string& name, EInstantMessage t
}
}
static std::string clean_name_from_task_im(const std::string& msg,
BOOL from_group)
{
boost::smatch match;
static const boost::regex returned_exp(
"(.*been returned to your inventory lost and found folder by )(.+)( (from|near).*)");
if (boost::regex_match(msg, match, returned_exp))
{
// match objects are 1-based for groups
std::string final = match[1].str();
std::string name = match[2].str();
// Don't try to clean up group names
if (!from_group)
{
if (LLAvatarNameCache::useDisplayNames())
{
// ...just convert to username
final += LLCacheName::buildUsername(name);
}
else
{
// ...strip out legacy "Resident" name
final += LLCacheName::cleanFullName(name);
}
}
final += match[3].str();
return final;
}
return msg;
}
void notification_display_name_callback(const LLUUID& id,
const LLAvatarName& av_name,
@@ -1931,6 +1911,25 @@ void notification_display_name_callback(const LLUUID& id,
substitutions["NAME"] = av_name.mDisplayName;
LLNotificationsUtil::add(name, substitutions, payload);
}
// Callback for name resolution of a god/estate message
void god_message_name_cb(const LLAvatarName& av_name, LLChat chat, std::string message)
{
std::string name;
LLAvatarNameCache::getPNSName(av_name, name);
LLSD args;
args["NAME"] = name;
args["MESSAGE"] = message;
LLNotificationsUtil::add("GodMessage", args);
// Treat like a system message and put in chat history.
chat.mText = name + ": " + message;
// Claim to be from a local agent so it doesn't go into console.
LLFloaterChat::addChat(chat, false, true);
}
void process_improved_im(LLMessageSystem *msg, void **user_data)
{
if (gNoRender)
@@ -2006,6 +2005,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
{
name = LLTrans::getString("Unnamed");
}
// Preserve the unaltered name for use in group notice mute checking.
std::string original_name = name;
// IDEVO convert new-style "Resident" names for display
name = clean_name_from_im(name, dialog);
@@ -2019,6 +2022,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|| dialog == IM_FROM_TASK && LLMuteList::getInstance()->isMuted(session_id);
BOOL is_linden = LLMuteList::getInstance()->isLinden(name);
BOOL is_owned_by_me = FALSE;
BOOL is_friend = (LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL) ? false : true;
BOOL accept_im_from_only_friend = gSavedSettings.getBOOL("VoiceCallsFriendsOnly");
LLUUID computed_session_id = LLIMMgr::computeSessionID(dialog,from_id);
@@ -2290,10 +2295,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
// do nothing -- don't distract newbies in
// Prelude with global IMs
}
// [RLVa:KB] - Checked: 2010-03-27 (RLVa-1.1.3a) | Modified: RLVa-1.2.0b
else if ( (rlv_handler_t::isEnabled()) && (offline == IM_ONLINE) && ("@version" == message) )
// [RLVa:KB] - Checked: 2011-05-28 (RLVa-1.4.0a) | Modified: RLVa-1.4.0a
else if ( (rlv_handler_t::isEnabled()) && (offline == IM_ONLINE) && ("@version" == message) &&
(!is_muted) && ((!accept_im_from_only_friend) || (is_friend)) )
{
// TODO-RLVa: [RLVa-1.2.1] Should we send our version string if the other party is muted?
RlvUtil::sendBusyMessage(from_id, RlvStrings::getVersion(), session_id);
// We won't receive a typing stop message, so do that manually (see comment at the end of LLFloaterIMPanel::sendMsg)
LLPointer<LLIMInfo> im_info = new LLIMInfo(gMessageSystem);
@@ -2360,41 +2365,24 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
}
else if (to_id.isNull())
{
// [RLVa:KB] - Version: 1.23.4 | Checked: 2009-07-08 (RLVa-1.0.0e)
// Filter region messages that weren't sent by a Linden
if ( (rlv_handler_t::isEnabled()) && (LLMuteList::getInstance()) &&
(!LLMuteList::getInstance()->isLinden(name)) && (from_id != gAgent.getID()) )
{
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
RlvUtil::filterLocation(message);
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
{
name = RlvStrings::getAnonym(name);
RlvUtil::filterNames(message);
}
}
// [/RLVa:KB]
// Message to everyone from GOD
args["NAME"] = name;
args["MESSAGE"] = message;
LLNotificationsUtil::add("GodMessage", args);
// Treat like a system message and put in chat history.
// Claim to be from a local agent so it doesn't go into
// console.
chat.mText = name + separator_string + message.substr(message_offset);
BOOL local_agent = TRUE;
LLFloaterChat::addChat(chat, FALSE, local_agent);
// Message to everyone from GOD, look up the fullname since
// server always slams name to legacy names
LLAvatarNameCache::get(from_id, boost::bind(god_message_name_cb, _2, chat, message));
}
else
{
// standard message, not from system
bool mute_im = is_muted;
if(accept_im_from_only_friend&&!is_friend)
{
mute_im = true;
}
// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0c) | Modified: RLVa-1.3.0c
// Don't block offline IMs, or IMs from Lindens
if ( (rlv_handler_t::isEnabled()) && (offline != IM_OFFLINE) && (!is_linden) && (!gRlvHandler.canReceiveIM(from_id)) )
{
if (!is_muted)
if (!mute_im)
RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM_REMOTE), session_id);
message = message.substr(0, message_offset) + RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM);
}
@@ -2407,11 +2395,25 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
args["[LONG_TIMESTAMP]"] = formatted_time(timestamp);
saved = LLTrans::getString("Saved_message", args);
}
buffer = separator_string + saved + message.substr(message_offset);
buffer = separator_string + saved + message.substr(message_offset);
LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
if (!is_muted || is_linden)
/*
bool mute_im = is_muted;
if (accept_im_from_only_friend && !is_friend)
{
if (!gIMMgr->isNonFriendSessionNotified(session_id))
{
std::string message = LLTrans::getString("IM_unblock_only_groups_friends");
gIMMgr->addMessage(session_id, from_id, name, message);
gIMMgr->addNotifiedNonFriendSessionID(session_id);
}
mute_im = true;
}
*/
if (!mute_im || is_linden)
{
gIMMgr->addMessage(
session_id,
@@ -2458,9 +2460,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
case IM_MESSAGEBOX:
{
// This is a block, modeless dialog.
// *TODO: Translate
//*TODO: Translate
args["MESSAGE"] = message;
LLNotificationsUtil::add("SystemMessage", args);
LLNotificationsUtil::add("SystemMessageTip", args);
}
break;
case IM_GROUP_NOTICE:
@@ -2493,6 +2495,26 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
break;
}
// The group notice packet does not have an AgentID. Obtain one from the name cache.
// If last name is "Resident" strip it out so the cache name lookup works.
U32 index = original_name.find(" Resident");
if (index != std::string::npos)
{
original_name = original_name.substr(0, index);
}
std::string legacy_name = gCacheName->buildLegacyName(original_name);
LLUUID agent_id;
gCacheName->getUUID(legacy_name, agent_id);
if (agent_id.isNull())
{
LL_WARNS("Messaging") << "buildLegacyName returned null while processing " << original_name << LL_ENDL;
}
else if (LLMuteList::getInstance()->isMuted(agent_id))
{
break;
}
notice_bin_bucket = (struct notice_bucket_full_t*) &binary_bucket[0];
U8 has_inventory = notice_bin_bucket->header.has_inventory;
U8 asset_type = notice_bin_bucket->header.asset_type;
@@ -2565,27 +2587,11 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
break;
case IM_GROUP_INVITATION:
{
// Read the binary bucket for more information.
struct invite_bucket_t
{
S32 membership_fee;
LLUUID role_id;
}* invite_bucket;
// Make sure the binary bucket is the correct size.
if (binary_bucket_size != sizeof(invite_bucket_t))
{
LL_WARNS("Messaging") << "Malformed group invite binary bucket" << LL_ENDL;
break;
}
invite_bucket = (struct invite_bucket_t*) &binary_bucket[0];
S32 membership_fee = ntohl(invite_bucket->membership_fee);
// NaCl - Antispam
if(antispam || gSavedSettings.getBOOL("AntiSpamGroupInvites") || (membership_fee > 0 && gSavedSettings.getBOOL("AntiSpamGroupFeeInvites")))
if (antispam || gSavedSettings.getBOOL("AntiSpamGroupInvites"))
return;
// NaCl End
//if (!is_linden && (is_busy || is_muted))
if ((is_busy || is_muted))
{
@@ -2595,6 +2601,26 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
else
{
LL_INFOS("Messaging") << "Received IM_GROUP_INVITATION message." << LL_ENDL;
// Read the binary bucket for more information.
struct invite_bucket_t
{
S32 membership_fee;
LLUUID role_id;
}* invite_bucket;
// Make sure the binary bucket is the correct size.
if (binary_bucket_size != sizeof(invite_bucket_t))
{
LL_WARNS("Messaging") << "Malformed group invite binary bucket" << LL_ENDL;
break;
}
invite_bucket = (struct invite_bucket_t*) &binary_bucket[0];
S32 membership_fee = ntohl(invite_bucket->membership_fee);
// NaCl - Antispam
if (membership_fee > 0 && gSavedSettings.getBOOL("AntiSpamGroupFeeInvites"))
return;
// NaCl End
LLSD payload;
payload["transaction_id"] = session_id;
@@ -2696,23 +2722,23 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
case IM_INVENTORY_ACCEPTED:
{
// args["NAME"] = name;
// [RLVa:KB] - Version: 1.23.4 | Checked: 2009-07-08 (RLVa-1.0.0e) | Modified: RLVa-0.2.0b
bool fRlvObfuscate = (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) &&
(RlvUtil::isNearbyAgent(from_id)) && (!LLFloaterAvatarInfo::getInstance(from_id));
args["NAME"] = (!fRlvObfuscate) ? name : RlvStrings::getAnonym(name);
bool fRlvFilterName = (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (RlvUtil::isNearbyAgent(from_id)) &&
(!LLFloaterAvatarInfo::getInstance(from_id));
args["NAME"] = (!fRlvFilterName) ? name : RlvStrings::getAnonym(name);
// [/RLVa:KB]
//args["NAME"] = name;
LLNotificationsUtil::add("InventoryAccepted", args);
break;
}
case IM_INVENTORY_DECLINED:
{
// args["NAME"] = name;
// [RLVa:KB] - Version: 1.23.4 | Checked: 2009-07-08 (RLVa-1.0.0e) | Modified: RLVa-0.2.0b
bool fRlvObfuscate = (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) &&
(RlvUtil::isNearbyAgent(from_id)) && (!LLFloaterAvatarInfo::getInstance(from_id));
args["NAME"] = (!fRlvObfuscate) ? name : RlvStrings::getAnonym(name);
bool fRlvFilterName = (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (RlvUtil::isNearbyAgent(from_id)) &&
(!LLFloaterAvatarInfo::getInstance(from_id));
args["NAME"] = (!fRlvFilterName) ? name : RlvStrings::getAnonym(name);
// [/RLVa:KB]
//args["NAME"] = name;
LLNotificationsUtil::add("InventoryDeclined", args);
break;
}
@@ -2780,11 +2806,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str());
}
buffer = separator_string + saved + message.substr(message_offset);
BOOL is_this_agent = FALSE;
if(from_id == gAgentID)
{
is_this_agent = TRUE;
}
gIMMgr->addMessage(
session_id,
from_id,
@@ -2809,7 +2830,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
prepend_msg = std::string("IM: ");
}
chat.mText = prepend_msg + name + separator_string + saved + message.substr(message_offset);
LLFloaterChat::addChat(chat, TRUE, is_this_agent);
LLFloaterChat::addChat(chat, TRUE, from_id == gAgentID);
}
break;
@@ -2848,6 +2869,22 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
chat.mFromID = from_id ^ gAgent.getSessionID();
}
chat.mSourceType = CHAT_SOURCE_OBJECT;
// To conclude that the source type of message is CHAT_SOURCE_SYSTEM it's not
// enough to check only from name (i.e. fromName = "Second Life"). For example
// source type of messages from objects called "Second Life" should not be CHAT_SOURCE_SYSTEM.
bool chat_from_system = (SYSTEM_FROM == name) && region_id.isNull() && position.isNull();
if(chat_from_system)
{
// System's UUID is NULL (fixes EXT-4766)
chat.mFromID = LLUUID::null;
chat.mSourceType = CHAT_SOURCE_SYSTEM;
}
// IDEVO Some messages have embedded resident names
message = clean_name_from_task_im(message, from_group);
std::ostringstream link;
link << "secondlife:///app/objectim/" << session_id
<< LLURI::mapToQueryString(query_string);
@@ -2857,7 +2894,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
// Note: lie to LLFloaterChat::addChat(), pretending that this is NOT an IM, because
// IMs from objcts don't open IM sessions.
chat.mSourceType = CHAT_SOURCE_OBJECT;
LLFloaterChat::addChat(chat, FALSE, FALSE);
}
break;
@@ -3479,12 +3515,10 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
// if (chat.mSourceType == CHAT_SOURCE_OBJECT
// && chat.mChatType != CHAT_TYPE_DEBUG_MSG
// && gSavedSettings.getBOOL("EffectScriptChatParticles") )
// [RLVa:KB] - Alternate: Snowglobe-1.2.4 | Checked: 2009-07-10 (RLVa-1.0.0g)
// Don't show swirly things for llOwnerSay() chat here because we handle those further down
// RELEASE-RLVa: if this code changes, remember to change the code down below as well
if ( (chat.mSourceType == CHAT_SOURCE_OBJECT && chat.mChatType != CHAT_TYPE_DEBUG_MSG) &&
(gSavedSettings.getBOOL("EffectScriptChatParticles")) &&
(CHAT_TYPE_OWNER != chat.mChatType) )
// [RLVa:KB] - Checked: 2010-03-09 (RLVa-1.2.0b) | Modified: RLVa-1.0.0g
if ( ((chat.mSourceType == CHAT_SOURCE_OBJECT) && (chat.mChatType != CHAT_TYPE_DEBUG_MSG)) &&
(gSavedSettings.getBOOL("EffectScriptChatParticles")) &&
((!rlv_handler_t::isEnabled()) || (CHAT_TYPE_OWNER != chat.mChatType)) )
// [/RLVa:KB]
{
LLPointer<LLViewerPartSourceChat> psc = new LLViewerPartSourceChat(chatter->getPositionAgent());
@@ -3838,11 +3872,10 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
if(SHCommandHandler::handleCommand(false,mesg,from_id,chatter))
return;
#endif //shy_mod
// [RLVa:KB] - Alternate: Snowglobe-1.2.4 | Checked: 2009-07-10 (RLVa-1.0.0g)
// [RLVa:KB] - Checked: 2010-03-09 (RLVa-1.2.0b) | Modified: RLVa-1.0.0g
// Copy/paste from above
if ( chatter && (chat.mSourceType == CHAT_SOURCE_OBJECT && chat.mChatType != CHAT_TYPE_DEBUG_MSG) &&
(gSavedSettings.getBOOL("EffectScriptChatParticles")) &&
(CHAT_TYPE_OWNER != chat.mChatType) )
if ( (rlv_handler_t::isEnabled()) && (chatter) && (chat.mSourceType == CHAT_SOURCE_OBJECT) &&
(gSavedSettings.getBOOL("EffectScriptChatParticles")) )
{
LLPointer<LLViewerPartSourceChat> psc = new LLViewerPartSourceChat(chatter->getPositionAgent());
psc->setSourceObject(chatter);
@@ -3854,8 +3887,8 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
}
// [/RLVa:KB]
case CHAT_TYPE_DEBUG_MSG:
case CHAT_TYPE_DIRECT: // llRegionSayTo()
case CHAT_TYPE_NORMAL:
case CHAT_TYPE_DIRECT:
verb = ": ";
break;
case CHAT_TYPE_SHOUT:
@@ -3906,8 +3939,8 @@ void process_teleport_start(LLMessageSystem *msg, void**)
LL_DEBUGS("Messaging") << "Got TeleportStart with TeleportFlags=" << teleport_flags << ". gTeleportDisplay: " << gTeleportDisplay << ", gAgent.mTeleportState: " << gAgent.getTeleportState() << LL_ENDL;
//if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL)
// [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | Added: RLVa-0.2.0b
// if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL)
// [RLVa:KB] - Checked: 2010-04-07 (RLVa-1.2.0d) | Added: RLVa-0.2.0b
if ( (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL) || (!gRlvHandler.getCanCancelTp()) )
// [/RLVa:KB]
{
@@ -3946,8 +3979,8 @@ void process_teleport_progress(LLMessageSystem* msg, void**)
}
U32 teleport_flags = 0x0;
msg->getU32("Info", "TeleportFlags", teleport_flags);
//if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL)
// [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | Added: RLVa-0.2.0b
// if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL)
// [RLVa:KB] - Checked: 2010-04-07 (RLVa-1.2.0d) | Added: RLVa-0.2.0b
if ( (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL) || (!gRlvHandler.getCanCancelTp()) )
// [/RLVa:KB]
{
@@ -4148,7 +4181,7 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
gAgent.setRegion(regionp);
gObjectList.shiftObjects(shift_vector);
if (gAgentAvatarp)
if (isAgentAvatarValid())
{
gAgentAvatarp->clearChatText();
gAgentCamera.slamLookAt(look_at);
@@ -4464,8 +4497,6 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
return;
}
if(gAgent.getPhantom()) return; //Don't want to do this while phantom
// We have already requested to log out. Don't send agent updates.
if(LLAppViewer::instance()->logoutRequestSent())
{
@@ -4554,6 +4585,8 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
head_rot_chg = dot(last_head_rot, head_rotation);
//static S32 msg_number = 0; // Used for diagnostic log messages
if (force_send ||
(cam_center_chg.magVec() > TRANSLATE_THRESHOLD) ||
(head_rot_chg < THRESHOLD_HEAD_ROT_QDOT) ||
@@ -4562,19 +4595,20 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
control_flag_change != 0 ||
flag_change != 0)
{
/*
/* Diagnotics to show why we send the AgentUpdate message. Also un-commment the msg_number code above and below this block
msg_number += 1;
if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT)
{
//LL_INFOS("Messaging") << "head rot " << head_rotation << LL_ENDL;
LL_INFOS("Messaging") << "head_rot_chg = " << head_rot_chg << LL_ENDL;
LL_INFOS("Messaging") << "msg " << msg_number << ", frame " << LLFrameTimer::getFrameCount() << ", head_rot_chg " << head_rot_chg << LL_ENDL;
}
if (cam_rot_chg.magVec() > ROTATION_THRESHOLD)
{
LL_INFOS("Messaging") << "cam rot " << cam_rot_chg.magVec() << LL_ENDL;
LL_INFOS("Messaging") << "msg " << msg_number << ", frame " << LLFrameTimer::getFrameCount() << ", cam rot " << cam_rot_chg.magVec() << LL_ENDL;
}
if (cam_center_chg.magVec() > TRANSLATE_THRESHOLD)
{
LL_INFOS("Messaging") << "cam center " << cam_center_chg.magVec() << LL_ENDL;
LL_INFOS("Messaging") << "msg " << msg_number << ", frame " << LLFrameTimer::getFrameCount() << ", cam center " << cam_center_chg.magVec() << LL_ENDL;
}
// if (drag_delta_chg.magVec() > TRANSLATE_THRESHOLD)
// {
@@ -4582,9 +4616,9 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
// }
if (control_flag_change)
{
LL_INFOS("Messaging") << "dcf = " << control_flag_change << LL_ENDL;
LL_INFOS("Messaging") << "msg " << msg_number << ", frame " << LLFrameTimer::getFrameCount() << ", dcf = " << control_flag_change << LL_ENDL;
}
*/
*/
duplicate_count = 0;
}
@@ -4619,6 +4653,26 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
if (duplicate_count < DUP_MSGS && !gDisconnected)
{
/* More diagnostics to count AgentUpdate messages
static S32 update_sec = 0;
static S32 update_count = 0;
static S32 max_update_count = 0;
S32 cur_sec = lltrunc( LLTimer::getTotalSeconds() );
update_count += 1;
if (cur_sec != update_sec)
{
if (update_sec != 0)
{
update_sec = cur_sec;
//msg_number = 0;
max_update_count = llmax(max_update_count, update_count);
llinfos << "Sent " << update_count << " AgentUpdate messages per second, max is " << max_update_count << llendl;
}
update_sec = cur_sec;
update_count = 0;
}
*/
LLFastTimer t(FTM_AGENT_UPDATE_SEND);
// Build the message
msg->newMessageFast(_PREHASH_AgentUpdate);
@@ -4836,8 +4890,7 @@ void process_time_synch(LLMessageSystem *mesgsys, void **user_data)
LLWorld::getInstance()->setSpaceTimeUSec(space_time_usec);
//LL_DEBUGS("Messaging") << "time_synch() - " << sun_direction << ", " << sun_ang_velocity
// << ", " << phase << LL_ENDL;
LL_DEBUGS("Windlight Sync") << "Sun phase: " << phase << " rad = " << fmodf(phase / F_TWO_PI + 0.25, 1.f) * 24.f << " h" << LL_ENDL;
gSky.setSunPhase(phase);
gSky.setSunTargetDirection(sun_direction, sun_ang_velocity);
@@ -4916,7 +4969,7 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
if (object_id == owner_id && !gSavedSettings.getBOOL("EnableGestureSounds"))
{
// Don't mute own gestures, if they're not muted.
if(owner_id != gAgent.getID() || !gSavedSettings.getBOOL("EnableGestureSoundsSelf"))
if (owner_id != gAgentID || !gSavedSettings.getBOOL("EnableGestureSoundsSelf"))
return;
}
@@ -5728,17 +5781,17 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
return;
}
// Once the 'recent' container gets large enough, chop some
// off the beginning.
const U32 MAX_LOOKBACK = 30;
const S32 POP_FRONT_SIZE = 12;
if(recent.size() > MAX_LOOKBACK)
{
LL_DEBUGS("Messaging") << "Removing oldest transaction records" << LL_ENDL;
recent.erase(recent.begin(), recent.begin() + POP_FRONT_SIZE);
}
//LL_DEBUGS("Messaging") << "Pushing back transaction " << tid << LL_ENDL;
recent.push_back(tid);
// Once the 'recent' container gets large enough, chop some
// off the beginning.
const U32 MAX_LOOKBACK = 30;
const S32 POP_FRONT_SIZE = 12;
if(recent.size() > MAX_LOOKBACK)
{
LL_DEBUGS("Messaging") << "Removing oldest transaction records" << LL_ENDL;
recent.erase(recent.begin(), recent.begin() + POP_FRONT_SIZE);
}
//LL_DEBUGS("Messaging") << "Pushing back transaction " << tid << LL_ENDL;
recent.push_back(tid);
if (msg->has("TransactionInfo"))
{
@@ -5961,14 +6014,14 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
bool handle_prompt_for_maturity_level_change_callback(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
if (0 == option)
{
// set the preference to the maturity of the region we're calling
U8 preferredMaturity = static_cast<U8>(notification["payload"]["_region_access"].asInteger());
gSavedSettings.setU32("PreferredMaturity", static_cast<U32>(preferredMaturity));
}
return false;
}

File diff suppressed because it is too large Load Diff

View File

@@ -931,8 +931,6 @@ F32 LLVOAvatar::sLODFactor = 1.f;
F32 LLVOAvatar::sPhysicsLODFactor = 1.f;
BOOL LLVOAvatar::sUseImpostors = FALSE;
BOOL LLVOAvatar::sJointDebug = FALSE;
F32 LLVOAvatar::sUnbakedTime = 0.f;
F32 LLVOAvatar::sUnbakedUpdateTime = 0.f;
F32 LLVOAvatar::sGreyTime = 0.f;
@@ -2481,13 +2479,6 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
LLJoint::sNumUpdates = 0;
LLJoint::sNumTouches = 0;
/*// *NOTE: this is necessary for the floating name text above your head.
// NOTE NOTE: This doesn't seem to be needed any more?
if (mDrawable && mDrawable.notNull())
{
gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_SHADOW, TRUE);
}*/
BOOL visible = isVisible() || mNeedsAnimUpdate;
// update attachments positions
@@ -2930,7 +2921,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
}
return;
}
if (!mNameText)
{
mNameText = static_cast<LLHUDNameTag*>( LLHUDObject::addHUDObject(
@@ -4939,31 +4930,6 @@ void LLVOAvatar::updateTextures()
}
}
/*
// JAMESDEBUG
if (isSelf())
{
S32 null_count = 0;
S32 default_count = 0;
for (U32 i = 0; i < getNumTEs(); i++)
{
const LLTextureEntry* te = getTE(i);
if (te)
{
if (te->getID() == LLUUID::null)
{
null_count++;
}
else if (te->getID() == IMG_DEFAULT_AVATAR)
{
default_count++;
}
}
}
llinfos << "JAMESDEBUG my avatar TE null " << null_count << " default " << default_count << llendl;
}
*/
mMaxPixelArea = 0.f;
mMinPixelArea = 99999999.f;
mHasGrey = FALSE; // debug
@@ -5240,10 +5206,7 @@ const LLUUID& LLVOAvatar::getStepSound() const
//-----------------------------------------------------------------------------
void LLVOAvatar::processAnimationStateChanges()
{
if ((gNoRender)||(gAgent.isTPosed())) //isTPosed is meant to stop animation updates while force-TPosed.
{
return;
}
if (gNoRender) return;
if ( isAnyAnimationSignaled(AGENT_WALK_ANIMS, NUM_AGENT_WALK_ANIMS) )
{
@@ -6191,32 +6154,6 @@ const LLViewerJointAttachment *LLVOAvatar::attachObject(LLViewerObject *viewer_o
{
LLViewerJointAttachment* attachment = getTargetAttachmentPoint(viewer_object);
// <edit> testzone attachpt
if(!attachment)
{
llwarns << "Failed to find attachment." << llendl;
S32 attachmentID = ATTACHMENT_ID_FROM_STATE(viewer_object->getState());
LLUUID item_id;
LLNameValue* item_id_nv = viewer_object->getNVPair("AttachItemID");
if( item_id_nv )
{
const char* s = item_id_nv->getString();
if(s)
item_id.set(s);
}
if(!item_id.isNull())
{
mUnsupportedAttachmentPoints[attachmentID] = std::pair<LLUUID,LLUUID>(item_id,viewer_object->getID());
if (viewer_object->isSelected())
{
LLSelectMgr::getInstance()->updateSelectionCenter();
LLSelectMgr::getInstance()->updatePointAt();
}
}
else
llwarns << "No item ID" << llendl;
}
// </edit>
if (!attachment || !attachment->addObject(viewer_object))
{
return 0;
@@ -6393,57 +6330,6 @@ BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object)
mPendingAttachment.erase(iter);
return TRUE;
}
// <edit> testzone attachpt
LLUUID item_id;
LLNameValue* item_id_nv = viewer_object->getNVPair("AttachItemID");
if( item_id_nv )
{
const char* s = item_id_nv->getString();
if(s)
item_id.set(s);
}
if(!item_id.isNull())
{
std::map<S32, std::pair<LLUUID,LLUUID> >::iterator iter = mUnsupportedAttachmentPoints.begin();
std::map<S32, std::pair<LLUUID,LLUUID> >::iterator end = mUnsupportedAttachmentPoints.end();
for( ; iter != end; ++iter)
{
if((*iter).second.first == item_id)
{
mUnsupportedAttachmentPoints.erase((*iter).first);
if (isSelf())
{
// the simulator should automatically handle
// permission revocation
stopMotionFromSource(viewer_object->getID());
LLFollowCamMgr::setCameraActive(viewer_object->getID(), FALSE);
LLViewerObject::const_child_list_t& child_list = viewer_object->getChildren();
for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin();
iter != child_list.end(); iter++)
{
LLViewerObject* child_objectp = *iter;
// the simulator should automatically handle
// permissions revocation
stopMotionFromSource(child_objectp->getID());
LLFollowCamMgr::setCameraActive(child_objectp->getID(), FALSE);
}
// Then make sure the inventory is in sync with the avatar.
gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
gInventory.notifyObservers();
}
return TRUE;
}
}
llwarns << "Not found" << llendl;
}
else
llwarns << "No item ID" << llendl;
// </edit>
return FALSE;
}
@@ -6687,19 +6573,6 @@ BOOL LLVOAvatar::isWearingAttachment( const LLUUID& inv_item_id )
return FALSE;
}
// <edit> testzone attachpt
BOOL LLVOAvatar::isWearingUnsupportedAttachment( const LLUUID& inv_item_id )
{
std::map<S32, std::pair<LLUUID,LLUUID> >::iterator end = mUnsupportedAttachmentPoints.end();
for(std::map<S32, std::pair<LLUUID,LLUUID> >::iterator iter = mUnsupportedAttachmentPoints.begin(); iter != end; ++iter)
{
if((*iter).second.first == inv_item_id)
{
return TRUE;
}
}
return FALSE;
}
//-----------------------------------------------------------------------------
// getWornAttachment()
//-----------------------------------------------------------------------------
@@ -6736,6 +6609,7 @@ const std::string LLVOAvatar::getAttachedPointName(const LLUUID& inv_item_id)
return LLStringUtil::null;
}
// virtual
void LLVOAvatar::invalidateComposite( LLTexLayerSet* layerset, BOOL upload_result )
{
}
@@ -7587,10 +7461,6 @@ LLBBox LLVOAvatar::getHUDBBox() const
return bbox;
}
void LLVOAvatar::rebuildHUD()
{
}
//-----------------------------------------------------------------------------
// onFirstTEMessageReceived()
//-----------------------------------------------------------------------------
@@ -8117,6 +7987,7 @@ void LLVOAvatar::getAnimNames( LLDynamicArray<std::string>* names )
names->put( "enter_away_from_keyboard_state" );
}
// static
void LLVOAvatar::onBakedTextureMasksLoaded( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata )
{
if (!userdata) return;
@@ -8210,7 +8081,7 @@ void LLVOAvatar::onInitialBakedTextureLoaded( BOOL success, LLViewerFetchedTextu
{
LLUUID *avatar_idp = (LLUUID *)userdata;
LLVOAvatar *selfp = gObjectList.findAvatar(*avatar_idp);
if (selfp)
{
LL_DEBUGS("Avatar") << selfp->avString() << "discard_level " << discard_level << " success " << success << " final " << final << LL_ENDL;
@@ -8231,7 +8102,7 @@ void LLVOAvatar::onBakedTextureLoaded(BOOL success,
LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src,
S32 discard_level, BOOL final, void* userdata)
{
// llinfos << "onBakedTextureLoaded: " << src_vi->getID() << llendl;
LL_DEBUGS("Avatar") << "onBakedTextureLoaded: " << src_vi->getID() << LL_ENDL;
LLUUID id = src_vi->getID();
LLUUID *avatar_idp = (LLUUID *)userdata;
@@ -8261,7 +8132,6 @@ void LLVOAvatar::onBakedTextureLoaded(BOOL success,
// Called when baked texture is loaded and also when we start up with a baked texture
void LLVOAvatar::useBakedTexture( const LLUUID& id )
{
for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
{
LLViewerTexture* image_baked = getImage( mBakedTextureDatas[i].mTextureIndex, 0 );

View File

@@ -336,7 +336,6 @@ public:
S32 mLastRezzedStatus;
void startPhase(const std::string& phase_name);
void stopPhase(const std::string& phase_name, bool err_check = true);
void clearPhases();
@@ -371,6 +370,7 @@ protected:
/** State
** **
*******************************************************************************/
/********************************************************************************
** **
** SKELETON
@@ -755,7 +755,6 @@ public:
public:
BOOL hasHUDAttachment() const;
LLBBox getHUDBBox() const;
void rebuildHUD();
void resetHUDAttachments();
BOOL canAttachMoreObjects() const;
BOOL canAttachMoreObjects(U32 n) const;
@@ -767,17 +766,10 @@ protected:
//--------------------------------------------------------------------
public:
BOOL isWearingAttachment( const LLUUID& inv_item_id );
// <edit> testzone attachpt
BOOL isWearingUnsupportedAttachment( const LLUUID& inv_item_id );
// </edit>
LLViewerObject* getWornAttachment( const LLUUID& inv_item_id );
const std::string getAttachedPointName(const LLUUID& inv_item_id);
// <edit>
std::map<S32, std::pair<LLUUID/*inv*/,LLUUID/*object*/> > mUnsupportedAttachmentPoints;
// </edit>
/** Wearables
** **
*******************************************************************************/

View File

@@ -77,6 +77,9 @@
LLPointer<LLVOAvatarSelf> gAgentAvatarp = NULL;
BOOL object_attached(void *user_data);
BOOL object_selected_and_point_valid(void *user_data);
BOOL isAgentAvatarValid()
{
return (gAgentAvatarp.notNull() && gAgentAvatarp->isValid() &&

View File

@@ -4732,11 +4732,6 @@ void LLPipeline::rebuildPools()
}
max_count--;
}
if (isAgentAvatarValid())
{
gAgentAvatarp->rebuildHUD();
}
}
void LLPipeline::addToQuickLookup( LLDrawPool* new_poolp )

View File

@@ -1,71 +1,61 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater bottom="-300" can_close="true" can_drag_on_left="false" can_minimize="false"
can_resize="false" follows="left|top" height="629" name="Snapshot"
can_resize="false" follows="left|top" height="629" name="Snapshot"
rect_control="FloaterSnapshotRect" title="Snapshot Preview" width="219">
<text bottom="-201" right="-6" height="25" name="file_size_label" halign="right" width="120">
<text bottom="-210" right="-10" follows="left|top" height="25" name="file_size_label" halign="right" width="150">
File size: [SIZE] KB
</text>
<text bottom="-195" height="15" left="10" name="type_label" halign="left">
<text bottom_delta="10" follows="top|left" height="15" left="10" name="type_label">
Target
</text>
<radio_group bottom_delta="-79" follows="left|top" height="79" label="Snapshot type"
<radio_group bottom_delta="-82" follows="left|top" height="79" label="Snapshot type"
left="10" name="snapshot_type_radio" width="200">
<radio_item bottom="-19" height="16" name="feed">
Post to my.secondlife.com feed
Post to profile feed
</radio_item>
<radio_item bottom="-38" height="16" name="postcard">
Send via email
</radio_item>
<radio_item bottom="-57" height="16" name="texture">
Save to my inventory ([UPLOADFEE])
Save to inventory ([UPLOADFEE])
</radio_item>
<radio_item bottom="-76" height="16" name="local">
Save to my hard drive
Save to hard drive
</radio_item>
</radio_group>
<button bottom_delta="-28" follows="left|top" height="20" label="Refresh snapshot" left="10"
name="new_snapshot_btn" width="115" tool_tip="Make a snapshot of the current view. Use the save and/or upload button to actually save it. The latest snapshot is shown in the thumbnail. In Freeze Time mode a preview of the new snapshot is also shown full screen (note that this has NOT the same quality as the real thing that will be saved: it is downscaled from the actual formatted image to a power of two with a max. resolution of 1024x1024, in order to be displayed in openGL and then probably stretched again to fill your screen). Press ESC to go back to Freeze Time." />
<button bottom_delta="0" follows="left|top" height="20" label="Freeze time" left="129"
name="freeze_time_btn" width="80" tool_tip="Freeze time and show a fullscreen preview. Allows to cam around as if time is frozen and make multiple snapshots of the same scene. Press ESC to undo!" />
<button bottom="-309" follows="left|top" height="20" label="Refresh" left="10"
name="new_snapshot_btn" width="105"/>
<button bottom_delta="0" follows="left|top" height="20" label="Freeze" left="120"
name="freeze_time_btn" width="90" tool_tip="Show a fullscreen preview. Allows camming around as if time is frozen to make multiple snapshots of the same scene. Press ESC to undo!" />
<button bottom_delta="-22" follows="left|top" height="20" label="Upload" left="10"
name="feed_btn" width="105" />
<button bottom_delta="0" follows="left|top" height="20" label="Send" left="10"
name="send_btn" width="105" />
<button bottom_delta="0" follows="left|top" height="20" label="Upload ([UPLOADFEE])" left="10"
name="upload_btn" width="105" />
<flyout_button bottom_delta="-2" follows="left|top" height="20" label="Save" left="10"
<flyout_button bottom_delta="0" follows="left|top" height="20" label="Save" left="10"
list_position="below" mouse_opaque="true" name="save_btn" tool_tip="Save image to a file" width="105">
<flyout_button_item value="save" name="save_item">Save</flyout_button_item>
<flyout_button_item value="saveas" name="saveas_item">Save As...</flyout_button_item>
</flyout_button>
<combo_box bottom_delta="-4" follows="left|top" height="20" label="Format" left="139"
name="local_format_combo" width="70">
<combo_item name="PNG">
PNG
</combo_item>
<combo_item name="JPEG">
JPEG
</combo_item>
<combo_item name="BMP">
BMP
</combo_item>
</combo_box>
<button bottom_delta="-22" follows="left|top" font="SansSerifSmall" halign="center"
height="20" label="Advanced&gt;&gt;" left="10"
<button bottom_delta="0" follows="left|top" height="20" label="Cancel" left="120" name="discard_btn" width="90"/>
<button bottom="-353" follows="left|top" font="SansSerifSmall" halign="center"
height="20" label="More &gt;&gt;" left="10"
mouse_opaque="true" name="more_btn" scale_image="TRUE"
tool_tip="Advanced Options. Default uses current window size ((cropped to) 4:3 for profile feed)." width="72" />
tool_tip="Advanced Options" width="80" />
<button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center"
height="20" label="&lt;&lt;Default" left_delta="0"
height="20" label="&lt;&lt; Less" left_delta="0"
mouse_opaque="true" name="less_btn" scale_image="TRUE"
tool_tip="Advanced Options. Default uses current window size ((cropped to) 4:3 for profile feed)." width="72" />
<slider bottom_delta="0" decimal_digits="0" follows="left|top" height="15"
increment="1" initial_val="75" left="80"
max_val="100" min_val="0" name="image_quality_slider" width="150" />
tool_tip="Advanced Options" width="80" />
<text bottom_delta="-20" follows="top|left" height="15" left="10" name="type_label2" width="115">
Target Resolution
</text>
<text bottom_delta="0" follows="top|left" height="15" left="130" name="format_label"
width="70">
Format
</text>
<combo_box bottom_delta="-22" follows="left|top" height="20" label="Resolution" left="10"
name="feed_size_combo" width="125">
name="feed_size_combo" width="115">
<combo_item name="CurrentWindow" value="[i0,i0]">
Current Window
</combo_item>
@@ -175,18 +165,30 @@
Custom
</combo_item>
</combo_box>
<combo_box bottom_delta="0" follows="left|top" height="20" label="Format" left="130"
name="local_format_combo" width="80">
<combo_item name="PNG">
PNG
</combo_item>
<combo_item name="JPEG">
JPEG
</combo_item>
<combo_item name="BMP">
BMP
</combo_item>
</combo_box>
<spinner bottom_delta="-25" decimal_digits="0" follows="left|top" height="20"
increment="32" label="Width" label_width="30" left="14" max_val="6016"
min_val="32" name="snapshot_width" width="95" allow_text_entry="false"/>
increment="32" label="Width" label_width="30" left="10" max_val="6016"
min_val="32" name="snapshot_width" width="95"/>
<spinner bottom_delta="0" decimal_digits="0" follows="left|top" height="20"
increment="32" label="Height" label_width="35" left="114" max_val="6016"
min_val="32" name="snapshot_height" width="95" allow_text_entry="false"/>
<check_box bottom_delta="-14" follows="top|left" label="Keep aspect ratio"
left="10" name="keep_aspect" tool_tip="When changing the resolution keep its aspect ratio the same. This also enforces this aspect ratio to be equal to the target aspect (as if the Aspect was set to Default): changing the target aspect will change the aspect of the resolution. Note: setting the resolution to non-Custom, or the Aspect to Default will reset this check box because they are not compatible." />
<text bottom_delta="-20" follows="top|left" height="15" left="10" name="type_label3"
width="200">
place holder, see targetAR / sourceAR
</text>
increment="32" label="Height" label_width="38" left="112" max_val="6016"
min_val="32" name="snapshot_height" width="98"/>
<slider bottom_delta="-15" decimal_digits="0" follows="left|top" height="15"
increment="1" initial_val="75" label="Image Quality" left="10"
max_val="100" min_val="0" name="image_quality_slider" width="210" />
<check_box bottom_delta="-19" follows="top|left" label="Keep aspect ratio"
left="8" name="keep_aspect" tool_tip="Note: setting the resolution to non-Custom, or the Aspect to Default will reset this check box because they aren't compatible." />
<text bottom_delta="-15" follows="top|left" height="15" left="10" name="type_label3" width="200"/>
<combo_box bottom_delta="-22" follows="left|top" height="20" label="Aspect" left="10"
name="feed_aspect_combo" width="115">
<combo_item name="Default" value="-2">
@@ -268,16 +270,16 @@
Custom
</combo_item>
</combo_box>
<spinner bottom_delta="0" decimal_digits="5" follows="left|top" height="20"
<spinner bottom_delta="-4" decimal_digits="5" follows="left|top" height="20"
increment="0.01" label="" left="130" max_val="32"
min_val="0.03125" name="aspect_ratio" width="64" allow_text_entry="false"/>
<text bottom_delta="-4" height="20" left="196" name="aspect_one_label">:1</text>
<text bottom_delta="-26" follows="left|top" height="20" left="15"
<text bottom_delta="-20" follows="left|top" height="20" left="10"
name="layer_type_label" width="50">
Capture:
</text>
<combo_box bottom_delta="3" follows="left|top" height="20" label="Image Layers" left="61"
name="layer_types" width="145">
name="layer_types" width="149">
<combo_item name="Colors" value="colors">
Colors
</combo_item>
@@ -285,27 +287,27 @@
Depth
</combo_item>
</combo_box>
<check_box bottom_delta="-18" follows="left|top" label="Show interface in snapshot"
left="10" name="ui_check" tool_tip="Show the UI in the snapshot. This enforces the resolution of the snapshot to that of your current window." />
<check_box bottom_delta="-20" follows="left|top" label="Show HUD objects in snapshot"
left="10" name="hud_check" tool_tip="Show your HUD objects in the snapshot. This enforces the resolution of the snapshot to that of your current window." />
<check_box bottom_delta="-20" follows="left|top" label="Keep open after saving" left="10"
name="keep_open_check" tool_tip="Do not close the snapshot floater after saving or uploading. This allows you to save, upload or send the SAME snapshot again with different formats and/or to a different destination." />
<check_box bottom_delta="-20" follows="left|top" label="Open floater in Freeze Time mode"
left="10" name="freeze_time_check" tool_tip="This allows one to quickly press cntrl-shift-S and then take your time to choose the camera position and even make multiple shots of the frozen scene." />
<check_box bottom_delta="-20" follows="left|top" label="Auto-refresh" left="10"
<check_box bottom_delta="-20" follows="left|top" label="Show interface in snapshot"
left="10" name="ui_check" tool_tip="Locks resolution to current window size." />
<check_box bottom_delta="-17" follows="left|top" label="Show HUD objects in snapshot"
left="10" name="hud_check" tool_tip="Locks resolution to current window size." />
<check_box bottom_delta="-17" follows="left|top" label="Keep open after saving" left="10"
name="keep_open_check" />
<check_box bottom_delta="-17" follows="left|top" label="Open floater in Freeze Time mode"
left="10" name="freeze_time_check" tool_tip="Allows to quickly open snapshot floater, then position camera and take multiple shots of frozen scene." />
<check_box bottom_delta="-17" follows="left|top" label="Auto-refresh" left="10"
name="auto_snapshot_check" tool_tip="Handy in conjunction with Freeze Time: creates a new fullscreen preview whenever you stop camming." />
<check_box bottom_delta="-20" follows="left|top" control_name="TemporaryUpload" enabled="true"
<check_box bottom_delta="-17" follows="left|top" control_name="TemporaryUpload" enabled="true"
initial_value="false" label="Temporary Image (Free)" left="10"
name="temp_check" tool_tip="Uploads the texture to the sim instead of the asset server, meaning it's free but only visible in the current sim and deleted when you leave the sim." />
name="temp_check" tool_tip="Sets the asset to be temporary, meaning it's free, but in return, only good for a short time before it ceases to exist. (May not work on SL grid)" />
<string name="unknown">
unknown
</string>
<string name="targetAR">
Target Aspect Ratio
Target aspect ratio
</string>
<string name="sourceAR">
Resolution- AND Target- Aspect Ratio
Resolution AND Target aspect ratio
</string>
</floater>

View File

@@ -177,10 +177,6 @@
mouse_opaque="true" name="Copy Asset UUID" width="128">
<on_click filter="" function="Inventory.DoToSelected" userdata="copy_uuid" />
</menu_item_call>
<menu_item_call bottom_delta="-18" height="18" label="Reupload..." left="0" mouse_opaque="true"
name="Reupload..." width="128">
<on_click filter="" function="Inventory.DoToSelected" userdata="reupload" />
</menu_item_call>
<menu_item_call bottom_delta="-18" height="18" label="Acquire Asset ID" left="0" mouse_opaque="true"
name="Acquire Asset ID" width="128">
<on_click filter="" function="Inventory.DoToSelected" userdata="acquire_asset_id" />

View File

@@ -12,18 +12,44 @@
<on_enable function="Object.EnableTouch" userdata="Touch" name="EnableTouch"/>
</menu_item_call>
<menu_item_call enabled="true" label="Stand Up" name="Stand Up">
<on_click function="Self.StandUp" userdata="" />
<on_enable function="Self.EnableStandUp" />
<on_click function="Self.SitOrStand"/>
<on_enable function="Self.EnableSitOrStand" userdata="Sit Down,Stand Up"/>
</menu_item_call>
<menu_item_call enabled="false" label="Detach" mouse_opaque="true" name="Detach">
<on_click function="Attachment.Detach" />
<on_enable function="Attachment.EnableDetach" />
</menu_item_call>
<pie_menu label="Tools &gt;" name="Tools &gt;">
<menu_item_call enabled="false" hidden="false" label="S. Count" mouse_opaque="true" name="ScriptCount">
<on_click function="Object.ScriptCount" />
<on_visible function="Object.VisibleScriptCount" />
</menu_item_call>
<pie_menu label="Scripts &gt;" name="ScriptsMenu">
<menu_item_call mouse_opaque="true" label="Make Mono" name="CompileMono">
<on_click function="Tools.SelectedScriptAction" userdata="compile mono" />
<on_enable function="EditableSelectedMono" />
</menu_item_call>
<menu_item_call mouse_opaque="true" label="Make LSL" name="CompileLSL">
<on_click function="Tools.SelectedScriptAction" userdata="compile lsl" />
<on_enable function="EditableSelected" />
</menu_item_call>
<menu_item_call mouse_opaque="true" label="Reset" name="Reset Scripts">
<on_click function="Tools.SelectedScriptAction" userdata="reset" />
<on_enable function="EditableSelected" />
</menu_item_call>
<menu_item_call mouse_opaque="true" label="Start" name="Object Set Scripts to Running">
<on_click function="Tools.SelectedScriptAction" userdata="start" />
<on_enable function="EditableSelected" />
</menu_item_call>
<menu_item_call mouse_opaque="true" label="Stop" name="Object Set Scripts to Not Running">
<on_click function="Tools.SelectedScriptAction" userdata="stop" />
<on_enable function="EditableSelected" />
</menu_item_call>
<menu_item_call mouse_opaque="true" label="Remove" name="Remove Scripts From Selection">
<on_click function="Tools.ScriptDelete" />
<on_enable function="Tools.EnableScriptDelete" />
</menu_item_call>
<menu_item_call mouse_opaque="true" label="Count" name="ScriptCount">
<on_click function="Object.ScriptCount" />
<on_visible function="Object.VisibleScriptCount" />
</menu_item_call>
</pie_menu>
<menu_item_call enabled="true" label="Inspect" mouse_opaque="true" name="Object Inspect">
<on_click function="Object.Inspect" />
<on_enable function="Object.EnableInspect"/>

View File

@@ -60,15 +60,6 @@
<menu_item_call enabled="true" hidden="false" label="Data" mouse_opaque="true" name="Data">
<on_click function="Object.Data" />
</menu_item_call>
<menu_item_call enabled="false" hidden="false" label="S. Count" mouse_opaque="true" name="ScriptCount">
<on_click function="Object.ScriptCount" />
<on_visible function="Object.VisibleScriptCount" />
</menu_item_call>
<menu_item_call bottom="-487" enabled="false" height="19" label="Reset Scripts"
left="0" mouse_opaque="true" name="Reset Scripts" width="250">
<on_click function="Tools.SelectedScriptAction" userdata="reset" />
<on_enable function="EditableSelected" />
</menu_item_call>
<menu_item_call enabled="false" hidden="false" label="Export" mouse_opaque="true" name="Export">
<on_click function="Object.Export" />
<on_enable function="Object.EnableExport" />
@@ -102,6 +93,36 @@
<on_click function="Pathfinding.Characters.Select" />
<on_enable function="EnableSelectInPathfindingCharacters"/>
</menu_item_call>
</pie_menu>
<pie_menu label="Scripts &gt;" name="ScriptsMenu">
<menu_item_call mouse_opaque="true" label="Make Mono" name="CompileMono">
<on_click function="Tools.SelectedScriptAction" userdata="compile mono" />
<on_enable function="EditableSelectedMono" />
</menu_item_call>
<menu_item_call mouse_opaque="true" label="Make LSL" name="CompileLSL">
<on_click function="Tools.SelectedScriptAction" userdata="compile lsl" />
<on_enable function="EditableSelected" />
</menu_item_call>
<menu_item_call mouse_opaque="true" label="Reset" name="Reset Scripts">
<on_click function="Tools.SelectedScriptAction" userdata="reset" />
<on_enable function="EditableSelected" />
</menu_item_call>
<menu_item_call mouse_opaque="true" label="Start" name="Object Set Scripts to Running">
<on_click function="Tools.SelectedScriptAction" userdata="start" />
<on_enable function="EditableSelected" />
</menu_item_call>
<menu_item_call mouse_opaque="true" label="Stop" name="Object Set Scripts to Not Running">
<on_click function="Tools.SelectedScriptAction" userdata="stop" />
<on_enable function="EditableSelected" />
</menu_item_call>
<menu_item_call mouse_opaque="true" label="Remove" name="Remove Scripts From Selection">
<on_click function="Tools.ScriptDelete" />
<on_enable function="Tools.EnableScriptDelete" />
</menu_item_call>
<menu_item_call mouse_opaque="true" label="Count" name="ScriptCount">
<on_click function="Object.ScriptCount" />
<on_visible function="Object.VisibleScriptCount" />
</menu_item_call>
</pie_menu>
</pie_menu>
<menu_item_call enabled="false" label="Buy..." mouse_opaque="true" name="Buy...">

View File

@@ -108,7 +108,10 @@
<on_click function="Avatar.CopyUUID" />
</menu_item_call>
</pie_menu>
<menu_item_separator />
<menu_item_call enabled="true" label="Stand Up" name="Stand Up Self">
<on_click function="Self.SitOrStand"/>
<on_enable function="Self.EnableSitOrStand" userdata="Sit Down,Stand Up"/>
</menu_item_call>
<menu_item_call enabled="true" label="Gestures..." name="Gestures...">
<on_click function="ShowFloater" userdata="gestures" />
</menu_item_call>

View File

@@ -88,8 +88,9 @@
<check_box bottom_delta="-20" control_name="SGDetachBridge" follows="top" initial_value="false" label="Auto detach LSL Bridge" tool_tip="Automatically detach LSL Bridge of Phoenix or Firestorm viewer." name="detach_bridge"/>
<check_box bottom_delta="-20" control_name="QuietSnapshotsToDisk" follows="top" initial_value="false" label="Quiet Snapshots to Disk" tool_tip="Doesn't make a camera sound nor alert everyone when you take a snapshot to your computer." name="quiet_snapshots_check"/>
<check_box bottom_delta="-20" control_name="RevokePermsOnStandUp" follows="top" initial_value="false" label="On standing up, revoke perms for the object your avatar was sitting on" tool_tip="Objects generally retain Take Control and Trigger Animation permissions until reset or given permission by another user. Enabling this will make sure you revoke these permissions immediately." name="revoke_perms_on_stand_up_check"/>
<check_box bottom_delta="-20" control_name="DisableClickSit" follows="top" initial_value="false" label="Disable click-to-sit objects" tool_tip="Some griefer tools rely on forcing or tricking you to click on an object that will make you sit, giving the object automatic permissions to trigger animations amongst other things. This will disable llSitTarget - It does mean that you will need to select 'Sit' on poseballs and furniture." name="disable_click_sit_check"/>
<check_box bottom_delta="-20" follows="top" initial_value="false" label="Display Total Script Count changes:" name="totalscriptjumps" control_name="AscentDisplayTotalScriptJumps" tool_tip="Displays script count changes in your region, dependant on the threshold you choose to the right."/>
<check_box bottom_delta="-20" control_name="DisableClickSit" follows="top" initial_value="false" label="Disable click-to-sit on objects" tool_tip="Some griefer tools rely on forcing or tricking you to click on an object that will make you sit, giving the object automatic permissions to trigger animations amongst other things. This will disable llSitTarget - It does mean that you will need to select 'Sit' on poseballs and furniture." name="disable_click_sit_check"/>
<check_box bottom_delta="0" left_delta="170" control_name="DisableClickSitOtherOwner" follows="top" label="you don't own" tool_tip="Disables click to sit on objects you don't own (If used with the group check, only one is needed)" name="disable_click_sit_own_check"/>
<check_box bottom_delta="-20" left="10" follows="top" initial_value="false" label="Display Total Script Count changes:" name="totalscriptjumps" control_name="AscentDisplayTotalScriptJumps" tool_tip="Displays script count changes in your region, dependant on the threshold you choose to the right."/>
<spinner bottom_delta="0" decimal_digits="0" follows="top" height="16" increment="1" left_delta="210" max_val="9999" min_val="1" name="ScriptJumpCount" width="50" control_name="Ascentnumscriptdiff" tool_tip="Threshold for the script jump message [Default: 100]"/>
</panel>

View File

@@ -69,6 +69,7 @@
<string name="ShuttingDown">Shutting down...</string>
<string name="YouHaveBeenDisconnected">You have been disconnected from the region you were in.</string>
<string name="SentToInvalidRegion">You were sent to an invalid region.</string>
<string name="TestingDisconnect">Testing viewer disconnect</string>
<!-- Tooltip, llhoverview.cpp -->
<string name="TooltipPerson">Person</string><!-- Object under mouse pointer is an avatar -->
@@ -3113,7 +3114,6 @@ Drag folders to this area and click "Send to Marketplace" to list them for sale
<string name="Right Pec">Right Pec</string>
<string name="Neck">Neck</string>
<string name="Root">Root</string>
<string name="unsupported point">unsupported point</string>
<string name="Invalid Attachment">Invalid Attachment Point</string>
<!-- HUD Position -->
@@ -3278,6 +3278,7 @@ Drag folders to this area and click "Send to Marketplace" to list them for sale
<string name="AcquiredItems">Acquired Items</string>
<string name="Cancel">Cancel</string>
<string name="UploadingCosts">Uploading [NAME] costs [CURRENCY] [AMOUNT]</string>
<string name="BuyingCosts">Buying this costs</string>
<string name="UnknownFileExtension">
Unknown file extension .%s
Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
@@ -3968,6 +3969,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Unnamed">(Unnamed)</string>
<string name="inventory_item_offered_to">Inventory item offered to</string>
<string name="Saved_message" value="(Saved [LONG_TIMESTAMP]) "/>
<string name="StartPointSet">Start point set</string>
<string name="EndPointSet">End point set</string>
<string name="MeasuredDistance">Distance: [DIST]</string>
<string name="PowerUser1">You are bestowed with powers beyond mortal comprehension.</string>
<string name="PowerUser2">Use your newfound abilities wisely.</string>
<string name="Unlocked:">Unlocked:</string>
@@ -4100,6 +4104,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="giving">Giving [CURRENCY]</string>
<string name="this_costs">This costs [CURRENCY]</string>
<string name="this_object_costs">This object costs</string>
<string name="group_role_everyone">Everyone</string>
<string name="group_role_officers">Officers</string>
@@ -4132,6 +4137,72 @@ Abuse Report</string>
<string name="New Script">New Script</string>
<string name="New Note">New Note</string>
<string name="New Folder">New Folder</string>
<string name="Contents">Contents</string>
<string name="Gesture">Gesture</string>
<string name="Male Gestures">Male Gestures</string>
<string name="Female Gestures">Female Gestures</string>
<string name="Other Gestures">Other Gestures</string>
<string name="Speech Gestures">Speech Gestures</string>
<string name="Common Gestures">Common Gestures</string>
<!-- gestures -->
<string name="Male - Excuse me">Male - Excuse me</string>
<string name="Male - Get lost">Male - Get lost</string>
<string name="Male - Blow kiss">Male - Blow kiss</string>
<string name="Male - Boo">Male - Boo</string>
<string name="Male - Bored">Male - Bored</string>
<string name="Male - Hey">Male - Hey</string>
<string name="Male - Laugh">Male - Laugh</string>
<string name="Male - Repulsed">Male - Repulsed</string>
<string name="Male - Shrug">Male - Shrug</string>
<string name="Male - Stick tougue out">Male - Stick tongue out</string>
<string name="Male - Wow">Male - Wow</string>
<string name="Female - Chuckle">Female - Chuckle</string>
<string name="Female - Cry">Female - Cry</string>
<string name="Female - Embarrassed">Female - Embarrassed</string>
<string name="Female - Excuse me">Female - Excuse me</string>
<string name="Female - Get lost">Female - Get lost</string>
<string name="Female - Blow kiss">Female - Blow kiss</string>
<string name="Female - Boo">Female - Boo</string>
<string name="Female - Bored">Female - Bored</string>
<string name="Female - Hey">Female - Hey</string>
<string name="Female - Hey baby">Female - Hey baby</string>
<string name="Female - Laugh">Female - Laugh</string>
<string name="Female - Looking good">Female - Looking good</string>
<string name="Female - Over here">Female - Over here</string>
<string name="Female - Please">Female - Please</string>
<string name="Female - Repulsed">Female - Repulsed</string>
<string name="Female - Shrug">Female - Shrug</string>
<string name="Female - Stick tougue out">Female - Stick tongue out</string>
<string name="Female - Wow">Female - Wow</string>
<string name="/bow">/bow</string>
<string name="/clap">/clap</string>
<string name="/count">/count</string>
<string name="/extinguish">/extinguish</string>
<string name="/kmb">/kmb</string>
<string name="/muscle">/muscle</string>
<string name="/no">/no</string>
<string name="/no!">/no!</string>
<string name="/paper">/paper</string>
<string name="/pointme">/pointme</string>
<string name="/pointyou">/pointyou</string>
<string name="/rock">/rock</string>
<string name="/scissor">/scissor</string>
<string name="/smoke">/smoke</string>
<string name="/stretch">/stretch</string>
<string name="/whistle">/whistle</string>
<string name="/yes">/yes</string>
<string name="/yes!">/yes!</string>
<string name="afk">afk</string>
<string name="dance1">dance1</string>
<string name="dance2">dance2</string>
<string name="dance3">dance3</string>
<string name="dance4">dance4</string>
<string name="dance5">dance5</string>
<string name="dance6">dance6</string>
<string name="dance7">dance7</string>
<string name="dance8">dance8</string>
<string name="DefaultMimeType">none/none</string>
<string name="Chat">Chat</string>
@@ -4146,6 +4217,15 @@ Try enclosing path to the editor with double quotes.
<string name="Left">Left</string>
<string name="Right">Right</string>
<!-- llviewerwindow -->
<string name="BeaconParticle">Viewing particle beacons (blue)</string>
<string name="BeaconPhysical">Viewing physical object beacons (green)</string>
<string name="BeaconScripted">Viewing scripted object beacons (red)</string>
<string name="BeaconScriptedTouch">Viewing scripted object with touch function beacons (red)</string>
<string name="BeaconSound">Viewing sound beacons (yellow)</string>
<string name="BeaconMedia">Viewing media beacons (white)</string>
<string name="ParticleHiding">Hiding Particles</string>
<!-- Pathfinding -->
<string name="Pathfinding_Wiki_URL">http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer</string>
<string name="Pathfinding_Object_Attr_None">None</string>

View File

@@ -326,7 +326,7 @@ subasta. Para comprarlo directamente, visítalo y pulsa en el nombre del terreno
<scroll_list name="results">
<column label="" name="icon"/>
<column label="" name="type"/>
<column abel="Nombre" name="name" />
<column label="Nombre" name="name" />
<column label="Tráfico" name="dwell"/>
</scroll_list>
<button label="Sig. &gt;" label_selected="Sig. &gt;" name="Next &gt;"/>

View File

@@ -405,7 +405,7 @@ subasta. Para comprarlo directamente, visítalo y pulsa en el nombre del terreno
<scroll_list name="results">
<column label="" name="icon"/>
<column label="" name="type"/>
<column abel="Nombre" name="name" />
<column label="Nombre" name="name" />
<column label="Tráfico" name="dwell"/>
</scroll_list>
<button label="Sig. &gt;" label_selected="Sig. &gt;" name="Next &gt;"/>

View File

@@ -47,7 +47,7 @@
Intenta guardándola como Targa de 24 bits (.tga).
</text>
<check_box label="Usar Compresión sin pérdid" name="lossless_check"/>
<check_box label="Temporaria (Gratis)" name="temp_check" tooltip="Fija el item como temporario, lo cual significa que es gratis pero por un período de tiempo luego del cual, desaparece"/>
<check_box label="Temporaria (Gratis)" name="temp_check" tool_tip="Fija el item como temporario, lo cual significa que es gratis pero por un período de tiempo luego del cual, desaparece"/>
<button label="Cancelar" name="cancel_btn"/>
<button label="Subir ([UPLOADFEE])" name="ok_btn"/>
</floater>

View File

@@ -47,7 +47,6 @@
<menu_item_call name="Properties" label="Propiedades"/>
<menu_item_call name="Rename" label="Renombrar"/>
<menu_item_call name="Copy Asset UUID" label="Copiar Asset UUID"/>
<menu_item_call name="Reupload..." label="Resubir..."/>
<menu_item_call name="Acquire Asset ID" label="Adquirir Asset ID"/>
<menu_item_call name="Cut" label="Cortar"/>
<menu_item_call name="Copy" label="Copiar"/>

View File

@@ -2967,7 +2967,6 @@ Arrastra carpetas a esta zona y pulsa "Enviar al Mercado" para listarlos y poner
<string name="Right Pec">Pectoral Derecho</string>
<string name="Neck">Cuello</string>
<string name="Root">Base</string>
<string name="unsupported point">Punto no soportado</string>
<string name="Invalid Attachment">Punto de anexión inválido</string>
<!-- HUD Position -->

View File

@@ -47,7 +47,6 @@
<menu_item_call name="Properties" label="Propriétés"/>
<menu_item_call name="Rename" label="Renommer"/>
<menu_item_call name="Copy Asset UUID" label="Copier l'UUID (identifiant universel unique)"/>
<menu_item_call name="Reupload..." label="Reupload..."/>
<menu_item_call name="Acquire Asset ID" label="Acquérir Asset ID"/>
<menu_item_call name="Copy" label="Copier"/>
<menu_item_call name="Paste" label="Coller"/>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel label="Chat Avanc&#xE9;" name="ascsys">
<tab_container label="Advanced Chat" name="Ascent Chat">
<panel label="Chat/IM" name="Chat/IM">
<tab_container name="Ascent Chat">
<panel label="Chat/IM" name="Chat/IM">
<check_box label="Annonce les IMs entrants" name="quickstart_im_check"/>
<check_box label="Ne pas envoyer &#x22;[Machin Truc] is typing..." name="hide_typing_check"/>
<check_box label="Montrer le nom du groupe dans le chat" name="append_group_name_check"/>
@@ -10,16 +10,13 @@
<check_box label="Ne pas afficher les notifs. de log dans le chat" name="hide_notifications_in_chat_check"/>
<check_box label="Permet d'utiliser &#x22;/me&#x22; aussi bien que &#x22;:&#x22;" name="allow_mu_pose_check"/>
<check_box label="Ajoute les fins des commentaires (RP mode)" tool_tip="Ajoute automatiquement &#x22;))&#x22; &#xE0; chaque message commen&#xE7;ant par &#x22;((&#x22;, et vice-versa." name="close_ooc_check"/>
<check_box bottom_delta="-20" follows="left|top" control_name="ShowDisplayNameChanges" label="Montre les changements de display name" tool_tip="" name="display_name_change"/>
<text name="objects_link_text_box3">Active un lien qui montre le nom du propri&#xE9;taire dans l'historique du chat pour :</text>
<radio_group tool_tip="Enables a link to show you the owner of the speaking object." name="objects_link">
<check_box label="Montre les changements de display name" tool_tip="" name="display_name_change"/>
<text name="objects_link_text_box3">Active un lien qui montre le nom du propri&#xE9;taire dans l'historique du chat pour :</text>
<radio_group tool_tip="Enables a link to show you the owner of the speaking object." name="objects_link">
<radio_item name="no_object">Aucun objet</radio_item>
<radio_item name="others_objects">Les objets des autres</radio_item>
<radio_item left_delta="65" name="anyones_objects">Tous les objets</radio_item>
</radio_group>
<text name="time_format_text_box">Type d'heure :</text>
<combo_box name="time_format_combobox">
<combo_item name="24hours">Horloge 24/H</combo_item>
@@ -32,22 +29,23 @@
<combo_item name="day_first">JJ/MM/AAAA</combo_item>
<combo_item name="month_first">MM/JJ/AAA</combo_item>
</combo_box>
<check_box bottom_delta="0" left="240" follows="top" control_name="SecondsInLog" label="Secondes dans les horaires de log" name="seconds_in_log"/>
<check_box label="Secondes dans les horaires de log" name="seconds_in_log"/>
<!-- Auto-responder -->
<check_box label="Activer le R&#xE9;pondeur Automatique" name="AscentInstantMessageResponseAnyone"/>
<check_box label="Auto-r&#xE9;ponse aux 'non-friends'" name="AscentInstantMessageResponseFriends"/>
<check_box label="Auto-r&#xE9;ponse aux personnes 'muted'" name="AscentInstantMessageResponseMuted"/>
<check_box label="Auto-r&#xE9;ponse aux 'non-friends'" name="AscentInstantMessageResponseFriends"/>
<check_box label="Auto-r&#xE9;ponse aux personnes 'muted'" name="AscentInstantMessageResponseMuted"/>
<check_box label="Envoyer d&#xE8;s que l'on commence &#xE0; vous &#xE9;crire" name="AscentInstantMessageShowOnTyping"/>
<check_box label="Ne pas montrer les IMs auxquels vous avez r&#xE9;pondu" name="AscentInstantMessageShowResponded"/>
<check_box label="Auto-r&#xE9;ponse &#xE0; chaque message" name="AscentInstantMessageResponseRepeat"/>
<check_box label="Joindre un objet &#xE0; la r&#xE9;ponse" name="AscentInstantMessageResponseItem" tool_tip="Glissez l'objet dans la fen&#xEA;tre de r&#xE9;ponse."/>
<text bottom_delta="140" left_delta="280" follows="left|top" height="18" name="text_box1">Texte de la r&#xE9;ponse :</text>
<text bottom_delta="140" left_delta="280" name="text_box1">Texte de la r&#xE9;ponse :</text>
<text_editor bottom_delta="-130" height="130" name="im_response" width="190"/>
<text name="text_box2">
#f Pr&#xE9;nom,#l Nom,#t Dur&#xE9;e,#r SLURL,
#i Dur&#xE9;e de 'l'IDLE'. (ex. "5 mins")
</text>
</panel>
<panel label="Chat UI" name="ChatUI">
<check_box label="IMs Verticaux (Déco Reco)" name="use_vertical_ims_check"/>
<check_box label="Ouvre les nouveaux IMs séparements" name="chats_torn_off"/>
@@ -68,20 +66,19 @@
<spinner label="Multiplicateur du nombre de messages pour les sons:" name="antispamsoundmulti"/>
<spinner label="Multiplicateur du nombre de sons &#xE0; pr&#xE9;charger par spam:" name="antispamsoundpreloadmulti"/>
<spinner label="Nombre de lignes max. d'un message:" name="antispamnewlines"/>
<check_box label="Me notifier quand un spam est bloqu&#xE9;" name="Notify On Spam"/>
<check_box label="D&#xE9;sactive toutes les fen&#xEA;tres de dialogue (D&#xE9;co/Reco)" name="antispam_checkbox"/>
<text name="Block All Dialogs From">Bloquer tous les dialogues provenants de :</text>
<text name="Block All Dialogs From">Bloquer tous les dialogues provenants de :</text>
<check_box label="Alertes" name="Alerts"/>
<check_box label="Demande d'amitié" name="Friendship Offers"/>
<check_box label="Invitation de groupe" name="Group Invites"/>
<check_box label="Notices de groupes" name="Group Notices"/>
<check_box label="Invit. de frais de grp" name="Group Fee Invites"/>
<check_box label="Offre d'objets" name="Item Offers"/>
<check_box label="Scripts" name="Scripts"/>
<check_box label="Offres de TP" name="Teleport Offers"/>
<check_box label="Me notifier quand un spam est bloqu&#xE9;" name="Notify On Spam" tool_tip="When enabled, the bottom right corner may become a source of pseudo-spam whenever real spam is blocked."/>
<check_box control_name="EnableGestureSounds" label="Active les sons des gestures" name="Enable Gesture Sounds" left="3" bottom_delta="-20"/>
<check_box control_name="AntiSpamGroupFeeInvites" height="16" label="Invit. de frais de grp" name="Group Fee Invites" bottom_delta="0" left_delta="120"/>
</panel>
<check_box label="Notices de groupes" name="Group Notices"/>
<check_box label="Active les sons des gestures" name="Enable Gesture Sounds"/>
</panel>
<panel label="Options de Texte" name="TextOptions">
<check_box label="Montre les 'fot de frap' ou suppos&#xE9;es telles en ROUGE" name="SpellDisplay"/>
@@ -102,9 +99,8 @@ Clic droit sur le mot mal &#xE9;crit et choisir son remplacement.
<check_box label="Chat local" name="KeywordsInChat"/>
<check_box label="IMs" name="KeywordsInIM"/>
<check_box label="Mettre en valeur le message avec cette couleur :" name="KeywordsChangeColor"/>
<color_swatch name="KeywordsColor" tool_tip="Click to open Color Picker"/>
<check_box label="Jouer cette alerte sonore : (UUID)" name="KeywordsPlaySound"/>
</panel>
</tab_container>
</panel>
</panel>

View File

@@ -1,150 +1,69 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel border="true" bottom="-409" height="408" label="Général" left="102" name="general_panel" width="517">
<radio_group bottom="-44" height="40" left="109" name="default_start_location" width="280">
<radio_item bottom="-20" height="20" name="MyHome" tool_tip="Par défaut, choisit le domicile comme lieu de départ.">Domicile</radio_item>
<radio_item bottom="-20" height="20" left="93" name="MyLastLocation" tool_tip="Par défaut, choisit le dernier emplacement comme lieu de départ.">Dernier emplacement</radio_item>
<panel label="Général" name="general_panel">
<radio_group name="default_start_location" width="280">
<radio_item name="MyHome" tool_tip="Par défaut, choisit le domicile comme lieu de départ.">Domicile</radio_item>
<radio_item name="MyLastLocation" tool_tip="Par défaut, choisit le dernier emplacement comme lieu de départ.">Dernier emplacement</radio_item>
</radio_group>
<check_box bottom="-42" height="16" initial_value="true" label="Afficher le lieu de départ sur l&apos;écran de connexion" name="show_location_checkbox"/>
<combo_box bottom_delta="-27" follows="top" height="18" left="103" name="fade_out_combobox" width="111">
<combo_item name="Never" value="Never">Jamais</combo_item>
<combo_item name="Show Temporarily" value="Show Temporarily">Afficher temporairement</combo_item>
<combo_item name="Always" value="Always">Toujours</combo_item>
<check_box label="Afficher le lieu de départ sur l'écran de connexion" name="show_location_checkbox"/>
<combo_box name="fade_out_combobox">
<combo_item name="Never">Jamais</combo_item>
<combo_item name="Show Temporarily">Afficher temporairement</combo_item>
<combo_item name="Always">Toujours</combo_item>
</combo_box>
<combo_box bottom_delta="0" follows="top" height="18" left="220" name="namesystem_combobox" width="166">
<combo_item name="Old Names" value="Anciens Noms">Anciens Names</combo_item>
<combo_item name="Display Names (with Username)" value="Display Names (with Username)">Display Names(w/Username)</combo_item>
<combo_item name="Display Names only" value="Display Names only">Display Names only</combo_item>
<combo_box name="namesystem_combobox">
<combo_item name="Old Names">Anciens Names</combo_item>
<combo_item name="Display Names (with Username)">Display Names(w/Username)</combo_item>
<combo_item name="Display Names only">Display Names only</combo_item>
</combo_box>
<check_box label="Nom des avatars en petit" name="small_avatar_names_checkbox"/>
<check_box label="Masquer mon nom sur mon écran" name="show_my_name_checkbox"/>
<text name="group_titles_textbox">
Titres de groupe :
</text>
<text name="group_titles_textbox">Titres de groupe :</text>
<check_box label="Masquer tous les titres de groupe" name="show_all_title_checkbox"/>
<check_box label="Masquer mon titre de groupe" name="show_my_title_checkbox"/>
<color_swatch label="" name="effect_color_swatch" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
<text name="UI Size:">
Taille de l&apos;interface :
</text>
<slider name="ui_scale_slider"/>
<check_box label="Utiliser une échelle indépendante de la résolution" name="ui_auto_scale"/>
<spinner label="Absent(e) après :" name="afk_timeout_spinner"/>
<check_box label="Avertir lorsque je dépense ou reçois des L$" name="notify_money_change_checkbox"/>
<check_box bottom="-257" height="16" label="Sans afficher dans le coin" left="245" name="no_transaction_clutter_checkbox" tool_tip="Toujours présente mais momentanément affichée en bas"/>
<text name="maturity_desired_label">
Catégories :
</text>
<text name="maturity_desired_prompt">
Acc&#xE8;s au contenu classé :
</text>
<check_box label="Sans afficher dans le coin" name="no_transaction_clutter_checkbox" tool_tip="Toujours présente mais momentanément affichée en bas"/>
<text name="maturity_desired_label">Catégories :</text>
<text name="maturity_desired_prompt">Acc&#xE8;s au contenu classé :</text>
<combo_box name="maturity_desired_combobox" left="340">
<combo_item name="Desired_Adult">
PG, Mature, Adulte
</combo_item>
<combo_item name="Desired_Mature">
PG et Mature
</combo_item>
<combo_item name="Desired_PG">
PG uniquement
</combo_item>
</combo_box>
<text name="maturity_desired_textbox" left="340">
PG uniquement
</text>
<text length="1" name="start_location_textbox" type="string">
Lieu de départ :
</text>
<text length="1" name="show_names_textbox" type="string">
Afficher les noms :
</text>
<text bottom="-174" length="1" name="effects_color_textbox" type="string">
Couleur du faisceau
de sélection :
</text>
<text length="1" name="seconds_textbox" type="string">
secondes
</text>
<text length="1" name="crash_report_textbox" type="string">
Rapports de crash :
</text>
<text length="1" name="language_textbox" type="string">
Langue :
</text>
<text left_delta="313" length="1" name="language_textbox2" type="string">
(redémarrage requis)
</text>
<string name="region_name_prompt">
&lt;Saisir le nom de la région&gt;
</string>
<combo_box name="crash_behavior_combobox" width="166">
<combo_item length="1" name="Askbeforesending" type="string">
Demander avant d&apos;envoyer
</combo_item>
<combo_item length="1" name="Alwayssend" type="string">
Toujours envoyer
</combo_item>
<combo_item length="1" name="Neversend" type="string">
Ne jamais envoyer
</combo_item>
<combo_item name="Desired_Adult">PG, Mature, Adulte</combo_item>
<combo_item name="Desired_Mature">PG et Mature</combo_item>
<combo_item name="Desired_PG">PG uniquement</combo_item>
</combo_box>
<text name="maturity_desired_textbox" left="340">PG uniquement</text>
<text name="start_location_textbox">Lieu de départ :</text>
<text name="show_names_textbox">Afficher les noms :</text>
<text name="seconds_textbox">secondes</text>
<text name="crash_report_textbox">Rapports de crash :</text>
<text name="language_textbox">Langue :</text>
<text left_delta="313" name="language_textbox2">(redémarrage requis)</text>
<combo_box name="language_combobox" width="166">
<combo_item name="System Default Language">
Choix par défaut
</combo_item>
<combo_item length="1" name="English" type="string">
English (Anglais)
</combo_item>
<combo_item length="1" name="Danish" type="string">
Dansk (Danois) - Bêta
</combo_item>
<combo_item length="1" name="Deutsch(German)" type="string">
Deutsch (Allemand) - Bêta
</combo_item>
<combo_item name="Spanish">
Español (Espagnol) - Bêta
</combo_item>
<combo_item name="French">
Français - Bêta
</combo_item>
<combo_item name="Italian">
Italiano (Italien) - Bêta
</combo_item>
<combo_item name="Hungarian">
Magyar (Hongrois) - Bêta
</combo_item>
<combo_item name="Dutch">
Nederlands (Néerlandais) - Bêta
</combo_item>
<combo_item name="Polish">
Polski (Polonais) - Bêta
</combo_item>
<combo_item name="Portugese">
Portugués (Portugais) - Bêta
</combo_item>
<combo_item name="Russian">
Русский (Russe) - Bêta
</combo_item>
<combo_item name="Turkish">
Türkçe (Turc) - Bêta
</combo_item>
<combo_item name="Ukrainian">
Українська (Ukrainien) - Bêta
</combo_item>
<combo_item length="1" name="Chinese" type="string">
中文 (简体) (Chinois) - Bêta
</combo_item>
<combo_item length="1" name="(Japanese)" type="string">
日本語 (Japonais) - Bêta
</combo_item>
<combo_item length="1" name="(Korean)" type="string">
한국어 (Coréen) - Bêta
</combo_item>
<combo_item name="System Default Language">Choix par défaut</combo_item>
<combo_item name="English">English (Anglais)</combo_item>
<!-- After "System Default" and "English", please keep the rest of these combo_items in alphabetical order by the first character in the string.-->
<combo_item name="Spanish">Español (Espagnol)</combo_item>
<combo_item name="French">Français</combo_item>
<combo_item name="Portugese">Portugués (Portugais)</combo_item>
<!-- Also, with the above advice in mind, keep completed UI translations above this line.-->
<combo_item name="Danish">Dansk (Danois) - Bêta</combo_item>
<combo_item name="Deutsch(German)">Deutsch (Allemand) - Bêta</combo_item>
<combo_item name="Italian">Italiano (Italien) - Bêta</combo_item>
<combo_item name="Hungarian">Magyar (Hongrois) - Bêta</combo_item>
<combo_item name="Dutch">Nederlands (Néerlandais) - Bêta</combo_item>
<combo_item name="Polish">Polski (Polonais) - Bêta</combo_item>
<combo_item name="Russian">Русский (Russe) - Bêta</combo_item>
<combo_item name="Turkish">Türkçe (Turc) - Bêta</combo_item>
<combo_item name="Ukrainian">Українська (Ukrainien) - Bêta</combo_item>
<combo_item name="Chinese">中文 (简体) (Chinois) - Bêta</combo_item>
<combo_item name="(Japanese)">日本語 (Japonais) - Bêta</combo_item>
<combo_item name="(Korean)">한국어 (Coréen) - Bêta</combo_item>
</combo_box>
<check_box bottom="-385" height="16" initial_value="false" label="Partager la langue avec les objets" left="101" name="language_is_public" tool_tip="Cette option permet de faire connaître aux objets du Monde votre langue favorite."/>
<button bottom="-425" height="25" label="Re initialiser tous les Settings (réglages)" name="clear_settings" width="250" />
<string name="region_name_prompt">&lt;Saisir le nom de la région&gt;</string>
<combo_box name="crash_behavior_combobox" width="166">
<combo_item name="Askbeforesending">Demander avant d'envoyer</combo_item>
<combo_item name="Alwayssend">Toujours envoyer</combo_item>
<combo_item name="Neversend">Ne jamais envoyer</combo_item>
</combo_box>
<check_box label="Partager la langue avec les objets" name="language_is_public" tool_tip="Cette option permet de faire connaître aux objets du Monde votre langue favorite."/>
<button label="Re initialiser tous les Settings (réglages)" name="clear_settings" width="250" />
</panel>