From 66b60a71f1af684ed04882fff519f967c4d455f1 Mon Sep 17 00:00:00 2001 From: Andrew Dyukov Date: Thu, 4 Mar 2010 19:37:26 +0200 Subject: Implemented normal subtasks EXT-5906 (Reverse buttons order in the inventory offers) and EXT-5907 (Reverse buttons order in the friendship offer). - Used reverse iterator when iterating over control list in LLChatHistory::appendMessage(). --HG-- branch : product-engine --- indra/newview/llchathistory.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'indra/newview/llchathistory.cpp') diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index e1c96d4a16..911ac9c485 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -743,7 +743,9 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL ctrl_list_t ctrls = notify_box->getControlPanel()->getCtrlList(); S32 offset = 0; - for (ctrl_list_t::iterator it = ctrls.begin(); it != ctrls.end(); it++) + // Children were added by addChild() which uses push_front to insert them into list, + // so to get buttons in correct order reverse iterator is used (EXT-5906) + for (ctrl_list_t::reverse_iterator it = ctrls.rbegin(); it != ctrls.rend(); it++) { LLButton * button = dynamic_cast (*it); if (button != NULL) -- cgit v1.3 From b2cc39d462b33f5fdfed3e6a58dcf467f1b8da46 Mon Sep 17 00:00:00 2001 From: Dmitry Zaporozhan Date: Wed, 17 Mar 2010 13:26:34 +0200 Subject: (work in progress) low task EXT-6377 - Embedded offer panels aren't reshaped by height on IM window resize Added new Toast panel class for use in IM floater. New class handles IM floater reshape and updates Toast height. --HG-- branch : product-engine --- indra/newview/llchathistory.cpp | 2 +- indra/newview/lltoastnotifypanel.cpp | 24 ++++++++++++++++++++++++ indra/newview/lltoastnotifypanel.h | 11 +++++++++-- 3 files changed, 34 insertions(+), 3 deletions(-) (limited to 'indra/newview/llchathistory.cpp') diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 911ac9c485..b2e49dd5c6 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -734,7 +734,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL LLNotificationPtr notification = LLNotificationsUtil::find(chat.mNotifId); if (notification != NULL) { - LLToastNotifyPanel* notify_box = new LLToastNotifyPanel( + LLIMToastNotifyPanel* notify_box = new LLIMToastNotifyPanel( notification); //we can't set follows in xml since it broke toasts behavior notify_box->setFollowsLeft(); diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index 2f77936cad..7d0fb4a46f 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -526,4 +526,28 @@ void LLToastNotifyPanel::disableRespondedOptions(LLNotificationPtr& notification } } + +////////////////////////////////////////////////////////////////////////// + +#include "llscrollcontainer.h" +LLIMToastNotifyPanel::LLIMToastNotifyPanel(LLNotificationPtr& pNotification, const LLRect& rect /* = LLRect::null */) + : LLToastNotifyPanel(pNotification, rect) +{ + mTextBox->setFollowsAll(); +} + +void LLIMToastNotifyPanel::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */) +{ + S32 text_height = mTextBox->getTextBoundingRect().getHeight(); + S32 widget_height = mTextBox->getRect().getHeight(); + S32 delta = text_height - widget_height; + LLRect rc = getRect(); + + rc.setLeftTopAndSize(rc.mLeft, rc.mTop, width, height + delta); + height = rc.getHeight(); + width = rc.getWidth(); + + LLToastPanel::reshape(width, height, called_from_parent); +} + // EOF diff --git a/indra/newview/lltoastnotifypanel.h b/indra/newview/lltoastnotifypanel.h index d565085e3c..a8d2d03236 100644 --- a/indra/newview/lltoastnotifypanel.h +++ b/indra/newview/lltoastnotifypanel.h @@ -79,8 +79,6 @@ protected: bool mCloseNotificationOnDestroy; -private: - typedef std::pair index_button_pair_t; void adjustPanelForScriptNotice(S32 max_width, S32 max_height); void adjustPanelForTipNotice(); @@ -136,4 +134,13 @@ private: static const LLFontGL* sFontSmall; }; +class LLIMToastNotifyPanel : public LLToastNotifyPanel +{ +public: + + LLIMToastNotifyPanel(LLNotificationPtr& pNotification, const LLRect& rect = LLRect::null); + + /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); +}; + #endif /* LLTOASTNOTIFYPANEL_H_ */ -- cgit v1.3 From 31370e1aaea10543be81d1707c28dc4c2559baac Mon Sep 17 00:00:00 2001 From: Alexei Arabadji Date: Wed, 17 Mar 2010 16:27:35 +0200 Subject: fixed EXT-6373 “Consecutive offer messages are unreadable in the IM log”, added spacer panel for IM chat plaintext mode; MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --HG-- branch : product-engine --- indra/newview/llchathistory.cpp | 16 ++++++++++++++++ indra/newview/llchathistory.h | 9 +++++++++ .../skins/default/xui/en/widgets/chat_history.xml | 1 + 3 files changed, 26 insertions(+) (limited to 'indra/newview/llchathistory.cpp') diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 911ac9c485..b497dde9dd 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -447,6 +447,7 @@ LLChatHistory::LLChatHistory(const LLChatHistory::Params& p) : LLUICtrl(p), mMessageHeaderFilename(p.message_header), mMessageSeparatorFilename(p.message_separator), + mMessagePlaintextSeparatorFilename(p.message_plaintext_separator), mLeftTextPad(p.left_text_pad), mRightTextPad(p.right_text_pad), mLeftWidgetPad(p.left_widget_pad), @@ -534,6 +535,12 @@ LLView* LLChatHistory::getSeparator() return separator; } +LLView* LLChatHistory::getPlaintextSeparator() +{ + LLPanel* separator = LLUICtrlFactory::getInstance()->createFromFile(mMessagePlaintextSeparatorFilename, NULL, LLPanel::child_registry_t::instance()); + return separator; +} + LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style_params) { LLChatHistoryHeader* header = LLChatHistoryHeader::createInstance(mMessageHeaderFilename); @@ -632,6 +639,15 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL if (use_plain_text_chat_history) { + // append plaintext separator + LLView* separator = getPlaintextSeparator(); + LLInlineViewSegment::Params p; + p.force_newline = true; + p.left_pad = mLeftWidgetPad; + p.right_pad = mRightWidgetPad; + p.view = separator; + mEditor->appendWidget(p, "\n", false); + mEditor->appendText("[" + chat.mTimeStr + "] ", mEditor->getText().size() != 0, style_params); if (utf8str_trim(chat.mFromName).size() != 0) diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h index 950b32861b..dfe5ea98e6 100644 --- a/indra/newview/llchathistory.h +++ b/indra/newview/llchathistory.h @@ -47,6 +47,8 @@ class LLChatHistory : public LLUICtrl Optional message_header; //Message separator filename Optional message_separator; + //Message plaintext separator filename + Optional message_plaintext_separator; //Text left padding from the scroll rect Optional left_text_pad; //Text right padding from the scroll rect @@ -69,6 +71,7 @@ class LLChatHistory : public LLUICtrl Params() : message_header("message_header"), message_separator("message_separator"), + message_plaintext_separator("message_plaintext_separator"), left_text_pad("left_text_pad"), right_text_pad("right_text_pad"), left_widget_pad("left_widget_pad"), @@ -96,6 +99,11 @@ class LLChatHistory : public LLUICtrl * @return pointer to LLView separator object. */ LLView* getSeparator(); + /** + * Builds a message plaintext separator. + * @return pointer to LLView separator object. + */ + LLView* getPlaintextSeparator(); /** * Builds a message header. * @return pointer to LLView header object. @@ -133,6 +141,7 @@ class LLChatHistory : public LLUICtrl std::string mMessageHeaderFilename; std::string mMessageSeparatorFilename; + std::string mMessagePlaintextSeparatorFilename; S32 mLeftTextPad; S32 mRightTextPad; diff --git a/indra/newview/skins/default/xui/en/widgets/chat_history.xml b/indra/newview/skins/default/xui/en/widgets/chat_history.xml index ef885e8045..aa3ea736b8 100644 --- a/indra/newview/skins/default/xui/en/widgets/chat_history.xml +++ b/indra/newview/skins/default/xui/en/widgets/chat_history.xml @@ -2,6 +2,7 @@ Date: Thu, 18 Mar 2010 17:12:43 -0700 Subject: EXT-5549 - Can't Select Last Character In Chat Window --- indra/newview/llchathistory.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'indra/newview/llchathistory.cpp') diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index e1c96d4a16..78b258a82d 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -718,7 +718,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL view->reshape(target_rect.getWidth(), view->getRect().getHeight()); view->setOrigin(target_rect.mLeft, view->getRect().mBottom); - std::string widget_associated_text = "\n[" + chat.mTimeStr + "] "; + std::string widget_associated_text = "[" + chat.mTimeStr + "] "; if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM) widget_associated_text += chat.mFromName + delimiter; @@ -816,6 +816,8 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL { message = chat.mFromName + message; } + + message += "\n"; mEditor->appendText(message, FALSE, style_params); -- cgit v1.3 From ab23ae02291708ee703630b01982412d85417a1a Mon Sep 17 00:00:00 2001 From: Andrew Dyukov Date: Fri, 19 Mar 2010 20:49:02 +0200 Subject: Implemented normal task EXT-6379 ([TRUNCATION] [EN XUI REDESIGN] - Receiving Landmarks). - Button order was fixed in changeset dd44dac25177. It was an implemetation of EXT-5906 (Reverse buttons order in the inventory offers). That changeset was included in cumulative diff at https://codereview.productengine.com/secondlife/r/52/ and already made its way into viewer 2-0. - This changeset removes inventory offer button truncation in IM in German locale by increasing default width of IM floater and decreasing distance between buttons. Reviewed by Vadim at https://codereview.productengine.com/secondlife/r/77/ --HG-- branch : product-engine --- indra/newview/llchathistory.cpp | 2 +- indra/newview/skins/default/xui/en/floater_im_session.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'indra/newview/llchathistory.cpp') diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index ac60fe6ba6..ffa24a0c15 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -776,7 +776,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL button->getRect().mBottom)); button->setAutoResize(true); button->autoResize(); - offset += 2 * HPAD + button->getRect().getWidth(); + offset += HPAD + button->getRect().getWidth(); button->setFollowsNone(); } } 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 25016e0673..422e50f035 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -13,7 +13,7 @@ can_minimize="true" can_close="true" visible="false" - width="360" + width="385" can_resize="true" min_width="250" min_height="190"> @@ -22,7 +22,7 @@ default_tab_group="2" follows="all" height="320" - width="360" + width="385" layout="topleft" orientation="horizontal" name="im_panels" -- cgit v1.3 From 91b90b0a1749471a9016c4935b58c08a3dd66523 Mon Sep 17 00:00:00 2001 From: Richard Nelson Date: Tue, 23 Mar 2010 11:18:01 -0700 Subject: EXT-5549 Can't select last character in chat window --- indra/llrender/llfontgl.cpp | 2 +- indra/llui/lltextbase.cpp | 26 +++++++++++++++++++++----- indra/newview/llchathistory.cpp | 5 +---- 3 files changed, 23 insertions(+), 10 deletions(-) (limited to 'indra/newview/llchathistory.cpp') diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index 768f042e69..d9e1976341 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -673,7 +673,7 @@ S32 LLFontGL::charFromPixelOffset(const llwchar* wchars, S32 begin_offset, F32 t target_x *= sScaleX; // max_chars is S32_MAX by default, so make sure we don't get overflow - const S32 max_index = begin_offset + llmin(S32_MAX - begin_offset, max_chars); + const S32 max_index = begin_offset + llmin(S32_MAX - begin_offset, max_chars - 1); F32 scaled_max_pixels = max_pixels * sScaleX; diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 633135382e..13201719f4 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -350,6 +350,8 @@ void LLTextBase::drawSelectionBackground() S32 segment_line_start = segmentp->getStart() + segment_offset; S32 segment_line_end = llmin(segmentp->getEnd(), line_iter->mDocIndexEnd); + if (segment_line_start > segment_line_end) break; + S32 segment_width = 0; S32 segment_height = 0; @@ -362,7 +364,7 @@ void LLTextBase::drawSelectionBackground() } // if selection spans end of current segment... - if (selection_right > segment_line_end) + if (selection_right >= segment_line_end) { // extend selection slightly beyond end of line // to indicate selection of newline character (use "n" character to determine width) @@ -1813,11 +1815,18 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round, const LLTextSegmentPtr segmentp = *line_seg_iter; S32 segment_line_start = segmentp->getStart() + line_seg_offset; - S32 segment_line_length = llmin(segmentp->getEnd(), line_iter->mDocIndexEnd - 1) - segment_line_start; + S32 segment_line_length = llmin(segmentp->getEnd(), line_iter->mDocIndexEnd) - segment_line_start; S32 text_width, text_height; - segmentp->getDimensions(line_seg_offset, segment_line_length, text_width, text_height); - if (local_x < start_x + text_width // cursor to left of right edge of text - || (hit_past_end_of_line && (segmentp->getEnd() >= line_iter->mDocIndexEnd - 1))) // or this segment wraps to next line + bool newline = segmentp->getDimensions(line_seg_offset, segment_line_length, text_width, text_height); + + // if we've reached a line of text *below* the mouse cursor, doc index is first character on that line + if (hit_past_end_of_line && local_y - mVisibleTextRect.mBottom + visible_region.mBottom > line_iter->mRect.mTop) + { + pos = segment_line_start; + break; + } + if (local_x < start_x + text_width // cursor to left of right edge of text + || newline) // or this line ends with a newline, set doc pos to newline char { // Figure out which character we're nearest to. S32 offset; @@ -1841,6 +1850,13 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round, pos = segment_line_start + offset; break; } + else if (hit_past_end_of_line && segmentp->getEnd() >= line_iter->mDocIndexEnd - 1) + { + // segment wraps to next line, so just set doc pos to start of next line + pos = llmin(getLength(), line_iter->mDocIndexEnd); + break; + } + start_x += text_width; } diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 7a45637d42..fc906a8f8e 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -734,7 +734,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL view->reshape(target_rect.getWidth(), view->getRect().getHeight()); view->setOrigin(target_rect.mLeft, view->getRect().mBottom); - std::string widget_associated_text = "[" + chat.mTimeStr + "] "; + std::string widget_associated_text = "\n[" + chat.mTimeStr + "] "; if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM) widget_associated_text += chat.mFromName + delimiter; @@ -835,9 +835,6 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL message = chat.mFromName + message; } - message += "\n"; - - mEditor->appendText(message, FALSE, style_params); } mEditor->blockUndo(); -- cgit v1.3