Files
SingularityViewer/indra/newview/llpanelevent.cpp
Lirusaito 4bb63a9827 Fix SinguReplaceLinks not being respected on various user driven UI
Corrects display for Readonly Notecards, Picks, Group profiles, First/
Second Life, Classifieds, Events, Landmarks, About Land, and Region/Estate

Thanks for giving me the heads-up, Beware
2019-05-10 18:47:06 -04:00

307 lines
8.4 KiB
C++

/**
* @file llpanelevent.cpp
* @brief Display for events in the finder
*
* $LicenseInfo:firstyear=2004&license=viewergpl$
*
* Copyright (c) 2004-2009, Linden Research, Inc.
*
* Second Life Viewer Source Code
* 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://secondlifegrid.net/programs/open_source/licensing/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://secondlifegrid.net/programs/open_source/licensing/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.
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llpanelevent.h"
#include "message.h"
#include "llui.h"
#include "llagent.h"
#include "llviewerwindow.h"
#include "llbutton.h"
#include "llcachename.h"
#include "lleventflags.h"
#include "lleventnotifier.h"
#include "llfloater.h"
#include "llfloaterworldmap.h"
#include "llinventorymodel.h"
#include "llnotificationsutil.h"
#include "llsecondlifeurls.h"
#include "lltextbox.h"
#include "llviewertexteditor.h"
#include "lluiconstants.h"
#include "llviewercontrol.h"
#include "llweb.h"
#include "llworldmap.h"
#include "lluictrlfactory.h"
#include "hippogridmanager.h"
#include "lfsimfeaturehandler.h"
//static
std::list<LLPanelEvent*> LLPanelEvent::sAllPanels;
LLPanelEvent::LLPanelEvent() : LLPanel(std::string("Event Panel"))
{
sAllPanels.push_back(this);
}
LLPanelEvent::~LLPanelEvent()
{
sAllPanels.remove(this);
}
void enable_create(const std::string& url, LLView* btn)
{
btn->setEnabled(!url.empty());
}
BOOL LLPanelEvent::postBuild()
{
mTBName = getChild<LLTextBox>("event_name");
mTBCategory = getChild<LLTextBox>("event_category");
mTBDate = getChild<LLTextBox>("event_date");
mTBDuration = getChild<LLTextBox>("event_duration");
mTBDesc = getChild<LLTextEditor>("event_desc");
mTBDesc->setWordWrap(TRUE);
mTBDesc->setEnabled(FALSE);
mTBRunBy = getChild<LLTextBox>("event_runby");
mTBLocation = getChild<LLTextBox>("event_location");
mTBCover = getChild<LLTextBox>("event_cover");
mTeleportBtn = getChild<LLButton>( "teleport_btn");
mTeleportBtn->setClickedCallback(boost::bind(&LLPanelEvent::onClickTeleport,this));
mMapBtn = getChild<LLButton>( "map_btn");
mMapBtn->setClickedCallback(boost::bind(&LLPanelEvent::onClickMap,this));
mNotifyBtn = getChild<LLButton>( "notify_btn");
mNotifyBtn->setClickedCallback(boost::bind(&LLPanelEvent::onClickNotify,this));
mCreateEventBtn = getChild<LLButton>("create_event_btn");
mCreateEventBtn->setClickedCallback(boost::bind(&LLPanelEvent::onClickCreateEvent, this));
if (!gHippoGridManager->getConnectedGrid()->isSecondLife())
{
auto& inst(LFSimFeatureHandler::instance());
mCreateEventBtn->setEnabled(!inst.getEventsURL().empty());
inst.setEventsURLCallback(boost::bind(enable_create, _1, mCreateEventBtn));
}
return TRUE;
}
void LLPanelEvent::setEventID(const U32 event_id)
{
mEventID = event_id;
// Should reset all of the panel state here
resetInfo();
if (event_id != 0)
{
gEventNotifier.add(event_id);
}
}
//static
void LLPanelEvent::processEventInfoReply(LLMessageSystem *msg, void **)
{
// extract the agent id
LLUUID agent_id;
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
U32 event_id;
msg->getU32("EventData", "EventID", event_id);
// look up all panels which have this avatar
for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
{
LLPanelEvent* self = *iter;
// Skip updating panels which aren't for this event
if (self->mEventID != event_id)
{
continue;
}
self->mEventInfo.unpack(msg);
self->mTBName->setText(self->mEventInfo.mName);
self->mTBCategory->setText(self->mEventInfo.mCategoryStr);
self->mTBDate->setText(self->mEventInfo.mTimeStr);
self->mTBDesc->setText(self->mEventInfo.mDesc, false);
self->mTBDuration->setText(llformat("%d:%.2d", self->mEventInfo.mDuration / 60, self->mEventInfo.mDuration % 60));
if (!self->mEventInfo.mHasCover)
{
self->mTBCover->setText(self->getString("none"));
}
else
{
self->mTBCover->setText(llformat("%d", self->mEventInfo.mCover));
}
F32 global_x = (F32)self->mEventInfo.mPosGlobal.mdV[VX];
F32 global_y = (F32)self->mEventInfo.mPosGlobal.mdV[VY];
S32 region_x = ll_round(global_x) % REGION_WIDTH_UNITS;
S32 region_y = ll_round(global_y) % REGION_WIDTH_UNITS;
S32 region_z = ll_round((F32)self->mEventInfo.mPosGlobal.mdV[VZ]);
std::string desc = self->mEventInfo.mSimName + llformat(" (%d, %d, %d)", region_x, region_y, region_z);
self->mTBLocation->setText(desc);
if (self->mEventInfo.mEventFlags & EVENT_FLAG_MATURE)
{
self->childSetVisible("event_mature_yes", TRUE);
self->childSetVisible("event_mature_no", FALSE);
}
else
{
self->childSetVisible("event_mature_yes", FALSE);
self->childSetVisible("event_mature_no", TRUE);
}
if (self->mEventInfo.mUnixTime < time_corrected())
{
self->mNotifyBtn->setEnabled(FALSE);
}
else
{
self->mNotifyBtn->setEnabled(TRUE);
}
if (gEventNotifier.hasNotification(self->mEventInfo.mID))
{
self->mNotifyBtn->setLabel(self->getString("dont_notify"));
}
else
{
self->mNotifyBtn->setLabel(self->getString("notify"));
}
}
}
void LLPanelEvent::draw()
{
std::string name;
gCacheName->getFullName(mEventInfo.mRunByID, name);
mTBRunBy->setText(name);
LLPanel::draw();
}
void LLPanelEvent::resetInfo()
{
// Clear all of the text fields.
}
// static
void LLPanelEvent::onClickTeleport(void* data)
{
LLPanelEvent* self = (LLPanelEvent*)data;
if (!self->mEventInfo.mPosGlobal.isExactlyZero())
{
gAgent.teleportViaLocation(self->mEventInfo.mPosGlobal);
gFloaterWorldMap->trackLocation(self->mEventInfo.mPosGlobal);
}
}
// static
void LLPanelEvent::onClickMap(void* data)
{
LLPanelEvent* self = (LLPanelEvent*)data;
if (!self->mEventInfo.mPosGlobal.isExactlyZero())
{
gFloaterWorldMap->trackLocation(self->mEventInfo.mPosGlobal);
LLFloaterWorldMap::show(true);
}
}
// static
/*
void LLPanelEvent::onClickLandmark(void* data)
{
LLPanelEvent* self = (LLPanelEvent*)data;
//create_landmark(self->mTBName->getText(), "", self->mEventInfo.mPosGlobal);
LLMessageSystem* msg = gMessageSystem;
msg->newMessage("CreateLandmarkForEvent");
msg->nextBlockFast(_PREHASH_AgentData);
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
msg->nextBlockFast(_PREHASH_EventData);
msg->addU32Fast(_PREHASH_EventID, self->mEventID);
msg->nextBlockFast(_PREHASH_InventoryBlock);
LLUUID folder_id;
folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK);
msg->addUUIDFast(_PREHASH_FolderID, folder_id);
msg->addStringFast(_PREHASH_Name, self->mTBName->getText());
gAgent.sendReliableMessage();
}
*/
// static
void LLPanelEvent::onClickCreateEvent(void* data)
{
LLNotificationsUtil::add("PromptGoToEventsPage", LLSD(), LLSD(), callbackCreateEventWebPage);
}
// static
void LLPanelEvent::onClickNotify(void *data)
{
LLPanelEvent* self = (LLPanelEvent*)data;
if (!gEventNotifier.hasNotification(self->mEventID))
{
gEventNotifier.add(self->mEventInfo);
self->mNotifyBtn->setLabel(self->getString("dont_notify"));
}
else
{
gEventNotifier.remove(self->mEventInfo.mID);
self->mNotifyBtn->setLabel(self->getString("notify"));
}
}
// static
bool LLPanelEvent::callbackCreateEventWebPage(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotification::getSelectedOption(notification, response);
if (0 == option)
{
LL_INFOS() << "Loading events page " << EVENTS_URL << LL_ENDL;
const std::string& opensim_events = LFSimFeatureHandler::instance().getEventsURL();
LLWeb::loadURL(opensim_events.empty() ? EVENTS_URL : opensim_events);
}
return false;
}