summaryrefslogtreecommitdiff
path: root/indra/newview/llimview.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llimview.h')
-rw-r--r--indra/newview/llimview.h150
1 files changed, 150 insertions, 0 deletions
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
new file mode 100644
index 0000000000..3be1dace1a
--- /dev/null
+++ b/indra/newview/llimview.h
@@ -0,0 +1,150 @@
+/**
+ * @file llimview.h
+ * @brief Container for Instant Messaging
+ *
+ * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#ifndef LL_LLIMVIEW_H
+#define LL_LLIMVIEW_H
+
+#include "llfloater.h"
+#include "llinstantmessage.h"
+#include "lluuid.h"
+
+class LLFloaterNewIM;
+class LLUUID;
+class LLFloaterIMPanel;
+class LLFriendObserver;
+class LLFloaterIM;
+
+class LLIMView : public LLView
+{
+public:
+ LLIMView(const std::string& name, const LLRect& rect);
+ ~LLIMView();
+
+ virtual EWidgetType getWidgetType() const;
+ virtual LLString getWidgetTag() const;
+
+ // Add a message to a session. The session can keyed to sesion id
+ // or agent id.
+ void addMessage(const LLUUID& session_id, const LLUUID& target_id,
+ const char* from, const char* msg,
+ const char* session_name = NULL,
+ EInstantMessage dialog = IM_NOTHING_SPECIAL,
+ U32 parent_estate_id = 0,
+ const LLUUID& region_id = LLUUID::null,
+ const LLVector3& position = LLVector3::zero);
+
+ // This method returns TRUE if the local viewer has a session
+ // currently open keyed to the uuid. The uuid can be keyed by
+ // either session id or agent id.
+ BOOL isIMSessionOpen(const LLUUID& uuid);
+
+ // This adds a session to the talk view. The name is the local
+ // name of the session, dialog specifies the type of
+ // session. Since sessions can be keyed off of first recipient or
+ // initiator, the session can be matched against the id
+ // provided. If the session exists, it is brought forward. This
+ // method accepts a group id or an agent id. Specifying id = NULL
+ // results in an im session to everyone. Returns the uuid of the
+ // session.
+ LLUUID addSession(const std::string& name,
+ EInstantMessage dialog,
+ const LLUUID& other_participant_id);
+
+ // Adds a session using the given session_id. If the session already exists
+ // the dialog type is assumed correct. Returns the uuid of the session.
+ LLUUID addSession(const std::string& name,
+ EInstantMessage dialog,
+ const LLUUID& session_id,
+ const LLDynamicArray<LLUUID>& ids);
+
+ // This removes the panel referenced by the uuid, and then
+ // restores internal consistency. The internal pointer is not
+ // deleted.
+ void removeSession(const LLUUID& session_id);
+
+ void processIMTypingStart(const LLIMInfo* im_info);
+ void processIMTypingStop(const LLIMInfo* im_info);
+
+ // Rebuild stuff
+ void refresh();
+
+ void notifyNewIM();
+
+ // IM received that you haven't seen yet
+ BOOL getIMReceived() const;
+
+ void setFloaterOpen(BOOL open);
+ BOOL getFloaterOpen();
+
+ LLFloaterIM * getFloater() { return mTalkFloater; }
+
+ // close any sessions which are not available in the newimpanel.
+ void pruneSessions();
+
+ // This method is used to go through all active sessions and
+ // disable all of them. This method is usally called when you are
+ // forced to log out or similar situations where you do not have a
+ // good connection.
+ void disconnectAllSessions();
+
+ static void toggle(void*);
+
+ // This is a helper function to determine what kind of im session
+ // should be used for the given agent.
+ static EInstantMessage defaultIMTypeForAgent(const LLUUID& agent_id);
+
+ BOOL hasSession(const LLUUID& session_id);
+
+ // This method returns the im panel corresponding to the uuid
+ // provided. The uuid must be a session id. Returns NULL if there
+ // is no matching panel.
+ LLFloaterIMPanel* findFloaterBySession(const LLUUID& session_id);
+
+private:
+ // create a panel and update internal representation for
+ // consistency. Returns the pointer, caller (the class instance
+ // since it is a private method) is not responsible for deleting
+ // the pointer.
+ LLFloaterIMPanel* createFloater(const LLUUID& session_id, const LLUUID& target_id,
+ const std::string& name, EInstantMessage dialog, BOOL user_initiated = FALSE);
+
+ // This simple method just iterates through all of the ids, and
+ // prints a simple message if they are not online. Used to help
+ // reduce 'hello' messages to the linden employees unlucky enough
+ // to have their calling card in the default inventory.
+ void noteOfflineUsers(LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids);
+
+ void processIMTypingCore(const LLIMInfo* im_info, BOOL typing);
+
+public:
+ LLFloaterIM* mTalkFloater;
+ LLFloaterNewIM* mNewIMFloater;
+
+private:
+ std::set<LLViewHandle> mFloaters;
+ LLFriendObserver* mFriendObserver;
+
+ // An IM has been received that you haven't seen yet.
+ BOOL mIMReceived;
+};
+
+
+class LLFloaterIM : public LLMultiFloater
+{
+public:
+ LLFloaterIM();
+ ///*virtual*/ BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent);
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void onClose(bool app_quitting);
+ /*virtual*/ void addFloater(LLFloater* floaterp, BOOL select_added_floater, LLTabContainer::eInsertionPoint insertion_point = LLTabContainerCommon::END);
+};
+
+// Globals
+extern LLIMView *gIMView;
+
+#endif // LL_LLIMView_H