aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/llfloaterhtmlhelp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra/newview/llfloaterhtmlhelp.cpp')
-rw-r--r--linden/indra/newview/llfloaterhtmlhelp.cpp329
1 files changed, 76 insertions, 253 deletions
diff --git a/linden/indra/newview/llfloaterhtmlhelp.cpp b/linden/indra/newview/llfloaterhtmlhelp.cpp
index c9bf1cd..4a00a48 100644
--- a/linden/indra/newview/llfloaterhtmlhelp.cpp
+++ b/linden/indra/newview/llfloaterhtmlhelp.cpp
@@ -32,7 +32,6 @@
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "llfloaterhtmlhelp.h" 34#include "llfloaterhtmlhelp.h"
35#include "llfloaterhtml.h"
36 35
37#include "llparcel.h" 36#include "llparcel.h"
38#include "lluictrlfactory.h" 37#include "lluictrlfactory.h"
@@ -50,6 +49,13 @@
50#include "llviewerparcelmedia.h" 49#include "llviewerparcelmedia.h"
51#include "llcombobox.h" 50#include "llcombobox.h"
52 51
52#include "llchat.h"
53#include "lllineeditor.h"
54#include "llfloaterchat.h"
55#include "lltrans.h"
56
57// static
58LLFloaterMediaBrowser* LLFloaterMediaBrowser::sInstance = NULL;
53 59
54LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& media_data) 60LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& media_data)
55{ 61{
@@ -58,7 +64,9 @@ LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& media_data)
58 64
59void LLFloaterMediaBrowser::draw() 65void LLFloaterMediaBrowser::draw()
60{ 66{
61 childSetEnabled("go", !mAddressCombo->getValue().asString().empty()); 67 BOOL url_exists = !mAddressCombo->getValue().asString().empty();
68 childSetEnabled("go", url_exists);
69 childSetEnabled("set_home", url_exists);
62 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); 70 LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
63 if(parcel) 71 if(parcel)
64 { 72 {
@@ -84,6 +92,8 @@ BOOL LLFloaterMediaBrowser::postBuild()
84 childSetAction("close", onClickClose, this); 92 childSetAction("close", onClickClose, this);
85 childSetAction("open_browser", onClickOpenWebBrowser, this); 93 childSetAction("open_browser", onClickOpenWebBrowser, this);
86 childSetAction("assign", onClickAssign, this); 94 childSetAction("assign", onClickAssign, this);
95 childSetAction("home", onClickHome, this);
96 childSetAction("set_home", onClickSetHome, this);
87 97
88 buildURLHistory(); 98 buildURLHistory();
89 return TRUE; 99 return TRUE;
@@ -114,7 +124,7 @@ void LLFloaterMediaBrowser::buildURLHistory()
114 124
115void LLFloaterMediaBrowser::onClose(bool app_quitting) 125void LLFloaterMediaBrowser::onClose(bool app_quitting)
116{ 126{
117 //setVisible(FALSE); 127 //setVisible(FALSE)
118 destroy(); 128 destroy();
119} 129}
120 130
@@ -146,14 +156,55 @@ void LLFloaterMediaBrowser::onLocationChange( const EventType& eventIn )
146 childSetEnabled("back", mBrowser->canNavigateBack()); 156 childSetEnabled("back", mBrowser->canNavigateBack());
147 childSetEnabled("forward", mBrowser->canNavigateForward()); 157 childSetEnabled("forward", mBrowser->canNavigateForward());
148 childSetEnabled("reload", TRUE); 158 childSetEnabled("reload", TRUE);
159 gSavedSettings.setString("BrowserLastVisited", truncated_url);
149} 160}
150 161
151LLFloaterMediaBrowser* LLFloaterMediaBrowser::showInstance(const LLSD& media_url) 162LLFloaterMediaBrowser* LLFloaterMediaBrowser::showInstance(const LLSD& media_url)
152{ 163{
153 LLFloaterMediaBrowser* floaterp = LLUISingleton<LLFloaterMediaBrowser, VisibilityPolicy<LLFloater> >::showInstance(media_url); 164 LLFloaterMediaBrowser* sInstance = LLUISingleton<LLFloaterMediaBrowser, VisibilityPolicy<LLFloater> >::showInstance(media_url);
154 165
155 floaterp->openMedia(media_url.asString()); 166 sInstance->openMedia(media_url.asString());
156 return floaterp; 167 return sInstance;
168}
169
170//static
171void LLFloaterMediaBrowser::toggle()
172{
173 bool visible = LLFloaterMediaBrowser::instanceVisible();
174 LLFloaterMediaBrowser* self = sInstance->getInstance();
175
176 if(visible && self)
177 {
178 self->close();
179 }
180 else
181 {
182 //Show home url if new session, last visited if not
183 std::string last_url = gSavedSettings.getString("BrowserLastVisited");
184 if(last_url.empty())
185 last_url = gSavedSettings.getString("BrowserHome");
186 showInstance(last_url);
187 }
188}
189
190//static
191void LLFloaterMediaBrowser::helpF1()
192{
193 std::string url = gSavedSettings.getString("HelpSupportURL");
194 std::string* url_copy = new std::string(url);
195
196 gViewerWindow->alertXml("ClickOpenF1Help", onClickF1HelpLoadURL, url_copy);
197}
198
199// static
200void LLFloaterMediaBrowser::onClickF1HelpLoadURL(S32 option, void* userdata)
201{
202 std::string* urlp = (std::string*)userdata;
203 if (0 == option)
204 {
205 showInstance(urlp->c_str());
206 }
207 delete urlp;
157} 208}
158 209
159//static 210//static
@@ -234,266 +285,38 @@ void LLFloaterMediaBrowser::onClickAssign(void* user_data)
234 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel, true ); 285 LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel, true );
235 // now check for video 286 // now check for video
236 LLViewerParcelMedia::update( parcel ); 287 LLViewerParcelMedia::update( parcel );
237
238
239}
240
241void LLFloaterMediaBrowser::openMedia(const std::string& media_url)
242{
243 mBrowser->setHomePageUrl(media_url);
244 mBrowser->navigateTo(media_url);
245} 288}
246 289
247LLViewerHtmlHelp gViewerHtmlHelp; 290void LLFloaterMediaBrowser::onClickHome(void* user_data)
248
249class LLFloaterHtmlHelp :
250 public LLFloater,
251 public LLWebBrowserCtrlObserver
252{
253public:
254 LLFloaterHtmlHelp(std::string start_url, std::string title);
255 virtual ~LLFloaterHtmlHelp();
256
257 virtual void onClose( bool app_quitting );
258 virtual void draw();
259
260 static void show(std::string url, std::string title);
261 static void onClickBack( void* data );
262 static void onClickHome( void* data );
263 static void onClickForward( void* data );
264 static void onClickClose( void* data );
265
266 // browser observer impls
267 virtual void onStatusTextChange( const EventType& eventIn );
268 virtual void onLocationChange( const EventType& eventIn );
269
270 // used for some stats logging - will be removed at some point
271 static BOOL sFloaterOpened;
272
273 static void onClickF1HelpLoadURL(S32 option, void* userdata);
274
275protected:
276 LLWebBrowserCtrl* mWebBrowser;
277 static LLFloaterHtmlHelp* sInstance;
278 LLButton* mBackButton;
279 LLButton* mForwardButton;
280 LLButton* mCloseButton;
281 LLTextBox* mStatusText;
282 std::string mStatusTextContents;
283 std::string mCurrentUrl;
284 std::string mSupportUrl;
285};
286
287LLFloaterHtmlHelp* LLFloaterHtmlHelp::sInstance = 0;
288
289BOOL LLFloaterHtmlHelp::sFloaterOpened = FALSE;
290
291////////////////////////////////////////////////////////////////////////////////
292//
293LLFloaterHtmlHelp::LLFloaterHtmlHelp(std::string start_url, std::string title)
294: LLFloater( std::string("HTML Help") ),
295 mWebBrowser( 0 ),
296 mStatusTextContents( LLStringUtil::null ),
297 mCurrentUrl( LLStringUtil::null )
298{ 291{
299 sInstance = this; 292 LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
300 293 if (self)
301 // create floater from its XML definition
302 LLUICtrlFactory::getInstance()->buildFloater( this, "floater_html_help.xml" );
303
304 childSetAction("back_btn", onClickBack, this);
305 childSetAction("home_btn", onClickHome, this);
306 childSetAction("forward_btn", onClickForward, this);
307
308 if (!title.empty())
309 {
310 setTitle(title);
311 }
312
313 mWebBrowser = getChild<LLWebBrowserCtrl>("html_help_browser" );
314 if ( mWebBrowser )
315 { 294 {
316 // observe browser control events 295 if (self->mBrowser)
317 mWebBrowser->addObserver( this );
318
319 if (start_url != "")
320 { 296 {
321 mWebBrowser->navigateTo( start_url ); 297 std::string home_url = gSavedSettings.getString("BrowserHome");
298 self->mBrowser->navigateTo(home_url);
322 } 299 }
323 else
324 {
325 // if the last page we were at before the client was closed is valid, go there and
326 // override what is in the XML file
327 // (not when the window was closed - it's only ever hidden - not closed)
328 std::string lastPageUrl = gSavedSettings.getString( "HtmlHelpLastPage" );
329 if ( lastPageUrl != "" )
330 {
331 mWebBrowser->navigateTo( lastPageUrl );
332 };
333 }
334 };
335}
336
337////////////////////////////////////////////////////////////////////////////////
338//
339LLFloaterHtmlHelp::~LLFloaterHtmlHelp()
340{
341 // stop observing browser events
342 if ( mWebBrowser )
343 {
344 mWebBrowser->remObserver( this );
345 };
346
347 // save position of floater
348 gSavedSettings.setRect( "HtmlHelpRect", getRect() );
349
350 // save the location we were at when SL closed
351 gSavedSettings.setString( "HtmlHelpLastPage", mCurrentUrl );
352
353 sInstance = 0;
354}
355
356////////////////////////////////////////////////////////////////////////////////
357// virtual
358void LLFloaterHtmlHelp::draw()
359{
360 // enable/disable buttons depending on state
361 if ( mWebBrowser )
362 {
363 bool enable_back = mWebBrowser->canNavigateBack();
364 childSetEnabled( "back_btn", enable_back );
365
366 bool enable_forward = mWebBrowser->canNavigateForward();
367 childSetEnabled( "forward_btn", enable_forward );
368 };
369
370 LLFloater::draw();
371}
372
373////////////////////////////////////////////////////////////////////////////////
374//
375void LLFloaterHtmlHelp::show(std::string url, std::string title)
376{
377 LLFloaterHtml* floater_html = LLFloaterHtml::getInstance();
378 floater_html->setVisible(FALSE);
379
380 if(url.empty())
381 {
382 url = floater_html->getSupportUrl();
383 } 300 }
384 std::string* url_copy = new std::string(url);
385
386 gViewerWindow->alertXml("ClickOpenF1Help", onClickF1HelpLoadURL, url_copy);
387
388} 301}
389 302
390// static 303void LLFloaterMediaBrowser::onClickSetHome(void* user_data)
391void LLFloaterHtmlHelp::onClickF1HelpLoadURL(S32 option, void* userdata)
392{ 304{
393 std::string* urlp = (std::string*)userdata; 305 LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
394 if (0 == option) 306 std::string url = self->mCurrentURL;
307 if(!url.empty())
395 { 308 {
396 LLWeb::loadURL(urlp->c_str()); 309 LLChat chat;
310 std::string log_message = LLTrans::getString("new_home_page") + " ";
311 log_message += url;
312 chat.mText = log_message;
313 LLFloaterChat::addChat(chat, FALSE, FALSE);
314 gSavedSettings.setString("BrowserHome", url);
397 } 315 }
398 delete urlp;
399}
400
401////////////////////////////////////////////////////////////////////////////////
402//
403void LLFloaterHtmlHelp::onClose( bool app_quitting )
404{
405 setVisible( false );
406}
407
408////////////////////////////////////////////////////////////////////////////////
409//
410void LLFloaterHtmlHelp::onClickClose( void* data )
411{
412 LLFloaterHtmlHelp* self = ( LLFloaterHtmlHelp* )data;
413
414 self->setVisible( false );
415}
416
417////////////////////////////////////////////////////////////////////////////////
418//
419void LLFloaterHtmlHelp::onClickBack( void* data )
420{
421 LLFloaterHtmlHelp* self = ( LLFloaterHtmlHelp* )data;
422 if ( self )
423 {
424 if ( self->mWebBrowser )
425 {
426 self->mWebBrowser->navigateBack();
427 };
428 };
429}
430
431////////////////////////////////////////////////////////////////////////////////
432//
433void LLFloaterHtmlHelp::onClickHome( void* data )
434{
435 LLFloaterHtmlHelp* self = ( LLFloaterHtmlHelp* )data;
436 if ( self )
437 {
438 // get the home page URL (which can differ from the start URL) from XML and go there
439 LLWebBrowserCtrl* web_browser = self->getChild<LLWebBrowserCtrl>("html_help_browser" );
440 if ( web_browser )
441 {
442 web_browser->navigateHome();
443 };
444 };
445} 316}
446 317
447//////////////////////////////////////////////////////////////////////////////// 318void LLFloaterMediaBrowser::openMedia(const std::string& media_url)
448//
449void LLFloaterHtmlHelp::onClickForward( void* data )
450{
451 LLFloaterHtmlHelp* self = ( LLFloaterHtmlHelp* )data;
452 if ( self )
453 {
454 if ( self->mWebBrowser )
455 {
456 self->mWebBrowser->navigateForward();
457 };
458 };
459}
460
461////////////////////////////////////////////////////////////////////////////////
462//
463void LLFloaterHtmlHelp::onStatusTextChange( const EventType& eventIn )
464{
465 mStatusTextContents = std::string( eventIn.getStringValue() );
466
467 childSetText("status_text", mStatusTextContents);
468}
469
470////////////////////////////////////////////////////////////////////////////////
471//
472void LLFloaterHtmlHelp::onLocationChange( const EventType& eventIn )
473{
474 llinfos << "MOZ> Location changed to " << eventIn.getStringValue() << llendl;
475 mCurrentUrl = std::string( eventIn.getStringValue() );
476}
477
478////////////////////////////////////////////////////////////////////////////////
479//
480LLViewerHtmlHelp::LLViewerHtmlHelp()
481{
482 LLUI::setHtmlHelp(this);
483}
484
485LLViewerHtmlHelp::~LLViewerHtmlHelp()
486{
487 LLUI::setHtmlHelp(NULL);
488}
489
490void LLViewerHtmlHelp::show()
491{
492 LLFloaterHtmlHelp::show("", "");
493}
494
495void LLViewerHtmlHelp::show(std::string url)
496{ 319{
497 std::string title; // empty 320 mBrowser->setHomePageUrl(media_url);
498 LLFloaterHtmlHelp::show(url, title); 321 mBrowser->navigateTo(media_url);
499} 322}