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

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file llpanelmediasettingspermissions.cpp
  3.  * @brief LLPanelMediaSettingsPermissions class implementation
  4.  *
  5.  * note that "permissions" tab is really "Controls" tab - refs to 'perms' and
  6.  * 'permissions' not changed to 'controls' since we don't want to change 
  7.  * shared files in server code and keeping everything the same seemed best.
  8.  *
  9.  * $LicenseInfo:firstyear=2009&license=viewergpl$
  10.  * 
  11.  * Copyright (c) 2009-2010, Linden Research, Inc.
  12.  * 
  13.  * Second Life Viewer Source Code
  14.  * The source code in this file ("Source Code") is provided by Linden Lab
  15.  * to you under the terms of the GNU General Public License, version 2.0
  16.  * ("GPL"), unless you have obtained a separate licensing agreement
  17.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  18.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  19.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  20.  * 
  21.  * There are special exceptions to the terms and conditions of the GPL as
  22.  * it is applied to this Source Code. View the full text of the exception
  23.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  24.  * online at
  25.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  26.  * 
  27.  * By copying, modifying or distributing this software, you acknowledge
  28.  * that you have read and understood your obligations described above,
  29.  * and agree to abide by those obligations.
  30.  * 
  31.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  32.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  33.  * COMPLETENESS OR PERFORMANCE.
  34.  * $/LicenseInfo$
  35.  */
  36. #include "llviewerprecompiledheaders.h"
  37. #include "llpanelmediasettingspermissions.h"
  38. #include "llpanelcontents.h"
  39. #include "llcombobox.h"
  40. #include "llcheckboxctrl.h"
  41. #include "llspinctrl.h"
  42. #include "llurlhistory.h"
  43. #include "lluictrlfactory.h"
  44. #include "llwindow.h"
  45. #include "llviewerwindow.h"
  46. #include "llsdutil.h"
  47. #include "llselectmgr.h"
  48. #include "llmediaentry.h"
  49. #include "llnamebox.h"
  50. #include "lltrans.h"
  51. #include "llfloatermediasettings.h"
  52. ////////////////////////////////////////////////////////////////////////////////
  53. //
  54. LLPanelMediaSettingsPermissions::LLPanelMediaSettingsPermissions() :
  55. mControls( NULL ),
  56.     mPermsOwnerInteract( 0 ),
  57.     mPermsOwnerControl( 0 ),
  58. mPermsGroupName( 0 ),
  59.     mPermsGroupInteract( 0 ),
  60.     mPermsGroupControl( 0 ),
  61.     mPermsWorldInteract( 0 ),
  62.     mPermsWorldControl( 0 )
  63. {
  64.     // build dialog from XML
  65.     LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_permissions.xml");
  66. }
  67. ////////////////////////////////////////////////////////////////////////////////
  68. //
  69. BOOL LLPanelMediaSettingsPermissions::postBuild()
  70. {
  71.     // connect member vars with UI widgets
  72. mControls = getChild< LLComboBox >( LLMediaEntry::CONTROLS_KEY );
  73.     mPermsOwnerInteract = getChild< LLCheckBoxCtrl >( LLPanelContents::PERMS_OWNER_INTERACT_KEY );
  74.     mPermsOwnerControl = getChild< LLCheckBoxCtrl >( LLPanelContents::PERMS_OWNER_CONTROL_KEY );
  75.     mPermsGroupInteract = getChild< LLCheckBoxCtrl >( LLPanelContents::PERMS_GROUP_INTERACT_KEY );
  76.     mPermsGroupControl = getChild< LLCheckBoxCtrl >( LLPanelContents::PERMS_GROUP_CONTROL_KEY );
  77.     mPermsWorldInteract = getChild< LLCheckBoxCtrl >( LLPanelContents::PERMS_ANYONE_INTERACT_KEY );
  78.     mPermsWorldControl = getChild< LLCheckBoxCtrl >( LLPanelContents::PERMS_ANYONE_CONTROL_KEY );
  79. mPermsGroupName = getChild< LLNameBox >( "perms_group_name" );
  80.     return true;
  81. }
  82. ////////////////////////////////////////////////////////////////////////////////
  83. // virtual
  84. LLPanelMediaSettingsPermissions::~LLPanelMediaSettingsPermissions()
  85. {
  86. }
  87. ////////////////////////////////////////////////////////////////////////////////
  88. // virtual
  89. void LLPanelMediaSettingsPermissions::draw()
  90. {
  91. // housekeeping
  92. LLPanel::draw();
  93. childSetText("perms_group_name",LLStringUtil::null);
  94. LLUUID group_id;
  95. BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
  96. if (groups_identical)
  97. {
  98. if(mPermsGroupName)
  99. {
  100. mPermsGroupName->setNameID(group_id, true);
  101. mPermsGroupName->setEnabled(true);
  102. };
  103. }
  104. else
  105. {
  106. if(mPermsGroupName)
  107. {
  108. mPermsGroupName->setNameID(LLUUID::null, TRUE);
  109. mPermsGroupName->refresh(LLUUID::null, LLStringUtil::null, LLStringUtil::null, true);
  110. mPermsGroupName->setEnabled(false);
  111. };
  112. };
  113. }
  114. ////////////////////////////////////////////////////////////////////////////////
  115. // static 
  116. void LLPanelMediaSettingsPermissions::clearValues( void* userdata, bool editable)
  117. {
  118. LLPanelMediaSettingsPermissions *self =(LLPanelMediaSettingsPermissions *)userdata;
  119. self->mControls->clear();
  120. self->mPermsOwnerInteract->clear();
  121. self->mPermsOwnerControl->clear();
  122. self->mPermsGroupInteract->clear();
  123. self->mPermsGroupControl->clear();
  124. self->mPermsWorldInteract->clear();
  125. self->mPermsWorldControl->clear();
  126. self->mControls->setEnabled(editable);
  127. self->mPermsOwnerInteract->setEnabled(editable);
  128. self->mPermsOwnerControl->setEnabled(editable);
  129. self->mPermsGroupInteract->setEnabled(editable);
  130. self->mPermsGroupControl->setEnabled(editable);
  131. self->mPermsWorldInteract->setEnabled(editable);
  132. self->mPermsWorldControl->setEnabled(editable);
  133. }
  134. ////////////////////////////////////////////////////////////////////////////////
  135. // static 
  136. void LLPanelMediaSettingsPermissions::initValues( void* userdata, const LLSD& media_settings ,  bool editable)
  137. {
  138.     LLPanelMediaSettingsPermissions *self =(LLPanelMediaSettingsPermissions *)userdata;
  139.     std::string base_key( "" );
  140.     std::string tentative_key( "" );
  141.     struct 
  142.     {
  143.         std::string key_name;
  144.         LLUICtrl* ctrl_ptr;
  145.         std::string ctrl_type;
  146.     } data_set [] = 
  147.     { 
  148. { LLMediaEntry::CONTROLS_KEY, self->mControls, "LLComboBox" },
  149.         { LLPanelContents::PERMS_OWNER_INTERACT_KEY,    self->mPermsOwnerInteract,  "LLCheckBoxCtrl" },
  150.         { LLPanelContents::PERMS_OWNER_CONTROL_KEY,     self->mPermsOwnerControl,   "LLCheckBoxCtrl" },
  151.         { LLPanelContents::PERMS_GROUP_INTERACT_KEY,    self->mPermsGroupInteract,  "LLCheckBoxCtrl" },
  152.         { LLPanelContents::PERMS_GROUP_CONTROL_KEY,     self->mPermsGroupControl,   "LLCheckBoxCtrl" },
  153.         { LLPanelContents::PERMS_ANYONE_INTERACT_KEY,   self->mPermsWorldInteract,  "LLCheckBoxCtrl" },
  154.         { LLPanelContents::PERMS_ANYONE_CONTROL_KEY,    self->mPermsWorldControl,   "LLCheckBoxCtrl" },
  155.         { "", NULL , "" }
  156.     };
  157.     for( int i = 0; data_set[ i ].key_name.length() > 0; ++i )
  158.     {
  159.         base_key = std::string( data_set[ i ].key_name );
  160.         tentative_key = base_key + std::string( LLPanelContents::TENTATIVE_SUFFIX );
  161.         // TODO: CP - I bet there is a better way to do this using Boost
  162.         if ( media_settings[ base_key ].isDefined() )
  163.         {
  164.             if ( data_set[ i ].ctrl_type == "LLCheckBoxCtrl" )
  165.             {
  166. // Most recent change to the "sense" of these checkboxes
  167. // means the value in the checkbox matches that on the server
  168.                 static_cast< LLCheckBoxCtrl* >( data_set[ i ].ctrl_ptr )->
  169.                     setValue( media_settings[ base_key ].asBoolean() );
  170.             }
  171.             else
  172.             if ( data_set[ i ].ctrl_type == "LLComboBox" )
  173.                 static_cast< LLComboBox* >( data_set[ i ].ctrl_ptr )->
  174.                     setCurrentByIndex( media_settings[ base_key ].asInteger() );
  175. data_set[ i ].ctrl_ptr->setEnabled(editable);
  176.             data_set[ i ].ctrl_ptr->setTentative( media_settings[ tentative_key ].asBoolean() );
  177.         };
  178.     };
  179. // *NOTE: If any of a particular flavor is tentative, we have to disable 
  180. // them all because of an architectural issue: namely that we represent 
  181. // these as a bit field, and we can't selectively apply only one bit to all selected
  182. // faces if they don't match.  Also see the *NOTE below.
  183. if ( self->mPermsOwnerInteract->getTentative() ||
  184.  self->mPermsGroupInteract->getTentative() ||
  185.  self->mPermsWorldInteract->getTentative())
  186. {
  187. self->mPermsOwnerInteract->setEnabled(false);
  188. self->mPermsGroupInteract->setEnabled(false);
  189. self->mPermsWorldInteract->setEnabled(false);
  190. }
  191. if ( self->mPermsOwnerControl->getTentative() ||
  192.  self->mPermsGroupControl->getTentative() ||
  193.  self->mPermsWorldControl->getTentative())
  194. {
  195. self->mPermsOwnerControl->setEnabled(false);
  196. self->mPermsGroupControl->setEnabled(false);
  197. self->mPermsWorldControl->setEnabled(false);
  198. }
  199. self->childSetEnabled("media_perms_label_owner", editable );
  200. self->childSetText("media_perms_label_owner",  LLTrans::getString("Media Perms Owner") );
  201. self->childSetEnabled("media_perms_label_group", editable );
  202. self->childSetText("media_perms_label_group",  LLTrans::getString("Media Perms Group") );
  203. self->childSetEnabled("media_perms_label_anyone", editable );
  204. self->childSetText("media_perms_label_anyone", LLTrans::getString("Media Perms Anyone") );
  205. }
  206. ////////////////////////////////////////////////////////////////////////////////
  207. // 
  208. void LLPanelMediaSettingsPermissions::preApply()
  209. {
  210.     // no-op
  211. }
  212. ////////////////////////////////////////////////////////////////////////////////
  213. //
  214. void LLPanelMediaSettingsPermissions::getValues( LLSD &fill_me_in, bool include_tentative )
  215. {
  216. // moved over from the 'General settings' tab
  217. if (include_tentative || !mControls->getTentative()) fill_me_in[LLMediaEntry::CONTROLS_KEY] = (LLSD::Integer)mControls->getCurrentIndex();
  218. // *NOTE: For some reason, gcc does not like these symbol references in the 
  219. // expressions below (inside the static_casts).  I have NO idea why :(.
  220. // For some reason, assigning them to const temp vars here fixes the link
  221. // error.  Bizarre.
  222. const U8 none = LLMediaEntry::PERM_NONE;
  223. const U8 owner = LLMediaEntry::PERM_OWNER;
  224. const U8 group = LLMediaEntry::PERM_GROUP;
  225. const U8 anyone = LLMediaEntry::PERM_ANYONE; 
  226. const LLSD::Integer control = static_cast<LLSD::Integer>(
  227. (mPermsOwnerControl->getValue() ? owner : none ) |
  228. (mPermsGroupControl->getValue() ? group: none  ) |
  229. (mPermsWorldControl->getValue() ? anyone : none ));
  230. const LLSD::Integer interact = static_cast<LLSD::Integer>(
  231. (mPermsOwnerInteract->getValue() ? owner: none ) |
  232. (mPermsGroupInteract->getValue() ? group : none ) |
  233. (mPermsWorldInteract->getValue() ? anyone : none ));
  234. // *TODO: This will fill in the values of all permissions values, even if
  235. // one or more is tentative.  This is not quite the user expectation...what
  236. // it should do is only change the bit that was made "untentative", but in
  237. // a multiple-selection situation, this isn't possible given the architecture
  238. // for how settings are applied.
  239. if (include_tentative || 
  240. !mPermsOwnerControl->getTentative() || 
  241. !mPermsGroupControl->getTentative() || 
  242. !mPermsWorldControl->getTentative())
  243. {
  244. fill_me_in[LLMediaEntry::PERMS_CONTROL_KEY] = control;
  245. }
  246. if (include_tentative || 
  247. !mPermsOwnerInteract->getTentative() || 
  248. !mPermsGroupInteract->getTentative() || 
  249. !mPermsWorldInteract->getTentative())
  250. {
  251. fill_me_in[LLMediaEntry::PERMS_INTERACT_KEY] = interact;
  252. }
  253. }
  254. ////////////////////////////////////////////////////////////////////////////////
  255. // 
  256. void LLPanelMediaSettingsPermissions::postApply()
  257. {
  258.     // no-op
  259. }