diff options
-rwxr-xr-x | indra/llcommon/llfoldertype.h | 2 | ||||
-rwxr-xr-x | indra/llui/llfolderviewitem.cpp | 31 | ||||
-rwxr-xr-x | indra/llui/llfolderviewitem.h | 4 | ||||
-rwxr-xr-x | indra/newview/llconversationmodel.h | 2 | ||||
-rwxr-xr-x | indra/newview/llconversationview.cpp | 78 | ||||
-rwxr-xr-x | indra/newview/llconversationview.h | 20 | ||||
-rwxr-xr-x | indra/newview/llimfloatercontainer.cpp | 2 | ||||
-rwxr-xr-x | indra/newview/llviewerfoldertype.cpp | 2 |
8 files changed, 110 insertions, 31 deletions
diff --git a/indra/llcommon/llfoldertype.h b/indra/llcommon/llfoldertype.h index 6b5ae572a9..609b550900 100755 --- a/indra/llcommon/llfoldertype.h +++ b/indra/llcommon/llfoldertype.h @@ -91,7 +91,7 @@ public: FT_NONE = -1, - FT_PROFILE = 58 + FT_PROFILEXXXGGG = 58 }; static EType lookup(const std::string& type_name); diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index 155a605c3b..7ca02b726a 100755 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -98,6 +98,7 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p) : LLView(p), mLabelWidth(0), mLabelWidthDirty(false), + mLabelPaddingRight(DEFAULT_TEXT_PADDING_RIGHT), mParentFolder( NULL ), mIsSelected( FALSE ), mIsCurSelection( FALSE ), @@ -291,7 +292,7 @@ S32 LLFolderViewItem::arrange( S32* width, S32* height ) : 0; if (mLabelWidthDirty) { - mLabelWidth = ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + getLabelFontForStyle(mLabelStyle)->getWidth(mLabel) + getLabelFontForStyle(mLabelStyle)->getWidth(mLabelSuffix) + TEXT_PAD_RIGHT; + mLabelWidth = ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + getLabelFontForStyle(mLabelStyle)->getWidth(mLabel) + getLabelFontForStyle(mLabelStyle)->getWidth(mLabelSuffix) + mLabelPaddingRight; mLabelWidthDirty = false; } @@ -610,13 +611,13 @@ void LLFolderViewItem::draw() static LLUIColor sMouseOverColor = LLUIColorTable::instance().getColor("InventoryMouseOverColor", DEFAULT_WHITE); - getViewModelItem()->update(); - const Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>(); const S32 TOP_PAD = default_params.item_top_pad; const S32 FOCUS_LEFT = 1; const LLFontGL* font = getLabelFontForStyle(mLabelStyle); + getViewModelItem()->update(); + //--------------------------------------------------------------------------------// // Draw open folder arrow // @@ -771,7 +772,7 @@ void LLFolderViewItem::draw() // font->renderUTF8(mLabel, 0, text_left, y, color, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, - S32_MAX, getRect().getWidth() - (S32) text_left - TEXT_PAD_RIGHT, &right_x, TRUE); + S32_MAX, getRect().getWidth() - (S32) text_left - mLabelPaddingRight, &right_x, TRUE); //--------------------------------------------------------------------------------// // Draw label suffix @@ -786,18 +787,18 @@ void LLFolderViewItem::draw() //--------------------------------------------------------------------------------// // Highlight string match // - if (filter_string_length > 0) - { - F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mViewModelItem->getFilterStringOffset()); - F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD; - font->renderUTF8( combined_string, mViewModelItem->getFilterStringOffset(), match_string_left, yy, - sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, - filter_string_length, S32_MAX, &right_x, FALSE ); - } + if (filter_string_length > 0) + { + F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mViewModelItem->getFilterStringOffset()); + F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD; + font->renderUTF8( combined_string, mViewModelItem->getFilterStringOffset(), match_string_left, yy, + sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, + filter_string_length, S32_MAX, &right_x, FALSE ); + } - - LLView::draw(); - } + + LLView::draw(); +} const LLFolderViewModelInterface* LLFolderViewItem::getFolderViewModel( void ) const { diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h index 766d9b3fe3..fab24e52d1 100755 --- a/indra/llui/llfolderviewitem.h +++ b/indra/llui/llfolderviewitem.h @@ -68,7 +68,7 @@ public: ICON_PAD = 2, ICON_WIDTH = 16, TEXT_PAD = 1, - TEXT_PAD_RIGHT = 4, + DEFAULT_TEXT_PADDING_RIGHT = 4, ARROW_SIZE = 12, MAX_FOLDER_ITEM_OVERLAP = 2; @@ -85,6 +85,7 @@ protected: std::string mLabel; S32 mLabelWidth; bool mLabelWidthDirty; + S32 mLabelPaddingRight; LLFolderViewFolder* mParentFolder; LLFolderViewModelItem* mViewModelItem; LLFontGL::StyleFlags mLabelStyle; @@ -243,6 +244,7 @@ public: private: static std::map<U8, LLFontGL*> sFonts; // map of styles to fonts + }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/indra/newview/llconversationmodel.h b/indra/newview/llconversationmodel.h index 4f13d3d3a1..e1713f9db7 100755 --- a/indra/newview/llconversationmodel.h +++ b/indra/newview/llconversationmodel.h @@ -57,7 +57,7 @@ public: virtual const std::string& getSearchableName() const { return mName; } virtual const LLUUID& getUUID() const { return mUUID; } virtual time_t getCreationDate() const { return 0; } - virtual LLPointer<LLUIImage> getIcon() const { return LLUI::getUIImage(LLViewerFolderType::lookupIconName(LLFolderType::FT_PROFILE, FALSE)); } + virtual LLPointer<LLUIImage> getIcon() const { return LLUI::getUIImage(LLViewerFolderType::lookupIconName(LLFolderType::FT_PROFILEXXXGGG, FALSE)); } virtual LLPointer<LLUIImage> getOpenIcon() const { return getIcon(); } virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; } virtual std::string getLabelSuffix() const { return LLStringUtil::null; } diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp index 7b1c9ef912..bc85cd68bc 100755 --- a/indra/newview/llconversationview.cpp +++ b/indra/newview/llconversationview.cpp @@ -28,13 +28,13 @@ #include "llviewerprecompiledheaders.h" #include "llconversationview.h" + +#include <boost/bind.hpp> #include "llconversationmodel.h" #include "llimconversation.h" #include "llimfloatercontainer.h" #include "llfloaterreg.h" - #include "lluictrlfactory.h" -#include "llavatariconctrl.h" // // Implementation of conversations list session widgets @@ -120,6 +120,8 @@ void LLConversationViewSession::refresh() // static LLDefaultChildRegistry::Register<LLConversationViewParticipant> r("conversation_view_participant"); +bool LLConversationViewParticipant::sStaticInitialized = false; +S32 LLConversationViewParticipant::sChildrenWidths[LLConversationViewParticipant::ALIC_COUNT]; LLConversationViewParticipant::Params::Params() : container(), @@ -130,6 +132,8 @@ output_monitor("output_monitor") LLConversationViewParticipant::LLConversationViewParticipant( const LLConversationViewParticipant::Params& p ): LLFolderViewItem(p), + mInfoBtn(NULL), + mSpeakingIndicator(NULL), mUUID(p.participant_id) { @@ -156,8 +160,16 @@ BOOL LLConversationViewParticipant::postBuild() mSpeakingIndicator = getChild<LLOutputMonitorCtrl>("speaking_indicator"); - LLFolderViewItem::postBuild(); - return TRUE; + if (!sStaticInitialized) + { + // Remember children widths including their padding from the next sibling, + // so that we can hide and show them again later. + initChildrenWidths(this); + sStaticInitialized = true; + } + + computeLabelRightPadding(); + return LLFolderViewItem::postBuild(); } void LLConversationViewParticipant::refresh() @@ -194,14 +206,72 @@ void LLConversationViewParticipant::onInfoBtnClick() void LLConversationViewParticipant::onMouseEnter(S32 x, S32 y, MASK mask) { mInfoBtn->setVisible(true); + computeLabelRightPadding(); LLFolderViewItem::onMouseEnter(x, y, mask); } void LLConversationViewParticipant::onMouseLeave(S32 x, S32 y, MASK mask) { mInfoBtn->setVisible(false); + computeLabelRightPadding(); LLFolderViewItem::onMouseEnter(x, y, mask); } +// static +void LLConversationViewParticipant::initChildrenWidths(LLConversationViewParticipant* self) +{ + //speaking indicator width + padding + S32 speaking_indicator_width = self->getRect().getWidth() - self->mSpeakingIndicator->getRect().mLeft; + + //info btn width + padding + S32 info_btn_width = self->mSpeakingIndicator->getRect().mLeft - self->mInfoBtn->getRect().mLeft; + + S32 index = ALIC_COUNT; + sChildrenWidths[--index] = info_btn_width; + sChildrenWidths[--index] = speaking_indicator_width; + llassert(index == 0); +} + +void LLConversationViewParticipant::computeLabelRightPadding() +{ + mLabelPaddingRight = DEFAULT_TEXT_PADDING_RIGHT; + LLView* control; + S32 ctrl_width; + + for (S32 i = 0; i < ALIC_COUNT; ++i) + { + control = getItemChildView((EAvatarListItemChildIndex)i); + + // skip invisible views + if (!control->getVisible()) continue; + + ctrl_width = sChildrenWidths[i]; // including space between current & left controls + // accumulate the amount of space taken by the controls + mLabelPaddingRight += ctrl_width; + } +} + +LLView* LLConversationViewParticipant::getItemChildView(EAvatarListItemChildIndex child_view_index) +{ + LLView* child_view = NULL; + + switch (child_view_index) + { + case ALIC_SPEAKER_INDICATOR: + child_view = mSpeakingIndicator; + break; + case ALIC_INFO_BUTTON: + child_view = mInfoBtn; + break; + default: + LL_WARNS("AvatarItemReshape") << "Unexpected child view index is passed: " << child_view_index << LL_ENDL; + llassert(0); + break; + // leave child_view untouched + } + + return child_view; +} + // EOF diff --git a/indra/newview/llconversationview.h b/indra/newview/llconversationview.h index 0dcf6542a3..686a79ad39 100755 --- a/indra/newview/llconversationview.h +++ b/indra/newview/llconversationview.h @@ -29,12 +29,6 @@ #include "llfolderviewitem.h" - - - -#include "llstyle.h" -#include "llcallbackmap.h" -#include "lltextbox.h" #include "llbutton.h" #include "lloutputmonitorctrl.h" @@ -71,8 +65,6 @@ public: // Implementation of conversations list participant (avatar) widgets -class LLAvatarIconCtrl; - class LLConversationViewParticipant : public LLFolderViewItem { @@ -108,6 +100,18 @@ private: LLButton * mInfoBtn; LLOutputMonitorCtrl* mSpeakingIndicator; LLUUID mUUID; // UUID of the participant + + typedef enum e_avatar_item_child { + ALIC_SPEAKER_INDICATOR, + ALIC_INFO_BUTTON, + ALIC_COUNT, + } EAvatarListItemChildIndex; + + static bool sStaticInitialized; // this variable is introduced to improve code readability + static S32 sChildrenWidths[ALIC_COUNT]; + static void initChildrenWidths(LLConversationViewParticipant* self); + void computeLabelRightPadding(); + LLView* getItemChildView(EAvatarListItemChildIndex child_view_index); }; #endif // LL_LLCONVERSATIONVIEW_H diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index 9320117eb5..299d38298e 100755 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -724,6 +724,8 @@ LLConversationViewParticipant* LLIMFloaterContainer::createConversationViewParti //params.creation_date = bridge->getCreationDate(); params.root = mConversationsRoot; params.listener = item; + + //16 and panel_rect.getWidth() are used since that is currently the values used in repositioningWidgets() params.rect = LLRect (0, 16, panel_rect.getWidth(), 0); params.tool_tip = params.name; params.participant_id = item->getUUID(); diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp index d470abb8c5..0a402d8c42 100755 --- a/indra/newview/llviewerfoldertype.cpp +++ b/indra/newview/llviewerfoldertype.cpp @@ -148,7 +148,7 @@ LLViewerFolderDictionary::LLViewerFolderDictionary() } #endif - addEntry(LLFolderType::FT_PROFILE, new ViewerFolderEntry("Profile", "Generic_Person", "Generic_Person", FALSE, false, "default")); + addEntry(LLFolderType::FT_PROFILEXXXGGG, new ViewerFolderEntry("Profile", "Generic_Person", "Generic_Person", FALSE, false, "default")); } bool LLViewerFolderDictionary::initEnsemblesFromFile() |