From 38d6d37f2d982fa959e9e8a4a3f7e1ccfad7b5d4 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 15 Aug 2008 23:44:46 -0500 Subject: Second Life viewer sources 1.13.2.12 --- linden/indra/newview/llfloatergroupinfo.cpp | 211 ++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 linden/indra/newview/llfloatergroupinfo.cpp (limited to 'linden/indra/newview/llfloatergroupinfo.cpp') diff --git a/linden/indra/newview/llfloatergroupinfo.cpp b/linden/indra/newview/llfloatergroupinfo.cpp new file mode 100644 index 0000000..5fc999e --- /dev/null +++ b/linden/indra/newview/llfloatergroupinfo.cpp @@ -0,0 +1,211 @@ +/** + * @file llfloatergroupinfo.cpp + * @brief LLFloaterGroupInfo class implementation + * + * Copyright (c) 2002-2007, Linden Research, Inc. + * + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +/** + * Floater used both for display of group information and for + * creating new groups. + * + * Help, I'm trapped in a software factory! + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloatergroupinfo.h" + +#include "llagent.h" +#include "llcachename.h" +#include "llpanelgroup.h" +#include "llviewermessage.h" // for inventory_offer_callback + + +const char FLOATER_TITLE[] = "Group Information"; +const LLRect FGI_RECT(0, 530, 420, 0); + +// +// Globals +// +std::map LLFloaterGroupInfo::sInstances; + +//----------------------------------------------------------------------------- +// Implementation +//----------------------------------------------------------------------------- +LLFloaterGroupInfo::LLFloaterGroupInfo(const std::string& name, const LLRect &rect, const std::string& title, const LLUUID& group_id, const std::string& tab_name) +: LLFloater(name, rect, title), + mGroupID( group_id ) +{ + // Construct the filename of the group panel xml definition file. + mPanelGroupp = new LLPanelGroup("panel_group.xml", + "PanelGroup", + group_id, + tab_name); + addChild(mPanelGroupp); +} + +// virtual +LLFloaterGroupInfo::~LLFloaterGroupInfo() +{ + sInstances.erase(mGroupID); +} + +BOOL LLFloaterGroupInfo::canClose() +{ + // Ask the panel if it is ok to close. + if ( mPanelGroupp ) + { + return mPanelGroupp->canClose(); + } + return TRUE; +} + +void LLFloaterGroupInfo::selectTabByName(std::string tab_name) +{ + mPanelGroupp->selectTab(tab_name); +} + +// static +void LLFloaterGroupInfo::showMyGroupInfo(void *) +{ + showFromUUID( gAgent.getGroupID() ); +} + +// static +void LLFloaterGroupInfo::showCreateGroup(void *) +{ + showFromUUID(LLUUID::null, "general_tab"); +} + +// static +void LLFloaterGroupInfo::closeGroup(const LLUUID& group_id) +{ + LLFloaterGroupInfo *fgi = get_if_there(sInstances, group_id, (LLFloaterGroupInfo*)NULL); + if (fgi) + { + if (fgi->mPanelGroupp) + { + fgi->mPanelGroupp->close(); + } + } +} + +// static +void LLFloaterGroupInfo::closeCreateGroup() +{ + closeGroup(LLUUID::null); +} + +// static +void LLFloaterGroupInfo::refreshGroup(const LLUUID& group_id) +{ + LLFloaterGroupInfo *fgi = get_if_there(sInstances, group_id, (LLFloaterGroupInfo*)NULL); + if (fgi) + { + if (fgi->mPanelGroupp) + { + fgi->mPanelGroupp->refreshData(); + } + } +} + +// static +void LLFloaterGroupInfo::callbackLoadGroupName(const LLUUID& id, const char* first, const char* last, BOOL is_group, void* data) +{ + LLFloaterGroupInfo *fgi = get_if_there(sInstances, id, (LLFloaterGroupInfo*)NULL); + + if (fgi) + { + // Build a new title including the group name. + std::ostringstream title; + title << first << " - " << FLOATER_TITLE; + fgi->setTitle(title.str()); + } +} + +// static +void LLFloaterGroupInfo::showFromUUID(const LLUUID& group_id, + const std::string& tab_name) +{ + // If we don't have a floater for this group, create one. + LLFloaterGroupInfo *fgi = get_if_there(sInstances, group_id, (LLFloaterGroupInfo*)NULL); + if (!fgi) + { + fgi = new LLFloaterGroupInfo("groupinfo", + FGI_RECT, + FLOATER_TITLE, + group_id, + tab_name); + + sInstances[group_id] = fgi; + + if (group_id.notNull()) + { + // Look up the group name. + // The callback will insert it into the title. + const BOOL is_group = TRUE; + gCacheName->get(group_id, is_group, callbackLoadGroupName, NULL); + } + } + + fgi->selectTabByName(tab_name); + + fgi->center(); + fgi->open(); +} + +// static +void LLFloaterGroupInfo::showNotice(const char* subject, + const char* message, + const LLUUID& group_id, + const bool& has_inventory, + const char* inventory_name, + LLOfferInfo* inventory_offer) +{ + llinfos << "LLFloaterGroupInfo::showNotice : " << subject << llendl; + + if (group_id.isNull()) + { + // We need to clean up that inventory offer. + if (inventory_offer) + { + inventory_offer_callback( 1 , inventory_offer); + } + return; + } + + // If we don't have a floater for this group, drop this packet on the floor. + LLFloaterGroupInfo *fgi = get_if_there(sInstances, group_id, (LLFloaterGroupInfo*)NULL); + if (!fgi) + { + // We need to clean up that inventory offer. + if (inventory_offer) + { + inventory_offer_callback( 1 , inventory_offer); + } + return; + } + + fgi->mPanelGroupp->showNotice(subject,message,has_inventory,inventory_name,inventory_offer); +} -- cgit v1.1