135 lines
4.9 KiB
C++
135 lines
4.9 KiB
C++
/**
|
|
* @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<RecentAnimationList>
|
|
{
|
|
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<AnimationEntry> 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<LLPreviewAnimation> 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<LLUUID> mRequestedIDs; // list of object IDs we requested named for
|
|
std::map<LLUUID, std::string> mKnownIDs; // known list of names for object IDs
|
|
|
|
typedef std::map<LLUUID, boost::signals2::connection> 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
|