Automated merge with ssh://rick@hg.lindenlab.com/viewer/viewer-2-0

meow-7.2.2
Rick Pasetto 2010-02-08 09:45:59 -08:00
commit 67afc66864
7 changed files with 299 additions and 56 deletions

View File

@ -162,7 +162,9 @@ bool LLDockControl::isDockVisible()
{
case LEFT: // to keep compiler happy
break;
case BOTTOM:
case TOP:
{
// check is dock inside parent rect
LLRect dockParentRect =
mDockWidget->getParent()->calcScreenRect();
@ -173,6 +175,9 @@ bool LLDockControl::isDockVisible()
}
break;
}
default:
break;
}
}
}
@ -254,6 +259,42 @@ void LLDockControl::moveDockable()
}
mDockTongueY = dockRect.mTop;
break;
case BOTTOM:
x = dockRect.getCenterX() - dockableRect.getWidth() / 2;
y = dockRect.mBottom;
// unique docking used with dock tongue, so add tongue height o the Y coordinate
if (use_tongue)
{
y -= mDockTongue->getHeight();
}
// check is dockable inside root view rect
if (x < rootRect.mLeft)
{
x = rootRect.mLeft;
}
if (x + dockableRect.getWidth() > rootRect.mRight)
{
x = rootRect.mRight - dockableRect.getWidth();
}
// calculate dock tongue position
dockParentRect = mDockWidget->getParent()->calcScreenRect();
if (dockRect.getCenterX() < dockParentRect.mLeft)
{
mDockTongueX = dockParentRect.mLeft - mDockTongue->getWidth() / 2;
}
else if (dockRect.getCenterX() > dockParentRect.mRight)
{
mDockTongueX = dockParentRect.mRight - mDockTongue->getWidth() / 2;;
}
else
{
mDockTongueX = dockRect.getCenterX() - mDockTongue->getWidth() / 2;
}
mDockTongueY = dockRect.mTop + mDockTongue->getHeight();
break;
}

View File

@ -47,8 +47,9 @@ class LLDockControl
public:
enum DocAt
{
TOP
,LEFT
TOP,
LEFT,
BOTTOM
};
public:

View File

@ -4578,6 +4578,39 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>MediaShowOnOthers</key>
<map>
<key>Comment</key>
<string>Whether or not to show media on other avatars</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>MediaShowOutsideParcel</key>
<map>
<key>Comment</key>
<string>Whether or not to show media from outside the current parcel</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>MediaShowWithinParcel</key>
<map>
<key>Comment</key>
<string>Whether or not to show media within the current parcel</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>MemoryLogFrequency</key>
<map>
<key>Comment</key>

View File

@ -130,7 +130,6 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
// status bar can possible overlay menus?
setMouseOpaque(FALSE);
setIsChrome(TRUE);
// size of day of the weeks and year
sDays.reserve(7);
@ -140,9 +139,39 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
mHealthTimer = new LLFrameTimer();
LLUICtrlFactory::getInstance()->buildPanel(this,"panel_status_bar.xml");
}
// status bar can never get a tab
setFocusRoot(FALSE);
LLStatusBar::~LLStatusBar()
{
delete mBalanceTimer;
mBalanceTimer = NULL;
delete mHealthTimer;
mHealthTimer = NULL;
// LLView destructor cleans up children
}
//-----------------------------------------------------------------------
// Overrides
//-----------------------------------------------------------------------
// virtual
void LLStatusBar::draw()
{
refresh();
LLPanel::draw();
}
BOOL LLStatusBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
show_navbar_context_menu(this,x,y);
return TRUE;
}
BOOL LLStatusBar::postBuild()
{
gMenuBarView->setRightMouseDownCallback(boost::bind(&show_navbar_context_menu, _1, _2, _3));
// build date necessary data (must do after panel built)
setupDate();
@ -158,7 +187,9 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
mBtnVolume = getChild<LLButton>( "volume_btn" );
mBtnVolume->setClickedCallback( onClickVolume, this );
mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this));
mBtnVolume->setIsChrome(TRUE);
LLButton* media_toggle = getChild<LLButton>("media_toggle_btn");
media_toggle->setMouseEnterCallback(boost::bind(&LLFloaterReg::showInstance, "nearby_media", LLSD(), true));
gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&LLStatusBar::onVolumeChanged, this, _2));
@ -218,39 +249,6 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
mPanelVolumePulldown->setShape(volume_pulldown_rect);
mPanelVolumePulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
mPanelVolumePulldown->setVisible(FALSE);
}
LLStatusBar::~LLStatusBar()
{
delete mBalanceTimer;
mBalanceTimer = NULL;
delete mHealthTimer;
mHealthTimer = NULL;
// LLView destructor cleans up children
}
//-----------------------------------------------------------------------
// Overrides
//-----------------------------------------------------------------------
// virtual
void LLStatusBar::draw()
{
refresh();
LLPanel::draw();
}
BOOL LLStatusBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
show_navbar_context_menu(this,x,y);
return TRUE;
}
BOOL LLStatusBar::postBuild()
{
gMenuBarView->setRightMouseDownCallback(boost::bind(&show_navbar_context_menu, _1, _2, _3));
return TRUE;
}

