summaryrefslogtreecommitdiff
path: root/indra/newview/llchathistory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llchathistory.cpp')
-rw-r--r--indra/newview/llchathistory.cpp126
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();
+}