llfloateravatarinfo.cpp

Go to the documentation of this file.
00001 
00034 #include "llviewerprecompiledheaders.h"
00035 
00036 #include "llfloateravatarinfo.h"
00037 
00038 // viewer project includes
00039 #include "llagentdata.h"
00040 #include "llcommandhandler.h"
00041 #include "llpanelavatar.h"
00042 #include "lluictrlfactory.h"
00043 
00044 // linden library includes
00045 #include "llinventory.h"
00046 #include "lluuid.h"
00047 #include "message.h"
00048 
00049 const char FLOATER_TITLE[] = "Profile";
00050 const LLRect FAI_RECT(0, 530, 420, 0);
00051 
00052 //-----------------------------------------------------------------------------
00053 // Globals
00054 //-----------------------------------------------------------------------------
00055 
00056 LLMap< const LLUUID, LLFloaterAvatarInfo* > gAvatarInfoInstances;
00057 
00058 class LLAgentHandler : public LLCommandHandler
00059 {
00060 public:
00061         // don't allow from external browsers
00062         LLAgentHandler() : LLCommandHandler("agent", false) { }
00063 
00064         bool handle(const LLSD& params, const LLSD& queryMap)
00065         {
00066                 if (params.size() < 2) return false;
00067                 LLUUID agent_id;
00068                 if (!agent_id.set(params[0], FALSE))
00069                 {
00070                         return false;
00071                 }
00072 
00073                 if (params[1].asString() == "about")
00074                 {
00075                         LLFloaterAvatarInfo::show(agent_id);
00076                         return true;
00077                 }
00078                 return false;
00079         }
00080 };
00081 LLAgentHandler gAgentHandler;
00082 
00083 //-----------------------------------------------------------------------------
00084 // Member functions
00085 //-----------------------------------------------------------------------------
00086 
00087 //----------------------------------------------------------------------------
00088 
00089 void*   LLFloaterAvatarInfo::createPanelAvatar(void*    data)
00090 {
00091         LLFloaterAvatarInfo* self = (LLFloaterAvatarInfo*)data;
00092         self->mPanelAvatarp = new LLPanelAvatar("PanelAv", LLRect(), TRUE); // allow edit self
00093         return self->mPanelAvatarp;
00094 }
00095 
00096 //----------------------------------------------------------------------------
00097 
00098 
00099 BOOL    LLFloaterAvatarInfo::postBuild()
00100 {
00101         return TRUE;
00102 }
00103 
00104 LLFloaterAvatarInfo::LLFloaterAvatarInfo(const std::string& name, const LLRect &rect, const LLUUID &avatar_id)
00105 :       LLPreview(name, rect, FLOATER_TITLE, LLUUID::null, LLUUID::null),
00106         mAvatarID( avatar_id ),
00107         mSuggestedOnlineStatus(ONLINE_STATUS_NO)
00108 {
00109         setAutoFocus(TRUE);
00110 
00111         LLCallbackMap::map_t factory_map;
00112 
00113         factory_map["Panel Avatar"] = LLCallbackMap(createPanelAvatar, this);
00114         
00115         LLUICtrlFactory::getInstance()->buildFloater(this, "floater_profile.xml", &factory_map);
00116 
00117 
00118         if(mPanelAvatarp)
00119         {
00120                 mPanelAvatarp->selectTab(0);
00121         }
00122 
00123         gAvatarInfoInstances.addData(avatar_id, this);
00124 
00125         
00126 }
00127 
00128 // virtual
00129 LLFloaterAvatarInfo::~LLFloaterAvatarInfo()
00130 {
00131         // child views automatically deleted
00132         gAvatarInfoInstances.removeData(mAvatarID);
00133 
00134 }
00135 
00136 void LLFloaterAvatarInfo::resetGroupList()
00137 {
00138         // only get these updates asynchronously via the group floater, which works on the agent only
00139         if (mAvatarID != gAgentID)
00140         {
00141                 return;
00142         }
00143 
00144         mPanelAvatarp->resetGroupList();
00145 }
00146 
00147 // static
00148 LLFloaterAvatarInfo* LLFloaterAvatarInfo::show(const LLUUID &avatar_id)
00149 {
00150         if (avatar_id.isNull())
00151         {
00152                 return NULL;
00153         }
00154 
00155         LLFloaterAvatarInfo *floater;
00156         if (gAvatarInfoInstances.checkData(avatar_id))
00157         {
00158                 // ...bring that window to front
00159                 floater = gAvatarInfoInstances.getData(avatar_id);
00160                 floater->open();        /*Flawfinder: ignore*/
00161         }
00162         else
00163         {
00164                 floater =  new LLFloaterAvatarInfo("avatarinfo", FAI_RECT, 
00165                         avatar_id );
00166                 floater->center();
00167                 floater->open();        /*Flawfinder: ignore*/
00168         }
00169         return floater;
00170 }
00171 
00172 // Open profile to a certain tab.
00173 // static
00174 void LLFloaterAvatarInfo::showFromObject(
00175         const LLUUID& avatar_id,
00176         std::string tab_name)
00177 {
00178         LLFloaterAvatarInfo *floater = show(avatar_id);
00179         if (floater)
00180         {
00181                 floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_NO);
00182                 floater->mPanelAvatarp->selectTabByName(tab_name);
00183         }
00184 }
00185 
00186 // static
00187 void LLFloaterAvatarInfo::showFromDirectory(const LLUUID &avatar_id)
00188 {
00189         LLFloaterAvatarInfo *floater = show(avatar_id);
00190         if (floater)
00191         {
00192                 floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_NO);
00193         }
00194 }
00195 
00196 
00197 // static
00198 void LLFloaterAvatarInfo::showFromFriend(const LLUUID& agent_id, BOOL online)
00199 {
00200         LLFloaterAvatarInfo *floater = show(agent_id);
00201         if (floater)
00202         {
00203                 floater->mSuggestedOnlineStatus = online ? ONLINE_STATUS_YES : ONLINE_STATUS_NO;
00204         }
00205 }
00206 
00207 
00208 // static
00209 void LLFloaterAvatarInfo::showFromProfile(const LLUUID &avatar_id, LLRect rect)
00210 {
00211         if (avatar_id.isNull())
00212         {
00213                 return;
00214         }
00215 
00216         LLFloaterAvatarInfo *floater;
00217         if (gAvatarInfoInstances.checkData(avatar_id))
00218         {
00219                 // ...bring that window to front
00220                 floater = gAvatarInfoInstances.getData(avatar_id);
00221         }
00222         else
00223         {
00224                 floater =  new LLFloaterAvatarInfo("avatarinfo", FAI_RECT, 
00225                                                                                    avatar_id);
00226                 floater->translate(rect.mLeft - floater->getRect().mLeft + 16,
00227                                                    rect.mTop - floater->getRect().mTop - 16);
00228                 floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_NO);
00229         }
00230         if (floater)
00231         {
00232                 floater->open();
00233         }
00234 }
00235 
00236 void LLFloaterAvatarInfo::showProfileCallback(S32 option, void *userdata)
00237 {
00238         if (option == 0)
00239         {
00240                 showFromObject(gAgentID);
00241         }
00242 }
00243 
00244 
00246 void LLFloaterAvatarInfo::draw()
00247 {
00248         // skip LLPreview::draw()
00249         LLFloater::draw();
00250 }
00251 
00252 // virtual
00253 BOOL LLFloaterAvatarInfo::canClose()
00254 {
00255         return mPanelAvatarp && mPanelAvatarp->canClose();
00256 }
00257 
00258 LLFloaterAvatarInfo* LLFloaterAvatarInfo::getInstance(const LLUUID &id)
00259 {
00260         return gAvatarInfoInstances.getIfThere(gAgentID);
00261 }
00262 
00263 void LLFloaterAvatarInfo::loadAsset()
00264 {
00265         if (mPanelAvatarp) {
00266                 mPanelAvatarp->setAvatarID(mAvatarID, "", mSuggestedOnlineStatus);
00267                 mAssetStatus = PREVIEW_ASSET_LOADING;
00268         }
00269 }
00270 
00271 LLPreview::EAssetStatus LLFloaterAvatarInfo::getAssetStatus()
00272 {
00273         if (mPanelAvatarp && mPanelAvatarp->haveData())
00274         {
00275                 mAssetStatus = PREVIEW_ASSET_LOADED;
00276         }
00277         return mAssetStatus;
00278 }

Generated on Fri May 16 08:33:22 2008 for SecondLife by  doxygen 1.5.5