View File

@ -50,6 +50,9 @@
#include "llcallbacklist.h"
#include "llparcel.h"
#include "llaudioengine.h" // for gAudiop
#include "llvoavatar.h"
#include "llvoavatarself.h"
#include "llviewerregion.h"
#include "llevent.h" // LLSimpleListener
#include "llnotificationsutil.h"
@ -62,6 +65,10 @@
#include <boost/signals2.hpp>
/*static*/ const char* LLViewerMedia::AUTO_PLAY_MEDIA_SETTING = "ParcelMediaAutoPlayEnable";
/*static*/ const char* LLViewerMedia::SHOW_MEDIA_ON_OTHERS_SETTING = "MediaShowOnOthers";
/*static*/ const char* LLViewerMedia::SHOW_MEDIA_WITHIN_PARCEL_SETTING = "MediaShowWithinParcel";
/*static*/ const char* LLViewerMedia::SHOW_MEDIA_OUTSIDE_PARCEL_SETTING = "MediaShowOutsideParcel";
// Move this to its own file.
@ -365,8 +372,7 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
// The current media URL is not empty.
// If (the media was already loaded OR the media was set to autoplay) AND this update didn't come from this agent,
// do a navigate.
bool auto_play = (media_impl->mMediaAutoPlay && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING));
bool auto_play = media_impl->isAutoPlayable();
if((was_loaded || auto_play) && !update_from_self)
{
needs_navigate = url_changed;
@ -390,7 +396,7 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
media_impl->mMediaAutoPlay = media_entry->getAutoPlay();
media_impl->mMediaEntryURL = media_entry->getCurrentURL();
if(media_impl->mMediaAutoPlay && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING))
if(media_impl->isAutoPlayable())
{
needs_navigate = true;
}
@ -818,7 +824,7 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
impl_count_total++;
}
// Overrides if the window is minimized or we lost focus (taking care
// not to accidentally "raise" the priority either)
if (!gViewerWindow->getActive() /* viewer window minimized? */
@ -846,7 +852,7 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
}
}
}
pimpl->setPriority(new_priority);
if(pimpl->getUsedInUI())
@ -940,6 +946,7 @@ bool LLViewerMedia::firstRunCallback(const LLSD& notification, const LLSD& respo
{
// user has elected to automatically play media.
gSavedSettings.setBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING, TRUE);
// XXX TODO: what to do about other AUTO_PLAY settings?
gSavedSettings.setBOOL("AudioStreamingMusic", TRUE);
gSavedSettings.setBOOL("AudioStreamingMedia", TRUE);
@ -959,6 +966,7 @@ bool LLViewerMedia::firstRunCallback(const LLSD& notification, const LLSD& respo
else
{
gSavedSettings.setBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING, FALSE);
// XXX TODO: what to do about other AUTO_PLAY settings?
gSavedSettings.setBOOL("AudioStreamingMedia", FALSE);
gSavedSettings.setBOOL("AudioStreamingMusic", FALSE);
}
@ -2111,6 +2119,21 @@ void LLViewerMediaImpl::scaleMouse(S32 *mouse_x, S32 *mouse_y)
#endif
}
//////////////////////////////////////////////////////////////////////////////////////////
bool LLViewerMediaImpl::isMediaTimeBased()
{
bool result = false;
if(mMediaSource)
{
result = mMediaSource->pluginSupportsMediaTime();
}
return result;
}
//////////////////////////////////////////////////////////////////////////////////////////
bool LLViewerMediaImpl::isMediaPlaying()
{
@ -2172,7 +2195,7 @@ void LLViewerMediaImpl::setDisabled(bool disabled)
else
{
// We just (re)enabled this media. Do a navigate if auto-play is in order.
if(mMediaAutoPlay && gSavedSettings.getBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING))
if(isAutoPlayable())
{
navigateTo(mMediaEntryURL, "", true, true);
}
@ -2199,6 +2222,12 @@ bool LLViewerMediaImpl::isForcedUnloaded() const
}
}
// If this media's class is not supposed to be shown, unload
if (!shouldShowBasedOnClass())
{
return true;
}
return false;
}
@ -2684,3 +2713,110 @@ void LLViewerMediaImpl::setTextureID(LLUUID id)
}
}
//////////////////////////////////////////////////////////////////////////////////////////
//
bool LLViewerMediaImpl::isAutoPlayable() const
{
return (mMediaAutoPlay && gSavedSettings.getBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING));
}
//////////////////////////////////////////////////////////////////////////////////////////
//
bool LLViewerMediaImpl::shouldShowBasedOnClass() const
{
// If this is parcel media or in the UI, return true always
if (getUsedInUI() || isParcelMedia()) return true;
bool attached_to_another_avatar = isAttachedToAnotherAvatar();
bool inside_parcel = isInAgentParcel();
// llinfos << " hasFocus = " << hasFocus() <<
// " others = " << (attached_to_another_avatar && gSavedSettings.getBOOL(LLViewerMedia::SHOW_MEDIA_ON_OTHERS_SETTING)) <<
// " within = " << (inside_parcel && gSavedSettings.getBOOL(LLViewerMedia::SHOW_MEDIA_WITHIN_PARCEL_SETTING)) <<
// " outside = " << (!inside_parcel && gSavedSettings.getBOOL(LLViewerMedia::SHOW_MEDIA_OUTSIDE_PARCEL_SETTING)) << llendl;
// If it has focus, we should show it
if (hasFocus())
return true;
// If it is attached to an avatar and the pref is off, we shouldn't show it
if (attached_to_another_avatar)
return gSavedSettings.getBOOL(LLViewerMedia::SHOW_MEDIA_ON_OTHERS_SETTING);
if (inside_parcel)
return gSavedSettings.getBOOL(LLViewerMedia::SHOW_MEDIA_WITHIN_PARCEL_SETTING);
else
return gSavedSettings.getBOOL(LLViewerMedia::SHOW_MEDIA_OUTSIDE_PARCEL_SETTING);
}
//////////////////////////////////////////////////////////////////////////////////////////
//
bool LLViewerMediaImpl::isAttachedToAnotherAvatar() const
{
bool result = false;
std::list< LLVOVolume* >::const_iterator iter = mObjectList.begin();
std::list< LLVOVolume* >::const_iterator end = mObjectList.end();
for ( ; iter != end; iter++)
{
if (isObjectAttachedToAnotherAvatar(*iter))
{
result = true;
break;
}
}
return result;
}
//////////////////////////////////////////////////////////////////////////////////////////
//
//static
bool LLViewerMediaImpl::isObjectAttachedToAnotherAvatar(LLVOVolume *obj)
{
bool result = false;
LLXform *xform = obj;
// Walk up parent chain
while (NULL != xform)
{
LLViewerObject *object = dynamic_cast<LLViewerObject*> (xform);
if (NULL != object)
{
LLVOAvatar *avatar = object->asAvatar();
if (NULL != avatar && avatar != gAgent.getAvatarObject())
{
result = true;
break;
}
}
xform = xform->getParent();
}
return result;
}
//////////////////////////////////////////////////////////////////////////////////////////
//
bool LLViewerMediaImpl::isInAgentParcel() const
{
bool result = false;
std::list< LLVOVolume* >::const_iterator iter = mObjectList.begin();
std::list< LLVOVolume* >::const_iterator end = mObjectList.end();
for ( ; iter != end; iter++)
{
LLVOVolume *object = *iter;
if (LLViewerMediaImpl::isObjectInAgentParcel(object))
{
result = true;
break;
}
}
return result;
}
//////////////////////////////////////////////////////////////////////////////////////////
//
// static
bool LLViewerMediaImpl::isObjectInAgentParcel(LLVOVolume *obj)
{
return (LLViewerParcelMgr::getInstance()->inAgentParcel(obj->getPositionGlobal()));
}

