diff options
| author | Leslie Linden <leslie@lindenlab.com> | 2011-09-26 17:38:10 -0700 | 
|---|---|---|
| committer | Leslie Linden <leslie@lindenlab.com> | 2011-09-26 17:38:10 -0700 | 
| commit | 53a486649381af53d21de28aced388bc2aacac0f (patch) | |
| tree | 9b7378da2c05e9dbd0c7a594b12d242e87ddf0dd /indra | |
| parent | bb1776de6865715b2dd96185140d35e46d63c837 (diff) | |
EXP-1205 PROGRESS -- As a User, I want a toybox which will contain all buttons that I can d&d into the toolbars
* Command buttons are now enabled/disabled in toybox based on whether or not the
  LLToolBarView has them anywhere.
* Commands now have argument to specify whether or not they should be in the
  toybox.
* LLCommandId is now used a universal reference for commands.
Reviewed by Richard.
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llui/llcommandmanager.cpp | 24 | ||||
| -rw-r--r-- | indra/llui/llcommandmanager.h | 50 | ||||
| -rw-r--r-- | indra/llui/lltoolbar.cpp | 71 | ||||
| -rw-r--r-- | indra/llui/lltoolbar.h | 11 | ||||
| -rw-r--r-- | indra/llui/lltoolbarview.cpp | 8 | ||||
| -rw-r--r-- | indra/llui/lltoolbarview.h | 3 | ||||
| -rw-r--r-- | indra/newview/app_settings/commands.xml | 23 | ||||
| -rw-r--r-- | indra/newview/llfloatertoybox.cpp | 9 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_toybox.xml | 21 | 
9 files changed, 167 insertions, 53 deletions
| diff --git a/indra/llui/llcommandmanager.cpp b/indra/llui/llcommandmanager.cpp index 6be616b980..62e1d186f5 100644 --- a/indra/llui/llcommandmanager.cpp +++ b/indra/llui/llcommandmanager.cpp @@ -38,11 +38,18 @@  // +// LLCommandId class +// + +const LLCommandId LLCommandId::null("null command"); + +//  // LLCommand class  //  LLCommand::Params::Params()  	: function("function") +	, available_in_toybox("available_in_toybox", false)  	, icon("icon")  	, label_ref("label_ref")  	, name("name") @@ -53,9 +60,10 @@ LLCommand::Params::Params()  LLCommand::LLCommand(const LLCommand::Params& p)  	: mFunction(p.function) +	, mAvailableInToybox(p.available_in_toybox)  	, mIcon(p.icon) +	, mIdentifier(p.name)  	, mLabelRef(p.label_ref) -	, mName(p.name)  	, mParam(p.param)  	, mTooltipRef(p.tooltip_ref)  { @@ -90,26 +98,26 @@ LLCommand * LLCommandManager::getCommand(U32 commandIndex)  	return mCommands[commandIndex];  } -LLCommand * LLCommandManager::getCommand(const std::string& commandName) +LLCommand * LLCommandManager::getCommand(const LLCommandId& commandId)  { -	LLCommand * command_name_match = NULL; +	LLCommand * command_match = NULL; -	CommandIndexMap::const_iterator found = mCommandIndices.find(commandName); +	CommandIndexMap::const_iterator found = mCommandIndices.find(commandId);  	if (found != mCommandIndices.end())  	{ -		command_name_match = mCommands[found->second]; +		command_match = mCommands[found->second];  	} -	return command_name_match; +	return command_match;  }  void LLCommandManager::addCommand(LLCommand * command)  { -	mCommandIndices[command->name()] = mCommands.size(); +	mCommandIndices[command->id()] = mCommands.size();  	mCommands.push_back(command); -	llinfos << "Successfully added command: " << command->name() << llendl; +	llinfos << "Successfully added command: " << command->id().name() << llendl;  }  //static diff --git a/indra/llui/llcommandmanager.h b/indra/llui/llcommandmanager.h index 24378ecd62..5b53b65500 100644 --- a/indra/llui/llcommandmanager.h +++ b/indra/llui/llcommandmanager.h @@ -31,11 +31,50 @@  #include "llsingleton.h" +class LLCommand; +class LLCommandManager; + + +class LLCommandId +{ +public: +	friend LLCommand; +	friend LLCommandManager; + +	LLCommandId(const std::string& name) +		: mName(name) +	{ +	} + +	const std::string& name() const { return mName; } + +	bool operator!=(const LLCommandId& command) const +	{ +		return (mName != command.mName); +	} + +	bool operator==(const LLCommandId& command) const +	{ +		return (mName == command.mName); +	} + +	bool operator<(const LLCommandId& command) const +	{ +		return (mName < command.mName); +	} + +	static const LLCommandId null; + +private: +	std::string mName; +}; +  class LLCommand  {  public:  	struct Params : public LLInitParam::Block<Params>  	{ +		Mandatory<bool>			available_in_toybox;  		Mandatory<std::string>	function;  		Mandatory<std::string>	icon;  		Mandatory<std::string>	label_ref; @@ -48,18 +87,21 @@ public:  	LLCommand(const LLCommand::Params& p); +	const bool availableInToybox() const { return mAvailableInToybox; }  	const std::string& functionName() const { return mFunction; }  	const std::string& icon() const { return mIcon; } +	const LLCommandId& id() const { return mIdentifier; }  	const std::string& labelRef() const { return mLabelRef; } -	const std::string& name() const { return mName; }  	const std::string& param() const { return mParam; }  	const std::string& tooltipRef() const { return mTooltipRef; }  private: +	LLCommandId mIdentifier; + +	bool        mAvailableInToybox;  	std::string mFunction;  	std::string mIcon;  	std::string mLabelRef; -	std::string	mName;  	std::string mParam;  	std::string mTooltipRef;  }; @@ -84,7 +126,7 @@ public:  	U32 commandCount() const;  	LLCommand * getCommand(U32 commandIndex); -	LLCommand * getCommand(const std::string& commandName); +	LLCommand * getCommand(const LLCommandId& commandId);  	static bool load(); @@ -92,7 +134,7 @@ protected:  	void addCommand(LLCommand * command);  private: -	typedef std::map<std::string, U32>	CommandIndexMap; +	typedef std::map<LLCommandId, U32>	CommandIndexMap;  	typedef std::vector<LLCommand *>	CommandVector;  	CommandVector	mCommands; diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 5802d2adda..1e1cb16fbb 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -30,7 +30,6 @@  #include <boost/foreach.hpp>  #include "lltoolbar.h" -#include "llcommandmanager.h"  #include "llmenugl.h"  #include "lltrans.h" @@ -212,48 +211,79 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p)  		LLToolBarButton* buttonp = LLUICtrlFactory::create<LLToolBarButton>(button_p);  		mButtons.push_back(buttonp); +		mButtonCommands.push_back(LLCommandId::null);  		mButtonPanel->addChild(buttonp);  		mNeedsLayout = true;  	}  } -bool LLToolBar::addCommand(LLCommand * command) +bool LLToolBar::addCommand(const LLCommandId& commandId)  { +	LLCommand * command = LLCommandManager::instance().getCommand(commandId); + +	bool add_command = (command != NULL); +  	//  	// Init basic toolbar button params  	// -	LLToolBarButton::Params button_p(mButtonParams[mButtonType]); -	button_p.name = command->name(); -	button_p.label = LLTrans::getString(command->labelRef()); -	button_p.tool_tip = LLTrans::getString(command->tooltipRef()); +	if (add_command) +	{ +		LLToolBarButton::Params button_p(mButtonParams[mButtonType]); +		button_p.name = commandId.name(); +		button_p.label = LLTrans::getString(command->labelRef()); +		button_p.tool_tip = LLTrans::getString(command->tooltipRef()); -	// -	// Add it to the list of buttons -	// -	LLToolBarButton * toolbar_button = LLUICtrlFactory::create<LLToolBarButton>(button_p); -	mButtons.push_back(toolbar_button); -	mButtonPanel->addChild(toolbar_button); +		// +		// Add it to the list of buttons +		// +		LLToolBarButton * toolbar_button = LLUICtrlFactory::create<LLToolBarButton>(button_p); +		mButtons.push_back(toolbar_button); +		mButtonCommands.push_back(commandId); +		mButtonPanel->addChild(toolbar_button); -	mNeedsLayout = true; +		mNeedsLayout = true; +	} -	return true; +	return add_command;  } -bool LLToolBar::hasCommand(const std::string& command_name) +bool LLToolBar::hasCommand(const LLCommandId& commandId) const  {  	bool has_command = false; -	for (std::list<LLToolBarButton*>::iterator cmd = mButtons.begin(); cmd != mButtons.end(); cmd++) + +	if (commandId != LLCommandId::null)  	{ -		if ((*cmd)->getName() == command_name) +		for (std::list<LLCommandId>::const_iterator cmd = mButtonCommands.begin(); cmd != mButtonCommands.end(); ++cmd)  		{ -			has_command = true; -			break; +			if ((*cmd) == commandId) +			{ +				has_command = true; +				break; +			}  		}  	} +  	return has_command;  } +bool LLToolBar::enableCommand(const LLCommandId& commandId, bool enabled) +{ +	LLButton * command_button = NULL; +	 +	if (commandId != LLCommandId::null) +	{ +		command_button = mButtonPanel->findChild<LLButton>(commandId.name()); + +		if (command_button) +		{ +			command_button->setEnabled(enabled); +		} +	} + +	return (command_button != NULL); +} +  BOOL LLToolBar::handleRightMouseDown(S32 x, S32 y, MASK mask)  {  	BOOL handle_it_here = !mReadOnly; @@ -351,7 +381,6 @@ void LLToolBar::updateLayoutAsNeeded()  		max_length = getRect().getWidth() - mPadLeft - mPadRight;  		max_total_girth = getRect().getHeight() - mPadTop - mPadBottom;  		row_pad_start = mPadLeft; -		row_running_length = row_pad_start;  		row_pad_end = mPadRight;  		cur_row = mPadTop;  		girth_pad_end = mPadBottom; @@ -361,12 +390,12 @@ void LLToolBar::updateLayoutAsNeeded()  		max_length = getRect().getHeight() - mPadTop - mPadBottom;  		max_total_girth = getRect().getWidth() - mPadLeft - mPadRight;  		row_pad_start = mPadTop; -		row_running_length = row_pad_start;  		row_pad_end = mPadBottom;  		cur_row = mPadLeft;  		girth_pad_end = mPadRight;  	} +	row_running_length = row_pad_start;  	cur_start = row_pad_start; diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h index 00e6ed131a..f7562b29d2 100644 --- a/indra/llui/lltoolbar.h +++ b/indra/llui/lltoolbar.h @@ -28,9 +28,10 @@  #ifndef LL_LLTOOLBAR_H  #define LL_LLTOOLBAR_H -#include "lluictrl.h" -#include "lllayoutstack.h"  #include "llbutton.h" +#include "llcommandmanager.h" +#include "lllayoutstack.h" +#include "lluictrl.h"  class LLCommand; @@ -121,8 +122,9 @@ public:  	BOOL postBuild();  	void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); -	bool addCommand(LLCommand * command); -	bool hasCommand(const std::string& command_name); +	bool addCommand(const LLCommandId& commandId); +	bool hasCommand(const LLCommandId& commandId) const; +	bool enableCommand(const LLCommandId& commandId, bool enabled);  protected:  	friend class LLUICtrlFactory; @@ -142,6 +144,7 @@ private:  	const bool						mReadOnly;  	std::list<LLToolBarButton*>		mButtons; +	std::list<LLCommandId>			mButtonCommands;  	LLToolBarEnums::ButtonType		mButtonType;  	LLLayoutStack*					mCenteringStack;  	LLLayoutStack*					mWrapStack; diff --git a/indra/llui/lltoolbarview.cpp b/indra/llui/lltoolbarview.cpp index 3b4960fdd5..6c29e566b8 100644 --- a/indra/llui/lltoolbarview.cpp +++ b/indra/llui/lltoolbarview.cpp @@ -62,20 +62,20 @@ BOOL LLToolBarView::postBuild()  	return TRUE;  } -bool LLToolBarView::hasCommand(const std::string& command_name) +bool LLToolBarView::hasCommand(const LLCommandId& commandId) const  {  	bool has_command = false;  	if (mToolbarLeft && !has_command)  	{ -		has_command = mToolbarLeft->hasCommand(command_name); +		has_command = mToolbarLeft->hasCommand(commandId);  	}  	if (mToolbarRight && !has_command)  	{ -		has_command = mToolbarRight->hasCommand(command_name); +		has_command = mToolbarRight->hasCommand(commandId);  	}  	if (mToolbarBottom && !has_command)  	{ -		has_command = mToolbarBottom->hasCommand(command_name); +		has_command = mToolbarBottom->hasCommand(commandId);  	}  	return has_command;  } diff --git a/indra/llui/lltoolbarview.h b/indra/llui/lltoolbarview.h index 65d339315b..2e7885f391 100644 --- a/indra/llui/lltoolbarview.h +++ b/indra/llui/lltoolbarview.h @@ -30,6 +30,7 @@  #include "lluictrl.h"  #include "lltoolbar.h" +#include "llcommandmanager.h"  class LLUICtrlFactory; @@ -45,7 +46,7 @@ public:  	virtual void draw(); -	bool hasCommand(const std::string& command_name); +	bool hasCommand(const LLCommandId& commandId) const;  	// valid children for LLToolBarView are stored in this registry  	typedef LLDefaultChildRegistry child_registry_t; diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml index dbb0e8b7ca..4a33b24075 100644 --- a/indra/newview/app_settings/commands.xml +++ b/indra/newview/app_settings/commands.xml @@ -1,6 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <commands>    <command name="avatar" +           available_in_toybox="true"             icon="Command_Avatar_Icon"             label_ref="Command_Avatar_Label"             tooltip_ref="Command_Avatar_Tooltip" @@ -8,6 +9,7 @@             param="avatar"             />    <command name="build" +           available_in_toybox="true"             icon="Command_Build_Icon"             label_ref="Command_Build_Label"             tooltip_ref="Command_Build_Tooltip" @@ -15,22 +17,23 @@             param="build"             />    <command name="chat" +           available_in_toybox="true"             icon="Command_Chat_Icon"             label_ref="Command_Chat_Label"             tooltip_ref="Command_Chat_Tooltip"             function="Floater.ToolbarToggle"             param="chat"             /> -  <!-- Compass it not supported by the viewer yet    <command name="compass" +           available_in_toybox="false"             icon="Command_Compass_Icon"             label_ref="Command_Compass_Label"             tooltip_ref="Command_Compass_Tooltip"             function="Floater.ToolbarToggle"             param="compass"             /> -           -->    <command name="gestures" +           available_in_toybox="true"             icon="Command_Gestures_Icon"             label_ref="Command_Gestures_Label"             tooltip_ref="Command_Gestures_Tooltip" @@ -38,6 +41,7 @@             param="gestures"             />    <command name="howto" +           available_in_toybox="true"             icon="Command_HowTo_Icon"             label_ref="Command_HowTo_Label"             tooltip_ref="Command_HowTo_Tooltip" @@ -45,6 +49,7 @@             param="howto"             />    <command name="landmarks" +           available_in_toybox="true"             icon="Command_Landmarks_Icon"             label_ref="Command_Landmarks_Label"             tooltip_ref="Command_Landmarks_Tooltip" @@ -52,6 +57,7 @@             param="landmarks"             />    <command name="map" +           available_in_toybox="true"             icon="Command_Map_Icon"             label_ref="Command_Map_Label"             tooltip_ref="Command_Map_Tooltip" @@ -59,6 +65,7 @@             param="map"             />    <command name="minimap" +           available_in_toybox="true"             icon="Command_MiniMap_Icon"             label_ref="Command_MiniMap_Label"             tooltip_ref="Command_MiniMap_Tooltip" @@ -66,6 +73,7 @@             param="minimap"             />    <command name="move" +           available_in_toybox="true"             icon="Command_Move_Icon"             label_ref="Command_Move_Label"             tooltip_ref="Command_Move_Tooltip" @@ -73,6 +81,7 @@             param="move"             />    <command name="myland" +           available_in_toybox="true"             icon="Command_MyLand_Icon"             label_ref="Command_MyLand_Label"             tooltip_ref="Command_MyLand_Tooltip" @@ -80,6 +89,7 @@             param="myland"             />    <command name="mystuff" +           available_in_toybox="true"             icon="Command_MyStuff_Icon"             label_ref="Command_MyStuff_Label"             tooltip_ref="Command_MyStuff_Tooltip" @@ -87,6 +97,7 @@             param="mystuff"             />    <command name="people" +           available_in_toybox="true"             icon="Command_People_Icon"             label_ref="Command_People_Label"             tooltip_ref="Command_People_Tooltip" @@ -94,6 +105,7 @@             param="people"             />    <command name="places" +           available_in_toybox="true"             icon="Command_Places_Icon"             label_ref="Command_Places_Label"             tooltip_ref="Command_Places_Tooltip" @@ -101,6 +113,7 @@             param="places"             />    <command name="search" +           available_in_toybox="true"             icon="Command_Search_Icon"             label_ref="Command_Search_Label"             tooltip_ref="Command_Search_Tooltip" @@ -108,6 +121,7 @@             param="search"             />    <command name="settings" +           available_in_toybox="true"             icon="Command_Settings_Icon"             label_ref="Command_Settings_Label"             tooltip_ref="Command_Settings_Tooltip" @@ -115,6 +129,7 @@             param="settings"             />    <command name="shop" +           available_in_toybox="true"             icon="Command_Shop_Icon"             label_ref="Command_Shop_Label"             tooltip_ref="Command_Shop_Tooltip" @@ -122,6 +137,7 @@             param="shop"             />    <command name="snapshot" +           available_in_toybox="true"             icon="Command_Snapshot_Icon"             label_ref="Command_Snapshot_Label"             tooltip_ref="Command_Snapshot_Tooltip" @@ -129,6 +145,7 @@             param="snapshot"             />    <command name="speak" +           available_in_toybox="true"             icon="Command_Speak_Icon"             label_ref="Command_Speak_Label"             tooltip_ref="Command_Speak_Tooltip" @@ -136,6 +153,7 @@             param="speak"             />    <command name="upload" +           available_in_toybox="true"             icon="Command_Upload_Icon"             label_ref="Command_Upload_Label"             tooltip_ref="Command_Upload_Tooltip" @@ -143,6 +161,7 @@             param="upload"             />    <command name="view" +           available_in_toybox="true"             icon="Command_View_Icon"             label_ref="Command_View_Label"             tooltip_ref="Command_View_Tooltip" diff --git a/indra/newview/llfloatertoybox.cpp b/indra/newview/llfloatertoybox.cpp index eaaaeb3357..beb928ea36 100644 --- a/indra/newview/llfloatertoybox.cpp +++ b/indra/newview/llfloatertoybox.cpp @@ -32,6 +32,7 @@  #include "llcommandmanager.h"  #include "llpanel.h"  #include "lltoolbar.h" +#include "lltoolbarview.h"  LLFloaterToybox::LLFloaterToybox(const LLSD& key) @@ -63,7 +64,13 @@ BOOL LLFloaterToybox::postBuild()  	{  		LLCommand * command = cmdMgr.getCommand(i); -		mToolBar->addCommand(command); +		if (command->availableInToybox()) +		{ +			mToolBar->addCommand(command->id()); + +			llassert(gToolBarView != NULL); +			mToolBar->enableCommand(command->id(), !gToolBarView->hasCommand(command->id())); +		}  	}  	return TRUE; diff --git a/indra/newview/skins/default/xui/en/floater_toybox.xml b/indra/newview/skins/default/xui/en/floater_toybox.xml index 1c9f20c496..60a39b0bff 100644 --- a/indra/newview/skins/default/xui/en/floater_toybox.xml +++ b/indra/newview/skins/default/xui/en/floater_toybox.xml @@ -14,17 +14,17 @@    save_rect="true"    single_instance="true"    title="Customize toolbars" -  width="658"> +  width="650">    <text      follows="left|top"      font="SansSerifMedium"      halign="left"      height="20"      layout="topleft" -    left="40" +    left="20"      length="1"      name="toybox label 1" -    right="-40" +    right="-20"      top="35"      type="string">        Add or remove buttons by dragging them to or from the toolbars. @@ -35,10 +35,10 @@      halign="left"      height="20"      layout="topleft" -    left="40" +    left="20"      length="1"      name="toybox label 2" -    right="-40" +    right="-20"      top="55"      type="string">        Buttons will appear as shown or as icon-only depending on each toolbar's settings. @@ -46,12 +46,17 @@    <toolbar      bottom="395"      button_display_mode="icons_with_text" -    left="40" +    left="20"      max_button_width="140"      min_button_width="70"      name="toybox_toolbar" +    pad_left="5" +    pad_right="5" +    pad_top="5" +    pad_bottom="5" +    pad_between="15"      read_only="true" -    right="-40" +    right="-20"      side="top"      top="85">    </toolbar> @@ -61,7 +66,7 @@      label="Restore defaults"      label_selected="Restore defaults"      layout="topleft" -    left="40" +    left="20"      name="btn_restore_defaults"      top="415"      width="130"> | 
