aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/llfloaterhud.cpp
blob: 2f192f7d3b74d5459f661230fbe565080705dba0 (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
131
132
133
134
135
136
137
138
139
140
/** 
 * @file llfloaterhud.cpp
 * @brief Implementation of HUD floater
 *
 * $LicenseInfo:firstyear=2008&license=viewergpl$
 * 
 * Copyright (c) 2008, Linden Research, Inc.
 * 
 * Second Life Viewer Source Code
 * The source code in this file ("Source Code") is provided by Linden Lab
 * to you under the terms of the GNU General Public License, version 2.0
 * ("GPL"), unless you have obtained a separate licensing agreement
 * ("Other License"), formally executed by you and Linden Lab.  Terms of
 * the GPL can be found in doc/GPL-license.txt in this distribution, or
 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
 * 
 * There are special exceptions to the terms and conditions of the GPL as
 * it is applied to this Source Code. View the full text of the exception
 * in the file doc/FLOSS-exception.txt in this software distribution, or
 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
 * 
 * By copying, modifying or distributing this software, you acknowledge
 * that you have read and understood your obligations described above,
 * and agree to abide by those obligations.
 * 
 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
 * COMPLETENESS OR PERFORMANCE.
 * $/LicenseInfo$
 */

#include "llviewerprecompiledheaders.h"

#include "llfloaterhud.h"
#include "llviewercontrol.h"
#include "lluictrlfactory.h"
#include "llwebbrowserctrl.h"
#include "llalertdialog.h"

// statics 
LLFloaterHUD* LLFloaterHUD::sInstance = 0; 
std::string LLFloaterHUD::sTutorialUrl = "";

///----------------------------------------------------------------------------
/// Class LLFloaterHUD
///----------------------------------------------------------------------------
#define super LLFloater	/* superclass */

// Default constructor
LLFloaterHUD::LLFloaterHUD()
:	LLFloater("floater_hud"),
	mWebBrowser(0)
{
	// Don't grab the focus as it will impede performing in-world actions
	// while using the HUD
	setAutoFocus(FALSE);
	
	// Opaque background since we never get the focus
	setBackgroundOpaque(TRUE);

	// Create floater from its XML definition
	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hud.xml");
	
	// Position floater based on saved location
	LLRect saved_position_rect = gSavedSettings.getRect("FloaterHUDRect");
	reshape(saved_position_rect.getWidth(), saved_position_rect.getHeight(), FALSE);
	setRect(saved_position_rect);
	
	mWebBrowser = getChild<LLWebBrowserCtrl>("floater_hud_browser" );
	if (mWebBrowser)
	{
		// Always refresh the browser
		mWebBrowser->setAlwaysRefresh(true);

		// Open links in internal browser
		mWebBrowser->setOpenInExternalBrowser(false);

		LLString language(gSavedSettings.getString("Language"));
		if(language == "default")
		{
			language = gSavedSettings.getString("SystemLanguage");
		}
	
		std::string url = sTutorialUrl + language + "/";
		mWebBrowser->navigateTo(url);
	}

	// Remember the one instance
	sInstance = this;
}

// Get the instance
LLFloaterHUD* LLFloaterHUD::getInstance()
{
	if (!sInstance)
	{
		new LLFloaterHUD();
	}
	return sInstance;
}

// Destructor
LLFloaterHUD::~LLFloaterHUD()
{
	// Save floater position
	gSavedSettings.setRect("FloaterHUDRect", getRect() );

	// Clear out the one instance if it's ours
	if (sInstance == this)
	{
		sInstance = NULL;
	}
}

// Show the HUD
void LLFloaterHUD::show()
{
	// do not build the floater if there the url is empty
	if (sTutorialUrl == "")
	{
		LLAlertDialog::showXml("TutorialNotFound");
		return;
	}

	// Create the instance if necessary
	LLFloaterHUD* hud = getInstance();
	hud->open();
	hud->setFrontmost(FALSE);
}

void LLFloaterHUD::close()
{
	if (sInstance) sInstance->close();
}

void LLFloaterHUD::onFocusReceived()
{
	// Never get the focus
	setFocus(FALSE);
}