summaryrefslogtreecommitdiff
path: root/indra/newview/llfloaterevent.cpp
diff options
context:
space:
mode:
authorJosh Bell <josh@lindenlab.com>2007-11-01 22:02:35 +0000
committerJosh Bell <josh@lindenlab.com>2007-11-01 22:02:35 +0000
commit7afa8058aae0d5363cc19c7df1e6d2d7ec3bf7ac (patch)
tree52f41bda3e57a58e968421212a8a48eead6f653d /indra/newview/llfloaterevent.cpp
parent833e8d5c2a1dd48fd89b8b438dbe56572697bb76 (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.cpp107
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;
+}