/** * @file fschathistory.h * @brief LLTextEditor base class * * $LicenseInfo:firstyear=2001&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ // Original file: llchathistory.h #ifndef FS_CHATHISTORY_H #define FS_CHATHISTORY_H #include "lltexteditor.h" #include "lltextbox.h" #include "llviewerchat.h" class LLChatEntry; // FIRE-8602: Typing in chat history focuses chat input line //Chat log widget allowing addition of a message as a widget class FSChatHistory : public LLTextEditor // FIRE-8600: TAB out of chat history { public: struct Params : public LLInitParam::Block { //Message header filename Optional message_header; //Message separator filename Optional message_separator; //Text left padding from the scroll rect Optional left_text_pad; //Text right padding from the scroll rect Optional right_text_pad; //Widget left padding from the scroll rect Optional left_widget_pad; //Widget right padding from the scroll rect Optional right_widget_pad; //Separator top padding Optional top_separator_pad; //Separator bottom padding Optional bottom_separator_pad; //Header top padding Optional top_header_pad; //Header bottom padding Optional bottom_header_pad; Params() : message_header("message_header"), message_separator("message_separator"), left_text_pad("left_text_pad"), right_text_pad("right_text_pad"), left_widget_pad("left_widget_pad"), right_widget_pad("right_widget_pad"), top_separator_pad("top_separator_pad"), bottom_separator_pad("bottom_separator_pad"), top_header_pad("top_header_pad"), bottom_header_pad("bottom_header_pad") {} }; protected: FSChatHistory(const Params&); friend class LLUICtrlFactory; /** * Redefinition of LLTextEditor::updateTextRect() to considerate text * left/right padding params. */ //virtual void updateTextRect(); /** * Builds a message separator. * @return pointer to LLView separator object. */ LLView* getSeparator(); /** * Builds a message header. * @return pointer to LLView header object. */ LLView* getHeader(const LLChat& chat,const LLStyle::Params& style_params, const LLSD& args); // try to fill in mChatInputLine void updateChatInputLine(); public: ~FSChatHistory(); #if LL_SDL2 // IME - International input compositing, i.e. for Japanese / Chinese text input /* virtual */ void setFocus(bool b); #endif LLSD getValue() const; void initFromParams(const Params&); virtual void insertMentionAtCursor(const std::string& str); /** * Appends a widget message. * If last user appended message, concurs with current user, * separator is added before the message, otherwise header is added. * The args LLSD contains: * - use_plain_text_chat_history (bool) - whether to add message as plain text. * - owner_id (LLUUID) - the owner ID for object chat * @param chat - base chat message. * @param args - additional arguments * @param input_append_params - font style. */ void appendMessage(const LLChat& chat, const LLSD &args = LLSD(), const LLStyle::Params& input_append_params = LLStyle::Params()); /*virtual*/ void clear(); /*virtual*/ void draw(); typedef boost::signals2::signal unread_messages_update_callback_t; boost::signals2::connection setUnreadMessagesUpdateCallback(const unread_messages_update_callback_t::slot_type& cb) { return mUnreadMessagesUpdateSignal.connect(cb); } private: std::string mLastFromName; LLUUID mLastFromID; LLDate mLastMessageTime; bool mIsLastMessageFromLog; bool mScrollToBottom; std::string mMessageHeaderFilename; std::string mMessageSeparatorFilename; S32 mLeftTextPad; S32 mRightTextPad; S32 mLeftWidgetPad; S32 mRightWidgetPad; S32 mTopSeparatorPad; S32 mBottomSeparatorPad; S32 mTopHeaderPad; S32 mBottomHeaderPad; std::string mDisplayName; std::string mDisplayName_Username; S32 mUnreadChatSources; unread_messages_update_callback_t mUnreadMessagesUpdateSignal; // FIRE-8602: Typing in chat history focuses chat input line public: virtual bool handleUnicodeCharHere(llwchar uni_char); LLChatEntry* mChatInputLine; // }; #endif // FS_CHATHISTORY_H