llimpanel.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:7k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llimpanel.h
  3.  * @brief LLIMPanel class definition
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_IMPANEL_H
  33. #define LL_IMPANEL_H
  34. #include "lldockablefloater.h"
  35. #include "lllogchat.h"
  36. #include "lluuid.h"
  37. #include "lldarray.h"
  38. #include "llinstantmessage.h"
  39. #include "llvoiceclient.h"
  40. #include "llstyle.h"
  41. class LLLineEditor;
  42. class LLViewerTextEditor;
  43. class LLInventoryItem;
  44. class LLInventoryCategory;
  45. class LLIMSpeakerMgr;
  46. class LLPanelActiveSpeakers;
  47. class LLPanelChatControlPanel;
  48. class LLFloaterIMPanel : public LLFloater
  49. {
  50. public:
  51. // The session id is the id of the session this is for. The target
  52. // refers to the user (or group) that where this session serves as
  53. // the default. For example, if you open a session though a
  54. // calling card, a new session id will be generated, but the
  55. // target_id will be the agent referenced by the calling card.
  56. LLFloaterIMPanel(const std::string& session_label,
  57.  const LLUUID& session_id,
  58.  const LLUUID& target_id,
  59.  const std::vector<LLUUID>& ids,
  60.  EInstantMessage dialog);
  61. virtual ~LLFloaterIMPanel();
  62. /*virtual*/ BOOL postBuild();
  63. // Check typing timeout timer.
  64. /*virtual*/ void draw();
  65. /*virtual*/ void onClose(bool app_quitting);
  66. void onVisibilityChange(const LLSD& new_visibility);
  67. // add target ids to the session. 
  68. // Return TRUE if successful, otherwise FALSE.
  69. BOOL inviteToSession(const std::vector<LLUUID>& agent_ids);
  70. void addHistoryLine(const std::string &utf8msg, 
  71. const LLColor4& color = LLColor4::white, 
  72. bool log_to_file = true,
  73. const LLUUID& source = LLUUID::null,
  74. const std::string& name = LLStringUtil::null);
  75. void setInputFocus( BOOL b );
  76. void selectAll();
  77. void selectNone();
  78. S32 getNumUnreadMessages() { return mNumUnreadMessages; }
  79. BOOL handleKeyHere(KEY key, MASK mask);
  80. BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
  81.    BOOL drop, EDragAndDropType cargo_type,
  82.    void *cargo_data, EAcceptance *accept,
  83.    std::string& tooltip_msg);
  84. static void onInputEditorFocusReceived( LLFocusableElement* caller, void* userdata );
  85. static void onInputEditorFocusLost(LLFocusableElement* caller, void* userdata);
  86. static void onInputEditorKeystroke(LLLineEditor* caller, void* userdata);
  87. static void onCommitChat(LLUICtrl* caller, void* userdata);
  88. static void onTabClick( void* userdata );
  89. static void onClickProfile( void* userdata );
  90. static void onClickGroupInfo( void* userdata );
  91. static void onClickClose( void* userdata );
  92. static void onClickStartCall( void* userdata );
  93. static void onClickEndCall( void* userdata );
  94. static void onClickSend( void* userdata );
  95. static void onClickToggleActiveSpeakers( void* userdata );
  96. static void* createSpeakersPanel(void* data);
  97. static void onKickSpeaker(void* user_data);
  98. //callbacks for P2P muting and volume control
  99. static void onClickMuteVoice(void* user_data);
  100. static void onVolumeChange(LLUICtrl* source, void* user_data);
  101. const LLUUID& getSessionID() const { return mSessionUUID; }
  102. const LLUUID& getOtherParticipantID() const { return mOtherParticipantUUID; }
  103. void processSessionUpdate(const LLSD& update);
  104. EInstantMessage getDialogType() const { return mDialog; }
  105. void setDialogType(EInstantMessage dialog) { mDialog = dialog; }
  106. void sessionInitReplyReceived(const LLUUID& im_session_id);
  107. // Handle other participant in the session typing.
  108. void processIMTyping(const LLIMInfo* im_info, BOOL typing);
  109. private:
  110. // Called by UI methods.
  111. void sendMsg();
  112. // for adding agents via the UI. Return TRUE if possible, do it if 
  113. BOOL dropCallingCard(LLInventoryItem* item, BOOL drop);
  114. BOOL dropCategory(LLInventoryCategory* category, BOOL drop);
  115. // test if local agent can add agents.
  116. BOOL isInviteAllowed() const;
  117. // Called whenever the user starts or stops typing.
  118. // Sends the typing state to the other user if necessary.
  119. void setTyping(BOOL typing);
  120. // Add the "User is typing..." indicator.
  121. void addTypingIndicator(const std::string &name);
  122. // Remove the "User is typing..." indicator.
  123. void removeTypingIndicator(const LLIMInfo* im_info);
  124. void sendTypingState(BOOL typing);
  125. private:
  126. LLLineEditor* mInputEditor;
  127. LLViewerTextEditor* mHistoryEditor;
  128. // The value of the mSessionUUID depends on how the IM session was started:
  129. //   one-on-one  ==> random id
  130. //   group ==> group_id
  131. //   inventory folder ==> folder item_id 
  132. //   911 ==> Gaurdian_Angel_Group_ID ^ gAgent.getID()
  133. LLUUID mSessionUUID;
  134. std::string mSessionLabel;
  135. BOOL mSessionInitialized;
  136. LLSD mQueuedMsgsForInit;
  137. // The value mOtherParticipantUUID depends on how the IM session was started:
  138. //   one-on-one = recipient's id
  139. //   group ==> group_id
  140. //   inventory folder ==> first target id in list
  141. //   911 ==> sender
  142. LLUUID mOtherParticipantUUID;
  143. std::vector<LLUUID> mSessionInitialTargetIDs;
  144. EInstantMessage mDialog;
  145. // Are you currently typing?
  146. BOOL mTyping;
  147. // Is other user currently typing?
  148. BOOL mOtherTyping;
  149. // name of other user who is currently typing
  150. std::string mOtherTypingName;
  151. // Where does the "User is typing..." line start?
  152. S32 mTypingLineStartIndex;
  153. // Where does the "Starting session..." line start?
  154. S32 mSessionStartMsgPos;
  155. S32 mNumUnreadMessages;
  156. BOOL mSentTypingState;
  157. BOOL mShowSpeakersOnConnect;
  158. BOOL mTextIMPossible;
  159. BOOL mProfileButtonEnabled;
  160. BOOL mCallBackEnabled;
  161. LLPanelActiveSpeakers* mSpeakerPanel;
  162. // Optimization:  Don't send "User is typing..." until the
  163. // user has actually been typing for a little while.  Prevents
  164. // extra IMs for brief "lol" type utterences.
  165. LLFrameTimer mFirstKeystrokeTimer;
  166. // Timer to detect when user has stopped typing.
  167. LLFrameTimer mLastKeystrokeTimer;
  168. boost::signals2::connection mFocusCallbackConnection;
  169. void disableWhileSessionStarting();
  170. };
  171. #endif  // LL_IMPANEL_H