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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llurlaction.cpp
  3.  * @author Martin Reddy
  4.  * @brief A set of actions that can performed on Urls
  5.  *
  6.  * $LicenseInfo:firstyear=2009&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2009-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #include "linden_common.h"
  34. #include "llurlaction.h"
  35. #include "llview.h"
  36. #include "llwindow.h"
  37. #include "llurlregistry.h"
  38. // global state for the callback functions
  39. void (*LLUrlAction::sOpenURLCallback) (const std::string& url) = NULL;
  40. void (*LLUrlAction::sOpenURLInternalCallback) (const std::string& url) = NULL;
  41. void (*LLUrlAction::sOpenURLExternalCallback) (const std::string& url) = NULL;
  42. bool (*LLUrlAction::sExecuteSLURLCallback) (const std::string& url) = NULL;
  43. void LLUrlAction::setOpenURLCallback(void (*cb) (const std::string& url))
  44. {
  45. sOpenURLCallback = cb;
  46. }
  47. void LLUrlAction::setOpenURLInternalCallback(void (*cb) (const std::string& url))
  48. {
  49. sOpenURLInternalCallback = cb;
  50. }
  51. void LLUrlAction::setOpenURLExternalCallback(void (*cb) (const std::string& url))
  52. {
  53. sOpenURLExternalCallback = cb;
  54. }
  55. void LLUrlAction::setExecuteSLURLCallback(bool (*cb) (const std::string& url))
  56. {
  57. sExecuteSLURLCallback = cb;
  58. }
  59. void LLUrlAction::openURL(std::string url)
  60. {
  61. if (sOpenURLCallback)
  62. {
  63. (*sOpenURLCallback)(url);
  64. }
  65. }
  66. void LLUrlAction::openURLInternal(std::string url)
  67. {
  68. if (sOpenURLInternalCallback)
  69. {
  70. (*sOpenURLInternalCallback)(url);
  71. }
  72. }
  73. void LLUrlAction::openURLExternal(std::string url)
  74. {
  75. if (sOpenURLExternalCallback)
  76. {
  77. (*sOpenURLExternalCallback)(url);
  78. }
  79. }
  80. void LLUrlAction::executeSLURL(std::string url)
  81. {
  82. if (sExecuteSLURLCallback)
  83. {
  84. (*sExecuteSLURLCallback)(url);
  85. }
  86. }
  87. void LLUrlAction::clickAction(std::string url)
  88. {
  89. // Try to handle as SLURL first, then http Url
  90. if ( (sExecuteSLURLCallback) && !(*sExecuteSLURLCallback)(url) )
  91. {
  92. if (sOpenURLCallback)
  93. {
  94. (*sOpenURLCallback)(url);
  95. }
  96. }
  97. }
  98. void LLUrlAction::teleportToLocation(std::string url)
  99. {
  100. LLUrlMatch match;
  101. if (LLUrlRegistry::instance().findUrl(url, match))
  102. {
  103. if (! match.getLocation().empty())
  104. {
  105. executeSLURL("secondlife:///app/teleport/" + match.getLocation());
  106. }
  107. }
  108. }
  109. void LLUrlAction::showLocationOnMap(std::string url)
  110. {
  111. LLUrlMatch match;
  112. if (LLUrlRegistry::instance().findUrl(url, match))
  113. {
  114. if (! match.getLocation().empty())
  115. {
  116. executeSLURL("secondlife:///app/worldmap/" + match.getLocation());
  117. }
  118. }
  119. }
  120. void LLUrlAction::copyURLToClipboard(std::string url)
  121. {
  122. LLView::getWindow()->copyTextToClipboard(utf8str_to_wstring(url));
  123. }
  124. void LLUrlAction::copyLabelToClipboard(std::string url)
  125. {
  126. LLUrlMatch match;
  127. if (LLUrlRegistry::instance().findUrl(url, match))
  128. {
  129. LLView::getWindow()->copyTextToClipboard(utf8str_to_wstring(match.getLabel()));
  130. }
  131. }