diff options
Diffstat (limited to 'indra/llui')
| -rw-r--r-- | indra/llui/llbutton.cpp | 17 | ||||
| -rw-r--r-- | indra/llui/llmenugl.cpp | 1 | ||||
| -rw-r--r-- | indra/llui/lltabcontainer.cpp | 147 | ||||
| -rw-r--r-- | indra/llui/lltabcontainer.h | 18 | ||||
| -rw-r--r-- | indra/llui/lltexteditor.cpp | 8 | ||||
| -rw-r--r-- | indra/llui/lltexteditor.h | 7 | 
6 files changed, 170 insertions, 28 deletions
| diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index 4944ed4fe7..14b77925f2 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -771,12 +771,7 @@ void LLButton::draw()  			center_x++;  		} -		S32 text_width_delta = overlay_width + 1; -		// if image paddings set, they should participate in scaling process -		S32 image_size_delta = mImageOverlayTopPad + mImageOverlayBottomPad; -		overlay_width = overlay_width - image_size_delta; -		overlay_height = overlay_height - image_size_delta; - +		center_y += (mImageOverlayBottomPad - mImageOverlayTopPad);  		// fade out overlay images on disabled buttons  		LLColor4 overlay_color = mImageOverlayColor.get();  		if (!enabled) @@ -788,10 +783,9 @@ void LLButton::draw()  		switch(mImageOverlayAlignment)  		{  		case LLFontGL::LEFT: -			text_left += overlay_width + mImageOverlayRightPad + 1; -			text_width -= text_width_delta; +			text_left += overlay_width + 1;  			mImageOverlay->draw( -				mLeftHPad,  +				mImageOverlayLeftPad,  				center_y - (overlay_height / 2),   				overlay_width,   				overlay_height,  @@ -806,10 +800,9 @@ void LLButton::draw()  				overlay_color);  			break;  		case LLFontGL::RIGHT: -			text_right -= overlay_width + mImageOverlayLeftPad+ 1; -			text_width -= text_width_delta; +			text_right -= overlay_width + 1;  			mImageOverlay->draw( -				getRect().getWidth() - mRightHPad - overlay_width,  +				getRect().getWidth() - mImageOverlayRightPad - overlay_width,  				center_y - (overlay_height / 2),   				overlay_width,   				overlay_height,  diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 7fa9a88059..d18abbfb2f 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -3941,7 +3941,6 @@ BOOL LLContextMenu::appendContextSubMenu(LLContextMenu *menu)  	item = LLUICtrlFactory::create<LLContextMenuBranch>(p);  	LLMenuGL::sMenuContainer->addChild(item->getBranch()); -	item->setFont( LLFontGL::getFontSansSerif() );  	return append( item );  } diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index 6be76605fd..19408989a5 100644 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -35,7 +35,6 @@  #include "lltabcontainer.h"  #include "llfocusmgr.h" -#include "llbutton.h"  #include "lllocalcliprect.h"  #include "llrect.h"  #include "llresizehandle.h" @@ -96,6 +95,90 @@ public:  //---------------------------------------------------------------------------- +//============================================================================ +/* + * @file lltabcontainer.cpp + * @brief class implements LLButton with LLIconCtrl on it + */ +class LLCustomButtonIconCtrl : public LLButton +{ +public: +	struct Params +	: public LLInitParam::Block<Params, LLButton::Params> +	{ +		// LEFT, RIGHT, TOP, BOTTOM paddings of LLIconCtrl in this class has same value +		Optional<S32>					icon_ctrl_pad; + +		Params(): +		icon_ctrl_pad("icon_ctrl_pad", 1) +		{} +	}; + +protected: +	friend class LLUICtrlFactory; +	LLCustomButtonIconCtrl(const Params& p): +		LLButton(p), +		mIcon(NULL), +		mIconCtrlPad(p.icon_ctrl_pad) +		{} + +public: + +	void updateLayout() +	{ +		LLRect button_rect = getRect(); +		LLRect icon_rect = mIcon->getRect(); + +		S32 icon_size = button_rect.getHeight() - 2*mIconCtrlPad; + +		switch(mIconAlignment) +		{ +		case LLFontGL::LEFT: +			icon_rect.setLeftTopAndSize(button_rect.mLeft + mIconCtrlPad, button_rect.mTop - mIconCtrlPad,  +				icon_size, icon_size); +			setLeftHPad(icon_size + mIconCtrlPad * 2); +			break; +		case LLFontGL::HCENTER: +			icon_rect.setLeftTopAndSize(button_rect.mRight - (button_rect.getWidth() + mIconCtrlPad - icon_size)/2, button_rect.mTop - mIconCtrlPad,  +				icon_size, icon_size); +			setRightHPad(icon_size + mIconCtrlPad * 2); +			break; +		case LLFontGL::RIGHT: +			icon_rect.setLeftTopAndSize(button_rect.mRight - mIconCtrlPad - icon_size, button_rect.mTop - mIconCtrlPad,  +				icon_size, icon_size); +			setRightHPad(icon_size + mIconCtrlPad * 2); +			break; +		default: +			break; +		} +		mIcon->setRect(icon_rect); +	} + +	void setIcon(LLIconCtrl* icon, LLFontGL::HAlign alignment = LLFontGL::LEFT) +	{ +		if(icon) +		{ +			if(mIcon) +			{ +				removeChild(mIcon); +				mIcon->die(); +			} +			mIcon = icon; +			mIconAlignment = alignment; + +			addChild(mIcon); +			updateLayout(); +		} +	} + + +private: +	LLIconCtrl* mIcon; +	LLFontGL::HAlign mIconAlignment; +	S32 mIconCtrlPad; +}; +//============================================================================ +  struct LLPlaceHolderPanel : public LLPanel  {  	// create dummy param block to register with "placeholder" nane @@ -127,7 +210,9 @@ LLTabContainer::Params::Params()  	tab_padding_right("tab_padding_right"),  	first_tab("first_tab"),  	middle_tab("middle_tab"), -	last_tab("last_tab") +	last_tab("last_tab"), +	use_custom_icon_ctrl("use_custom_icon_ctrl", false), +	tab_icon_ctrl_pad("tab_icon_ctrl_pad", 0)  {  	name(std::string("tab_container"));  	mouse_opaque = false; @@ -162,7 +247,9 @@ LLTabContainer::LLTabContainer(const LLTabContainer::Params& p)  	mFont(p.font),  	mFirstTabParams(p.first_tab),  	mMiddleTabParams(p.middle_tab), -	mLastTabParams(p.last_tab) +	mLastTabParams(p.last_tab), +	mCustomIconCtrlUsed(p.use_custom_icon_ctrl), +	mTabIconCtrlPad(p.tab_icon_ctrl_pad)  {  	static LLUICachedControl<S32> tabcntr_vert_tab_min_width ("UITabCntrVertTabMinWidth", 0); @@ -905,6 +992,11 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)  	LLTextBox* textbox = NULL;  	LLButton* btn = NULL; +	LLCustomButtonIconCtrl::Params custom_btn_params; +	{ +		custom_btn_params.icon_ctrl_pad(mTabIconCtrlPad); +	} +	LLButton::Params normal_btn_params;  	if (placeholder)  	{ @@ -924,7 +1016,9 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)  	{  		if (mIsVertical)  		{ -			LLButton::Params p; +			LLButton::Params& p = (mCustomIconCtrlUsed)? +					custom_btn_params:normal_btn_params; +  			p.name(std::string("vert tab button"));  			p.rect(btn_rect);  			p.follows.flags(FOLLOWS_TOP | FOLLOWS_LEFT); @@ -942,11 +1036,22 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)  			{  				p.pad_left(indent);  			} -			btn = LLUICtrlFactory::create<LLButton>(p); +			 +			 +			if(mCustomIconCtrlUsed) +			{ +				btn = LLUICtrlFactory::create<LLCustomButtonIconCtrl>(custom_btn_params); +				 +			} +			else +			{ +				btn = LLUICtrlFactory::create<LLButton>(p); +			}  		}  		else  		{ -			LLButton::Params p; +			LLButton::Params& p = (mCustomIconCtrlUsed)? +					custom_btn_params:normal_btn_params;  			p.name(std::string(child->getName()) + " tab");  			p.rect(btn_rect);  			p.click_callback.function(boost::bind(&LLTabContainer::onTabBtn, this, _2, child)); @@ -980,7 +1085,14 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)  				p.follows.flags = p.follows.flags() | FOLLOWS_BOTTOM;  			} -++			btn = LLUICtrlFactory::create<LLButton>(p); +			if(mCustomIconCtrlUsed) +			{ +				btn = LLUICtrlFactory::create<LLCustomButtonIconCtrl>(custom_btn_params); +			} +			else +			{ +				btn = LLUICtrlFactory::create<LLButton>(p); +			}  		}  	} @@ -1484,7 +1596,7 @@ void LLTabContainer::setTabImage(LLPanel* child, std::string image_name, const L  	if( tuple )  	{  		tuple->mButton->setImageOverlay(image_name, LLFontGL::LEFT, color); -		reshape_tuple(tuple); +		reshapeTuple(tuple);  	}  } @@ -1494,11 +1606,26 @@ void LLTabContainer::setTabImage(LLPanel* child, const LLUUID& image_id, const L  	if( tuple )  	{  		tuple->mButton->setImageOverlay(image_id, LLFontGL::LEFT, color); -		reshape_tuple(tuple); +		reshapeTuple(tuple); +	} +} + +void LLTabContainer::setTabImage(LLPanel* child, LLIconCtrl* icon) +{ +	LLTabTuple* tuple = getTabByPanel(child); +	LLCustomButtonIconCtrl* button; + +	if(tuple) +	{ +		button = dynamic_cast<LLCustomButtonIconCtrl*>(tuple->mButton); +		if(button) +		{ +			button->setIcon(icon); +		}  	}  } -void LLTabContainer::reshape_tuple(LLTabTuple* tuple) +void LLTabContainer::reshapeTuple(LLTabTuple* tuple)  {  	static LLUICachedControl<S32> tab_padding ("UITabPadding", 0);  	static LLUICachedControl<S32> image_left_padding ("UIButtonImageLeftPadding", 4); diff --git a/indra/llui/lltabcontainer.h b/indra/llui/lltabcontainer.h index 2a55877d3c..4b5d45fb73 100644 --- a/indra/llui/lltabcontainer.h +++ b/indra/llui/lltabcontainer.h @@ -36,6 +36,8 @@  #include "llpanel.h"  #include "lltextbox.h"  #include "llframetimer.h" +#include "lliconctrl.h" +#include "llbutton.h"  class LLTabTuple; @@ -90,6 +92,16 @@ public:  											middle_tab,  											last_tab; +		/** +		 * Use LLCustomButtonIconCtrl or LLButton in LLTabTuple +		 */ +		Optional<bool>						use_custom_icon_ctrl; + +		/** +		 *  Paddings for LLIconCtrl in case of LLCustomButtonIconCtrl usage(use_custom_icon_ctrl = true) +		 */ +		Optional<S32>						tab_icon_ctrl_pad; +  		Params();  	}; @@ -173,6 +185,7 @@ public:  	void		setTabPanelFlashing(LLPanel* child, BOOL state);  	void 		setTabImage(LLPanel* child, std::string img_name, const LLColor4& color = LLColor4::white);  	void 		setTabImage(LLPanel* child, const LLUUID& img_id, const LLColor4& color = LLColor4::white); +	void		setTabImage(LLPanel* child, LLIconCtrl* icon);  	void		setTitle( const std::string& title );  	const std::string getPanelTitle(S32 index); @@ -228,7 +241,7 @@ private:  	// updates tab button images given the tuple, tab position and the corresponding params  	void update_images(LLTabTuple* tuple, TabParams params, LLTabContainer::TabPosition pos); -	void reshape_tuple(LLTabTuple* tuple); +	void reshapeTuple(LLTabTuple* tuple);  	// Variables @@ -278,6 +291,9 @@ private:  	TabParams						mFirstTabParams;  	TabParams						mMiddleTabParams;  	TabParams						mLastTabParams; + +	bool							mCustomIconCtrlUsed; +	S32								mTabIconCtrlPad;  };  #endif  // LL_TABCONTAINER_H diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 3fdb48b3ca..ac5a0376fc 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -242,7 +242,8 @@ LLTextEditor::Params::Params()  	handle_edit_keys_directly("handle_edit_keys_directly", false),  	show_line_numbers("show_line_numbers", false),  	default_color("default_color"), -    commit_on_focus_lost("commit_on_focus_lost", false) +    commit_on_focus_lost("commit_on_focus_lost", false), +	show_context_menu("show_context_menu")  {}  LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) : @@ -258,7 +259,8 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :  	mMouseDownX(0),  	mMouseDownY(0),  	mTabsToNextField(p.ignore_tab), -	mContextMenu(NULL) +	mContextMenu(NULL), +	mShowContextMenu(p.show_context_menu)  {  	mDefaultFont = p.font; @@ -720,7 +722,7 @@ BOOL LLTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask)  	}  	if (!LLTextBase::handleRightMouseDown(x, y, mask))  	{ -		if(getMouseOpaque()) +		if(getChowContextMenu())  		{  			showContextMenu(x, y);  		} diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h index a136f9ccce..d96198d9ce 100644 --- a/indra/llui/lltexteditor.h +++ b/indra/llui/lltexteditor.h @@ -68,7 +68,8 @@ public:  								ignore_tab,  								handle_edit_keys_directly,  								show_line_numbers, -								commit_on_focus_lost; +								commit_on_focus_lost, +								show_context_menu;  		//colors  		Optional<LLUIColor>		default_color; @@ -200,6 +201,9 @@ public:  	const LLTextSegmentPtr	getPreviousSegment() const;  	void getSelectedSegments(segment_vec_t& segments) const; +	void			setShowContextMenu(bool show) { mShowContextMenu = show; } +	bool			getChowContextMenu() const { return mShowContextMenu; } +  protected:  	void			showContextMenu(S32 x, S32 y);  	void			drawPreeditMarker(); @@ -319,6 +323,7 @@ private:  	BOOL			mTakesFocus;  	BOOL			mAllowEmbeddedItems; +	bool			mShowContextMenu;  	LLUUID			mSourceID; | 
