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

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file llpanellandaudio.cpp
  3.  * @brief Allows configuration of "media" for a land parcel,
  4.  *   for example movies, web pages, and audio.
  5.  *
  6.  * $LicenseInfo:firstyear=2007&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2007-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 "llviewerprecompiledheaders.h"
  34. #include "llpanellandaudio.h"
  35. // viewer includes
  36. #include "llmimetypes.h"
  37. #include "llviewerparcelmgr.h"
  38. #include "llviewerregion.h"
  39. #include "lluictrlfactory.h"
  40. // library includes
  41. #include "llcheckboxctrl.h"
  42. #include "llcombobox.h"
  43. #include "llfloaterurlentry.h"
  44. #include "llfocusmgr.h"
  45. #include "lllineeditor.h"
  46. #include "llparcel.h"
  47. #include "lltextbox.h"
  48. #include "llradiogroup.h"
  49. #include "llspinctrl.h"
  50. #include "llsdutil.h"
  51. #include "lltexturectrl.h"
  52. #include "roles_constants.h"
  53. #include "llscrolllistctrl.h"
  54. // Values for the parcel voice settings radio group
  55. enum
  56. {
  57. kRadioVoiceChatEstate = 0,
  58. kRadioVoiceChatPrivate = 1,
  59. kRadioVoiceChatDisable = 2
  60. };
  61. //---------------------------------------------------------------------------
  62. // LLPanelLandAudio
  63. //---------------------------------------------------------------------------
  64. LLPanelLandAudio::LLPanelLandAudio(LLParcelSelectionHandle& parcel)
  65. : LLPanel(/*std::string("land_media_panel")*/), mParcel(parcel)
  66. {
  67. }
  68. // virtual
  69. LLPanelLandAudio::~LLPanelLandAudio()
  70. {
  71. }
  72. BOOL LLPanelLandAudio::postBuild()
  73. {
  74. mCheckSoundLocal = getChild<LLCheckBoxCtrl>("check sound local");
  75. childSetCommitCallback("check sound local", onCommitAny, this);
  76. mCheckParcelEnableVoice = getChild<LLCheckBoxCtrl>("parcel_enable_voice_channel");
  77. childSetCommitCallback("parcel_enable_voice_channel", onCommitAny, this);
  78. // This one is always disabled so no need for a commit callback
  79. mCheckEstateDisabledVoice = getChild<LLCheckBoxCtrl>("parcel_enable_voice_channel_is_estate_disabled");
  80. mCheckParcelVoiceLocal = getChild<LLCheckBoxCtrl>("parcel_enable_voice_channel_local");
  81. childSetCommitCallback("parcel_enable_voice_channel_local", onCommitAny, this);
  82. mMusicURLEdit = getChild<LLLineEditor>("music_url");
  83. childSetCommitCallback("music_url", onCommitAny, this);
  84. mMusicUrlCheck = getChild<LLCheckBoxCtrl>("hide_music_url");
  85. childSetCommitCallback("hide_music_url", onCommitAny, this);
  86. return TRUE;
  87. }
  88. // public
  89. void LLPanelLandAudio::refresh()
  90. {
  91. LLParcel *parcel = mParcel->getParcel();
  92. if (!parcel)
  93. {
  94. clearCtrls();
  95. }
  96. else
  97. {
  98. // something selected, hooray!
  99. // Display options
  100. BOOL can_change_media = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_MEDIA);
  101. mCheckSoundLocal->set( parcel->getSoundLocal() );
  102. mCheckSoundLocal->setEnabled( can_change_media );
  103. mMusicUrlCheck->set( parcel->getObscureMusic() );
  104. mMusicUrlCheck->setEnabled( can_change_media );
  105. bool allow_voice = parcel->getParcelFlagAllowVoice();
  106. LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
  107. if (region && region->isVoiceEnabled())
  108. {
  109. mCheckEstateDisabledVoice->setVisible(false);
  110. mCheckParcelEnableVoice->setVisible(true);
  111. mCheckParcelEnableVoice->setEnabled( can_change_media );
  112. mCheckParcelEnableVoice->set(allow_voice);
  113. mCheckParcelVoiceLocal->setEnabled( can_change_media && allow_voice );
  114. }
  115. else
  116. {
  117. // Voice disabled at estate level, overrides parcel settings
  118. // Replace the parcel voice checkbox with a disabled one
  119. // labelled with an explanatory message
  120. mCheckEstateDisabledVoice->setVisible(true);
  121. mCheckParcelEnableVoice->setVisible(false);
  122. mCheckParcelEnableVoice->setEnabled(false);
  123. mCheckParcelVoiceLocal->setEnabled(false);
  124. }
  125. mCheckParcelEnableVoice->set(allow_voice);
  126. mCheckParcelVoiceLocal->set(!parcel->getParcelFlagUseEstateVoiceChannel());
  127. // don't display urls if you're not able to change it
  128. // much requested change in forums so people can't 'steal' urls
  129. // NOTE: bug#2009 means this is still vunerable - however, bug
  130. // should be closed since this bug opens up major security issues elsewhere.
  131. bool obscure_music = ! can_change_media && parcel->getObscureMusic();
  132. mMusicURLEdit->setDrawAsterixes(obscure_music);
  133. mMusicURLEdit->setText(parcel->getMusicURL());
  134. mMusicURLEdit->setEnabled( can_change_media );
  135. }
  136. }
  137. // static
  138. void LLPanelLandAudio::onCommitAny(LLUICtrl*, void *userdata)
  139. {
  140. LLPanelLandAudio *self = (LLPanelLandAudio *)userdata;
  141. LLParcel* parcel = self->mParcel->getParcel();
  142. if (!parcel)
  143. {
  144. return;
  145. }
  146. // Extract data from UI
  147. BOOL sound_local = self->mCheckSoundLocal->get();
  148. std::string music_url = self->mMusicURLEdit->getText();
  149. U8 obscure_music = self->mMusicUrlCheck->get();
  150. BOOL voice_enabled = self->mCheckParcelEnableVoice->get();
  151. BOOL voice_estate_chan = !self->mCheckParcelVoiceLocal->get();
  152. // Remove leading/trailing whitespace (common when copying/pasting)
  153. LLStringUtil::trim(music_url);
  154. // Push data into current parcel
  155. parcel->setParcelFlag(PF_ALLOW_VOICE_CHAT, voice_enabled);
  156. parcel->setParcelFlag(PF_USE_ESTATE_VOICE_CHAN, voice_estate_chan);
  157. parcel->setParcelFlag(PF_SOUND_LOCAL, sound_local);
  158. parcel->setMusicURL(music_url);
  159. parcel->setObscureMusic(obscure_music);
  160. // Send current parcel data upstream to server
  161. LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
  162. // Might have changed properties, so let's redraw!
  163. self->refresh();
  164. }