llfloatergroupinvite.cpp

Go to the documentation of this file.
00001 
00032 #include "llviewerprecompiledheaders.h"
00033 
00034 #include "llfloatergroupinvite.h"
00035 #include "llpanelgroupinvite.h"
00036 
00037 const char FLOATER_TITLE[] = "Group Invitation";
00038 const LLRect FGI_RECT(0, 380, 210, 0);
00039 
00040 class LLFloaterGroupInvite::impl
00041 {
00042 public:
00043         impl(const LLUUID& group_id);
00044         ~impl();
00045 
00046         static void closeFloater(void* data);
00047 
00048 public:
00049         LLUUID mGroupID;
00050         LLPanelGroupInvite*     mInvitePanelp;
00051 
00052         static std::map<LLUUID, LLFloaterGroupInvite*> sInstances;
00053 };
00054 
00055 //
00056 // Globals
00057 //
00058 std::map<LLUUID, LLFloaterGroupInvite*> LLFloaterGroupInvite::impl::sInstances;
00059 
00060 LLFloaterGroupInvite::impl::impl(const LLUUID& group_id)
00061 {
00062         mGroupID = group_id;
00063 }
00064 
00065 LLFloaterGroupInvite::impl::~impl()
00066 {
00067 }
00068 
00069 //static
00070 void LLFloaterGroupInvite::impl::closeFloater(void* data)
00071 {
00072         LLFloaterGroupInvite* floaterp = (LLFloaterGroupInvite*) data;
00073 
00074         if ( floaterp ) floaterp->close();
00075 }
00076 
00077 //-----------------------------------------------------------------------------
00078 // Implementation
00079 //-----------------------------------------------------------------------------
00080 LLFloaterGroupInvite::LLFloaterGroupInvite(const std::string& name,
00081                                                                                    const LLRect &rect,
00082                                                                                    const std::string& title,
00083                                                                                    const LLUUID& group_id)
00084 :       LLFloater(name, rect, title)
00085 {
00086         LLRect contents(mRect);
00087         contents.mTop -= LLFLOATER_HEADER_SIZE;
00088 
00089         mImpl = new impl(group_id);
00090 
00091         mImpl->mInvitePanelp = new LLPanelGroupInvite("Group Invite Panel",
00092                                                                                                   group_id);
00093 
00094         mImpl->mInvitePanelp->setCloseCallback(impl::closeFloater, this);
00095 
00096         mImpl->mInvitePanelp->setRect(contents);
00097         addChild(mImpl->mInvitePanelp);
00098 }
00099 
00100 // virtual
00101 LLFloaterGroupInvite::~LLFloaterGroupInvite()
00102 {
00103         if (mImpl->mGroupID.notNull())
00104         {
00105                 impl::sInstances.erase(mImpl->mGroupID);
00106         }
00107 
00108         delete mImpl->mInvitePanelp;
00109         delete mImpl;
00110 }
00111 
00112 // static
00113 void LLFloaterGroupInvite::showForGroup(const LLUUID& group_id, std::vector<LLUUID> *agent_ids)
00114 {
00115         // Make sure group_id isn't null
00116         if (group_id.isNull())
00117         {
00118                 llwarns << "LLFloaterGroupInvite::showForGroup with null group_id!" << llendl;
00119                 return;
00120         }
00121 
00122         // If we don't have a floater for this group, create one.
00123         LLFloaterGroupInvite *fgi = get_if_there(impl::sInstances,
00124                                                                                          group_id,
00125                                                                                          (LLFloaterGroupInvite*)NULL);
00126         if (!fgi)
00127         {
00128                 fgi = new LLFloaterGroupInvite("groupinfo",
00129                                                                            FGI_RECT,
00130                                                                            FLOATER_TITLE,
00131                                                                            group_id);
00132 
00133                 impl::sInstances[group_id] = fgi;
00134 
00135                 fgi->mImpl->mInvitePanelp->clear();
00136         }
00137 
00138         if (agent_ids != NULL)
00139         {
00140                 fgi->mImpl->mInvitePanelp->addUsers(*agent_ids);
00141         }
00142         
00143         fgi->center();
00144         fgi->open();    /*Flawfinder: ignore*/
00145         fgi->mImpl->mInvitePanelp->update();
00146 }

Generated on Thu Jul 1 06:08:33 2010 for Second Life Viewer by  doxygen 1.4.7