diff options
| -rw-r--r-- | indra/llui/lltoolbar.cpp | 61 | ||||
| -rw-r--r-- | indra/llui/lltoolbar.h | 19 | ||||
| -rw-r--r-- | indra/newview/app_settings/settings_per_account.xml | 11 | ||||
| -rw-r--r-- | indra/newview/llfloatertoybox.cpp | 30 | ||||
| -rw-r--r-- | indra/newview/llfloatertoybox.h | 2 | ||||
| -rw-r--r-- | indra/newview/llpanelmaininventory.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/lltoolbarview.cpp | 280 | ||||
| -rw-r--r-- | indra/newview/lltoolbarview.h | 36 | ||||
| -rw-r--r-- | indra/newview/lltransientfloatermgr.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/llviewermenu.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_toybox.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_toolbars.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_viewer.xml | 11 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_status_bar.xml | 15 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/strings.xml | 6 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/widgets/toolbar.xml | 4 | 
16 files changed, 345 insertions, 152 deletions
| diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index b0a072c00e..97dc1e3316 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -113,6 +113,7 @@ LLToolBar::LLToolBar(const LLToolBar::Params& p)  	mHandleDragItemCallback(NULL),  	mHandleDropCallback(NULL),  	mButtonAddSignal(NULL), +	mButtonEnterSignal(NULL),  	mDragAndDropTarget(false)  {  	mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_WITH_TEXT] = p.button_icon_and_text; @@ -123,6 +124,7 @@ LLToolBar::~LLToolBar()  {  	delete mPopupMenuHandle.get();  	delete mButtonAddSignal; +	delete mButtonEnterSignal;  }  void LLToolBar::createContextMenu() @@ -358,6 +360,23 @@ bool LLToolBar::stopCommandInProgress(const LLCommandId& commandId)  	return (command_button != NULL);  } +bool LLToolBar::flashCommand(const LLCommandId& commandId, bool flash) +{ +	LLButton * command_button = NULL; + +	if (commandId != LLCommandId::null) +	{ +		command_id_map::iterator it = mButtonMap.find(commandId.uuid()); +		if (it != mButtonMap.end()) +		{ +			command_button = it->second; +			command_button->setFlashing(flash ? TRUE : FALSE); +		} +	} + +	return (command_button != NULL); +} +  BOOL LLToolBar::handleRightMouseDown(S32 x, S32 y, MASK mask)  {  	LLRect button_panel_rect; @@ -876,8 +895,7 @@ LLToolBarButton* LLToolBar::createButton(const LLCommandId& id)  			button->setCommitCallback(executeParam);  		} - - +		// Set up "is running" query callback  		const std::string& isRunningFunction = commandp->isRunningFunctionName();  		if (isRunningFunction.length() > 0)  		{ @@ -904,12 +922,18 @@ LLToolBarButton* LLToolBar::createButton(const LLCommandId& id)  	return button;  } -boost::signals2::connection LLToolBar::setButtonAddCallback(const button_add_signal_t::slot_type& cb) +boost::signals2::connection LLToolBar::setButtonAddCallback(const button_signal_t::slot_type& cb)  { -	if (!mButtonAddSignal) mButtonAddSignal = new button_add_signal_t(); +	if (!mButtonAddSignal) mButtonAddSignal = new button_signal_t();  	return mButtonAddSignal->connect(cb);  } +boost::signals2::connection LLToolBar::setButtonEnterCallback(const button_signal_t::slot_type& cb) +{ +	if (!mButtonEnterSignal) mButtonEnterSignal = new button_signal_t(); +	return mButtonEnterSignal->connect(cb); +} +  BOOL LLToolBar::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  										EDragAndDropType cargo_type,  										void* cargo_data, @@ -981,8 +1005,6 @@ LLToolBarButton::LLToolBarButton(const Params& p)  	mOriginalImageOverlayColor(p.image_overlay_color),  	mOriginalImageOverlaySelectedColor(p.image_overlay_selected_color)  { -	mButtonFlashRate = 0.0; -	mButtonFlashCount = 0;  }  LLToolBarButton::~LLToolBarButton() @@ -1024,6 +1046,7 @@ BOOL LLToolBarButton::handleHover(S32 x, S32 y, MASK mask)  	{  		handled = LLButton::handleHover(x, y, mask);  	} +  	return handled;  } @@ -1036,6 +1059,12 @@ void LLToolBarButton::onMouseEnter(S32 x, S32 y, MASK mask)  	{  		mNeedsHighlight = TRUE;  	} + +	LLToolBar* parent_toolbar = getParentByType<LLToolBar>(); +	if (parent_toolbar && parent_toolbar->mButtonEnterSignal) +	{ +		(*(parent_toolbar->mButtonEnterSignal))(this); +	}  }  void LLToolBarButton::onMouseCaptureLost() @@ -1084,25 +1113,25 @@ void LLToolBarButton::setEnabled(BOOL enabled)  	}  } -  const std::string LLToolBarButton::getToolTip() const	  {   	std::string tooltip; +  	if (labelIsTruncated() || getCurrentLabel().empty())  	{ -		return LLTrans::getString(LLCommandManager::instance().getCommand(mId)->labelRef()) + " -- " + LLView::getToolTip(); +		tooltip = LLTrans::getString(LLCommandManager::instance().getCommand(mId)->labelRef()) + " -- " + LLView::getToolTip();  	}  	else  	{ -		return LLView::getToolTip(); +		tooltip = LLView::getToolTip();  	} -} - - - - - - +	LLToolBar* parent_toolbar = getParentByType<LLToolBar>(); +	if (parent_toolbar && parent_toolbar->mButtonTooltipSuffix.length() > 0) +	{ +		tooltip = tooltip + "\n(" + parent_toolbar->mButtonTooltipSuffix + ")"; +	} +	return tooltip; +} diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h index 68fc44ee8e..7ceb75aeed 100644 --- a/indra/llui/lltoolbar.h +++ b/indra/llui/lltoolbar.h @@ -120,6 +120,8 @@ namespace LLToolBarEnums  		SIDE_RIGHT,  		SIDE_TOP,  	}; + +	LLLayoutStack::ELayoutOrientation getOrientation(SideType sideType);  }  // NOTE: This needs to occur before Param block declaration for proper compilation. @@ -142,6 +144,7 @@ namespace LLInitParam  class LLToolBar  :	public LLUICtrl  { +	friend class LLToolBarButton;  public:  	struct Params : public LLInitParam::Block<Params, LLUICtrl::Params>  	{ @@ -187,6 +190,7 @@ public:  	bool hasCommand(const LLCommandId& commandId) const;  	bool enableCommand(const LLCommandId& commandId, bool enabled);  	bool stopCommandInProgress(const LLCommandId& commandId); +	bool flashCommand(const LLCommandId& commandId, bool flash);  	void setStartDragCallback(tool_startdrag_callback_t cb)   { mStartDragItemCallback  = cb; }  	void setHandleDragCallback(tool_handledrag_callback_t cb) { mHandleDragItemCallback = cb; } @@ -195,9 +199,13 @@ public:  	LLToolBarButton* createButton(const LLCommandId& id); -	typedef boost::signals2::signal<void (LLView* button)> button_add_signal_t; -	boost::signals2::connection setButtonAddCallback(const button_add_signal_t::slot_type& cb); +	typedef boost::signals2::signal<void (LLView* button)> button_signal_t; +	boost::signals2::connection setButtonAddCallback(const button_signal_t::slot_type& cb); +	boost::signals2::connection setButtonEnterCallback(const button_signal_t::slot_type& cb); + +	void setTooltipButtonSuffix(const std::string& suffix) { mButtonTooltipSuffix = suffix; } +	LLToolBarEnums::SideType getSideType() const { return mSideType; }  	bool hasButtons() const { return !mButtons.empty(); }  	bool isModified() const { return mModified; } @@ -257,9 +265,12 @@ private:  	LLToolBarButton::Params			mButtonParams[LLToolBarEnums::BTNTYPE_COUNT]; -	LLHandle<class LLContextMenu>			mPopupMenuHandle; +	LLHandle<class LLContextMenu>	mPopupMenuHandle; + +	button_signal_t*				mButtonAddSignal; +	button_signal_t*				mButtonEnterSignal; -	button_add_signal_t*			mButtonAddSignal; +	std::string						mButtonTooltipSuffix;  }; diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index d8295ddb87..6ed4480cb1 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -33,6 +33,17 @@          <key>Value</key>              <string />          </map> +    <key>DisplayDestinationsOnInitialRun</key> +        <map> +        <key>Comment</key> +          <string>Display the destinations guide when a user first launches FUI.</string> +        <key>Persist</key> +          <integer>1</integer> +        <key>Type</key> +          <string>Boolean</string> +        <key>Value</key> +          <integer>1</integer> +        </map>      <key>LastInventoryInboxActivity</key>          <map>          <key>Comment</key> diff --git a/indra/newview/llfloatertoybox.cpp b/indra/newview/llfloatertoybox.cpp index 66f644748e..f527937e8f 100644 --- a/indra/newview/llfloatertoybox.cpp +++ b/indra/newview/llfloatertoybox.cpp @@ -63,6 +63,7 @@ BOOL LLFloaterToybox::postBuild()  	mToolBar->setStartDragCallback(boost::bind(LLToolBarView::startDragTool,_1,_2,_3));  	mToolBar->setHandleDragCallback(boost::bind(LLToolBarView::handleDragTool,_1,_2,_3,_4));  	mToolBar->setHandleDropCallback(boost::bind(LLToolBarView::handleDropTool,_1,_2,_3,_4)); +	mToolBar->setButtonEnterCallback(boost::bind(&LLFloaterToybox::onToolBarButtonEnter,this,_1));  	//  	// Sort commands by localized labels so they will appear alphabetized in all languages @@ -105,8 +106,8 @@ void LLFloaterToybox::draw()  	{  		const LLCommandId& id = *it; -		const bool commandOnToolbar = gToolBarView->hasCommand(id); -		mToolBar->enableCommand(id, !commandOnToolbar); +		const bool command_not_present = (gToolBarView->hasCommand(id) == LLToolBarView::TOOLBAR_NONE); +		mToolBar->enableCommand(id, command_not_present);  	}  	LLFloater::draw(); @@ -140,5 +141,30 @@ BOOL LLFloaterToybox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  	return mToolBar->handleDragAndDrop(local_x, local_y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);  } +void LLFloaterToybox::onToolBarButtonEnter(LLView* button) +{ +	std::string suffix = ""; + +	LLCommandId commandId(button->getName()); +	LLCommand* command = LLCommandManager::instance().getCommand(commandId); + +	if (command) +	{ +		S32 command_loc = gToolBarView->hasCommand(commandId); + +		switch(command_loc) +		{ +		case LLToolBarView::TOOLBAR_BOTTOM:	suffix = LLTrans::getString("Toolbar_Bottom_Tooltip");	break; +		case LLToolBarView::TOOLBAR_LEFT:	suffix = LLTrans::getString("Toolbar_Left_Tooltip");	break; +		case LLToolBarView::TOOLBAR_RIGHT:	suffix = LLTrans::getString("Toolbar_Right_Tooltip");	break; + +		default: +			break; +		} +	} + +	mToolBar->setTooltipButtonSuffix(suffix); +} +  // eof diff --git a/indra/newview/llfloatertoybox.h b/indra/newview/llfloatertoybox.h index 62bf68680d..6f0275b8fe 100644 --- a/indra/newview/llfloatertoybox.h +++ b/indra/newview/llfloatertoybox.h @@ -52,6 +52,8 @@ public:  protected:  	void onBtnRestoreDefaults(); +	void onToolBarButtonEnter(LLView* button); +  public:  	LLToolBar *	mToolBar;  }; diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index d6c407d548..9944b51902 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -111,7 +111,7 @@ LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p)  	mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH));  	mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND));  	mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLPanelMainInventory::doCreate, this, _2)); - 	mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLPanelMainInventory::newWindow, this)); + 	//mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLPanelMainInventory::newWindow, this));  	mCommitCallbackRegistrar.add("Inventory.ShowFilters", boost::bind(&LLPanelMainInventory::toggleFindOptions, this));  	mCommitCallbackRegistrar.add("Inventory.ResetFilters", boost::bind(&LLPanelMainInventory::resetFilters, this));  	mCommitCallbackRegistrar.add("Inventory.SetSortBy", boost::bind(&LLPanelMainInventory::setSortBy, this, _2)); diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp index f481455834..8f4f7d405f 100644 --- a/indra/newview/lltoolbarview.cpp +++ b/indra/newview/lltoolbarview.cpp @@ -69,13 +69,14 @@ LLToolBarView::ToolbarSet::ToolbarSet()  LLToolBarView::LLToolBarView(const LLToolBarView::Params& p)  :	LLUICtrl(p), -	mToolbarLeft(NULL), -	mToolbarRight(NULL), -	mToolbarBottom(NULL),  	mDragStarted(false),  	mDragToolbarButton(NULL),  	mToolbarsLoaded(false)  { +	for (S32 i = 0; i < TOOLBAR_COUNT; i++) +	{ +		mToolbars[i] = NULL; +	}  }  void LLToolBarView::initFromParams(const LLToolBarView::Params& p) @@ -91,49 +92,99 @@ LLToolBarView::~LLToolBarView()  BOOL LLToolBarView::postBuild()  { -	mToolbarLeft   = getChild<LLToolBar>("toolbar_left"); -	mToolbarRight  = getChild<LLToolBar>("toolbar_right"); -	mToolbarBottom = getChild<LLToolBar>("toolbar_bottom"); - -	mToolbarLeft->setStartDragCallback(boost::bind(LLToolBarView::startDragTool,_1,_2,_3)); -	mToolbarLeft->setHandleDragCallback(boost::bind(LLToolBarView::handleDragTool,_1,_2,_3,_4)); -	mToolbarLeft->setHandleDropCallback(boost::bind(LLToolBarView::handleDropTool,_1,_2,_3,_4)); -	mToolbarLeft->setButtonAddCallback(boost::bind(LLToolBarView::onToolBarButtonAdded, _1)); -	 -	mToolbarRight->setStartDragCallback(boost::bind(LLToolBarView::startDragTool,_1,_2,_3)); -	mToolbarRight->setHandleDragCallback(boost::bind(LLToolBarView::handleDragTool,_1,_2,_3,_4)); -	mToolbarRight->setHandleDropCallback(boost::bind(LLToolBarView::handleDropTool,_1,_2,_3,_4)); -	mToolbarRight->setButtonAddCallback(boost::bind(LLToolBarView::onToolBarButtonAdded, _1)); -	 -	mToolbarBottom->setStartDragCallback(boost::bind(LLToolBarView::startDragTool,_1,_2,_3)); -	mToolbarBottom->setHandleDragCallback(boost::bind(LLToolBarView::handleDragTool,_1,_2,_3,_4)); -	mToolbarBottom->setHandleDropCallback(boost::bind(LLToolBarView::handleDropTool,_1,_2,_3,_4)); -	mToolbarBottom->setButtonAddCallback(boost::bind(LLToolBarView::onToolBarButtonAdded, _1)); +	mToolbars[TOOLBAR_LEFT]   = getChild<LLToolBar>("toolbar_left"); +	mToolbars[TOOLBAR_RIGHT]  = getChild<LLToolBar>("toolbar_right"); +	mToolbars[TOOLBAR_BOTTOM] = getChild<LLToolBar>("toolbar_bottom"); + +	for (int i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) +	{ +		mToolbars[i]->setStartDragCallback(boost::bind(LLToolBarView::startDragTool,_1,_2,_3)); +		mToolbars[i]->setHandleDragCallback(boost::bind(LLToolBarView::handleDragTool,_1,_2,_3,_4)); +		mToolbars[i]->setHandleDropCallback(boost::bind(LLToolBarView::handleDropTool,_1,_2,_3,_4)); +		mToolbars[i]->setButtonAddCallback(boost::bind(LLToolBarView::onToolBarButtonAdded,_1)); +	}  	LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&handleLoginToolbarSetup));  	return TRUE;  } -bool LLToolBarView::hasCommand(const LLCommandId& commandId) const +S32 LLToolBarView::hasCommand(const LLCommandId& commandId) const +{ +	S32 command_location = TOOLBAR_NONE; + +	for (S32 loc = TOOLBAR_FIRST; loc <= TOOLBAR_LAST; loc++) +	{ +		if (mToolbars[loc]->hasCommand(commandId)) +		{ +			command_location = loc; +			break; +		} +	} + +	return command_location; +} + +S32 LLToolBarView::addCommand(const LLCommandId& commandId, EToolBarLocation toolbar, int rank) +{ +	int old_rank; +	removeCommand(commandId, old_rank); + +	S32 command_location = mToolbars[toolbar]->addCommand(commandId, rank); + +	return command_location; +} + +S32 LLToolBarView::removeCommand(const LLCommandId& commandId, int& rank)  { -	bool has_command = false; -	if (mToolbarLeft && !has_command) +	S32 command_location = hasCommand(commandId); +	rank = LLToolBar::RANK_NONE; + +	if (command_location != TOOLBAR_NONE)  	{ -		has_command = mToolbarLeft->hasCommand(commandId); +		rank = mToolbars[command_location]->removeCommand(commandId);  	} -	if (mToolbarRight && !has_command) + +	return command_location; +} + +S32 LLToolBarView::enableCommand(const LLCommandId& commandId, bool enabled) +{ +	S32 command_location = hasCommand(commandId); + +	if (command_location != TOOLBAR_NONE)  	{ -		has_command = mToolbarRight->hasCommand(commandId); +		mToolbars[command_location]->enableCommand(commandId, enabled);  	} -	if (mToolbarBottom && !has_command) + +	return command_location; +} + +S32 LLToolBarView::stopCommandInProgress(const LLCommandId& commandId) +{ +	S32 command_location = hasCommand(commandId); + +	if (command_location != TOOLBAR_NONE)  	{ -		has_command = mToolbarBottom->hasCommand(commandId); +		mToolbars[command_location]->stopCommandInProgress(commandId);  	} -	return has_command; + +	return command_location;  } -bool LLToolBarView::addCommand(const LLCommandId& command, LLToolBar* toolbar) +S32 LLToolBarView::flashCommand(const LLCommandId& commandId, bool flash) +{ +	S32 command_location = hasCommand(commandId); + +	if (command_location != TOOLBAR_NONE) +	{ +		mToolbars[command_location]->flashCommand(commandId, flash); +	} + +	return command_location; +} + +bool LLToolBarView::addCommandInternal(const LLCommandId& command, LLToolBar* toolbar)  {  	LLCommandManager& mgr = LLCommandManager::instance();  	if (mgr.getCommand(command)) @@ -151,6 +202,7 @@ bool LLToolBarView::addCommand(const LLCommandId& command, LLToolBar* toolbar)  bool LLToolBarView::loadToolbars(bool force_default)  {  	LLToolBarView::ToolbarSet toolbar_set; +	bool err = false;  	// Load the toolbars.xml file  	std::string toolbar_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "toolbars.xml"); @@ -168,80 +220,90 @@ bool LLToolBarView::loadToolbars(bool force_default)  	if(!LLXMLNode::parseFile(toolbar_file, root, NULL))  	{  		llwarns << "Unable to load toolbars from file: " << toolbar_file << llendl; -		return false; +		err = true;  	} -	if(!root->hasName("toolbars")) +	 +	if (!err && !root->hasName("toolbars"))  	{  		llwarns << toolbar_file << " is not a valid toolbars definition file" << llendl; -		return false; +		err = true;  	}  	// Parse the toolbar settings  	LLXUIParser parser; +	if (!err) +	{  	parser.readXUI(root, toolbar_set, toolbar_file); -	if (!toolbar_set.validateBlock()) +	} +	if (!err && !toolbar_set.validateBlock())  	{ -		llerrs << "Unable to validate toolbars from file: " << toolbar_file << llendl; -		return false; +		llwarns << "Unable to validate toolbars from file: " << toolbar_file << llendl; +		err = true;  	} -	// Clear the toolbars now before adding the loaded commands and settings -	if (mToolbarLeft) +	if (err)  	{ -		mToolbarLeft->clearCommandsList(); +		if (force_default) +		{ +			llerrs << "Unable to load toolbars from default file : " << toolbar_file << llendl; +		return false;  	} -	if (mToolbarRight) -	{ -		mToolbarRight->clearCommandsList(); +		// Try to load the default toolbars +		return loadToolbars(true);  	} -	if (mToolbarBottom) +	 +	// Clear the toolbars now before adding the loaded commands and settings +	for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++)  	{ -		mToolbarBottom->clearCommandsList(); +		if (mToolbars[i]) +		{ +			mToolbars[i]->clearCommandsList(); +		}  	}  	// Add commands to each toolbar -	if (toolbar_set.left_toolbar.isProvided() && mToolbarLeft) +	if (toolbar_set.left_toolbar.isProvided() && mToolbars[TOOLBAR_LEFT])  	{  		if (toolbar_set.left_toolbar.button_display_mode.isProvided())  		{  			LLToolBarEnums::ButtonType button_type = toolbar_set.left_toolbar.button_display_mode; -			mToolbarLeft->setButtonType(button_type); +			mToolbars[TOOLBAR_LEFT]->setButtonType(button_type);  		} -		BOOST_FOREACH(const LLCommandId::Params& command_name_param, toolbar_set.left_toolbar.commands) +		BOOST_FOREACH(const LLCommandId::Params& command_params, toolbar_set.left_toolbar.commands)  		{ -			if (addCommand(LLCommandId(command_name_param), mToolbarLeft) == false) +			if (addCommandInternal(LLCommandId(command_params), mToolbars[TOOLBAR_LEFT]))  			{ -				llwarns << "Error adding command '" << command_name_param.name() << "' to left toolbar." << llendl; +				llwarns << "Error adding command '" << command_params.name() << "' to left toolbar." << llendl;  			}  		}  	} -	if (toolbar_set.right_toolbar.isProvided() && mToolbarRight) +	if (toolbar_set.right_toolbar.isProvided() && mToolbars[TOOLBAR_RIGHT])  	{  		if (toolbar_set.right_toolbar.button_display_mode.isProvided())  		{  			LLToolBarEnums::ButtonType button_type = toolbar_set.right_toolbar.button_display_mode; -			mToolbarRight->setButtonType(button_type); +			mToolbars[TOOLBAR_RIGHT]->setButtonType(button_type);  		} -		BOOST_FOREACH(const LLCommandId::Params& command_name_param, toolbar_set.right_toolbar.commands) +		BOOST_FOREACH(const LLCommandId::Params& command_params, toolbar_set.right_toolbar.commands)  		{ -			if (addCommand(LLCommandId(command_name_param), mToolbarRight) == false) +			if (addCommandInternal(LLCommandId(command_params), mToolbars[TOOLBAR_RIGHT]))  			{ -				llwarns << "Error adding command '" << command_name_param.name() << "' to right toolbar." << llendl; +				llwarns << "Error adding command '" << command_params.name() << "' to right toolbar." << llendl;  			}  		}  	} -	if (toolbar_set.bottom_toolbar.isProvided() && mToolbarBottom) +	if (toolbar_set.bottom_toolbar.isProvided() && mToolbars[TOOLBAR_BOTTOM])  	{  		if (toolbar_set.bottom_toolbar.button_display_mode.isProvided())  		{  			LLToolBarEnums::ButtonType button_type = toolbar_set.bottom_toolbar.button_display_mode; -			mToolbarBottom->setButtonType(button_type); +			mToolbars[TOOLBAR_BOTTOM]->setButtonType(button_type);  		} -		BOOST_FOREACH(const LLCommandId::Params& command_name_param, toolbar_set.bottom_toolbar.commands) +		BOOST_FOREACH(const LLCommandId::Params& command_params, toolbar_set.bottom_toolbar.commands)  		{ -			if (addCommand(LLCommandId(command_name_param), mToolbarBottom) == false) +			if (addCommandInternal(LLCommandId(command_params), mToolbars[TOOLBAR_BOTTOM]))  			{ -				llwarns << "Error adding command '" << command_name_param.name() << "' to bottom toolbar." << llendl; +				llwarns << "Error adding command '" << command_params.name() << "' to bottom toolbar." << llendl;  			}  		}  	} @@ -273,20 +335,20 @@ void LLToolBarView::saveToolbars() const  	// Build the parameter tree from the toolbar data  	LLToolBarView::ToolbarSet toolbar_set; -	if (mToolbarLeft) +	if (mToolbars[TOOLBAR_LEFT])  	{ -		toolbar_set.left_toolbar.button_display_mode = mToolbarLeft->getButtonType(); -		addToToolset(mToolbarLeft->getCommandsList(),toolbar_set.left_toolbar); +		toolbar_set.left_toolbar.button_display_mode = mToolbars[TOOLBAR_LEFT]->getButtonType(); +		addToToolset(mToolbars[TOOLBAR_LEFT]->getCommandsList(), toolbar_set.left_toolbar);  	} -	if (mToolbarRight) +	if (mToolbars[TOOLBAR_RIGHT])  	{ -		toolbar_set.right_toolbar.button_display_mode = mToolbarRight->getButtonType(); -		addToToolset(mToolbarRight->getCommandsList(),toolbar_set.right_toolbar); +		toolbar_set.right_toolbar.button_display_mode = mToolbars[TOOLBAR_RIGHT]->getButtonType(); +		addToToolset(mToolbars[TOOLBAR_RIGHT]->getCommandsList(), toolbar_set.right_toolbar);  	} -	if (mToolbarBottom) +	if (mToolbars[TOOLBAR_BOTTOM])  	{ -		toolbar_set.bottom_toolbar.button_display_mode = mToolbarBottom->getButtonType(); -		addToToolset(mToolbarBottom->getCommandsList(),toolbar_set.bottom_toolbar); +		toolbar_set.bottom_toolbar.button_display_mode = mToolbars[TOOLBAR_BOTTOM]->getButtonType(); +		addToToolset(mToolbars[TOOLBAR_BOTTOM]->getCommandsList(), toolbar_set.bottom_toolbar);  	}  	// Serialize the parameter tree @@ -345,33 +407,36 @@ void LLToolBarView::onToolBarButtonAdded(LLView* button)  void LLToolBarView::draw()  { -	//LLPanel* sizer_left = getChild<LLPanel>("sizer_left"); +	LLRect toolbar_rects[TOOLBAR_COUNT]; -	LLRect bottom_rect, left_rect, right_rect; - -	if (mToolbarBottom)  -	{ -		mToolbarBottom->getParent()->reshape(mToolbarBottom->getParent()->getRect().getWidth(), mToolbarBottom->getRect().getHeight()); -		mToolbarBottom->localRectToOtherView(mToolbarBottom->getLocalRect(), &bottom_rect, this); -	} -	if (mToolbarLeft)    +	for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++)  	{ -		mToolbarLeft->getParent()->reshape(mToolbarLeft->getRect().getWidth(), mToolbarLeft->getParent()->getRect().getHeight()); -		mToolbarLeft->localRectToOtherView(mToolbarLeft->getLocalRect(), &left_rect, this); -	} -	if (mToolbarRight)   -	{ -		mToolbarRight->getParent()->reshape(mToolbarRight->getRect().getWidth(), mToolbarRight->getParent()->getRect().getHeight()); -		mToolbarRight->localRectToOtherView(mToolbarRight->getLocalRect(), &right_rect, this); +		if (mToolbars[i]) +		{ +			LLLayoutStack::ELayoutOrientation orientation = LLToolBarEnums::getOrientation(mToolbars[i]->getSideType()); + +			if (orientation == LLLayoutStack::HORIZONTAL) +			{ +				mToolbars[i]->getParent()->reshape(mToolbars[i]->getParent()->getRect().getWidth(), mToolbars[i]->getRect().getHeight()); +			} +			else +			{ +				mToolbars[i]->getParent()->reshape(mToolbars[i]->getRect().getWidth(), mToolbars[i]->getParent()->getRect().getHeight()); +			} + +			mToolbars[i]->localRectToOtherView(mToolbars[i]->getLocalRect(), &toolbar_rects[i], this); +		}  	}  	// Draw drop zones if drop of a tool is active  	if (isToolDragged())  	{  		LLColor4 drop_color = LLUIColorTable::instance().getColor( "ToolbarDropZoneColor" ); -		gl_rect_2d(bottom_rect, drop_color, TRUE); -		gl_rect_2d(left_rect, drop_color, TRUE); -		gl_rect_2d(right_rect, drop_color, TRUE); + +		for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) +		{ +			gl_rect_2d(toolbar_rects[i], drop_color, TRUE); +		}  	}  	LLUICtrl::draw(); @@ -383,9 +448,9 @@ void LLToolBarView::draw()  // ---------------------------------------- -void LLToolBarView::startDragTool(S32 x, S32 y, LLToolBarButton* button) +void LLToolBarView::startDragTool(S32 x, S32 y, LLToolBarButton* toolbarButton)  { -	resetDragTool(button); +	resetDragTool(toolbarButton);  	// Flag the tool dragging but don't start it yet  	LLToolDragAndDrop::getInstance()->setDragStart( x, y ); @@ -411,9 +476,7 @@ BOOL LLToolBarView::handleDragTool( S32 x, S32 y, const LLUUID& uuid, LLAssetTyp  			// Second, stop the command if it is in progress and requires stopping!  			LLCommandId command_id = LLCommandId(uuid); -			gToolBarView->mToolbarLeft->stopCommandInProgress(command_id); -			gToolBarView->mToolbarRight->stopCommandInProgress(command_id); -			gToolBarView->mToolbarBottom->stopCommandInProgress(command_id); +			gToolBarView->stopCommandInProgress(command_id);  			gToolBarView->mDragStarted = true;  			return TRUE; @@ -444,10 +507,10 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t  		{  			// Suppress the command from the toolbars (including the one it's dropped in,   			// this will handle move position). -			bool command_present = gToolBarView->hasCommand(command_id); +			S32 old_toolbar_loc = gToolBarView->hasCommand(command_id);  			LLToolBar* old_toolbar = NULL; -			if (command_present) +			if (old_toolbar_loc != TOOLBAR_NONE)  			{  				llassert(gToolBarView->mDragToolbarButton);  				old_toolbar = gToolBarView->mDragToolbarButton->getParentByType<LLToolBar>(); @@ -457,9 +520,8 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t  				}  				else  				{ -					gToolBarView->mToolbarBottom->removeCommand(command_id); -					gToolBarView->mToolbarLeft->removeCommand(command_id); -					gToolBarView->mToolbarRight->removeCommand(command_id); +					int old_rank = LLToolBar::RANK_NONE; +					gToolBarView->removeCommand(command_id, old_rank);  				}  			} @@ -483,27 +545,29 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t  	return handled;  } -void LLToolBarView::resetDragTool(LLToolBarButton* button) +void LLToolBarView::resetDragTool(LLToolBarButton* toolbarButton)  {  	// Clear the saved command, toolbar and rank  	gToolBarView->mDragStarted = false; -	gToolBarView->mDragToolbarButton = button; +	gToolBarView->mDragToolbarButton = toolbarButton;  }  void LLToolBarView::setToolBarsVisible(bool visible)  { -	mToolbarBottom->getParent()->setVisible(visible); -	mToolbarLeft->getParent()->setVisible(visible); -	mToolbarRight->getParent()->setVisible(visible); +	for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) +	{ +		mToolbars[i]->getParent()->setVisible(visible); +	}  }  bool LLToolBarView::isModified() const  {  	bool modified = false; -	modified |= mToolbarBottom->isModified(); -	modified |= mToolbarLeft->isModified(); -	modified |= mToolbarRight->isModified(); +	for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) +	{ +		modified |= mToolbars[i]->isModified(); +	}  	return modified;  } @@ -516,9 +580,11 @@ bool LLToolBarView::isModified() const  void handleLoginToolbarSetup()  {  	// Open the destinations guide by default on first login, per Rhett -	if (gSavedSettings.getBOOL("FirstLoginThisInstall") || gAgent.isFirstLogin()) +	if (gSavedPerAccountSettings.getBOOL("DisplayDestinationsOnInitialRun") || gAgent.isFirstLogin())  	{  		LLFloaterReg::showInstance("destinations"); + +		gSavedPerAccountSettings.setBOOL("DisplayDestinationsOnInitialRun", FALSE);  	}  } diff --git a/indra/newview/lltoolbarview.h b/indra/newview/lltoolbarview.h index ea14e471cd..3dc8954abe 100644 --- a/indra/newview/lltoolbarview.h +++ b/indra/newview/lltoolbarview.h @@ -39,6 +39,19 @@ class LLUICtrlFactory;  class LLToolBarView : public LLUICtrl  {  public: +	typedef enum +	{ +		TOOLBAR_NONE = 0, +		TOOLBAR_LEFT, +		TOOLBAR_RIGHT, +		TOOLBAR_BOTTOM, + +		TOOLBAR_COUNT, + +		TOOLBAR_FIRST = TOOLBAR_LEFT, +		TOOLBAR_LAST = TOOLBAR_BOTTOM, +	} EToolBarLocation; +  	// Xui structure of the toolbar panel  	struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> {}; @@ -52,6 +65,7 @@ public:  	{  		Mandatory<LLToolBarEnums::ButtonType>	button_display_mode;  		Multiple<LLCommandId::Params>	commands; +  		Toolbar();  	};  	struct ToolbarSet : public LLInitParam::Block<ToolbarSet> @@ -59,6 +73,7 @@ public:  		Optional<Toolbar>	left_toolbar,  							right_toolbar,  							bottom_toolbar; +  		ToolbarSet();  	}; @@ -66,9 +81,16 @@ public:  	virtual ~LLToolBarView();  	virtual BOOL postBuild();  	virtual void draw(); +  	// Toolbar view interface with the rest of the world -	// Checks if the commandId is being used somewhere in one of the toolbars -	bool hasCommand(const LLCommandId& commandId) const; +	// Checks if the commandId is being used somewhere in one of the toolbars, returns EToolBarLocation +	S32 hasCommand(const LLCommandId& commandId) const; +	S32 addCommand(const LLCommandId& commandId, EToolBarLocation toolbar, int rank = LLToolBar::RANK_NONE); +	S32 removeCommand(const LLCommandId& commandId, int& rank);	// Sets the rank the removed command was at, RANK_NONE if not found +	S32 enableCommand(const LLCommandId& commandId, bool enabled); +	S32 stopCommandInProgress(const LLCommandId& commandId); +	S32 flashCommand(const LLCommandId& commandId, bool flash); +  	// Loads the toolbars from the existing user or default settings  	bool loadToolbars(bool force_default = false);	// return false if load fails @@ -76,10 +98,10 @@ public:  	static bool loadDefaultToolbars(); -	static void startDragTool(S32 x, S32 y, LLToolBarButton* button); +	static void startDragTool(S32 x, S32 y, LLToolBarButton* toolbarButton);  	static BOOL handleDragTool(S32 x, S32 y, const LLUUID& uuid, LLAssetType::EType type);  	static BOOL handleDropTool(void* cargo_data, S32 x, S32 y, LLToolBar* toolbar); -	static void resetDragTool(LLToolBarButton* button); +	static void resetDragTool(LLToolBarButton* toolbarButton);  	bool isModified() const; @@ -91,15 +113,13 @@ protected:  private:  	void	saveToolbars() const; -	bool	addCommand(const LLCommandId& commandId, LLToolBar*	toolbar); +	bool	addCommandInternal(const LLCommandId& commandId, LLToolBar*	toolbar);  	void	addToToolset(command_id_list_t& command_list, Toolbar& toolbar) const;  	static void	onToolBarButtonAdded(LLView* button);  	// Pointers to the toolbars handled by the toolbar view -	LLToolBar*	mToolbarLeft; -	LLToolBar*	mToolbarRight; -	LLToolBar*	mToolbarBottom; +	LLToolBar*  mToolbars[TOOLBAR_COUNT];  	bool		mToolbarsLoaded;  	bool				mDragStarted; diff --git a/indra/newview/lltransientfloatermgr.cpp b/indra/newview/lltransientfloatermgr.cpp index d15efb048b..3d68c10489 100644 --- a/indra/newview/lltransientfloatermgr.cpp +++ b/indra/newview/lltransientfloatermgr.cpp @@ -104,6 +104,8 @@ void LLTransientFloaterMgr::hideTransientFloaters(S32 x, S32 y)  bool LLTransientFloaterMgr::isControlClicked(ETransientGroup group, controls_set_t& set, S32 x, S32 y)  { +	std::list< LLHandle<LLView> > dead_handles; +	  	bool res = true;  	for (controls_set_t::iterator it = set.begin(); it  			!= set.end(); it++) @@ -113,7 +115,7 @@ bool LLTransientFloaterMgr::isControlClicked(ETransientGroup group, controls_set  		LLHandle<LLView> handle = *it;  		if (handle.isDead())  		{ -			mGroupControls.find(group)->second.erase(handle); +			dead_handles.push_back(handle);  			continue;  		} @@ -132,6 +134,13 @@ bool LLTransientFloaterMgr::isControlClicked(ETransientGroup group, controls_set  			break;  		}  	} + +	for (std::list< LLHandle<LLView> >::iterator it = dead_handles.begin(); it != dead_handles.end(); ++it) +	{ +		LLHandle<LLView> handle = *it; +		mGroupControls.find(group)->second.erase(handle); +	} +	  	return res;  } diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 2345fbfd6a..e32716eca4 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -7962,6 +7962,9 @@ void initialize_menus()  	view_listener_t::addEnable(new LLUploadCostCalculator(), "Upload.CalculateCosts"); + +	commit.add("Inventory.NewWindow", boost::bind(&LLFloaterInventory::showAgentInventory)); +  	// Agent  	commit.add("Agent.toggleFlying", boost::bind(&LLAgent::toggleFlying));  	enable.add("Agent.enableFlying", boost::bind(&LLAgent::enableFlying)); @@ -8337,6 +8340,8 @@ void initialize_menus()  	view_listener_t::addMenu(new LLGoToObject(), "GoToObject");  	commit.add("PayObject", boost::bind(&handle_give_money_dialog)); +	commit.add("Inventory.NewWindow", boost::bind(&LLFloaterInventory::showAgentInventory)); +  	enable.add("EnablePayObject", boost::bind(&enable_pay_object));  	enable.add("EnablePayAvatar", boost::bind(&enable_pay_avatar));  	enable.add("EnableEdit", boost::bind(&enable_object_edit)); diff --git a/indra/newview/skins/default/xui/en/floater_toybox.xml b/indra/newview/skins/default/xui/en/floater_toybox.xml index c7e09bf45e..ef3951a1cd 100644 --- a/indra/newview/skins/default/xui/en/floater_toybox.xml +++ b/indra/newview/skins/default/xui/en/floater_toybox.xml @@ -13,7 +13,7 @@    open_positioning="centered"    save_rect="true"    single_instance="true" -  title="CUSTOMIZE TOOLBARS" +  title="TOOLBAR BUTTONS"    width="650">    <text      follows="left|top" diff --git a/indra/newview/skins/default/xui/en/menu_toolbars.xml b/indra/newview/skins/default/xui/en/menu_toolbars.xml index 59912b5503..7384114d7d 100644 --- a/indra/newview/skins/default/xui/en/menu_toolbars.xml +++ b/indra/newview/skins/default/xui/en/menu_toolbars.xml @@ -3,7 +3,7 @@        layout="topleft"        name="Toolbars Popup"        visible="false"> -  <menu_item_call label="Choose buttons..." +  <menu_item_call label="Toolbar buttons..."                    layout="topleft"                    name="Chose Buttons">      <menu_item_call.on_click function="Floater.Show" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 63e50b0b9f..33e705cfd2 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -43,6 +43,15 @@           function="Floater.Toggle"           parameter="inventory" />        </menu_item_check> +      <menu_item_call +       label="New Inventory Window" +       name="NewInventoryWindow" +       shortcut="control|shift|I" +       visible="false"> +        <menu_item_call.on_click +         function="Inventory.NewWindow" +         parameter="" /> +      </menu_item_call>        <menu_item_check         label="Gestures..."         name="Gestures" @@ -166,7 +175,7 @@               parameter="preferences" />          </menu_item_call>           <menu_item_call -         label="Toolbars..." +         label="Toolbar buttons..."           name="Toolbars"           shortcut="control|T">              <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 422bbada7f..b321e0162e 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -2,7 +2,7 @@  <panel   background_opaque="true"   background_visible="true" - bg_opaque_color="MouseGray" + bg_opaque_color="DkGray"   chrome="true"   follows="top|right"   height="19" @@ -38,23 +38,20 @@      left="-370"      width="160"      top="1" -    follows="right|top"  -    name="balance_bg"  -    bg_visible="true" -    background_opaque="true"  -    bg_opaque_image="bevel_background"> +    follows="right|top" +    name="balance_bg">      <text       halign="center"       font="SansSerifSmall"       follows="all"       height="18" -     left="0"  +     left="0"       name="balance"       tool_tip="Click to refresh your L$ balance"       v_pad="4"       top="0" -     wrap="false"  -     value="L$20"  +     wrap="false" +     value="L$20"       width="40" />      <button       halign="center" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 308208869d..5e5bc0bde0 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3705,7 +3705,11 @@ Try enclosing path to the editor with double quotes.    <string name="Command_View_Tooltip">Changing camera angle</string>    <string name="Command_Voice_Tooltip">Volume controls for calls and people near you in world</string> - <!-- Mesh UI terms --> +  <string name="Toolbar_Bottom_Tooltip">currently in your bottom toolbar</string> +  <string name="Toolbar_Left_Tooltip"  >currently in your left toolbar</string> +  <string name="Toolbar_Right_Tooltip" >currently in your right toolbar</string> + +  <!-- Mesh UI terms -->    <string name="Retain%">Retain%</string>    <string name="Detail">Detail</string>    <string name="Better Detail">Better Detail</string> diff --git a/indra/newview/skins/default/xui/en/widgets/toolbar.xml b/indra/newview/skins/default/xui/en/widgets/toolbar.xml index 7e7a9c61cf..0aa478ace9 100644 --- a/indra/newview/skins/default/xui/en/widgets/toolbar.xml +++ b/indra/newview/skins/default/xui/en/widgets/toolbar.xml @@ -30,6 +30,8 @@                          image_overlay_alignment="left"                          use_ellipses="true"                          auto_resize="true" +                        button_flash_count="99999" +                        button_flash_rate="1.0"                          flash_color="EmphasisColor"/>    <button_icon pad_left="10"                 pad_right="10" @@ -49,5 +51,7 @@                 chrome="true"                 use_ellipses="true"                 auto_resize="true" +               button_flash_count="99999" +               button_flash_rate="1.0"                 flash_color="EmphasisColor"/>  </toolbar> | 
