summaryrefslogtreecommitdiff
path: root/indra/newview/llfloaterevent.cpp
diff options
context:
space:
mode:
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;
+}