diff options
Diffstat (limited to 'indra/newview/llchathistory.cpp')
-rw-r--r-- | indra/newview/llchathistory.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp new file mode 100644 index 0000000000..80f3867a80 --- /dev/null +++ b/indra/newview/llchathistory.cpp @@ -0,0 +1,126 @@ +/** + * @file llchathistory.cpp + * @brief LLTextEditor base class + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llchathistory.h" +#include "llpanel.h" +#include "lltextbox.h" +#include "lluictrlfactory.h" +#include "llscrollcontainer.h" +#include "llavatariconctrl.h" + +static LLDefaultChildRegistry::Register<LLChatHistory> r("chat_history"); +static const std::string MESSAGE_USERNAME_DATE_SEPARATOR(" ----- "); + +LLChatHistory::LLChatHistory(const LLChatHistory::Params& p) +: LLTextEditor(p), +mMessageHeaderFilename(p.message_header), +mMessageSeparatorFilename(p.message_separator), +mLeftTextPad(p.left_text_pad), +mRightTextPad(p.right_text_pad), +mLeftWidgetPad(p.left_widget_pad), +mRightWidgetPad(p.rigth_widget_pad) +{ +} + +LLChatHistory::~LLChatHistory() +{ + this->clear(); +} + +/*void LLChatHistory::updateTextRect() +{ + static LLUICachedControl<S32> texteditor_border ("UITextEditorBorder", 0); + + LLRect old_text_rect = mTextRect; + mTextRect = mScroller->getContentWindowRect(); + mTextRect.stretch(-texteditor_border); + mTextRect.mLeft += mLeftTextPad; + mTextRect.mRight -= mRightTextPad; + if (mTextRect != old_text_rect) + { + needsReflow(); + } +}*/ + +LLView* LLChatHistory::getSeparator() +{ + LLPanel* separator = LLUICtrlFactory::getInstance()->createFromFile<LLPanel>(mMessageSeparatorFilename, NULL, LLPanel::child_registry_t::instance()); + return separator; +} + +LLView* LLChatHistory::getHeader(const LLUUID& avatar_id, std::string& from, std::string& time) +{ + LLPanel* header = LLUICtrlFactory::getInstance()->createFromFile<LLPanel>(mMessageHeaderFilename, NULL, LLPanel::child_registry_t::instance()); + LLTextBox* userName = header->getChild<LLTextBox>("user_name"); + userName->setValue(from); + LLTextBox* timeBox = header->getChild<LLTextBox>("time_box"); + timeBox->setValue(time); + if(!avatar_id.isNull()) + { + LLAvatarIconCtrl* icon = header->getChild<LLAvatarIconCtrl>("avatar_icon"); + icon->setValue(avatar_id); + } + return header; +} + +void LLChatHistory::appendWidgetMessage(const LLUUID& avatar_id, std::string& from, std::string& time, std::string& message, LLStyle::Params& style_params) +{ + LLView* view = NULL; + std::string view_text; + + if (mLastFromName == from) + { + view = getSeparator(); + view_text = "\n"; + } + else + { + view = getHeader(avatar_id, from, time); + view_text = from + MESSAGE_USERNAME_DATE_SEPARATOR + time; + } + //Prepare the rect for the view + LLRect target_rect = mScroller->getContentWindowRect(); + target_rect.mLeft += mLeftWidgetPad; + target_rect.mRight -= mRightWidgetPad; + view->reshape(target_rect.getWidth(), view->getRect().getHeight()); + view->setOrigin(target_rect.mLeft, view->getRect().mBottom); + + this->appendWidget(view, view_text, FALSE, TRUE); + + //Append the text message + this->appendText(message, TRUE, style_params); + + mLastFromName = from; + this->blockUndo(); + this->setCursorAndScrollToEnd(); +} |