diff options
59 files changed, 2608 insertions, 863 deletions
diff --git a/doc/contributions.txt b/doc/contributions.txt index 4ab7284b72..6edb727682 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -120,6 +120,8 @@ Angus Boyd  	VWR-592  Ann Congrejo  	CT-193 +Ardy Lay +	VWR-19499  Argent Stonecutter  	VWR-68  Armin Weatherwax @@ -699,6 +701,8 @@ Whoops Babii  	VWR-8298  Wilton Lundquist  	VWR-7682 +Zai Lynch +	VWR-19505  Zarkonnen Decosta  	VWR-253  Zi Ree diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake index 180504d286..b6f1e06edd 100644 --- a/indra/cmake/APR.cmake +++ b/indra/cmake/APR.cmake @@ -56,7 +56,7 @@ else (STANDALONE)    if (LINUX)      if (VIEWER) -      list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} uuid) +      list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES})      endif (VIEWER)      list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} rt)    endif (LINUX) diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 2dd296bf12..a756770881 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -232,7 +232,6 @@ elseif(LINUX)          libssl.so          libstacktrace.so          libtcmalloc.so -        libuuid.so.1          libssl.so.0.9.7         ) diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake index 32c4bc81df..5710360de2 100644 --- a/indra/cmake/ViewerMiscLibs.cmake +++ b/indra/cmake/ViewerMiscLibs.cmake @@ -2,7 +2,6 @@  include(Prebuilt)  if (NOT STANDALONE) -  use_prebuilt_binary(libuuid)    use_prebuilt_binary(vivox)    use_prebuilt_binary(fontconfig)  endif(NOT STANDALONE) diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index e1203971ea..ff90806271 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -519,6 +519,36 @@ void LLFloater::storeDockStateControl()  	}  } +LLRect LLFloater::getSavedRect() const +{ +	LLRect rect; + +	if (mRectControl.size() > 1) +	{ +		rect = LLUI::sSettingGroups["floater"]->getRect(mRectControl); +	} + +	return rect; +} + +bool LLFloater::hasSavedRect() const +{ +	return !getSavedRect().isEmpty(); +} + +// static +std::string LLFloater::getControlName(const std::string& name, const LLSD& key) +{ +	std::string ctrl_name = name; + +	// Add the key to the control name if appropriate. +	if (key.isString() && !key.asString().empty()) +	{ +		ctrl_name += "_" + key.asString(); +	} + +	return ctrl_name; +}  void LLFloater::setVisible( BOOL visible )  { @@ -2664,18 +2694,20 @@ void LLFloater::setInstanceName(const std::string& name)  	mInstanceName = name;  	if (!mInstanceName.empty())  	{ +		std::string ctrl_name = getControlName(mInstanceName, mKey); +  		// save_rect and save_visibility only apply to registered floaters  		if (!mRectControl.empty())  		{ -			mRectControl = LLFloaterReg::declareRectControl(mInstanceName); +			mRectControl = LLFloaterReg::declareRectControl(ctrl_name);  		}  		if (!mVisibilityControl.empty())  		{ -			mVisibilityControl = LLFloaterReg::declareVisibilityControl(mInstanceName); +			mVisibilityControl = LLFloaterReg::declareVisibilityControl(ctrl_name);  		}  		if(!mDocStateControl.empty())  		{ -			mDocStateControl = LLFloaterReg::declareDockStateControl(mInstanceName); +			mDocStateControl = LLFloaterReg::declareDockStateControl(ctrl_name);  		}  	} diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 5e482cbac3..ed1f0715af 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -203,6 +203,10 @@ public:  	BOOL			isResizable() const				{ return mResizable; }  	void			setResizeLimits( S32 min_width, S32 min_height );  	void			getResizeLimits( S32* min_width, S32* min_height ) { *min_width = mMinWidth; *min_height = mMinHeight; } +	LLRect			getSavedRect() const; +	bool			hasSavedRect() const; + +	static std::string	getControlName(const std::string& name, const LLSD& key);  	bool			isMinimizeable() const{ return mCanMinimize; }  	bool			isCloseable() const{ return mCanClose; } diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 5cc9add1e2..0ff7557ead 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -368,6 +368,22 @@ S32 LLLayoutStack::getDefaultWidth(S32 cur_width)  	return cur_width;  } +void LLLayoutStack::movePanel(LLPanel* panel_to_move, LLPanel* target_panel, bool move_to_front) +{ +	LayoutPanel* embedded_panel_to_move = findEmbeddedPanel(panel_to_move); +	LayoutPanel* embedded_target_panel = move_to_front ? *mPanels.begin() : findEmbeddedPanel(target_panel); + +	if (!embedded_panel_to_move || !embedded_target_panel || embedded_panel_to_move == embedded_target_panel) +	{ +		llwarns << "One of the panels was not found in stack or NULL was passed instead of valid panel" << llendl; +		return; +	} +	e_panel_list_t::iterator it = std::find(mPanels.begin(), mPanels.end(), embedded_panel_to_move); +	mPanels.erase(it); +	it = move_to_front ? mPanels.begin() : std::find(mPanels.begin(), mPanels.end(), embedded_target_panel); +	mPanels.insert(it, embedded_panel_to_move); +} +  void LLLayoutStack::addPanel(LLPanel* panel, S32 min_width, S32 min_height, S32 max_width, S32 max_height, BOOL auto_resize, BOOL user_resize, EAnimate animate, S32 index)  {  	// panel starts off invisible (collapsed) diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h index cd59ee3966..6fcc8e2ac3 100644 --- a/indra/llui/lllayoutstack.h +++ b/indra/llui/lllayoutstack.h @@ -72,6 +72,11 @@ public:  	void removePanel(LLPanel* panel);  	void collapsePanel(LLPanel* panel, BOOL collapsed = TRUE);  	S32 getNumPanels() { return mPanels.size(); } +	/** +	 * Moves panel_to_move before target_panel inside layout stack (both panels should already be there). +	 * If move_to_front is true target_panel is ignored and panel_to_move is moved to the beginning of mPanels +	 */ +	void movePanel(LLPanel* panel_to_move, LLPanel* target_panel, bool move_to_front = false);  	void updatePanelAutoResize(const std::string& panel_name, BOOL auto_resize);  	void setPanelUserResize(const std::string& panel_name, BOOL user_resize); diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 49ae58d53a..d1cd335783 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -45,7 +45,7 @@ RequestExecutionLevel admin	; on Vista we must be admin because we write to Prog  # *TODO: Move these into the language files themselves  LangString LanguageCode ${LANG_DANISH}   "da"  LangString LanguageCode ${LANG_GERMAN}   "de" -Langstring LanguageCode ${LANG_ENGLISH}  "en" +LangString LanguageCode ${LANG_ENGLISH}  "en"  LangString LanguageCode ${LANG_SPANISH}  "es"  LangString LanguageCode ${LANG_FRENCH}   "fr"  LangString LanguageCode ${LANG_JAPANESE} "ja" diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 4c2caae2c6..dd08e6c49a 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1619,11 +1619,14 @@ void LLAgentWearables::queryWearableCache()  		gAgentQueryManager.mActiveCacheQueries[baked_index] = gAgentQueryManager.mWearablesCacheQueryID;  	} - -	llinfos << "Requesting texture cache entry for " << num_queries << " baked textures" << llendl; -	gMessageSystem->sendReliable(gAgent.getRegion()->getHost()); -	gAgentQueryManager.mNumPendingQueries++; -	gAgentQueryManager.mWearablesCacheQueryID++; +	//VWR-22113: gAgent.getRegion() can return null if invalid, seen here on logout +	if(gAgent.getRegion()) +	{ +		llinfos << "Requesting texture cache entry for " << num_queries << " baked textures" << llendl; +		gMessageSystem->sendReliable(gAgent.getRegion()->getHost()); +		gAgentQueryManager.mNumPendingQueries++; +		gAgentQueryManager.mWearablesCacheQueryID++; +	}  }  LLUUID LLAgentWearables::computeBakedTextureHash(LLVOAvatarDefines::EBakedTextureIndex baked_index, diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 6ee4387236..f3ade83d00 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -49,6 +49,48 @@  #include "lltoolmgr.h"  #include "llviewerparcelmgr.h" +#include "llviewerwindow.h" +#include "llsdserialize.h" + +// Distance from mouse down on which drag'n'drop should be started. +#define DRAG_START_DISTANCE 3 + +static const std::string SORTING_DATA_FILE_NAME = "bottomtray_buttons_order.xml"; + +LLDefaultChildRegistry::Register<LLBottomtrayButton> bottomtray_button("bottomtray_button"); + +// LLBottomtrayButton methods + +// virtual +BOOL LLBottomtrayButton::handleHover(S32 x, S32 y, MASK mask) +{ +	S32 screenX, screenY; +	localPointToScreen(x, y, &screenX, &screenY); +	// pass hover to bottomtray +	LLBottomTray::getInstance()->handleHover(screenX, screenY, mask); +	return FALSE; +} +//virtual +BOOL LLBottomtrayButton::handleMouseUp(S32 x, S32 y, MASK mask) +{ +	S32 screenX, screenY; +	localPointToScreen(x, y, &screenX, &screenY); +	// pass mouse up to bottomtray +	LLBottomTray::getInstance()->onDraggableButtonMouseUp(this,screenX, screenY, mask); +	LLButton::handleMouseUp(x, y, mask); +	return FALSE; +} +//virtual +BOOL LLBottomtrayButton::handleMouseDown(S32 x, S32 y, MASK mask) +{ +	S32 screenX, screenY; +	localPointToScreen(x, y, &screenX, &screenY); +	// pass mouse up to bottomtray +	LLBottomTray::getInstance()->onDraggableButtonMouseDown(this,screenX, screenY, mask); +	LLButton::handleMouseDown(x, y, mask); +	return FALSE; +} +  static void update_build_button_enable_state()  {  	bool can_edit = LLToolMgr::getInstance()->canEdit(); @@ -153,6 +195,10 @@ LLBottomTray::LLBottomTray(const LLSD&)  ,	mCamButton(NULL)  ,	mBottomTrayLite(NULL)  ,	mIsInLiteMode(false) +,	mDragStarted(false) +,	mDraggedItem(NULL) +,	mLandingTab(NULL) +,	mCheckForDrag(false)  {  	// Firstly add ourself to IMSession observers, so we catch session events  	// before chiclets do that. @@ -177,6 +223,8 @@ LLBottomTray::LLBottomTray(const LLSD&)  		mBottomTrayLite->setFollowsAll();  		mBottomTrayLite->setVisible(FALSE);  	} + +	mImageDragIndication = LLUI::getUIImage(getString("DragIndicationImageName"));  }  LLBottomTray::~LLBottomTray() @@ -504,11 +552,253 @@ BOOL LLBottomTray::postBuild()  	showWellButton(RS_IM_WELL, !LLIMWellWindow::getInstance()->isWindowEmpty());  	showWellButton(RS_NOTIFICATION_WELL, !LLNotificationWellWindow::getInstance()->isWindowEmpty()); +	loadButtonsOrder(); +  	LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(boost::bind(&update_build_button_enable_state));  	return TRUE;  } +//Drag-n-drop + +void LLBottomTray::onDraggableButtonMouseDown(LLUICtrl* ctrl, S32 x, S32 y, MASK mask) +{ +	if (ctrl == NULL) return; +	LLView* parent_view = ctrl->getParent(); +	if(parent_view != NULL) +	{ +		// we actually drag'n'drop panel (not button) in code, so have to find a parent +		// of button which called this method on mouse down. +		LLPanel* parent = dynamic_cast<LLPanel*>(parent_view); +		// It may happen that we clicked not usual button, but button inside widget(speak, gesture) +		// so we'll need to get a level higher to reach layout panel as a parent. +		if(parent == NULL) parent = dynamic_cast<LLPanel*>(parent_view->getParent()); +		if (parent && parent->getVisible()) +		{ +			mDraggedItem = parent; +			mCheckForDrag = true; +			mStartX = x; +			mStartY = y; +		} +	} +} + +LLPanel* LLBottomTray::findChildPanelByLocalCoords(S32 x, S32 y) +{ +	LLPanel* ctrl = 0; +	S32 screenX, screenY; +	const child_list_t* list = mToolbarStack->getChildList(); + +	localPointToScreen(x, y, &screenX, &screenY); + +	// look for a child panel which contains the point (screenX, screenY) in it's rectangle +	for (child_list_const_iter_t i = list->begin(); i != list->end(); ++i) +	{ +		LLRect rect; +		localRectToScreen((*i)->getRect(), &rect); + +		if (rect.pointInRect(screenX, screenY)) +		{ +			ctrl = dynamic_cast<LLPanel*>(*i); +			break; +		} +	} + +	return ctrl; +} + +BOOL LLBottomTray::handleHover(S32 x, S32 y, MASK mask) +{ +	// if mouse down on draggable item was done, check whether we should start DnD +	if (mCheckForDrag) +	{ +		// Start drag'n'drop if mouse cursor was dragged away frome mouse down location enough +		if(sqrt((float)((mStartX-x)*(mStartX-x)+(mStartY-y)*(mStartY-y))) > DRAG_START_DISTANCE) +		{ +			mDragStarted = true; +			mCheckForDrag = false; +		} +	} +	if (mDragStarted) +	{ +		// Check whether the cursor is over draggable area, find which panel it is and set is as +		// landing tab for drag'n'drop +		if(isCursorOverDraggableArea(x, y)) +		{ +			LLPanel* panel = findChildPanelByLocalCoords(x,y); +			if (panel && panel != mDraggedItem) mLandingTab = panel; +			gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROWDRAG); +		} +		else +		{ +			gViewerWindow->getWindow()->setCursor(UI_CURSOR_NO); +		} +	} + +	return TRUE; +} + +bool LLBottomTray::isCursorOverDraggableArea(S32 x, S32 y) +{ +	bool result = getRect().pointInRect(x, y); +	result = result && mNearbyChatBar->calcScreenRect().mRight < x; +	result = result && mChicletPanel->calcScreenRect().mRight > x; +	return result; +} + +void LLBottomTray::updateButtonsOrdersAfterDnD() +{ +	// *TODO: change implementation of this method to support simplify it +	// (and according to future possible changes in the way button order is saved between sessions). +	state_object_map_t::const_iterator it = mStateProcessedObjectMap.begin(); +	state_object_map_t::const_iterator it_end = mStateProcessedObjectMap.end(); +	// Speak button is currently the only draggable button not in mStateProcessedObjectMap, +	// so if dragged_state is not found in that map, it should be RS_BUTTON_SPEAK. Change this code if any other +	// exclusions from mStateProcessedObjectMap will become draggable. +	EResizeState dragged_state = RS_BUTTON_SPEAK; +	EResizeState landing_state = RS_NORESIZE; +	bool landing_state_found = false; +	// Find states for dragged item and landing tab +	for (; it != it_end; ++it) +	{ +		if (it->second == mDraggedItem) +		{ +			dragged_state = it->first; +		} +		else if (it->second == mLandingTab) +		{ +			landing_state = it->first; +			landing_state_found = true; +		} +	} +	 +	// Update order of buttons according to drag'n'drop +	mButtonsOrder.erase(std::find(mButtonsOrder.begin(), mButtonsOrder.end(), dragged_state)); +	if (!landing_state_found && mLandingTab == getChild<LLPanel>(PANEL_CHICLET_NAME)) +	{ +		mButtonsOrder.push_back(dragged_state); +	} +	else +	{ +		if (!landing_state_found) landing_state = RS_BUTTON_SPEAK; +		mButtonsOrder.insert(std::find(mButtonsOrder.begin(), mButtonsOrder.end(), landing_state), dragged_state); +	} +	// Synchronize button process order with their order +	resize_state_vec_t::const_iterator it1 = mButtonsOrder.begin(); +	const resize_state_vec_t::const_iterator it_end1 = mButtonsOrder.end(); +	resize_state_vec_t::iterator it2 = mButtonsProcessOrder.begin(); +	for (; it1 != it_end1; ++it1) +	{ +		// Skip Speak because it is not in mButtonsProcessOrder(it's the reason why mButtonsOrder was introduced). +		// If any other draggable items will be added to bottomtray later, they should also be skipped here. +		if (*it1 != RS_BUTTON_SPEAK) +		{ +			*it2 = *it1; +			++it2; +		} +	} + +	saveButtonsOrder(); +} + +void LLBottomTray::saveButtonsOrder() +{ +	std::string user_dir = gDirUtilp->getLindenUserDir(); +	if (user_dir.empty()) return; +	 +	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME); +	LLSD settings_llsd; +	int i = 0; +	const resize_state_vec_t::const_iterator it_end = mButtonsOrder.end(); +	// we use numbers as keys for map which is saved in file and contains resize states as its values +	for (resize_state_vec_t::const_iterator it = mButtonsOrder.begin(); it != it_end; ++it, i++) +	{ +		std::string str = llformat("%d", i); +		settings_llsd[str] = *it;		 +	} +	llofstream file; +	file.open(filename); +	LLSDSerialize::toPrettyXML(settings_llsd, file); +} + +void LLBottomTray::loadButtonsOrder() +{ +	// load per-resident sorting information +	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME); + +	LLSD settings_llsd; +	llifstream file; +	file.open(filename); +	if (!file.is_open()) return; +	 +	LLSDSerialize::fromXML(settings_llsd, file); +	 + +	mButtonsOrder.clear(); +	mButtonsProcessOrder.clear(); +	int i = 0; +	// getting button order from file +	for (LLSD::map_const_iterator iter = settings_llsd.beginMap(); +		iter != settings_llsd.endMap(); ++iter, ++i) +	{ +		std::string str = llformat("%d", i); +		EResizeState state = (EResizeState)settings_llsd[str].asInteger(); +		mButtonsOrder.push_back(state); +		// RS_BUTTON_SPEAK is skipped, because it shouldn't be in mButtonsProcessOrder (it does not hide or shrink). +		if (state != RS_BUTTON_SPEAK) +		{ +			mButtonsProcessOrder.push_back(state); +		}		 +	} + +	// There are other panels in layout stack order of which is not saved. Also, panels order of which is saved, +	// are already in layout stack but in wrong order. The most convenient way to place them is moving them  +	// to front one by one (because in this case we don't have to pass the panel before which we want to insert our +	// panel to movePanel()). So panels are moved in order from the end of mButtonsOrder vector(reverse iterator is used). +	const resize_state_vec_t::const_reverse_iterator it_end = mButtonsOrder.rend(); +	// placing panels in layout stack according to button order which we loaded in previous for +	for (resize_state_vec_t::const_reverse_iterator it = mButtonsOrder.rbegin(); it != it_end; ++it, ++i) +	{ +		LLPanel* panel_to_move = *it == RS_BUTTON_SPEAK ? mSpeakPanel : mStateProcessedObjectMap[*it]; +		mToolbarStack->movePanel(panel_to_move, NULL, true); // prepend 		 +	} +	// Nearbychat is not stored in order settings file, but it must be the first of the panels, so moving it +	// manually here +	mToolbarStack->movePanel(mNearbyChatBar, NULL, true); +} + +void LLBottomTray::onDraggableButtonMouseUp(LLUICtrl* ctrl, S32 x, S32 y, MASK mask) +{ +	//if mouse up happened over area where drop is possible, change order of buttons +	if (mLandingTab != NULL && mDraggedItem != NULL && mDragStarted) +	{ +		if(isCursorOverDraggableArea(x, y)) +		{ +			// change order of panels in layout stack +			mToolbarStack->movePanel(mDraggedItem, (LLPanel*)mLandingTab); +			// change order of buttons in order vectors +			updateButtonsOrdersAfterDnD(); +		} +	} +	gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); +	mDragStarted = false; +	mDraggedItem = NULL; +	mLandingTab = NULL; +	mCheckForDrag = false; +} + +void LLBottomTray::draw() +{ +	LLPanel::draw(); +	if (mLandingTab) +	{ +		static S32 w = mImageDragIndication->getWidth(); +		static S32 h = mImageDragIndication->getHeight(); +		LLRect rect = mLandingTab->calcScreenRect(); +		mImageDragIndication->draw(rect.mLeft - w/2, rect.getHeight(), w, h); +	} +} +  bool LLBottomTray::onContextMenuItemEnabled(const LLSD& userdata)  {  	std::string item = userdata.asString(); @@ -1181,6 +1471,9 @@ void LLBottomTray::initResizeStateContainers()  	mButtonsProcessOrder.push_back(RS_BUTTON_WORLD_MAP);  	mButtonsProcessOrder.push_back(RS_BUTTON_MINI_MAP); +	mButtonsOrder.push_back(RS_BUTTON_SPEAK); +	mButtonsOrder.insert(mButtonsOrder.end(), mButtonsProcessOrder.begin(), mButtonsProcessOrder.end()); +  	// init default widths  	// process buttons that can be hidden on resize... diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index bd9d35f209..14a29895f5 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -47,6 +47,30 @@ class LLBottomTrayLite;  extern template class LLBottomTray* LLSingleton<class LLBottomTray>::getInstance();  #endif +/** + * Class for buttons that should have drag'n'drop ability in bottomtray. + * These buttons pass mouse events handling to bottomtray. + */ +class LLBottomtrayButton : public LLButton +{ +public: +	struct Params : public LLInitParam::Block<Params, LLButton::Params> +	{ +		Params(){} +	}; +	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); +	/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); +	/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); + +protected: +	LLBottomtrayButton(const Params& p) +		:	LLButton(p) +	{ + +	} +	friend class LLUICtrlFactory; +}; +  class LLBottomTray   	: public LLSingleton<LLBottomTray>  	, public LLPanel @@ -101,6 +125,18 @@ public:  	 */  	LLIMChiclet* createIMChiclet(const LLUUID& session_id); +	// Below are methods that were introduced or overriden in bottomtray to handle drag'n'drop + +	virtual void draw(); + +	/** +	 * These three methods handle drag'n'drop, they may be called directly from child buttons. +	 */ +	/*virtual*/ BOOL	handleHover(S32 x, S32 y, MASK mask); +	void onDraggableButtonMouseDown(LLUICtrl* button, S32 x, S32 y, MASK mask); +	void onDraggableButtonMouseUp(LLUICtrl* button, S32 x, S32 y, MASK mask); + +  private:  	typedef enum e_resize_status_type  	{ @@ -134,6 +170,29 @@ private:  									| RS_BUTTON_BUILD | RS_BUTTON_SEARCH | RS_BUTTON_WORLD_MAP | RS_BUTTON_MINI_MAP  	}EResizeState; +	// Below are three methods that were introduced to handle drag'n'drop + +	/** +	 * finds a panel under the specified LOCAL point +	 */ +	LLPanel* findChildPanelByLocalCoords(S32 x, S32 y); + +	/** +	 * checks whether the cursor is over an area where the dragged button may be dropped +	 */ +	bool isCursorOverDraggableArea(S32 x, S32 y); + +	/** +	 * Updates process(shrink/show/hide) order of buttons and order in which they'll be stored for further save/load. +	 * It is called when dragged button is dropped +	 */ +	void updateButtonsOrdersAfterDnD(); + +	// saves order of buttons to file on disk +	void saveButtonsOrder(); +	// reads order of buttons from file on disk +	void loadButtonsOrder(); +  	/**  	 * Updates child controls size and visibility when it is necessary to reduce total width.  	 * @@ -360,6 +419,13 @@ private:  	 * Contains order in which child buttons should be processed in show/hide, extend/shrink methods.  	 */  	resize_state_vec_t mButtonsProcessOrder; +	/** +	 * Contains order in which child buttons are shown. +	 * It traces order of all bottomtray buttons that may change place via drag'n'drop and should +	 * save and load it between sessions. mButtonsProcessOrder is not enough for it because it contains only +	 * buttons that may be hidden. +	 */ +	resize_state_vec_t mButtonsOrder;  protected: @@ -381,6 +447,38 @@ protected:  	LLButton*			mMovementButton;  	LLBottomTrayLite*   mBottomTrayLite;  	bool                mIsInLiteMode; + +	// Drag'n'Drop + +	/** +	 * Is true if mouse down happened on draggable button. +	 * Set false whether on drag start or on mouse up. +	 */ +	bool mCheckForDrag; +	/** +	 * These two variables hold corrdinates of mouse down on draggable button. +	 * They are used to compare with current coordinates of cursor and determine whether drag'n'drop should start. +	 */ +	S32 mStartX; +	S32 mStartY; +	/** +	 * True if drag'n'drop is happening. +	 */ +	bool mDragStarted; + +	/** +	 * Pointer to panel which is currently dragged (though it seems to user that button is dragged, +	 * we are changing place of layout panel). +	 */ +	LLPanel* mDraggedItem; +	/** +	 * Panel before which the dragged button will be inserted. +	 */ +	LLPanel* mLandingTab; +	/** +	 * Image used to show position where dragged button will be dropped. +	 */ +	LLUIImage* mImageDragIndication;  };  #endif // LL_LLBOTTOMPANEL_H diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp index 967db21244..7d82ec3a71 100644 --- a/indra/newview/llchatbar.cpp +++ b/indra/newview/llchatbar.cpp @@ -673,11 +673,30 @@ public:  	bool handle(const LLSD& tokens, const LLSD& query_map,  				LLMediaCtrl* web)  	{ -		if (tokens.size() < 2) return false; -		S32 channel = tokens[0].asInteger(); -		std::string mesg = tokens[1].asString(); -		send_chat_from_viewer(mesg, CHAT_TYPE_NORMAL, channel); -		return true; +		bool retval = false; +		// Need at least 2 tokens to have a valid message. +		if (tokens.size() < 2)  +		{ +			retval = false; +		} +		else +		{ +			S32 channel = tokens[0].asInteger(); +			// VWR-19499 Restrict function to chat channels greater than 0. +			if ((channel > 0) && (channel < 2147483647)) +			{ +				retval = true; +				// Say mesg on channel +				std::string mesg = tokens[1].asString(); +				send_chat_from_viewer(mesg, CHAT_TYPE_NORMAL, channel); +			} +			else +			{ +				retval = false; +				// Tell us this is an unsupported SLurl. +			} +		} +		return retval;  	}  }; diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index 4f9845d704..a8e4a759b7 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -103,10 +103,10 @@ LLGestureComboList::LLGestureComboList(const LLGestureComboList::Params& p)  	, mViewAllItemIndex(0)  	, mGetMoreItemIndex(0)  { -	LLButton::Params button_params = p.combo_button; +	LLBottomtrayButton::Params button_params = p.combo_button;  	button_params.follows.flags(FOLLOWS_LEFT|FOLLOWS_BOTTOM|FOLLOWS_RIGHT); -	mButton = LLUICtrlFactory::create<LLButton>(button_params); +	mButton = LLUICtrlFactory::create<LLBottomtrayButton>(button_params);  	mButton->reshape(getRect().getWidth(),getRect().getHeight());  	mButton->setCommitCallback(boost::bind(&LLGestureComboList::onButtonCommit, this)); @@ -865,14 +865,30 @@ public:  	bool handle(const LLSD& tokens, const LLSD& query_map,  				LLMediaCtrl* web)  	{ -		if (tokens.size() < 2) return false; -		S32 channel = tokens[0].asInteger(); - -		// Send unescaped message, see EXT-6353. -		std::string unescaped_mesg (LLURI::unescape(tokens[1].asString())); - -		send_chat_from_viewer(unescaped_mesg, CHAT_TYPE_NORMAL, channel); -		return true; +		bool retval = false; +		// Need at least 2 tokens to have a valid message. +		if (tokens.size() < 2) +		{ +			retval = false; +		} +		else +		{ +			S32 channel = tokens[0].asInteger(); +			// VWR-19499 Restrict function to chat channels greater than 0. +			if ((channel > 0) && (channel < 2147483647)) +			{ +				retval = true; +				// Send unescaped message, see EXT-6353. +				std::string unescaped_mesg (LLURI::unescape(tokens[1].asString())); +				send_chat_from_viewer(unescaped_mesg, CHAT_TYPE_NORMAL, channel); +			} +			else +			{ +				retval = false; +				// Tell us this is an unsupported SLurl. +			} +		} +		return retval;  	}  }; diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index 955a665624..cc905736fd 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -34,6 +34,7 @@  #include "llvoiceclient.h"  #include "lloutputmonitorctrl.h"  #include "llspeakers.h" +#include "llbottomtray.h"  class LLGestureComboList @@ -43,7 +44,7 @@ class LLGestureComboList  public:  	struct Params :	public LLInitParam::Block<Params, LLUICtrl::Params>  	{ -		Optional<LLButton::Params>			combo_button; +		Optional<LLBottomtrayButton::Params>			combo_button;  		Optional<LLScrollListCtrl::Params>	combo_list;  		Params(); diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 85b6e0dec4..7af3ad9896 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -111,7 +111,11 @@ public:  	};  protected:  	LLSideTrayTab(const Params& params); -	 + +	void			dock(); +	void			undock(LLFloater* floater_tab); + +	LLSideTray*		getSideTray();  public:  	virtual ~LLSideTrayTab(); @@ -176,6 +180,7 @@ BOOL LLSideTrayTab::postBuild()  	title_panel->getChild<LLTextBox>(TAB_PANEL_CAPTION_TITLE_BOX)->setValue(mTabTitle); +	getChild<LLButton>("undock")->setCommitCallback(boost::bind(&LLSideTrayTab::toggleTabDocked, this));  	getChild<LLButton>("dock")->setCommitCallback(boost::bind(&LLSideTrayTab::toggleTabDocked, this));  	return true; @@ -210,63 +215,130 @@ void	LLSideTrayTab::onOpen		(const LLSD& key)  		panel->onOpen(key);  } +// Attempts to get the existing side tray instance. +// Needed to avoid recursive calls of LLSideTray::getInstance(). +LLSideTray* LLSideTrayTab::getSideTray() +{ +	// First, check if the side tray is our parent (i.e. we're attached). +	LLSideTray* side_tray = dynamic_cast<LLSideTray*>(getParent()); +	if (!side_tray) +	{ +		// Detached? Ok, check if the instance exists at all/ +		if (LLSideTray::instanceCreated()) +		{ +			side_tray = LLSideTray::getInstance(); +		} +		else +		{ +			llerrs << "No safe way to get the side tray instance" << llendl; +		} +	} + +	return side_tray; +} +  void LLSideTrayTab::toggleTabDocked()  { -	LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", LLSD().with("name", mTabTitle)); +	std::string tab_name = getName(); + +	LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab_name);  	if (!floater_tab) return; -	LLFloaterReg::toggleInstance("side_bar_tab", LLSD().with("name", mTabTitle)); +	LLFloaterReg::toggleInstance("side_bar_tab", tab_name); -	LLSideTray* side_tray = LLSideTray::getInstance(); +	bool docking = !LLFloater::isShown(floater_tab); -	if (LLFloater::isShown(floater_tab)) +	// Hide the "Tear Off" button when a tab gets undocked +	// and show "Dock" button instead. +	getChild<LLButton>("undock")->setVisible(docking); +	getChild<LLButton>("dock")->setVisible(!docking); + +	if (docking)  	{ -		// Remove the tab from Side Tray's tabs list. -		// We have to do it despite removing the tab from Side Tray's child view tree -		// by addChild(). Otherwise the tab could be accessed by the pointer in LLSideTray::mTabs. -		if (!side_tray->removeTab(this)) -		{ -			llwarns << "Failed to remove tab " << getName() << " from side tray" << llendl; -			return; -		} +		dock(); +	} +	else +	{ +		undock(floater_tab); +	} +} -		setVisible(true); // *HACK: restore visibility after being hidden by LLSideTray::selectTabByName(). -		floater_tab->addChild(this); -		floater_tab->setTitle(mTabTitle); +void LLSideTrayTab::dock() +{ +	LLSideTray* side_tray = getSideTray(); +	if (!side_tray) return; -		LLRect rect = side_tray->getLocalRect(); -		floater_tab->reshape(rect.getWidth(), rect.getHeight()); +	if (!side_tray->addTab(this)) +	{ +		llwarns << "Failed to add tab " << getName() << " to side tray" << llendl; +		return; +	} -		rect.mTop -= floater_tab->getHeaderHeight(); -		setRect(rect); -		reshape(rect.getWidth(), rect.getHeight()); +	setRect(side_tray->getLocalRect()); +	reshape(getRect().getWidth(), getRect().getHeight()); -		// Set FOLLOWS_ALL flag for the tab to follow floater dimensions upon resizing. -		setFollowsAll(); +	// Select the re-docked tab. +	side_tray->selectTabByName(getName()); -		if (!side_tray->getCollapsed()) -		{ -			side_tray->collapseSideBar(); -		} +	if (side_tray->getCollapsed()) +	{ +		side_tray->expandSideBar(); +	} +} + +void LLSideTrayTab::undock(LLFloater* floater_tab) +{ +	LLSideTray* side_tray = getSideTray(); +	if (!side_tray) return; + +	// Remove the tab from Side Tray's tabs list. +	// We have to do it despite removing the tab from Side Tray's child view tree +	// by addChild(). Otherwise the tab could be accessed by the pointer in LLSideTray::mTabs. +	if (!side_tray->removeTab(this)) +	{ +		llwarns << "Failed to remove tab " << getName() << " from side tray" << llendl; +		return; +	} + +	setVisible(true); // *HACK: restore visibility after being hidden by LLSideTray::selectTabByName(). +	floater_tab->addChild(this); +	floater_tab->setTitle(mTabTitle); + +	// Reshape the floater if needed. +	LLRect floater_rect; +	if (floater_tab->hasSavedRect()) +	{ +		// We've got saved rect for the floater, hence no need to reshape it. +		floater_rect = floater_tab->getLocalRect();  	}  	else  	{ -		if (!side_tray->addTab(this)) -		{ -			llwarns << "Failed to add tab " << getName() << " to side tray" << llendl; -			return; -		} +		// Detaching for the first time. Reshape the floater. +		floater_rect = side_tray->getLocalRect(); +		floater_tab->reshape(floater_rect.getWidth(), floater_rect.getHeight()); +	} + +	// Reshape the panel. +	{ +		LLRect panel_rect = floater_rect; +		panel_rect.mTop -= floater_tab->getHeaderHeight(); +		setRect(panel_rect); +		reshape(panel_rect.getWidth(), panel_rect.getHeight()); +	} -		setRect(side_tray->getLocalRect()); -		reshape(getRect().getWidth(), getRect().getHeight()); +	// Set FOLLOWS_ALL flag for the tab to follow floater dimensions upon resizing. +	setFollowsAll(); -		// Select the re-docked tab. -		side_tray->selectTabByName(getName()); +	if (!side_tray->getCollapsed()) +	{ +		side_tray->collapseSideBar(); +	} -		if (side_tray->getCollapsed()) -		{ -			side_tray->expandSideBar(); -		} +	if (side_tray->getActiveTab() != this) +	{ +		// When a tab other then current active tab is detached from Side Tray +		// onOpen() should be called as tab visibility is changed. +		onOpen(LLSD());  	}  } @@ -334,10 +406,9 @@ public:  			tab->toggleTabDocked(); -			LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", LLSD().with("name", tab->getTabTitle())); +			LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab->getName());  			if (!floater_tab) return FALSE; -  			LLRect original_rect = floater_tab->getRect();  			S32 header_snap_y = floater_tab->getHeaderHeight() / 2;  			S32 snap_x = screen_x - original_rect.mLeft - original_rect.getWidth() / 2; @@ -444,6 +515,7 @@ BOOL LLSideTray::postBuild()  			getCollapseSignal().connect(boost::bind(&LLScreenChannelBase::resetPositionAndSize, (*it).channel, _2));  		}  	} +  	return true;  } @@ -451,16 +523,20 @@ void LLSideTray::handleLoginComplete()  {  	//reset tab to "home" tab if it was changesd during login process  	selectTabByName("sidebar_home"); + +	detachTabs();  }  LLSideTrayTab* LLSideTray::getTab(const std::string& name)  { -	return getChild<LLSideTrayTab>(name,false); +	return findChild<LLSideTrayTab>(name,false);  }  bool LLSideTray::isTabAttached(const std::string& name)  {  	LLSideTrayTab* tab = getTab(name); +	if (!tab) return false; +  	return std::find(mTabs.begin(), mTabs.end(), tab) != mTabs.end();  } @@ -485,6 +561,54 @@ void LLSideTray::toggleTabButton(LLSideTrayTab* tab)  	}  } +LLPanel* LLSideTray::openChildPanel(LLSideTrayTab* tab, const std::string& panel_name, const LLSD& params) +{ +	LLView* view = tab->findChildView(panel_name, true); +	if (!view) return NULL; + +	std::string tab_name = tab->getName(); + +	// Select tab and expand Side Tray only when a tab is attached. +	if (isTabAttached(tab_name)) +	{ +		selectTabByName(tab_name); +		if (mCollapsed) +			expandSideBar(); +	} +	else +	{ +		LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab_name); +		if (!floater_tab) return NULL; + +		// Restore the floater if it was minimized. +		if (floater_tab->isMinimized()) +		{ +			floater_tab->setMinimized(FALSE); +		} + +		// Send the floater to the front. +		floater_tab->setFrontmost(); +	} + +	LLSideTrayPanelContainer* container = dynamic_cast<LLSideTrayPanelContainer*>(view->getParent()); +	if (container) +	{ +		LLSD new_params = params; +		new_params[LLSideTrayPanelContainer::PARAM_SUB_PANEL_NAME] = panel_name; +		container->onOpen(new_params); + +		return container->getCurrentPanel(); +	} + +	LLPanel* panel = dynamic_cast<LLPanel*>(view); +	if (panel) +	{ +		panel->onOpen(params); +	} + +	return panel; +} +  bool LLSideTray::selectTabByIndex(size_t index)  {  	if(index>=mTabs.size()) @@ -497,6 +621,7 @@ bool LLSideTray::selectTabByIndex(size_t index)  bool LLSideTray::selectTabByName	(const std::string& name)  {  	LLSideTrayTab* new_tab = getTab(name); +	if (!new_tab) return false;  	// Bail out if already selected.  	if (new_tab == mActiveTab) @@ -623,6 +748,9 @@ bool LLSideTray::removeTab(LLSideTrayTab* tab)  	removeChild(tab);  	mTabs.erase(tab_it); +	// Add the tab to detached tabs list. +	mDetachedTabs.push_back(tab); +  	// Remove the button from the buttons panel so that it isn't drawn anymore.  	mButtonsPanel->removeChild(btn); @@ -684,6 +812,13 @@ bool LLSideTray::addTab(LLSideTrayTab* tab)  	// Arrange tabs after inserting a new one.  	arrange(); +	// Remove the tab from the list of detached tabs. +	child_vector_iter_t tab_it = std::find(mDetachedTabs.begin(), mDetachedTabs.end(), tab); +	if (tab_it != mDetachedTabs.end()) +	{ +		mDetachedTabs.erase(tab_it); +	} +  	return true;  } @@ -733,8 +868,10 @@ void		LLSideTray::processTriState ()  void		LLSideTray::onTabButtonClick(string name)  { -	LLSideTrayTab* side_bar = getTab(name); -	if(side_bar == mActiveTab) +	LLSideTrayTab* tab = getTab(name); +	if (!tab) return; + +	if(tab == mActiveTab)  	{  		processTriState ();  		return; @@ -827,6 +964,28 @@ void LLSideTray::arrange()  	mButtonsPanel->setVisible(hasTabs());  } +// Detach those tabs that were detached when the viewer exited last time. +void LLSideTray::detachTabs() +{ +	// copy mTabs because LLSideTray::toggleTabDocked() modifies it. +	child_vector_t tabs = mTabs; + +	for (child_vector_const_iter_t it = tabs.begin(); it != tabs.end(); ++it) +	{ +		LLSideTrayTab* tab = *it; + +		std::string floater_ctrl_name = LLFloater::getControlName("side_bar_tab", LLSD(tab->getName())); +		std::string vis_ctrl_name = LLFloaterReg::getVisibilityControlName(floater_ctrl_name); +		if (!LLUI::sSettingGroups["floater"]->controlExists(vis_ctrl_name)) continue; + +		bool is_visible = LLUI::sSettingGroups["floater"]->getBOOL(vis_ctrl_name); +		if (!is_visible) continue; + +		llassert(isTabAttached(tab->getName())); +		tab->toggleTabDocked(); +	} +} +  void LLSideTray::collapseSideBar()  {  	mCollapsed = true; @@ -919,35 +1078,19 @@ void LLSideTray::reshape(S32 width, S32 height, BOOL called_from_parent)   */  LLPanel*	LLSideTray::showPanel		(const std::string& panel_name, const LLSD& params)  { -	//arrange tabs +	// Look up the tab in the list of detached tabs.  	child_vector_const_iter_t child_it; -	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it) +	for ( child_it = mDetachedTabs.begin(); child_it != mDetachedTabs.end(); ++child_it)  	{ -		LLView* view = (*child_it)->findChildView(panel_name,true); -		if(view) -		{ -			selectTabByName	((*child_it)->getName()); -			if(mCollapsed) -				expandSideBar(); - -			LLSideTrayPanelContainer* container = dynamic_cast<LLSideTrayPanelContainer*>(view->getParent()); -			if(container) -			{ -				LLSD new_params = params; -				new_params[LLSideTrayPanelContainer::PARAM_SUB_PANEL_NAME] = panel_name; -				container->onOpen(new_params); - -				return container->getCurrentPanel(); -			} - -			LLPanel* panel = dynamic_cast<LLPanel*>(view); -			if(panel) -			{ -				panel->onOpen(params); -			} +		LLPanel* panel = openChildPanel(*child_it, panel_name, params); +		if (panel) return panel; +	} -			return panel; -		} +	// Look up the tab in the list of attached tabs. +	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it) +	{ +		LLPanel* panel = openChildPanel(*child_it, panel_name, params); +		if (panel) return panel;  	}  	return NULL;  } @@ -957,7 +1100,9 @@ void LLSideTray::togglePanel(LLPanel* &sub_panel, const std::string& panel_name,  	if(!sub_panel)  		return; -	if (sub_panel->isInVisibleChain()) +	// If a panel is visible and attached to Side Tray (has LLSideTray among its ancestors) +	// it should be toggled off by collapsing Side Tray. +	if (sub_panel->isInVisibleChain() && sub_panel->hasAncestor(this))  	{  		LLSideTray::getInstance()->collapseSideBar();  	} @@ -1001,6 +1146,17 @@ LLPanel *findChildPanel(LLPanel *panel, const std::string& name, bool recurse)  LLPanel* LLSideTray::getPanel(const std::string& panel_name)  { +	// Look up the panel in the list of detached tabs. +	for ( child_vector_const_iter_t child_it = mDetachedTabs.begin(); child_it != mDetachedTabs.end(); ++child_it) +	{ +		LLPanel *panel = findChildPanel(*child_it,panel_name,true); +		if(panel) +		{ +			return panel; +		} +	} + +	// Look up the panel in the list of attached tabs.  	for ( child_vector_const_iter_t child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)  	{  		LLPanel *panel = findChildPanel(*child_it,panel_name,true); diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index f0cc2c1146..248def8e3d 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -173,10 +173,13 @@ protected:  	LLButton*	createButton	(const std::string& name,const std::string& image,const std::string& tooltip,  									LLUICtrl::commit_callback_t callback);  	void		arrange			(); +	void		detachTabs		();  	void		reflectCollapseChange();  	void		toggleTabButton	(LLSideTrayTab* tab); +	LLPanel*	openChildPanel	(LLSideTrayTab* tab, const std::string& panel_name, const LLSD& params); +  private:  	// Implementation of LLDestroyClass<LLSideTray>  	static void destroyClass() @@ -187,15 +190,11 @@ private:  	}  private: - -	typedef std::pair<LLButton*, LLSideTrayTab*> detached_tab_t; -	typedef std::map<std::string, detached_tab_t> detached_tab_map_t; -  	LLPanel*						mButtonsPanel;  	typedef std::map<std::string,LLButton*> button_map_t;  	button_map_t					mTabButtons;  	child_vector_t					mTabs; -	detached_tab_map_t				mDetachedTabs; +	child_vector_t					mDetachedTabs;  	tab_order_vector_t				mOriginalTabOrder;  	LLSideTrayTab*					mActiveTab;	 diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp index b8838346d0..3dce66f394 100644 --- a/indra/newview/llspeakbutton.cpp +++ b/indra/newview/llspeakbutton.cpp @@ -37,6 +37,8 @@  #include "llspeakbutton.h" +#include "llbottomtray.h" +  static LLDefaultChildRegistry::Register<LLSpeakButton> t1("talk_button");  ////////////////////////////////////////////////////////////////////////// @@ -67,7 +69,7 @@ void LLSpeakButton::setSpeakBtnEnabled(bool enabled)  }  void LLSpeakButton::setFlyoutBtnEnabled(bool enabled)  { -	LLButton* show_btn = getChild<LLButton>("speak_flyout_btn"); +	LLButton* show_btn = getChild<LLBottomtrayButton>("speak_flyout_btn");  	show_btn->setEnabled(enabled);  } @@ -96,9 +98,9 @@ LLSpeakButton::LLSpeakButton(const Params& p)  	mSpeakBtn->setMouseUpCallback(boost::bind(&LLSpeakButton::onMouseUp_SpeakBtn, this));  	mSpeakBtn->setToggleState(FALSE); -	LLButton::Params show_params = p.show_button; +	LLBottomtrayButton::Params show_params = p.show_button;  	show_params.rect(show_rect); -	mShowBtn = LLUICtrlFactory::create<LLButton>(show_params); +	mShowBtn = LLUICtrlFactory::create<LLBottomtrayButton>(show_params);  	addChild(mShowBtn);  	LLTransientFloaterMgr::getInstance()->addControlView(mShowBtn); diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h index ec1d07b633..2fdf80c1f2 100644 --- a/indra/newview/llspeakbutton.h +++ b/indra/newview/llspeakbutton.h @@ -33,6 +33,7 @@  class LLCallFloater;  class LLButton;  class LLOutputMonitorCtrl; +class LLBottomtrayButton;  /*   * Button displaying voice chat status. Displays voice chat options when @@ -44,10 +45,8 @@ public:  	struct Params :	public LLInitParam::Block<Params, LLUICtrl::Params>  	{ -		Optional<LLButton::Params> -			speak_button, -			show_button; - +		Optional<LLButton::Params> speak_button; +		Optional<LLBottomtrayButton::Params> show_button;  		Optional<LLOutputMonitorCtrl::Params> monitor;  		Params(); @@ -86,7 +85,7 @@ protected:  private:  	LLButton*	mSpeakBtn; -	LLButton*	mShowBtn; +	LLBottomtrayButton*	mShowBtn;  	LLHandle<LLFloater> mPrivateCallPanel;  	LLOutputMonitorCtrl* mOutputMonitor;  }; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 13db913f60..556451e390 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -156,6 +156,7 @@  #include "lltrans.h"  #include "lluictrlfactory.h"  #include "llurldispatcher.h"		// SLURL from other app instance +#include "llversioninfo.h"  #include "llvieweraudio.h"  #include "llviewercamera.h"  #include "llviewergesture.h" @@ -1932,6 +1933,11 @@ void LLViewerWindow::setMenuBackgroundColor(bool god_mode, bool dev_grid)      LLSD args;      LLColor4 new_bg_color; +	// no l10n problem because channel is always an english string +	std::string channel = LLVersionInfo::getChannel(); +	bool isProject = (channel.find("Project") != std::string::npos); +	 +	// god more important than project, proj more important than grid      if(god_mode && LLGridManager::getInstance()->isInProductionGrid())      {          new_bg_color = LLUIColorTable::instance().getColor( "MenuBarGodBgColor" ); @@ -1940,6 +1946,10 @@ void LLViewerWindow::setMenuBackgroundColor(bool god_mode, bool dev_grid)      {          new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionGodBgColor" );      } +	else if (!god_mode && isProject) +	{ +		new_bg_color = LLUIColorTable::instance().getColor( "MenuBarProjectBgColor" ); +    }      else if(!god_mode && !LLGridManager::getInstance()->isInProductionGrid())      {          new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionBgColor" ); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 9af1198df1..f985ee0c15 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2320,7 +2320,6 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)  	idleUpdateNameTag( root_pos_last );  	idleUpdateRenderCost(); -	idleUpdateTractorBeam();  	return TRUE;  } @@ -3075,14 +3074,6 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)  	}  } -//-------------------------------------------------------------------- -// draw tractor beam when editing objects -//-------------------------------------------------------------------- -// virtual -void LLVOAvatar::idleUpdateTractorBeam() -{ -} -  void LLVOAvatar::idleUpdateBelowWater()  {  	F32 avatar_height = (F32)(getPositionGlobal().mdV[VZ]); diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 6d9424c8be..d51b8701af 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -208,7 +208,6 @@ public:  	void 			idleUpdateWindEffect();  	void 			idleUpdateNameTag(const LLVector3& root_pos_last);  	void 			idleUpdateRenderCost(); -	void 			idleUpdateTractorBeam();  	void 			idleUpdateBelowWater();  	//-------------------------------------------------------------------- diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 1a5d7289f4..a231afad3f 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -635,6 +635,7 @@ BOOL LLVOAvatarSelf::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)  		return TRUE;  	}  	LLVOAvatar::idleUpdate(agent, world, time); +	idleUpdateTractorBeam();  	return TRUE;  } diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 5ba1fc9b21..b489294f38 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -86,6 +86,9 @@  	<color  	name="LtOrange"  	value="1 .85 .73 1" /> +	<color +	name="MdBlue" +	value=".07 .38 .51 1" />    <!-- This color name makes potentially unused colors show up bright purple.    Leave this here until all Unused? are removed below, otherwise @@ -749,4 +752,7 @@      <color       name="ChatTimestampColor"       reference="White" /> +    <color +     name="MenuBarProjectBgColor" +     reference="MdBlue" />  </colors> diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png Binary files differnew file mode 100644 index 0000000000..50c01062a5 --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png Binary files differnew file mode 100644 index 0000000000..bf2065cd37 --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png Binary files differnew file mode 100644 index 0000000000..8b48258142 --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png Binary files differnew file mode 100644 index 0000000000..09efe779fe --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 082b37d80b..ce67cf0083 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -428,6 +428,12 @@ 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="Sidebar_Icon_Dock_Foreground" file_name="taskpanel/Sidebar_Icon_Dock_Foreground.png" preload="false" /> +  <texture name="Sidebar_Icon_Dock_Press" file_name="taskpanel/Sidebar_Icon_Dock_Press.png" preload="false" /> +  <texture name="Sidebar_Icon_Undock_Foreground" file_name="taskpanel/Sidebar_Icon_Undock_Foreground.png" preload="false" /> +  <texture name="Sidebar_Icon_Undock_Press" file_name="taskpanel/Sidebar_Icon_Undock_Press.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" /> diff --git a/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml b/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml index 1466c2d2a5..bf0913fde7 100644 --- a/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml +++ b/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml @@ -1,5 +1,9 @@  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>  <floater   can_close="false" - can_resize="true"> + can_resize="true" + min_width="150" + save_rect="true" + save_visibility="true" + >  </floater> diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml index 876ff9961b..f58715be56 100644 --- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml @@ -79,6 +79,7 @@       left_pad="3"       right="-53"       name="info_btn" +     tab_stop="false"       top_delta="-2"       width="16" />      <button @@ -89,6 +90,7 @@       left_pad="5"       right="-28"       name="profile_btn" +     tab_stop="false"       tool_tip="View profile"       top_delta="-2"       width="20" /> diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 4b622691b3..cdd596222d 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -12,6 +12,9 @@   top="28"   width="1310">      <string +     name="DragIndicationImageName" +     value="Accordion_ArrowOpened_Off" /> +    <string       name="SpeakBtnToolTip"       value="Turns microphone on/off" />      <string @@ -135,7 +138,7 @@           name="movement_panel"           user_resize="false"           width="83"> -            <button +            <bottomtray_button               follows="left|right"               height="23"               image_pressed="PushButton_Press" @@ -152,7 +155,8 @@                  <init_callback                   function="Button.SetDockableFloaterToggle"                   parameter="moveview" /> -            </button> +            </bottomtray_button> +          </layout_panel>          <layout_panel           auto_resize="false" @@ -165,7 +169,7 @@           name="cam_panel"           user_resize="false"           width="83"> -            <button +            <bottomtray_button               follows="left|right"               height="23"               image_pressed="PushButton_Press" @@ -183,7 +187,7 @@                  <init_callback                   function="Button.SetDockableFloaterToggle"                   parameter="camera" /> -            </button> +            </bottomtray_button>          </layout_panel>          <layout_panel           auto_resize="false" @@ -195,7 +199,7 @@           name="snapshot_panel"           user_resize="false"           width="39"> -            <button +            <bottomtray_button               follows="left|right"               height="23"               image_overlay="Snapshot_Off" @@ -212,7 +216,7 @@                  <init_callback                   function="Button.SetFloaterToggle"                   parameter="snapshot" /> -            </button> +            </bottomtray_button>          </layout_panel>          <layout_panel           auto_resize="false" @@ -228,7 +232,7 @@  <!--*FIX: Build Floater is not opened with default registration. Will be fixed soon.  Disabled for now.  --> -            <button +            <bottomtray_button               follows="left|right"               height="23"               image_pressed="PushButton_Press" @@ -246,7 +250,7 @@ Disabled for now.                  <commit_callback                   function="Build.Toggle"                   parameter="build" /> -            </button> +            </bottomtray_button>          </layout_panel>          <layout_panel           auto_resize="false" @@ -259,7 +263,7 @@ Disabled for now.           name="search_btn_panel"           user_resize="false"           width="83"> -            <button +            <bottomtray_button               follows="left|right"               height="23"               image_pressed="PushButton_Press" @@ -277,7 +281,7 @@ Disabled for now.                  <init_callback                   function="Button.SetFloaterToggle"                   parameter="search" /> -            </button> +            </bottomtray_button>          </layout_panel>          <layout_panel           auto_resize="false" @@ -290,7 +294,7 @@ Disabled for now.           name="world_map_btn_panel"           user_resize="false"           width="83"> -            <button +            <bottomtray_button               follows="left|right"               height="23"               image_pressed="PushButton_Press" @@ -308,7 +312,7 @@ Disabled for now.                  <init_callback                   function="Button.SetFloaterToggle"                   parameter="world_map" /> -            </button> +            </bottomtray_button>          </layout_panel>          <layout_panel           auto_resize="false" @@ -321,7 +325,7 @@ Disabled for now.           name="mini_map_btn_panel"           user_resize="false"           width="83"> -            <button +            <bottomtray_button               follows="left|right"               height="23"               image_pressed="PushButton_Press" @@ -339,7 +343,7 @@ Disabled for now.                  <init_callback                   function="Button.SetFloaterToggle"                   parameter="mini_map" /> -            </button> +            </bottomtray_button>          </layout_panel>          <layout_panel           follows="left|right" diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml index 268cb4e5f9..0fb7691ee7 100644 --- a/indra/newview/skins/default/xui/en/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml @@ -39,7 +39,7 @@      Disabled   </panel.string>      <button -     follows="top|right" +     follows="top|left"       height="24"       image_hover_unselected="BackButton_Over"       image_pressed="BackButton_Press" @@ -398,30 +398,74 @@       top_pad="5"       left="9"       name="buttons"> -        <button -         follows="bottom|left" -         height="23" -         label="Teleport" -         layout="topleft" -         left="0" -         name="teleport_btn" -         top="0" -         width="101" /> -        <button -         follows="bottom|left" -         height="23" -         label="Map" -         layout="topleft" -         left_pad="3" -         name="show_on_map_btn" -         width="100" /> -        <button -         follows="bottom|left" -         height="23" -         label="Edit" -         layout="topleft" -         name="edit_btn" -         left_pad="3" -         width="101" /> +     	 +     	<layout_stack +		  follows="bottom|left|right" +		  height="23" +		  layout="topleft" +		  name="layout_stack1" +		  left="0" +		  orientation="horizontal" +		  top_pad="0" +		  width="309"> +		   +		  <layout_panel +			  follows="bottom|left|right" +			  height="23" +			  layout="bottomleft" +			  left="0" +			  name="layout_panel1" +		      user_resize="false"  +		      auto_resize="true" +			  width="101"> +			  <button +		         follows="bottom|left|right" +		         height="23" +		         label="Teleport" +		         layout="topleft" +		         left="0" +		         name="teleport_btn" +		         top="0" +		         width="101" />	 +		  </layout_panel> +		   +		  <layout_panel +			  follows="bottom|left|right" +			  height="23" +			  layout="bottomleft" +			  left_pad="3" +			  name="show_on_map_btn_lp" +		      user_resize="false"  +		      auto_resize="true" +			  width="100"> +			  <button +		         follows="bottom|left|right" +		         height="23" +		         label="Map" +		         layout="topleft" +		         name="show_on_map_btn" +		         top="0" +		         width="100" /> +		  </layout_panel>	   +		   +		  <layout_panel +			  follows="bottom|left|right" +			  height="23" +			  layout="bottomleft" +			  left_pad="3" +			  name="edit_btn_lp" +		      user_resize="false"  +		      auto_resize="true" +			  width="101"> +			  <button +		         follows="bottom|left|right" +		         height="23" +		         label="Edit" +		         layout="topleft" +		         name="edit_btn" +		         top="0" +		         width="101" /> +		  </layout_panel> +	   </layout_stack>      </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml index a5c74b08e7..5934956559 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml @@ -23,7 +23,7 @@    Save   </string>    <button -     follows="top|right" +     follows="top|left"       height="24"       image_hover_unselected="BackButton_Over"       image_pressed="BackButton_Press" @@ -119,7 +119,7 @@           layout="topleft"           left="10"           top_pad="2" -         max_length="63" +         max_length="30"           name="classified_name"           prevalidate_callback="ascii"           text_color="black" @@ -147,7 +147,7 @@           layout="topleft"           left="10"           top_pad="2" -         max_length="1023" +         max_length="64"           name="classified_desc"           text_color="black"           word_wrap="true" /> @@ -301,22 +301,56 @@       name="bottom_panel"       top_pad="5"       width="303"> -        <button -         follows="bottom|left" -         height="23" -         label="[LABEL]" -         layout="topleft" -         name="save_changes_btn" -         left="0" -         top="0" -         width="152" /> -        <button -         follows="bottom|left" -         height="23" -         label="Cancel" -         layout="topleft" -         name="cancel_btn" -         left_pad="3" -         width="153" /> +      +         <layout_stack +		  follows="bottom|left|right" +		  height="23" +		  layout="topleft" +		  name="bottom_panel_ls" +		  left="1" +		  orientation="horizontal" +		  top_pad="0" +		  width="309"> +		   +		  <layout_panel +			  follows="bottom|left|right" +			  height="23" +			  layout="bottomleft" +			  left="0" +			  name="save_changes_btn_lp" +		      user_resize="false"  +		      auto_resize="true" +			  width="156"> +			  <button +		         follows="bottom|left|right" +		         height="23" +		         label="[LABEL]" +		         layout="topleft" +		         name="save_changes_btn" +		         left="1" +		         top="0" +		         width="155" />	 +		  </layout_panel> +		   +		  <layout_panel +			  follows="bottom|left|right" +			  height="23" +			  layout="bottomleft" +			  left_pad="3" +			  name="show_on_map_btn_lp" +		      user_resize="false"  +		      auto_resize="true" +			  width="157"> +			  <button +		         follows="bottom|left|right" +		         height="23" +		         label="Cancel" +		         layout="topleft" +		         name="cancel_btn" +		         left="1" +		         top="0" +		         width="156" /> +		  </layout_panel> +	   </layout_stack>      </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml index f50e182313..c4b831b71c 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml @@ -17,7 +17,7 @@      (will update after save)   </panel.string>    <button -     follows="top|right" +     follows="top|left"       height="24"       image_hover_unselected="BackButton_Over"       image_pressed="BackButton_Press" @@ -183,22 +183,57 @@       name="bottom_panel"       top_pad="5"       width="303"> -        <button -         follows="bottom|left" -         height="23" -         label="Save Pick" -         layout="topleft" -         name="save_changes_btn" -         left="0" -         top="0" -         width="152" /> -        <button -         follows="bottom|left" -         height="23" -         label="Cancel" -         layout="topleft" -         name="cancel_btn" -         left_pad="3" -        width="153" /> +      +     	 <layout_stack +		  follows="bottom|left|right" +		  height="23" +		  layout="topleft" +		  name="layout_stack1" +		  left="2" +		  orientation="horizontal" +		  top_pad="0" +		  width="303"> +		  	  +		  	 <layout_panel +			  follows="bottom|left|right" +			  height="23" +			  layout="topleft" +			  left="0" +			  name="layout_panel1" +		      user_resize="false"  +		      auto_resize="true" +			  width="150"> +		        <button +		         follows="bottom|left|right" +		         height="23" +		         label="Save Pick" +		         layout="topleft" +		         name="save_changes_btn" +		         top="0" +		         left="1" +		         width="149" /> +			  </layout_panel> +			   +			 <layout_panel +			  follows="bottom|left|right" +			  height="23" +			  layout="topleft" +			  left_pad="4" +			  name="layout_panel1" +		      user_resize="false"  +		      auto_resize="true" +			  width="150"> +		        <button +		         follows="bottom|left|right" +		         height="23" +		         label="Cancel" +		         layout="topleft" +		         name="cancel_btn" +		         top="0" +		         left="1" +		        width="149" /> +			  </layout_panel> +	</layout_stack> +		        </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml index 5072ec3a66..8715a3a7a8 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml @@ -325,28 +325,63 @@      </panel>      </scroll_container>      <panel -       follows="bottom|left" +       follows="bottom|left|right"         height="28"         left="0"         name="profile_me_buttons_panel"         top_pad="0"         width="313"> -        <button -         follows="bottom|left" -         height="23" -         label="Save Changes" -         layout="topleft" -         left="8" -         name="save_btn" -         top="5" -         width="152" /> -        <button -         follows="bottom|left" -         height="23" -         label="Cancel" -         layout="topleft" -         left_pad="3" -         name="cancel_btn" -         width="153" /> +        +         <layout_stack +		  follows="bottom|left|right" +		  height="28" +		  layout="topleft" +		  name="bottom_panel_ls" +		  left="7" +		  orientation="horizontal" +		  top_pad="0" +		  width="295"> +		   +		  <layout_panel +			  follows="bottom|left|right" +			  height="23" +			  layout="bottomleft" +			  name="save_changes_btn_lp" +			  top="0" +		      user_resize="false"  +		      auto_resize="true" +			  width="153"> +			<button +		         follows="bottom|left|right" +		         height="23" +		         label="Save Changes" +		         layout="topleft" +		         left="1" +		         name="save_btn" +		         top="0" +		         width="152" /> +		  </layout_panel> +		   +		  <layout_panel +			  follows="bottom|left|right" +			  height="23" +			  layout="bottomleft" +			  left_pad="3" +			  name="show_on_map_btn_lp" +			  top="0" +		      user_resize="false"  +		      auto_resize="true" +			  width="154"> +	        <button +		         follows="bottom|left|right" +		         height="23" +		         label="Cancel" +		         layout="topleft" +		         left="1" +		         name="cancel_btn" +		         top="0" +		         width="153" /> +		  </layout_panel> +	   </layout_stack>      </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml index 9fb777e0e7..95c1c822b8 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -187,7 +187,7 @@           width="150" />          <radio_group           control_name="AvatarSex" -         follows="left|top|right" +         follows="top|right"           height="20"           layout="topleft"           left="210" @@ -217,6 +217,7 @@          </radio_group>          <!--  graphical labels for the radio buttons above -->          <icon +         follows="top|right"           height="16"           image_name="icons/Male.png"           layout="topleft" @@ -226,6 +227,7 @@           top="7"           width="16" />          <icon +         follows="top|right"           height="16"           image_name="icons/Female.png"           layout="topleft" @@ -416,22 +418,55 @@       name="button_panel"       top_pad="6"       width="333"> -        <button -         follows="bottomleft" +        <layout_stack +         follows="bottom|left|right"           height="23" -         label="Save As"           layout="topleft" -         left="8" -         name="save_as_button" +         mouse_opaque="false" +         name="button_panel_ls" +         left="0" +         orientation="horizontal"           top="0" -         width="153" /> -        <button -         follows="bottomleft" -         height="23" -         label="Undo Changes" -         layout="topleft" -         left_pad="7" -         name="revert_button" -         width="152" /> +         width="333">	 +            <layout_panel +             follows="bottom|left|right" +             height="23" +             layout="bottomleft" +             left="0"			 +             mouse_opaque="false" +             name="save_as_btn_lp" +             user_resize="false"  +             auto_resize="true" +             width="154"> +                <button +                 follows="bottom|left|right" +                 height="23" +                 label="Save As" +                 layout="topleft" +                 left="1" +                 name="save_as_button" +                 top="0" +                 width="153" /> +            </layout_panel> +            <layout_panel +             follows="bottom|left|right" +             height="23" +             layout="bottomleft" +             left_pad="3"			 +             mouse_opaque="false" +             name="revert_btn_lp" +             user_resize="false"  +             auto_resize="true" +             width="152"> +                <button +                 follows="bottom|left|right" +                 height="23" +                 label="Undo Changes" +                 layout="topleft" +                 left_pad="7" +                 name="revert_button" +                 width="152" /> +            </layout_panel> +        </layout_stack>      </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml index 4998322d62..eb02d4104b 100644 --- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml @@ -183,51 +183,121 @@ background_visible="true"           left="0"           top_pad="0"     name="button_row" -   follows="bottom|left" +   follows="bottom|left|right"     width="313"> -   <button -    follows="bottom|left" -     height="23" -     image_overlay="Refresh_Off" -     layout="topleft" -     left="0" -     top="5" -     name="btn_refresh" -     width="23" /> -     <button -      follows="bottom|left" -     label="Chat" -     name="btn_chat" -     left_pad="3"      -     height="23" -     width="82" /> -     <button -         follows="bottom|left" -         left_pad="3" -         height="23" -     name="btn_call" -     label="Group Call" -         layout="topleft" -         tool_tip="Call this group" -         width="112" /> -     <button -     follows="bottom|left" -     height="23" -     label="Save" -     label_selected="Save" -     name="btn_apply" -     left_pad="3" -     width="82" /> -    <button -    follows="bottom|left" -                 height="23" -                 layout="topleft" -                 left="0" -                 label="Create Group" -     name="btn_create" -               visible="true" -                 tool_tip="Create a new Group" -                 width="103" /> +    +   		   <layout_stack +	     	follows="bottom|left|right" +			height="25" +			layout="topleft" +			name="button_row_ls" +			left="2" +			orientation="horizontal" +			top_pad="5" +			width="309"> +	 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left="0" +				name="btn_refresh_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="24"> +					<button +				     follows="bottom|left|right" +				     height="23" +				     image_overlay="Refresh_Off" +				     layout="topleft" +				     left="1" +				     top="0" +				     name="btn_refresh" +				     width="23" /> +				</layout_panel> +				 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left_pad="3" +				name="btn_chat_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="83"> +					<button +				     follows="bottom|left|right" +				     label="Chat" +				     name="btn_chat" +				     left="1"      +				     height="23" +				     top="0" +				     width="82" />		 +				</layout_panel> +				 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left_pad="3" +				name="call_btn_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="113"> +					<button +			         follows="bottom|left|right" +			         left="1" +			         height="23" +				     name="btn_call" +				     label="Group Call" +			         layout="topleft" +			         tool_tip="Call this group" +			         top="0" +			         width="112" />		 +				</layout_panel> +				 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left_pad="3" +				name="btn_apply_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="83"> +					<button +				     follows="bottom|left|right" +				     height="23" +				     label="Save" +				     label_selected="Save" +				     name="btn_apply" +				     left="1" +				     top="0" +				     width="82" /> +				</layout_panel> +				 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left_pad="3" +				name="btn_create_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="104"> +					<button +    				 follows="bottom|left|right" +	                 height="23" +	                 layout="topleft" +	                 left="1" +	                 top="0" +	                 label="Create Group" +     				 name="btn_create" +               		 visible="true" +                 	 tool_tip="Create a new Group" +                 	 width="103" />	 +				</layout_panel> +		</layout_stack>     <!--<button       left_pad="3"       height="23" diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_group_list_item.xml index ab34cbf20e..0b84ac03c5 100644 --- a/indra/newview/skins/default/xui/en/panel_group_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_group_list_item.xml @@ -55,6 +55,7 @@       left_pad="3"       right="-31"       name="info_btn" +     tab_stop="false"       top_delta="-2"       width="16" />     <!--*TODO: Should only appear on rollover--> @@ -66,6 +67,7 @@       left_pad="5"       right="-3"       name="profile_btn" +     tab_stop="false"       tool_tip="View profile"       top_delta="-2"       width="20" /> diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml index a7e87f2a1e..7e415f45a4 100644 --- a/indra/newview/skins/default/xui/en/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml @@ -97,51 +97,94 @@       left="3"       name="bottom_panel"       width="313"> -        <button -         follows="bottom|left" -         tool_tip="Show additional options" -         height="25" -         image_hover_unselected="Toolbar_Left_Over" -         image_overlay="OptionsMenu_Off" -         image_selected="Toolbar_Left_Selected" -         image_unselected="Toolbar_Left_Off" -         layout="topleft" -         left="0" -         name="options_gear_btn" -         top="1" -         width="31" /> -        <button -         follows="bottom|left" -         height="25" -         image_hover_unselected="Toolbar_Middle_Over" -         image_overlay="AddItem_Off" -         image_selected="Toolbar_Middle_Selected" -         image_unselected="Toolbar_Middle_Off" -         layout="topleft" -         left_pad="1" -         name="add_btn" -         tool_tip="Add new landmark" -         width="31" /> -        <icon -         follows="bottom|left" -         height="25" -         image_name="Toolbar_Middle_Off" -         layout="topleft" -         left_pad="1" -         name="dummy_icon" -         width="209" -         /> -        <dnd_button -         follows="bottom|left" -         height="25" -         image_hover_unselected="Toolbar_Right_Over" -         image_overlay="TrashItem_Off" -         image_selected="Toolbar_Right_Selected" -         image_unselected="Toolbar_Right_Off" -         layout="topleft" -         left_pad="1" -         name="trash_btn" -         tool_tip="Remove selected landmark" -         width="31" /> -    </panel> +     	 +     	  <layout_stack +		   animate="false" +		   border_size="0" +		   follows="left|right|bottom" +		   height="25" +		   layout="topleft" +		   orientation="horizontal" +		   top_pad="1" +		   left="0" +		   name="bottom_panel" +		   width="307"> +		      <layout_panel +		       auto_resize="false" +		       height="25" +		       layout="topleft" +		       name="options_gear_btn_panel" +		       width="32"> +		          <button +		           follows="bottom|left" +		           tool_tip="Show additional options" +		           height="25" +		           image_hover_unselected="Toolbar_Left_Over" +		           image_overlay="OptionsMenu_Off" +		           image_selected="Toolbar_Left_Selected" +		           image_unselected="Toolbar_Left_Off" +		           layout="topleft" +		           left="0" +		           name="options_gear_btn" +		           top="0" +		           width="31" /> +		      </layout_panel> +		      <layout_panel +		       auto_resize="false" +		       height="25" +		       layout="topleft" +		       name="add_btn_panel" +		       width="32"> +		          <button +		           follows="bottom|left" +		           height="25" +		           image_hover_unselected="Toolbar_Middle_Over" +		           image_overlay="AddItem_Off" +		           image_selected="Toolbar_Middle_Selected" +		           image_unselected="Toolbar_Middle_Off" +		           layout="topleft" +		           left="0" +		           name="add_btn" +		           tool_tip="Add new landmark" +		           top="0" +		           width="31" /> +		      </layout_panel> +		      <layout_panel +		       auto_resize="true" +		       height="25" +		       layout="topleft" +		       name="dummy_panel" +		       width="212"> +		          <icon +		           follows="bottom|left|right" +		           height="25" +		           image_name="Toolbar_Middle_Off" +		           layout="topleft" +		           left="0" +		           top="0" +		           name="dummy_icon" +		           width="211" /> +		      </layout_panel> +		      <layout_panel +		       auto_resize="false" +		       height="25" +		       layout="topleft" +		       name="trash_btn_panel" +		       width="31"> +		          <dnd_button +		           follows="bottom|left" +		           height="25" +		           image_hover_unselected="Toolbar_Right_Over" +		           image_overlay="TrashItem_Off" +		           image_selected="Toolbar_Right_Selected" +		           image_unselected="Toolbar_Right_Off" +		           left="0" +		           layout="topleft" +		           name="trash_btn" +		           tool_tip="Remove selected landmark" +		           top="0" +		           width="31"/> +		      </layout_panel> +  	</layout_stack> +   </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml index 4629bb9cfe..684d38146a 100644 --- a/indra/newview/skins/default/xui/en/panel_my_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml @@ -392,7 +392,7 @@       height="28"       width="315">          <button -         follows="bottom|right" +         follows="bottom"           height="23"           left="6"  	 top="1" diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml index cff7b51ce8..530e191952 100644 --- a/indra/newview/skins/default/xui/en/panel_notes.xml +++ b/indra/newview/skins/default/xui/en/panel_notes.xml @@ -112,58 +112,125 @@           name="notes_buttons_panel"           auto_resize="false"           width="313"> -       <button -         follows="bottom|left" -         height="23" -         label="Add Friend" -         layout="topleft" -         left="2" -         mouse_opaque="false" -         name="add_friend" -         tool_tip="Offer friendship to the Resident" -         top="5" -         width="80" /> -        <button -         follows="bottom|left" -         height="23" -         label="IM" -         layout="topleft" -         name="im" -         tool_tip="Open instant message session" -         top="5" -         left_pad="3" -         width="45" /> -        <button -         follows="bottom|left" -         height="23" -         label="Call" -         layout="topleft" -         name="call" -         tool_tip="Call this Resident" -         left_pad="3" -         top="5" -         width="46" /> -        <button -         enabled="false" -         follows="bottom|left" -         height="23" -         label="Map" -         layout="topleft" -         name="show_on_map_btn" -         tool_tip="Show the Resident on the map" -         top="5" -         left_pad="3" -         width="45" /> -        <button -         follows="bottom|left" -         height="23" -         label="Teleport" -         layout="topleft" -         name="teleport" -         tool_tip="Offer teleport" -         left_pad="3" -         top="5" -         width="80" /> +          +         <layout_stack +	     	follows="bottom|left|right" +			height="23" +			layout="topleft" +			name="bottom_bar_ls" +			left="2" +			orientation="horizontal" +			top_pad="5" +			width="309"> +	 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left="0" +				name="add_friend_btn_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="118"> +					<button +			         follows="bottom|left|right" +			         height="23" +			         label="Add Friend" +			         layout="topleft" +			         left="1" +			         mouse_opaque="false" +			         name="add_friend" +			         tool_tip="Offer friendship to the Resident" +			         top="0" +			         width="117" />	 +				</layout_panel> +				 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left_pad="3" +				name="im_btn_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="22"> +					<button +			         follows="bottom|left|right" +			         height="23" +			         label="IM" +			         layout="topleft" +			         name="im" +			         tool_tip="Open instant message session" +			         top="0" +			         left="1" +			         width="21" />		 +				</layout_panel> +				 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left_pad="3" +				name="call_btn_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="52"> +					<button +			         follows="bottom|left|right" +			         height="23" +			         label="Call" +			         layout="topleft" +			         name="call" +			         tool_tip="Call this Resident" +			         left="1" +			         top="0" +			         use_ellipses="true" +			         width="51" />		 +				</layout_panel> +				 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left_pad="3" +				name="show_on_map_btn_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="46"> +					<button +			         enabled="false" +			         follows="bottom|left|right" +			         height="23" +			         label="Map" +			         layout="topleft" +			         name="show_on_map_btn" +			         tool_tip="Show the Resident on the map" +			         top="0" +			         left="1" +			         width="45" /> +				</layout_panel> +				 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left_pad="3" +				name="teleport_btn_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="81"> +					<button +			         follows="bottom|left|right" +			         height="23" +			         label="Teleport" +			         layout="topleft" +			         name="teleport" +			         tool_tip="Offer teleport" +			         left="1" +			         top="0" +			         width="80" />	 +				</layout_panel> +		</layout_stack>               </layout_panel>      </layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index e6714af943..1cbdecab9d 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -71,7 +71,7 @@       top="1"       width="30" />      <text -     follows="top|right" +     follows="top|left|right"       font="SansSerifHugeBold"       height="26"       layout="topleft" @@ -108,7 +108,7 @@           width="31" />              <panel               bevel_style="none" -             follows="top|right" +             follows="top|left|right"               height="37"               layout="topleft"               left_pad="5" @@ -494,39 +494,72 @@ It is calculated as border_size + 2*UIResizeBarOverlap       top_pad="2"       name="save_revert_button_bar"       width="300"> -        <button -         follows="bottom|left" -         height="23" -         label="Save" -         left="0" -         layout="topleft" -         name="save_btn" -         top="0" -         width="155" /> -        <button -         follows="bottom|left" -         height="23" -         name="save_flyout_btn" -         label="" -         layout="topleft" -         left_pad="-20" -         tab_stop="false" -         top="0" -         image_selected="SegmentedBtn_Right_Selected_Press" -         image_unselected="SegmentedBtn_Right_Off" -         image_pressed="SegmentedBtn_Right_Press" -         image_pressed_selected="SegmentedBtn_Right_Selected_Press" -         image_overlay="Arrow_Small_Up" -         width="20"/> -        <button -         follows="bottom|left|right" -         height="23" -         left_pad="12" -         label="Undo Changes" -         layout="topleft" -         name="revert_btn" -         top="0" -         tool_tip="Revert to last saved version" -         width="147" /> +			<layout_stack +     	         follows="bottom|left|right" +		         height="23" +		         layout="topleft" +		         mouse_opaque="false" +		         name="button_bar_ls" +		         left="0" +		         orientation="horizontal" +		         top="0" +		         width="313">	 +			    <layout_panel +			         follows="bottom|left|right" +			         height="23" +                     layout="bottomleft" +                     left="0"			 +                     mouse_opaque="false" +                     name="save_btn_lp" +                     user_resize="false"  +                     auto_resize="true" +                     width="156"> +                    <button +                         follows="bottom|left|right" +                         height="23" +                         label="Save" +                         left="1" +                         layout="topleft" +                         name="save_btn" +                         top="0" +                         width="155" /> +                    <button +                         follows="bottom|right" +                         height="23" +                         name="save_flyout_btn" +                         label="" +                         layout="topleft" +                         left_pad="-20" +                         tab_stop="false" +                         top="0" +                         image_selected="SegmentedBtn_Right_Selected_Press" +                         image_unselected="SegmentedBtn_Right_Off" +                         image_pressed="SegmentedBtn_Right_Press" +                         image_pressed_selected="SegmentedBtn_Right_Selected_Press" +                         image_overlay="Arrow_Small_Up" +                         width="20"/> +			    </layout_panel> +			    <layout_panel +                     follows="bottom|left|right" +                     height="23" +                     layout="bottomleft" +                     left_pad="3"			 +                     mouse_opaque="false" +                     name="revert_btn_lp" +                     user_resize="false"  +                     auto_resize="true" +                     width="147"> +                    <button +                         follows="bottom|left|right" +                         height="23" +                         left="0" +                         label="Undo Changes" +                         layout="topleft" +                         name="revert_btn" +                         top="0" +                         tool_tip="Revert to last saved version" +                         width="147" /> +			    </layout_panel> +			</layout_stack>      </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml index 82b69ba8dc..88c82313dd 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml @@ -67,36 +67,70 @@         visible="true"         name="bottom_panel"         width="310"> -      <button -           follows="bottom|left" -           height="23" -           label="Save As" -           left="0" -           layout="topleft" -           name="save_btn" -           top_pad="0" -           width="155" /> -      <button -           follows="bottom|left" -          height="23" -           name="save_flyout_btn" -           label="" -           layout="topleft" -           left_pad="-20" -           tab_stop="false" -           image_selected="SegmentedBtn_Right_Selected_Press" -           image_unselected="SegmentedBtn_Right_Off" -           image_pressed="SegmentedBtn_Right_Press" -           image_pressed_selected="SegmentedBtn_Right_Selected_Press" -           image_overlay="Arrow_Small_Up" -           width="20"/> -      <button -          follows="bottom|left|right"  -          height="23"  -          label="Wear" -          layout="topleft" -          name="wear_btn" -          left_pad="3" -          width="152" /> +			<layout_stack +     	         follows="bottom|left|right" +		         height="23" +		         layout="topleft" +		         mouse_opaque="false" +		         name="bottom_panel_ls" +		         left="0" +		         orientation="horizontal" +		         top="0" +		         width="313">	 +			    <layout_panel +			         follows="bottom|left|right" +			         height="23" +                     layout="bottomleft" +                     left="0"			 +                     mouse_opaque="false" +                     name="save_btn_lp" +                     user_resize="false"  +                     auto_resize="true" +                     width="156"> +                    <button +                         follows="bottom|left|right" +                         height="23" +                         label="Save As" +                         left="1" +                         layout="topleft" +                         name="save_btn" +                         top="0" +                         width="155" /> +                    <button +                         follows="bottom|right" +                         height="23" +                         name="save_flyout_btn" +                         label="" +                         layout="topleft" +                         left_pad="-20" +                         tab_stop="false" +                         image_selected="SegmentedBtn_Right_Selected_Press" +                         image_unselected="SegmentedBtn_Right_Off" +                         image_pressed="SegmentedBtn_Right_Press" +                         image_pressed_selected="SegmentedBtn_Right_Selected_Press" +                         image_overlay="Arrow_Small_Up" +                         width="20"/> +			    </layout_panel> +			    <layout_panel +                     follows="bottom|left|right" +                     height="23" +                     layout="bottomleft" +                     left_pad="3"			 +                     mouse_opaque="false" +                     name="wear_btn_lp" +                     user_resize="false"  +                     auto_resize="true" +                     width="152"> +                    <button +                         follows="bottom|left|right" +                         height="23" +                         label="Wear" +                         layout="topleft" +                         name="wear_btn" +                         left="0" +                         top="0" +                         width="152" /> +			    </layout_panel> +			</layout_stack>     </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 7cd0d5b5f0..059283ce09 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -143,7 +143,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M                    function="People.addFriend" />               </button>               <icon -             follows="bottom|left" +             follows="bottom|left|right"               height="25"               image_name="Toolbar_Right_Off"               layout="topleft" @@ -222,6 +222,96 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M               name="bottom_panel"               top_pad="0"               width="313"> +              +             	  <layout_stack +				   animate="false" +				   border_size="0" +				   follows="left|right|bottom" +				   height="25" +				   layout="topleft" +				   orientation="horizontal" +				   top_pad="1" +				   left="0" +				   name="bottom_panel" +				   width="305"> +				      <layout_panel +				       auto_resize="false" +				       height="25" +				       layout="topleft" +				       name="options_gear_btn_panel" +				       width="32"> +				          <button +				           follows="bottom|left" +				           tool_tip="Show additional options" +				           height="25" +				           image_hover_unselected="Toolbar_Left_Over" +				           image_overlay="OptionsMenu_Off" +				           image_selected="Toolbar_Left_Selected" +				           image_unselected="Toolbar_Left_Off" +				           layout="topleft" +				           left="0" +				           name="friends_viewsort_btn" +				           top="0" +				           width="31" /> +				      </layout_panel> +				      <layout_panel +				       auto_resize="false" +				       height="25" +				       layout="topleft" +				       name="add_btn_panel" +				       width="32"> +				          <button +				           follows="bottom|left" +				           height="25" +				           image_hover_unselected="Toolbar_Middle_Over" +				           image_overlay="AddItem_Off" +				           image_selected="Toolbar_Middle_Selected" +				           image_unselected="Toolbar_Middle_Off" +				           layout="topleft" +				           left="0" +				           name="add_btn" +				           tool_tip="Offer friendship to a Resident" +				           top="0" +				           width="31" /> +				      </layout_panel> +				      <layout_panel +				       auto_resize="true" +				       height="25" +				       layout="topleft" +				       name="dummy_panel" +				       width="212"> +				          <icon +				           follows="bottom|left|right" +				           height="25" +				           image_name="Toolbar_Middle_Off" +				           layout="topleft" +				           left="0" +				           top="0" +				           name="dummy_icon" +				           width="211" /> +				      </layout_panel> +				      <layout_panel +				       auto_resize="false" +				       height="25" +				       layout="topleft" +				       name="trash_btn_panel" +				       width="31"> +				          <dnd_button +				           follows="bottom|left" +				           height="25" +				           image_hover_unselected="Toolbar_Right_Over" +				           image_overlay="TrashItem_Off" +				           image_selected="Toolbar_Right_Selected" +				           image_unselected="Toolbar_Right_Off" +				           left="0" +				           layout="topleft" +				           name="trash_btn" +				           tool_tip="Remove selected person from your Friends list" +				           top="0" +				           width="31"/> +				      </layout_panel> +				  </layout_stack><!-- +                              <button                 follows="bottom|left"                 tool_tip="Options" @@ -248,7 +338,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M                   tool_tip="Offer friendship to a Resident"                   width="31" />                  <icon -             	 follows="bottom|left" +             	 follows="bottom|left|right"               	 height="25"               	 image_name="Toolbar_Middle_Off"               	 layout="topleft" @@ -268,7 +358,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M                   name="del_btn"                   tool_tip="Remove selected person from your Friends list"                   width="31" /> -            </panel> +            --></panel>              <text               follows="all"               height="450" @@ -353,7 +443,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M                   tool_tip="Activate selected group"                   width="31" />                   <icon -             	 follows="bottom|left" +             	 follows="bottom|left|right"               	 height="25"               	 image_name="Toolbar_Right_Off"               	 layout="topleft" @@ -427,7 +517,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M                     function="People.addFriend" />                </button>                <icon -             	 follows="bottom|left" +             	 follows="bottom|left|right"               	 height="25"               	 image_name="Toolbar_Right_Off"               	 layout="topleft" @@ -439,85 +529,210 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M          </panel>      </tab_container>      <panel -     follows="bottom|left" +     follows="bottom|left|right"       height="23"       layout="topleft"       left="8"       top_pad="4"       name="button_bar"       width="313"> -        <button -         follows="bottom|left" -         height="23" -         label="Profile" -         layout="topleft" -         name="view_profile_btn" -         tool_tip="Show picture, groups, and other Residents information" -         top="0" -         width="67" /> -        <button -         follows="bottom|left" -         left_pad="3" -         height="23" -         label="IM" -         layout="topleft" -         name="im_btn" -         tool_tip="Open instant message session" -         width="40" /> -        <button -         follows="bottom|left" -         left_pad="3" -         height="23" -         label="Call" -         layout="topleft" -         name="call_btn" -         tool_tip="Call this Resident" -         width="51" /> -        <button -         follows="bottom|left" -         left_pad="3" -         height="23" -         label="Share" -         layout="topleft" -         name="share_btn" -         tool_tip="Share an inventory item" -         width="65" /> -        <button -         follows="bottom|left" -         left_pad="3" -         height="23" -         label="Teleport" -         layout="topleft" -         name="teleport_btn" -         tool_tip="Offer teleport" -         width="76" /> -        <button -         follows="bottom|left" -         left="0" -         top_delta="0" -         height="23" -         label="Group Profile" -         layout="topleft" -         name="group_info_btn" -         tool_tip="Show group information" -         width="107" /> -        <button -         follows="bottom|left" -         left_pad="3" -         height="23" -         label="Group Chat" -         layout="topleft" -         name="chat_btn" -         tool_tip="Open chat session" -         width="100" /> -        <button -         follows="bottom|left" -         left_pad="3" -         height="23" -         label="Group Call" -         layout="topleft" -         name="group_call_btn" -         tool_tip="Call this group" -         width="95" /> + +<!--********************************Profile; IM; Call, Share, Teleport********************************--> 	 +     	<layout_stack +     	follows="bottom|left|right" +		height="23" +		layout="topleft" +		name="bottom_bar_ls" +		left="0" +		orientation="horizontal" +		top_pad="0" +		width="313"> + +			<layout_panel +			follows="bottom|left|right" +			height="23" +			layout="bottomleft" +			left="0" +			name="view_profile_btn_lp" +		    user_resize="false"  +		    auto_resize="true" +			width="68"> +				<button +		         follows="bottom|left|right" +		         height="23" +		         label="Profile" +		         layout="topleft" +		         left="1" +		         name="view_profile_btn" +		         tool_tip="Show picture, groups, and other Residents information" +		         top="0" +		         width="67" />	 +			</layout_panel> +			 +			<layout_panel +			follows="bottom|left|right" +			height="23" +			layout="bottomleft" +			left_pad="3" +			name="chat_btn_lp" +		    user_resize="false"  +		    auto_resize="true" +			width="41"> +				<button +		         follows="bottom|left|right" +		         left="1" +		         height="23" +		         label="IM" +		         layout="topleft" +		         name="im_btn" +		         tool_tip="Open instant message session" +		         top="0" +		         width="40" />			 +			</layout_panel> +			 +			<layout_panel +			follows="bottom|left|right" +			height="23" +			layout="bottomleft" +			left_pad="3" +			name="chat_btn_lp" +		    user_resize="false"  +		    auto_resize="true" +			width="52"> +				<button +		         follows="bottom|left|right" +		         left="1" +		         height="23" +		         label="Call" +		         layout="topleft" +		         name="call_btn" +		         tool_tip="Call this Resident" +		         top="0" +		         width="51" />		 +			</layout_panel> +			 +			<layout_panel +			follows="bottom|left|right" +			height="23" +			layout="bottomleft" +			left_pad="3" +			name="chat_btn_lp" +		    user_resize="false"  +		    auto_resize="true" +			width="66"> +				<button +		         follows="bottom|left|right" +		         left="1" +		         height="23" +		         label="Share" +		         layout="topleft" +		         name="share_btn" +		         tool_tip="Share an inventory item" +		         top="0" +		         width="65" />	 +			</layout_panel> +			 +			<layout_panel +			follows="bottom|left|right" +			height="23" +			layout="bottomleft" +			left_pad="3" +			name="chat_btn_lp" +		    user_resize="false"  +		    auto_resize="true" +			width="77"> +				<button +		         follows="bottom|left|right" +		         left="1" +		         height="23" +		         label="Teleport" +		         layout="topleft" +		         name="teleport_btn" +		         tool_tip="Offer teleport" +		         top="0" +		         width="76" />		 +			</layout_panel> +		</layout_stack> +		 +<!--********************************Group Profile; Group Chat; Group Call buttons************************-->			 +		<layout_stack +     	follows="bottom|left|right" +		height="23" +		layout="topleft" +		mouse_opaque="false" +		name="bottom_bar_ls1" +		left="0" +		orientation="horizontal" +		top="0" +		width="313">	 +			<layout_panel +			follows="bottom|left|right" +			height="23" +			layout="bottomleft" +			left="0"			 +			mouse_opaque="false" +			name="group_info_btn_lp" +		    user_resize="false"  +		    auto_resize="true" +			width="108"> +				<button +		        follows="bottom|left|right" +		        left="1" +		        height="23" +		        label="Group Profile" +		        layout="topleft" +				mouse_opaque="false" +		        name="group_info_btn" +		        tool_tip="Show group information" +		        top="0" +		        width="107" />		 +			</layout_panel> +			 +			<layout_panel +			follows="bottom|left|right" +			height="23" +			layout="bottomleft" +			left_pad="3" +			mouse_opaque="false" +			name="chat_btn_lp" +		    user_resize="false"  +		    auto_resize="true" +			width="101"> +				<button +		        follows="bottom|left|right" +		        left="1" +		        height="23" +		        label="Group Chat" +		        layout="topleft" +				mouse_opaque="false" +		        name="chat_btn" +		        tool_tip="Open chat session" +		        top="0" +		        width="100" />			 +			</layout_panel> +		 +			<layout_panel +			follows="bottom|left|right" +			height="23" +			layout="bottomleft" +			left_pad="3" +			mouse_opaque="false" +			name="group_call_btn_lp" +		    user_resize="false"  +		    auto_resize="true" +			width="96"> +				<button +				follows="bottom|left|right" +				left="1" +				height="23" +         		label="Group Call" +         		layout="topleft" +				mouse_opaque="false" +         		name="group_call_btn" +         		tool_tip="Call this group" +		        top="0" +         		width="95" />			 +			</layout_panel>		 +		</layout_stack>      </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml index 95c8cb301d..0496c86215 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_info.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml @@ -11,7 +11,7 @@   top="0"   width="333">      <button -     follows="top|right" +     follows="top|left"       height="24"       image_hover_unselected="BackButton_Over"       image_pressed="BackButton_Press" @@ -121,30 +121,73 @@       top_pad="5"       left="8"       name="buttons"> -        <button -         follows="bottom|left" -         height="23" -         label="Teleport" -         layout="topleft" -         left="0" -         name="teleport_btn" -         top="0" -         width="101" /> -        <button -         follows="bottom|left" -         height="23" -         label="Map" -         layout="topleft" -         left_pad="3" -         name="show_on_map_btn" -         width="100" /> -        <button -         follows="bottom|left" -         height="23" -         label="Edit" -         layout="topleft" -         name="edit_btn" -         left_pad="3" -         width="101" /> +        +       <layout_stack +		  follows="bottom|left|right" +		  height="23" +		  layout="topleft" +		  name="layout_stack1" +		  left="0" +		  orientation="horizontal" +		  top_pad="0" +		  width="312"> +		   +		  <layout_panel +			  follows="bottom|left|right" +			  height="23" +			  layout="bottomleft" +			  left="0" +			  name="layout_panel1" +		      user_resize="false"  +		      auto_resize="true" +			  width="101"> +			  <button +			  	 follows="bottom|left|right" +		         height="23" +		         label="Teleport" +		         layout="topleft" +		         name="teleport_btn" +		         top="0" +		         width="101" /> +		  </layout_panel> +		   +		  <layout_panel +			  follows="bottom|left|right" +			  height="23" +			  layout="bottomleft" +			  left_pad="3" +			  name="show_on_map_btn_lp" +		      user_resize="false"  +		      auto_resize="true" +			  width="100"> +			  <button +		         follows="bottom|left|right" +		         height="23" +		         label="Map" +		         layout="topleft" +		         name="show_on_map_btn" +		         top_pad="0" +		         width="100" /> +		  </layout_panel>	   +		   +		  <layout_panel +			  follows="bottom|left|right" +			  height="23" +			  layout="bottomleft" +			  left_pad="3" +			  name="edit_btn_lp" +		      user_resize="false"  +		      auto_resize="true" +			  width="101"> +			  <button +		         follows="bottom|left|right" +		         height="23" +		         label="Edit" +		         layout="topleft" +		         name="edit_btn" +		         top_pad="0" +		         width="101" /> +		  </layout_panel> +	   </layout_stack>      </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index a815cdf7f0..647be28a62 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -78,93 +78,166 @@ bg_opaque_color="DkGray2"           bevel_style="none"           enabled="false"           auto_resize="false" -         follows="bottom" +         follows="bottom|left|right"           left="1"           height="27"           label="bottom_panel" -         layout="topleft" +         layout="bottom"           name="edit_panel"           top_pad="-2"           width="313"> -            <button -             enabled="false" -             follows="bottom|left" -             height="18" -             image_selected="OptionsMenu_Press" -             image_unselected="OptionsMenu_Off" -              image_disabled="OptionsMenu_Disabled" -             layout="topleft" -             left="10" -             name="gear_menu_btn" -             top="9" -             width="18" /> -            <button -             follows="bottom|left" -             height="18" -             image_disabled="AddItem_Disabled" -             image_selected="AddItem_Press" -             image_unselected="AddItem_Off" -             layout="topleft" -             left_pad="15" -             name="new_btn" -             tool_tip="Create a new pick or classified at the current location" -             top="9" -             width="18" /> -            <button -             follows="bottom|right" -             height="18" -             image_disabled="TrashItem_Disabled" -             image_selected="TrashItem_Press" -             image_unselected="TrashItem_Off" -             layout="topleft" -             name="trash_btn" -             right="-10" -             top="9" -             width="18" /> -        </panel> -        <panel +          +         <layout_stack +		  follows="bottom|left|right" +		  height="23" +		  layout="bottomleft" +		  name="edit_panel_ls" +		  left="10" +		  orientation="horizontal" +		  top_pad="0" +		  width="293"> +		   +		  <layout_panel +			  follows="bottom|left" +			  height="18" +			  layout="bottomleft" +			  left="0" +			  name="gear_menu_btn" +		      user_resize="false"  +		      auto_resize="true" +			  width="51"> +	            <button +	             enabled="false" +	             follows="bottom|left" +	             height="18" +	             image_selected="OptionsMenu_Press" +	             image_unselected="OptionsMenu_Off" +	             image_disabled="OptionsMenu_Disabled" +	             layout="topleft" +	             left="0" +	             name="gear_menu_btn" +	             top_pad="0" +	             width="18" /> +				<button +	             follows="bottom|left" +	             height="18" +	             image_disabled="AddItem_Disabled" +	             image_selected="AddItem_Press" +	             image_unselected="AddItem_Off" +	             layout="topleft" +	             left_pad="15" +	             name="new_btn" +	             tool_tip="Create a new pick or classified at the current location" +	             width="18" /> +		  </layout_panel> +		   +		  <layout_panel +			  follows="bottom|right" +			  height="18" +			  layout="bottomleft" +			  name="trash_btn_lp" +		      user_resize="false"  +		      auto_resize="true" +			  width="18"> +				<button +	             follows="bottom|right" +	             height="18" +	             image_disabled="TrashItem_Disabled" +	             image_selected="TrashItem_Press" +	             image_unselected="TrashItem_Off" +	             layout="topleft" +	             name="trash_btn" +	             top="0" +	             width="18" /> +		  </layout_panel> +		   +	  </layout_stack> +	  </panel> +	   +	  <panel   bg_opaque_color="DkGray"         background_visible="true"         background_opaque="true" +         follows="bottom|left|right"           layout="topleft"           left="0"           height="40" -         top="502"           name="buttons_cucks"           width="313"> -       <button -         enabled="false" -         follows="bottom|left" -         height="23" -         label="Info" -         layout="topleft" -         left="2" -         name="info_btn" -         tab_stop="false" -         tool_tip="Show pick information" -         top="5" -         width="95" /> -        <button -         enabled="false" -         follows="bottom|left" -         height="23" -         label="Teleport" -         layout="topleft" -         left_pad="3" -         name="teleport_btn" -         tab_stop="false" -         tool_tip="Teleport to the corresponding area" -         width="117" /> -        <button -         enabled="false" -         follows="bottom|left" -         height="23" -         label="Map" -         layout="topleft" -         left_pad="3" -         name="show_on_map_btn" -         tab_stop="false" -         tool_tip="Show the corresponding area on the World Map" -         width="90" /> -        </panel> +       +      <layout_stack +		  follows="bottom|left|right" +		  height="28" +		  layout="topleft" +		  left="2" +		  name="buttons_cucks_ls" +		  orientation="horizontal" +		  top="0" +		  width="313"> +		  	   +		  <layout_panel +			  follows="bottom|left|right" +			  height="28" +			  layout="topleft" +			  left="0" +			  name="info_btn_lp" +		      user_resize="false"  +		      auto_resize="true" +			  top="0" +			  width="95"> +		       <button +		         enabled="false" +		         follows="top|left|right" +		         height="23" +		         label="Info" +		         layout="topleft" +		         name="info_btn" +		         tab_stop="false" +		         tool_tip="Show pick information" +		         width="95" /> +		  </layout_panel> +		   +		  <layout_panel +			  follows="bottom|left|right" +			  height="28" +			  layout="bottomleft"  +			  left_pad="2" +			  name="teleport_btn_lp" +		      user_resize="false"  +		      auto_resize="true" +			  width="117"> +		        <button +		         enabled="false" +		         follows="top|left|right" +		         height="23" +		         label="Teleport" +		         layout="topleft" +		         name="teleport_btn" +		         tab_stop="false" +		         tool_tip="Teleport to the corresponding area" +		         width="117" /> +		  </layout_panel> +		   +		  <layout_panel +			  follows="bottom|left|right" +			  height="28" +			  layout="bottomleft" +			  name="show_on_map_btn_lp" +		      user_resize="false"  +		      auto_resize="true"  +			  left_pad="2" +			  width="90"> +		        <button +		         enabled="false" +		         follows="top|left|right" +		         height="23" +		         label="Map" +		         layout="topleft" +		         name="show_on_map_btn" +		         tab_stop="false" +		         tool_tip="Show the corresponding area on the World Map" +		         width="88" /> +		  </layout_panel> +	</layout_stack> +	</panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index c6e93af50a..01d1e48ba1 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -154,7 +154,7 @@       translate="false"       value="Parcel_DamageNo_Dark" />      <button -     follows="top|right" +     follows="top|left"       height="24"       image_hover_unselected="BackButton_Over"       image_pressed="BackButton_Press" diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index 638e190e8f..21314703b0 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -68,83 +68,297 @@ background_visible="true"       visible="false"       width="315" />      <panel +     follows="bottom|left|right"       height="23"       layout="topleft"       left="4"       name="button_panel"       width="315"> -        <button -         follows="bottom|left" -         height="23" -         label="Teleport" -         layout="topleft" -         left="5" -         name="teleport_btn" -         tool_tip="Teleport to the selected area" -         top="1" -         width="108" /> -        <button -         follows="bottom|left" -         height="23" -         label="Map" -         layout="topleft" -         left_pad="3" -         name="map_btn" -         tool_tip="Show the corresponding area on the World Map" -         width="85" /> -        <button -         follows="bottom|left" -         height="23" -         label="Edit" -         layout="topleft" -         left_pad="3" -         name="edit_btn" -         tool_tip="Edit landmark information" -         width="83" /> -        <button -         follows="bottom|right" -         height="23" -         label="▼" -         layout="topleft" -         name="overflow_btn" -         tool_tip="Show additional options" -         left_pad="3" -         width="23" /> -        <button -         follows="bottom|left" -         height="23" -         label="Save" -         layout="topleft" -         name="save_btn" -         left="5" -         top_pad="-23" -         width="152" /> -        <button -         follows="bottom|right" -         height="23" -         label="Cancel" -         layout="topleft" -         name="cancel_btn" -         left_pad="3" -         width="153" /> -        <button -         follows="bottom|right" -         height="23" -         label="Close" -         layout="topleft" -         name="close_btn" -         right="-10" -         top="1" -         width="60" /> -        <button -         follows="bottom|left" -         height="23" -         label="Profile" -         layout="topleft" -         name="profile_btn" -         right="-1" -         tool_tip="Show place profile" -         top="1" -         width="111" /> +      +       <layout_stack +     	follows="bottom|left|right" +		height="23" +		layout="topleft" +		mouse_opaque="false" +		name="bottom_bar_ls0" +		left="4" +		orientation="horizontal" +		top="0" +		width="315">	 +			<layout_panel +			follows="bottom|left|right" +			height="23" +			layout="bottomleft" +			left="0"			 +			mouse_opaque="false" +			name="lp1" +		    user_resize="false"  +		    auto_resize="true" +			width="193"> +			 +		<!--*********************** Teleport, Map buttons ***********************--> +     	 +		       <layout_stack +		     	follows="bottom|left|right" +				height="23" +				layout="topleft" +				mouse_opaque="false" +				name="bottom_bar_ls1" +				left="0" +				orientation="horizontal" +				top="0" +				width="193">	 +					<layout_panel +					follows="bottom|left|right" +					height="23" +					layout="bottomleft" +					left="0"			 +					mouse_opaque="false" +					name="teleport_btn_lp" +				    user_resize="false"  +				    auto_resize="true" +					width="109"> +						<button +				         follows="bottom|left|right" +				         height="23" +				         label="Teleport" +				         layout="topleft" +				         left="1" +				         name="teleport_btn" +				         tool_tip="Teleport to the selected area" +				         top="0" +				         width="108" />		 +					</layout_panel> +					 +					<layout_panel +					follows="bottom|left|right" +					height="23" +					layout="bottomleft" +					left_pad="3" +					mouse_opaque="false" +					name="chat_btn_lp" +				    user_resize="false"  +				    auto_resize="true" +					width="86"> +						<button +				         follows="bottom|left|right" +				         height="23" +				         label="Map" +				         layout="topleft" +				         left="1" +				         name="map_btn" +				         tool_tip="Show the corresponding area on the World Map" +				         top="0" +				         width="85" />		 +					</layout_panel> +				</layout_stack> +			</layout_panel>	 +			 +			<layout_panel +			follows="bottom|left|right" +			height="23" +			layout="bottomleft" +			left_pad="0"			 +			mouse_opaque="false" +			name="lp2" +		    user_resize="false"  +		    auto_resize="true" +			width="116"> +			 +		<!--*********************** Edit, Options buttons ***********************-->		 +		 +				<layout_stack +		     	follows="bottom|left|right" +				height="23" +				layout="topleft" +				mouse_opaque="false" +				name="bottom_bar_ls3" +				left="0" +				orientation="horizontal" +				top="0" +				width="120"> +		 +					<layout_panel +					follows="bottom|left|right" +					height="23" +					layout="bottomleft" +					left_pad="0" +					mouse_opaque="false" +					name="edit_btn_lp" +				    user_resize="false"  +				    auto_resize="true" +					width="84"> +						<button +				         follows="bottom|left|right" +				         height="23" +				         label="Edit" +				         layout="topleft" +				         left="1" +						 mouse_opaque="false" +				         name="edit_btn" +				         tool_tip="Edit landmark information" +				         top="0" +				         width="83" /> +					</layout_panel> +					 +					<layout_panel +					follows="bottom|left|right" +					height="23" +					layout="bottomleft" +					left_pad="0" +					mouse_opaque="false" +					name="overflow_btn_lp" +				    user_resize="false"  +				    auto_resize="true" +					width="24"> +						<button +				         follows="bottom|left|right" +				         height="23" +				         label="▼" +				         layout="topleft" +						 mouse_opaque="false" +				         name="overflow_btn" +				         tool_tip="Show additional options" +				         top="0" +				         left="1"		          +				         width="23" />			 +					</layout_panel> +				</layout_stack> +		 +		<!--*********************** Profile button ***********************-->		 +				 +				<layout_stack +		     	follows="bottom|left|right" +				height="23" +				layout="topleft" +				mouse_opaque="false" +				name="bottom_bar_ls3" +				left="0" +				orientation="horizontal" +				top="0" +				width="120">		 +					<layout_panel +					follows="bottom|left|right" +					height="23" +					layout="bottomleft" +					left_pad="3"			 +					mouse_opaque="false" +					name="profile_btn_lp" +				    user_resize="false"  +				    auto_resize="true" +					width="112"> +						<button +				         follows="bottom|left|right" +				         height="23" +				         label="Profile" +				         layout="topleft" +						 mouse_opaque="false" +				         name="profile_btn" +				         left="1" +				         tool_tip="Show place profile" +				         top="0" +				         width="111" />		 +					</layout_panel> +				</layout_stack> +		 +		<!--*********************** Close button ***********************--> +				 +				<layout_stack +		     	follows="bottom|left|right" +				height="23" +				layout="topleft" +				mouse_opaque="false" +				name="bottom_bar_close_ls3" +				left="0" +				orientation="horizontal" +				top="0" +				width="120"> +					<layout_panel +					follows="bottom|left|right" +					height="23" +					layout="bottomleft" +					left_pad="3"			 +					mouse_opaque="false" +					name="close_btn_lp" +					top="0" +				    user_resize="false"  +				    auto_resize="true" +					width="61"> +						<button +				         follows="bottom|left|right" +				         height="23" +				         label="Close" +				         layout="topleft" +						 mouse_opaque="false" +				         name="close_btn" +				         left="1" +				         top="0" +				         width="60" />	 +					</layout_panel> +				</layout_stack> + +					 +			</layout_panel> +		</layout_stack>	 + +<!--*********************** Save, Cancel buttons ***********************-->		 +		 +		<layout_stack +     	follows="bottom|left|right" +		height="23" +		layout="topleft" +		mouse_opaque="false" +		name="bottom_bar_ls2" +		left="4" +		orientation="horizontal" +		top="0" +		width="313"> +		 +			<layout_panel +			follows="bottom|left|right" +			height="23" +			layout="bottomleft" +			left_pad="3" +			mouse_opaque="false" +			name="save_btn_lp" +			top="0" +		    user_resize="false"  +		    auto_resize="true" +			width="153"> +				<button +		         follows="bottom|left|right" +		         height="23" +		         label="Save" +		         layout="topleft" +				 mouse_opaque="false" +		         name="save_btn" +		         left="1" +		         top_pad="0" +		         width="152"/>		 +			</layout_panel> +			 +			<layout_panel +			follows="bottom|left|right" +			height="23" +			layout="bottomleft" +			left_pad="3" +			mouse_opaque="false" +			name="cancel_btn_lp" +			top="0" +		    user_resize="false"  +		    auto_resize="true" +			width="154"> +				<button +		         follows="bottom|left|right" +		         height="23" +		         label="Cancel" +		         layout="topleft" +				 mouse_opaque="false" +		         name="cancel_btn" +		         left="1" +		         top="0" +		         width="153" />		 +			</layout_panel>		 +		</layout_stack>      </panel>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index e41b80baf2..88d7e68894 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -305,73 +305,132 @@          </scroll_container>        </layout_panel>        <layout_panel -              follows="bottom|left" +         follows="bottom|left"           height="30"           layout="topleft"           name="profile_buttons_panel"           auto_resize="false"           width="317"> -        <button -         follows="bottom|left" -         height="23" -         label="Add Friend" -         layout="topleft" -         left="2" -         mouse_opaque="false" -         name="add_friend" -         pad_left="1"  -         pad_right="1" -         tool_tip="Offer friendship to the Resident" -         top="5" -         use_ellipses="true" -         width="117" /> -        <button -         follows="bottom|left" -         height="23" -         label="IM" -         layout="topleft" -         name="im" -         tool_tip="Open instant message session" -         top="5" -         left_pad="1" -         width="21" /> -        <button -         follows="bottom|left" -         height="23" -         label="Call" -         layout="topleft" -         name="call" -         tool_tip="Call this Resident" -         left_pad="1" -         pad_left="1"  -         pad_right="1" -         top="5" -         use_ellipses="true" -         width="51" /> -        <button -         follows="bottom|left" -         height="23" -         label="Teleport" -         layout="topleft" -         name="teleport" -         tool_tip="Offer teleport" -         left_pad="1" -         pad_left="1"  -         pad_right="1" -         top="5" -         use_ellipses="true" -         width="92" /> -        <button -         follows="bottom|right" -         height="23" -         label="▼" -         layout="topleft" -         name="overflow_btn" -         tool_tip="Pay money to or share inventory with the Resident" -         right="-1" -         top="5" -         width="23" /> -        </layout_panel> +         	 +           <layout_stack +	     	follows="bottom|left|right" +			height="23" +			layout="topleft" +			name="bottom_bar_ls" +			left="0" +			orientation="horizontal" +			top_pad="5" +			width="317"> +	 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left="0" +				name="add_friend_btn_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="118"> +					<button +			         follows="bottom|left|right" +			         height="23" +			         label="Add Friend" +			         layout="topleft" +			         left="1" +			         mouse_opaque="false" +			         name="add_friend" +			         tool_tip="Offer friendship to the Resident" +			         top="0" +			         width="117" />	 +				</layout_panel> +				 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left_pad="3" +				name="im_btn_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="22"> +					<button +			         follows="bottom|left|right" +			         height="23" +			         label="IM" +			         layout="topleft" +			         name="im" +			         tool_tip="Open instant message session" +			         top="0" +			         left="1" +			         width="21" />		 +				</layout_panel> +				 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left_pad="3" +				name="call_btn_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="52"> +					<button +			         follows="bottom|left|right" +			         height="23" +			         label="Call" +			         layout="topleft" +			         name="call" +			         tool_tip="Call this Resident" +			         left="1" +			         top="0" +			         use_ellipses="true" +			         width="51" />		 +				</layout_panel> +				 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left_pad="3" +				name="chat_btn_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="93"> +					<button +			         follows="bottom|left|right" +			         height="23" +			         label="Teleport" +			         layout="topleft" +			         name="teleport" +			         tool_tip="Offer teleport" +			         left="1" +			         top="0" +			         use_ellipses="true" +			         width="92" /> +				</layout_panel> +				 +				<layout_panel +				follows="bottom|left|right" +				height="23" +				layout="bottomleft" +				left_pad="3" +				name="overflow_btn_lp" +			    user_resize="false"  +			    auto_resize="true" +				width="27"> +					<button +			         follows="bottom|left|right" +			         height="23" +			         label="▼" +			         layout="topleft" +			         name="overflow_btn" +			         tool_tip="Pay money to or share inventory with the Resident" +			         left="1" +			         top="0" +			         width="23" />		 +				</layout_panel> +		</layout_stack> +      </layout_panel>        <layout_panel           follows="bottom|left"           height="30" diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml index d9030fc0d6..41c7b95c9f 100644 --- a/indra/newview/skins/default/xui/en/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml @@ -17,7 +17,7 @@          Offline      </string>      <button -     follows="top|right" +     follows="top|left"       height="24"       image_hover_unselected="BackButton_Over"       image_pressed="BackButton_Press" diff --git a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml index 60c2e0830c..557b04d281 100644 --- a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml +++ b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml @@ -9,7 +9,7 @@   left="0"   name="sidetray_tab_panel">      <text -     follows="left|top" +     follows="left|top|right"       font="SansSerifHuge"       height="16"       layout="topleft" @@ -22,15 +22,28 @@       <button       follows="right|top"       height="16" -     image_selected="Icon_Dock_Press" -     image_unselected="Icon_Dock_Foreground" -     image_disabled="Icon_Dock_Press" +     image_selected="Sidebar_Icon_Undock_Press" +     image_unselected="Sidebar_Icon_Undock_Foreground" +     image_disabled="Sidebar_Icon_Undock_Press" +     layout="topleft" +     name="undock" +     top="10" +     right="-28" +     width="16" +     tool_tip="Undock" /> +     <button +     follows="right|top" +     height="16" +     image_selected="Sidebar_Icon_Dock_Press" +     image_unselected="Sidebar_Icon_Dock_Foreground" +     image_disabled="Sidebar_Icon_Dock_Press"       layout="topleft"       name="dock"       top="10"       right="-28"       width="16" -     tool_tip="Dock/Undock tab" /> +     tool_tip="Dock" +     visible="false" />       <button       follows="right|top"       height="16" diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml index b48c5d1f8a..bf09836e87 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml @@ -171,7 +171,7 @@           top="1"           width="31" />          <icon -         follows="bottom|left" +         follows="bottom|left|right"           height="25"           image_name="Toolbar_Right_Off"           layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml index d38ad8c5f8..c89e1dc215 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml @@ -56,6 +56,7 @@       left_pad="5"       right="-3"       name="profile_btn" +     tab_stop="false"       tool_tip="Show item info"       top="1"       visible="false" diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index 02ab0ffee5..c1c0f07304 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -65,7 +65,7 @@ width="333">        text_color="EmphasisColor"        width="300"        height="10" -      follows="top|left" +      follows="top|left|right"        layout="topleft"        left="35"        top="3" @@ -81,14 +81,14 @@ width="333">        top="15"        use_ellipses="true"        width="230" -      follows="top|left" +      follows="top|left|right"        word_wrap="false"        mouse_opaque="false"        name="currentlook_name">        MyOutfit With a really Long Name like MOOSE        </text>        <button -      follows="left|top" +      follows="top|right"        height="28"        image_overlay="Edit_Wrench"        label="" @@ -99,7 +99,7 @@ width="333">        top="3"        width="28" />        <loading_indicator -      follows="left|top" +      follows="top|right"        height="24"        layout="topleft"        left="268" diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index 6c9acae35e..f3c6895cee 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -31,77 +31,122 @@  			 height="545"  			 width="330" />  		<panel +		     follows="bottom|left|right"  			 height="25"  			 layout="topleft"  			 name="button_panel"  			 left="9"  			 top_pad="-2"  			 width="313"> -			<button -				 enabled="true" -				 follows="bottom|left" -				 height="23" -				 label="Profile" -				 layout="topleft" -				 left="0" -				 name="info_btn" -				 tool_tip="Show object profile" -				 top="0" -				 width="102" /> -			<button -				 enabled="true" -				 follows="bottom|left" -				 height="23" -				 label="Share" -				 layout="topleft" -				 left="105" -				 name="share_btn" -				 tool_tip="Share an inventory item" -				 top="0" -				 width="102" /> -			<button -				 enabled="true" -				 follows="bottom|left" -				 height="23" -				 label="Shop" -				 layout="topleft" -				 left="210" -				 name="shop_btn" -				 tool_tip="Open Marketplace webpage" -				 top="0" -				 width="102" /> -			<button -				 enabled="false" -				 follows="bottom|left" -				 height="23" -				 label="Wear" -				 layout="topleft" -				 left="210" -				 name="wear_btn" -				 tool_tip="Wear seleceted outfit" -				 top="0" -				 width="102" /> -			<button -				 enabled="false" -				 follows="bottom|left" -				 height="23" -				 label="Play" -				 layout="topleft" -				 name="play_btn" -				 left="210" -				 top="0" -				 width="102" /> -			<button -				 enabled="false" -				 follows="bottom|left" -				 height="23" -				 label="Teleport" -				 layout="topleft" -				 left="210" -				 name="teleport_btn" -				 tool_tip="Teleport to the selected area" -				 top="0" -				 width="102" /> +			<layout_stack +     	         follows="bottom|left|right" +		         height="23" +		         layout="topleft" +		         mouse_opaque="false" +		         name="button_panel_ls" +		         left="0" +		         orientation="horizontal" +		         top="0" +		         width="313">	 +			    <layout_panel +			         follows="bottom|left|right" +			         height="23" +                     layout="bottomleft" +                     left="0"			 +                     mouse_opaque="false" +                     name="info_btn_lp" +                     user_resize="false"  +                     auto_resize="true" +                     width="103"> +                    <button +                         enabled="true" +                         follows="bottom|left|right" +                         height="23" +                         label="Profile" +                         layout="topleft" +                         left="1" +                         name="info_btn" +                         tool_tip="Show object profile" +                         top="0" +                         width="102" /> +			    </layout_panel> +			    <layout_panel +                     follows="bottom|left|right" +                     height="23" +                     layout="bottomleft" +                     left_pad="3"			 +                     mouse_opaque="false" +                     name="share_btn_lp" +                     user_resize="false"  +                     auto_resize="true" +                     width="102"> +                    <button +                         enabled="true" +                         follows="bottom|left|right" +                         height="23" +                         label="Share" +                         layout="topleft" +                         left="0" +                         name="share_btn" +                         tool_tip="Share an inventory item" +                         top="0" +                         width="102" /> +			    </layout_panel> +			    <layout_panel +                     follows="bottom|left|right" +                     height="23" +                     layout="bottomleft" +                     left_pad="3"			 +                     mouse_opaque="false" +                     name="shop_btn_lp" +                     user_resize="false"  +                     auto_resize="true" +                     width="102"> +                    <button +                         enabled="true" +                         follows="bottom|left|right" +                         height="23" +                         label="Shop" +                         layout="topleft" +                         left="0" +                         name="shop_btn" +                         tool_tip="Open Marketplace webpage" +                         top="0" +                         width="102" /> +                    <button +                         enabled="false" +                         follows="bottom|left|right" +                         height="23" +                         label="Wear" +                         layout="topleft" +                         left="0" +                         name="wear_btn" +                         tool_tip="Wear seleceted outfit" +                         top="0" +                         width="102" /> +                    <button +                         enabled="false" +                         follows="bottom|left|right" +                         height="23" +                         label="Play" +                         layout="topleft" +                         name="play_btn" +                         left="0" +                         top="0" +                         width="102" /> +                    <button +                         enabled="false" +                         follows="bottom|left|right" +                         height="23" +                         label="Teleport" +                         layout="topleft" +                         left="0" +                         name="teleport_btn" +                         tool_tip="Teleport to the selected area" +                         top="0" +                         width="102" /> +			    </layout_panel> +			</layout_stack>  		</panel>  	</panel> diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index 49b252174c..4f923f411c 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel +     follows="all"  	 height="570"  	 layout="topleft"  	 name="item properties" @@ -45,7 +46,7 @@  	     top="8"  	     width="18" />      <button -     follows="top|right" +     follows="top|left"       height="24"       image_hover_unselected="BackButton_Over"       image_pressed="BackButton_Press" @@ -69,14 +70,15 @@       value="Item Profile"       width="275" />      	    <text -     follows="top|left" +     follows="top|left|right"       height="13"       layout="topleft"       left="45"       name="origin"       text_color="LtGray_50" +     use_ellipses="true"       value="(Inventory)" -     width="150" /> +     width="275" />  	<panel           follows="all"           height="493" @@ -234,7 +236,7 @@ top_pad="10"  	     <text  			 type="string"  			 length="1" -			 follows="left|top" +			 follows="left|top|right"  			 height="23"  			 layout="topleft"  			 left_delta="78" @@ -244,7 +246,7 @@ top_pad="10"        </text>  	 <panel           border="false" -         follows="left|top" +         follows="left|top|right"           layout="topleft"           mouse_opaque="false"           name="perms_inv" diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 08ba8c13b1..c447a977f0 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -922,7 +922,6 @@ class Linux_i686Manifest(LinuxManifest):              self.path("libcrypto.so.0.9.7")              self.path("libexpat.so.1")              self.path("libssl.so.0.9.7") -            self.path("libuuid.so.1")              self.path("libSDL-1.2.so.0")              self.path("libELFIO.so")              self.path("libopenjpeg.so.1.3.0", "libopenjpeg.so.1.3") diff --git a/install.xml b/install.xml index a47a732d56..3d90c4eed2 100644 --- a/install.xml +++ b/install.xml @@ -891,25 +891,6 @@ anguage Infrstructure (CLI) international standard</string>            </map>          </map>        </map> -      <key>libuuid</key> -      <map> -        <key>copyright</key> -        <string>Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/></string> -        <key>description</key> -        <string>Generates UUIDs under Linux. Originally a part of the ext2fs filesystem. Also see lluuid.cpp for all platforms. Part of the e2fsprogs package.</string> -        <key>license</key> -        <string>lgpl</string> -        <key>packages</key> -        <map> -          <key>linux</key> -          <map> -            <key>md5sum</key> -            <string>91b194aed4b38bc23493b198009a8c6a</string> -            <key>url</key> -            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libuuid-linux-20090417.tar.bz2</uri> -          </map> -        </map> -      </map>        <key>libxml</key>        <map>          <key>license</key>  | 
