diff options
Diffstat (limited to 'indra/newview/llfloaterevent.cpp')
-rw-r--r-- | indra/newview/llfloaterevent.cpp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp new file mode 100644 index 0000000000..2b9d011e90 --- /dev/null +++ b/indra/newview/llfloaterevent.cpp @@ -0,0 +1,107 @@ +/** + * @file llfloaterevent.cpp + * @brief LLFloaterEventInfo class implementation + * + * Event information as shown in a floating window from secondlife:// command + * handler. + * + * Copyright (c) 2002-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloaterevent.h" + +// viewer project includes +#include "llcommandhandler.h" +#include "llpanelevent.h" +#include "llvieweruictrlfactory.h" + +// linden library includes +#include "lluuid.h" + +//////////////////////////////////////////////////////////////////////////// +// LLFloaterEventInfo + +//----------------------------------------------------------------------------- +// Globals +//----------------------------------------------------------------------------- + +LLMap< U32, LLFloaterEventInfo* > gEventInfoInstances; + +class LLEventHandler : public LLCommandHandler +{ +public: + LLEventHandler() : LLCommandHandler("event") { } + bool handle(const std::vector<std::string>& tokens) + { + if (tokens.size() < 2) + { + return false; + } + U32 event_id = atoi(tokens[0].c_str()); + if (tokens[1] == "about") + { + LLFloaterEventInfo::show(event_id); + return true; + } + return false; + } +}; +LLEventHandler gEventHandler; + +LLFloaterEventInfo::LLFloaterEventInfo(const std::string& name, const U32 event_id) +: LLFloater(name), + mEventID( event_id ) +{ + + mFactoryMap["event_details_panel"] = LLCallbackMap(LLFloaterEventInfo::createEventDetail, this); + gUICtrlFactory->buildFloater(this, "floater_preview_event.xml", &getFactoryMap()); + gEventInfoInstances.addData(event_id, this); +} + +LLFloaterEventInfo::~LLFloaterEventInfo() +{ + // child views automatically deleted + gEventInfoInstances.removeData(mEventID); +} + +void LLFloaterEventInfo::displayEventInfo(const U32 event_id) +{ + mPanelEventp->setEventID(event_id); + this->setFrontmost(true); +} + +// static +void* LLFloaterEventInfo::createEventDetail(void* userdata) +{ + LLFloaterEventInfo *self = (LLFloaterEventInfo*)userdata; + self->mPanelEventp = new LLPanelEvent(); + gUICtrlFactory->buildPanel(self->mPanelEventp, "panel_event.xml"); + + return self->mPanelEventp; +} + +// static +LLFloaterEventInfo* LLFloaterEventInfo::show(const U32 event_id) +{ + LLFloaterEventInfo *floater; + if (gEventInfoInstances.checkData(event_id)) + { + // ...bring that window to front + floater = gEventInfoInstances.getData(event_id); + floater->open(); /*Flawfinder: ignore*/ + floater->setFrontmost(true); + } + else + { + floater = new LLFloaterEventInfo("eventinfo", event_id ); + floater->center(); + floater->open(); /*Flawfinder: ignore*/ + floater->displayEventInfo(event_id); + floater->setFrontmost(true); + } + + return floater; +} |