diff options
| author | callum <none@none> | 2011-10-11 15:34:32 -0700 | 
|---|---|---|
| committer | callum <none@none> | 2011-10-11 15:34:32 -0700 | 
| commit | 6f39beec9aa7168e6ad6f6e395f451d12b885a80 (patch) | |
| tree | c10a382b06c0a4398097f814fd6e47d6be78e3e2 | |
| parent | ecdcaf149b7def0e40898ac202539376a673c7b1 (diff) | |
| parent | 682609d254fb973cfa267923b69c5e06b7efd7e1 (diff) | |
merge with head
| -rw-r--r-- | indra/llui/lltoolbar.cpp | 86 | ||||
| -rw-r--r-- | indra/llui/lltoolbar.h | 7 | ||||
| -rw-r--r-- | indra/newview/lltoolbarview.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/skins/default/textures/toolbar_icons/caret_bottom.png | bin | 139 -> 169 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/toolbar_icons/caret_left.png | bin | 893 -> 913 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/toolbar_icons/caret_right.png | bin | 892 -> 911 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_toolbar_view.xml | 13 | 
7 files changed, 75 insertions, 38 deletions
diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index e74aab6e21..d4633d7c3b 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -34,6 +34,7 @@  #include "llmenugl.h"  #include "lltrans.h"  #include "llinventory.h" +#include "lliconctrl.h"  // uncomment this and remove the one in llui.cpp when there is an external reference to this translation unit  // thanks, MSVC! @@ -204,7 +205,6 @@ bool LLToolBar::addCommand(const LLCommandId& commandId, int rank)  {  	LLCommand * command = LLCommandManager::instance().getCommand(commandId);  	if (!command) return false; -	llinfos << "Merov debug : addCommand, " << commandId.name() << ", " << commandId.uuid() << llendl;  	// Create the button and do the things that don't need ordering  	LLToolBarButton* button = createButton(commandId); @@ -248,7 +248,6 @@ int LLToolBar::removeCommand(const LLCommandId& commandId)  {  	if (!hasCommand(commandId)) return RANK_NONE; -	llinfos << "Merov debug : removeCommand, " << commandId.name() << ", " << commandId.uuid() << llendl;  	// First erase the map record  	command_id_map::iterator it = mButtonMap.find(commandId.uuid());  	mButtonMap.erase(it); @@ -398,7 +397,7 @@ void LLToolBar::resizeButtonsInRow(std::vector<LLToolBarButton*>& buttons_in_row  // The rank is the position a tool dropped in (x,y) would assume in the button list.  // The value returned is between 0 and mButtons.size(), 0 being the first element to the left  // (or top) and mButtons.size() the last one to the right (or bottom). -int LLToolBar::getRankFromPosition(S32 x, S32 y) +int LLToolBar::getRankFromPosition(S32& x, S32& y)  {  	int rank = 0; @@ -406,16 +405,16 @@ int LLToolBar::getRankFromPosition(S32 x, S32 y)  	S32 button_panel_x = 0;  	S32 button_panel_y = 0;  	localPointToOtherView(x, y, &button_panel_x, &button_panel_y, mButtonPanel); +	S32 dx = x - button_panel_x; +	S32 dy = y - button_panel_y; -	//llinfos << "Merov debug : rank compute: orientation = " << orientation << ", x = " << button_panel_x << ", y = " << button_panel_y << llendl; -  	// Simply compare the passed coord with the buttons outbound box  	std::list<LLToolBarButton*>::iterator it_button = mButtons.begin();  	std::list<LLToolBarButton*>::iterator end_button = mButtons.end(); +	LLRect button_rect;  	while (it_button != end_button)  	{ -		LLRect button_rect = (*it_button)->getRect(); -		//llinfos << "Merov debug : rank compute: rect = " << button_rect.mLeft << ", " << button_rect.mTop << ", " << button_rect.mRight << ", " << button_rect.mBottom << llendl; +		button_rect = (*it_button)->getRect();  		if (((orientation == LLLayoutStack::HORIZONTAL) && (button_rect.mRight  > button_panel_x)) ||  			((orientation == LLLayoutStack::VERTICAL)   && (button_rect.mBottom < button_panel_y))    )  		{ @@ -424,7 +423,16 @@ int LLToolBar::getRankFromPosition(S32 x, S32 y)  		rank++;  		++it_button;  	} -	//llinfos << "Merov debug : rank = " << rank << llendl; +	if (it_button != end_button) +	{ +		x = button_rect.mRight + dx; +		y = button_rect.mTop + dy; +	} +	else +	{ +		x = button_rect.mLeft + dx; +		y = button_rect.mBottom + dy; +	}  	return rank;  } @@ -613,7 +621,40 @@ void LLToolBar::draw()  	LLUI::pushMatrix();  	LLUI::translate((F32)getRect().mLeft, (F32)getRect().mBottom, 0.f); +	// Position the caret  +	LLIconCtrl* caret = getChild<LLIconCtrl>("caret"); +	caret->setVisible(FALSE); +	if (mDragAndDropTarget && !mButtonCommands.empty()) +	{ +		LLRect caret_rect = caret->getRect(); +		LLRect toolbar_rect = getRect(); +		if (mSideType == SIDE_BOTTOM) +		{ +			caret->setRect(LLRect(mDragx-caret_rect.getWidth()/2+1, +								  toolbar_rect.getHeight()+3, +								  mDragx+caret_rect.getWidth()/2+1, +								  toolbar_rect.getHeight()-caret_rect.getHeight()+3)); +		} +		else if (mSideType == SIDE_LEFT) +		{ +			 +			caret->setRect(LLRect(toolbar_rect.getWidth()-caret_rect.getWidth()+3, +								  mDragy+caret_rect.getHeight()/2, +								  toolbar_rect.getWidth()+3, +								  mDragy-caret_rect.getHeight()/2)); +		} +		else +		{ +			caret->setRect(LLRect(-3, +								  mDragy+caret_rect.getHeight()/2, +								  caret_rect.getWidth()-3, +								  mDragy-caret_rect.getHeight()/2)); +		} +		caret->setVisible(TRUE); +	} +		  	LLUICtrl::draw(); +	caret->setVisible(FALSE);  }  void LLToolBar::reshape(S32 width, S32 height, BOOL called_from_parent) @@ -727,7 +768,6 @@ BOOL LLToolBar::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  										EAcceptance* accept,  										std::string& tooltip_msg)  { -	llinfos << "Merov debug : handleDragAndDrop. drop = " << drop << ", x = " << x << ", y = " << y << llendl;  	// If we have a drop callback, that means that we can handle the drop  	BOOL handled = (mHandleDropCallback ? TRUE : FALSE); @@ -743,21 +783,22 @@ BOOL LLToolBar::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  	// We'll use that flag to change the visual aspect of the toolbar target on draw()  	mDragAndDropTarget = false; -	// HACK!!! -	if (!isReadOnly() && handled) +	// Convert drag position into insert position and rank  +	if (!isReadOnly() && handled && !drop)  	{ -		if (!drop) +		LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data; +		LLAssetType::EType type = inv_item->getType(); +		if (type == LLAssetType::AT_WIDGET)  		{ -			LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data; -			LLAssetType::EType type = inv_item->getType(); -			if (type == LLAssetType::AT_WIDGET) -			{ -				LLCommandId dragged_command(inv_item->getUUID()); -				int rank = getRankFromPosition(x, y); -				removeCommand(dragged_command); -				addCommand(dragged_command,rank); -				mDragAndDropTarget = true; -			} +			mDragx = x; +			mDragy = y; +			mDragRank = getRankFromPosition(mDragx, mDragy); +			mDragAndDropTarget = true; +			/* Do the following if you want to animate the button itself +			LLCommandId dragged_command(inv_item->getUUID()); +			removeCommand(dragged_command); +			addCommand(dragged_command,rank); +			*/  		}  	} @@ -798,7 +839,6 @@ BOOL LLToolBarButton::handleMouseDown(S32 x, S32 y, MASK mask)  BOOL LLToolBarButton::handleHover(S32 x, S32 y, MASK mask)  { -//	llinfos << "Merov debug: handleHover, x = " << x << ", y = " << y << ", mouse = " << hasMouseCapture() << llendl;  	BOOL handled = FALSE;  	S32 mouse_distance_squared = (x - mMouseDownX) * (x - mMouseDownX) + (y - mMouseDownY) * (y - mMouseDownY); diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h index d9ea0f57d3..709399c59f 100644 --- a/indra/llui/lltoolbar.h +++ b/indra/llui/lltoolbar.h @@ -156,7 +156,7 @@ public:  	// virtuals  	void draw();  	void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); -	int  getRankFromPosition(S32 x, S32 y);	 +	int  getRankFromPosition(S32& x, S32& y);	  	BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);  	virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  								   EDragAndDropType cargo_type, @@ -190,6 +190,9 @@ protected:  	tool_handledrag_callback_t		mHandleDragItemCallback;  	tool_handledrop_callback_t		mHandleDropCallback;  	bool							mDragAndDropTarget; +	int								mDragRank; +	S32								mDragx, +									mDragy;  public:  	// Methods used in loading and saving toolbar settings @@ -219,7 +222,7 @@ private:  	LLLayoutStack*					mWrapStack;  	LLPanel*						mButtonPanel;  	LLToolBarEnums::SideType		mSideType; - +	  	bool							mWrap;  	bool							mNeedsLayout;  	S32								mPadLeft, diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp index 7977faeab7..8ae9328f6d 100644 --- a/indra/newview/lltoolbarview.cpp +++ b/indra/newview/lltoolbarview.cpp @@ -330,7 +330,6 @@ void LLToolBarView::draw()  void LLToolBarView::startDragTool( S32 x, S32 y, const LLUUID& uuid)  { -	llinfos << "Merov debug: startDragTool() : x = " << x << ", y = " << y << ", uuid = " << uuid << llendl;  	// Flag the tool dragging but don't start it yet  	gToolBarView->mDragStarted = false;  	gToolBarView->mDragCommand = LLCommandId::null; @@ -345,7 +344,6 @@ BOOL LLToolBarView::handleDragTool( S32 x, S32 y, const LLUUID& uuid, LLAssetTyp  	{  		if (!gToolBarView->mDragStarted)  		{ -			llinfos << "Merov debug: handleDragTool() : x = " << x << ", y = " << y << ", uuid = " << uuid << llendl;  			// Start the tool dragging:  			// First, create the global drag and drop object @@ -357,7 +355,6 @@ BOOL LLToolBarView::handleDragTool( S32 x, S32 y, const LLUUID& uuid, LLAssetTyp  			LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_VIEWER;  			LLUUID srcID;  			LLToolDragAndDrop::getInstance()->beginMultiDrag(types, cargo_ids, src, srcID); -			llinfos << "Merov debug: beginMultiDrag() launched" << llendl;  			// Second, check if the command is present in one of the 3 toolbars  			// If it is, store the command, the toolbar and the rank in the toolbar and @@ -383,7 +380,6 @@ BOOL LLToolBarView::handleDragTool( S32 x, S32 y, const LLUUID& uuid, LLAssetTyp  			}  			 */ -			llinfos << "Merov debug: Drag started cleanly" << llendl;  			gToolBarView->mDragStarted = true;  			return TRUE;  		} @@ -399,12 +395,10 @@ BOOL LLToolBarView::handleDragTool( S32 x, S32 y, const LLUUID& uuid, LLAssetTyp  BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* toolbar)  {  	LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data; -	//llinfos << "Merov debug : handleDropTool. Drop " << inv_item->getUUID() << " named " << inv_item->getName() << " of type " << inv_item->getType() << llendl;  	LLAssetType::EType type = inv_item->getType();  	if (type == LLAssetType::AT_WIDGET)  	{ -		//llinfos << "Merov debug : handleDropTool. Drop source is a widget -> drop it in place..." << llendl;  		// Get the command from its uuid  		LLCommandManager& mgr = LLCommandManager::instance();  		LLCommandId command_id(inv_item->getUUID()); @@ -419,7 +413,6 @@ 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). -			llinfos << "Merov debug : handleDropTool, " << command_id.name() << ", " << command_id.uuid() << llendl;  			gToolBarView->mToolbarLeft->removeCommand(command_id);  			gToolBarView->mToolbarRight->removeCommand(command_id);  			gToolBarView->mToolbarBottom->removeCommand(command_id); diff --git a/indra/newview/skins/default/textures/toolbar_icons/caret_bottom.png b/indra/newview/skins/default/textures/toolbar_icons/caret_bottom.png Binary files differindex 82f58b22b9..d506cda5c9 100644 --- a/indra/newview/skins/default/textures/toolbar_icons/caret_bottom.png +++ b/indra/newview/skins/default/textures/toolbar_icons/caret_bottom.png diff --git a/indra/newview/skins/default/textures/toolbar_icons/caret_left.png b/indra/newview/skins/default/textures/toolbar_icons/caret_left.png Binary files differindex 75eecc84ed..b1284aaf79 100644 --- a/indra/newview/skins/default/textures/toolbar_icons/caret_left.png +++ b/indra/newview/skins/default/textures/toolbar_icons/caret_left.png diff --git a/indra/newview/skins/default/textures/toolbar_icons/caret_right.png b/indra/newview/skins/default/textures/toolbar_icons/caret_right.png Binary files differindex 677459ae1c..bf6a4ed66c 100644 --- a/indra/newview/skins/default/textures/toolbar_icons/caret_right.png +++ b/indra/newview/skins/default/textures/toolbar_icons/caret_right.png diff --git a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml index 5d6967ed32..9ffd62f7a9 100644 --- a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml +++ b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml @@ -48,8 +48,8 @@                   side="left"                   button_display_mode="icons_only">  	             <icon layout="topleft" -	                   height="7" -	                   width="5" +	                   height="10" +	                   width="10"  	                   follows="left|top"  	                   top="20"  	                   left="10" @@ -99,8 +99,8 @@            side="right"            button_display_mode="icons_only">  	      <icon layout="topleft" -	            height="7" -	            width="5" +	            height="10" +	            width="10"  	            follows="left|top"  	            top="20"  	            left="10" @@ -130,13 +130,14 @@               button_display_mode="icons_with_text"               visible="true">               <icon layout="topleft" -	            height="5" -	            width="7" +	            height="10" +	            width="10"  	            follows="left|top"  	            top="20"  	            left="10"  	            tab_stop="false"                   visible="false" +                use_draw_context_alpha="false"  	            image_name="Caret_Bottom_Icon"  	            name="caret" />      </toolbar>  | 
