llfloaterhelpbrowser.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:4k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llfloaterhelpbrowser.cpp
  3.  * @brief HTML Help floater - uses embedded web browser control
  4.  *
  5.  * $LicenseInfo:firstyear=2006&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2006-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #include "llviewerprecompiledheaders.h"
  33. #include "llfloaterhelpbrowser.h"
  34. #include "llfloaterreg.h"
  35. #include "llpluginclassmedia.h"
  36. #include "llmediactrl.h"
  37. #include "llviewerwindow.h"
  38. #include "llviewercontrol.h"
  39. #include "llweb.h"
  40. #include "llui.h"
  41. #include "llurlhistory.h"
  42. #include "llmediactrl.h"
  43. #include "llviewermedia.h"
  44. LLFloaterHelpBrowser::LLFloaterHelpBrowser(const LLSD& key)
  45. : LLFloater(key)
  46. {
  47. }
  48. BOOL LLFloaterHelpBrowser::postBuild()
  49. {
  50. mBrowser = getChild<LLMediaCtrl>("browser");
  51. mBrowser->addObserver(this);
  52. childSetAction("open_browser", onClickOpenWebBrowser, this);
  53. buildURLHistory();
  54. return TRUE;
  55. }
  56. void LLFloaterHelpBrowser::buildURLHistory()
  57. {
  58. // Get all of the entries in the "browser" collection
  59. LLSD browser_history = LLURLHistory::getURLHistory("browser");
  60. // initialize URL history in the plugin
  61. LLPluginClassMedia *plugin = mBrowser->getMediaPlugin();
  62. if (plugin)
  63. {
  64. plugin->initializeUrlHistory(browser_history);
  65. }
  66. }
  67. //virtual
  68. void LLFloaterHelpBrowser::onClose(bool app_quitting)
  69. {
  70. // really really destroy the help browser when it's closed, it'll be recreated.
  71. destroy(); // really destroy this dialog on closure, it's relatively heavyweight.
  72. }
  73. void LLFloaterHelpBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
  74. {
  75. switch (event) 
  76. {
  77. case MEDIA_EVENT_LOCATION_CHANGED:
  78. setCurrentURL(self->getLocation());
  79. break;
  80. case MEDIA_EVENT_NAVIGATE_BEGIN:
  81. childSetText("status_text", getString("loading_text"));
  82. break;
  83. case MEDIA_EVENT_NAVIGATE_COMPLETE:
  84. childSetText("status_text", getString("done_text"));
  85. break;
  86. default:
  87. break;
  88. }
  89. }
  90. void LLFloaterHelpBrowser::setCurrentURL(const std::string& url)
  91. {
  92. mCurrentURL = url;
  93. // redirects will navigate momentarily to about:blank, don't add to history
  94. if (mCurrentURL != "about:blank")
  95. {
  96. // Serialize url history
  97. LLURLHistory::removeURL("browser", mCurrentURL);
  98. LLURLHistory::addURL("browser", mCurrentURL);
  99. }
  100. }
  101. //static 
  102. void LLFloaterHelpBrowser::onClickClose(void* user_data)
  103. {
  104. LLFloaterHelpBrowser* self = (LLFloaterHelpBrowser*)user_data;
  105. self->closeFloater();
  106. }
  107. //static 
  108. void LLFloaterHelpBrowser::onClickOpenWebBrowser(void* user_data)
  109. {
  110. LLFloaterHelpBrowser* self = (LLFloaterHelpBrowser*)user_data;
  111. std::string url = self->mCurrentURL.empty() ? 
  112. self->mBrowser->getHomePageUrl() :
  113. self->mCurrentURL;
  114. LLWeb::loadURLExternal(url);
  115. }
  116. void LLFloaterHelpBrowser::openMedia(const std::string& media_url)
  117. {
  118. mBrowser->setHomePageUrl(media_url);
  119. //mBrowser->navigateTo("data:text/html;charset=utf-8,I'd really love to be going to:<br><b>" + media_url + "</b>"); // tofu HACK for debugging =:)
  120. mBrowser->navigateTo(media_url);
  121. setCurrentURL(media_url);
  122. }
  123. void LLFloaterHelpBrowser::navigateToLocalPage( const std::string& subdir, const std::string& filename_in )
  124. {
  125. mBrowser->navigateToLocalPage(subdir, filename_in);
  126. }