diff options
Diffstat (limited to 'linden/indra/newview/llimpanel.h')
-rw-r--r-- | linden/indra/newview/llimpanel.h | 155 |
1 files changed, 147 insertions, 8 deletions
diff --git a/linden/indra/newview/llimpanel.h b/linden/indra/newview/llimpanel.h index 10d387e..525f868 100644 --- a/linden/indra/newview/llimpanel.h +++ b/linden/indra/newview/llimpanel.h | |||
@@ -33,15 +33,122 @@ | |||
33 | #include "lluuid.h" | 33 | #include "lluuid.h" |
34 | #include "lldarray.h" | 34 | #include "lldarray.h" |
35 | #include "llinstantmessage.h" | 35 | #include "llinstantmessage.h" |
36 | #include "llvoiceclient.h" | ||
36 | 37 | ||
37 | class LLLineEditor; | 38 | class LLLineEditor; |
38 | class LLViewerTextEditor; | 39 | class LLViewerTextEditor; |
39 | class LLInventoryItem; | 40 | class LLInventoryItem; |
40 | class LLInventoryCategory; | 41 | class LLInventoryCategory; |
42 | class LLIMSpeakerMgr; | ||
43 | class LLPanelActiveSpeakers; | ||
44 | |||
45 | class LLVoiceChannel : public LLVoiceClientStatusObserver | ||
46 | { | ||
47 | public: | ||
48 | typedef enum e_voice_channel_state | ||
49 | { | ||
50 | STATE_NO_CHANNEL_INFO, | ||
51 | STATE_ERROR, | ||
52 | STATE_HUNG_UP, | ||
53 | STATE_READY, | ||
54 | STATE_CALL_STARTED, | ||
55 | STATE_RINGING, | ||
56 | STATE_CONNECTED | ||
57 | } EState; | ||
58 | |||
59 | LLVoiceChannel(const LLUUID& session_id, const LLString& session_name); | ||
60 | virtual ~LLVoiceChannel(); | ||
61 | |||
62 | void setChannelInfo(const LLString& uri, const LLString& credentials); | ||
63 | /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal); | ||
64 | |||
65 | virtual void handleStatusChange(EStatusType status); | ||
66 | virtual void handleError(EStatusType status); | ||
67 | virtual void deactivate(); | ||
68 | virtual void activate(); | ||
69 | virtual void getChannelInfo(); | ||
70 | virtual BOOL isActive(); | ||
71 | virtual BOOL callStarted(); | ||
72 | EState getState() { return mState; } | ||
73 | |||
74 | void updateSessionID(const LLUUID& new_session_id); | ||
75 | |||
76 | static LLVoiceChannel* getChannelByID(const LLUUID& session_id); | ||
77 | static LLVoiceChannel* getChannelByURI(LLString uri); | ||
78 | static LLVoiceChannel* getCurrentVoiceChannel() { return sCurrentVoiceChannel; } | ||
79 | static void initClass(); | ||
80 | |||
81 | protected: | ||
82 | void setState(EState state); | ||
83 | void setURI(LLString uri); | ||
84 | |||
85 | LLString mURI; | ||
86 | LLString mCredentials; | ||
87 | LLUUID mSessionID; | ||
88 | EState mState; | ||
89 | LLString mSessionName; | ||
90 | LLString::format_map_t mNotifyArgs; | ||
91 | BOOL mIgnoreNextSessionLeave; | ||
92 | LLViewHandle mLoginNotificationHandle; | ||
93 | |||
94 | typedef std::map<LLUUID, LLVoiceChannel*> voice_channel_map_t; | ||
95 | static voice_channel_map_t sVoiceChannelMap; | ||
96 | |||
97 | typedef std::map<LLString, LLVoiceChannel*> voice_channel_map_uri_t; | ||
98 | static voice_channel_map_uri_t sVoiceChannelURIMap; | ||
99 | |||
100 | static LLVoiceChannel* sCurrentVoiceChannel; | ||
101 | }; | ||
102 | |||
103 | class LLVoiceChannelGroup : public LLVoiceChannel | ||
104 | { | ||
105 | public: | ||
106 | LLVoiceChannelGroup(const LLUUID& session_id, const LLString& session_name); | ||
107 | virtual ~LLVoiceChannelGroup(); | ||
108 | |||
109 | /*virtual*/ void handleError(EStatusType status); | ||
110 | /*virtual*/ void activate(); | ||
111 | /*virtual*/ void deactivate(); | ||
112 | /*virtual*/ void getChannelInfo(); | ||
113 | }; | ||
114 | |||
115 | class LLVoiceChannelProximal : public LLVoiceChannel, public LLSingleton<LLVoiceChannelProximal> | ||
116 | { | ||
117 | public: | ||
118 | LLVoiceChannelProximal(); | ||
119 | virtual ~LLVoiceChannelProximal(); | ||
120 | |||
121 | /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal); | ||
122 | /*virtual*/ void handleStatusChange(EStatusType status); | ||
123 | /*virtual*/ void handleError(EStatusType status); | ||
124 | /*virtual*/ BOOL isActive(); | ||
125 | /*virtual*/ void activate(); | ||
126 | /*virtual*/ void deactivate(); | ||
127 | |||
128 | }; | ||
129 | |||
130 | class LLVoiceChannelP2P : public LLVoiceChannelGroup | ||
131 | { | ||
132 | public: | ||
133 | LLVoiceChannelP2P(const LLUUID& session_id, const LLString& session_name, const LLUUID& other_user_id); | ||
134 | virtual ~LLVoiceChannelP2P(); | ||
135 | |||
136 | /*virtual*/ void handleStatusChange(EStatusType status); | ||
137 | /*virtual*/ void handleError(EStatusType status); | ||
138 | /*virtual*/ void activate(); | ||
139 | /*virtual*/ void getChannelInfo(); | ||
140 | |||
141 | void setSessionHandle(const LLString& handle); | ||
142 | |||
143 | private: | ||
144 | LLString mSessionHandle; | ||
145 | LLUUID mOtherUserID; | ||
146 | }; | ||
41 | 147 | ||
42 | class LLFloaterIMPanel : public LLFloater | 148 | class LLFloaterIMPanel : public LLFloater |
43 | { | 149 | { |
44 | public: | 150 | public: |
151 | |||
45 | // The session id is the id of the session this is for. The target | 152 | // The session id is the id of the session this is for. The target |
46 | // refers to the user (or group) that where this session serves as | 153 | // refers to the user (or group) that where this session serves as |
47 | // the default. For example, if you open a session though a | 154 | // the default. For example, if you open a session though a |
@@ -60,7 +167,7 @@ public: | |||
60 | const LLUUID& target_id, | 167 | const LLUUID& target_id, |
61 | const LLDynamicArray<LLUUID>& ids, | 168 | const LLDynamicArray<LLUUID>& ids, |
62 | EInstantMessage dialog); | 169 | EInstantMessage dialog); |
63 | 170 | virtual ~LLFloaterIMPanel(); | |
64 | 171 | ||
65 | /*virtual*/ BOOL postBuild(); | 172 | /*virtual*/ BOOL postBuild(); |
66 | 173 | ||
@@ -73,6 +180,10 @@ public: | |||
73 | // Return TRUE if successful, otherwise FALSE. | 180 | // Return TRUE if successful, otherwise FALSE. |
74 | BOOL inviteToSession(const LLDynamicArray<LLUUID>& agent_ids); | 181 | BOOL inviteToSession(const LLDynamicArray<LLUUID>& agent_ids); |
75 | 182 | ||
183 | void addHistoryLine(const LLUUID& source, | ||
184 | const std::string &utf8msg, | ||
185 | const LLColor4& color = LLColor4::white, | ||
186 | bool log_to_file = true); | ||
76 | void addHistoryLine(const std::string &utf8msg, | 187 | void addHistoryLine(const std::string &utf8msg, |
77 | const LLColor4& color = LLColor4::white, | 188 | const LLColor4& color = LLColor4::white, |
78 | bool log_to_file = true); | 189 | bool log_to_file = true); |
@@ -91,15 +202,32 @@ public: | |||
91 | static void onInputEditorFocusReceived( LLUICtrl* caller, void* userdata ); | 202 | static void onInputEditorFocusReceived( LLUICtrl* caller, void* userdata ); |
92 | static void onInputEditorFocusLost(LLUICtrl* caller, void* userdata); | 203 | static void onInputEditorFocusLost(LLUICtrl* caller, void* userdata); |
93 | static void onInputEditorKeystroke(LLLineEditor* caller, void* userdata); | 204 | static void onInputEditorKeystroke(LLLineEditor* caller, void* userdata); |
205 | static void onCommitChat(LLUICtrl* caller, void* userdata); | ||
94 | static void onTabClick( void* userdata ); | 206 | static void onTabClick( void* userdata ); |
95 | 207 | ||
96 | static void onClickProfile( void* userdata ); // Profile button pressed | 208 | static void onClickProfile( void* userdata ); |
209 | static void onClickGroupInfo( void* userdata ); | ||
97 | static void onClickClose( void* userdata ); | 210 | static void onClickClose( void* userdata ); |
211 | static void onClickStartCall( void* userdata ); | ||
212 | static void onClickEndCall( void* userdata ); | ||
213 | static void onClickSend( void* userdata ); | ||
214 | static void onClickToggleActiveSpeakers( void* userdata ); | ||
215 | static void* createSpeakersPanel(void* data); | ||
216 | |||
217 | //callbacks for P2P muting and volume control | ||
218 | static void onClickMuteVoice(LLUICtrl* source, void* user_data); | ||
219 | static void onVolumeChange(LLUICtrl* source, void* user_data); | ||
98 | 220 | ||
99 | const LLUUID& getSessionID() const { return mSessionUUID; } | 221 | const LLUUID& getSessionID() const { return mSessionUUID; } |
100 | const LLUUID& getOtherParticipantID() const { return mOtherParticipantUUID; } | 222 | const LLUUID& getOtherParticipantID() const { return mOtherParticipantUUID; } |
223 | void updateSpeakersList(LLSD speaker_updates); | ||
224 | void setSpeakersListFromMap(LLSD speaker_list); | ||
225 | void setSpeakersList(LLSD speaker_list); | ||
226 | LLVoiceChannel* getVoiceChannel() { return mVoiceChannel; } | ||
101 | EInstantMessage getDialogType() const { return mDialog; } | 227 | EInstantMessage getDialogType() const { return mDialog; } |
102 | 228 | ||
229 | void requestAutoConnect(); | ||
230 | |||
103 | void sessionInitReplyReceived(const LLUUID& im_session_id); | 231 | void sessionInitReplyReceived(const LLUUID& im_session_id); |
104 | 232 | ||
105 | // Handle other participant in the session typing. | 233 | // Handle other participant in the session typing. |
@@ -118,17 +246,17 @@ private: | |||
118 | BOOL dropCategory(LLInventoryCategory* category, BOOL drop); | 246 | BOOL dropCategory(LLInventoryCategory* category, BOOL drop); |
119 | 247 | ||
120 | // test if local agent can add agents. | 248 | // test if local agent can add agents. |
121 | BOOL isAddAllowed() const; | 249 | BOOL isInviteAllowed() const; |
122 | 250 | ||
123 | // Called whenever the user starts or stops typing. | 251 | // Called whenever the user starts or stops typing. |
124 | // Sends the typing state to the other user if necessary. | 252 | // Sends the typing state to the other user if necessary. |
125 | void setTyping(BOOL typing); | 253 | void setTyping(BOOL typing); |
126 | 254 | ||
127 | // Add the "User is typing..." indicator. | 255 | // Add the "User is typing..." indicator. |
128 | void addTypingIndicator(const LLIMInfo* im_info); | 256 | void addTypingIndicator(const std::string &name); |
129 | 257 | ||
130 | // Remove the "User is typing..." indicator. | 258 | // Remove the "User is typing..." indicator. |
131 | void removeTypingIndicator(); | 259 | void removeTypingIndicator(const LLIMInfo* im_info); |
132 | 260 | ||
133 | void sendTypingState(BOOL typing); | 261 | void sendTypingState(BOOL typing); |
134 | 262 | ||
@@ -145,7 +273,8 @@ private: | |||
145 | // 911 ==> Gaurdian_Angel_Group_ID ^ gAgent.getID() | 273 | // 911 ==> Gaurdian_Angel_Group_ID ^ gAgent.getID() |
146 | LLUUID mSessionUUID; | 274 | LLUUID mSessionUUID; |
147 | 275 | ||
148 | BOOL mSessionInitRequested; | 276 | LLVoiceChannel* mVoiceChannel; |
277 | |||
149 | BOOL mSessionInitialized; | 278 | BOOL mSessionInitialized; |
150 | LLSD mQueuedMsgsForInit; | 279 | LLSD mQueuedMsgsForInit; |
151 | 280 | ||
@@ -165,12 +294,22 @@ private: | |||
165 | // Is other user currently typing? | 294 | // Is other user currently typing? |
166 | BOOL mOtherTyping; | 295 | BOOL mOtherTyping; |
167 | 296 | ||
297 | // name of other user who is currently typing | ||
298 | std::string mOtherTypingName; | ||
299 | |||
168 | // Where does the "User is typing..." line start? | 300 | // Where does the "User is typing..." line start? |
169 | S32 mTypingLineStartIndex; | 301 | S32 mTypingLineStartIndex; |
170 | //Where does the "Starting session..." line start? | 302 | // Where does the "Starting session..." line start? |
171 | S32 mSessionStartMsgPos; | 303 | S32 mSessionStartMsgPos; |
172 | 304 | ||
173 | BOOL mSentTypingState; | 305 | BOOL mSentTypingState; |
306 | |||
307 | BOOL mShowSpeakersOnConnect; | ||
308 | |||
309 | BOOL mAutoConnect; | ||
310 | |||
311 | LLIMSpeakerMgr* mSpeakers; | ||
312 | LLPanelActiveSpeakers* mSpeakerPanel; | ||
174 | 313 | ||
175 | // Optimization: Don't send "User is typing..." until the | 314 | // Optimization: Don't send "User is typing..." until the |
176 | // user has actually been typing for a little while. Prevents | 315 | // user has actually been typing for a little while. Prevents |