diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llavataractions.cpp | 7 | ||||
-rw-r--r-- | indra/newview/llbottomtray.h | 10 | ||||
-rw-r--r-- | indra/newview/llcallfloater.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llexpandabletextbox.cpp | 7 | ||||
-rw-r--r-- | indra/newview/llexpandabletextbox.h | 1 | ||||
-rw-r--r-- | indra/newview/llimfloater.cpp | 24 | ||||
-rw-r--r-- | indra/newview/llimview.cpp | 7 | ||||
-rw-r--r-- | indra/newview/llinventorybridge.cpp | 24 | ||||
-rw-r--r-- | indra/newview/llsyswellwindow.cpp | 38 | ||||
-rw-r--r-- | indra/newview/llsyswellwindow.h | 5 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_im_session.xml | 5 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_voice_controls.xml | 61 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml | 9 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/panel_bottomtray.xml | 12 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/panel_group_control_panel.xml | 16 |
15 files changed, 151 insertions, 77 deletions
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 636b1de4d4..c5a1ffdcb3 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -264,11 +264,8 @@ bool LLAvatarActions::isCalling(const LLUUID &id) //static bool LLAvatarActions::canCall(const LLUUID &id) { - if(isFriend(id)) - { - return LLAvatarTracker::instance().isBuddyOnline(id) && LLVoiceClient::voiceEnabled(); - } - else + // For now we do not need to check whether passed UUID is ID of agent's friend. + // Use common check of Voice Client state. { // don't need to check online/offline status because "usual resident" (resident that is not a friend) // can be only ONLINE. There is no way to see "usual resident" in OFFLINE status. If we see "usual diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 1adea24ee4..209fa7cca1 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -92,6 +92,11 @@ public: void showMoveButton(BOOL visible); void showCameraButton(BOOL visible); void showSnapshotButton(BOOL visible); + + /** + * Creates IM Chiclet based on session type (IM chat or Group chat) + */ + LLIMChiclet* createIMChiclet(const LLUUID& session_id); private: typedef enum e_resize_status_type @@ -184,11 +189,6 @@ protected: void onContextMenuItemClicked(const LLSD& userdata); bool onContextMenuItemEnabled(const LLSD& userdata); - /** - * Creates IM Chiclet based on session type (IM chat or Group chat) - */ - LLIMChiclet* createIMChiclet(const LLUUID& session_id); - LLChicletPanel* mChicletPanel; LLPanel* mSpeakPanel; LLSpeakButton* mSpeakBtn; diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index 5f45abc922..1f23840109 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -241,7 +241,7 @@ void LLCallFloater::updateSession() //hide "Leave Call" button for nearby chat bool is_local_chat = mVoiceType == VC_LOCAL_CHAT; - childSetVisible("leave_btn_panel", !is_local_chat); + childSetVisible("leave_call_btn", !is_local_chat); refreshPartisipantList(); updateModeratorState(); diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index 9c37c953fe..9f6412c0ab 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -322,6 +322,13 @@ void LLExpandableTextBox::expandTextBox() // hide "more" link, and show full text contents mTextBox->hideExpandText(); + // *HACK dz + // hideExpandText brakes text styles (replaces hyper-links with plain text), see ticket EXT-3290 + // Set text again to make text box re-apply styles. + // *TODO Find proper solution to fix this issue. + // Maybe add removeSegment to LLTextBase + mTextBox->setTextBase(mText); + S32 text_delta = mTextBox->getVerticalTextDelta(); text_delta += mTextBox->getVPad() * 2; text_delta += mScroll->getBorderWidth() * 2; diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h index 7c989cfa50..2b4f9e527c 100644 --- a/indra/newview/llexpandabletextbox.h +++ b/indra/newview/llexpandabletextbox.h @@ -61,6 +61,7 @@ protected: // adds or removes "More" link as needed /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); /*virtual*/ void setText(const LLStringExplicit& text, const LLStyle::Params& input_params = LLStyle::Params()); + void setTextBase(const std::string& text) { LLTextBase::setText(text); } /** * Returns difference between text box height and text height. diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 7dc21e6e23..ca43833530 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -49,6 +49,7 @@ #include "lllogchat.h" #include "llpanelimcontrolpanel.h" #include "llscreenchannel.h" +#include "llsyswellwindow.h" #include "lltrans.h" #include "llchathistory.h" #include "llviewerwindow.h" @@ -339,6 +340,29 @@ void LLIMFloater::onSlide() //static LLIMFloater* LLIMFloater::show(const LLUUID& session_id) { + if (!gIMMgr->hasSession(session_id)) return NULL; + + // we should make sure all related chiclets are in place when the session is a voice call + // chiclets come firts, then comes IM window + if (gIMMgr->isVoiceCall(session_id)) + { + LLIMModel* im_model = LLIMModel::getInstance(); + LLBottomTray* b_tray = LLBottomTray::getInstance(); + + //*TODO hide that into Bottom tray + if (!b_tray->getChicletPanel()->findChiclet<LLChiclet>(session_id)) + { + LLIMChiclet* chiclet = b_tray->createIMChiclet(session_id); + if(chiclet) + { + chiclet->setIMSessionName(im_model->getName(session_id)); + chiclet->setOtherParticipantId(im_model->getOtherParticipantID(session_id)); + } + } + + LLIMWellWindow::getInstance()->addIMRow(session_id); + } + bool not_existed = true; if(isChatMultiTab()) diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 28d9f2170d..9e878f8c75 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1274,8 +1274,11 @@ void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id) } sSession = session; sSession->mVoiceChannel->setStateChangedCallback(LLCallDialogManager::onVoiceChannelStateChanged); - sPreviousSessionlName = sCurrentSessionlName; - sCurrentSessionlName = session->mName; + if(sCurrentSessionlName != session->mName) + { + sPreviousSessionlName = sCurrentSessionlName; + sCurrentSessionlName = session->mName; + } } void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index bacc685130..35ae4dee8e 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -2929,6 +2929,27 @@ LLInventoryModel::item_array_t::iterator findItemByUUID(LLInventoryModel::item_a return result; } +// See also LLInventorySort where landmarks in the Favorites folder are sorted. +class LLViewerInventoryItemSort +{ +public: + bool operator()(const LLPointer<LLViewerInventoryItem>& a, const LLPointer<LLViewerInventoryItem>& b) + { + return a->getSortField() < b->getSortField(); + } +}; + +/** + * Sorts passed items by LLViewerInventoryItem sort field. + * + * @param[in, out] items - array of items, not sorted. + */ +void rearrange_item_order_by_sort_field(LLInventoryModel::item_array_t& items) +{ + static LLViewerInventoryItemSort sort_functor; + std::sort(items.begin(), items.end(), sort_functor); +} + void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId) { LLViewerInventoryItem* srcItem = gInventory.getItem(srcItemId); @@ -3044,6 +3065,9 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, LLUUID srcItemId = inv_item->getUUID(); LLUUID destItemId = itemp->getListener()->getUUID(); + // ensure items are sorted properly before changing order. EXT-3498 + rearrange_item_order_by_sort_field(items); + // update order updateItemsOrder(items, srcItemId, destItemId); diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index f49e7ef0da..3769ddb1cc 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -32,6 +32,8 @@ #include "llviewerprecompiledheaders.h" // must be first include +#include "llagent.h" + #include "llflatlistview.h" #include "llfloaterreg.h" #include "llnotifications.h" @@ -709,8 +711,8 @@ BOOL LLIMWellWindow::postBuild() void LLIMWellWindow::sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) { - if (!mMessageList->getItemByValue(session_id)) return; - + if (mMessageList->getItemByValue(session_id)) return; + // For im sessions started as voice call chiclet gets created on the first incoming message if (gIMMgr->isVoiceCall(session_id)) return; @@ -857,4 +859,36 @@ void LLIMWellWindow::removeObjectRow(const LLUUID& object_id) } } + +void LLIMWellWindow::addIMRow(const LLUUID& session_id) +{ + if (hasIMRow(session_id)) return; + + LLIMModel* im_model = LLIMModel::getInstance(); + addIMRow(session_id, 0, im_model->getName(session_id), im_model->getOtherParticipantID(session_id)); + reshapeWindow(); +} + +bool LLIMWellWindow::hasIMRow(const LLUUID& session_id) +{ + return mMessageList->getItemByValue(session_id); +} + +void LLIMWellWindow::onNewIM(const LLSD& data) +{ + LLUUID from_id = data["from_id"]; + if (from_id.isNull() || gAgentID == from_id) return; + + LLUUID session_id = data["session_id"]; + if (session_id.isNull()) return; + + if (!gIMMgr->isVoiceCall(session_id)) return; + + if (hasIMRow(session_id)) return; + + //first real message, time to create chiclet + addIMRow(session_id); +} + + // EOF diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h index fea145a17e..736b1b9fb4 100644 --- a/indra/newview/llsyswellwindow.h +++ b/indra/newview/llsyswellwindow.h @@ -188,9 +188,14 @@ public: /*virtual*/ void sessionRemoved(const LLUUID& session_id); /*virtual*/ void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id); + void onNewIM(const LLSD& data); + void addObjectRow(const LLUUID& object_id, bool new_message = false); void removeObjectRow(const LLUUID& object_id); + void addIMRow(const LLUUID& session_id); + bool hasIMRow(const LLUUID& session_id); + protected: /*virtual*/ const std::string& getAnchorViewName() { return IM_WELL_ANCHOR_NAME; } diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index a4ade9d0df..156370a459 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -30,14 +30,15 @@ layout="topleft" follows="left" label="IM Control Panel" + min_width="115" auto_resize="false" - user_resize="false" /> + user_resize="true" /> <layout_panel left="0" top="0" height="200" width="245" - user_resize="false"> + user_resize="true"> <button height="20" follows="left|top" diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml index c1a211967c..a86126227e 100644 --- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml @@ -31,12 +31,14 @@ No one near </string> <panel - bevel_style="in" + bevel_style="out" + border="true" follows="left|right|top" height="62" layout="topleft" left="0" name="control_panel" + top="0" width="282"> <panel height="18" @@ -79,51 +81,14 @@ visible="true" width="20" /> </panel> - <layout_stack - animate="false" - bottom="10" - clip="false" + <button follows="left|right|top" height="24" - layout="bottomleft" - orientation="horizontal" - width="262"> - <layout_panel - auto_resize="false" - follows="left" - layout="topleft" - min_width="24" - name="microphone_icon_panel" - top="0" - user_resize="false" - width="24"> - <icon - height="24" - image_name="Microphone_On" - layout="topleft" - name="Microphone_On" - top="0" - width="24" /> - </layout_panel> - <layout_panel - auto_resize="false" - layout="topleft" - min_width="100" - name="leave_btn_panel" - top="0" - user_resize="false" - visible="false" - width="100"> - <button - follows="left|right|top" - height="24" - label="Leave Call" - left="0" - name="leave_call_btn" - top="0" - width="100" /> - </layout_panel> - </layout_stack> + label="Leave Call" + left="91" + name="leave_call_btn" + top_pad="6" + width="100" /> </panel> <avatar_list follows="all" @@ -143,4 +108,12 @@ name="non_avatar_caller" top="70" width="282" /> + <view_border + bevel_style="out" + follows="left|top|right|bottom" + height="206" + layout="topleft" + left="0" + top="63" + width="282" /> </floater> diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml index f5fce65c73..f3a2297151 100644 --- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml @@ -36,9 +36,9 @@ follows="all" height="20" label="Call" - left_delta="40" + left_delta="10" name="call_btn" - width="100" /> + width="160" /> <button bottom="40" follows="all" @@ -46,14 +46,15 @@ label="Leave Call" name="end_call_btn" visible="false" - width="100" /> + /> <button follows="all" bottom="10" height="20" label="Voice Controls" name="voice_ctrls_btn" + use_ellipses="true" visible="false" - width="100" /> + /> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 034f685ee9..3e2910458f 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -351,9 +351,9 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well height="23" image_overlay="Unread_IM" image_overlay_alignment="center" - image_pressed="WellButton_Lit_Selected" - image_pressed_selected="WellButton_Lit" - image_selected="WellButton_Lit" + image_pressed="WellButton_Lit" + image_pressed_selected="WellButton_Lit_Selected" + image_selected="PushButton_Selected_Press" label_color="Black" left="0" max_displayed_count="99" @@ -391,9 +391,9 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well width="35"> <button bottom_pad="3" - image_selected="WellButton_Lit" - image_pressed="WellButton_Lit_Selected" - image_pressed_selected="WellButton_Lit " + image_pressed="WellButton_Lit" + image_pressed_selected="WellButton_Lit_Selected" + image_selected="PushButton_Selected_Press" auto_resize="true" halign="center" height="23" diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml index a5445a5783..86b30ebfce 100644 --- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml @@ -24,9 +24,10 @@ follows="left|right|bottom" height="23" label="Group Profile" - left_delta="28" + left_delta="10" name="group_info_btn" - width="125" /> + use_ellipses="true" + width="160" /> <panel background_visible="true" bg_alpha_color="DkGray2" @@ -43,24 +44,27 @@ follows="all" height="23" label="Call Group" - left_delta="28" + left_delta="10" name="call_btn" - width="125" /> + use_ellipses="true" + width="160" /> <button bottom="40" follows="all" height="23" label="Leave Call" name="end_call_btn" + use_ellipses="true" visible="false" - width="125" /> + /> <button bottom="10" follows="all" height="23" label="Open Voice Controls" name="voice_ctrls_btn" + use_ellipses="true" visible="false" - width="125" /> + /> </panel> </panel> |