summaryrefslogtreecommitdiff
path: root/indra/newview/llimfloater.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llimfloater.h')
-rw-r--r--indra/newview/llimfloater.h124
1 files changed, 76 insertions, 48 deletions
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index f7cd35b5eb..434613ff43 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -27,41 +27,55 @@
#ifndef LL_IMFLOATER_H
#define LL_IMFLOATER_H
+#include "llimview.h"
+#include "llimconversation.h"
#include "llinstantmessage.h"
#include "lllogchat.h"
#include "lltooldraganddrop.h"
-#include "lltransientdockablefloater.h"
+#include "llvoicechannel.h"
+#include "llvoiceclient.h"
class LLAvatarName;
-class LLLineEditor;
+class LLButton;
+class LLChatEntry;
+class LLTextEditor;
class LLPanelChatControlPanel;
class LLChatHistory;
class LLInventoryItem;
class LLInventoryCategory;
+typedef boost::signals2::signal<void(const LLUUID& session_id)> floater_showed_signal_t;
+
/**
* Individual IM window that appears at the bottom of the screen,
* optionally "docked" to the bottom tray.
*/
-class LLIMFloater : public LLTransientDockableFloater
+class LLIMFloater
+ : public LLVoiceClientStatusObserver
+ , public LLIMConversation
{
LOG_CLASS(LLIMFloater);
public:
LLIMFloater(const LLUUID& session_id);
virtual ~LLIMFloater();
-
+
+ void initIMSession(const LLUUID& session_id);
+ void initIMFloater();
+
// LLView overrides
/*virtual*/ BOOL postBuild();
/*virtual*/ void setVisible(BOOL visible);
/*virtual*/ BOOL getVisible();
// Check typing timeout timer.
- /*virtual*/ void draw();
+
+ static LLIMFloater* findInstance(const LLUUID& session_id);
+ static LLIMFloater* getInstance(const LLUUID& session_id);
+ static void addToHost(const LLUUID& session_id);
// LLFloater overrides
/*virtual*/ void onClose(bool app_quitting);
/*virtual*/ void setDocked(bool docked, bool pop_on_undock = true);
-
// Make IM conversion visible and update the message history
static LLIMFloater* show(const LLUUID& session_id);
@@ -69,16 +83,12 @@ public:
// Returns true iff panel became visible
static bool toggle(const LLUUID& session_id);
- static LLIMFloater* findInstance(const LLUUID& session_id);
-
- static LLIMFloater* getInstance(const LLUUID& session_id);
-
void sessionInitReplyReceived(const LLUUID& im_session_id);
// get new messages from LLIMModel
void updateMessages();
void reloadMessages();
- static void onSendMsg( LLUICtrl*, void*);
+ static void onSendMsg(LLUICtrl*, void*);
void sendMsg();
// callback for LLIMModel on new messages
@@ -89,62 +99,76 @@ public:
void setPositioned(bool b) { mPositioned = b; };
void onVisibilityChange(const LLSD& new_visibility);
+
+ // Implements LLVoiceClientStatusObserver::onChange() to enable the call
+ // button when voice is available
+ void onChange(EStatusType status, const std::string &channelURI,
+ bool proximal);
+
+ virtual LLTransientFloaterMgr::ETransientGroup getGroup() { return LLTransientFloaterMgr::IM; }
+ virtual void onVoiceChannelStateChanged(
+ const LLVoiceChannel::EState& old_state,
+ const LLVoiceChannel::EState& new_state);
+
void processIMTyping(const LLIMInfo* im_info, BOOL typing);
void processAgentListUpdates(const LLSD& body);
void processSessionUpdate(const LLSD& session_update);
- void updateChatHistoryStyle();
- static void processChatHistoryStyleUpdate(const LLSD& newvalue);
-
- BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
- BOOL drop, EDragAndDropType cargo_type,
- void *cargo_data, EAcceptance *accept,
- std::string& tooltip_msg);
-
- /**
- * Returns true if chat is displayed in multi tabbed floater
- * false if chat is displayed in multiple windows
- */
- static bool isChatMultiTab();
+ /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+ EDragAndDropType cargo_type,
+ void* cargo_data,
+ EAcceptance* accept,
+ std::string& tooltip_msg);
- static void initIMFloater();
//used as a callback on receiving new IM message
static void sRemoveTypingIndicator(const LLSD& data);
-
static void onIMChicletCreated(const LLUUID& session_id);
- virtual LLTransientFloaterMgr::ETransientGroup getGroup() { return LLTransientFloaterMgr::IM; }
+ bool getStartConferenceInSameFloater() const { return mStartConferenceInSameFloater; }
-protected:
- /* virtual */
- void onClickCloseBtn();
+ static boost::signals2::connection setIMFloaterShowedCallback(const floater_showed_signal_t::slot_type& cb);
+ static floater_showed_signal_t sIMFloaterShowedSignal;
private:
+
// process focus events to set a currently active session
/* virtual */ void onFocusLost();
/* virtual */ void onFocusReceived();
+ /*virtual*/ void refresh();
+
+ /*virtual*/ void onClickCloseBtn();
+
// Update the window title, input field help text, etc.
void updateSessionName(const std::string& ui_title, const std::string& ui_label);
-
+
// For display name lookups for IM window titles
void onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name);
-
- BOOL dropCallingCard(LLInventoryItem* item, BOOL drop);
- BOOL dropCategory(LLInventoryCategory* category, BOOL drop);
+
+ /// Updates the list of ad hoc conference participants
+ /// in an IM floater title.
+ void onParticipantsListChanged(LLUICtrl* ctrl);
+
+ bool dropPerson(LLUUID* person_id, bool drop);
BOOL isInviteAllowed() const;
BOOL inviteToSession(const uuid_vec_t& agent_ids);
-
- static void onInputEditorFocusReceived( LLFocusableElement* caller, void* userdata );
- static void onInputEditorFocusLost(LLFocusableElement* caller, void* userdata);
- static void onInputEditorKeystroke(LLLineEditor* caller, void* userdata);
- void setTyping(bool typing);
- void onSlide();
- static void* createPanelIMControl(void* userdata);
- static void* createPanelGroupControl(void* userdata);
- static void* createPanelAdHocControl(void* userdata);
+ void appendMessage(const LLChat& chat, const LLSD &args = 0);
+ static void onInputEditorFocusReceived( LLFocusableElement* caller,void* userdata );
+ static void onInputEditorFocusLost(LLFocusableElement* caller, void* userdata);
+ static void onInputEditorKeystroke(LLTextEditor* caller, void* userdata);
+ void setTyping(bool typing);
+ void onAddButtonClicked();
+ void addSessionParticipants(const uuid_vec_t& uuids);
+ bool canAddSelectedToChat(const uuid_vec_t& uuids);
+
+ void onCallButtonClicked();
+
+ // set the enable/disable state for the Call button
+ virtual void enableDisableCallBtn();
+
+ void boundVoiceChannel();
// Add the "User is typing..." indicator.
void addTypingIndicator(const LLIMInfo* im_info);
@@ -156,14 +180,12 @@ private:
static void confirmLeaveCallCallback(const LLSD& notification, const LLSD& response);
- LLPanelChatControlPanel* mControlPanel;
- LLUUID mSessionID;
+
+ LLIMModel::LLIMSession* mSession;
S32 mLastMessageIndex;
EInstantMessage mDialog;
LLUUID mOtherParticipantUUID;
- LLChatHistory* mChatHistory;
- LLLineEditor* mInputEditor;
bool mPositioned;
std::string mSavedTitle;
@@ -176,7 +198,13 @@ private:
bool mSessionInitialized;
LLSD mQueuedMsgsForInit;
-};
+ bool mStartConferenceInSameFloater;
+
+ // connection to voice channel state change signal
+ boost::signals2::connection mVoiceChannelStateChangeConnection;
+
+ boost::signals2::connection mParticipantsListRefreshConnection;
+};
#endif // LL_IMFLOATER_H