diff options
Diffstat (limited to 'indra/newview')
89 files changed, 1228 insertions, 517 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 7ed24236b1..c3a54002c2 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -574,6 +574,17 @@        <key>Value</key>        <integer>2</integer>      </map> +    <key>AvatarUseBakedTextureTimeout</key> +    <map> +      <key>Comment</key> +      <string>Specifes whether to send your baked textures for avatar appearance even before textures are fully ressed in case of timeout</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map>      <key>AvatarSex</key>      <map>        <key>Comment</key> @@ -1597,6 +1608,17 @@        <key>Value</key>        <integer>1</integer>      </map> +    <key>ChatBarCustomWidth</key> +    <map> +      <key>Comment</key> +      <string>Stores customized width of chat bar.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>S32</string> +      <key>Value</key> +      <integer>0</integer> +    </map>      <key>CreateToolCopyCenters</key>      <map>        <key>Comment</key> @@ -8085,6 +8107,28 @@        <key>Value</key>        <integer>1</integer>      </map> +    <key>ShowBuildButton</key> +    <map> +      <key>Comment</key> +      <string>Shows/Hides Build button in the bottom tray.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>ShowCameraButton</key> +    <map> +      <key>Comment</key> +      <string>Show/Hide View button in the bottom tray.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map>      <key>ShowConsoleWindow</key>      <map>        <key>Comment</key> @@ -8162,6 +8206,17 @@        <key>Value</key>        <integer>0</integer>      </map> +    <key>ShowGestureButton</key> +    <map> +      <key>Comment</key> +      <string>Shows/Hides Gesture button in the bottom tray.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map>      <key>ShowHoverTips</key>      <map>        <key>Comment</key> @@ -8184,6 +8239,28 @@        <key>Value</key>        <integer>0</integer>      </map>     +    <key>ShowMiniMapButton</key> +    <map> +      <key>Comment</key> +      <string>Shows/Hides Mini-Map button in the bottom tray.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>ShowMoveButton</key> +    <map> +      <key>Comment</key> +      <string>Shows/Hides Move button in the bottom tray.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map>  	<key>ShowScriptErrors</key>      <map>        <key>Comment</key> @@ -8206,6 +8283,39 @@        <key>Value</key>        <integer>1</integer>      </map> +    <key>ShowSearchButton</key> +    <map> +      <key>Comment</key> +      <string>Shows/Hides Search button in the bottom tray.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>ShowSidebarButton</key> +    <map> +      <key>Comment</key> +      <string>Shows/hides Sidebar button in the bottom tray.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>ShowSnapshotButton</key> +    <map> +      <key>Comment</key> +      <string>Shows/Hides Snapshot button button in the bottom tray.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map>      <key>ShowObjectRenderingCost</key>                      <map>        <key>Comment</key> @@ -8239,6 +8349,17 @@        <key>Value</key>        <integer>1</integer>         </map> +    <key>ShowWorldMapButton</key> +    <map> +      <key>Comment</key> +      <string>Shows/Hides Map button in the bottom tray.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map>      <key>SidebarCameraMovement</key>      <map>        <key>Comment</key> @@ -11249,5 +11370,19 @@        <key>Value</key>        <integer>178</integer>      </map> +    <key>always_showable_floaters</key> +    <map> +      <key>Comment</key> +      <string>Floaters that can be shown despite mouselook mode</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>LLSD</string> +      <key>Value</key> +      <array> +	      <string>snapshot</string> +	      <string>mini_map</string> +      </array> +    </map>  </map>  </llsd> diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index cc9e68d593..e5796f8e63 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -718,16 +718,16 @@ U32 LLAgentWearables::pushWearable(const LLWearableType::EType type, LLWearable  	{  		// no null wearables please!  		llwarns << "Null wearable sent for type " << type << llendl; -		return MAX_WEARABLES_PER_TYPE; +		return MAX_CLOTHING_PER_TYPE;  	} -	if (type < LLWearableType::WT_COUNT || mWearableDatas[type].size() < MAX_WEARABLES_PER_TYPE) +	if (type < LLWearableType::WT_COUNT || mWearableDatas[type].size() < MAX_CLOTHING_PER_TYPE)  	{  		mWearableDatas[type].push_back(wearable);  		wearableUpdated(wearable);  		checkWearableAgainstInventory(wearable);  		return mWearableDatas[type].size()-1;  	} -	return MAX_WEARABLES_PER_TYPE; +	return MAX_CLOTHING_PER_TYPE;  }  void LLAgentWearables::wearableUpdated(LLWearable *wearable) @@ -764,7 +764,7 @@ void LLAgentWearables::popWearable(LLWearable *wearable)  	U32 index = getWearableIndex(wearable);  	LLWearableType::EType type = wearable->getType(); -	if (index < MAX_WEARABLES_PER_TYPE && index < getWearableCount(type)) +	if (index < MAX_CLOTHING_PER_TYPE && index < getWearableCount(type))  	{  		popWearable(type, index);  	} @@ -785,7 +785,7 @@ U32	LLAgentWearables::getWearableIndex(LLWearable *wearable)  {  	if (wearable == NULL)  	{ -		return MAX_WEARABLES_PER_TYPE; +		return MAX_CLOTHING_PER_TYPE;  	}  	const LLWearableType::EType type = wearable->getType(); @@ -793,7 +793,7 @@ U32	LLAgentWearables::getWearableIndex(LLWearable *wearable)  	if (wearable_iter == mWearableDatas.end())  	{  		llwarns << "tried to get wearable index with an invalid type!" << llendl; -		return MAX_WEARABLES_PER_TYPE; +		return MAX_CLOTHING_PER_TYPE;  	}  	const wearableentry_vec_t& wearable_vec = wearable_iter->second;  	for(U32 index = 0; index < wearable_vec.size(); index++) @@ -804,7 +804,7 @@ U32	LLAgentWearables::getWearableIndex(LLWearable *wearable)  		}  	} -	return MAX_WEARABLES_PER_TYPE; +	return MAX_CLOTHING_PER_TYPE;  }  const LLWearable* LLAgentWearables::getWearable(const LLWearableType::EType type, U32 index) const diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index c53b1333fc..5d5c5ae371 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -102,6 +102,9 @@ public:  	U32				getWearableCount(const LLWearableType::EType type) const;  	U32				getWearableCount(const U32 tex_index) const; +	static const U32 MAX_CLOTHING_PER_TYPE = 5;  + +  	//--------------------------------------------------------------------  	// Setters  	//-------------------------------------------------------------------- @@ -274,8 +277,6 @@ private:  		LLPointer<LLRefCount> mCB;  	}; -	static const U32 MAX_WEARABLES_PER_TYPE = 1;  -  }; // LLAgentWearables  extern LLAgentWearables gAgentWearables; diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 8cc4436188..c417f8bdf5 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -970,7 +970,7 @@ void LLAppearanceMgr::updateCOF(const LLUUID& category, bool append)  	getDescendentsOfAssetType(category, wear_items, LLAssetType::AT_CLOTHING, false);  	// Reduce wearables to max of one per type.  	removeDuplicateItems(wear_items); -	filterWearableItems(wear_items, 5); +	filterWearableItems(wear_items, LLAgentWearables::MAX_CLOTHING_PER_TYPE);  	// - Attachments: include COF contents only if appending.  	LLInventoryModel::item_array_t obj_items; @@ -1525,11 +1525,12 @@ void LLAppearanceMgr::addCOFItemLink(const LLInventoryItem *item, bool do_update  	else  	{  		LLPointer<LLInventoryCallback> cb = do_update ? new ModifiedCOFCallback : 0; +		const std::string description = vitem->getIsLinkType() ? vitem->getDescription() : "";  		link_inventory_item( gAgent.getID(),  							 vitem->getLinkedUUID(),  							 getCOF(),  							 vitem->getName(), -							 vitem->getDescription(), +							 description,  							 LLAssetType::AT_LINK,  							 cb);  	} diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index ae97460468..a057421135 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -168,7 +168,7 @@ LLBottomTray::LLBottomTray(const LLSD&)  	LLUICtrlFactory::getInstance()->buildPanel(this,"panel_bottomtray.xml"); -	LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraPresets, _2)); +	LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2));  	//this is to fix a crash that occurs because LLBottomTray is a singleton  	//and thus is deleted at the end of the viewers lifetime, but to be cleanly @@ -1220,18 +1220,6 @@ void LLBottomTray::initButtonsVisibility()  void LLBottomTray::setButtonsControlsAndListeners()  { -	gSavedSettings.declareBOOL("ShowGestureButton", TRUE, "Shows/Hides Gesture button in the bottom tray. (Declared in code)"); -	gSavedSettings.declareBOOL("ShowMoveButton", TRUE, "Shows/Hides Move button in the bottom tray. (Declared in code)"); -	gSavedSettings.declareBOOL("ShowSnapshotButton", TRUE, "Shows/Hides Snapshot button button in the bottom tray. (Declared in code)"); -	gSavedSettings.declareBOOL("ShowCameraButton", TRUE, "Show/Hide View button in the bottom tray. (Declared in code)"); -	gSavedSettings.declareBOOL("ShowSidebarButton", TRUE, "Shows/hides Sidebar button in the bottom tray. (Declared in code)"); -	gSavedSettings.declareBOOL("ShowBuildButton", TRUE, "Shows/Hides Build button in the bottom tray. (Declared in code)"); -	gSavedSettings.declareBOOL("ShowSearchButton", TRUE, "Shows/Hides Search button in the bottom tray. (Declared in code)"); -	gSavedSettings.declareBOOL("ShowWorldMapButton", TRUE, "Shows/Hides Map button in the bottom tray. (Declared in code)"); -	gSavedSettings.declareBOOL("ShowMiniMapButton", TRUE, "Shows/Hides Mini-Map button in the bottom tray. (Declared in code)"); - -	gSavedSettings.declareS32("ChatBarCustomWidth", 0, "Stores customized width of chat bar. (Declared in code)"); -  	gSavedSettings.getControl("ShowGestureButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_GESTURES, _2));  	gSavedSettings.getControl("ShowMoveButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_MOVEMENT, _2));  	gSavedSettings.getControl("ShowCameraButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_CAMERA, _2)); diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index dfc203111a..0864d63919 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -308,13 +308,15 @@ void LLCOFWearables::populateAttachmentsAndBodypartsLists(const LLInventoryModel  LLPanelClothingListItem* LLCOFWearables::buildClothingListItem(LLViewerInventoryItem* item, bool first, bool last)  {  	llassert(item); - +	if (!item) return NULL;  	LLPanelClothingListItem* item_panel = LLPanelClothingListItem::create(item);  	if (!item_panel) return NULL;  	//updating verbs  	//we don't need to use permissions of a link but of an actual/linked item  	if (item->getLinkedItem()) item = item->getLinkedItem(); +	llassert(item); +	if (!item) return NULL;  	bool allow_modify = item->getPermissions().allowModifyBy(gAgentID); @@ -340,14 +342,15 @@ LLPanelClothingListItem* LLCOFWearables::buildClothingListItem(LLViewerInventory  LLPanelBodyPartsListItem* LLCOFWearables::buildBodypartListItem(LLViewerInventoryItem* item)  {  	llassert(item); - +	if (!item) return NULL;  	LLPanelBodyPartsListItem* item_panel = LLPanelBodyPartsListItem::create(item);  	if (!item_panel) return NULL;  	//updating verbs  	//we don't need to use permissions of a link but of an actual/linked item  	if (item->getLinkedItem()) item = item->getLinkedItem(); - +	llassert(item); +	if (!item) return NULL;  	bool allow_modify = item->getPermissions().allowModifyBy(gAgentID);  	item_panel->setShowLockButton(!allow_modify);  	item_panel->setShowEditButton(allow_modify); diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp index fd392d949a..847462a6c3 100644 --- a/indra/newview/llfloateravatartextures.cpp +++ b/indra/newview/llfloateravatartextures.cpp @@ -160,8 +160,7 @@ void LLFloaterAvatarTextures::onClickDump(void* data)  {  	if (gAgent.isGodlike())  	{ -		LLFloaterAvatarTextures* self = (LLFloaterAvatarTextures*)data; -		LLVOAvatar* avatarp = find_avatar(self->mID); +		const LLVOAvatarSelf* avatarp = gAgentAvatarp;  		if (!avatarp) return;  		for (S32 i = 0; i < avatarp->getNumTEs(); i++)  		{ diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index d84ebef1dd..ca346138fb 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -47,15 +47,19 @@  #include "lltoolfocus.h"  #include "llslider.h" +static LLDefaultChildRegistry::Register<LLPanelCameraItem> r("panel_camera_item"); +  // Constants  const F32 CAMERA_BUTTON_DELAY = 0.0f;  #define ORBIT "cam_rotate_stick"  #define PAN "cam_track_stick"  #define ZOOM "zoom" -#define PRESETS "camera_presets" +#define PRESETS "preset_views_list"  #define CONTROLS "controls" +bool LLFloaterCamera::sFreeCamera = false; +  // Zoom the camera in and out  class LLPanelCameraZoom  :	public LLPanel @@ -78,6 +82,68 @@ private:  	LLSlider*	mSlider;  }; +LLPanelCameraItem::Params::Params() +:	icon_over("icon_over"), +	icon_selected("icon_selected"), +	picture("picture"), +	text("text"), +	selected_picture("selected_picture"), +	mousedown_callback("mousedown_callback") +{ +} + +LLPanelCameraItem::LLPanelCameraItem(const LLPanelCameraItem::Params& p) +:	LLPanel(p) +{ +	LLIconCtrl::Params icon_params = p.picture; +	mPicture = LLUICtrlFactory::create<LLIconCtrl>(icon_params); +	addChild(mPicture); + +	icon_params = p.icon_over; +	mIconOver = LLUICtrlFactory::create<LLIconCtrl>(icon_params); +	addChild(mIconOver); + +	icon_params = p.icon_selected; +	mIconSelected = LLUICtrlFactory::create<LLIconCtrl>(icon_params); +	addChild(mIconSelected); + +	icon_params = p.selected_picture; +	mPictureSelected = LLUICtrlFactory::create<LLIconCtrl>(icon_params); +	addChild(mPictureSelected); + +	LLTextBox::Params text_params = p.text; +	mText = LLUICtrlFactory::create<LLTextBox>(text_params); +	addChild(mText); + +	if (p.mousedown_callback.isProvided()) +	{ +		setCommitCallback(initCommitCallback(p.mousedown_callback)); +	} +} + +BOOL LLPanelCameraItem::postBuild() +{ +	setMouseEnterCallback(boost::bind(&LLPanelCameraItem::childSetVisible, this, "hovered_icon", true)); +	setMouseLeaveCallback(boost::bind(&LLPanelCameraItem::childSetVisible, this, "hovered_icon", false)); +	setMouseDownCallback(boost::bind(&LLPanelCameraItem::onAnyMouseClick, this)); +	setRightMouseDownCallback(boost::bind(&LLPanelCameraItem::onAnyMouseClick, this)); +	return TRUE; +} + +void LLPanelCameraItem::onAnyMouseClick() +{ +	if (mCommitSignal) (*mCommitSignal)(this, LLSD()); +} + +void LLPanelCameraItem::setValue(const LLSD& value) +{ +	if (!value.isMap()) return;; +	if (!value.has("selected")) return; +	childSetVisible("selected_icon", value["selected"]); +	childSetVisible("picture", !value["selected"]); +	childSetVisible("selected_picture", value["selected"]); +} +  static LLRegisterPanelClassWrapper<LLPanelCameraZoom> t_camera_zoom_panel("camera_zoom_panel");  //------------------------------------------------------------------------------- @@ -153,16 +219,11 @@ void activate_camera_tool()  	return false;  } -bool LLFloaterCamera::inAvatarViewMode() -{ -	return mCurrMode == CAMERA_CTRL_MODE_AVATAR_VIEW; -} -  void LLFloaterCamera::resetCameraMode()  {  	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();  	if (!floater_camera) return; -	floater_camera->switchMode(CAMERA_CTRL_MODE_ORBIT); +	floater_camera->switchMode(CAMERA_CTRL_MODE_PAN);  }  void LLFloaterCamera::update() @@ -180,9 +241,13 @@ void LLFloaterCamera::toPrevMode()  /*static*/ void LLFloaterCamera::onLeavingMouseLook()  {  	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance(); -	if (floater_camera && floater_camera->inFreeCameraMode()) +	if (floater_camera)  	{ -		activate_camera_tool(); +		floater_camera->updateItemsSelection(); +		if(floater_camera->inFreeCameraMode()) +		{ +			activate_camera_tool(); +		}  	}  } @@ -216,24 +281,24 @@ void LLFloaterCamera::onClose(bool app_quitting)  	//We don't care of camera mode if app is quitting  	if(app_quitting)  		return; -	// When mCurrMode is in CAMERA_CTRL_MODE_ORBIT +	// When mCurrMode is in CAMERA_CTRL_MODE_PAN  	// switchMode won't modify mPrevMode, so force it here.  	// It is needed to correctly return to previous mode on open, see EXT-2727. -	if (mCurrMode == CAMERA_CTRL_MODE_ORBIT) -		mPrevMode = CAMERA_CTRL_MODE_ORBIT; +	if (mCurrMode == CAMERA_CTRL_MODE_PAN) +		mPrevMode = CAMERA_CTRL_MODE_PAN;  	// HACK: Should always close as docked to prevent toggleInstance without calling onOpen.  	if ( !isDocked() )  		setDocked(true); -	switchMode(CAMERA_CTRL_MODE_ORBIT); +	switchMode(CAMERA_CTRL_MODE_PAN);  	mClosed = TRUE;  }  LLFloaterCamera::LLFloaterCamera(const LLSD& val)  :	LLTransientDockableFloater(NULL, true, val),  	mClosed(FALSE), -	mCurrMode(CAMERA_CTRL_MODE_ORBIT), -	mPrevMode(CAMERA_CTRL_MODE_ORBIT) +	mCurrMode(CAMERA_CTRL_MODE_PAN), +	mPrevMode(CAMERA_CTRL_MODE_PAN)  {  } @@ -247,16 +312,32 @@ BOOL LLFloaterCamera::postBuild()  	mZoom = getChild<LLPanelCameraZoom>(ZOOM);  	mTrack = getChild<LLJoystickCameraTrack>(PAN); -	assignButton2Mode(CAMERA_CTRL_MODE_ORBIT,			"orbit_btn"); +	assignButton2Mode(CAMERA_CTRL_MODE_MODES,			"avatarview_btn");  	assignButton2Mode(CAMERA_CTRL_MODE_PAN,				"pan_btn"); -	assignButton2Mode(CAMERA_CTRL_MODE_FREE_CAMERA,		"freecamera_btn"); -	assignButton2Mode(CAMERA_CTRL_MODE_AVATAR_VIEW,		"avatarview_btn"); +	assignButton2Mode(CAMERA_CTRL_MODE_PRESETS,		"presets_btn");  	update();  	return LLDockableFloater::postBuild();  } +void LLFloaterCamera::fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel) +{ +	// copying child list and then iterating over a copy, because list itself +	// is changed in process +	const child_list_t child_list = *panel->getChildList(); +	child_list_t::const_reverse_iterator iter = child_list.rbegin(); +	child_list_t::const_reverse_iterator end = child_list.rend(); +	for ( ; iter != end; ++iter) +	{ +		LLView* view = *iter; +		LLPanel* item = dynamic_cast<LLPanel*>(view); +		if (panel) +			list->addItem(item); +	} + +} +  ECameraControlMode LLFloaterCamera::determineMode()  {  	LLTool* curr_tool = LLToolMgr::getInstance()->getCurrentTool(); @@ -267,10 +348,10 @@ ECameraControlMode LLFloaterCamera::determineMode()  	if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK)  	{ -		return CAMERA_CTRL_MODE_AVATAR_VIEW; +		return CAMERA_CTRL_MODE_PRESETS;  	} -	return CAMERA_CTRL_MODE_ORBIT; +	return CAMERA_CTRL_MODE_PAN;  } @@ -301,21 +382,16 @@ void LLFloaterCamera::setModeTitle(const ECameraControlMode mode)  	std::string title;   	switch(mode)  	{ -	case CAMERA_CTRL_MODE_ORBIT: -		title = getString("orbit_mode_title"); +	case CAMERA_CTRL_MODE_MODES: +		title = getString("camera_modes_title");  		break;  	case CAMERA_CTRL_MODE_PAN:  		title = getString("pan_mode_title");  		break; -	case CAMERA_CTRL_MODE_AVATAR_VIEW: -		title = getString("avatar_view_mode_title"); -		break; -	case CAMERA_CTRL_MODE_FREE_CAMERA: -		title = getString("free_mode_title"); +	case CAMERA_CTRL_MODE_PRESETS: +		title = getString("presets_mode_title");  		break;  	default: -		// title should be provided for all modes -		llassert(false);  		break;  	}  	setTitle(title); @@ -327,19 +403,28 @@ void LLFloaterCamera::switchMode(ECameraControlMode mode)  	switch (mode)  	{ -	case CAMERA_CTRL_MODE_ORBIT: -		clear_camera_tool(); +	case CAMERA_CTRL_MODE_MODES: +		if(sFreeCamera) +		{ +			switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); +		}  		break;  	case CAMERA_CTRL_MODE_PAN: +		sFreeCamera = false;  		clear_camera_tool();  		break;  	case CAMERA_CTRL_MODE_FREE_CAMERA: +		sFreeCamera = true;  		activate_camera_tool();  		break; -	case CAMERA_CTRL_MODE_AVATAR_VIEW: +	case CAMERA_CTRL_MODE_PRESETS: +		if(sFreeCamera) +		{ +			switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); +		}  		break;  	default: @@ -368,66 +453,80 @@ void LLFloaterCamera::assignButton2Mode(ECameraControlMode mode, const std::stri  void LLFloaterCamera::updateState()  { +	childSetVisible(ZOOM, CAMERA_CTRL_MODE_PAN == mCurrMode); +	 +	bool show_presets = (CAMERA_CTRL_MODE_PRESETS == mCurrMode) || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode +																	&& CAMERA_CTRL_MODE_PRESETS == mPrevMode); +	childSetVisible(PRESETS, show_presets); +	 +	bool show_camera_modes = CAMERA_CTRL_MODE_MODES == mCurrMode || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode +																	&& CAMERA_CTRL_MODE_MODES == mPrevMode); +	childSetVisible("camera_modes_list", show_camera_modes); + +	updateItemsSelection(); + +	if (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode) +	{ +		return; +	} +  	//updating buttons  	std::map<ECameraControlMode, LLButton*>::const_iterator iter = mMode2Button.begin();  	for (; iter != mMode2Button.end(); ++iter)  	{  		iter->second->setToggleState(iter->first == mCurrMode);  	} - -	childSetVisible(ORBIT, CAMERA_CTRL_MODE_ORBIT == mCurrMode); -	childSetVisible(PAN, CAMERA_CTRL_MODE_PAN == mCurrMode); -	childSetVisible(ZOOM, CAMERA_CTRL_MODE_AVATAR_VIEW != mCurrMode); -	childSetVisible(PRESETS, CAMERA_CTRL_MODE_AVATAR_VIEW == mCurrMode); - -	updateCameraPresetButtons();  	setModeTitle(mCurrMode); - - -	//hiding or showing the panel with controls by reshaping the floater -	bool showControls = CAMERA_CTRL_MODE_FREE_CAMERA != mCurrMode; -	if (showControls == childIsVisible(CONTROLS)) return; - -	childSetVisible(CONTROLS, showControls); - -	LLRect rect = getRect(); -	LLRect controls_rect; -	if (childGetRect(CONTROLS, controls_rect)) -	{ -		S32 floater_header_size = getHeaderHeight(); -		S32 height = controls_rect.getHeight() - floater_header_size; -		S32 newHeight = rect.getHeight(); -		 -		if (showControls) -		{ -			newHeight += height; -		} -		else -		{ -			newHeight -= height; -		} - -		rect.setOriginAndSize(rect.mLeft, rect.mBottom, rect.getWidth(), newHeight); -		reshape(rect.getWidth(), rect.getHeight()); -		setRect(rect); - -	}  } -void LLFloaterCamera::updateCameraPresetButtons() +void LLFloaterCamera::updateItemsSelection()  {  	ECameraPreset preset = (ECameraPreset) gSavedSettings.getU32("CameraPreset"); -	 -	childSetValue("rear_view",		preset == CAMERA_PRESET_REAR_VIEW); -	childSetValue("group_view",		preset == CAMERA_PRESET_GROUP_VIEW); -	childSetValue("front_view",		preset == CAMERA_PRESET_FRONT_VIEW); -	childSetValue("mouselook_view",	gAgentCamera.cameraMouselook()); +	LLSD argument; +	argument["selected"] = preset == CAMERA_PRESET_REAR_VIEW; +	getChild<LLPanelCameraItem>("rear_view")->setValue(argument); +	argument["selected"] = preset == CAMERA_PRESET_GROUP_VIEW; +	getChild<LLPanelCameraItem>("group_view")->setValue(argument); +	argument["selected"] = preset == CAMERA_PRESET_FRONT_VIEW; +	getChild<LLPanelCameraItem>("front_view")->setValue(argument); +	argument["selected"] = gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK; +	getChild<LLPanelCameraItem>("mouselook_view")->setValue(argument); +	argument["selected"] = mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA; +	getChild<LLPanelCameraItem>("object_view")->setValue(argument);  } -void LLFloaterCamera::onClickCameraPresets(const LLSD& param) +void LLFloaterCamera::onClickCameraItem(const LLSD& param)  {  	std::string name = param.asString(); +	if ("mouselook_view" == name) +	{ +		gAgentCamera.changeCameraToMouselook(); +	} +	else if ("object_view" == name) +	{ +		LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); +		if (camera_floater) +		camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); +	} +	else +	{ +		switchToPreset(name); +	} + +	LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); +	if (camera_floater) +	{ +		camera_floater->updateItemsSelection(); +		camera_floater->fromFreeToPresets(); +	} +} + +/*static*/ +void LLFloaterCamera::switchToPreset(const std::string& name) +{ +	sFreeCamera = false; +	clear_camera_tool();  	if ("rear_view" == name)  	{  		gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW); @@ -440,12 +539,12 @@ void LLFloaterCamera::onClickCameraPresets(const LLSD& param)  	{  		gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW);  	} -	else if ("mouselook_view" == name) +} + +void LLFloaterCamera::fromFreeToPresets() +{ +	if (!sFreeCamera && mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && mPrevMode == CAMERA_CTRL_MODE_PRESETS)  	{ -		gAgentCamera.changeCameraToMouselook(); +		switchMode(CAMERA_CTRL_MODE_PRESETS);  	} - -	LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); -	if (camera_floater) -		camera_floater->updateCameraPresetButtons();  } diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h index b268839165..8fa7a53996 100644 --- a/indra/newview/llfloatercamera.h +++ b/indra/newview/llfloatercamera.h @@ -34,6 +34,9 @@  #define LLFLOATERCAMERA_H  #include "lltransientdockablefloater.h" +#include "lliconctrl.h" +#include "lltextbox.h" +#include "llflatlistview.h"  class LLJoystickCameraRotate;  class LLJoystickCameraZoom; @@ -43,10 +46,10 @@ class LLPanelCameraZoom;  enum ECameraControlMode  { -	CAMERA_CTRL_MODE_ORBIT, +	CAMERA_CTRL_MODE_MODES,  	CAMERA_CTRL_MODE_PAN,  	CAMERA_CTRL_MODE_FREE_CAMERA, -	CAMERA_CTRL_MODE_AVATAR_VIEW +	CAMERA_CTRL_MODE_PRESETS  };  class LLFloaterCamera @@ -58,8 +61,8 @@ public:  	/* whether in free camera mode */  	static bool inFreeCameraMode(); -	/* callback for camera presets changing */ -	static void onClickCameraPresets(const LLSD& param); +	/* callback for camera items selection changing */ +	static void onClickCameraItem(const LLSD& param);  	static void onLeavingMouseLook(); @@ -68,7 +71,14 @@ public:  	/* determines actual mode and updates ui */  	void update(); -	 + +	/*switch to one of the camera presets (front, rear, side)*/ +	static void switchToPreset(const std::string& name); + +	/* move to CAMERA_CTRL_MODE_PRESETS from CAMERA_CTRL_MODE_FREE_CAMERA if we are on presets panel and +	   are not in free camera mode*/ +	void fromFreeToPresets(); +  	virtual void onOpen(const LLSD& key);  	virtual void onClose(bool app_quitting); @@ -88,9 +98,6 @@ private:  	ECameraControlMode determineMode(); -	/* whether in avatar view (first person) mode */ -	bool inAvatarViewMode(); -  	/* resets to the previous mode */  	void toPrevMode(); @@ -106,18 +113,59 @@ private:  	/* updates the state (UI) according to the current mode */  	void updateState(); -	/* update camera preset buttons toggle state according to the currently selected preset */ -	void updateCameraPresetButtons(); +	/* update camera modes items selection and camera preset items selection according to the currently selected preset */ +	void updateItemsSelection();  	void onClickBtn(ECameraControlMode mode);  	void assignButton2Mode(ECameraControlMode mode, const std::string& button_name); +	// fills flatlist with items from given panel +	void fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel); +	// set to true when free camera mode is selected in modes list +	// remains true until preset camera mode is chosen, or pan button is clicked, or escape pressed +	static bool sFreeCamera;  	BOOL mClosed;  	ECameraControlMode mPrevMode;  	ECameraControlMode mCurrMode;  	std::map<ECameraControlMode, LLButton*> mMode2Button; +}; +/** + * Class used to represent widgets from panel_camera_item.xml-  + * panels that contain pictures and text. Pictures are different + * for selected and unselected state (this state is nor stored- icons + * are changed in setValue()). This class doesn't implement selection logic- + * it's items are used inside of flatlist. + */ +class LLPanelCameraItem  +	: public LLPanel +{ +public: +	struct Params :	public LLInitParam::Block<Params, LLPanel::Params> +	{ +		Optional<LLIconCtrl::Params> icon_over; +		Optional<LLIconCtrl::Params> icon_selected; +		Optional<LLIconCtrl::Params> picture; +		Optional<LLIconCtrl::Params> selected_picture; + +		Optional<LLTextBox::Params> text; +		Optional<CommitCallbackParam> mousedown_callback; +		Params(); +	}; +	/*virtual*/ BOOL postBuild(); +	/** setting on/off background icon to indicate selected state */ +	/*virtual*/ void setValue(const LLSD& value); +	// sends commit signal +	void onAnyMouseClick(); +protected: +	friend class LLUICtrlFactory; +	LLPanelCameraItem(const Params&); +	LLIconCtrl* mIconOver; +	LLIconCtrl* mIconSelected; +	LLIconCtrl* mPicture; +	LLIconCtrl* mPictureSelected; +	LLTextBox* mText;  };  #endif diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 039df69454..2c1983b6d2 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1941,15 +1941,24 @@ void LLIncomingCallDialog::onOpen(const LLSD& key)  {  	LLCallDialog::onOpen(key); +	LLStringUtil::format_map_t args; +	LLGroupData data; +	// if it's a group call, retrieve group name to use it in question +	if (gAgent.getGroupData(key["session_id"].asUUID(), data)) +	{ +		args["[GROUP]"] = data.mName; +	}  	// tell the user which voice channel they would be leaving  	LLVoiceChannel *voice = LLVoiceChannel::getCurrentVoiceChannel();  	if (voice && !voice->getSessionName().empty())  	{ -		childSetTextArg("question", "[CURRENT_CHAT]", voice->getSessionName()); +		args["[CURRENT_CHAT]"] = voice->getSessionName(); +		childSetText("question", getString(key["question_type"].asString(), args));  	}  	else  	{ -		childSetTextArg("question", "[CURRENT_CHAT]", getString("localchat")); +		args["[CURRENT_CHAT]"] = getString("localchat"); +		childSetText("question", getString(key["question_type"].asString(), args));  	}  } @@ -2480,6 +2489,8 @@ void LLIMMgr::inviteToSession(  	}  	std::string notify_box_type; +	// voice invite question is different from default only for group call (EXT-7118) +	std::string question_type = "VoiceInviteQuestionDefault";  	BOOL ad_hoc_invite = FALSE;  	if(type == IM_SESSION_P2P_INVITE) @@ -2491,6 +2502,7 @@ void LLIMMgr::inviteToSession(  	{  		//only really old school groups have voice invitations  		notify_box_type = "VoiceInviteGroup"; +		question_type = "VoiceInviteQuestionGroup";  	}  	else if ( inv_type == INVITATION_TYPE_VOICE )  	{ @@ -2515,6 +2527,7 @@ void LLIMMgr::inviteToSession(  	payload["session_handle"] = session_handle;  	payload["session_uri"] = session_uri;  	payload["notify_box_type"] = notify_box_type; +	payload["question_type"] = question_type;  	LLVoiceChannel* channelp = LLVoiceChannel::getChannelByID(session_id);  	if (channelp && channelp->callStarted()) diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp index 1c3eb547bb..750cdfb678 100644 --- a/indra/newview/llinventoryitemslist.cpp +++ b/indra/newview/llinventoryitemslist.cpp @@ -388,7 +388,7 @@ void LLInventoryItemsList::refresh()  	computeDifference(getIDs(), added_items, removed_items);  	bool add_limit_exceeded = false; -	unsigned nadded = 0; +	unsigned int nadded = 0;  	uuid_vec_t::const_iterator it = added_items.begin();  	for( ; added_items.end() != it; ++it) @@ -400,8 +400,12 @@ void LLInventoryItemsList::refresh()  		}  		LLViewerInventoryItem* item = gInventory.getItem(*it);  		// Do not rearrange items on each adding, let's do that on filter call -		addNewItem(item, false); -		++nadded; +		llassert(item); +		if (item) +		{ +			addNewItem(item, false); +			++nadded; +		}  	}  	it = removed_items.begin(); diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index 9eccceca66..36f2d05fab 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -1095,6 +1095,8 @@ void LLPanelEditWearable::updateScrollingPanelUI()  	if(panel && (mWearablePtr->getItemID().notNull()))  	{  		const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type); +		llassert(wearable_entry); +		if (!wearable_entry) return;  		U8 num_subparts = wearable_entry->mSubparts.size();  		LLScrollingPanelParam::sUpdateDelayFrames = 0; diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 0d3beaa9a5..c557e9b85d 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -1249,29 +1249,30 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory*  {  	LLTaskInvFVBridge* new_bridge = NULL;  	const LLInventoryItem* item = dynamic_cast<LLInventoryItem*>(object); +	const U32 itemflags = ( NULL == item ? 0 : item->getFlags() );  	LLAssetType::EType type = object->getType();  	switch(type)  	{  	case LLAssetType::AT_TEXTURE:  		new_bridge = new LLTaskTextureBridge(panel, -											 object->getUUID(), -											 object->getName()); +						     object->getUUID(), +						     object->getName());  		break;  	case LLAssetType::AT_SOUND:  		new_bridge = new LLTaskSoundBridge(panel, -										   object->getUUID(), -										   object->getName()); +						   object->getUUID(), +						   object->getName());  		break;  	case LLAssetType::AT_LANDMARK:  		new_bridge = new LLTaskLandmarkBridge(panel, -											  object->getUUID(), -											  object->getName()); +						      object->getUUID(), +						      object->getName());  		break;  	case LLAssetType::AT_CALLINGCARD:  		new_bridge = new LLTaskCallingCardBridge(panel, -												 object->getUUID(), -												 object->getName()); +							 object->getUUID(), +							 object->getName());  		break;  	case LLAssetType::AT_SCRIPT:  		// OLD SCRIPTS DEPRECATED - JC @@ -1281,45 +1282,42 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory*  		//									   object->getName());  		break;  	case LLAssetType::AT_OBJECT: -		{ -			U32 flags = ( NULL == item ? 0 : item->getFlags() ); -			new_bridge = new LLTaskObjectBridge(panel, -												object->getUUID(), -												object->getName(), -												flags); -		} +		new_bridge = new LLTaskObjectBridge(panel, +						    object->getUUID(), +						    object->getName(), +						    itemflags);  		break;  	case LLAssetType::AT_NOTECARD:  		new_bridge = new LLTaskNotecardBridge(panel, -											  object->getUUID(), -											  object->getName()); +						      object->getUUID(), +						      object->getName());  		break;  	case LLAssetType::AT_ANIMATION:  		new_bridge = new LLTaskAnimationBridge(panel, -											  object->getUUID(), -											  object->getName()); +						       object->getUUID(), +						       object->getName());  		break;  	case LLAssetType::AT_GESTURE:  		new_bridge = new LLTaskGestureBridge(panel, -											  object->getUUID(), -											  object->getName()); +						     object->getUUID(), +						     object->getName());  		break;  	case LLAssetType::AT_CLOTHING:  	case LLAssetType::AT_BODYPART:  		new_bridge = new LLTaskWearableBridge(panel, -											  object->getUUID(), -											  object->getName(), -											  item->getFlags()); +						      object->getUUID(), +						      object->getName(), +						      itemflags);  		break;  	case LLAssetType::AT_CATEGORY:  		new_bridge = new LLTaskCategoryBridge(panel, -											  object->getUUID(), -											  object->getName()); +						      object->getUUID(), +						      object->getName());  		break;  	case LLAssetType::AT_LSL_TEXT:  		new_bridge = new LLTaskLSLBridge(panel, -										 object->getUUID(), -										 object->getName()); +						 object->getUUID(), +						 object->getName());  		break;  	default:  		llinfos << "Unhandled inventory type (llassetstorage.h): " diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index dc1c422ff0..93be0bda9e 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -115,6 +115,12 @@ bool NearbyMenu::enableContextMenuItem(const LLSD& userdata)  		// - there are selected people  		// - and there are no friends among selection yet. +		//EXT-7389 - disable for more than 1 +		if(mUUIDs.size() > 1) +		{ +			return false; +		} +  		bool result = (mUUIDs.size() > 0);  		uuid_vec_t::const_iterator diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index b975536f8b..4f0946774a 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -793,7 +793,7 @@ void LLParticipantList::LLParticipantListMenu::moderateVoice(const LLSD& userdat  	else  	{  		bool unmute_all = userdata.asString() == "unmute_all"; -		moderateVoiceOtherParticipants(LLUUID::null, unmute_all); +		moderateVoiceAllParticipants(unmute_all);  	}  } @@ -806,7 +806,7 @@ void LLParticipantList::LLParticipantListMenu::moderateVoiceParticipant(const LL  	}  } -void LLParticipantList::LLParticipantListMenu::moderateVoiceOtherParticipants(const LLUUID& excluded_avatar_id, bool unmute) +void LLParticipantList::LLParticipantListMenu::moderateVoiceAllParticipants(bool unmute)  {  	LLIMSpeakerMgr* mgr = dynamic_cast<LLIMSpeakerMgr*>(mParent.mSpeakerMgr);  	if (mgr) @@ -815,12 +815,11 @@ void LLParticipantList::LLParticipantListMenu::moderateVoiceOtherParticipants(co  		{  			LLSD payload;  			payload["session_id"] = mgr->getSessionID(); -			payload["excluded_avatar_id"] = excluded_avatar_id;  			LLNotificationsUtil::add("ConfirmMuteAll", LLSD(), payload, confirmMuteAllCallback);  			return;  		} -		mgr->moderateVoiceOtherParticipants(excluded_avatar_id, unmute); +		mgr->moderateVoiceAllParticipants(unmute);  	}  } @@ -835,13 +834,12 @@ void LLParticipantList::LLParticipantListMenu::confirmMuteAllCallback(const LLSD  	const LLSD& payload = notification["payload"];  	const LLUUID& session_id = payload["session_id"]; -	const LLUUID& excluded_avatar_id = payload["excluded_avatar_id"];  	LLIMSpeakerMgr * speaker_manager = dynamic_cast<LLIMSpeakerMgr*> (  			LLIMModel::getInstance()->getSpeakerManager(session_id));  	if (speaker_manager)  	{ -		speaker_manager->moderateVoiceOtherParticipants(excluded_avatar_id, false); +		speaker_manager->moderateVoiceAllParticipants(false);  	}  	return; diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index 967c8b78cf..3fe45fa591 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -187,7 +187,7 @@ class LLParticipantList  			 * @param userdata can be "selected" or "others".  			 *  			 * @see moderateVoiceParticipant() -			 * @see moderateVoiceOtherParticipants() +			 * @see moderateVoiceAllParticipants()  			 */  			void moderateVoice(const LLSD& userdata); @@ -200,22 +200,20 @@ class LLParticipantList  			 * @param[in] avatar_id UUID of avatar to be processed  			 * @param[in] unmute if true - specified avatar will be muted, otherwise - unmuted.  			 * -			 * @see moderateVoiceOtherParticipants() +			 * @see moderateVoiceAllParticipants()  			 */  			void moderateVoiceParticipant(const LLUUID& avatar_id, bool unmute);  			/** -			 * Mutes/Unmutes all avatars except specified for current group voice chat. +			 * Mutes/Unmutes all avatars for current group voice chat.  			 *  			 * It only marks avatars as muted for session and does not use local Agent's Block list. -			 * It based call moderateVoiceParticipant() for each avatar should be muted/unmuted.  			 * -			 * @param[in] excluded_avatar_id UUID of avatar NOT to be processed  			 * @param[in] unmute if true - avatars will be muted, otherwise - unmuted.  			 *  			 * @see moderateVoiceParticipant()  			 */ -			void moderateVoiceOtherParticipants(const LLUUID& excluded_avatar_id, bool unmute); +			void moderateVoiceAllParticipants(bool unmute);  			static void confirmMuteAllCallback(const LLSD& notification, const LLSD& response);  		}; diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp index 2adc6399a5..e191e50c4b 100644 --- a/indra/newview/llsechandler_basic.cpp +++ b/indra/newview/llsechandler_basic.cpp @@ -545,7 +545,7 @@ LLBasicCertificateVector::iterator LLBasicCertificateVector::find(const LLSD& pa  // Insert a certificate into the store.  If the certificate already   // exists in the store, nothing is done.  void  LLBasicCertificateVector::insert(iterator _iter,  -									   LLPointer<LLCertificate> cert) +				       LLPointer<LLCertificate> cert)  {  	LLSD cert_info;  	cert->getLLSD(cert_info); @@ -556,7 +556,11 @@ void  LLBasicCertificateVector::insert(iterator _iter,  		if(find(existing_cert_info) == end())  		{  			BasicIteratorImpl *basic_iter = dynamic_cast<BasicIteratorImpl*>(_iter.mImpl.get()); -			mCerts.insert(basic_iter->mIter, cert); +			llassert(basic_iter); +			if (basic_iter) +			{ +				mCerts.insert(basic_iter->mIter, cert); +			}  		}  	}  } diff --git a/indra/newview/llsechandler_basic.h b/indra/newview/llsechandler_basic.h index 3ddd36a81a..356ea7efcb 100644 --- a/indra/newview/llsechandler_basic.h +++ b/indra/newview/llsechandler_basic.h @@ -117,6 +117,8 @@ public:  		virtual bool equals(const LLPointer<iterator_impl>& _iter) const  		{  			const BasicIteratorImpl *rhs_iter = dynamic_cast<const BasicIteratorImpl *>(_iter.get()); +			llassert(rhs_iter); +			if (!rhs_iter) return 0;  			return (mIter == rhs_iter->mIter);  		}  		virtual LLPointer<LLCertificate> get() diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index 9da3db3032..bf00b47c21 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -251,6 +251,8 @@ bool LLSpeakersDelayActionsStorage::onTimerActionCallback(const LLUUID& speaker_  LLSpeakerMgr::LLSpeakerMgr(LLVoiceChannel* channelp) :   	mVoiceChannel(channelp) +, mVoiceModerated(false) +, mModerateModeHandledFirstTime(false)  {  	static LLUICachedControl<F32> remove_delay ("SpeakerParticipantRemoveDelay", 10.0); @@ -297,6 +299,33 @@ LLPointer<LLSpeaker> LLSpeakerMgr::setSpeaker(const LLUUID& id, const std::strin  	return speakerp;  } +// *TODO: Once way to request the current voice channel moderation mode is implemented +// this method with related code should be removed. +/* + Initializes "moderate_mode" of voice session on first join. +  + This is WORKAROUND because a way to request the current voice channel moderation mode exists + but is not implemented in viewer yet. See EXT-6937. +*/ +void LLSpeakerMgr::initVoiceModerateMode() +{ +	if (!mModerateModeHandledFirstTime && (mVoiceChannel && mVoiceChannel->isActive())) +	{ +		LLPointer<LLSpeaker> speakerp; + +		if (mSpeakers.find(gAgentID) != mSpeakers.end()) +		{ +			speakerp = mSpeakers[gAgentID]; +		} + +		if (speakerp.notNull()) +		{ +			mVoiceModerated = speakerp->mModeratorMutedVoice; +			mModerateModeHandledFirstTime = true; +		} +	} +} +  void LLSpeakerMgr::update(BOOL resort_ok)  {  	if (!LLVoiceClient::getInstance()) @@ -529,7 +558,6 @@ BOOL LLSpeakerMgr::isVoiceActive()  // LLIMSpeakerMgr  //  LLIMSpeakerMgr::LLIMSpeakerMgr(LLVoiceChannel* channel) : LLSpeakerMgr(channel) -, mVoiceModerated(false)  {  } @@ -762,31 +790,9 @@ void LLIMSpeakerMgr::moderateVoiceParticipant(const LLUUID& avatar_id, bool unmu  		new ModerationResponder(getSessionID()));  } -void LLIMSpeakerMgr::moderateVoiceOtherParticipants(const LLUUID& excluded_avatar_id, bool unmute_everyone_else) +void LLIMSpeakerMgr::moderateVoiceAllParticipants( bool unmute_everyone )  { -	// *TODO: mantipov: add more intellectual processing of several following requests if it is needed. -	/* -		Such situation should be tested: -		 "Moderator sends the same second request before first response is come" -		Moderator sends "mute everyone else" for A and then for B -			two requests to disallow voice chat are sent -			UUID of B is stored. -		Then first response (to disallow voice chat) is come -			request to allow voice for stored avatar (B) -		Then second response (to disallow voice chat) is come -			have nothing to do, the latest selected speaker is already enabled - -			What can happen? -		If request to allow voice for stored avatar (B) is processed on server BEFORE  -		second request to disallow voice chat all speakers will be disabled on voice. -		But I'm not sure such situation is possible.  -		See EXT-3431. -	*/ - -	mReverseVoiceModeratedAvatarID = excluded_avatar_id; - - -	if (mVoiceModerated == !unmute_everyone_else) +	if (mVoiceModerated == !unmute_everyone)  	{  		// session already in requested state. Just force participants which do not match it.  		forceVoiceModeratedMode(mVoiceModerated); @@ -794,7 +800,7 @@ void LLIMSpeakerMgr::moderateVoiceOtherParticipants(const LLUUID& excluded_avata  	else  	{  		// otherwise set moderated mode for a whole session. -		moderateVoiceSession(getSessionID(), !unmute_everyone_else); +		moderateVoiceSession(getSessionID(), !unmute_everyone);  	}  } @@ -804,13 +810,6 @@ void LLIMSpeakerMgr::processSessionUpdate(const LLSD& session_update)  		session_update["moderated_mode"].has("voice"))  	{  		mVoiceModerated = session_update["moderated_mode"]["voice"]; - -		if (mReverseVoiceModeratedAvatarID.notNull()) -		{ -			moderateVoiceParticipant(mReverseVoiceModeratedAvatarID, mVoiceModerated); - -			mReverseVoiceModeratedAvatarID = LLUUID::null; -		}  	}  } diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h index b38acb7bc4..4a250de82f 100644 --- a/indra/newview/llspeakers.h +++ b/indra/newview/llspeakers.h @@ -242,6 +242,13 @@ public:  	 */  	bool removeAvalineSpeaker(const LLUUID& speaker_id) { return removeSpeaker(speaker_id); } +	/** +	 * Initializes mVoiceModerated depend on LLSpeaker::mModeratorMutedVoice of agent's participant. +	 * +	 * Is used only to implement workaround to initialize mVoiceModerated on first join to group chat. See EXT-6937 +	 */ +	void initVoiceModerateMode(); +  protected:  	virtual void updateSpeakerList();  	void setSpeakerNotInChannel(LLSpeaker* speackerp); @@ -258,6 +265,14 @@ protected:  	 * time out speakers when they are not part of current session  	 */  	LLSpeakersDelayActionsStorage* mSpeakerDelayRemover; + +	// *TODO: should be moved back into LLIMSpeakerMgr when a way to request the current voice channel +	// moderation mode is implemented: See EXT-6937 +	bool mVoiceModerated; + +	// *TODO: To be removed when a way to request the current voice channel +	// moderation mode is implemented: See EXT-6937 +	bool mModerateModeHandledFirstTime;  };  class LLIMSpeakerMgr : public LLSpeakerMgr @@ -279,22 +294,21 @@ public:  	 * @param[in] avatar_id UUID of avatar to be processed  	 * @param[in] unmute if false - specified avatar will be muted, otherwise - unmuted.  	 * -	 * @see moderateVoiceOtherParticipants() +	 * @see moderateVoiceAllParticipants()  	 */  	void moderateVoiceParticipant(const LLUUID& avatar_id, bool unmute);  	/** -	 * Mutes/Unmutes all avatars except specified for current group voice chat. +	 * Mutes/Unmutes all avatars for current group voice chat.  	 *  	 * It only marks avatars as muted for session and does not use local Agent's Block list. -	 * It based call moderateVoiceParticipant() for each avatar should be muted/unmuted. +	 * It calls forceVoiceModeratedMode() in case of session is already in requested state.  	 * -	 * @param[in] excluded_avatar_id UUID of avatar NOT to be processed -	 * @param[in] unmute_everyone_else if false - avatars will be muted, otherwise - unmuted. +	 * @param[in] unmute_everyone if false - avatars will be muted, otherwise - unmuted.  	 *  	 * @see moderateVoiceParticipant()  	 */ -	void moderateVoiceOtherParticipants(const LLUUID& excluded_avatar_id, bool unmute_everyone_else); +	void moderateVoiceAllParticipants(bool unmute_everyone);  	void processSessionUpdate(const LLSD& session_update); @@ -308,10 +322,6 @@ protected:  	 */  	void forceVoiceModeratedMode(bool should_be_muted); -private: -	LLUUID mReverseVoiceModeratedAvatarID; -	bool mVoiceModerated; -  };  class LLActiveSpeakerMgr : public LLSpeakerMgr, public LLSingleton<LLActiveSpeakerMgr> diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 4be03596f8..3f3aefa4b5 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -37,6 +37,7 @@  #include "llagent.h"  #include "llimagej2c.h"  #include "llimagetga.h" +#include "llnotificationsutil.h"  #include "llvfile.h"  #include "llvfs.h"  #include "llviewerstats.h" @@ -49,6 +50,7 @@  #include "llui.h"  #include "llagentwearables.h"  #include "llwearable.h" +#include "llviewercontrol.h"  #include "llviewervisualparam.h"  //#include "../tools/imdebug/imdebug.h" @@ -60,10 +62,12 @@ using namespace LLVOAvatarDefines;  //-----------------------------------------------------------------------------  LLBakedUploadData::LLBakedUploadData(const LLVOAvatarSelf* avatar,  									 LLTexLayerSet* layerset, -									 const LLUUID& id) :  +									 const LLUUID& id, +									 BOOL highest_lod) :   	mAvatar(avatar),  	mTexLayerSet(layerset),  	mID(id), +	mHighestLOD(highest_lod),  	mStartTime(LLFrameTimer::getTotalTime())		// Record starting time  {   } @@ -80,12 +84,14 @@ LLTexLayerSetBuffer::LLTexLayerSetBuffer(LLTexLayerSet* const owner,  										 S32 width, S32 height) :  	// ORDER_LAST => must render these after the hints are created.  	LLViewerDynamicTexture( width, height, 4, LLViewerDynamicTexture::ORDER_LAST, TRUE ),  -	mNeedsUpdate( TRUE ), -	mNeedsUpload( FALSE ), -	mUploadPending( FALSE ), // Not used for any logic here, just to sync sending of updates +	mNeedsUpdate(TRUE), +	mNeedsUpload(FALSE), +	mUploadPending(FALSE), // Not used for any logic here, just to sync sending of updates +	mNeedsLowResUpload(TRUE),  	mTexLayerSet(owner)  {  	LLTexLayerSetBuffer::sGLByteCount += getSize(); +	mNeedsUploadTimer.start();  }  LLTexLayerSetBuffer::~LLTexLayerSetBuffer() @@ -125,7 +131,6 @@ void LLTexLayerSetBuffer::dumpTotalByteCount()  void LLTexLayerSetBuffer::requestUpdate()  {  	mNeedsUpdate = TRUE; -  	// If we're in the middle of uploading a baked texture, we don't care about it any more.  	// When it's downloaded, ignore it.  	mUploadID.setNull(); @@ -133,20 +138,23 @@ void LLTexLayerSetBuffer::requestUpdate()  void LLTexLayerSetBuffer::requestUpload()  { +	// New upload request  	if (!mNeedsUpload)  	{ -		mNeedsUpload = TRUE; -		mUploadPending = TRUE; +		mNeedsUploadTimer.start();  	} + +	mNeedsUpload = TRUE; +	mNeedsLowResUpload = TRUE; +	mUploadPending = TRUE;  }  void LLTexLayerSetBuffer::cancelUpload()  { -	if (mNeedsUpload) -	{ -		mNeedsUpload = FALSE; -	} +	mNeedsUpload = FALSE; +	mNeedsLowResUpload = FALSE;  	mUploadPending = FALSE; +	mNeedsUploadTimer.pause();  }  void LLTexLayerSetBuffer::pushProjection() const @@ -174,7 +182,8 @@ BOOL LLTexLayerSetBuffer::needsRender()  {  	llassert(mTexLayerSet->getAvatar() == gAgentAvatarp);  	if (!isAgentAvatarValid()) return FALSE; -	BOOL upload_now = mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal() && gAgentQueryManager.hasNoPendingQueries(); + +	const BOOL upload_now = isReadyToUpload();  	BOOL needs_update = (mNeedsUpdate || upload_now) && !gAgentAvatarp->mAppearanceAnimating;  	if (needs_update)  	{ @@ -191,6 +200,7 @@ BOOL LLTexLayerSetBuffer::needsRender()  			needs_update &= mTexLayerSet->isLocalTextureDataAvailable();  		}  	} +  	return needs_update;  } @@ -217,7 +227,7 @@ BOOL LLTexLayerSetBuffer::render()  	// do we need to upload, and do we have sufficient data to create an uploadable composite?  	// When do we upload the texture if gAgent.mNumPendingQueries is non-zero? -	BOOL upload_now = (gAgentQueryManager.hasNoPendingQueries() && mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal()); +	const BOOL upload_now = isReadyToUpload();  	BOOL success = TRUE; @@ -226,11 +236,11 @@ BOOL LLTexLayerSetBuffer::render()  	success &= mTexLayerSet->render( mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight );  	gGL.flush(); -	if( upload_now ) +	if(upload_now)  	{  		if (!success)  		{ -			llinfos << "Failed attempt to bake " << mTexLayerSet->getBodyRegion() << llendl; +			llinfos << "Failed attempt to bake " << mTexLayerSet->getBodyRegionName() << llendl;  			mUploadPending = FALSE;  		}  		else @@ -244,6 +254,8 @@ BOOL LLTexLayerSetBuffer::render()  			{  				mUploadPending = FALSE;  				mNeedsUpload = FALSE; +				mNeedsLowResUpload = FALSE; +				mNeedsUploadTimer.pause();  				mTexLayerSet->getAvatar()->setNewBakedTexture(mTexLayerSet->getBakedTexIndex(),IMG_INVISIBLE);  			}  		} @@ -265,6 +277,25 @@ bool LLTexLayerSetBuffer::isInitialized(void) const  	return mGLTexturep.notNull() && mGLTexturep->isGLTextureCreated();  } +BOOL LLTexLayerSetBuffer::isReadyToUpload() const +{ +	if (!mNeedsUpload) return FALSE; // Don't need to upload if we haven't requested one. +	if (!gAgentQueryManager.hasNoPendingQueries()) return FALSE; // Can't upload if there are pending queries. +	 +	// If we requested an upload and have the final LOD ready, then upload. +	const BOOL can_highest_lod = mTexLayerSet->isLocalTextureDataFinal(); +	if (can_highest_lod) return TRUE; + +	if (gSavedSettings.getBOOL("AvatarUseBakedTextureTimeout")) +	{ +		// If we hit our timeout and have textures available at even lower resolution, then upload. +		const BOOL is_upload_textures_timeout = isUploadTimeout(); +		const BOOL can_lower_lod = mTexLayerSet->isLocalTextureDataAvailable(); +		if (can_lower_lod && is_upload_textures_timeout && mNeedsLowResUpload) return TRUE;  +	} +	return FALSE; +} +  BOOL LLTexLayerSetBuffer::updateImmediate()  {  	mNeedsUpdate = TRUE; @@ -288,7 +319,7 @@ void LLTexLayerSetBuffer::readBackAndUpload()  	glReadPixels(mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight, GL_RGBA, GL_UNSIGNED_BYTE, baked_color_data );  	stop_glerror(); -	llinfos << "Baked " << mTexLayerSet->getBodyRegion() << llendl; +	llinfos << "Baked " << mTexLayerSet->getBodyRegionName() << llendl;  	LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_BAKES);  	// We won't need our caches since we're baked now.  (Techically, we won't  @@ -355,9 +386,12 @@ void LLTexLayerSetBuffer::readBackAndUpload()  			if( valid )  			{ +				const BOOL highest_lod = mTexLayerSet->isLocalTextureDataFinal();  				// baked_upload_data is owned by the responder and deleted after the request completes -				LLBakedUploadData* baked_upload_data = -					new LLBakedUploadData(gAgentAvatarp, this->mTexLayerSet, asset_id); +				LLBakedUploadData* baked_upload_data = new LLBakedUploadData(gAgentAvatarp,  +																			 this->mTexLayerSet,  +																			 asset_id, +																			 highest_lod);  				mUploadID = asset_id;  				// upload the image @@ -384,8 +418,26 @@ void LLTexLayerSetBuffer::readBackAndUpload()  												  TRUE,		// is_priority  												  TRUE);	// store_local  				} + +				if (gSavedSettings.getBOOL("DebugAvatarRezTime")) +				{ +					std::string lod_str = highest_lod ? "HighRes" : "LowRes"; +					LLSD args; +					args["EXISTENCE"] = llformat("%d",(U32)mTexLayerSet->getAvatar()->debugGetExistenceTimeElapsedF32()); +					args["TIME"] = llformat("%d",(U32)mNeedsUploadTimer.getElapsedTimeF32()); +					args["BODYREGION"] = mTexLayerSet->getBodyRegionName(); +					args["RESOLUTION"] = lod_str; +					LLNotificationsUtil::add("AvatarRezSelfBakeNotification",args); +					llinfos << "Uploading [ name: " << mTexLayerSet->getBodyRegionName() << " res:" << lod_str << " time:" << (U32)mNeedsUploadTimer.getElapsedTimeF32() << " ]" << llendl; +				} -				mNeedsUpload = FALSE; +				if (highest_lod) +				{ +					mNeedsUpload = FALSE; +					mNeedsUploadTimer.pause(); +				} +				else +					mNeedsLowResUpload = FALSE;  			}  			else  			{ @@ -414,12 +466,11 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,  {  	LLBakedUploadData* baked_upload_data = (LLBakedUploadData*)userdata; -	if (0 == result && +	if ((result == 0) &&  		isAgentAvatarValid() &&  		!gAgentAvatarp->isDead() && -		baked_upload_data->mAvatar == gAgentAvatarp && // Sanity check: only the user's avatar should be uploading textures. -		baked_upload_data->mTexLayerSet->hasComposite() -		) +		(baked_upload_data->mAvatar == gAgentAvatarp) && // Sanity check: only the user's avatar should be uploading textures. +		(baked_upload_data->mTexLayerSet->hasComposite()))  	{  		LLTexLayerSetBuffer* layerset_buffer = baked_upload_data->mTexLayerSet->getComposite(); @@ -438,10 +489,9 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,  		{  			// This is the upload we're currently waiting for.  			layerset_buffer->mUploadID.setNull(); -			layerset_buffer->mUploadPending = FALSE; -  			if (result >= 0)  			{ +				layerset_buffer->mUploadPending = FALSE;  				LLVOAvatarDefines::ETextureIndex baked_te = gAgentAvatarp->getBakedTE(layerset_buffer->mTexLayerSet);  				// Update baked texture info with the new UUID  				U64 now = LLFrameTimer::getTotalTime();		// Record starting time @@ -758,7 +808,7 @@ BOOL LLTexLayerSet::isBodyRegion(const std::string& region) const  	return mInfo->mBodyRegion == region;   } -const std::string LLTexLayerSet::getBodyRegion() const  +const std::string LLTexLayerSet::getBodyRegionName() const   {   	return mInfo->mBodyRegion;   } @@ -788,7 +838,7 @@ void LLTexLayerSet::cancelUpload()  void LLTexLayerSet::createComposite()  { -	if( !mComposite ) +	if(!mComposite)  	{  		S32 width = mInfo->mWidth;  		S32 height = mInfo->mHeight; @@ -823,7 +873,15 @@ void LLTexLayerSet::updateComposite()  LLTexLayerSetBuffer* LLTexLayerSet::getComposite()  { -	createComposite(); +	if (!mComposite) +	{ +		createComposite(); +	} +	return mComposite; +} + +const LLTexLayerSetBuffer* LLTexLayerSet::getComposite() const +{  	return mComposite;  } @@ -2169,4 +2227,24 @@ BOOL LLTexLayerStaticImageList::loadImageRaw(const std::string& file_name, LLIma  	return success;  } +BOOL LLTexLayerSetBuffer::isUploadTimeout() const +{ +	//const F32 BAKED_TEXTURES_TIMEOUT_THRESHOLD__SECONDS = 20.f; +	const F32 UPLOAD_TEXTURES_TIMEOUT_THRESHOLD__SECONDS = 5.f; // SERAPH Reduced timeout for testing. +	return (mNeedsUploadTimer.getElapsedTimeF32() >= UPLOAD_TEXTURES_TIMEOUT_THRESHOLD__SECONDS); +} + +const std::string LLTexLayerSetBuffer::dumpTextureInfo() const +{ +	if (!isAgentAvatarValid()) return ""; + +	const BOOL is_high_res = !mNeedsUpload; +	const BOOL is_low_res = !mNeedsLowResUpload; +	const U32 upload_time = (U32)mNeedsUploadTimer.getElapsedTimeF32(); +	const std::string local_texture_info = gAgentAvatarp->debugDumpLocalTextureDataInfo(mTexLayerSet); +	std::string text = llformat("[ HiRes:%d LoRes:%d Timer:%d ] %s", +								is_high_res, is_low_res, upload_time,  +								local_texture_info.c_str()); +	return text; +} diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h index ae280dd063..f2d86032fb 100644 --- a/indra/newview/lltexlayer.h +++ b/indra/newview/lltexlayer.h @@ -253,6 +253,7 @@ public:  	BOOL					isBodyRegion(const std::string& region) const;  	LLTexLayerSetBuffer*	getComposite(); +	const LLTexLayerSetBuffer* getComposite() const; // Do not create one if it doesn't exist.  	void					requestUpdate();  	void					requestUpload();  	void					cancelUpload(); @@ -272,7 +273,7 @@ public:  	void					cloneTemplates(LLLocalTextureObject *lto, LLVOAvatarDefines::ETextureIndex tex_index, LLWearable* wearable);  	LLVOAvatarSelf*		    getAvatar()	const { return mAvatar; } -	const std::string		getBodyRegion() const; +	const std::string		getBodyRegionName() const;  	BOOL					hasComposite() const { return (mComposite.notNull()); }  	LLVOAvatarDefines::EBakedTextureIndex getBakedTexIndex() { return mBakedTexIndex; }  	void					setBakedTexIndex( LLVOAvatarDefines::EBakedTextureIndex index) { mBakedTexIndex = index; } @@ -344,22 +345,33 @@ public:  													S32 result, LLExtStat ext_status);  	static void				dumpTotalByteCount(); +	const std::string		dumpTextureInfo() const; +  	virtual void restoreGLTexture();  	virtual void destroyGLTexture(); -private: +protected:  	void					pushProjection() const;  	void					popProjection() const; - +	BOOL					isReadyToUpload() const; +	  private:  	LLTexLayerSet* const    mTexLayerSet; -	BOOL					mNeedsUpdate; -	BOOL					mNeedsUpload; -	BOOL					mUploadPending; -	LLUUID					mUploadID; // Identifys the current upload process (null if none).  Used to avoid overlaps (eg, when the user rapidly makes two changes outside of Face Edit) +	BOOL					mNeedsUpdate; // Whether we need to update our baked textures +	BOOL					mNeedsUpload; // Whether we need to send our baked textures to the server +	BOOL					mNeedsLowResUpload; // Whether we have sent a lowres version of our baked textures to the server +	BOOL					mUploadPending; // Whether we have received back the new baked textures +	LLUUID					mUploadID; // Identifies the current upload process (null if none).  Used to avoid overlaps (eg, when the user rapidly makes two changes outside of Face Edit)  	static S32				sGLByteCount; +	 +	// Low res upload methods +protected: +	BOOL					isUploadTimeout() const; +private: +	LLFrameTimer    		mNeedsUploadTimer; // Tracks time since upload was requested +  };  // @@ -404,13 +416,18 @@ private:  class LLBakedUploadData  {  public: -	LLBakedUploadData(const LLVOAvatarSelf* avatar, LLTexLayerSet* layerset, const LLUUID& id); +	LLBakedUploadData(const LLVOAvatarSelf* avatar,  +					  LLTexLayerSet* layerset,  +					  const LLUUID& id, +					  BOOL highest_lod);  	~LLBakedUploadData() {}  	const LLUUID				mID;  	const LLVOAvatarSelf*		mAvatar;	 // just backlink, don't LLPointer   	LLTexLayerSet*				mTexLayerSet;     	const U64					mStartTime;		// Used to measure time baked texture upload requires +	BOOL						mHighestLOD; +  }; diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index efdddd947b..a1ab051021 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -1286,8 +1286,8 @@ void LLTextureCtrl::draw()  				LLFontGL::DROP_SHADOW);  		} -		// Show more detailed information if this agent is god. -		if (gAgent.isGodlike()) +		// Optionally show more detailed information. +		if (gSavedSettings.getBOOL("DebugAvatarRezTime"))  		{  			LLFontGL* font = LLFontGL::getFontSansSerif();  			std::string tdesc; diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index 43913f3632..e04568d4ed 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -54,6 +54,11 @@  #include "llviewertexture.h"  #include "llviewertexturelist.h"  #include "llvovolume.h" + +// For avatar texture view +#include "llvoavatarself.h" +#include "lltexlayer.h" +  extern F32 texmem_lower_bound_scale;  LLTextureView *gTextureView = NULL; @@ -375,6 +380,84 @@ LLRect LLTextureBar::getRequiredRect()  //////////////////////////////////////////////////////////////////////////// +class LLAvatarTexBar : public LLView +{ +public: +	struct Params : public LLInitParam::Block<Params, LLView::Params> +	{ +		Mandatory<LLTextureView*>	texture_view; +		Params() +		:	texture_view("texture_view") +		{ +			S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); +			rect(LLRect(0,0,100,line_height * 4)); +		} +	}; + +	LLAvatarTexBar(const Params& p) +	:	LLView(p), +		mTextureView(p.texture_view) +	{} + +	virtual void draw();	 +	virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); +	virtual LLRect getRequiredRect();	// Return the height of this object, given the set options. + +private: +	LLTextureView* mTextureView; +}; + +void LLAvatarTexBar::draw() +{	 +	if (!gSavedSettings.getBOOL("DebugAvatarRezTime")) return; + +	LLVOAvatarSelf* avatarp = gAgentAvatarp; +	if (!avatarp) return; + +	const S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); +	const S32 v_offset = (S32)((texture_bar_height + 2.5f) * mTextureView->mNumTextureBars + 2.5f); +	//---------------------------------------------------------------------------- +	LLGLSUIDefault gls_ui; +	LLColor4 text_color(1.f, 1.f, 1.f, 0.75f); +	LLColor4 color; +	 +	U32 line_num = 6; +	for (LLVOAvatarDefines::LLVOAvatarDictionary::BakedTextures::const_iterator baked_iter = LLVOAvatarDefines::LLVOAvatarDictionary::getInstance()->getBakedTextures().begin(); +		 baked_iter != LLVOAvatarDefines::LLVOAvatarDictionary::getInstance()->getBakedTextures().end(); +		 ++baked_iter) +	{ +		const LLVOAvatarDefines::EBakedTextureIndex baked_index = baked_iter->first; +		const LLTexLayerSet *layerset = avatarp->debugGetLayerSet(baked_index); +		if (!layerset) continue; +		const LLTexLayerSetBuffer *layerset_buffer = layerset->getComposite(); +		if (!layerset_buffer) continue; +		std::string text = layerset_buffer->dumpTextureInfo(); +		LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*line_num, +												 text_color, LLFontGL::LEFT, LLFontGL::TOP); +		line_num++; +	} +	/* +	std::string text = "Baked Textures:"; +	LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*line_num, +											 text_color, LLFontGL::LEFT, LLFontGL::TOP); +	*/ + +} + +BOOL LLAvatarTexBar::handleMouseDown(S32 x, S32 y, MASK mask) +{ +	return FALSE; +} + +LLRect LLAvatarTexBar::getRequiredRect() +{ +	LLRect rect; +	rect.mTop = 8; +	return rect; +} + +//////////////////////////////////////////////////////////////////////////// +  class LLGLTexMemBar : public LLView  {  public: @@ -412,13 +495,17 @@ void LLGLTexMemBar::draw()  	F32 cache_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getUsage()) ;  	F32 cache_max_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getMaxUsage()) ;  	S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); -	S32 v_offset = (S32)((texture_bar_height + 2.5f) * mTextureView->mNumTextureBars + 2.5f); +	S32 v_offset = (S32)((texture_bar_height + 2.5f) * mTextureView->mNumTextureBars + 5.0f);  	//----------------------------------------------------------------------------  	LLGLSUIDefault gls_ui;  	LLColor4 text_color(1.f, 1.f, 1.f, 0.75f);  	LLColor4 color; -	std::string text; +	std::string text = ""; + +	LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*6, +											 text_color, LLFontGL::LEFT, LLFontGL::TOP); +  	text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Raw Tot: %d MB Bias: %.2f Cache: %.1f/%.1f MB",  					total_mem,  					max_total_mem, @@ -640,6 +727,7 @@ LLTextureView::LLTextureView(const LLTextureView::Params& p)  	setDisplayChildren(TRUE);  	mGLTexMemBar = 0; +	mAvatarTexBar = 0;  }  LLTextureView::~LLTextureView() @@ -647,6 +735,9 @@ LLTextureView::~LLTextureView()  	// Children all cleaned up by default view destructor.  	delete mGLTexMemBar;  	mGLTexMemBar = 0; +	 +	delete mAvatarTexBar; +	mAvatarTexBar = 0;  }  typedef std::pair<F32,LLViewerFetchedTexture*> decode_pair_t; @@ -684,6 +775,13 @@ void LLTextureView::draw()  			mGLTexMemBar = 0;  		} +		if (mAvatarTexBar) +		{ +			removeChild(mAvatarTexBar); +			mAvatarTexBar->die(); +			mAvatarTexBar = 0; +		} +  		typedef std::multiset<decode_pair_t, compare_decode_pair > display_list_t;  		display_list_t display_image_list; @@ -851,7 +949,14 @@ void LLTextureView::draw()  		tmbp.texture_view(this);  		mGLTexMemBar = LLUICtrlFactory::create<LLGLTexMemBar>(tmbp);  		addChild(mGLTexMemBar); -	 + +		LLAvatarTexBar::Params atbp; +		atbp.name("gl avatartex bar"); +		atbp.texture_view(this); +		mAvatarTexBar = LLUICtrlFactory::create<LLAvatarTexBar>(atbp); +		addChild(mAvatarTexBar); + +  		reshape(getRect().getWidth(), getRect().getHeight(), TRUE);  		/* diff --git a/indra/newview/lltextureview.h b/indra/newview/lltextureview.h index 435a55df83..dfd9c42c2c 100644 --- a/indra/newview/lltextureview.h +++ b/indra/newview/lltextureview.h @@ -38,11 +38,13 @@  class LLViewerFetchedTexture;  class LLTextureBar;  class LLGLTexMemBar; +class LLAvatarTexBar;  class LLTextureView : public LLContainerView  {  	friend class LLTextureBar;  	friend class LLGLTexMemBar; +	friend class LLAvatarTexBar;  protected:  	LLTextureView(const Params&);  	friend class LLUICtrlFactory; @@ -73,7 +75,7 @@ private:  	U32 mNumTextureBars;  	LLGLTexMemBar* mGLTexMemBar; -	 +	LLAvatarTexBar* mAvatarTexBar;  public:  	static std::set<LLViewerFetchedTexture*> sDebugImages;  }; diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index f8b6435614..e2be49e4cc 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -1582,7 +1582,6 @@ LLWearableType::EType LLViewerInventoryItem::getWearableType() const  {  	if (!isWearableType())  	{ -		llwarns << "item is not a wearable" << llendl;  		return LLWearableType::WT_INVALID;  	}  	return LLWearableType::EType(getFlags() & LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 5d3c64f590..7a232afba6 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -6035,10 +6035,9 @@ void LLVOAvatar::updateRuthTimer(bool loading)  		mRuthDebugTimer.reset();  	} -	const F32 LOADING_TIMEOUT = 120.f; -	if (mRuthTimer.getElapsedTimeF32() > LOADING_TIMEOUT) +	const F32 LOADING_TIMEOUT__SECONDS = 120.f; +	if (mRuthTimer.getElapsedTimeF32() > LOADING_TIMEOUT__SECONDS)  	{ -		  		llinfos << "Ruth Timer timeout: Missing texture data for '" << getFullname() << "' "  				<< "( Params loaded : " << !visualParamWeightsAreDefault() << " ) "  				<< "( Lower : " << isTextureDefined(TEX_LOWER_BAKED) << " ) " diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 34791cf823..3c940e03c0 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -922,6 +922,8 @@ private:  	//--------------------------------------------------------------------  	// Avatar Rez Metrics  	//-------------------------------------------------------------------- +public: +	F32				debugGetExistenceTimeElapsedF32() const { return mDebugExistenceTimer.getElapsedTimeF32(); }  protected:  	LLFrameTimer	mRuthDebugTimer; // For tracking how long it takes for av to rez  	LLFrameTimer	mDebugExistenceTimer; // Debugging for how long the avatar has been in memory. diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 203ab45cf4..9df5abd38c 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1374,7 +1374,7 @@ void LLVOAvatarSelf::requestLayerSetUploads()  void LLVOAvatarSelf::requestLayerSetUpload(LLVOAvatarDefines::EBakedTextureIndex i)  {  	ETextureIndex tex_index = mBakedTextureDatas[i].mTextureIndex; -	bool  layer_baked = isTextureDefined(tex_index, gAgentWearables.getWearableCount(tex_index)); +	const BOOL layer_baked = isTextureDefined(tex_index, gAgentWearables.getWearableCount(tex_index));  	if (!layer_baked && mBakedTextureDatas[i].mTexLayerSet)  	{  		mBakedTextureDatas[i].mTexLayerSet->requestUpload(); @@ -1391,8 +1391,8 @@ bool LLVOAvatarSelf::hasPendingBakedUploads() const  {  	for (U32 i = 0; i < mBakedTextureDatas.size(); i++)  	{ -		BOOL upload_pending = (mBakedTextureDatas[i].mTexLayerSet && mBakedTextureDatas[i].mTexLayerSet->getComposite()->uploadPending()); -		if (upload_pending) +		LLTexLayerSet* layerset = mBakedTextureDatas[i].mTexLayerSet; +		if (layerset && layerset->getComposite() && layerset->getComposite()->uploadPending())  		{  			return true;  		} @@ -1406,7 +1406,7 @@ void LLVOAvatarSelf::invalidateComposite( LLTexLayerSet* layerset, BOOL upload_r  	{  		return;  	} -	// llinfos << "LLVOAvatar::invalidComposite() " << layerset->getBodyRegion() << llendl; +	// llinfos << "LLVOAvatar::invalidComposite() " << layerset->getBodyRegionName() << llendl;  	layerset->requestUpdate();  	layerset->invalidateMorphMasks(); @@ -1831,6 +1831,47 @@ void LLVOAvatarSelf::debugBakedTextureUpload(EBakedTextureIndex index, BOOL fini  	mDebugBakedTextureTimes[index][done] = mDebugSelfLoadTimer.getElapsedTimeF32();  } +std::string LLVOAvatarSelf::debugDumpLocalTextureDataInfo(const LLTexLayerSet* layerset) const +{ +	std::string text=""; + +	text = llformat("[Final:%d Avail:%d] ",isLocalTextureDataFinal(layerset), isLocalTextureDataAvailable(layerset)); + +	/* if (layerset == mBakedTextureDatas[BAKED_HEAD].mTexLayerSet) +	   return getLocalDiscardLevel(TEX_HEAD_BODYPAINT) >= 0; */ +	for (LLVOAvatarDictionary::BakedTextures::const_iterator baked_iter = LLVOAvatarDictionary::getInstance()->getBakedTextures().begin(); +		 baked_iter != LLVOAvatarDictionary::getInstance()->getBakedTextures().end(); +		 ++baked_iter) +	{ +		const EBakedTextureIndex baked_index = baked_iter->first; +		if (layerset == mBakedTextureDatas[baked_index].mTexLayerSet) +		{ +			const LLVOAvatarDictionary::BakedEntry *baked_dict = baked_iter->second; +			text += llformat("[%d] '%s' ",baked_index, baked_dict->mName.c_str()); +			for (texture_vec_t::const_iterator local_tex_iter = baked_dict->mLocalTextures.begin(); +				 local_tex_iter != baked_dict->mLocalTextures.end(); +				 ++local_tex_iter) +			{ +				const ETextureIndex tex_index = *local_tex_iter; +				const LLWearableType::EType wearable_type = LLVOAvatarDictionary::getTEWearableType(tex_index); +				const U32 wearable_count = gAgentWearables.getWearableCount(wearable_type); +				if (wearable_count > 0) +				{ +					text += LLWearableType::getTypeName(wearable_type) + ":"; +					for (U32 wearable_index = 0; wearable_index < wearable_count; wearable_index++) +					{ +						const U32 discard_level = getLocalDiscardLevel(tex_index, wearable_index); +						std::string discard_str = llformat("%d ",discard_level); +						text += llformat("%d ",discard_level); +					} +				} +			} +			break; +		} +	} +	return text; +} +  const LLUUID& LLVOAvatarSelf::grabBakedTexture(EBakedTextureIndex baked_index) const  {  	if (canGrabBakedTexture(baked_index)) @@ -2057,6 +2098,18 @@ void LLVOAvatarSelf::outputRezDiagnostics() const  	{  		llinfos << "\t\t (" << i << ") \t" << (S32)mDebugBakedTextureTimes[i][0] << " / " << (S32)mDebugBakedTextureTimes[i][1] << llendl;  	} + +	for (LLVOAvatarDefines::LLVOAvatarDictionary::BakedTextures::const_iterator baked_iter = LLVOAvatarDefines::LLVOAvatarDictionary::getInstance()->getBakedTextures().begin(); +		 baked_iter != LLVOAvatarDefines::LLVOAvatarDictionary::getInstance()->getBakedTextures().end(); +		 ++baked_iter) +	{ +		const LLVOAvatarDefines::EBakedTextureIndex baked_index = baked_iter->first; +		const LLTexLayerSet *layerset = debugGetLayerSet(baked_index); +		if (!layerset) continue; +		const LLTexLayerSetBuffer *layerset_buffer = layerset->getComposite(); +		if (!layerset_buffer) continue; +		llinfos << layerset_buffer->dumpTextureInfo() << llendl; +	}  }  //----------------------------------------------------------------------------- @@ -2155,7 +2208,6 @@ void LLVOAvatarSelf::forceBakeAllTextures(bool slam_for_debug)  	// Don't know if this is needed  	updateMeshTextures(); -  }  //----------------------------------------------------------------------------- diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 189c1ac808..ad92807a72 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -218,8 +218,6 @@ public:  	static void			processRebakeAvatarTextures(LLMessageSystem* msg, void**);  protected:  	/*virtual*/ void	removeMissingBakedTextures(); -private: -	LLFrameTimer    	mBakeTimeoutTimer;  	//--------------------------------------------------------------------  	// Layers @@ -356,6 +354,9 @@ public:  	void outputRezDiagnostics() const;  	void debugBakedTextureUpload(LLVOAvatarDefines::EBakedTextureIndex index, BOOL finished);  	static void		debugOnTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata); + +	const LLTexLayerSet*  debugGetLayerSet(LLVOAvatarDefines::EBakedTextureIndex index) const { return mBakedTextureDatas[index].mTexLayerSet; } +	std::string		debugDumpLocalTextureDataInfo(const LLTexLayerSet* layerset) const;  private:  	LLFrameTimer    mDebugSelfLoadTimer;  	F32				mDebugTimeWearablesLoaded; diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 91353281a8..42e44634b6 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -81,8 +81,10 @@ std::string LLVoiceClientStatusObserver::status2string(LLVoiceClientStatusObserv  ///////////////////////////////////////////////////////////////////////////////////////////////  LLVoiceClient::LLVoiceClient() +	: +	mVoiceModule(NULL), +	m_servicePump(NULL)  { -	mVoiceModule = NULL;  }  //--------------------------------------------------- diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index bcb1a70efb..c6c155f0f0 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -3698,9 +3698,15 @@ void LLVivoxVoiceClient::participantUpdatedEvent(  				if (speaker_manager)  				{  					speaker_manager->update(true); + +					// also initialize voice moderate_mode depend on Agent's participant. See EXT-6937. +					// *TODO: remove once a way to request the current voice channel moderation mode is implemented. +					if (gAgentID == participant->mAvatarID) +					{ +						speaker_manager->initVoiceModerateMode(); +					}  				}  			} -			  		}  		else  		{ @@ -4082,7 +4088,9 @@ LLVivoxVoiceClient::participantState::participantState(const std::string &uri) :  	 mLastSpokeTimestamp(0.f),   	 mPower(0.f),   	 mVolume(LLVoiceClient::VOLUME_DEFAULT),  +	 mUserVolume(0),  	 mOnMuteList(false),  +	 mVolumeSet(false),  	 mVolumeDirty(false),   	 mAvatarIDValid(false),  	 mIsSelf(false) @@ -5532,6 +5540,7 @@ LLVivoxVoiceClient::sessionState::sessionState() :  	mVoiceEnabled(false),  	mReconnect(false),  	mVolumeDirty(false), +	mMuteDirty(false),  	mParticipantsChanged(false)  {  } diff --git a/indra/newview/llwearabletype.cpp b/indra/newview/llwearabletype.cpp index c692df06ad..2a14ace38c 100644 --- a/indra/newview/llwearabletype.cpp +++ b/indra/newview/llwearabletype.cpp @@ -85,7 +85,7 @@ LLWearableDictionary::LLWearableDictionary()  	addEntry(LLWearableType::WT_TATTOO,       new WearableEntry("tattoo",      "New Tattoo",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_TATTOO));  	addEntry(LLWearableType::WT_INVALID,      new WearableEntry("invalid",     "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE));  	addEntry(LLWearableType::WT_NONE,      	  new WearableEntry("none",        "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE)); -	addEntry(LLWearableType::WT_COUNT,        NULL); +	addEntry(LLWearableType::WT_COUNT,        new WearableEntry("count",        "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE));  }  // static diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png Binary files differindex 3cfe2e850e..00158a7bc2 100644 --- a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png +++ b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png Binary files differindex bb5d85e410..3748f5e190 100644 --- a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png +++ b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png Binary files differindex 9876aa456c..c49b8f9a27 100644 --- a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png +++ b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png Binary files differindex f481fed88c..bc8c4db04d 100644 --- a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png +++ b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png Binary files differindex d58b4ff990..b919a0a152 100644 --- a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png +++ b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png Binary files differindex 6e73898992..de9da359a0 100644 --- a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png +++ b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png diff --git a/indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png Binary files differnew file mode 100644 index 0000000000..8d32cad95f --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png Binary files differnew file mode 100644 index 0000000000..4c98e35868 --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Down_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Down_Off.png Binary files differindex 1b0192e685..2893c9a9f1 100644 --- a/indra/newview/skins/default/textures/bottomtray/Movement_Down_Off.png +++ b/indra/newview/skins/default/textures/bottomtray/Movement_Down_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Down_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Down_On.png Binary files differindex 9f42b7d5b2..f7ed4c25fb 100644 --- a/indra/newview/skins/default/textures/bottomtray/Movement_Down_On.png +++ b/indra/newview/skins/default/textures/bottomtray/Movement_Down_On.png diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Left_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Left_Off.png Binary files differindex ded370a46f..3602efa9d9 100644 --- a/indra/newview/skins/default/textures/bottomtray/Movement_Left_Off.png +++ b/indra/newview/skins/default/textures/bottomtray/Movement_Left_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Left_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Left_On.png Binary files differindex 98bf415f84..2f81fb1588 100644 --- a/indra/newview/skins/default/textures/bottomtray/Movement_Left_On.png +++ b/indra/newview/skins/default/textures/bottomtray/Movement_Left_On.png diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Right_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Right_Off.png Binary files differindex 2d8d55fa91..9c3fc37dfe 100644 --- a/indra/newview/skins/default/textures/bottomtray/Movement_Right_Off.png +++ b/indra/newview/skins/default/textures/bottomtray/Movement_Right_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Right_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Right_On.png Binary files differindex a91517d31f..4f86e81a15 100644 --- a/indra/newview/skins/default/textures/bottomtray/Movement_Right_On.png +++ b/indra/newview/skins/default/textures/bottomtray/Movement_Right_On.png diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Up_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Up_Off.png Binary files differindex 9b9837cec1..a49c43c2cf 100644 --- a/indra/newview/skins/default/textures/bottomtray/Movement_Up_Off.png +++ b/indra/newview/skins/default/textures/bottomtray/Movement_Up_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Up_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Up_On.png Binary files differindex c71d4a7854..ed4902f3ee 100644 --- a/indra/newview/skins/default/textures/bottomtray/Movement_Up_On.png +++ b/indra/newview/skins/default/textures/bottomtray/Movement_Up_On.png diff --git a/indra/newview/skins/default/textures/bottomtray/Object_View_Off.png b/indra/newview/skins/default/textures/bottomtray/Object_View_Off.png Binary files differnew file mode 100644 index 0000000000..e9dea7e17e --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/Object_View_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/Object_View_On.png b/indra/newview/skins/default/textures/bottomtray/Object_View_On.png Binary files differnew file mode 100644 index 0000000000..7a348ba22e --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/Object_View_On.png diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Disabled.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Disabled.png Binary files differnew file mode 100644 index 0000000000..20fa40e127 --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Disabled.png diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png Binary files differnew file mode 100644 index 0000000000..53efa3a9a9 --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Over.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Over.png Binary files differnew file mode 100644 index 0000000000..f1420e0002 --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Over.png diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Press.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Press.png Binary files differnew file mode 100644 index 0000000000..89a6269edc --- /dev/null +++ b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Press.png diff --git a/indra/newview/skins/default/textures/icons/Shop.png b/indra/newview/skins/default/textures/icons/Shop.png Binary files differnew file mode 100644 index 0000000000..d7e0001dc6 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Shop.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 91890009f4..29c72a414b 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -278,6 +278,9 @@ with the same filename but different name    <texture name="menu_separator" file_name="navbar/FileMenu_Divider.png" scale.left="4" scale.top="166" scale.right="0" scale.bottom="0" /> +  <texture name="MouseLook_View_Off" file_name="bottomtray/MouseLook_view_off.png" preload="false" /> +  <texture name="MouseLook_View_On" file_name="bottomtray/MouseLook_view_on.png" preload="false" /> +    <texture name="Move_Fly_Off" file_name="bottomtray/Move_Fly_Off.png" preload="false" />    <texture name="Move_Run_Off" file_name="bottomtray/Move_Run_Off.png" preload="false" />    <texture name="Move_Walk_Off" file_name="bottomtray/Move_Walk_Off.png" preload="false" /> @@ -338,10 +341,14 @@ with the same filename but different name    <texture name="Object_Tube" file_name="build/Object_Tube.png" preload="false" />    <texture name="Object_Tube_Selected" file_name="build/Object_Tube_Selected.png" preload="false" /> +  <texture name="Object_View_Off" file_name="bottomtray/Object_View_Off.png" preload="false" /> +  <texture name="Object_View_On" file_name="bottomtray/Object_View_On.png" preload="false" /> +    <texture name="OptionsMenu_Disabled" file_name="icons/OptionsMenu_Disabled.png" preload="false" />    <texture name="OptionsMenu_Off" file_name="icons/OptionsMenu_Off.png" preload="false" />    <texture name="OptionsMenu_Press" file_name="icons/OptionsMenu_Press.png" preload="false" /> +  <texture name="PanOrbit_Off" file_name="bottomtray/PanOrbit_Off.png" preload="false" />    <texture name="Parcel_Exp_Color" file_name="icons/Parcel_Exp_Color.png" preload="false" /> @@ -446,6 +453,7 @@ with the same filename but different name    <texture name="SegmentedBtn_Right_Selected_Disabled" file_name="widgets/SegmentedBtn_Right_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" />    <texture name="Shirt_Large" file_name="icons/Shirt_Large.png" preload="false" /> +  <texture name="Shop" file_name="icons/Shop.png" preload="false" />    <texture name="SkipBackward_Off" file_name="icons/SkipBackward_Off.png" preload="false" />    <texture name="SkipForward_Off" file_name="icons/SkipForward_Off.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index 999cb9ed97..8c3aa2c9a4 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -5,7 +5,7 @@   can_minimize="true"   can_close="false"   follows="bottom" - height="152" + height="164"   layout="topleft"   name="camera_floater"   help_topic="camera_floater" @@ -13,7 +13,7 @@   save_visibility="true"   save_dock_state="true"   single_instance="true" - width="150"> + width="228">      <floater.string       name="rotate_tooltip">          Rotate Camera Around Focus @@ -27,16 +27,16 @@          Move Camera Up and Down, Left and Right      </floater.string>      <floater.string -     name="orbit_mode_title"> -        Orbit +     name="camera_modes_title"> +        Camera modes      </floater.string>      <floater.string       name="pan_mode_title"> -        Pan +       Orbit Zoom Pan      </floater.string>      <floater.string -     name="avatar_view_mode_title"> -        Presets +     name="presets_mode_title"> +        Preset Views      </floater.string>      <floater.string       name="free_mode_title"> @@ -44,39 +44,134 @@      </floater.string>      <panel       border="false" -     height="110" +     height="123"       layout="topleft"       left="2"       top="0"       mouse_opaque="false"       name="controls" -     width="148"> -    <joystick_track -         follows="top|left" -         height="78" -         image_selected="Cam_Tracking_In" -         image_unselected="Cam_Tracking_Out" +     width="226"> +       <panel +         color="Transparent" +         follows="all" +         height="102"           layout="topleft" -         left="45" -         name="cam_track_stick" -         quadrant="left" -         scale_image="false" -         sound_flags="3" -         tool_tip="Move camera up and down, left and right" -         top="22" -         visible="false" -         width="78" /> +         left="8" +         name="preset_views_list" +         opaque="true" +         top="24" +         width="212" +         visible="false"> +        <panel_camera_item +          name="front_view"> +          <panel_camera_item.mousedown_callback +            function="CameraPresets.ChangeView" +            parameter="front_view" /> +          <panel_camera_item.picture +            image_name="Cam_Preset_Front_Off" /> +          <panel_camera_item.selected_picture +            image_name="Cam_Preset_Front_On" /> +          <panel_camera_item.text> +            Front View +          </panel_camera_item.text> +        </panel_camera_item> +        <panel_camera_item +          name="group_view" +          top_pad="4"> +          <panel_camera_item.mousedown_callback +            function="CameraPresets.ChangeView" +            parameter="group_view" /> +          <panel_camera_item.picture +            image_name="Cam_Preset_Side_Off" /> +          <panel_camera_item.selected_picture +            image_name="Cam_Preset_Side_On" /> +          <panel_camera_item.text> +            Side View +          </panel_camera_item.text> +        </panel_camera_item> +        <panel_camera_item +          name="rear_view" +          layout="topleft" +          top_pad="4"> +          <panel_camera_item.mousedown_callback +            function="CameraPresets.ChangeView" +            parameter="rear_view" /> +          <panel_camera_item.picture +            image_name="Cam_Preset_Back_Off" /> +          <panel_camera_item.selected_picture +            image_name="Cam_Preset_Back_On" /> +          <panel_camera_item.text> +            Rear View +          </panel_camera_item.text> +        </panel_camera_item> +      </panel> +      <panel +          color="Transparent" +          follows="all" +          height="68" +          item_pad="4" +          layout="topleft" +          left="8" +          name="camera_modes_list" +          opaque="true" +          top="24" +          width="212" +          visible="false"> +        <panel_camera_item +          name="object_view"> +          <panel_camera_item.mousedown_callback +            function="CameraPresets.ChangeView" +            parameter="object_view" /> +          <panel_camera_item.text> +            Object View +          </panel_camera_item.text> +          <panel_camera_item.picture +            image_name="Object_View_Off" /> +          <panel_camera_item.selected_picture +            image_name="Object_View_On" /> +        </panel_camera_item> +        <panel_camera_item +          name="mouselook_view" +          layout="topleft"> +          <panel_camera_item.mousedown_callback +            function="CameraPresets.ChangeView" +            parameter="mouselook_view" /> +          <panel_camera_item.text> +            Mouselook View +          </panel_camera_item.text> +          <panel_camera_item.picture +            image_name="MouseLook_View_Off" /> +          <panel_camera_item.selected_picture +            image_name="MouseLook_View_On" /> +        </panel_camera_item> +      </panel>           <!--TODO: replace + - images -->           <panel              border="false"              class="camera_zoom_panel" -            height="94" +            height="114"              layout="topleft" -            left="7" +            left="0"              mouse_opaque="false"              name="zoom" -            top="22" -            width="18"> +            top="20" +            width="226"> +           <joystick_rotate +              follows="top|left" +              height="78" +              image_selected="Cam_Rotate_In" +              image_unselected="Cam_Rotate_Out" +              layout="topleft" +              left="7" +              mouse_opaque="false" +              name="cam_rotate_stick" +              quadrant="left" +              scale_image="false" +              sound_flags="3" +              visible="true" +              tool_tip="Orbit camera around focus" +              top="20" +              width="78" />                                   <button                follows="top|left"                height="18" @@ -84,15 +179,17 @@                image_selected="AddItem_Press"                image_unselected="AddItem_Off"                layout="topleft" +              left_pad="14"                 name="zoom_plus_btn" -              width="18"> +              width="18" +              top="18">               <commit_callback                  function="Zoom.plus" />               <mouse_held_callback                  function="Zoom.plus" />             </button>             <slider_bar -              height="48" +              height="50"                layout="topleft"                name="zoom_slider"                orientation="vertical" @@ -118,90 +215,20 @@               <mouse_held_callback                  function="Zoom.minus" />             </button> -         </panel> -         <joystick_rotate +         <joystick_track           follows="top|left"           height="78" -         image_selected="Cam_Rotate_In" -         image_unselected="Cam_Rotate_Out" +         image_selected="Cam_Tracking_In" +         image_unselected="Cam_Tracking_Out"           layout="topleft" -         left="45" -         mouse_opaque="false" -         name="cam_rotate_stick" +         left="133" +         name="cam_track_stick"           quadrant="left"           scale_image="false"           sound_flags="3" -         visible="true" -         tool_tip="Orbit camera around focus" -         top="22" -         width="78" /> -         <panel -         height="78" -         layout="topleft" -         left="36" -         name="camera_presets" +         tool_tip="Move camera up and down, left and right"           top="20" -         visible="false" -         width="78"> -            <button -             height="40" -             image_selected="Cam_Preset_Back_On" -             image_unselected="Cam_Preset_Back_Off" -             is_toggle="true" -             layout="topleft" -             left="0" -             name="rear_view" -             tool_tip="Rear View" -             top="2" -             width="40"> -                <click_callback -                 function="CameraPresets.ChangeView" -                 parameter="rear_view" /> -            </button> -            <button -             height="40" -             image_selected="Cam_Preset_Side_On" -             image_unselected="Cam_Preset_Side_Off" -             is_toggle="true" -             layout="topleft" -             left_pad="5" -             name="group_view" -             tool_tip="Group View" -             top="2" -             width="40"> -                <click_callback -                 function="CameraPresets.ChangeView" -                 parameter="group_view" /> -            </button> -            <button -             height="40" -             image_selected="Cam_Preset_Front_On" -             image_unselected="Cam_Preset_Front_Off" -             is_toggle="true" -             layout="topleft" -             left="0" -             name="front_view" -             tool_tip="Front View" -             top_pad="5" -             width="40"> -                <click_callback -                 function="CameraPresets.ChangeView" -                 parameter="front_view" /> -            </button> -            <button -             height="40" -             image_selected="Cam_Preset_Eye_Off" -             image_unselected="Cam_Preset_Eye_Off" -             is_toggle="true" -             layout="topleft" -             left_pad="5" -             name="mouselook_view" -             tool_tip="Mouselook View" -             width="40"> -                <click_callback -                 function="CameraPresets.ChangeView" -                 parameter="mouselook_view" /> -            </button> +         width="78"/>          </panel>      </panel>      <panel @@ -211,56 +238,44 @@       left="2"       top_pad="0"       name="buttons" -     width="148"> +     width="226">          <button           height="23"           label=""           layout="topleft" -         left="23" +         left="70"           is_toggle="true" -         image_overlay="Cam_Orbit_Off" +         image_overlay="Cam_Avatar_Off"           image_selected="PushButton_Selected_Press" -         name="orbit_btn" +         name="presets_btn"           tab_stop="false" -         tool_tip="Orbit camera" +         tool_tip="Preset Views" +         top="13"            width="25">          </button>          <button           height="23"           label=""           layout="topleft" -         left_pad="0" +         left_pad="1"           is_toggle="true" -         image_overlay="Cam_Pan_Off" +         image_overlay="PanOrbit_Off"           image_selected="PushButton_Selected_Press"           name="pan_btn"           tab_stop="false" -         tool_tip="Pan camera" -         width="25"> -        </button> -        <button -         height="23" -         label="" -         layout="topleft" -         left_pad="0" -         image_overlay="Cam_Avatar_Off" -         image_selected="PushButton_Selected_Press" -         name="avatarview_btn" -         tab_stop="false" -         tool_tip="Presets" +         tool_tip="Orbit Zoom Pan"           width="25">          </button>          <button           height="23"           label=""           layout="topleft" -         left_pad="0" -         is_toggle="true" +         left_pad="1"           image_overlay="Cam_FreeCam_Off"           image_selected="PushButton_Selected_Press" -         name="freecamera_btn" +         name="avatarview_btn"           tab_stop="false" -         tool_tip="View object" +         tool_tip="Camera modes"           width="25">          </button>      </panel> diff --git a/indra/newview/skins/default/xui/en/floater_incoming_call.xml b/indra/newview/skins/default/xui/en/floater_incoming_call.xml index 1d67123726..24fff6d4ae 100644 --- a/indra/newview/skins/default/xui/en/floater_incoming_call.xml +++ b/indra/newview/skins/default/xui/en/floater_incoming_call.xml @@ -32,7 +32,15 @@      </floater.string>      <floater.string       name="VoiceInviteGroup"> -        has joined a Voice Chat call with the group [GROUP]. +      just joined '[GROUP]' voice channel. +    </floater.string> +    <floater.string +     name="VoiceInviteQuestionGroup"> +      Would you like to leave [CURRENT_CHAT] and join the call with '[GROUP]'? +    </floater.string> +    <floater.string +     name="VoiceInviteQuestionDefault"> +      Do you want to leave [CURRENT_CHAT] and join this voice chat?      </floater.string>      <avatar_icon       enabled="false" diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml index b690986e6b..6f29255a6b 100644 --- a/indra/newview/skins/default/xui/en/floater_moveview.xml +++ b/indra/newview/skins/default/xui/en/floater_moveview.xml @@ -12,7 +12,7 @@   save_rect="true"   save_visibility="true"   save_dock_state="true" - width="113"> + width="133">      <string       name="walk_forward_tooltip">          Walk Forward (press Up Arrow or W) @@ -98,108 +98,82 @@       mouse_opaque="false"       name="panel_actions"       top="0" -     width="113"> +     width="133">          <!-- Buttons in panel are organized in 3 columns to enable their easy vertical adjustment via top_pad-->          <!-- Left column -->          <button           follows="left|bottom"           height="24" -         image_selected="Movement_Up_On" -         image_pressed_selected="Movement_Up_On" -         image_unselected="Movement_Up_Off" -         layout="topleft" -         left="23" -         name="move up btn" -         scale_image="false" -         tool_tip="Fly up (press E)" -         top="18" -         width="24" /> -        <button -         follows="left|bottom" -         height="24"           image_selected="Movement_TurnLeft_On"           image_pressed_selected="Movement_TurnLeft_On"           image_unselected="Movement_TurnLeft_Off"           layout="topleft" -         left="15" +         left="30"           name="turn left btn"           scale_image="false"           tool_tip="Turn left (press Left Arrow or A)" -         top_pad="-3" +         top="34"           width="24" />          <joystick_slide           follows="left|bottom" -         height="24" +         height="10"           image_selected="Movement_Left_On"           image_pressed_selected="Movement_Left_On"           image_unselected="Movement_Left_Off"           layout="topleft" -         left="18" +         left_delta="4"           name="move left btn"           quadrant="left"           scale_image="false"           tool_tip="Walk left (press Shift + Left Arrow or A)" -         top_pad="-3" -         width="24" /> +         top_pad="10" +         width="19" />          <!-- Right column -->          <button           follows="left|bottom"           height="24" -         image_selected="Movement_Down_On" -         image_pressed_selected="Movement_Down_On" -         image_unselected="Movement_Down_Off" -         layout="topleft" -         right="-21" -         name="move down btn" -         scale_image="false" -         tool_tip="Fly down (press C)" -         top="18" -         width="24" /> -        <button -         follows="left|bottom" -         height="24"           image_selected="Movement_TurnRight_On"           image_pressed_selected="Movement_TurnRight_On"           image_unselected="Movement_TurnRight_Off"           layout="topleft" -         right="-13" +         right="-30"           name="turn right btn"           scale_image="false"           tool_tip="Turn right (press Right Arrow or D)" -         top_pad="-3" +         top="34"           width="24" />          <joystick_slide           follows="left|bottom" -         height="24" +         height="10"           image_selected="Movement_Right_On"           image_pressed_selected="Movement_Right_On"           image_unselected="Movement_Right_Off"           layout="topleft"           name="move right btn"           quadrant="right" -         right="-16" +         right_delta="4"           scale_image="false"           tool_tip="Walk right (press Shift + Right Arrow or D)" -         top_pad="-3" -         width="24" /> +         top_pad="10" +         width="19" />          <!-- Middle column -->          <joystick_turn           follows="left|bottom" -         height="25" +         height="24"           image_selected="Movement_Forward_On"           image_pressed_selected="Movement_Forward_On"           image_unselected="Movement_Forward_Off"           layout="topleft" -         left="46" +         left="54"           name="forward btn"           quadrant="up"           scale_image="false"           tool_tip="Walk forward (press up arrow or W)" -         top="22" -         width="21" /> +         top="20" +         width="24" />          <joystick_turn           follows="left|bottom" -         height="25" +         height="24"           image_selected="Movement_Backward_On"           image_pressed_selected="Movement_Backward_On"           image_unselected="Movement_Backward_Off" @@ -209,8 +183,35 @@           quadrant="down"           scale_image="false"           tool_tip="Walk backward (press down arrow or S)" -         top_pad="7" -         width="21" /> +         top_pad="5" +         width="24" /> +        <!-- Fly up/down (jump/crouch) buttons --> +        <button +         follows="left|bottom" +         height="19" +         image_selected="Movement_Up_On" +         image_pressed_selected="Movement_Up_On" +         image_unselected="Movement_Up_Off" +         layout="topleft" +         right="-11" +         name="move up btn" +         scale_image="false" +         tool_tip="Fly up (press E)" +         top="22" +         width="10" /> +        <button +         follows="left|bottom" +         height="19" +         image_selected="Movement_Down_On" +         image_pressed_selected="Movement_Down_On" +         image_unselected="Movement_Down_Off" +         layout="topleft" +         right_delta="0" +         name="move down btn" +         scale_image="false" +         tool_tip="Fly down (press C)" +         top_pad="10" +         width="10" />      </panel>  <!-- Width and height of this panel should be synchronized with panel_stand_stop_flying.xml -->      <panel @@ -220,7 +221,7 @@       left="0"       name="panel_modes"       top_pad="0" -     width="113"> +     width="133">          <button           follows="left|bottom"           height="23" @@ -229,7 +230,7 @@  	 label=""           layout="topleft"           name="mode_walk_btn" -         left="10" +         left="20"           pad_right="0"           tool_tip="Walking mode"           top="2" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 0b93ded0c0..75de75a14d 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -6222,6 +6222,14 @@ Avatar '[NAME]' left as fully loaded.    </notification>    <notification +   icon="notifytip.tga" +   name="AvatarRezSelfBakeNotification" +   type="notifytip"> +( [EXISTENCE] seconds alive ) +You uploaded a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] seconds. +  </notification> + +  <notification     icon="alertmodal.tga"     name="ConfirmLeaveCall"     type="alert"> diff --git a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml index e3f6045e27..2edd643cc5 100644 --- a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel   follows="top|right|left" - height="22" + height="23"   layout="topleft"   left="0"   name="wearable_item" @@ -9,7 +9,7 @@   width="380">      <icon       follows="top|right|left" -     height="20" +     height="23"       image_name="ListItem_Over"       layout="topleft"       left="0" @@ -18,7 +18,7 @@       visible="false"       width="380" />      <icon -     height="20" +     height="23"       follows="top|right|left"       image_name="ListItem_Select"       layout="topleft" @@ -48,16 +48,28 @@       top="4"       value="..."       width="359" /> -    <icon  +    <panel +     background_visible="false"       name="btn_lock"       layout="topleft"       follows="top|right"       image_name="Locked_Icon" -     top="2" +     top="0"       left="0" -     height="13" -     width="9" -     tab_stop="false" /> +     height="23" +     width="23" +     tab_stop="false"> +        <icon  +         name="btn_lock1" +         layout="topleft" +         follows="top|right" +         image_name="Locked_Icon" +         top="2" +         left="5" +         height="13" +         width="9" +         tab_stop="false" /> +    </panel>      <button        name="btn_edit"       layout="topleft" @@ -65,8 +77,8 @@       image_overlay="Edit_Wrench"       top="0"       left_pad="3" -     height="20" -     width="20" +     height="23" +     width="23"       tab_stop="false" />      <panel       background_visible="true" diff --git a/indra/newview/skins/default/xui/en/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/en/panel_bodyparts_list_button_bar.xml index 9d19b89a61..dc123f13f4 100644 --- a/indra/newview/skins/default/xui/en/panel_bodyparts_list_button_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_bodyparts_list_button_bar.xml @@ -25,12 +25,12 @@       follows="top|right"       height="25"       image_hover_unselected="Toolbar_Middle_Over" +     image_overlay="Shop"       image_selected="Toolbar_Middle_Selected"       image_unselected="Toolbar_Middle_Off" -     label="Shop >"        layout="topleft"       right="-5"       name="bodyparts_shop_btn"       top="5" -     width="61" /> +     width="45" />  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/en/panel_clothing_list_button_bar.xml index 2359719c2a..5b3f0b17a9 100644 --- a/indra/newview/skins/default/xui/en/panel_clothing_list_button_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_clothing_list_button_bar.xml @@ -26,12 +26,12 @@       follows="top|right"       height="25"       image_hover_unselected="Toolbar_Middle_Over" +     image_overlay="Shop"       image_selected="Toolbar_Middle_Selected"       image_unselected="Toolbar_Middle_Off" -     label="Shop >"        layout="topleft"       right="-5"       name="clothing_shop_btn"       top="5" -     width="61" /> +     width="45" />  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml index b1782f405e..035e8607ec 100644 --- a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml @@ -9,7 +9,7 @@   width="380">      <icon       follows="top|right|left" -     height="20" +     height="23"       image_name="ListItem_Over"       layout="topleft"       left="0" @@ -18,7 +18,7 @@       visible="false"       width="380" />      <icon -     height="20" +     height="23"       follows="top|right|left"       image_name="ListItem_Select"       layout="topleft" @@ -66,8 +66,8 @@       image_overlay="UpArrow_Off"       top="0"       left="0" -     height="20" -     width="20" +     height="23" +     width="23"       tab_stop="false" />      <button        name="btn_move_down" @@ -76,18 +76,31 @@       image_overlay="DownArrow_Off"       top="0"       left_pad="3" -     height="20" -     width="20" +     height="23" +     width="23"       tab_stop="false" /> -    <icon +    <panel +     background_visible="false"       name="btn_lock"       layout="topleft"       follows="top|right"       image_name="Locked_Icon" -     top="2" -     left_pad="1" -     height="13" -     width="9" /> +     top="0" +     left="0" +     height="23" +     width="23" +     tab_stop="false"> +        <icon  +         name="btn_lock1" +         layout="topleft" +         follows="top|right" +         image_name="Locked_Icon" +         top="2" +         left="5" +         height="13" +         width="9" +         tab_stop="false" /> +    </panel>      <button        name="btn_edit"       layout="topleft" @@ -95,8 +108,8 @@       image_overlay="Edit_Wrench"       top="0"       left_pad="3" -     height="20" -     width="20" +     height="23" +     width="23"       tab_stop="false" />      <panel       background_visible="true" diff --git a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml index c5fbd1cae6..06371b7489 100644 --- a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel   follows="top|right|left" - height="22" + height="23"   layout="topleft"   left="0"   name="dummy_clothing_item" @@ -9,7 +9,7 @@   width="380">      <icon       follows="top|right|left" -     height="20" +     height="23"       image_name="ListItem_Over"       layout="topleft"       left="0" @@ -18,7 +18,7 @@       visible="false"       width="380" />      <icon -     height="20" +     height="23"       follows="top|right|left"       image_name="ListItem_Select"       layout="topleft" @@ -56,8 +56,8 @@       image_overlay="AddItem_Off"       top="0"       left="0" -     height="20" -     width="20" +     height="23" +     width="23"       tab_stop="false" />      <panel       background_visible="true" diff --git a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml index 3effc9de89..07642946f8 100644 --- a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml +++ b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml @@ -6,12 +6,13 @@   name="panel_stand_stop_flying"   mouse_opaque="false"   visible="true" - width="113"> + width="133">      <button       follows="left|bottom"       height="19"       label="Stand"       layout="topleft" +     left="10"       name="stand_btn"       tool_tip="Click here to stand up."       top="2" @@ -22,6 +23,7 @@       height="19"       label="Stop Flying"       layout="topleft" +     left="10"       name="stop_fly_btn"       tool_tip="Stop flying"       top="2" diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index 5a6b3ec096..3d7b0b7edc 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -86,7 +86,7 @@ width="333">        </text>        <button        follows="left|top" -      height="20" +      height="23"        image_overlay="Edit_Wrench"        label=""        layout="topleft" diff --git a/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml b/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml new file mode 100644 index 0000000000..98707b8495 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel_camera_item + background_visible="false" + height="30" + layout="topleft" + width="212"> +  <panel_camera_item.icon_over +   follows="top|left" +     height="30" +     image_name="ListItem_Over" +     left="0" +     mouse_opaque="false" +     layout="topleft" +     name="hovered_icon" +     top="30" +     scale_image="true" +     visible="false" +     width="212" /> +  <panel_camera_item.icon_selected +   follows="top|left" +     height="30" +     image_name="ListItem_Select" +     layout="topleft" +     left="0" +     mouse_opaque="false" +     name="selected_icon" +     top="30" +     scale_image="true" +     visible="false" +     width="212" /> +  <panel_camera_item.picture +     follows="top|left" +     height="30" +     image_name="Icon_For_Sale" +     layout="topleft" +     left="0" +     mouse_opaque="false" +     name="picture" +     tab_stop="false" +     top="30" +     top_pad="10" +     width="30" /> +  <panel_camera_item.selected_picture +     follows="top|left" +     height="30" +     image_name="Cam_Rotate_In" +     layout="topleft" +     left="0" +     mouse_opaque="false" +     name="selected_picture" +     tab_stop="false" +     top="30" +     top_pad="8" +     visible="false"  +     width="30" /> +  <panel_camera_item.text +   follows="top|left|right" +     font="SansSerifMedium" +     height="15" +     layout="topleft" +     left ="38" +     name="picture_name" +     text_color="white" +     top="21" +     use_ellipses="true" +     width="170" +     word_wrap="false" > +   Text +   </panel_camera_item.text> +</panel_camera_item> diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml index 7133f8754c..1d164ac661 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml @@ -31,10 +31,10 @@  		Description :  	</text>  	<text name="trigger_label"> -		Déclencheur : +		Déclench. :  	</text>  	<text name="replace_text" tool_tip="Remplacer les raccourcis avec ces mots. Par exemple, remplacer le mot-clé « salut » par « bonjour » fera dire « je venais dire bonjour » au lieu de « je venais dire salut » dans le chat, et déclenchera le geste."> -		Remplacer par : +		Rempl. par :  	</text>  	<line_editor left="310" name="replace_editor" tool_tip="Remplacer les raccourcis avec ces mots. Par exemple, remplacer le mot-clé « salut » par « bonjour » fera dire « je venais dire bonjour » au lieu de « je venais dire salut » dans le chat, et déclenchera le geste" width="120"/>  	<text name="key_label"> @@ -50,20 +50,20 @@  	<text name="steps_label">  		Étapes :  	</text> -	<button label="Vers le haut" name="up_btn"/> -	<button label="Vers le bas" name="down_btn"/> +	<button label="Haut" name="up_btn"/> +	<button label="Bas" name="down_btn"/>  	<button label="Supprimer" name="delete_btn"/>  	<radio_group name="animation_trigger_type">  		<radio_item label="Lancer" name="start"/>  		<radio_item label="Arrêter" name="stop"/>  	</radio_group>  	<check_box label="jusqu'à la fin des animations" name="wait_anim_check"/> -	<check_box label="temps en secondes" name="wait_time_check"/> +	<check_box label="temps (sec)" name="wait_time_check"/>  	<line_editor left_delta="130" name="wait_time_editor"/>  	<text name="help_label">  		Toutes les étapes ont lieu en même temps si vous n'ajoutez pas d'étapes d'attente.  	</text> -	<check_box label="Actifs" name="active_check" tool_tip="Les gestes actifs peuvent être déclenchés en saisissant leur raccourci dans le chat ou en appuyant sur les raccourcis. Les gestes deviennent généralement inactifs lorsqu'il y a un conflit entre les raccourcis."/> +	<check_box label="Actif" name="active_check" tool_tip="Les gestes actifs peuvent être déclenchés en saisissant leur raccourci dans le chat ou en appuyant sur les raccourcis. Les gestes deviennent généralement inactifs lorsqu'il y a un conflit entre les raccourcis."/>  	<button label="Prévisualiser" name="preview_btn" width="86"/>  	<button label="Enregistrer" left_delta="96" name="save_btn" width="86"/>  </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml index c9b8c42dfb..26d097d549 100644 --- a/indra/newview/skins/default/xui/fr/floater_tools.xml +++ b/indra/newview/skins/default/xui/fr/floater_tools.xml @@ -37,7 +37,7 @@  		Référence  	</floater.string>  	<floater.string name="grid_attachment_text"> -		Pièce-jointe +		Pièce jointe  	</floater.string>  	<button label="" label_selected="" name="button focus" tool_tip="Mise au point"/>  	<button label="" label_selected="" name="button move" tool_tip="Déplacer"/> diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index 4c4c01f34a..bb1c4242ee 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -1831,7 +1831,7 @@ Linden Lab  		Les composantes requises suivantes ne se trouvent pas dans [FLOATER]:  [COMPONENTS]  	</notification> -	<notification label="Remplacer la pièce-jointe existante" name="ReplaceAttachment"> +	<notification label="Remplacer la pièce jointe existante" name="ReplaceAttachment">  		Vous avez déjà un objet sur cette partie du corps.  Voulez-vous le remplacer par l'objet sélectionné ?  		<form name="form"> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml index 0bbcbe833f..5872b01fb0 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml @@ -1,10 +1,10 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Modifier la préférence" name="panel_edit_pick"> +<panel label="Modifier le favori" name="panel_edit_pick">  	<panel.string name="location_notice">  		(mise à jour après enregistrement)  	</panel.string>  	<text name="title"> -		Modifier la préférence +		Modifier le favori  	</text>  	<scroll_container name="profile_scroll">  		<panel name="scroll_content_panel"> diff --git a/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml index 69403939aa..3e66b3c72a 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml @@ -11,7 +11,7 @@  			<button label="Quitter l'appel" name="end_call_btn"/>  		</layout_panel>  		<layout_panel name="voice_ctrls_btn_panel"> -			<button label="Ouvrir les contrôles vocaux" name="voice_ctrls_btn"/> +			<button label="Ouvrir contrôles vocaux" name="voice_ctrls_btn"/>  		</layout_panel>  	</layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_group_notices.xml b/indra/newview/skins/default/xui/fr/panel_group_notices.xml index bcb6abcac6..5ea7ba192b 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_notices.xml @@ -36,14 +36,14 @@ Vous pouvez désactiver la réception des notices dans l'onglet Général.  		</text>  		<text_editor name="create_message"/>  		<text name="lbl5"> -			Pièce-jointe : +			Pièce jointe :  		</text>  		<line_editor name="create_inventory_name"/>  		<text name="string">  			Faire glisser l'objet et le déposer ici pour le joindre :  		</text>  		<button label="Inventaire" name="open_inventory" tool_tip="Ouvrir l'inventaire"/> -		<button label="Supprimer" label_selected="Supprimer pièce-jointe" name="remove_attachment" tool_tip="Supprimer la pièce jointe de votre notification"/> +		<button label="Supprimer" label_selected="Supprimer pièce jointe" name="remove_attachment" tool_tip="Supprimer la pièce jointe de votre notification"/>  		<button label="Envoyer" label_selected="Envoyer" left="200" name="send_notice" width="100"/>  		<group_drop_target name="drop_target" tool_tip="Faites glisser un objet de l'inventaire jusqu'à cette case pour l'envoyer avec la notice. Vous devez avoir l'autorisation de copier et transférer l'objet pour pouvoir le joindre."/>  	</panel> @@ -61,6 +61,6 @@ Vous pouvez désactiver la réception des notices dans l'onglet Général.  			Message :  		</text>  		<line_editor left="128" name="view_inventory_name" width="256"/> -		<button label="Ouvrir la pièce jointe" label_selected="Ouvrir pièce-jointe" name="open_attachment" width="118"/> +		<button label="Ouvrir pièce jointe" label_selected="Ouvrir pièce jointe" name="open_attachment" width="118"/>  	</panel>  </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_notes.xml b/indra/newview/skins/default/xui/fr/panel_notes.xml index f4e4f8a4ab..1609b6c9d3 100644 --- a/indra/newview/skins/default/xui/fr/panel_notes.xml +++ b/indra/newview/skins/default/xui/fr/panel_notes.xml @@ -17,7 +17,7 @@  			<button label="IM" name="im" width="30" tool_tip="Ouvrir une session IM"/>  			<button label="Appeler" name="call" width="60" tool_tip="Appeler ce résident"/>  			<button label="Carte" name="show_on_map_btn" tool_tip="Afficher le résident sur la carte"/> -			<button label="Téléporter" name="teleport" tool_tip="Proposez une téléportation"/> +			<button label="Téléporter" name="teleport" tool_tip="Proposer une téléportation"/>  		</layout_panel>  	</layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_people.xml b/indra/newview/skins/default/xui/fr/panel_people.xml index 186ca51772..f7eb803d4a 100644 --- a/indra/newview/skins/default/xui/fr/panel_people.xml +++ b/indra/newview/skins/default/xui/fr/panel_people.xml @@ -56,7 +56,7 @@ Pour rechercher des résidents avec qui passer du temps, utilisez [secondlife://  		<button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/>  		<button label="Appeler" name="call_btn" tool_tip="Appeler ce résident"/>  		<button label="Partager" name="share_btn" tool_tip="Partager un article d'inventaire"/> -		<button label="Téléporter" name="teleport_btn" tool_tip="Proposez une téléportation"/> +		<button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation"/>  		<button label="Profil" name="group_info_btn" tool_tip="Voir le profil du groupe"/>  		<button label="Chat" name="chat_btn" tool_tip="Ouvrir une session de chat"/>  		<button label="Appel" name="group_call_btn" tool_tip="Appeler ce groupe"/> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml index 2a7691ea0a..9bae9878e2 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml @@ -11,7 +11,7 @@  	<text name="heading2">  		Positionnement automatique pour :  	</text> -	<check_box label="Construire/Éditer" name="edit_camera_movement" tool_tip="Utilisez le positionnement automatique de la caméra quand vous accédez au mode de modification et quand vous le quittez"/> +	<check_box label="Construire/Modifier" name="edit_camera_movement" tool_tip="Utilisez le positionnement automatique de la caméra quand vous accédez au mode de modification et quand vous le quittez"/>  	<check_box label="Apparence" name="appearance_camera_movement" tool_tip="Utiliser le positionnement automatique de la caméra quand je suis en mode Édition"/>  	<check_box initial_value="1" label="Panneau latéral" name="appearance_sidebar_positioning" tool_tip="Positionnement auto de la caméra pour le panneau latéral"/>  	<check_box label="Afficher en vue subjective" name="first_person_avatar_visible"/> diff --git a/indra/newview/skins/default/xui/fr/panel_profile.xml b/indra/newview/skins/default/xui/fr/panel_profile.xml index f801aee312..f1c12c9fee 100644 --- a/indra/newview/skins/default/xui/fr/panel_profile.xml +++ b/indra/newview/skins/default/xui/fr/panel_profile.xml @@ -45,7 +45,7 @@  			<button label="IM" name="im" tool_tip="Ouvrir une session IM"/>  			<button label="Appeler" name="call" tool_tip="Appeler ce résident"/>  			<button label="Carte" name="show_on_map_btn" tool_tip="Afficher le résident sur la carte"/> -			<button label="Téléporter" name="teleport" tool_tip="Proposez une téléportation"/> +			<button label="Téléporter" name="teleport" tool_tip="Proposer une téléportation"/>  			<button label="▼" name="overflow_btn" tool_tip="Payer ou partager l'inventaire avec le résident"/>  		</layout_panel>  		<layout_panel name="profile_me_buttons_panel"> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 742f024d0d..15d5847c58 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -919,7 +919,7 @@  		Consultez les notices précédentes ou choisissez de ne plus recevoir ces messages ici.  	</string>  	<string name="GroupNotifyOpenAttachment"> -		Ouvrir la pièce jointe +		Ouvrir pièce jointe  	</string>  	<string name="GroupNotifySaveAttachment">  		Enregistrer la pièce jointe diff --git a/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml b/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml index 17ba39588e..5c23b77498 100644 --- a/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml @@ -13,7 +13,7 @@  				合成  テクスチャ  			</text> -			<button label="テクスチャ ID 一覧をコンソールに書き込む" label_selected="ダンプ" name="Dump"/> +			<button label="ID をコンソールにダンプ" label_selected="ダンプ" name="Dump"/>  			<panel name="scroll_content_panel">  				<texture_picker label="髪" name="hair-baked"/>  				<texture_picker label="髪" name="hair_grain"/> diff --git a/indra/newview/skins/default/xui/ja/floater_god_tools.xml b/indra/newview/skins/default/xui/ja/floater_god_tools.xml index ffea9474b0..9e5d473db7 100644 --- a/indra/newview/skins/default/xui/ja/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/ja/floater_god_tools.xml @@ -14,7 +14,7 @@  			<check_box label="可視" name="check visible" tool_tip="この設定により、この地域をゴッド・モード以外でも可視にします。"/>  			<check_box label="ダメージ" name="check damage" tool_tip="この設定により、この地域内でダメージを有効化します。"/>  			<check_box label="トラフィック・トラッキングをブロック" name="block dwell" tool_tip="この設定により、この地域内のトラフィック計算をオフにします。"/> -			<check_box label="土地整備をブロック" name="block terraform" tool_tip="この設定により、この地域内での土地整備を禁止"/> +			<check_box label="地形編集をブロック" name="block terraform" tool_tip="この設定により、この地域内での土地整備を禁止"/>  			<check_box label="サンドボックス" name="is sandbox" tool_tip="これがサンドボックス地域でも切り替え"/>  			<button label="地形を構築する" label_selected="地形を構築する" name="Bake Terrain" tool_tip="現在の地形をデフォルトとして保存します。"/>  			<button label="地形を元に戻す" label_selected="地形を元に戻す" name="Revert Terrain" tool_tip="現在の地形をデフォルトに置換します。"/> diff --git a/indra/newview/skins/default/xui/ja/floater_moveview.xml b/indra/newview/skins/default/xui/ja/floater_moveview.xml index 6a9d427830..57ab32f486 100644 --- a/indra/newview/skins/default/xui/ja/floater_moveview.xml +++ b/indra/newview/skins/default/xui/ja/floater_moveview.xml @@ -7,10 +7,10 @@  		後ろに歩く(下矢印か S を押す)  	</string>  	<string name="walk_left_tooltip"> -		左に歩く(Shift + 左矢印か A を押す) +		左に水平移動(Shift + 左矢印か A を押す)  	</string>  	<string name="walk_right_tooltip"> -		右に歩く(Shift + 右矢印か D を押す) +		右に水平移動(Shift + 右矢印か D を押す)  	</string>  	<string name="run_forward_tooltip">  		前に走る(上矢印か W を押す) @@ -19,10 +19,10 @@  		後ろに走る(下矢印か S を押す)  	</string>  	<string name="run_left_tooltip"> -		左を向く(Shift + 左矢印か A を押す) +		左に水平移動(Shift + 左矢印か A を押す)  	</string>  	<string name="run_right_tooltip"> -		右に走る(Shift + 右矢印か D を押す) +		右に水平移動(Shift + 右矢印か D を押す)  	</string>  	<string name="fly_forward_tooltip">  		前に飛ぶ(上矢印か W を押す) @@ -31,10 +31,10 @@  		後ろに飛ぶ(下矢印か S を押す)  	</string>  	<string name="fly_left_tooltip"> -		左に移動(Shift + 左矢印か A を押す) +		左に水平移動(Shift + 左矢印か A を押す)  	</string>  	<string name="fly_right_tooltip"> -		右を向く(Shift + 右矢印か D を押す) +		右に水平移動(Shift + 右矢印か D を押す)  	</string>  	<string name="fly_up_tooltip">  		上に移動(E を押す) diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml index 83d3ec567e..6899a819b8 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml @@ -21,8 +21,8 @@  		<menu_item_call label="すべて取り外す" name="Detach All"/>  	</context_menu>  	<menu_item_call label="アウトフィットを変更" name="Chenge Outfit"/> -	<menu_item_call label="アウトフィットの編集" name="Edit Outfit"/> -	<menu_item_call label="シェイプの編集" name="Edit My Shape"/> +	<menu_item_call label="アウトフィットを編集" name="Edit Outfit"/> +	<menu_item_call label="シェイプを編集" name="Edit My Shape"/>  	<menu_item_call label="フレンド" name="Friends..."/>  	<menu_item_call label="グループ" name="Groups..."/>  	<menu_item_call label="プロフィール" name="Profile..."/> diff --git a/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml index 517fdeb25e..42d8a21660 100644 --- a/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml +++ b/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml @@ -1,5 +1,5 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel name="clothing_list_button_bar_panel"> -	<button label="入れ替える" name="switch_btn"/> -	<button label="ショッピング >" name="bodyparts_shop_btn"/> +	<button label="交換" name="switch_btn"/> +	<button label="買い物 >" name="bodyparts_shop_btn"/>  </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml index 834884fa4a..2159f17fec 100644 --- a/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml +++ b/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml @@ -1,5 +1,5 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel name="clothing_list_button_bar_panel">  	<button label="追加 +" name="add_btn"/> -	<button label="ショッピング >" name="clothing_shop_btn"/> +	<button label="買い物 >" name="clothing_shop_btn"/>  </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_edit_shape.xml b/indra/newview/skins/default/xui/ja/panel_edit_shape.xml index 5aed830d80..5d3bc79e2f 100644 --- a/indra/newview/skins/default/xui/ja/panel_edit_shape.xml +++ b/indra/newview/skins/default/xui/ja/panel_edit_shape.xml @@ -1,7 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <panel name="edit_shape_panel">  	<text name="avatar_height"> -		高さ [HEIGHT] メートル +		身長 [HEIGHT] メートル  	</text>  	<panel label="シャツ" name="accordion_panel">  		<accordion name="wearable_accordion"> diff --git a/indra/newview/skins/default/xui/ja/panel_region_general.xml b/indra/newview/skins/default/xui/ja/panel_region_general.xml index b72fac1a7c..54ec24773f 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_general.xml @@ -18,7 +18,7 @@  	<text left_delta="70" name="region_type">  		不明  	</text> -	<check_box label="土地整備をブロック" name="block_terraform_check"/> +	<check_box label="地形編集をブロック" name="block_terraform_check"/>  	<check_box label="飛行をブロック" name="block_fly_check"/>  	<check_box label="ダメージを許可" name="allow_damage_check"/>  	<check_box label="プッシュを制限" name="restrict_pushobject"/> diff --git a/indra/newview/skins/default/xui/ja/panel_region_texture.xml b/indra/newview/skins/default/xui/ja/panel_region_texture.xml index 14fc0b4c22..9e442ce091 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_texture.xml @@ -22,7 +22,7 @@  		4(高)  	</text>  	<text name="height_text_lbl5"> -		テクスチャ標高範囲 +		地形テクスチャの隆起範囲  	</text>  	<text name="height_text_lbl6">  		北西 @@ -45,7 +45,7 @@  	<spinner label="高" name="height_range_spin_2"/>  	<spinner label="高" name="height_range_spin_3"/>  	<text name="height_text_lbl10"> -		数値は上のテクスチャのブレンド範囲を示します。 +		数値は上のテクスチャが調和する範囲を示します。  	</text>  	<text name="height_text_lbl11">  		計測単位はメートルで、「低」の値は、1番のテクスチャの高さの  | 
