diff options
| -rw-r--r-- | indra/llui/llflatlistview.cpp | 47 | ||||
| -rw-r--r-- | indra/llui/llflatlistview.h | 5 | ||||
| -rw-r--r-- | indra/llui/lltexteditor.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llchathistory.cpp | 13 | ||||
| -rw-r--r-- | indra/newview/llfavoritesbar.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/llnavigationbar.cpp | 57 | ||||
| -rw-r--r-- | indra/newview/llnavigationbar.h | 37 | ||||
| -rw-r--r-- | indra/newview/llnearbychat.cpp | 9 | ||||
| -rw-r--r-- | indra/newview/llnearbychathandler.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/llpanellandmarks.cpp | 22 | ||||
| -rw-r--r-- | indra/newview/llpanellandmarks.h | 2 | ||||
| -rw-r--r-- | indra/newview/llscreenchannel.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llvoiceclient.cpp | 26 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/notifications.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_people.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_pick_list_item.xml | 1 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/widgets/flat_list_view.xml | 10 | 
17 files changed, 170 insertions, 104 deletions
| diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index 92993650a7..2481249f91 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -42,8 +42,6 @@ static const LLDefaultChildRegistry::Register<LLFlatListView> flat_list_view("fl  const LLSD SELECTED_EVENT	= LLSD().with("selected", true);  const LLSD UNSELECTED_EVENT	= LLSD().with("selected", false); -static const std::string COMMENT_TEXTBOX = "comment_text"; -  //forward declaration  bool llsds_are_equal(const LLSD& llsd_1, const LLSD& llsd_2); @@ -51,7 +49,8 @@ LLFlatListView::Params::Params()  :	item_pad("item_pad"),  	allow_select("allow_select"),  	multi_select("multi_select"), -	keep_one_selected("keep_one_selected") +	keep_one_selected("keep_one_selected"), +	no_items_text("no_items_text")  {};  void LLFlatListView::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */) @@ -295,19 +294,6 @@ void LLFlatListView::resetSelection(bool no_commit_on_deselection /*= false*/)  void LLFlatListView::setNoItemsCommentText(const std::string& comment_text)  { -	if (NULL == mNoItemsCommentTextbox) -	{ -		LLRect comment_rect = getRect(); -		comment_rect.setOriginAndSize(0, 0, comment_rect.getWidth(), comment_rect.getHeight()); -		comment_rect.stretch(-getBorderWidth()); -		LLTextBox::Params text_p; -		text_p.name(COMMENT_TEXTBOX); -		text_p.border_visible(false); -		text_p.rect(comment_rect); -		text_p.follows.flags(FOLLOWS_ALL); -		mNoItemsCommentTextbox = LLUICtrlFactory::create<LLTextBox>(text_p, this); -	} -  	mNoItemsCommentTextbox->setValue(comment_text);  } @@ -361,7 +347,6 @@ bool LLFlatListView::updateValue(const LLSD& old_value, const LLSD& new_value)  // PROTECTED STUFF  ////////////////////////////////////////////////////////////////////////// -  LLFlatListView::LLFlatListView(const LLFlatListView::Params& p)  :	LLScrollContainer(p)    , mItemComparator(NULL) @@ -398,6 +383,25 @@ LLFlatListView::LLFlatListView(const LLFlatListView::Params& p)  	params.bevel_style(LLViewBorder::BEVEL_IN);  	mSelectedItemsBorder = LLUICtrlFactory::create<LLViewBorder> (params);  	mItemsPanel->addChild( mSelectedItemsBorder ); + +	{ +		// create textbox for "No Items" comment text +		LLTextBox::Params text_p = p.no_items_text; +		if (!text_p.rect.isProvided()) +		{ +			LLRect comment_rect = getRect(); +			comment_rect.setOriginAndSize(0, 0, comment_rect.getWidth(), comment_rect.getHeight()); +			comment_rect.stretch(-getBorderWidth()); +			text_p.rect(comment_rect); +		} +		text_p.border_visible(false); + +		if (!text_p.follows.isProvided()) +		{ +			text_p.follows.flags(FOLLOWS_ALL); +		} +		mNoItemsCommentTextbox = LLUICtrlFactory::create<LLTextBox>(text_p, this); +	}  };  // virtual @@ -861,7 +865,11 @@ void LLFlatListView::notifyParentItemsRectChanged()  	// take into account comment text height if exists  	if (mNoItemsCommentTextbox && mNoItemsCommentTextbox->getVisible())  	{ +		// top text padding inside the textbox is included into the height  		comment_height = mNoItemsCommentTextbox->getTextPixelHeight(); + +		// take into account a distance from parent's top border to textbox's top +		comment_height += getRect().getHeight() - mNoItemsCommentTextbox->getRect().mTop;  	}  	LLRect req_rect =  getItemsRect(); @@ -892,6 +900,10 @@ void LLFlatListView::setNoItemsCommentVisible(bool visible) const  	{  		if (visible)  		{ +/* +// *NOTE: MA 2010-02-04 +// Deprecated after params of the comment text box were moved into widget (flat_list_view.xml) +// can be removed later if nothing happened.  			// We have to update child rect here because of issues with rect after reshaping while creating LLTextbox  			// It is possible to have invalid LLRect if Flat List is in LLAccordionTab  			LLRect comment_rect = getLocalRect(); @@ -903,6 +915,7 @@ void LLFlatListView::setNoItemsCommentVisible(bool visible) const  			LLViewBorder* scroll_border = getChild<LLViewBorder>("scroll border");  			comment_rect.stretch(-scroll_border->getBorderWidth());  			mNoItemsCommentTextbox->setRect(comment_rect); +*/  		}  		mNoItemsCommentTextbox->setVisible(visible);  	} diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h index 949a731507..92cb40332e 100644 --- a/indra/llui/llflatlistview.h +++ b/indra/llui/llflatlistview.h @@ -35,8 +35,8 @@  #include "llpanel.h"  #include "llscrollcontainer.h" +#include "lltextbox.h" -class LLTextBox;  /**   * LLFlatListView represents a flat list ui control that operates on items in a form of LLPanel's. @@ -108,6 +108,9 @@ public:  		/** padding between items */  		Optional<U32> item_pad;  +		/** textbox with info message when list is empty*/ +		Optional<LLTextBox::Params> no_items_text; +  		Params();  	}; diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 62aeb50011..3fdb48b3ca 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -720,7 +720,10 @@ BOOL LLTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask)  	}  	if (!LLTextBase::handleRightMouseDown(x, y, mask))  	{ -		showContextMenu(x, y); +		if(getMouseOpaque()) +		{ +			showContextMenu(x, y); +		}  	}  	return TRUE;  } diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 1dc0e8c0a7..f046e08827 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -585,9 +585,16 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL  	bool irc_me = prefix == "/me " || prefix == "/me'";  	// Delimiter after a name in header copy/past and in plain text mode -	std::string delimiter = (chat.mChatType != CHAT_TYPE_SHOUT && chat.mChatType != CHAT_TYPE_WHISPER) -		? ": " -		: " "; +	std::string delimiter = ": "; +	std::string shout = LLTrans::getString("shout"); +	std::string whisper = LLTrans::getString("whisper"); +	if (chat.mChatType == CHAT_TYPE_SHOUT ||  +		chat.mChatType == CHAT_TYPE_WHISPER || +		chat.mText.compare(0, shout.length(), shout) == 0 || +		chat.mText.compare(0, whisper.length(), whisper) == 0) +	{ +		delimiter = " "; +	}  	// Don't add any delimiter after name in irc styled messages  	if (irc_me || chat.mChatStyle == CHAT_STYLE_IRC) diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index a5b62439f4..90f6438980 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -34,7 +34,6 @@  #include "llfavoritesbar.h" -#include "llbutton.h"  #include "llfloaterreg.h"  #include "llfocusmgr.h"  #include "llinventory.h" @@ -48,7 +47,6 @@  #include "llclipboard.h"  #include "llinventoryclipboard.h"  #include "llinventorybridge.h" -#include "llinventorymodel.h"  #include "llfloaterworldmap.h"  #include "lllandmarkactions.h"  #include "llnotificationsutil.h" @@ -674,7 +672,14 @@ void LLFavoritesBarCtrl::updateButtons()  	{  		return;  	} - +	if(mItems.empty()) +	{ +		mBarLabel->setVisible(TRUE); +	} +	else +	{ +		mBarLabel->setVisible(FALSE); +	}  	const child_list_t* childs = getChildList();  	child_list_const_iter_t child_it = childs->begin();  	int first_changed_item_index = 0; @@ -720,14 +725,22 @@ void LLFavoritesBarCtrl::updateButtons()  			}  		}  		// we have to remove ChevronButton to make sure that the last item will be LandmarkButton to get the right aligning +		// keep in mind that we are cutting all buttons in space between the last visible child of favbar and ChevronButton  		if (mChevronButton->getParent() == this)  		{  			removeChild(mChevronButton);  		}  		int last_right_edge = 0; +		//calculate new buttons offset  		if (getChildList()->size() > 0)  		{ -			last_right_edge = getChildList()->back()->getRect().mRight; +			//find last visible child to get the rightest button offset +			child_list_const_reverse_iter_t last_visible_it = std::find_if(childs->rbegin(), childs->rend(),  +					std::mem_fun(&LLView::getVisible)); +			if(last_visible_it != childs->rend()) +			{ +				last_right_edge = (*last_visible_it)->getRect().mRight; +			}  		}  		//last_right_edge is saving coordinates  		LLButton* last_new_button = NULL; diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index 59708fcfb5..46cab0d868 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -185,43 +185,46 @@ void LLTeleportHistoryMenuItem::onMouseLeave(S32 x, S32 y, MASK mask)  static LLDefaultChildRegistry::Register<LLPullButton> menu_button("pull_button"); -LLPullButton::LLPullButton(const LLPullButton::Params& params): -		LLButton(params) -	,	mClickDraggingSignal(NULL) +LLPullButton::LLPullButton(const LLPullButton::Params& params) : +	LLButton(params)  {  	setDirectionFromName(params.direction);  } -boost::signals2::connection LLPullButton::setClickDraggingCallback( const commit_signal_t::slot_type& cb )  -{  -	if (!mClickDraggingSignal) mClickDraggingSignal = new commit_signal_t(); -	return mClickDraggingSignal->connect(cb);  +boost::signals2::connection LLPullButton::setClickDraggingCallback(const commit_signal_t::slot_type& cb) +{ +	return mClickDraggingSignal.connect(cb);  }  /*virtual*/  void LLPullButton::onMouseLeave(S32 x, S32 y, MASK mask)  {  	LLButton::onMouseLeave(x, y, mask); -	 -	if(mMouseDownTimer.getStarted() ) + +	if (mMouseDownTimer.getStarted()) //an user have done a mouse down, if the timer started. see LLButton::handleMouseDown for details  	{ -		const LLVector2 cursor_direction = LLVector2(F32(x),F32(y)) - mLastMouseDown; -		if( angle_between(mDraggingDirection, cursor_direction) < 0.5 * F_PI_BY_TWO)//call if angle < pi/4  -			{ -				if(mClickDraggingSignal) -				{ -					(*mClickDraggingSignal)(this, LLSD()); -				} -			} +		const LLVector2 cursor_direction = LLVector2(F32(x), F32(y)) - mLastMouseDown; +		/* For now cursor_direction points to the direction of mouse movement +		 * Need to decide whether should we fire a signal.  +		 * We fire if angle between mDraggingDirection and cursor_direction is less that 45 degree +		 * Note: +		 * 0.5 * F_PI_BY_TWO equals to PI/4 radian that equals to angle of 45 degrees +		 */ +		if (angle_between(mDraggingDirection, cursor_direction) < 0.5 * F_PI_BY_TWO)//call if angle < pi/4  +		{ +			mClickDraggingSignal(this, LLSD()); +		}  	}  }  /*virtual*/  BOOL LLPullButton::handleMouseDown(S32 x, S32 y, MASK mask) +{ +	BOOL handled = LLButton::handleMouseDown(x, y, mask); +	if (handled)  	{ -	BOOL handled = LLButton::handleMouseDown(x,y, mask); -	if(handled) -	{ +		//if mouse down was handled by button,  +		//capture mouse position to calculate the direction of  mouse move  after mouseLeave event   		mLastMouseDown.set(F32(x), F32(y));  	}  	return handled; @@ -230,27 +233,31 @@ BOOL LLPullButton::handleMouseDown(S32 x, S32 y, MASK mask)  /*virtual*/  BOOL LLPullButton::handleMouseUp(S32 x, S32 y, MASK mask)  { +	// reset data to get ready for next circle   	mLastMouseDown.clear();  	return LLButton::handleMouseUp(x, y, mask);  } - +/** + * this function is setting up dragging direction vector.  + * Last one is just unit vector. It points to direction of mouse drag that we need to handle    + */  void LLPullButton::setDirectionFromName(const std::string& name)  {  	if (name == "left")  	{ -		mDraggingDirection.set(F32(-1), F32(0));  +		mDraggingDirection.set(F32(-1), F32(0));  	}  	else if (name == "right")  	{ -		mDraggingDirection.set(F32(0), F32(1));  +		mDraggingDirection.set(F32(0), F32(1));  	}  	else if (name == "down")  	{ -		 mDraggingDirection.set(F32(0), F32(-1));  +		mDraggingDirection.set(F32(0), F32(-1));  	}  	else if (name == "up")  	{ -		 mDraggingDirection.set(F32(0), F32(1));  +		mDraggingDirection.set(F32(0), F32(1));  	}  } diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h index 9d0abc7a3a..b512f2a79c 100644 --- a/indra/newview/llnavigationbar.h +++ b/indra/newview/llnavigationbar.h @@ -44,46 +44,41 @@ class LLSearchComboBox;  /**   * This button is able to handle click-dragging mouse event.   * It has appropriated signal for this event. - * Dragging direction can be set from xml by attribute called 'direction' + * Dragging direction can be set from xml attribute called 'direction'   *    * *TODO: move to llui?     */ -class LLPullButton : public LLButton +class LLPullButton: public LLButton  {  	LOG_CLASS(LLPullButton); -	 +  public: -	 -	struct Params : public LLInitParam::Block<Params, LLButton::Params> +	struct Params: public LLInitParam::Block<Params, LLButton::Params>  	{ -		Optional<std::string>	direction; // left, right, down, up -		 -		Params() -		:	direction("direction","down") -		{} +		Optional<std::string> direction; // left, right, down, up + +		Params()  +		:	direction("direction", "down") +		{ +		}  	};  	/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); -	 +  	/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); -	 +  	/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask); -	boost::signals2::connection setClickDraggingCallback( const commit_signal_t::slot_type& cb ); -	 -	/* virtual*/ ~LLPullButton() -	{ -		delete mClickDraggingSignal; -	} -	 +	boost::signals2::connection setClickDraggingCallback(const commit_signal_t::slot_type& cb); +  protected:  	friend class LLUICtrlFactory;  	// convert string name into direction vector  	void setDirectionFromName(const std::string& name);  	LLPullButton(const LLPullButton::Params& params); -	 -	commit_signal_t* mClickDraggingSignal;	 + +	commit_signal_t mClickDraggingSignal;  	LLVector2 mLastMouseDown;  	LLVector2 mDraggingDirection;  }; diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 6de47fccd2..acb28bd46f 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -203,14 +203,7 @@ void	LLNearbyChat::addMessage(const LLChat& chat,bool archive,const LLSD &args)  		if (gSavedPerAccountSettings.getBOOL("LogChat"))   		{ -			if (chat.mChatType != CHAT_TYPE_WHISPER && chat.mChatType != CHAT_TYPE_SHOUT) -			{ -				LLLogChat::saveHistory("chat", chat.mFromName, chat.mFromID, chat.mText); -			} -			else -			{ -				LLLogChat::saveHistory("chat", "", chat.mFromID, chat.mFromName + " " + chat.mText); -			} +			LLLogChat::saveHistory("chat", chat.mFromName, chat.mFromID, chat.mText);  		}  	}  } diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index c08ca30bab..be48770567 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -274,6 +274,13 @@ void LLNearbyChatScreenChannel::showToastsBottom()  			toast->setRect(toast_rect);  			toast->setIsHidden(false);  			toast->setVisible(TRUE); + +			if(!toast->hasFocus()) +			{ +				// Fixing Z-order of toasts (EXT-4862) +				// Next toast will be positioned under this one. +				gFloaterView->sendChildToBack(toast); +			}  			bottom = toast->getRect().mTop;  		}		 diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 47feef496a..7c1b0f6234 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -171,8 +171,6 @@ BOOL LLLandmarksPanel::postBuild()  	initLandmarksInventoryPanel();  	initMyInventoryPanel();  	initLibraryInventoryPanel(); -	getChild<LLAccordionCtrlTab>("tab_favorites")->setDisplayChildren(true); -	getChild<LLAccordionCtrlTab>("tab_landmarks")->setDisplayChildren(true);  	return TRUE;  } @@ -462,7 +460,7 @@ void LLLandmarksPanel::initFavoritesInventoryPanel()  	initLandmarksPanel(mFavoritesInventoryPanel);  	mFavoritesInventoryPanel->getFilter()->setEmptyLookupMessage("FavoritesNoMatchingItems"); -	initAccordion("tab_favorites", mFavoritesInventoryPanel); +	initAccordion("tab_favorites", mFavoritesInventoryPanel, true);  }  void LLLandmarksPanel::initLandmarksInventoryPanel() @@ -481,7 +479,7 @@ void LLLandmarksPanel::initLandmarksInventoryPanel()  	// subscribe to have auto-rename functionality while creating New Folder  	mLandmarksInventoryPanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mLandmarksInventoryPanel, _1, _2)); -	initAccordion("tab_landmarks", mLandmarksInventoryPanel); +	initAccordion("tab_landmarks", mLandmarksInventoryPanel, true);  }  void LLLandmarksPanel::initMyInventoryPanel() @@ -490,7 +488,7 @@ void LLLandmarksPanel::initMyInventoryPanel()  	initLandmarksPanel(mMyInventoryPanel); -	initAccordion("tab_inventory", mMyInventoryPanel); +	initAccordion("tab_inventory", mMyInventoryPanel, false);  }  void LLLandmarksPanel::initLibraryInventoryPanel() @@ -499,7 +497,15 @@ void LLLandmarksPanel::initLibraryInventoryPanel()  	initLandmarksPanel(mLibraryInventoryPanel); -	initAccordion("tab_library", mLibraryInventoryPanel); +	// We want to fetch only "Landmarks" category from the library. +	const LLUUID &landmarks_cat = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false, true); +	if (landmarks_cat.notNull()) +	{ +		gInventory.startBackgroundFetch(landmarks_cat); +	} + +	// Expanding "Library" tab for new users who have no landmarks in "My Inventory". +	initAccordion("tab_library", mLibraryInventoryPanel, true);  }  void LLLandmarksPanel::initLandmarksPanel(LLPlacesInventoryPanel* inventory_list) @@ -526,14 +532,14 @@ void LLLandmarksPanel::initLandmarksPanel(LLPlacesInventoryPanel* inventory_list  	inventory_list->saveFolderState();  } -void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list) +void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list,	bool expand_tab)  {  	LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>(accordion_tab_name);  	mAccordionTabs.push_back(accordion_tab);  	accordion_tab->setDropDownStateChangedCallback(  		boost::bind(&LLLandmarksPanel::onAccordionExpandedCollapsed, this, _2, inventory_list)); -	accordion_tab->setDisplayChildren(false); +	accordion_tab->setDisplayChildren(expand_tab);  }  void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLPlacesInventoryPanel* inventory_list) diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h index 96b790844c..cbbd10ac26 100644 --- a/indra/newview/llpanellandmarks.h +++ b/indra/newview/llpanellandmarks.h @@ -110,7 +110,7 @@ private:  	void initMyInventoryPanel();  	void initLibraryInventoryPanel();  	void initLandmarksPanel(LLPlacesInventoryPanel* inventory_list); -	void initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list); +	void initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list, bool expand_tab);  	void onAccordionExpandedCollapsed(const LLSD& param, LLPlacesInventoryPanel* inventory_list);  	void deselectOtherThan(const LLPlacesInventoryPanel* inventory_list); diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 8f36c0e88a..7c2e7e3319 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -533,9 +533,13 @@ void LLScreenChannel::showToastsBottom()  			// HACK  			// EXT-2653: it is necessary to prevent overlapping for secondary showed toasts  			(*it).toast->setVisible(TRUE); -			// Show toast behind floaters. (EXT-3089) -			gFloaterView->sendChildToBack((*it).toast);  		}		 +		if(!(*it).toast->hasFocus()) +		{ +			// Fixing Z-order of toasts (EXT-4862) +			// Next toast will be positioned under this one. +			gFloaterView->sendChildToBack((*it).toast); +		}  	}  	if(it != mToastList.rend()) diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index b6e7e73b9d..f3bfc2e86c 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -1107,16 +1107,17 @@ public:  	 * Sets internal voluem level for specified user.  	 *  	 * @param[in] speaker_id - LLUUID of user to store volume level for -	 * @param[in] volume - internal volume level to be stored for user. +	 * @param[in] volume - external (vivox) volume level to be stored for user.  	 */ -	void storeSpeakerVolume(const LLUUID& speaker_id, S32 volume); +	void storeSpeakerVolume(const LLUUID& speaker_id, F32 volume);  	/** -	 * Gets stored internal volume level for specified speaker. +	 * Gets stored external (vivox) volume level for specified speaker and +	 * transforms it into internal (viewer) level.  	 *  	 * If specified user is not found default level will be returned. It is equivalent of   	 * external level 0.5 from the 0.0..1.0 range. -	 * Default internal level is calculated as: internal = 400 * external^2 +	 * Internal level is calculated as: internal = 400 * external^2  	 * Maps 0.0 to 1.0 to internal values 0-400 with default 0.5 == 100  	 *  	 * @param[in] speaker_id - LLUUID of user to get his volume level @@ -1133,7 +1134,7 @@ private:  	void load();  	void save(); -	typedef std::map<LLUUID, S32> speaker_data_map_t; +	typedef std::map<LLUUID, F32> speaker_data_map_t;  	speaker_data_map_t mSpeakersData;  }; @@ -1149,7 +1150,7 @@ LLSpeakerVolumeStorage::~LLSpeakerVolumeStorage()  	save();  } -void LLSpeakerVolumeStorage::storeSpeakerVolume(const LLUUID& speaker_id, S32 volume) +void LLSpeakerVolumeStorage::storeSpeakerVolume(const LLUUID& speaker_id, F32 volume)  {  	mSpeakersData[speaker_id] = volume;  } @@ -1163,7 +1164,10 @@ S32 LLSpeakerVolumeStorage::getSpeakerVolume(const LLUUID& speaker_id)  	if (it != mSpeakersData.end())  	{ -		ret_val = it->second; +		F32 f_val = it->second; +		// volume can amplify by as much as 4x! +		S32 ivol = (S32)(400.f * f_val * f_val); +		ret_val = llclamp(ivol, 0, 400);  	}  	return ret_val;  } @@ -1184,7 +1188,7 @@ void LLSpeakerVolumeStorage::load()  	for (LLSD::map_const_iterator iter = settings_llsd.beginMap();  		iter != settings_llsd.endMap(); ++iter)  	{ -		mSpeakersData.insert(std::make_pair(LLUUID(iter->first), (S32)iter->second.asInteger())); +		mSpeakersData.insert(std::make_pair(LLUUID(iter->first), (F32)iter->second.asReal()));  	}  } @@ -6288,14 +6292,14 @@ void LLVoiceClient::setUserVolume(const LLUUID& id, F32 volume)  		participantState *participant = findParticipantByID(id);  		if (participant)  		{ +			// store this volume setting for future sessions +			LLSpeakerVolumeStorage::getInstance()->storeSpeakerVolume(id, volume); +  			// volume can amplify by as much as 4x!  			S32 ivol = (S32)(400.f * volume * volume);  			participant->mUserVolume = llclamp(ivol, 0, 400);  			participant->mVolumeDirty = TRUE;  			mAudioSession->mVolumeDirty = TRUE; - -			// store this volume setting for future sessions -			LLSpeakerVolumeStorage::getInstance()->storeSpeakerVolume(id, participant->mUserVolume);  		}  	}  } diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 5d78cfc9ef..d16474873f 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -1532,7 +1532,7 @@ Your search terms were too short so no search was performed.     icon="alertmodal.tga"     name="CouldNotTeleportReason"     type="alertmodal"> -Could not teleport. +Teleport failed.  [REASON]    </notification> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 3b5add33a8..447ac1b123 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -137,6 +137,7 @@ background_visible="true"                          <avatar_list                           allow_select="true"                           follows="all" +                         height="235"                           layout="topleft"                           left="0"                           multi_select="true" @@ -152,6 +153,7 @@ background_visible="true"                          <avatar_list                           allow_select="true"                           follows="all" +                         height="235"                           layout="topleft"                           left="0"                           multi_select="true" diff --git a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml index 023b1fc81d..e62c1278f9 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml @@ -64,6 +64,7 @@       layout="topleft"       left="103"       name="picture_descr" +     textbox.mouse_opaque="false"        top_pad="0"       width="178"       word_wrap="true" /> diff --git a/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml b/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml index 888b4eaf7c..a71b293f31 100644 --- a/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml +++ b/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml @@ -5,4 +5,12 @@   item_pad="0"   keep_one_selected="true"   multi_select="false" - opaque="true" />
\ No newline at end of file + opaque="true"> +    <flat_list_view.no_items_text +     follows="all" +     name="no_items_msg" +     v_pad="10" +     h_pad="10" +     value="There are no any items in the list" +     wrap="true" /> +</flat_list_view>
\ No newline at end of file | 