View File

@ -48,7 +48,7 @@ class LLViewerMediaImpl;
class LLUUID;
class LLViewerMediaTexture;
class LLMediaEntry;
class LLVOVolume ;
class LLVOVolume;
class LLMimeDiscoveryResponder;
typedef LLPointer<LLViewerMediaImpl> viewer_media_t;
@ -76,7 +76,10 @@ class LLViewerMedia
public:
// String to get/set media autoplay in gSavedSettings
static const char *AUTO_PLAY_MEDIA_SETTING;
static const char* AUTO_PLAY_MEDIA_SETTING;
static const char* SHOW_MEDIA_ON_OTHERS_SETTING;
static const char* SHOW_MEDIA_WITHIN_PARCEL_SETTING;
static const char* SHOW_MEDIA_OUTSIDE_PARCEL_SETTING;
typedef std::vector<LLViewerMediaImpl*> impl_list;
@ -204,14 +207,16 @@ public:
void updateImagesMediaStreams();
LLUUID getMediaTextureID() const;
void suspendUpdates(bool suspend) { mSuspendUpdates = suspend; };
void suspendUpdates(bool suspend) { mSuspendUpdates = suspend; }
void setVisible(bool visible);
bool getVisible() const { return mVisible; };
bool getVisible() const { return mVisible; }
bool isVisible() const { return mVisible; }
bool isMediaTimeBased();
bool isMediaPlaying();
bool isMediaPaused();
bool hasMedia() const;
bool isMediaFailed() const { return mMediaSourceFailed; };
bool isMediaFailed() const { return mMediaSourceFailed; }
void setMediaFailed(bool val) { mMediaSourceFailed = val; }
void resetPreviousMediaState();
@ -227,10 +232,10 @@ public:
// returns true if this instance could be playable based on autoplay setting, current load state, etc.
bool isPlayable() const;
void setIsParcelMedia(bool is_parcel_media) { mIsParcelMedia = is_parcel_media; };
bool isParcelMedia() const { return mIsParcelMedia; };
void setIsParcelMedia(bool is_parcel_media) { mIsParcelMedia = is_parcel_media; }
bool isParcelMedia() const { return mIsParcelMedia; }
ECursorType getLastSetCursor() { return mLastSetCursor; };
ECursorType getLastSetCursor() { return mLastSetCursor; }
// utility function to create a ready-to-use media instance from a desired media type.
static LLPluginClassMedia* newSourceFromMediaType(std::string media_type, LLPluginClassMediaOwner *owner /* may be NULL */, S32 default_width, S32 default_height);
@ -331,6 +336,18 @@ public:
void cancelMimeTypeProbe();
// Is this media attached to an avatar *not* self
bool isAttachedToAnotherAvatar() const;
// Is this media in the agent's parcel?
bool isInAgentParcel() const;
private:
bool isAutoPlayable() const;
bool shouldShowBasedOnClass() const;
static bool isObjectAttachedToAnotherAvatar(LLVOVolume *obj);
static bool isObjectInAgentParcel(LLVOVolume *obj);
private:
// a single media url with some data and an impl.
LLPluginClassMedia* mMediaSource;

