summaryrefslogtreecommitdiff
path: root/indra/newview/lltoolpie.h
blob: 7e8417054914dc18151325a39c611ed98afce2c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/** 
 * @file lltoolpie.h
 * @brief LLToolPie class header file
 *
 * $LicenseInfo:firstyear=2001&license=viewerlgpl$
 * Second Life Viewer Source Code
 * Copyright (C) 2010, 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$
 */

#ifndef LL_TOOLPIE_H
#define LL_TOOLPIE_H

#include "lltool.h"
#include "lluuid.h"
#include "llviewerwindow.h" // for LLPickInfo
#include "llhudeffectblob.h" // for LLPointer<LLHudEffectBlob>, apparently

class LLClickToTeleportTimer;
class LLViewerObject;
class LLObjectSelection;

class LLToolPie : public LLTool, public LLSingleton<LLToolPie>
{
	LOG_CLASS(LLToolPie);
public:
	LLToolPie( );

	// Virtual functions inherited from LLMouseHandler
	virtual BOOL		handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType clicktype, BOOL down);
	virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask);
	virtual BOOL		handleRightMouseDown(S32 x, S32 y, MASK mask);
	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask);
	virtual BOOL		handleRightMouseUp(S32 x, S32 y, MASK mask);
	virtual BOOL		handleHover(S32 x, S32 y, MASK mask);
	virtual BOOL		handleDoubleClick(S32 x, S32 y, MASK mask);
	virtual BOOL		handleScrollWheel(S32 x, S32 y, S32 clicks);
	virtual BOOL		handleToolTip(S32 x, S32 y, MASK mask);

	virtual void		render();

	virtual void		stopEditing();

	virtual void		onMouseCaptureLost();
	virtual void		handleSelect();
	virtual void		handleDeselect();
	virtual LLTool*		getOverrideTool(MASK mask);

	LLPickInfo&			getPick() { return mPick; }
	U8					getClickAction() { return mClickAction; }
	LLViewerObject*		getClickActionObject() { return mClickActionObject; }
	LLObjectSelection*	getLeftClickSelection() { return (LLObjectSelection*)mLeftClickSelection; }
	void 				resetSelection();
	void				walkToClickedLocation();
	void				blockClickToWalk() { mBlockClickToWalk = true; }
	void				stopClickToWalk();
	
	static void			selectionPropertiesReceived();

	static void			showAvatarInspector(const LLUUID& avatar_id);
	static void			showObjectInspector(const LLUUID& object_id);
	static void			showObjectInspector(const LLUUID& object_id, const S32& object_face);
	static void			playCurrentMedia(const LLPickInfo& info);
	static void			VisitHomePage(const LLPickInfo& info);
	
private:
	BOOL outsideSlop		(S32 x, S32 y, S32 start_x, S32 start_y);
	BOOL handleLeftClickPick();
	BOOL handleRightClickPick();
	BOOL useClickAction		(MASK mask, LLViewerObject* object,LLViewerObject* parent);
	
	void showVisualContextMenuEffect();
	ECursorType cursorFromObject(LLViewerObject* object);

	bool handleMediaClick(const LLPickInfo& info);
	bool handleMediaHover(const LLPickInfo& info);
	bool handleMediaMouseUp(); 
	BOOL handleTooltipLand(std::string line, std::string tooltip_msg);
	BOOL handleTooltipObject( LLViewerObject* hover_object, std::string line, std::string tooltip_msg);

	void steerCameraWithMouse(S32 x, S32 y);
	void startCameraSteering();
	void stopCameraSteering();
	bool inCameraSteerMode();
	void scheduleTeleport(const LLVector3d& pos);
	void cancelScheduledTeleport();

private:
	friend class LLClickToTeleportTimer;

	bool				mMouseButtonDown;
	bool				mMouseOutsideSlop;		// for this drag, has mouse moved outside slop region
	S32					mMouseDownX;
	S32					mMouseDownY;
	S32					mMouseSteerX;
	S32					mMouseSteerY;
	LLPointer<LLHUDEffectBlob>	mAutoPilotDestination;
	LLPointer<LLHUDEffectBlob>	mMouseSteerGrabPoint;
	bool				mClockwise;			
	bool				mBlockClickToWalk;
	bool				mBlockClickToTeleport;
	LLClickToTeleportTimer*	mClickToTeleportTimer;
	LLUUID				mMediaMouseCaptureID;
	LLPickInfo			mPick;
	LLPickInfo			mHoverPick;
	LLPickInfo			mSteerPick;
	LLPointer<LLViewerObject> mClickActionObject;
	U8					mClickAction;
	LLSafeHandle<LLObjectSelection> mLeftClickSelection;
	BOOL				mClickActionBuyEnabled;
	BOOL				mClickActionPayEnabled;
};

#endif