diff options
| author | Josh Bell <josh@lindenlab.com> | 2007-11-01 22:02:35 +0000 |
|---|---|---|
| committer | Josh Bell <josh@lindenlab.com> | 2007-11-01 22:02:35 +0000 |
| commit | 7afa8058aae0d5363cc19c7df1e6d2d7ec3bf7ac (patch) | |
| tree | 52f41bda3e57a58e968421212a8a48eead6f653d /indra/newview/llfloaterevent.cpp | |
| parent | 833e8d5c2a1dd48fd89b8b438dbe56572697bb76 (diff) | |
svn merge -r 72652:72881 svn+ssh://svn.lindenlab.com/svn/linden/branches/sl-search-11 --> release
QAR-11: pair-reviewed the merge w/ Sam.
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; +} |