View File

@ -3,6 +3,7 @@
background_opaque="true"
background_visible="true"
bg_opaque_color="MouseGray"
chrome="true"
follows="top|right"
height="19"
layout="topleft"
@ -10,6 +11,7 @@
mouse_opaque="false"
name="status"
top="19"
tab_stop="false"
width="1000">
<panel.string
name="StatBarDaysOfWeek">
@ -73,7 +75,7 @@
pad_bottom="2"
tool_tip="Click to buy more L$"
top="2"
width="71" />
width="45" />
<text
type="string"
font="SansSerifSmall"
@ -86,9 +88,24 @@
left_pad="0"
name="TimeText"
tool_tip="Current time (Pacific)"
width="89">
width="80">
24:00 AM PST
</text>
<button
follows="right|top"
height="15"
image_selected="button_anim_play.tga"
image_unselected="button_anim_pause.tga"
image_pressed="button_anim_pause_selected.tga"
image_pressed_selected="button_anim_play_selected.tga"
is_toggle="true"
left_pad="15"
top="2"
name="media_toggle_btn"
tool_tip="Click to toggle media"
width="16" >
</button>
<button
follows="right|top"
height="15"
@ -96,7 +113,7 @@
image_pressed="Audio_Press"
image_unselected="Audio_Off"
is_toggle="true"
left_pad="18"
left_pad="5"
top="2"
name="volume_btn"
tool_tip="Global Volume Control"