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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llgroupiconctrl.cpp
  3.  * @brief LLGroupIconCtrl class implementation
  4.  *
  5.  * $LicenseInfo:firstyear=2009&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2009-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 "llgroupiconctrl.h"
  34. #include "llagent.h"
  35. /*
  36. #include "llavatarconstants.h"
  37. #include "llcallingcard.h" // for LLAvatarTracker
  38. #include "llavataractions.h"
  39. #include "llmenugl.h"
  40. #include "lluictrlfactory.h"
  41. #include "llcachename.h"
  42. #include "llagentdata.h"
  43. #include "llimfloater.h"
  44. */
  45. static LLDefaultChildRegistry::Register<LLGroupIconCtrl> g_i("group_icon");
  46. LLGroupIconCtrl::Params::Params()
  47. : group_id("group_id")
  48. , draw_tooltip("draw_tooltip", true)
  49. , default_icon_name("default_icon_name")
  50. {
  51. }
  52. LLGroupIconCtrl::LLGroupIconCtrl(const LLGroupIconCtrl::Params& p)
  53. : LLIconCtrl(p)
  54. , mGroupId(LLUUID::null)
  55. , mDrawTooltip(p.draw_tooltip)
  56. , mDefaultIconName(p.default_icon_name)
  57. {
  58. mPriority = LLViewerFetchedTexture::BOOST_ICON;
  59. if (p.group_id.isProvided())
  60. {
  61. LLSD value(p.group_id);
  62. setValue(value);
  63. }
  64. else
  65. {
  66. LLIconCtrl::setValue(mDefaultIconName);
  67. }
  68. }
  69. LLGroupIconCtrl::~LLGroupIconCtrl()
  70. {
  71. LLGroupMgr::getInstance()->removeObserver(this);
  72. }
  73. void LLGroupIconCtrl::setValue(const LLSD& value)
  74. {
  75. if (value.isUUID())
  76. {
  77. LLGroupMgr* gm = LLGroupMgr::getInstance();
  78. if (mGroupId.notNull())
  79. {
  80. gm->removeObserver(this);
  81. }
  82. if (mGroupId != value.asUUID())
  83. {
  84. mGroupId = value.asUUID();
  85. mID = mGroupId; // set LLGroupMgrObserver::mID to make callbacks work
  86. // Check if cache already contains image_id for that group
  87. if (!updateFromCache())
  88. {
  89. LLIconCtrl::setValue(mDefaultIconName);
  90. gm->addObserver(this);
  91. gm->sendGroupPropertiesRequest(mGroupId);
  92. }
  93. }
  94. }
  95. else
  96. {
  97. LLIconCtrl::setValue(value);
  98. }
  99. }
  100. void LLGroupIconCtrl::changed(LLGroupChange gc)
  101. {
  102. if (GC_PROPERTIES == gc)
  103. {
  104. updateFromCache();
  105. }
  106. }
  107. bool LLGroupIconCtrl::updateFromCache()
  108. {
  109. LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(mGroupId);
  110. if (!group_data) return false;
  111. if (group_data->mInsigniaID.notNull())
  112. {
  113. LLIconCtrl::setValue(group_data->mInsigniaID);
  114. }
  115. else
  116. {
  117. LLIconCtrl::setValue(mDefaultIconName);
  118. }
  119. if (mDrawTooltip && !group_data->mName.empty())
  120. {
  121. setToolTip(group_data->mName);
  122. }
  123. else
  124. {
  125. setToolTip(LLStringUtil::null);
  126. }
  127. return true;
  128. }