From f2bb81d17660054697ed984afc0e3f8d90f77eda Mon Sep 17 00:00:00 2001 From: Dave SIMmONs Date: Mon, 28 Mar 2011 16:54:40 -0700 Subject: Added LLEventHost API for gestures. Have new llgesturelistener.cpp and .h files, wired up to LLGestureMgr class. Reviewed by Kelly --- indra/newview/llgesturelistener.cpp | 159 ++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 indra/newview/llgesturelistener.cpp (limited to 'indra/newview/llgesturelistener.cpp') diff --git a/indra/newview/llgesturelistener.cpp b/indra/newview/llgesturelistener.cpp new file mode 100644 index 0000000000..f682700746 --- /dev/null +++ b/indra/newview/llgesturelistener.cpp @@ -0,0 +1,159 @@ +/** + * @file llgesturelistener.cpp + * @author Dave Simmons + * @date 2011-03-28 + * @brief Implementation for LLGestureListener. + * + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llgesturelistener.h" +#include "llgesturemgr.h" +#include "llmultigesture.h" + + +LLGestureListener::LLGestureListener() + : LLEventAPI("LLGesture", + "LLGesture listener interface to control gestures") +{ + add("getActiveGestures", + "Return information about the agent's available gestures [\"reply\"]:\n" + "[\"gestures\"]: list of gestures. This is a dictionary with UUID strings as keys\n" + " and the following values:\n" + " [\"name\"]: name of the gesture, may be empty\n" + " [\"trigger\"]: trigger string used to invoke via user chat, may be empty\n" + " [\"playing\"]: true or false indicating the playing state", + &LLGestureListener::getActiveGestures, + LLSDMap("reply", LLSD())); + add("isGesturePlaying", + "[\"id\"]: UUID of the gesture to query. Returns True or False in [\"playing\"] value of the result", + &LLGestureListener::isGesturePlaying); + add("startGesture", + "[\"id\"]: UUID of the gesture to start play", + &LLGestureListener::startGesture); + add("stopGesture", + "[\"id\"]: UUID of the gesture to stop", + &LLGestureListener::stopGesture); +} + + +// "getActiveGestures" command +void LLGestureListener::getActiveGestures(const LLSD& event_data) const +{ + LLSD reply = LLSD::emptyMap(); + LLSD gesture_map = LLSD::emptyMap(); + + const LLGestureMgr::item_map_t& active_gestures = LLGestureMgr::instance().getActiveGestures(); + + // Scan active gesture map and get all the names + LLGestureMgr::item_map_t::const_iterator it; + for (it = active_gestures.begin(); it != active_gestures.end(); ++it) + { + LLMultiGesture* gesture = (*it).second; + if (gesture) + { // Add an entry to the result map with the LLUUID as key with a map containing data + LLSD info = LLSD::emptyMap(); + info["name"] = (LLSD::String) gesture->mName; + info["trigger"] = (LLSD::String) gesture->mTrigger; + info["playing"] = (LLSD::Boolean) gesture->mPlaying; + + gesture_map[(*it).first.asString()] = info; + } + } + + reply["gestures"] = gesture_map; + sendReply(reply, event_data); +} + + + +// "isGesturePlaying" command +void LLGestureListener::isGesturePlaying(const LLSD& event_data) const +{ + bool is_playing = false; + if (event_data.has("id")) + { + LLUUID gesture_id = event_data["id"].asUUID(); + if (gesture_id.notNull()) + { + is_playing = LLGestureMgr::instance().isGesturePlaying(gesture_id); + } + else + { + llwarns << "isGesturePlaying did not find a gesture object for " << gesture_id << llendl; + } + } + else + { + llwarns << "isGesturePlaying didn't have 'id' value passed in" << llendl; + } + + LLSD reply = LLSD::emptyMap(); + reply["playing"] = (LLSD::Boolean) is_playing; + sendReply(reply, event_data); +} + + +// "startGesture" command +void LLGestureListener::startGesture(LLSD const & event_data) const +{ + startOrStopGesture(event_data, true); +} + + +// "stopGesture" command +void LLGestureListener::stopGesture(LLSD const & event_data) const +{ + startOrStopGesture(event_data, false); +} + + +// Real code for "startGesture" or "stopGesture" +void LLGestureListener::startOrStopGesture(LLSD const & event_data, bool start) const +{ + if (event_data.has("id")) + { + LLUUID gesture_id = event_data["id"].asUUID(); + if (gesture_id.notNull()) + { + if (start) + { + LLGestureMgr::instance().playGesture(gesture_id); + } + else + { + LLGestureMgr::instance().stopGesture(gesture_id); + } + } + else + { + llwarns << "startOrStopGesture did not find a gesture object for " << gesture_id << llendl; + } + } + else + { + llwarns << "startOrStopGesture didn't have 'id' value passed in" << llendl; + } +} + -- cgit v1.2.3 From 3ce04bdcc7dedb1ce0b2c9db75fe22439cd24132 Mon Sep 17 00:00:00 2001 From: Dave SIMmONs Date: Fri, 1 Apr 2011 18:04:39 -0700 Subject: Comment and line ending repair --- indra/newview/llgesturelistener.cpp | 52 ++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 26 deletions(-) (limited to 'indra/newview/llgesturelistener.cpp') diff --git a/indra/newview/llgesturelistener.cpp b/indra/newview/llgesturelistener.cpp index f682700746..22b7d233c5 100644 --- a/indra/newview/llgesturelistener.cpp +++ b/indra/newview/llgesturelistener.cpp @@ -39,8 +39,8 @@ LLGestureListener::LLGestureListener() { add("getActiveGestures", "Return information about the agent's available gestures [\"reply\"]:\n" - "[\"gestures\"]: list of gestures. This is a dictionary with UUID strings as keys\n" - " and the following values:\n" + "[\"gestures\"]: a dictionary with UUID strings as keys\n" + " and the following dict values for each entry:\n" " [\"name\"]: name of the gesture, may be empty\n" " [\"trigger\"]: trigger string used to invoke via user chat, may be empty\n" " [\"playing\"]: true or false indicating the playing state", @@ -50,7 +50,7 @@ LLGestureListener::LLGestureListener() "[\"id\"]: UUID of the gesture to query. Returns True or False in [\"playing\"] value of the result", &LLGestureListener::isGesturePlaying); add("startGesture", - "[\"id\"]: UUID of the gesture to start play", + "[\"id\"]: UUID of the gesture to start playing", &LLGestureListener::startGesture); add("stopGesture", "[\"id\"]: UUID of the gesture to stop", @@ -64,23 +64,23 @@ void LLGestureListener::getActiveGestures(const LLSD& event_data) const LLSD reply = LLSD::emptyMap(); LLSD gesture_map = LLSD::emptyMap(); - const LLGestureMgr::item_map_t& active_gestures = LLGestureMgr::instance().getActiveGestures(); - - // Scan active gesture map and get all the names - LLGestureMgr::item_map_t::const_iterator it; - for (it = active_gestures.begin(); it != active_gestures.end(); ++it) - { - LLMultiGesture* gesture = (*it).second; - if (gesture) - { // Add an entry to the result map with the LLUUID as key with a map containing data - LLSD info = LLSD::emptyMap(); - info["name"] = (LLSD::String) gesture->mName; - info["trigger"] = (LLSD::String) gesture->mTrigger; - info["playing"] = (LLSD::Boolean) gesture->mPlaying; - - gesture_map[(*it).first.asString()] = info; - } - } + const LLGestureMgr::item_map_t& active_gestures = LLGestureMgr::instance().getActiveGestures(); + + // Scan active gesture map and get all the names + LLGestureMgr::item_map_t::const_iterator it; + for (it = active_gestures.begin(); it != active_gestures.end(); ++it) + { + LLMultiGesture* gesture = (*it).second; + if (gesture) + { // Add an entry to the result map with the LLUUID as key with a map containing data + LLSD info = LLSD::emptyMap(); + info["name"] = (LLSD::String) gesture->mName; + info["trigger"] = (LLSD::String) gesture->mTrigger; + info["playing"] = (LLSD::Boolean) gesture->mPlaying; + + gesture_map[(*it).first.asString()] = info; + } + } reply["gestures"] = gesture_map; sendReply(reply, event_data); @@ -139,12 +139,12 @@ void LLGestureListener::startOrStopGesture(LLSD const & event_data, bool start) { if (start) { - LLGestureMgr::instance().playGesture(gesture_id); - } - else - { - LLGestureMgr::instance().stopGesture(gesture_id); - } + LLGestureMgr::instance().playGesture(gesture_id); + } + else + { + LLGestureMgr::instance().stopGesture(gesture_id); + } } else { -- cgit v1.2.3