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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2. * @file llpanelprofile.cpp
  3. * @brief Profile panel implementation
  4. *
  5. * $LicenseInfo:firstyear=2009&license=viewergpl$
  6. * Copyright (c) 2009-2010, Linden Research, Inc.
  7. * Second Life Viewer Source Code
  8. * The source code in this file ("Source Code") is provided by Linden Lab
  9. * to you under the terms of the GNU General Public License, version 2.0
  10. * ("GPL"), unless you have obtained a separate licensing agreement
  11. * ("Other License"), formally executed by you and Linden Lab.  Terms of
  12. * the GPL can be found in doc/GPL-license.txt in this distribution, or
  13. * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  14. * There are special exceptions to the terms and conditions of the GPL as
  15. * it is applied to this Source Code. View the full text of the exception
  16. * in the file doc/FLOSS-exception.txt in this software distribution, or
  17. * online at
  18. * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  19. * By copying, modifying or distributing this software, you acknowledge
  20. * that you have read and understood your obligations described above,
  21. * and agree to abide by those obligations.
  22. * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  23. * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  24. * COMPLETENESS OR PERFORMANCE.
  25. * $/LicenseInfo$
  26. */
  27. #include "llviewerprecompiledheaders.h"
  28. #include "llpanelprofile.h"
  29. #include "llagent.h"
  30. #include "llavataractions.h"
  31. #include "llfloaterreg.h"
  32. #include "llcommandhandler.h"
  33. #include "llpanelpicks.h"
  34. #include "lltabcontainer.h"
  35. static const std::string PANEL_PICKS = "panel_picks";
  36. static const std::string PANEL_PROFILE = "panel_profile";
  37. class LLAgentHandler : public LLCommandHandler
  38. {
  39. public:
  40. // requires trusted browser to trigger
  41. LLAgentHandler() : LLCommandHandler("agent", UNTRUSTED_THROTTLE) { }
  42. bool handle(const LLSD& params, const LLSD& query_map,
  43. LLMediaCtrl* web)
  44. {
  45. if (params.size() < 2) return false;
  46. LLUUID avatar_id;
  47. if (!avatar_id.set(params[0], FALSE))
  48. {
  49. return false;
  50. }
  51. const std::string verb = params[1].asString();
  52. if (verb == "about")
  53. {
  54. LLAvatarActions::showProfile(avatar_id);
  55. return true;
  56. }
  57. if (verb == "inspect")
  58. {
  59. LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", avatar_id));
  60. return true;
  61. }
  62. if (verb == "im")
  63. {
  64. LLAvatarActions::startIM(avatar_id);
  65. return true;
  66. }
  67. if (verb == "pay")
  68. {
  69. LLAvatarActions::pay(avatar_id);
  70. return true;
  71. }
  72. if (verb == "offerteleport")
  73. {
  74. LLAvatarActions::offerTeleport(avatar_id);
  75. return true;
  76. }
  77. if (verb == "requestfriend")
  78. {
  79. LLAvatarActions::requestFriendshipDialog(avatar_id);
  80. return true;
  81. }
  82. if (verb == "mute")
  83. {
  84. if (! LLAvatarActions::isBlocked(avatar_id))
  85. {
  86. LLAvatarActions::toggleBlock(avatar_id);
  87. }
  88. return true;
  89. }
  90. if (verb == "unmute")
  91. {
  92. if (LLAvatarActions::isBlocked(avatar_id))
  93. {
  94. LLAvatarActions::toggleBlock(avatar_id);
  95. }
  96. return true;
  97. }
  98. return false;
  99. }
  100. };
  101. LLAgentHandler gAgentHandler;
  102. LLPanelProfile::LLPanelProfile()
  103.  : LLPanel()
  104.  , mTabCtrl(NULL)
  105.  , mAvatarId(LLUUID::null)
  106. {
  107. }
  108. BOOL LLPanelProfile::postBuild()
  109. {
  110. mTabCtrl = getChild<LLTabContainer>("tabs");
  111. getTabCtrl()->setCommitCallback(boost::bind(&LLPanelProfile::onTabSelected, this, _2));
  112. LLPanelPicks* panel_picks = getChild<LLPanelPicks>(PANEL_PICKS);
  113. panel_picks->setProfilePanel(this);
  114. getTabContainer()[PANEL_PICKS] = panel_picks;
  115. getTabContainer()[PANEL_PROFILE] = getChild<LLPanelAvatarProfile>(PANEL_PROFILE);
  116. return TRUE;
  117. }
  118. void LLPanelProfile::onOpen(const LLSD& key)
  119. {
  120. // open the desired panel
  121. if (key.has("open_tab_name"))
  122. {
  123. getTabContainer()[PANEL_PICKS]->onClosePanel();
  124. // onOpen from selected panel will be called from onTabSelected callback
  125. getTabCtrl()->selectTabByName(key["open_tab_name"]);
  126. }
  127. else
  128. {
  129. getTabCtrl()->getCurrentPanel()->onOpen(getAvatarId());
  130. }
  131. // support commands to open further pieces of UI
  132. if (key.has("show_tab_panel"))
  133. {
  134. std::string panel = key["show_tab_panel"].asString();
  135. if (panel == "create_classified")
  136. {
  137. LLPanelPicks* picks = dynamic_cast<LLPanelPicks *>(getTabContainer()[PANEL_PICKS]);
  138. if (picks)
  139. {
  140. picks->createNewClassified();
  141. }
  142. }
  143. else if (panel == "classified_details")
  144. {
  145. LLUUID classified_id = key["classified_id"].asUUID();
  146. LLUUID avatar_id     = key["classified_avatar_id"].asUUID();
  147. LLUUID snapshot_id   = key["classified_snapshot_id"].asUUID();
  148. std::string name     = key["classified_name"].asString();
  149. std::string desc     = key["classified_desc"].asString();
  150. LLPanelPicks* picks = dynamic_cast<LLPanelPicks *>(getTabContainer()[PANEL_PICKS]);
  151. if (picks)
  152. {
  153. picks->openClassifiedInfo(classified_id, avatar_id, snapshot_id, name, desc);
  154. }
  155. }
  156. }
  157. }
  158. //*TODO redo panel toggling
  159. void LLPanelProfile::togglePanel(LLPanel* panel, const LLSD& key)
  160. {
  161. // TRUE - we need to open/expand "panel"
  162. bool expand = getChildList()->front() != panel;  // mTabCtrl->getVisible();
  163. if (expand)
  164. {
  165. openPanel(panel, key);
  166. }
  167. else 
  168. {
  169. closePanel(panel);
  170. getTabCtrl()->getCurrentPanel()->onOpen(getAvatarId());
  171. }
  172. }
  173. void LLPanelProfile::onTabSelected(const LLSD& param)
  174. {
  175. std::string tab_name = param.asString();
  176. if (NULL != getTabContainer()[tab_name])
  177. {
  178. getTabContainer()[tab_name]->onOpen(getAvatarId());
  179. }
  180. }
  181. void LLPanelProfile::setAllChildrenVisible(BOOL visible)
  182. {
  183. const child_list_t* child_list = getChildList();
  184. child_list_const_iter_t child_it = child_list->begin();
  185. for (; child_it != child_list->end(); ++child_it)
  186. {
  187. LLView* viewp = *child_it;
  188. viewp->setVisible(visible);
  189. }
  190. }
  191. void LLPanelProfile::openPanel(LLPanel* panel, const LLSD& params)
  192. {
  193. if (panel->getParent() != this)
  194. {
  195. addChild(panel);
  196. }
  197. else
  198. {
  199. sendChildToFront(panel);
  200. }
  201. panel->setVisible(TRUE);
  202. panel->onOpen(params);
  203. LLRect new_rect = getRect();
  204. panel->reshape(new_rect.getWidth(), new_rect.getHeight());
  205. new_rect.setLeftTopAndSize(0, new_rect.getHeight(), new_rect.getWidth(), new_rect.getHeight());
  206. panel->setRect(new_rect);
  207. }
  208. void LLPanelProfile::closePanel(LLPanel* panel)
  209. {
  210. panel->setVisible(FALSE);
  211. if (panel->getParent() == this) 
  212. {
  213. removeChild(panel);
  214. }
  215. }
  216. S32 LLPanelProfile::notifyParent(const LLSD& info)
  217. {
  218. std::string action = info["action"];
  219. // lets update Picks list after Pick was saved
  220. if("save_new_pick" == action)
  221. {
  222. onOpen(info);
  223. return 1;
  224. }
  225. return LLPanel::notifyParent(info);
  226. }