/** * @file ao.h * @brief Animation Explorer floater declaration * * $LicenseInfo:firstyear=2001&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. * Copyright (C) 2013, Zi Ree @ Second Life * * 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$ */ #ifndef ANIMATIONEXPLORER_H #define ANIMATIONEXPLORER_H #include "llfloater.h" #include "llfloaterbvhpreview.h" // for LLPreviewAnimation #include "llsingleton.h" // -------------------------------------------------------------------------- // RecentAnimationList: holds a list of recently placed animations to query // by the animation explorer, so we don't have to keep the full floater // loaded all the time. // -------------------------------------------------------------------------- class AnimationExplorer; class RecentAnimationList : public LLSingleton { LLSINGLETON(RecentAnimationList); ~RecentAnimationList(); public: struct AnimationEntry { LLUUID animationID; // asset ID of the animation LLUUID playedBy; // object/agent who played this animation F64 time; // time in seconds since viewer start when the animation started }; std::deque mAnimationList; void addAnimation(const LLUUID& id, const LLUUID& playedBy); // called in llviewermessage.cpp void requestList(AnimationExplorer* explorer); // request animation list }; // -------------------------------------------------------------------------- // AnimationExplorer: floater that shows recently played animations and gives // options to preview, stop animations and revoke animation permissions // -------------------------------------------------------------------------- class LLAvatarName; class LLButton; class LLCheckBoxCtrl; class LLMessageSystem; class LLScrollListCtrl; class LLView; class AnimationExplorer : public LLFloater { friend class LLFloaterReg; private: AnimationExplorer(const LLSD& key); ~AnimationExplorer(); public: /*virtual*/ bool postBuild(); void addAnimation(const LLUUID& id, const LLUUID& playedBy, F64 time); // called from RecentAnimationList // copied from llfloaterbvhpreview.h bool handleMouseDown(S32 x, S32 y, MASK mask); bool handleMouseUp(S32 x, S32 y, MASK mask); bool handleHover(S32 x, S32 y, MASK mask); bool handleScrollWheel(S32 x, S32 y, S32 clicks); void onMouseCaptureLost(); void requestNameCallback(LLMessageSystem* msg); // object name query callback protected: void onAvatarNameCallback(const LLUUID& id, const LLAvatarName& av_name); void updateListEntry(const LLUUID& id, const std::string& name); LLScrollListCtrl* mAnimationScrollList; LLButton* mStopButton; LLButton* mBlacklistButton; LLButton* mStopAndRevokeButton; LLCheckBoxCtrl* mNoOwnedAnimationsCheckBox; LLView* mPreviewCtrl; // dummy control on the floater where the avatar preview should go LLPointer mAnimationPreview; // actual avatar preview S32 mLastMouseX; S32 mLastMouseY; LLUUID mCurrentAnimationID; // currently selected animation's asset ID LLUUID mCurrentObject; // object ID that played the currently selected animation std::vector mRequestedIDs; // list of object IDs we requested named for std::map mKnownIDs; // known list of names for object IDs typedef std::map avatar_name_cache_connection_map_t; avatar_name_cache_connection_map_t mAvatarNameCacheConnections; void draw(); void update(); // request list update from RecentAnimationList void updateList(F64 current_timestamp); // update times and playing status in animation list void startMotion(const LLUUID& motionID); void onSelectAnimation(); void onStopPressed(); void onBlacklistPressed(); void onStopAndRevokePressed(); void onOwnedCheckToggled(); }; #endif // ANIMATIONEXPLORER_H