diff options
| author | Ychebotarev ProductEngine <ychebotarev@productengine.com> | 2010-02-05 09:41:54 +0200 | 
|---|---|---|
| committer | Ychebotarev ProductEngine <ychebotarev@productengine.com> | 2010-02-05 09:41:54 +0200 | 
| commit | bc5ad04d6164d186cf504212ea559405b8608811 (patch) | |
| tree | 1691a6ff0529d67714a26b377ffde7e43a81c6cf | |
| parent | 29a5e29ddb72ae141345753db269d3f2dbfd195c (diff) | |
applying patch for EXT-2357
--HG--
branch : product-engine
| -rw-r--r-- | indra/llui/lltabcontainer.cpp | 152 | ||||
| -rw-r--r-- | indra/llui/lltabcontainer.h | 26 | ||||
| -rw-r--r-- | indra/newview/llimfloatercontainer.cpp | 10 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_im_container.xml | 7 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/widgets/tab_container.xml | 1 | 
5 files changed, 185 insertions, 11 deletions
| diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index 6be76605fd..52fc2adb25 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,92 @@ 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; + +		Optional<S32>					icon_ctrl_width, +										icon_ctrl_height; +		Params(): +		icon_ctrl_pad("icon_ctrl_pad", 0), +		icon_ctrl_width("icon_ctrl_width", 16), +		icon_ctrl_height("icon_ctrl_height", 16) +		{} +	}; + +protected: +	friend class LLUICtrlFactory; +	LLCustomButtonIconCtrl(const Params& p): +		LLButton(p), +		mIcon(NULL), +		mIconCtrlPad(p.icon_ctrl_pad), +		mIconCtrlWidht(p.icon_ctrl_width), +		mIconCtrlHeight(p.icon_ctrl_height) +		{} + +public: + +	void updateLayout() +	{ +		LLRect button_rect = getRect(); +		LLRect icon_rect = mIcon->getRect(); +		S32 pad = mIconCtrlPad * 2; + +		switch(mIconAlignment) +		{ +		case LLFontGL::LEFT: +			icon_rect.setLeftTopAndSize(button_rect.mLeft + mIconCtrlPad, button_rect.mTop - mIconCtrlPad, mIconCtrlWidht - pad, mIconCtrlHeight - pad); +			setLeftHPad(mIconCtrlWidht + pad); +			break; +		case LLFontGL::HCENTER: +			//*TODO implement for HCENTER icon alignment +			break; +		case LLFontGL::RIGHT: +			//*TODO implement for RIGHT icon alignment +			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; +	S32 mIconCtrlWidht; +	S32 mIconCtrlHeight; +}; +//============================================================================ +  struct LLPlaceHolderPanel : public LLPanel  {  	// create dummy param block to register with "placeholder" nane @@ -127,7 +212,12 @@ 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), +	tab_icon_ctrl_width("tab_icon_ctrl_width"), +	tab_icon_ctrl_height("tab_icon_ctrl_height") +  {  	name(std::string("tab_container"));  	mouse_opaque = false; @@ -162,7 +252,11 @@ 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), +	mTabIconCtrlWidth(p.tab_icon_ctrl_width), +	mTabIconCtrlHeight(p.tab_icon_ctrl_height)  {  	static LLUICachedControl<S32> tabcntr_vert_tab_min_width ("UITabCntrVertTabMinWidth", 0); @@ -942,7 +1036,14 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)  			{  				p.pad_left(indent);  			} -			btn = LLUICtrlFactory::create<LLButton>(p); +			if(mCustomIconCtrlUsed) +			{ +				btn = createCustomButton(p); +			} +			else +			{ +				btn = LLUICtrlFactory::create<LLButton>(p); +			}  		}  		else  		{ @@ -980,7 +1081,14 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)  				p.follows.flags = p.follows.flags() | FOLLOWS_BOTTOM;  			} -++			btn = LLUICtrlFactory::create<LLButton>(p); +			if(mCustomIconCtrlUsed) +			{ +				btn = createCustomButton(p); +			} +			else +			{ +				btn = LLUICtrlFactory::create<LLButton>(p); +			}  		}  	} @@ -1043,6 +1151,19 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)  	updateMaxScrollPos();  } +LLButton* LLTabContainer::createCustomButton(const LLButton::Params& p) +{ +	LLCustomButtonIconCtrl::Params custom_btn_params; +	LLButton::Params* btn_params_p = dynamic_cast<LLButton::Params*>(&custom_btn_params); + +	btn_params_p->overwriteFrom(p); +	custom_btn_params.icon_ctrl_pad(mTabIconCtrlPad); +	custom_btn_params.icon_ctrl_width(mTabIconCtrlWidth); +	custom_btn_params.icon_ctrl_height(mTabIconCtrlHeight); + +	return LLUICtrlFactory::create<LLCustomButtonIconCtrl>(custom_btn_params); +} +  void LLTabContainer::addPlaceholder(LLPanel* child, const std::string& label)  {  	addTabPanel(TabPanelParams().panel(child).label(label).is_placeholder(true)); @@ -1484,7 +1605,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 +1615,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..278cf01375 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,21 @@ 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; +		/** +		 * LLIconCtrl size +		 */ +		Optional<S32>						tab_icon_ctrl_width, +											tab_icon_ctrl_height; +  		Params();  	}; @@ -173,6 +190,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 +246,8 @@ 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); +	LLButton* createCustomButton(const LLButton::Params& p);  	// Variables @@ -278,6 +297,11 @@ private:  	TabParams						mFirstTabParams;  	TabParams						mMiddleTabParams;  	TabParams						mLastTabParams; + +	bool							mCustomIconCtrlUsed; +	S32								mTabIconCtrlPad; +	S32								mTabIconCtrlHeight; +	S32								mTabIconCtrlWidth;  };  #endif  // LL_TABCONTAINER_H diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index 22eb9a51d2..7c7a4222d4 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -111,6 +111,14 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp,  	else  	{  		LLUUID avatar_id = LLIMModel::getInstance()->getOtherParticipantID(session_id); + +		LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLAvatarIconCtrl>(); +		icon_params.avatar_id = avatar_id; +		LLAvatarIconCtrl* icon = LLUICtrlFactory::instance().createWidget<LLAvatarIconCtrl>(icon_params); +		icon->setValue(avatar_id); +		mTabContainer->setTabImage(floaterp, icon); + +		/*  		LLAvatarPropertiesProcessor& app = LLAvatarPropertiesProcessor::instance();  		app.addObserver(avatar_id, this);  		floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, avatar_id)); @@ -125,7 +133,7 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp,  		{  			mTabContainer->setTabImage(floaterp, "Generic_Person");  			app.sendAvatarPropertiesRequest(avatar_id); -		} +		}*/  	}  } diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml index bd25288a9e..0d1a4a831d 100644 --- a/indra/newview/skins/default/xui/en/floater_im_container.xml +++ b/indra/newview/skins/default/xui/en/floater_im_container.xml @@ -19,8 +19,13 @@       left="1"       name="im_box_tab_container"       tab_position="bottom" -     tab_width="80" +     tab_width="64" +     tab_max_width = "134" +     tab_icon_ctrl_width = "16" +     tab_icon_ctrl_height = "16"       tab_height="16" +     use_custom_icon_ctrl="true" +     tab_icon_ctrl_pad="2"       top="0"       width="390" />      <icon diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml index 597c4e83b6..4a163fc1e3 100644 --- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml +++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml @@ -5,6 +5,7 @@ label_pad_left - padding to the left of tab button labels  -->  <tab_container tab_min_width="60"                 tab_max_width="150" +               use_custom_icon_ctrl="false"                 halign="center"                 font="SansSerifSmall"                  tab_height="21" | 
