From a96260616070518acc70572dce4e74890ee8c529 Mon Sep 17 00:00:00 2001 From: Armin Weatherwax Date: Tue, 7 Sep 2010 14:19:02 +0200 Subject: fix "about land" (actually llpanellandmedia) crashes --- linden/indra/newview/llpanellandmedia.cpp | 301 +++++++++++++----------------- linden/indra/newview/llpanellandmedia.h | 20 +- 2 files changed, 132 insertions(+), 189 deletions(-) diff --git a/linden/indra/newview/llpanellandmedia.cpp b/linden/indra/newview/llpanellandmedia.cpp index db68c42..11f491c 100644 --- a/linden/indra/newview/llpanellandmedia.cpp +++ b/linden/indra/newview/llpanellandmedia.cpp @@ -39,8 +39,6 @@ #include "llmimetypes.h" #include "llviewerparcelmgr.h" #include "llviewerregion.h" -#include "llviewermedia.h" -#include "llviewerparcelmedia.h" #include "lluictrlfactory.h" // library includes @@ -56,7 +54,6 @@ #include "llsdutil.h" #include "lltexturectrl.h" #include "roles_constants.h" -#include "llscrolllistctrl.h" #include "hippoGridManager.h" @@ -65,8 +62,15 @@ //--------------------------------------------------------------------------- LLPanelLandMedia::LLPanelLandMedia(LLParcelSelectionHandle& parcel) -: LLPanel(), +: LLPanel(std::string("land_media_panel")), + mParcel(parcel), + mCheckSoundLocal(NULL), + mSoundHelpButton(NULL), + mCheckEnableVoiceChat(NULL), + mCheckEnableVoiceChatIsEstateDisabled(NULL), + mCheckEnableVoiceChatParcel(NULL), + mMusicURLEdit(NULL), mMediaURLEdit(NULL), mMediaDescEdit(NULL), mMediaTypeCombo(NULL), @@ -77,7 +81,8 @@ LLPanelLandMedia::LLPanelLandMedia(LLParcelSelectionHandle& parcel) mMediaTextureCtrl(NULL), mMediaAutoScaleCheck(NULL), mMediaLoopCheck(NULL), - mMediaUrlCheck(NULL) + mMediaUrlCheck(NULL), + mMusicUrlCheck(NULL) { } @@ -85,10 +90,34 @@ LLPanelLandMedia::LLPanelLandMedia(LLParcelSelectionHandle& parcel) // virtual LLPanelLandMedia::~LLPanelLandMedia() { + // close LLFloaterURLEntry? +} + + +// static +void LLPanelLandMedia::onClickSoundHelp(void*) +{ + LLNotifications::instance().add("ClickSoundHelpLand"); } + BOOL LLPanelLandMedia::postBuild() { + mCheckSoundLocal = getChild("check sound local"); + childSetCommitCallback("check sound local", onCommitAny, this); + + mSoundHelpButton = getChild("?"); + mSoundHelpButton->setClickedCallback(onClickSoundHelp, this); + + mCheckEnableVoiceChat = getChild("parcel_enable_voice_channel"); + childSetCommitCallback("parcel_enable_voice_channel", onCommitAny, this); + mCheckEnableVoiceChatIsEstateDisabled = getChild("parcel_enable_voice_channel_is_estate_disabled"); + childSetCommitCallback("parcel_enable_voice_channel_is_estate_disabled", onCommitAny, this); + mCheckEnableVoiceChatParcel = getChild("parcel_enable_voice_channel_parcel"); + childSetCommitCallback("parcel_enable_voice_channel_parcel", onCommitAny, this); + + mMusicURLEdit = getChild("music_url"); + childSetCommitCallback("music_url", onCommitAny, this); mMediaTextureCtrl = getChild("media texture"); mMediaTextureCtrl->setCommitCallback( onCommitAny ); @@ -101,13 +130,16 @@ BOOL LLPanelLandMedia::postBuild() childSetCommitCallback("media_auto_scale", onCommitAny, this); mMediaLoopCheck = getChild("media_loop"); - childSetCommitCallback("media_loop", onCommitAny, this ); + childSetCommitCallback("media_loop", onCommitAny, this); mMediaUrlCheck = getChild("hide_media_url"); - childSetCommitCallback("hide_media_url", onCommitAny, this ); + childSetCommitCallback("hide_media_url", onCommitAny, this); + + mMusicUrlCheck = getChild("hide_music_url"); + childSetCommitCallback("hide_music_url", onCommitAny, this); mMediaURLEdit = getChild("media_url"); - childSetCommitCallback("media_url", onCommitAny, this ); + childSetCommitCallback("media_url", onCommitAny, this); mMediaDescEdit = getChild("url_description"); childSetCommitCallback("url_description", onCommitAny, this); @@ -116,41 +148,15 @@ BOOL LLPanelLandMedia::postBuild() childSetCommitCallback("media type", onCommitType, this); populateMIMECombo(); - mMediaResetCtrl = getChild("media_reset_time"); - childSetCommitCallback("media_reset_time", onCommitAny, this); - mMediaResetCtrlLabel = getChild("media_reset"); - mMediaWidthCtrl = getChild("media_size_width"); childSetCommitCallback("media_size_width", onCommitAny, this); mMediaHeightCtrl = getChild("media_size_height"); childSetCommitCallback("media_size_height", onCommitAny, this); mMediaSizeCtrlLabel = getChild("media_size"); - mMediaNavigateAllowCheck = getChild("check navigate allow"); - childSetCommitCallback("check navigate allow", onCommitAny, this); - mMediaURLFilterCheck = getChild("check navigate filter"); - childSetCommitCallback("check navigate filter", onCommitAny, this); - mSetURLButton = getChild("set_media_url"); childSetAction("set_media_url", onSetBtn, this); - mResetURLButton = getChild("reset_media_url"); - childSetAction("reset_media_url", onResetBtn, this); - - mURLFilterList = getChild("filter_list"); - - mMediaURLFilterDomainEdit = getChild("navigate_filter_domain"); - - mMediaURLFilterAddButton = getChild("add_navigate_filter"); - childSetAction("add_navigate_filter", onClickAddURLFilter, this); - - mMediaURLFilterRemoveButton = getChild("remove_navigate_filter"); - childSetAction("remove_navigate_filter", onClickRemoveURLFilter, this); - - mRadioNavigateControl = getChild("radio_navigate_allow"); - childSetCommitCallback("radio_navigate_allow", onCommitAny, this); - - return TRUE; } @@ -171,9 +177,59 @@ void LLPanelLandMedia::refresh() // Display options BOOL can_change_media = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_MEDIA); - mCheckSoundLocal->set( parcel->getSoundLocal() ); + mCheckSoundLocal->set( parcel->getSoundLocal() ); + mCheckSoundLocal->setEnabled( can_change_media ); + + LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); + if (!region) + { + // never seen this happen, but log it + llwarns << "Couldn't get selected region." << llendl; + } + + // We need to do this differently for OpenSim because it doesn't include + // REGION_FLAGS_ALLOW_VOICE in the "RegionInfo" message as of 0.6.9 PF -- MC + bool allow_voice = parcel->getParcelFlagAllowVoice(); + if (gHippoGridManager->getConnectedGrid()->isSecondLife()) + { + if (region && region->isVoiceEnabled()) // estate-wide voice-disable overrides all + { + mCheckEnableVoiceChatIsEstateDisabled->setVisible(false); + + mCheckEnableVoiceChat->setVisible(true); + mCheckEnableVoiceChat->setEnabled( can_change_media ); + mCheckEnableVoiceChat->set(allow_voice); + + mCheckEnableVoiceChatParcel->setEnabled( can_change_media && allow_voice ); + } + else // disabled at region level + { + mCheckEnableVoiceChatIsEstateDisabled->setVisible(true); // always disabled + mCheckEnableVoiceChat->setVisible(false); + mCheckEnableVoiceChat->setEnabled(false); + mCheckEnableVoiceChat->set(false); + + mCheckEnableVoiceChatParcel->setEnabled(false); + } + } + else + { + mCheckEnableVoiceChatIsEstateDisabled->setVisible(true); + + mCheckEnableVoiceChat->setVisible(true); + mCheckEnableVoiceChat->setEnabled( can_change_media ); + mCheckEnableVoiceChat->set(allow_voice); + + mCheckEnableVoiceChatParcel->setEnabled( can_change_media && allow_voice ); + } + + mCheckEnableVoiceChatParcel->set(!parcel->getParcelFlagUseEstateVoiceChannel()); + + mMusicURLEdit->setText(parcel->getMusicURL()); + mMusicURLEdit->setEnabled( can_change_media ); - childSetText("current_url", parcel->getMediaCurrentURL()); + mMediaURLEdit->setText(parcel->getMediaURL()); + mMediaURLEdit->setEnabled( FALSE ); mMediaDescEdit->setText(parcel->getMediaDesc()); mMediaDescEdit->setEnabled( can_change_media ); @@ -190,11 +246,15 @@ void LLPanelLandMedia::refresh() mMediaUrlCheck->set( parcel->getObscureMedia() ); mMediaUrlCheck->setEnabled( can_change_media ); + mMusicUrlCheck->set( parcel->getObscureMusic() ); + mMusicUrlCheck->setEnabled( can_change_media ); + // don't display urls if you're not able to change it // much requested change in forums so people can't 'steal' urls // NOTE: bug#2009 means this is still vunerable - however, bug // should be closed since this bug opens up major security issues elsewhere. bool obscure_media = ! can_change_media && parcel->getObscureMedia(); + bool obscure_music = ! can_change_media && parcel->getObscureMusic(); // Special code to disable asterixes for html type if(mime_type == "text/html") @@ -204,6 +264,7 @@ void LLPanelLandMedia::refresh() mMediaUrlCheck->setEnabled( false ); } + mMusicURLEdit->setDrawAsterixes( obscure_music ); mMediaURLEdit->setDrawAsterixes( obscure_media ); mMediaAutoScaleCheck->set( parcel->getMediaAutoScale () ); @@ -217,10 +278,6 @@ void LLPanelLandMedia::refresh() else mMediaLoopCheck->set( false ); mMediaLoopCheck->setEnabled ( can_change_media && allow_looping ); - - mMediaResetCtrl->set( parcel->getMediaURLTimeout() ); - mMediaResetCtrl->setEnabled( can_change_media ); - mMediaResetCtrlLabel->setEnabled( can_change_media ); // disallow media size change for mime types that don't allow it bool allow_resize = LLMIMETypes::findAllowResize( mime_type ); @@ -244,45 +301,28 @@ void LLPanelLandMedia::refresh() mMediaTextureCtrl->setEnabled( can_change_media ); mSetURLButton->setEnabled( can_change_media ); - mResetURLButton->setEnabled( can_change_media ); - mMediaURLFilterCheck->set( parcel->getMediaURLFilterEnable() ); - mMediaURLFilterCheck->setEnabled( can_change_media ); + #if 0 + // there is a media url and a media texture selected + if ( ( ! ( std::string ( parcel->getMediaURL() ).empty () ) ) && ( ! ( parcel->getMediaID ().isNull () ) ) ) + { + // turn on transport controls if allowed for this parcel + mMediaStopButton->setEnabled ( editable ); + mMediaStartButton->setEnabled ( editable ); + } + else + { + // no media url or no media texture + mMediaStopButton->setEnabled ( FALSE ); + mMediaStartButton->setEnabled ( FALSE ); + }; + #endif LLFloaterURLEntry* floater_url_entry = (LLFloaterURLEntry*)mURLEntryFloater.get(); if (floater_url_entry) { floater_url_entry->updateFromLandMediaPanel(); } - - // This radial control is really just an inverse mapping to the boolean allow_navigate value. - // It is set as a radial merely for user readability. - mRadioNavigateControl->setSelectedIndex(! parcel->getMediaAllowNavigate()); - mRadioNavigateControl->setEnabled( can_change_media ); - - mMediaURLFilterDomainEdit->setEnabled( can_change_media ); - mMediaURLFilterAddButton->setEnabled( can_change_media ); - mMediaURLFilterRemoveButton->setEnabled( can_change_media ); - - if (mURLFilterList) - { - mURLFilterList->setEnabled( can_change_media ); - - mURLFilterList->deleteAllItems(); - - LLSD list = parcel->getMediaURLFilterList(); - - for (LLSD::array_iterator i = list.beginArray(); i != list.endArray(); ++i) - { - std::string domain = (*i).asString(); - - LLSD element; - element["id"] = domain; - element["columns"][0]["value"] = domain; - - mURLFilterList->addElement(element); - } - } } } @@ -318,6 +358,7 @@ void LLPanelLandMedia::setMediaType(const std::string& mime_type) std::string media_key = LLMIMETypes::widgetType(mime_type); mMediaTypeCombo->setValue(media_key); + childSetText("mime_type", mime_type); } @@ -329,14 +370,14 @@ void LLPanelLandMedia::setMediaURL(const std::string& media_url) parcel->setMediaCurrentURL(media_url); // LLViewerMedia::navigateHome(); - mMediaURLEdit->onCommit(); - // LLViewerParcelMedia::sendMediaNavigateMessage(media_url); - childSetText("current_url", media_url); +// // LLViewerParcelMedia::sendMediaNavigateMessage(media_url); +// childSetText("current_url", media_url); } + std::string LLPanelLandMedia::getMediaURL() { - return mMediaURLEdit->getText(); + return mMediaURLEdit->getText(); } // static @@ -365,26 +406,33 @@ void LLPanelLandMedia::onCommitAny(LLUICtrl*, void *userdata) } // Extract data from UI + BOOL sound_local = self->mCheckSoundLocal->get(); + std::string music_url = self->mMusicURLEdit->getText(); std::string media_url = self->mMediaURLEdit->getText(); std::string media_desc = self->mMediaDescEdit->getText(); std::string mime_type = self->childGetText("mime_type"); U8 media_auto_scale = self->mMediaAutoScaleCheck->get(); U8 media_loop = self->mMediaLoopCheck->get(); U8 obscure_media = self->mMediaUrlCheck->get(); - F32 media_reset_time = (F32)self->mMediaResetCtrl->get(); + U8 obscure_music = self->mMusicUrlCheck->get(); S32 media_width = (S32)self->mMediaWidthCtrl->get(); S32 media_height = (S32)self->mMediaHeightCtrl->get(); LLUUID media_id = self->mMediaTextureCtrl->getImageAssetID(); - U8 navigate_allow = ! self->mRadioNavigateControl->getSelectedIndex(); - U8 navigate_filter = self->mMediaURLFilterCheck->get(); + BOOL voice_enabled = self->mCheckEnableVoiceChat->get(); + BOOL voice_estate_chan = ! self->mCheckEnableVoiceChatParcel->get(); self->childSetText("mime_type", mime_type); // Remove leading/trailing whitespace (common when copying/pasting) + LLStringUtil::trim(music_url); LLStringUtil::trim(media_url); // Push data into current parcel + parcel->setParcelFlag(PF_ALLOW_VOICE_CHAT, voice_enabled); + parcel->setParcelFlag(PF_USE_ESTATE_VOICE_CHAN, voice_estate_chan); + parcel->setParcelFlag(PF_SOUND_LOCAL, sound_local); + parcel->setMusicURL(music_url); parcel->setMediaURL(media_url); parcel->setMediaType(mime_type); parcel->setMediaDesc(media_desc); @@ -394,10 +442,7 @@ void LLPanelLandMedia::onCommitAny(LLUICtrl*, void *userdata) parcel->setMediaAutoScale ( media_auto_scale ); parcel->setMediaLoop ( media_loop ); parcel->setObscureMedia( obscure_media ); - parcel->setMediaURLFilterEnable(navigate_filter); - parcel->setMediaAllowNavigate(navigate_allow); - parcel->setMediaURLTimeout(media_reset_time); - + parcel->setObscureMusic( obscure_music ); // Send current parcel data upstream to server LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel ); @@ -415,92 +460,4 @@ void LLPanelLandMedia::onSetBtn(void *userdata) { parent_floater->addDependentFloater(self->mURLEntryFloater.get()); } -} - -// static -void LLPanelLandMedia::onResetBtn(void *userdata) -{ - LLPanelLandMedia *self = (LLPanelLandMedia *)userdata; - LLParcel* parcel = self->mParcel->getParcel(); - // LLViewerMedia::navigateHome(); - self->refresh(); - self->childSetText("current_url", parcel->getMediaURL()); - // LLViewerParcelMedia::sendMediaNavigateMessage(parcel->getMediaURL()); - -} -// static -void LLPanelLandMedia::onClickAddURLFilter(void *userdata) -{ - LLPanelLandMedia *panelp = (LLPanelLandMedia *)userdata; - LLParcel* parcel = panelp->mParcel->getParcel(); - - LLSD list = parcel->getMediaURLFilterList(); - - std::string domain = panelp->mMediaURLFilterDomainEdit->getText(); - LLStringUtil::trim(domain); - - BOOL add = TRUE; - if (domain == "") - { - add = FALSE; - } - - // check for dupes - for(S32 i = 0; i < list.size(); i++) - { - if (list[i].asString() == domain) - { - add = FALSE; - break; - } - } - - if (add) - { - list.append(domain); - parcel->setMediaURLFilterList(list); - - LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel ); - - panelp->mMediaURLFilterDomainEdit->setText(std::string("")); - - panelp->refresh(); - } - -} - -// static -void LLPanelLandMedia::onClickRemoveURLFilter(void *data) -{ - LLPanelLandMedia* panelp = (LLPanelLandMedia*)data; - if (panelp && panelp->mURLFilterList) - { - LLParcel* parcel = panelp->mParcel->getParcel(); - if (parcel) - { - LLSD list = parcel->getMediaURLFilterList(); - - std::vector domains = panelp->mURLFilterList->getAllSelected(); - for (std::vector::iterator iter = domains.begin(); iter != domains.end(); iter++) - { - LLScrollListItem* item = *iter; - const std::string domain = item->getValue().asString(); - - for(S32 i = 0; i < list.size(); i++) - { - if (list[i].asString() == domain) - { - list.erase(i); - break; - } - } - } - - parcel->setMediaURLFilterList(list); - LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel ); - - panelp->refresh(); - } - } - -} +} \ No newline at end of file diff --git a/linden/indra/newview/llpanellandmedia.h b/linden/indra/newview/llpanellandmedia.h index d63f0f6..845b953 100644 --- a/linden/indra/newview/llpanellandmedia.h +++ b/linden/indra/newview/llpanellandmedia.h @@ -56,10 +56,8 @@ private: static void onCommitAny(LLUICtrl* ctrl, void *userdata); static void onCommitType(LLUICtrl* ctrl, void *userdata); static void onSetBtn(void* userdata); - static void onResetBtn(void* userdata); - static void onClickAddURLFilter(void *userdata); - static void onClickRemoveURLFilter(void *userdata); - + static void onClickSoundHelp(void*); + private: LLCheckBoxCtrl* mCheckSoundLocal; LLButton* mSoundHelpButton; @@ -71,11 +69,8 @@ private: LLLineEditor* mMediaDescEdit; LLComboBox* mMediaTypeCombo; LLButton* mSetURLButton; - LLButton* mResetURLButton; - LLSpinCtrl* mMediaResetCtrl; LLSpinCtrl* mMediaHeightCtrl; LLSpinCtrl* mMediaWidthCtrl; - LLTextBox* mMediaResetCtrlLabel; LLTextBox* mMediaSizeCtrlLabel; LLTextureCtrl* mMediaTextureCtrl; LLCheckBoxCtrl* mMediaAutoScaleCheck; @@ -83,17 +78,8 @@ private: LLCheckBoxCtrl* mMediaUrlCheck; LLCheckBoxCtrl* mMusicUrlCheck; LLHandle mURLEntryFloater; - LLCheckBoxCtrl* mMediaNavigateAllowCheck; - LLCheckBoxCtrl* mMediaURLFilterCheck; - LLLineEditor* mMediaURLFilterDomainEdit; - LLButton* mMediaURLFilterAddButton; - LLButton* mMediaURLFilterRemoveButton; - LLScrollListCtrl* mURLFilterList; - LLRadioGroup* mRadioNavigateControl; - - LLSafeHandle& mParcel; }; -#endif +#endif \ No newline at end of file -- cgit v1.1