diff options
author | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
---|---|---|
committer | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
commit | 420b91db29485df39fd6e724e782c449158811cb (patch) | |
tree | b471a94563af914d3ed3edd3e856d21cb1b69945 /indra/newview/llcallingcard.h |
Print done when done.
Diffstat (limited to 'indra/newview/llcallingcard.h')
-rw-r--r-- | indra/newview/llcallingcard.h | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/indra/newview/llcallingcard.h b/indra/newview/llcallingcard.h new file mode 100644 index 0000000000..b557de1c77 --- /dev/null +++ b/indra/newview/llcallingcard.h @@ -0,0 +1,224 @@ +/** + * @file llcallingcard.h + * @brief Definition of the LLPreviewCallingCard class + * + * Copyright (c) 2002-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#ifndef LL_LLCALLINGCARD_H +#define LL_LLCALLINGCARD_H + +#include <map> +#include <set> +#include <string> +#include <vector> +#include "lluserrelations.h" +#include "lluuid.h" +#include "v3dmath.h" + +//class LLInventoryModel; +//class LLInventoryObserver; +class LLMessageSystem; +class LLTrackingData; +class LLFriendObserver +{ +public: + // This enumeration is a way to refer to what changed in a more + // human readable format. You can mask the value provided by + // chaged() to see if the observer is interested in the change. + enum + { + NONE = 0, + ADD = 1, + REMOVE = 2, + ONLINE = 4, + POWERS = 8, + ALL = 0xffffffff + }; + virtual ~LLFriendObserver() {} + virtual void changed(U32 mask) = 0; +}; + +/* +struct LLBuddyInfo +{ + bool mIsOnline; + bool mIsEmpowered; + LLBuddyInfo() : mIsOnline(false), mIsEmpowered(false) {} +}; +*/ + +// This is used as a base class for doing operations on all buddies. +class LLRelationshipFunctor +{ +public: + virtual ~LLRelationshipFunctor() {} + virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy) = 0; +}; + + +class LLAvatarTracker +{ +public: + static LLAvatarTracker& instance() { return sInstance; } + + void track(const LLUUID& avatar_id, const std::string& name); + void untrack(const LLUUID& avatar_id); + bool isTrackedAgentValid() { return mTrackedAgentValid; } + void setTrackedAgentValid(bool valid) { mTrackedAgentValid = valid; } + void findAgent(); + + // coarse update information + void setTrackedCoarseLocation(const LLVector3d& global_pos); + + // dealing with the tracked agent location + bool haveTrackingInfo(); + void getDegreesAndDist(F32& rot, F64& horiz_dist, F64& vert_dist); + LLVector3d getGlobalPos(); + + // Get the name passed in, returns null string if uninitialized. + const LLString& getName(); + + // Get the avatar being tracked, returns LLUUID::null if uninitialized + const LLUUID& getAvatarID(); + + // Deal with inventory + //void observe(LLInventoryModel* model); + //void inventoryChanged(); + + // add or remove agents from buddy list. Each method takes a set + // of buddies and returns how many were actually added or removed. + typedef std::map<LLUUID, LLRelationship*> buddy_map_t; + + S32 addBuddyList(const buddy_map_t& buddies); + //S32 removeBuddyList(const buddy_list_t& exes); + void copyBuddyList(buddy_map_t& buddies) const; + + // deal with termination of friendhsip + void terminateBuddy(const LLUUID& id); + + // get full info + const LLRelationship* getBuddyInfo(const LLUUID& id) const; + + // online status + void setBuddyOnline(const LLUUID& id, bool is_online); + bool isBuddyOnline(const LLUUID& id) const; + + // simple empowered status + void setBuddyEmpowered(const LLUUID& id, bool is_empowered); + bool isBuddyEmpowered(const LLUUID& id) const; + + // set the empower bit & message the server. + void empowerList(const buddy_map_t& list, bool grant); + void empower(const LLUUID& id, bool grant); // wrapper for above + + // register callbacks + void registerCallbacks(LLMessageSystem* msg); + + // Add/remove an observer. If the observer is destroyed, be sure + // to remove it. On destruction of the tracker, it will delete any + // observers left behind. + void addObserver(LLFriendObserver* observer); + void removeObserver(LLFriendObserver* observer); + void notifyObservers(); + + // Apply the functor to every buddy. Do not actually modify the + // buddy list in the functor or bad things will happen. + void applyFunctor(LLRelationshipFunctor& f); + + static void formFriendship(const LLUUID& friend_id); + +protected: + void deleteTrackingData(); + void agentFound(const LLUUID& prey, + const LLVector3d& estimated_global_pos); + + // Message system functionality + static void processAgentFound(LLMessageSystem* msg, void**); + static void processOnlineNotification(LLMessageSystem* msg, void**); + static void processOfflineNotification(LLMessageSystem* msg, void**); + //static void processGrantedProxies(LLMessageSystem* msg, void**); + static void processTerminateFriendship(LLMessageSystem* msg, void**); + static void processChangeUserRights(LLMessageSystem* msg, void**); + + void processNotify(LLMessageSystem* msg, bool online); + void processChange(LLMessageSystem* msg); + +protected: + static LLAvatarTracker sInstance; + LLTrackingData* mTrackingData; + bool mTrackedAgentValid; + U32 mModifyMask; + //LLInventoryModel* mInventory; + //LLInventoryObserver* mInventoryObserver; + + buddy_map_t mBuddyInfo; + + typedef std::vector<LLFriendObserver*> observer_list_t; + observer_list_t mObservers; + +private: + // do not implement + LLAvatarTracker(const LLAvatarTracker&); + bool operator==(const LLAvatarTracker&); + +public: + // don't you dare create or delete this object + LLAvatarTracker(); + ~LLAvatarTracker(); +}; + +// collect set of LLUUIDs we're a proxy for +class LLCollectProxyBuddies : public LLRelationshipFunctor +{ +public: + LLCollectProxyBuddies() {} + virtual ~LLCollectProxyBuddies() {} + virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy); + typedef std::set<LLUUID> buddy_list_t; + buddy_list_t mProxy; +}; + +// collect dictionary sorted map of name -> agent_id for every online buddy +class LLCollectMappableBuddies : public LLRelationshipFunctor +{ +public: + LLCollectMappableBuddies() {} + virtual ~LLCollectMappableBuddies() {} + virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy); + typedef std::map<std::string, LLUUID, LLDictionaryLess> buddy_map_t; + buddy_map_t mMappable; + char mFirst[DB_FIRST_NAME_BUF_SIZE]; + char mLast[DB_LAST_NAME_BUF_SIZE]; +}; + +// collect dictionary sorted map of name -> agent_id for every online buddy +class LLCollectOnlineBuddies : public LLRelationshipFunctor +{ +public: + LLCollectOnlineBuddies() {} + virtual ~LLCollectOnlineBuddies() {} + virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy); + typedef std::map<std::string, LLUUID, LLDictionaryLess> buddy_map_t; + buddy_map_t mOnline; + char mFirst[DB_FIRST_NAME_BUF_SIZE]; + char mLast[DB_LAST_NAME_BUF_SIZE]; +}; + +// collect dictionary sorted map of name -> agent_id for every buddy, +// one map is offline and the other map is online. +class LLCollectAllBuddies : public LLRelationshipFunctor +{ +public: + LLCollectAllBuddies() {} + virtual ~LLCollectAllBuddies() {} + virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy); + typedef std::map<std::string, LLUUID, LLDictionaryLess> buddy_map_t; + buddy_map_t mOnline; + buddy_map_t mOffline; + char mFirst[DB_FIRST_NAME_BUF_SIZE]; + char mLast[DB_LAST_NAME_BUF_SIZE]; +}; + +#endif // LL_LLCALLINGCARD_H |