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
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
00070 void LLFloaterGroupInvite::impl::closeFloater(void* data)
00071 {
00072 LLFloaterGroupInvite* floaterp = (LLFloaterGroupInvite*) data;
00073
00074 if ( floaterp ) floaterp->close();
00075 }
00076
00077
00078
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
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
00113 void LLFloaterGroupInvite::showForGroup(const LLUUID& group_id, std::vector<LLUUID> *agent_ids)
00114 {
00115
00116 if (group_id.isNull())
00117 {
00118 llwarns << "LLFloaterGroupInvite::showForGroup with null group_id!" << llendl;
00119 return;
00120 }
00121
00122
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();
00145 fgi->mImpl->mInvitePanelp->update();
00146 }