Automated merge with ssh://rick@hg.lindenlab.com/viewer/viewer-2-0
commit
4dfed6e353
|
|
@ -202,12 +202,12 @@ void LLAudioEngine::updateInternetStream()
|
|||
}
|
||||
|
||||
// virtual
|
||||
int LLAudioEngine::isInternetStreamPlaying()
|
||||
LLAudioEngine::LLAudioPlayState LLAudioEngine::isInternetStreamPlaying()
|
||||
{
|
||||
if (mStreamingAudioImpl)
|
||||
return mStreamingAudioImpl->isPlaying();
|
||||
return (LLAudioEngine::LLAudioPlayState) mStreamingAudioImpl->isPlaying();
|
||||
|
||||
return 0; // Stopped
|
||||
return LLAudioEngine::AUDIO_STOPPED; // Stopped
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -91,6 +91,15 @@ public:
|
|||
AUDIO_TYPE_COUNT = 4 // last
|
||||
};
|
||||
|
||||
enum LLAudioPlayState
|
||||
{
|
||||
// isInternetStreamPlaying() returns an *int*, with
|
||||
// 0 = stopped, 1 = playing, 2 = paused.
|
||||
AUDIO_STOPPED = 0,
|
||||
AUDIO_PLAYING = 1,
|
||||
AUDIO_PAUSED = 2
|
||||
};
|
||||
|
||||
LLAudioEngine();
|
||||
virtual ~LLAudioEngine();
|
||||
|
||||
|
|
@ -156,7 +165,7 @@ public:
|
|||
void stopInternetStream();
|
||||
void pauseInternetStream(int pause);
|
||||
void updateInternetStream(); // expected to be called often
|
||||
int isInternetStreamPlaying();
|
||||
LLAudioPlayState isInternetStreamPlaying();
|
||||
// use a value from 0.0 to 1.0, inclusive
|
||||
void setInternetStreamGain(F32 vol);
|
||||
std::string getInternetStreamURL();
|
||||
|
|
|
|||
|
|
@ -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.mBottom - mDockTongue->getHeight();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -47,8 +47,9 @@ class LLDockControl
|
|||
public:
|
||||
enum DocAt
|
||||
{
|
||||
TOP
|
||||
,LEFT
|
||||
TOP,
|
||||
LEFT,
|
||||
BOTTOM
|
||||
};
|
||||
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -1388,6 +1388,8 @@ void LLScrollListCtrl::drawItems()
|
|||
|
||||
LLGLSUIDefault gls_ui;
|
||||
|
||||
F32 alpha = getDrawContext().mAlpha;
|
||||
|
||||
{
|
||||
LLLocalClipRect clip(mItemListRect);
|
||||
|
||||
|
|
@ -1463,7 +1465,7 @@ void LLScrollListCtrl::drawItems()
|
|||
bg_color = mBgReadOnlyColor.get();
|
||||
}
|
||||
|
||||
item->draw(item_rect, fg_color, bg_color, highlight_color, mColumnPadding);
|
||||
item->draw(item_rect, fg_color % alpha, bg_color% alpha, highlight_color % alpha, mColumnPadding);
|
||||
|
||||
cur_y -= mLineHeight;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -129,12 +129,6 @@ BOOL LLToolTipView::handleScrollWheel( S32 x, S32 y, S32 clicks )
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
void LLToolTipView::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLToolTipMgr::instance().blockToolTips();
|
||||
}
|
||||
|
||||
|
||||
void LLToolTipView::drawStickyRect()
|
||||
{
|
||||
gl_rect_2d(LLToolTipMgr::instance().getMouseNearRect(), LLColor4::white, false);
|
||||
|
|
|
|||
|
|
@ -56,8 +56,6 @@ public:
|
|||
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleScrollWheel( S32 x, S32 y, S32 clicks );
|
||||
|
||||
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
|
||||
void drawStickyRect();
|
||||
|
||||
/*virtual*/ void draw();
|
||||
|
|
|
|||
|
|
@ -183,7 +183,6 @@ set(viewer_SOURCE_FILES
|
|||
llfloatermediasettings.cpp
|
||||
llfloatermemleak.cpp
|
||||
llfloaternamedesc.cpp
|
||||
llfloaternearbymedia.cpp
|
||||
llfloaternotificationsconsole.cpp
|
||||
llfloateropenobject.cpp
|
||||
llfloaterparcel.cpp
|
||||
|
|
@ -323,6 +322,7 @@ set(viewer_SOURCE_FILES
|
|||
llpanelmediasettingspermissions.cpp
|
||||
llpanelmediasettingssecurity.cpp
|
||||
llpanelme.cpp
|
||||
llpanelnearbymedia.cpp
|
||||
llpanelobject.cpp
|
||||
llpanelobjectinventory.cpp
|
||||
llpaneloutfitsinventory.cpp
|
||||
|
|
@ -683,7 +683,6 @@ set(viewer_HEADER_FILES
|
|||
llfloatermediasettings.h
|
||||
llfloatermemleak.h
|
||||
llfloaternamedesc.h
|
||||
llfloaternearbymedia.h
|
||||
llfloaternotificationsconsole.h
|
||||
llfloateropenobject.h
|
||||
llfloaterparcel.h
|
||||
|
|
@ -818,6 +817,7 @@ set(viewer_HEADER_FILES
|
|||
llpanelmediasettingspermissions.h
|
||||
llpanelmediasettingssecurity.h
|
||||
llpanelme.h
|
||||
llpanelnearbymedia.h
|
||||
llpanelobject.h
|
||||
llpanelobjectinventory.h
|
||||
llpaneloutfitsinventory.h
|
||||
|
|
|
|||
|
|
@ -4578,6 +4578,50 @@
|
|||
<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>MediaTentativeAutoPlay</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>This is a tentative flag that may be temporarily set off by the user, until she teleports</string>
|
||||
<key>Persist</key>
|
||||
<integer>0</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>MemoryLogFrequency</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,185 @@
|
|||
/**
|
||||
* @file llpanelnearbymedia.h
|
||||
* @brief Management interface for muting and controlling nearby media
|
||||
*
|
||||
* $LicenseInfo:firstyear=2005&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2005-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLPANELNEARBYMEDIA_H
|
||||
#define LL_LLPANELNEARBYMEDIA_H
|
||||
|
||||
#include "llpanel.h"
|
||||
|
||||
class LLPanelNearbyMedia;
|
||||
class LLButton;
|
||||
class LLScrollListCtrl;
|
||||
class LLSlider;
|
||||
class LLSliderCtrl;
|
||||
class LLCheckBoxCtrl;
|
||||
class LLTextBox;
|
||||
class LLComboBox;
|
||||
class LLViewerMediaImpl;
|
||||
|
||||
class LLPanelNearByMedia : public LLPanel
|
||||
{
|
||||
public:
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void draw();
|
||||
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void handleVisibilityChange ( BOOL new_visibility );
|
||||
/*virtual*/ void onTopLost ();
|
||||
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);
|
||||
|
||||
// this is part of the nearby media *dialog* so we can track whether
|
||||
// the user *implicitly* wants audio on or off via their *explicit*
|
||||
// interaction with our buttons.
|
||||
bool getParcelAudioAutoStart();
|
||||
|
||||
LLPanelNearByMedia();
|
||||
virtual ~LLPanelNearByMedia();
|
||||
|
||||
private:
|
||||
|
||||
enum ColumnIndex {
|
||||
CHECKBOX_COLUMN = 0,
|
||||
PROXIMITY_COLUMN = 1,
|
||||
VISIBILITY_COLUMN = 2,
|
||||
CLASS_COLUMN = 3,
|
||||
NAME_COLUMN = 4,
|
||||
DEBUG_COLUMN = 5
|
||||
};
|
||||
|
||||
// Media "class" enumeration
|
||||
enum MediaClass {
|
||||
MEDIA_CLASS_ALL = 0,
|
||||
MEDIA_CLASS_FOCUSED = 1,
|
||||
MEDIA_CLASS_WITHIN_PARCEL = 2,
|
||||
MEDIA_CLASS_OUTSIDE_PARCEL = 3,
|
||||
MEDIA_CLASS_ON_OTHERS = 4
|
||||
};
|
||||
|
||||
// Add/remove an LLViewerMediaImpl to/from the list
|
||||
LLScrollListItem* addListItem(const LLUUID &id);
|
||||
void updateListItem(LLScrollListItem* item, LLViewerMediaImpl* impl);
|
||||
void updateListItem(LLScrollListItem* item,
|
||||
const std::string &item_name,
|
||||
const std::string &item_tooltip,
|
||||
S32 proximity,
|
||||
bool is_disabled,
|
||||
bool has_media,
|
||||
bool is_time_based_and_playing,
|
||||
MediaClass media_class,
|
||||
const std::string &debug_str);
|
||||
void removeListItem(const LLUUID &id);
|
||||
|
||||
// Refresh the list in the UI
|
||||
void refreshList();
|
||||
|
||||
void refreshParcelItems();
|
||||
|
||||
// UI Callbacks
|
||||
void onClickEnableAll();
|
||||
void onClickDisableAll();
|
||||
void onClickEnableParcelMedia();
|
||||
void onClickDisableParcelMedia();
|
||||
void onClickMuteParcelMedia();
|
||||
void onParcelMediaVolumeSlider();
|
||||
void onClickParcelMediaPlay();
|
||||
void onClickParcelMediaStop();
|
||||
void onClickParcelMediaPause();
|
||||
void onClickParcelAudioPlay();
|
||||
void onClickParcelAudioStop();
|
||||
void onClickParcelAudioStart();
|
||||
void onClickParcelAudioPause();
|
||||
void onCheckAutoPlay();
|
||||
void onAdvancedButtonClick();
|
||||
void onMoreLess();
|
||||
|
||||
void onCheckItem(LLUICtrl* ctrl, const LLUUID &row_id);
|
||||
|
||||
static void onZoomMedia(void* user_data);
|
||||
|
||||
private:
|
||||
bool setDisabled(const LLUUID &id, bool disabled);
|
||||
|
||||
static void getNameAndUrlHelper(LLViewerMediaImpl* impl, std::string& name, std::string & url, const std::string &defaultName);
|
||||
|
||||
void updateColumns();
|
||||
|
||||
bool shouldShow(LLViewerMediaImpl* impl);
|
||||
|
||||
void showBasicControls(bool playing, bool include_zoom, bool is_zoomed);
|
||||
void showTimeBasedControls(bool playing, bool include_zoom, bool is_zoomed, bool muted, F32 volume);
|
||||
void showDisabledControls();
|
||||
void updateControls();
|
||||
|
||||
void onClickSelectedMediaStop();
|
||||
void onClickSelectedMediaPlay();
|
||||
void onClickSelectedMediaPause();
|
||||
void onClickSelectedMediaMute();
|
||||
void onCommitSelectedMediaVolume();
|
||||
void onClickSelectedMediaZoom();
|
||||
void onClickSelectedMediaUnzoom();
|
||||
|
||||
LLUICtrl* mNearbyMediaPanel;
|
||||
LLTextBox* mItemCountText;
|
||||
LLScrollListCtrl* mMediaList;
|
||||
LLUICtrl* mEnableAllCtrl;
|
||||
LLUICtrl* mDisableAllCtrl;
|
||||
LLComboBox* mShowCtrl;
|
||||
|
||||
// Dynamic (selection-dependent) controls
|
||||
LLUICtrl* mStopCtrl;
|
||||
LLUICtrl* mPlayCtrl;
|
||||
LLUICtrl* mPauseCtrl;
|
||||
LLUICtrl* mMuteCtrl;
|
||||
LLUICtrl* mVolumeSliderCtrl;
|
||||
LLUICtrl* mZoomCtrl;
|
||||
LLUICtrl* mUnzoomCtrl;
|
||||
LLSlider* mVolumeSlider;
|
||||
LLButton* mMuteBtn;
|
||||
|
||||
bool mAllMediaDisabled;
|
||||
bool mDebugInfoVisible;
|
||||
bool mParcelAudioAutoStart;
|
||||
std::string mEmptyNameString;
|
||||
std::string mPlayingString;
|
||||
std::string mParcelMediaName;
|
||||
std::string mParcelAudioName;
|
||||
|
||||
S32 mMoreHeight;
|
||||
S32 mLessHeight;
|
||||
LLFrameTimer mHoverTimer;
|
||||
LLScrollListItem* mParcelMediaItem;
|
||||
LLScrollListItem* mParcelAudioItem;
|
||||
};
|
||||
|
||||
|
||||
#endif // LL_LLPANELNEARBYMEDIA_H
|
||||
|
|
@ -724,10 +724,10 @@ void LLPanelPrimMediaControls::draw()
|
|||
mMediaControlsStack->updateLayout();
|
||||
|
||||
// adjust for layout stack spacing
|
||||
S32 space = mMediaControlsStack->getPanelSpacing() + 1;
|
||||
S32 space = mMediaControlsStack->getPanelSpacing() + 2;
|
||||
LLRect controls_bg_area = mMediaControlsStack->getRect();
|
||||
|
||||
controls_bg_area.mTop += space;
|
||||
controls_bg_area.mTop += space + 2;
|
||||
|
||||
// adjust to ignore space from volume slider
|
||||
controls_bg_area.mBottom += mVolumeSliderCtrl->getRect().getHeight();
|
||||
|
|
@ -736,7 +736,7 @@ void LLPanelPrimMediaControls::draw()
|
|||
controls_bg_area.mLeft += mLeftBookend->getRect().getWidth() - space;
|
||||
|
||||
// ignore space from right bookend padding
|
||||
controls_bg_area.mRight -= mRightBookend->getRect().getWidth() - space;
|
||||
controls_bg_area.mRight -= mRightBookend->getRect().getWidth() - space - 2;
|
||||
|
||||
// draw control background UI image
|
||||
mBackgroundImage->draw( controls_bg_area, UI_VERTEX_COLOR % alpha);
|
||||
|
|
|
|||
|
|
@ -58,6 +58,16 @@ public:
|
|||
|
||||
void updateShape();
|
||||
bool isMouseOver();
|
||||
|
||||
enum EZoomLevel
|
||||
{
|
||||
ZOOM_NONE = 0,
|
||||
ZOOM_FAR,
|
||||
ZOOM_MEDIUM,
|
||||
ZOOM_NEAR
|
||||
};
|
||||
|
||||
EZoomLevel getZoomLevel() const { return mCurrentZoom; }
|
||||
void nextZoomLevel();
|
||||
void resetZoomLevel(bool reset_camera = true);
|
||||
void close();
|
||||
|
|
@ -66,13 +76,6 @@ public:
|
|||
void setMediaFace(LLPointer<LLViewerObject> objectp, S32 face, viewer_media_t media_impl, LLVector3 pick_normal = LLVector3::zero);
|
||||
|
||||
|
||||
enum EZoomLevel
|
||||
{
|
||||
ZOOM_NONE = 0,
|
||||
ZOOM_FAR,
|
||||
ZOOM_MEDIUM,
|
||||
ZOOM_NEAR
|
||||
};
|
||||
static const EZoomLevel kZoomLevels[];
|
||||
static const int kNumZoomLevels;
|
||||
|
||||
|
|
|
|||
|
|
@ -96,7 +96,10 @@ void LLPanelVolumePulldown::handleVisibilityChange ( BOOL new_visibility )
|
|||
else
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
gFocusMgr.setTopCtrl(NULL);
|
||||
if (gFocusMgr.getTopCtrl() == this)
|
||||
{
|
||||
gFocusMgr.setTopCtrl(NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
|
||||
#include "llview.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "lltooltip.h"
|
||||
|
||||
class LLRootViewRegistry : public LLChildRegistry<LLRootViewRegistry>
|
||||
{};
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@
|
|||
#include "llviewercontrol.h"
|
||||
#include "llfloaterbuycurrency.h"
|
||||
#include "llfloaterlagmeter.h"
|
||||
#include "llpanelnearbymedia.h"
|
||||
#include "llpanelvolumepulldown.h"
|
||||
#include "llfloaterregioninfo.h"
|
||||
#include "llfloaterscriptdebug.h"
|
||||
|
|
@ -49,6 +50,7 @@
|
|||
#include "llkeyboard.h"
|
||||
#include "lllineeditor.h"
|
||||
#include "llmenugl.h"
|
||||
#include "llrootview.h"
|
||||
#include "llsd.h"
|
||||
#include "lltextbox.h"
|
||||
#include "llui.h"
|
||||
|
|
@ -61,6 +63,7 @@
|
|||
#include "llresmgr.h"
|
||||
#include "llworld.h"
|
||||
#include "llstatgraph.h"
|
||||
#include "llviewermedia.h"
|
||||
#include "llviewermenu.h" // for gMenuBarView
|
||||
#include "llviewerparcelmgr.h"
|
||||
#include "llviewerthrottle.h"
|
||||
|
|
@ -130,7 +133,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 +142,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 +190,10 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
|
|||
mBtnVolume = getChild<LLButton>( "volume_btn" );
|
||||
mBtnVolume->setClickedCallback( onClickVolume, this );
|
||||
mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this));
|
||||
mBtnVolume->setIsChrome(TRUE);
|
||||
|
||||
mMediaToggle = getChild<LLButton>("media_toggle_btn");
|
||||
mMediaToggle->setClickedCallback( &LLStatusBar::onClickMediaToggle, this );
|
||||
mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this));
|
||||
|
||||
gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&LLStatusBar::onVolumeChanged, this, _2));
|
||||
|
||||
|
|
@ -207,6 +242,13 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
|
|||
mPanelVolumePulldown = new LLPanelVolumePulldown();
|
||||
addChild(mPanelVolumePulldown);
|
||||
|
||||
mPanelNearByMedia = new LLPanelNearByMedia();
|
||||
LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
|
||||
popup_holder->addChild(mPanelNearByMedia);
|
||||
gViewerWindow->getRootView()->addMouseDownCallback(boost::bind(&LLStatusBar::onClickScreen, this, _1, _2));
|
||||
mPanelNearByMedia->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
|
||||
mPanelNearByMedia->setVisible(FALSE);
|
||||
|
||||
LLRect volume_pulldown_rect = mPanelVolumePulldown->getRect();
|
||||
LLButton* volbtn = getChild<LLButton>( "volume_btn" );
|
||||
volume_pulldown_rect.setLeftTopAndSize(volbtn->getRect().mLeft -
|
||||
|
|
@ -218,39 +260,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;
|
||||
}
|
||||
|
|
@ -356,6 +365,13 @@ void LLStatusBar::refresh()
|
|||
// update the master volume button state
|
||||
bool mute_audio = LLAppViewer::instance()->getMasterSystemAudioMute();
|
||||
mBtnVolume->setToggleState(mute_audio);
|
||||
|
||||
// Don't show media toggle if there's no media, parcel media, and no parcel audio
|
||||
mMediaToggle->setVisible(LLViewerMedia::hasInWorldMedia() || LLViewerMedia::hasParcelMedia() || LLViewerMedia::hasParcelAudio());
|
||||
// Note the "sense" of the toggle is opposite whether media is playing or not
|
||||
mMediaToggle->setValue(! (LLViewerMedia::isAnyMediaShowing() ||
|
||||
LLViewerMedia::isParcelMediaPlaying() ||
|
||||
LLViewerMedia::isParcelAudioPlaying()));
|
||||
}
|
||||
|
||||
void LLStatusBar::setVisibleForMouselook(bool visible)
|
||||
|
|
@ -385,8 +401,8 @@ void LLStatusBar::setBalance(S32 balance)
|
|||
LLButton* btn_buy_currency = getChild<LLButton>("buycurrency");
|
||||
LLStringUtil::format_map_t string_args;
|
||||
string_args["[AMT]"] = llformat("%s", money_str.c_str());
|
||||
std::string labe_str = getString("buycurrencylabel", string_args);
|
||||
btn_buy_currency->setLabel(labe_str);
|
||||
std::string label_str = getString("buycurrencylabel", string_args);
|
||||
btn_buy_currency->setLabel(label_str);
|
||||
|
||||
// Resize the balance button so that the label fits it, and the button expands to the left.
|
||||
// *TODO: LLButton should have an option where to expand.
|
||||
|
|
@ -513,13 +529,32 @@ static void onClickScriptDebug(void*)
|
|||
LLFloaterScriptDebug::show(LLUUID::null);
|
||||
}
|
||||
|
||||
//static
|
||||
void LLStatusBar::onMouseEnterVolume(LLUICtrl* ctrl)
|
||||
void LLStatusBar::onMouseEnterVolume()
|
||||
{
|
||||
// show the master volume pull-down
|
||||
gStatusBar->mPanelVolumePulldown->setVisible(TRUE);
|
||||
mPanelVolumePulldown->setVisible(TRUE);
|
||||
}
|
||||
|
||||
void LLStatusBar::onMouseEnterNearbyMedia()
|
||||
{
|
||||
LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
|
||||
LLRect nearby_media_rect = mPanelNearByMedia->getRect();
|
||||
LLButton* nearby_media_btn = getChild<LLButton>( "media_toggle_btn" );
|
||||
LLRect nearby_media_btn_rect = nearby_media_btn->calcScreenRect();
|
||||
nearby_media_rect.setLeftTopAndSize(nearby_media_btn_rect.mLeft -
|
||||
(nearby_media_rect.getWidth() - nearby_media_btn_rect.getWidth())/2,
|
||||
nearby_media_btn_rect.mBottom,
|
||||
nearby_media_rect.getWidth(),
|
||||
nearby_media_rect.getHeight());
|
||||
// force onscreen
|
||||
nearby_media_rect.translate(popup_holder->getRect().getWidth() - nearby_media_rect.mRight, 0);
|
||||
|
||||
// show the master volume pull-down
|
||||
mPanelNearByMedia->setShape(nearby_media_rect);
|
||||
mPanelNearByMedia->setVisible(TRUE);
|
||||
}
|
||||
|
||||
|
||||
static void onClickVolume(void* data)
|
||||
{
|
||||
// toggle the master mute setting
|
||||
|
|
@ -527,6 +562,15 @@ static void onClickVolume(void* data)
|
|||
LLAppViewer::instance()->setMasterSystemAudioMute(!mute_audio);
|
||||
}
|
||||
|
||||
//static
|
||||
void LLStatusBar::onClickMediaToggle(void* data)
|
||||
{
|
||||
LLStatusBar *status_bar = (LLStatusBar*)data;
|
||||
// "Selected" means it was showing the "play" icon (so media was playing), and now it shows "pause", so turn off media
|
||||
bool enable = ! status_bar->mMediaToggle->getValue();
|
||||
LLViewerMedia::setAllMediaEnabled(enable);
|
||||
}
|
||||
|
||||
// sets the static variables necessary for the date
|
||||
void LLStatusBar::setupDate()
|
||||
{
|
||||
|
|
@ -596,6 +640,18 @@ void LLStatusBar::onClickStatGraph(void* data)
|
|||
LLFloaterReg::showInstance("lagmeter");
|
||||
}
|
||||
|
||||
void LLStatusBar::onClickScreen(S32 x, S32 y)
|
||||
{
|
||||
if (mPanelNearByMedia->getVisible())
|
||||
{
|
||||
LLRect screen_rect = mPanelNearByMedia->calcScreenRect();
|
||||
if (!screen_rect.pointInRect(x, y))
|
||||
{
|
||||
mPanelNearByMedia->setVisible(FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BOOL can_afford_transaction(S32 cost)
|
||||
{
|
||||
return((cost <= 0)||((gStatusBar) && (gStatusBar->getBalance() >=cost)));
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ class LLUUID;
|
|||
class LLFrameTimer;
|
||||
class LLStatGraph;
|
||||
class LLPanelVolumePulldown;
|
||||
class LLPanelNearByMedia;
|
||||
|
||||
class LLStatusBar
|
||||
: public LLPanel
|
||||
|
|
@ -87,6 +88,8 @@ public:
|
|||
S32 getSquareMetersCommitted() const;
|
||||
S32 getSquareMetersLeft() const;
|
||||
|
||||
LLPanelNearByMedia* getNearbyMediaPanel() { return mPanelNearByMedia; }
|
||||
|
||||
private:
|
||||
// simple method to setup the part that holds the date
|
||||
void setupDate();
|
||||
|
|
@ -94,9 +97,13 @@ private:
|
|||
void onClickBuyCurrency();
|
||||
void onVolumeChanged(const LLSD& newvalue);
|
||||
|
||||
static void onMouseEnterVolume(LLUICtrl* ctrl);
|
||||
void onMouseEnterVolume();
|
||||
void onMouseEnterNearbyMedia();
|
||||
void onClickScreen(S32 x, S32 y);
|
||||
static void onClickStatGraph(void* data);
|
||||
|
||||
static void onClickMediaToggle(void* data);
|
||||
|
||||
private:
|
||||
LLTextBox *mTextHealth;
|
||||
LLTextBox *mTextTime;
|
||||
|
|
@ -105,6 +112,7 @@ private:
|
|||
LLStatGraph *mSGPacketLoss;
|
||||
|
||||
LLButton *mBtnVolume;
|
||||
LLButton *mMediaToggle;
|
||||
|
||||
S32 mBalance;
|
||||
S32 mHealth;
|
||||
|
|
@ -113,6 +121,7 @@ private:
|
|||
LLFrameTimer* mBalanceTimer;
|
||||
LLFrameTimer* mHealthTimer;
|
||||
LLPanelVolumePulldown* mPanelVolumePulldown;
|
||||
LLPanelNearByMedia* mPanelNearByMedia;
|
||||
static std::vector<std::string> sDays;
|
||||
static std::vector<std::string> sMonths;
|
||||
static const U32 MAX_DATE_STRING_LENGTH;
|
||||
|
|
|
|||
|
|
@ -78,7 +78,6 @@
|
|||
#include "llfloatermap.h"
|
||||
#include "llfloatermemleak.h"
|
||||
#include "llfloaternamedesc.h"
|
||||
#include "llfloaternearbymedia.h"
|
||||
#include "llfloaternotificationsconsole.h"
|
||||
#include "llfloateropenobject.h"
|
||||
#include "llfloaterpay.h"
|
||||
|
|
@ -197,7 +196,6 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("mute_object_by_name", "floater_mute_object.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGetBlockedObjectName>);
|
||||
LLFloaterReg::add("mini_map", "floater_map.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMap>);
|
||||
|
||||
LLFloaterReg::add("nearby_media", "floater_nearby_media.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNearbyMedia>);
|
||||
LLFloaterReg::add("notifications_console", "floater_notifications_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotificationConsole>);
|
||||
LLFloaterReg::add("notification_well_window", "floater_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLNotificationWellWindow>);
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -63,6 +66,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.
|
||||
|
||||
|
|
@ -254,6 +261,8 @@ static LLTimer sMediaCreateTimer;
|
|||
static const F32 LLVIEWERMEDIA_CREATE_DELAY = 1.0f;
|
||||
static F32 sGlobalVolume = 1.0f;
|
||||
static F64 sLowestLoadableImplInterest = 0.0f;
|
||||
static bool sAnyMediaShowing = false;
|
||||
static boost::signals2::connection sTeleportFinishConnection;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
static void add_media_impl(LLViewerMediaImpl* media)
|
||||
|
|
@ -366,8 +375,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;
|
||||
|
|
@ -391,7 +399,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;
|
||||
}
|
||||
|
|
@ -688,6 +696,7 @@ static bool proximity_comparitor(const LLViewerMediaImpl* i1, const LLViewerMedi
|
|||
// static
|
||||
void LLViewerMedia::updateMedia(void *dummy_arg)
|
||||
{
|
||||
sAnyMediaShowing = false;
|
||||
impl_list::iterator iter = sViewerMediaImplList.begin();
|
||||
impl_list::iterator end = sViewerMediaImplList.end();
|
||||
|
||||
|
|
@ -818,7 +827,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? */
|
||||
|
|
@ -840,7 +849,7 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
|
|||
new_priority = LLPluginClassMedia::PRIORITY_UNLOADED;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pimpl->setPriority(new_priority);
|
||||
|
||||
if(pimpl->getUsedInUI())
|
||||
|
|
@ -854,6 +863,12 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
|
|||
}
|
||||
|
||||
total_cpu += pimpl->getCPUUsage();
|
||||
|
||||
if (!pimpl->getUsedInUI() && pimpl->hasMedia())
|
||||
{
|
||||
sAnyMediaShowing = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Re-calculate this every time.
|
||||
|
|
@ -893,11 +908,115 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
|
|||
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
bool LLViewerMedia::isAnyMediaShowing()
|
||||
{
|
||||
return sAnyMediaShowing;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
void LLViewerMedia::setAllMediaEnabled(bool val)
|
||||
{
|
||||
// Set "tentative" autoplay first. We need to do this here or else
|
||||
// re-enabling won't start up the media below.
|
||||
gSavedSettings.setBOOL("MediaTentativeAutoPlay", val);
|
||||
|
||||
// Then
|
||||
impl_list::iterator iter = sViewerMediaImplList.begin();
|
||||
impl_list::iterator end = sViewerMediaImplList.end();
|
||||
|
||||
for(; iter != end; iter++)
|
||||
{
|
||||
LLViewerMediaImpl* pimpl = *iter;
|
||||
if (!pimpl->getUsedInUI())
|
||||
{
|
||||
pimpl->setDisabled(!val);
|
||||
}
|
||||
}
|
||||
|
||||
// Also do Parcel Media and Parcel Audio
|
||||
if (val)
|
||||
{
|
||||
if (!LLViewerMedia::isParcelMediaPlaying() && LLViewerMedia::hasParcelMedia())
|
||||
{
|
||||
LLViewerParcelMedia::play(LLViewerParcelMgr::getInstance()->getAgentParcel());
|
||||
}
|
||||
|
||||
if (!LLViewerMedia::isParcelAudioPlaying() && gAudiop && LLViewerMedia::hasParcelAudio())
|
||||
{
|
||||
gAudiop->startInternetStream(LLViewerMedia::getParcelAudioURL());
|
||||
}
|
||||
}
|
||||
else {
|
||||
// This actually unloads the impl, as opposed to "stop"ping the media
|
||||
LLViewerParcelMedia::stop();
|
||||
if (gAudiop) gAudiop->stopInternetStream();
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
bool LLViewerMedia::isParcelMediaPlaying()
|
||||
{
|
||||
return (LLViewerMedia::hasParcelMedia() && LLViewerParcelMedia::getParcelMedia() && LLViewerParcelMedia::getParcelMedia()->hasMedia());
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
bool LLViewerMedia::isParcelAudioPlaying()
|
||||
{
|
||||
return (LLViewerMedia::hasParcelAudio() && gAudiop && LLAudioEngine::AUDIO_PLAYING == gAudiop->isInternetStreamPlaying());
|
||||
}
|
||||
|
||||
bool LLViewerMedia::hasInWorldMedia()
|
||||
{
|
||||
if (! gSavedSettings.getBOOL("AudioStreamingMedia")) return false;
|
||||
if (sInWorldMediaDisabled) return false;
|
||||
impl_list::iterator iter = sViewerMediaImplList.begin();
|
||||
impl_list::iterator end = sViewerMediaImplList.end();
|
||||
// This should be quick, because there should be very few non-in-world-media impls
|
||||
for (; iter != end; iter++)
|
||||
{
|
||||
LLViewerMediaImpl* pimpl = *iter;
|
||||
if (!pimpl->getUsedInUI() && !pimpl->isParcelMedia())
|
||||
{
|
||||
// Found an in-world media impl
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
bool LLViewerMedia::hasParcelMedia()
|
||||
{
|
||||
return !LLViewerParcelMedia::getURL().empty();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
bool LLViewerMedia::hasParcelAudio()
|
||||
{
|
||||
return !LLViewerMedia::getParcelAudioURL().empty();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
std::string LLViewerMedia::getParcelAudioURL()
|
||||
{
|
||||
return LLViewerParcelMgr::getInstance()->getAgentParcel()->getMusicURL();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
void LLViewerMedia::initClass()
|
||||
{
|
||||
gIdleCallbacks.addFunction(LLViewerMedia::updateMedia, NULL);
|
||||
gIdleCallbacks.addFunction(LLViewerMedia::updateMedia, NULL);
|
||||
sTeleportFinishConnection = LLViewerParcelMgr::getInstance()->
|
||||
setTeleportFinishedCallback(boost::bind(&LLViewerMedia::onTeleportFinished));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -905,6 +1024,15 @@ void LLViewerMedia::initClass()
|
|||
void LLViewerMedia::cleanupClass()
|
||||
{
|
||||
gIdleCallbacks.deleteFunction(LLViewerMedia::updateMedia, NULL);
|
||||
sTeleportFinishConnection.disconnect();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// static
|
||||
void LLViewerMedia::onTeleportFinished()
|
||||
{
|
||||
// On teleport, clear this setting (i.e. set it to true)
|
||||
gSavedSettings.setBOOL("MediaTentativeAutoPlay", true);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -2057,6 +2185,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()
|
||||
{
|
||||
|
|
@ -2103,7 +2246,7 @@ void LLViewerMediaImpl::resetPreviousMediaState()
|
|||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
void LLViewerMediaImpl::setDisabled(bool disabled)
|
||||
void LLViewerMediaImpl::setDisabled(bool disabled, bool forcePlayOnEnable)
|
||||
{
|
||||
if(mIsDisabled != disabled)
|
||||
{
|
||||
|
|
@ -2118,7 +2261,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() || forcePlayOnEnable)
|
||||
{
|
||||
navigateTo(mMediaEntryURL, "", true, true);
|
||||
}
|
||||
|
|
@ -2145,6 +2288,12 @@ bool LLViewerMediaImpl::isForcedUnloaded() const
|
|||
}
|
||||
}
|
||||
|
||||
// If this media's class is not supposed to be shown, unload
|
||||
if (!shouldShowBasedOnClass())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -2639,3 +2788,112 @@ void LLViewerMediaImpl::setTextureID(LLUUID id)
|
|||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
bool LLViewerMediaImpl::isAutoPlayable() const
|
||||
{
|
||||
return (mMediaAutoPlay &&
|
||||
gSavedSettings.getBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING) &&
|
||||
gSavedSettings.getBOOL("MediaTentativeAutoPlay"));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
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()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ class LLViewerMediaImpl;
|
|||
class LLUUID;
|
||||
class LLViewerMediaTexture;
|
||||
class LLMediaEntry;
|
||||
class LLVOVolume ;
|
||||
class LLVOVolume;
|
||||
class LLMimeDiscoveryResponder;
|
||||
|
||||
typedef LLPointer<LLViewerMediaImpl> viewer_media_t;
|
||||
|
|
@ -73,50 +73,68 @@ class LLViewerMediaImpl;
|
|||
class LLViewerMedia
|
||||
{
|
||||
LOG_CLASS(LLViewerMedia);
|
||||
public:
|
||||
|
||||
// String to get/set media autoplay in gSavedSettings
|
||||
static const char *AUTO_PLAY_MEDIA_SETTING;
|
||||
public:
|
||||
|
||||
typedef std::vector<LLViewerMediaImpl*> impl_list;
|
||||
|
||||
typedef std::map<LLUUID, LLViewerMediaImpl*> impl_id_map;
|
||||
|
||||
// Special case early init for just web browser component
|
||||
// so we can show login screen. See .cpp file for details. JC
|
||||
|
||||
static viewer_media_t newMediaImpl(const LLUUID& texture_id,
|
||||
S32 media_width = 0,
|
||||
S32 media_height = 0,
|
||||
U8 media_auto_scale = false,
|
||||
U8 media_loop = false);
|
||||
|
||||
static viewer_media_t updateMediaImpl(LLMediaEntry* media_entry, const std::string& previous_url, bool update_from_self);
|
||||
static LLViewerMediaImpl* getMediaImplFromTextureID(const LLUUID& texture_id);
|
||||
static std::string getCurrentUserAgent();
|
||||
static void updateBrowserUserAgent();
|
||||
static bool handleSkinCurrentChanged(const LLSD& /*newvalue*/);
|
||||
static bool textureHasMedia(const LLUUID& texture_id);
|
||||
static void setVolume(F32 volume);
|
||||
|
||||
static void updateMedia(void* dummy_arg = NULL);
|
||||
|
||||
static void initClass();
|
||||
static void cleanupClass();
|
||||
|
||||
static F32 getVolume();
|
||||
static void muteListChanged();
|
||||
static void setInWorldMediaDisabled(bool disabled);
|
||||
static bool getInWorldMediaDisabled();
|
||||
|
||||
static bool isInterestingEnough(const LLVOVolume* object, const F64 &object_interest);
|
||||
// String to get/set media autoplay in gSavedSettings
|
||||
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;
|
||||
|
||||
// Returns the priority-sorted list of all media impls.
|
||||
static impl_list &getPriorityList();
|
||||
|
||||
// This is the comparitor used to sort the list.
|
||||
static bool priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2);
|
||||
|
||||
typedef std::vector<LLViewerMediaImpl*> impl_list;
|
||||
|
||||
typedef std::map<LLUUID, LLViewerMediaImpl*> impl_id_map;
|
||||
|
||||
// Special case early init for just web browser component
|
||||
// so we can show login screen. See .cpp file for details. JC
|
||||
|
||||
static viewer_media_t newMediaImpl(const LLUUID& texture_id,
|
||||
S32 media_width = 0,
|
||||
S32 media_height = 0,
|
||||
U8 media_auto_scale = false,
|
||||
U8 media_loop = false);
|
||||
|
||||
static viewer_media_t updateMediaImpl(LLMediaEntry* media_entry, const std::string& previous_url, bool update_from_self);
|
||||
static LLViewerMediaImpl* getMediaImplFromTextureID(const LLUUID& texture_id);
|
||||
static std::string getCurrentUserAgent();
|
||||
static void updateBrowserUserAgent();
|
||||
static bool handleSkinCurrentChanged(const LLSD& /*newvalue*/);
|
||||
static bool textureHasMedia(const LLUUID& texture_id);
|
||||
static void setVolume(F32 volume);
|
||||
|
||||
// Is any media currently "showing"? Includes Parcel Media. Does not include media in the UI.
|
||||
static bool isAnyMediaShowing();
|
||||
// Set all media enabled or disabled, depending on val. Does not include media in the UI.
|
||||
static void setAllMediaEnabled(bool val);
|
||||
|
||||
static void updateMedia(void* dummy_arg = NULL);
|
||||
|
||||
static void initClass();
|
||||
static void cleanupClass();
|
||||
|
||||
static F32 getVolume();
|
||||
static void muteListChanged();
|
||||
static void setInWorldMediaDisabled(bool disabled);
|
||||
static bool getInWorldMediaDisabled();
|
||||
|
||||
static bool isInterestingEnough(const LLVOVolume* object, const F64 &object_interest);
|
||||
|
||||
// Returns the priority-sorted list of all media impls.
|
||||
static impl_list &getPriorityList();
|
||||
|
||||
// This is the comparitor used to sort the list.
|
||||
static bool priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2);
|
||||
|
||||
// These are just helper functions for the convenience of others working with media
|
||||
static bool hasInWorldMedia();
|
||||
static std::string getParcelAudioURL();
|
||||
static bool hasParcelMedia();
|
||||
static bool hasParcelAudio();
|
||||
static bool isParcelMediaPlaying();
|
||||
static bool isParcelAudioPlaying();
|
||||
|
||||
private:
|
||||
static void onTeleportFinished();
|
||||
};
|
||||
|
||||
// Implementation functions not exported into header file
|
||||
|
|
@ -199,18 +217,20 @@ 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();
|
||||
|
||||
void setDisabled(bool disabled);
|
||||
void setDisabled(bool disabled, bool forcePlayOnEnable = false);
|
||||
bool isMediaDisabled() const { return mIsDisabled; };
|
||||
|
||||
void setInNearbyMediaList(bool in_list) { mInNearbyMediaList = in_list; }
|
||||
|
|
@ -222,10 +242,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);
|
||||
|
|
@ -326,6 +346,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;
|
||||
|
|
@ -368,7 +400,7 @@ private:
|
|||
LLMimeDiscoveryResponder *mMimeTypeProbe;
|
||||
bool mMediaAutoPlay;
|
||||
std::string mMediaEntryURL;
|
||||
bool mInNearbyMediaList; // used by LLFloaterNearbyMedia::refreshList() for performance reasons
|
||||
bool mInNearbyMediaList; // used by LLPanelNearbyMedia::refreshList() for performance reasons
|
||||
bool mClearCache;
|
||||
LLColor4 mBackgroundColor;
|
||||
bool mNavigateSuspended;
|
||||
|
|
|
|||
|
|
@ -559,6 +559,19 @@ void LLViewerMediaFocus::focusZoomOnMedia(LLUUID media_id)
|
|||
}
|
||||
}
|
||||
|
||||
void LLViewerMediaFocus::unZoom()
|
||||
{
|
||||
if(mMediaControls.get())
|
||||
{
|
||||
mMediaControls.get()->resetZoomLevel();
|
||||
}
|
||||
}
|
||||
|
||||
bool LLViewerMediaFocus::isZoomed() const
|
||||
{
|
||||
return (mMediaControls.get() && mMediaControls.get()->getZoomLevel() != LLPanelPrimMediaControls::ZOOM_NONE);
|
||||
}
|
||||
|
||||
LLUUID LLViewerMediaFocus::getControlsMediaID()
|
||||
{
|
||||
if(getFocusedMediaImpl())
|
||||
|
|
|
|||
|
|
@ -85,6 +85,9 @@ public:
|
|||
|
||||
// Try to focus/zoom on the specified media (if it's on an object in world).
|
||||
void focusZoomOnMedia(LLUUID media_id);
|
||||
// Are we zoomed in?
|
||||
bool isZoomed() const;
|
||||
void unZoom();
|
||||
|
||||
// Return the ID of the media instance the controls are currently attached to (either focus or hover).
|
||||
LLUUID getControlsMediaID();
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@
|
|||
//#include "llfirstuse.h"
|
||||
#include "llfloaterbuyland.h"
|
||||
#include "llfloatergroups.h"
|
||||
#include "llfloaternearbymedia.h"
|
||||
#include "llpanelnearbymedia.h"
|
||||
#include "llfloatersellland.h"
|
||||
#include "llfloatertools.h"
|
||||
#include "llparcelselection.h"
|
||||
|
|
@ -1795,12 +1795,13 @@ void optionally_start_music(const std::string& music_url)
|
|||
{
|
||||
// only play music when you enter a new parcel if the UI control for this
|
||||
// was not *explicitly* stopped by the user. (part of SL-4878)
|
||||
LLFloaterNearbyMedia *nearby_media_floater = LLFloaterReg::findTypedInstance<LLFloaterNearbyMedia>("nearby_media");
|
||||
if ((nearby_media_floater &&
|
||||
nearby_media_floater->getParcelAudioAutoStart()) ||
|
||||
LLPanelNearByMedia* nearby_media_panel = gStatusBar->getNearbyMediaPanel();;
|
||||
if ((nearby_media_panel &&
|
||||
nearby_media_panel->getParcelAudioAutoStart()) ||
|
||||
// or they have expressed no opinion in the UI, but have autoplay on...
|
||||
(!nearby_media_floater &&
|
||||
gSavedSettings.getBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING)))
|
||||
(!nearby_media_panel &&
|
||||
gSavedSettings.getBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING) &&
|
||||
gSavedSettings.getBOOL("MediaTentativeAutoPlay")))
|
||||
{
|
||||
llinfos << "Starting parcel music " << music_url << llendl;
|
||||
gAudiop->startInternetStream(music_url);
|
||||
|
|
|
|||
|
|
@ -997,6 +997,7 @@ void LLViewerWindow::handleMouseLeave(LLWindow *window)
|
|||
// Note: we won't get this if we have captured the mouse.
|
||||
llassert( gFocusMgr.getMouseCapture() == NULL );
|
||||
mMouseInWindow = FALSE;
|
||||
LLToolTipMgr::instance().blockToolTips();
|
||||
}
|
||||
|
||||
BOOL LLViewerWindow::handleCloseRequest(LLWindow *window)
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 260 B |
|
|
@ -162,6 +162,12 @@
|
|||
mouse_opaque="false"
|
||||
name="Menu Holder"
|
||||
width="1024"/>
|
||||
<panel top="0"
|
||||
follows="all"
|
||||
height="768"
|
||||
mouse_opaque="false"
|
||||
name="popup_holder"
|
||||
width="1024"/>
|
||||
<snapshot_floater_view enabled="false"
|
||||
follows="all"
|
||||
height="768"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,476 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
can_resize="true"
|
||||
can_close="false"
|
||||
background_opaque="true"
|
||||
background_visible="true"
|
||||
layout="topleft"
|
||||
width="270"
|
||||
height="325"
|
||||
name="nearby_media"
|
||||
help_topic="nearby_media">
|
||||
<string name="media_item_count_format">(%ld media items)</string>
|
||||
<string name="empty_item_text"><empty></string>
|
||||
<string name="parcel_media_name">Parcel Streaming Media</string>
|
||||
<string name="parcel_audio_name">Parcel Streaming Audio</string>
|
||||
<string name="playing_suffix">(playing)</string>
|
||||
<panel
|
||||
bevel_style="in"
|
||||
bg_alpha_color="0 0 0 0"
|
||||
bg_opaque_color="0 0 0 0.3"
|
||||
bg_opaque_image="Toast_Background"
|
||||
follows="left|right|top"
|
||||
top="0"
|
||||
height="30"
|
||||
name="minimized_controls"
|
||||
left="0">
|
||||
<button
|
||||
name="all_nearby_media_disable_btn"
|
||||
follows="left"
|
||||
tool_tip="Turn all nearby media off"
|
||||
left="15"
|
||||
width="60"
|
||||
height="22"
|
||||
label="Stop All">
|
||||
<button.commit_callback
|
||||
function="MediaListCtrl.DisableAll" />
|
||||
</button>
|
||||
<button
|
||||
name="all_nearby_media_enable_btn"
|
||||
follows="left"
|
||||
tool_tip="Turn all nearby media on"
|
||||
left_pad="4"
|
||||
width="60"
|
||||
height="22"
|
||||
label="Start All">
|
||||
<button.commit_callback
|
||||
function="MediaListCtrl.EnableAll" />
|
||||
</button>
|
||||
<button
|
||||
name="open_prefs_btn"
|
||||
image_overlay="Icon_Gear_Foreground"
|
||||
image_disabled="PushButton_Disabled"
|
||||
image_disabled_selected="PushButton_Disabled"
|
||||
image_selected="PushButton_Selected"
|
||||
image_unselected="PushButton_Off"
|
||||
hover_glow_amount="0.15"
|
||||
tool_tip = "Bring up media prefs"
|
||||
top_delta="0"
|
||||
left_pad="4"
|
||||
height="22"
|
||||
min_width="28"
|
||||
width="28">
|
||||
<button.commit_callback
|
||||
function="MediaListCtrl.GoMediaPrefs" />
|
||||
</button>
|
||||
<button
|
||||
name="more_less_btn"
|
||||
follows="right"
|
||||
tool_tip="Advanced Controls"
|
||||
top_delta="0"
|
||||
right="-10"
|
||||
width="60"
|
||||
height="22"
|
||||
toggle="true"
|
||||
label="More >>"
|
||||
label_selected="Less <<">
|
||||
<button.commit_callback
|
||||
function="MediaListCtrl.MoreLess" />
|
||||
</button>
|
||||
</panel>
|
||||
<panel
|
||||
name="nearby_media_panel"
|
||||
bevel_style="in"
|
||||
border_style="line"
|
||||
bg_alpha_color="0 0 0 0"
|
||||
bg_opaque_color="0 0 0 0.3"
|
||||
follows="left|right|top|bottom"
|
||||
top_delta="30"
|
||||
right="-1"
|
||||
left="0"
|
||||
height="295">
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerif"
|
||||
left="10"
|
||||
width="100">
|
||||
Nearby Media
|
||||
</text>
|
||||
<!-- nix for now
|
||||
<text
|
||||
bottom_delta="1"
|
||||
type="string"
|
||||
follows="top|left|right"
|
||||
font="SansSerif"
|
||||
font.style="ITALIC"
|
||||
font.size="Small"
|
||||
name="media_item_count"
|
||||
left="115"
|
||||
right="-10">
|
||||
(?? media items)
|
||||
</text>
|
||||
-->
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerif"
|
||||
top_pad="15"
|
||||
left="10"
|
||||
width="40">
|
||||
Show:
|
||||
</text>
|
||||
<combo_box
|
||||
height="23"
|
||||
left="50"
|
||||
width="140"
|
||||
top_delta="-5"
|
||||
follows="left|top"
|
||||
name="show_combo">
|
||||
<combo_box.item
|
||||
label="All"
|
||||
value="0"
|
||||
name="All" />
|
||||
<combo_box.item
|
||||
label="In this Parcel"
|
||||
value="2"
|
||||
name="WithinParcel" />
|
||||
<combo_box.item
|
||||
label="Outside this Parcel"
|
||||
value="3"
|
||||
name="OutsideParcel" />
|
||||
<combo_box.item
|
||||
label="On other Avatars"
|
||||
value="4"
|
||||
ame="OnOthers" />
|
||||
</combo_box>
|
||||
<scroll_list
|
||||
follows="left|top|bottom|right"
|
||||
column_padding="0"
|
||||
height="100"
|
||||
draw_heading="false"
|
||||
draw_stripes="true"
|
||||
bg_stripe_color="0.25 0.25 0.25 0.25"
|
||||
top_pad="8"
|
||||
left="10"
|
||||
right="-10"
|
||||
name="media_list">
|
||||
<scroll_list.columns
|
||||
type="checkbox"
|
||||
width="-1"
|
||||
label=""
|
||||
name="media_checkbox_ctrl" />
|
||||
<scroll_list.columns
|
||||
sort_column="media_proximity"
|
||||
width="-1"
|
||||
label="Proximity"
|
||||
name="media_proximity" />
|
||||
<scroll_list.columns
|
||||
sort_column="media_visibility"
|
||||
width="-1"
|
||||
label="Visible"
|
||||
name="media_visibility" />
|
||||
<scroll_list.columns
|
||||
sort_column="media_class"
|
||||
width="-1"
|
||||
label="Class"
|
||||
name="media_class" />
|
||||
<scroll_list.columns
|
||||
label="Name"
|
||||
name="media_name" />
|
||||
<scroll_list.columns
|
||||
sort_column="media_debug"
|
||||
width="-1"
|
||||
label="Debug"
|
||||
name="media_debug" />
|
||||
</scroll_list>
|
||||
<panel
|
||||
bevel_style="in"
|
||||
background_visible="true"
|
||||
bg_alpha_color="0.0 0.0 0.0 1.0"
|
||||
bg_opaque_color="0 0 0 0.3"
|
||||
follows="left|right|bottom"
|
||||
top_pad="5"
|
||||
height="30"
|
||||
left="10"
|
||||
right="-10">
|
||||
<layout_stack
|
||||
name="media_controls"
|
||||
follows="left|right|top"
|
||||
animate="false"
|
||||
height="75"
|
||||
layout="topleft"
|
||||
top="4"
|
||||
left="10"
|
||||
right="-10"
|
||||
border_size="0"
|
||||
mouse_opaque="false"
|
||||
orientation="horizontal">
|
||||
<layout_panel
|
||||
name="stop"
|
||||
mouse_opaque="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
height="22"
|
||||
min_width="22"
|
||||
width="22">
|
||||
<button
|
||||
name="stop_btn"
|
||||
follows="top"
|
||||
image_overlay="Stop_Off"
|
||||
image_disabled="PushButton_Disabled"
|
||||
image_disabled_selected="PushButton_Disabled"
|
||||
image_selected="PushButton_Selected"
|
||||
image_unselected="PushButton_Off"
|
||||
hover_glow_amount="0.15"
|
||||
layout="topleft"
|
||||
tool_tip="Stop selected media"
|
||||
top="0"
|
||||
height="22"
|
||||
width="22">
|
||||
<button.commit_callback
|
||||
function="SelectedMediaCtrl.Stop" />
|
||||
</button>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
name="play"
|
||||
mouse_opaque="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
height="22"
|
||||
min_width="22"
|
||||
width="22">
|
||||
<button
|
||||
name="play_btn"
|
||||
follows="top"
|
||||
image_overlay="Play_Off"
|
||||
image_disabled="PushButton_Disabled"
|
||||
image_disabled_selected="PushButton_Disabled"
|
||||
image_selected="PushButton_Selected"
|
||||
image_unselected="PushButton_Off"
|
||||
hover_glow_amount="0.15"
|
||||
layout="topleft"
|
||||
tool_tip = "Play selected media"
|
||||
top="0"
|
||||
height="22"
|
||||
width="22">
|
||||
<button.commit_callback
|
||||
function="SelectedMediaCtrl.Play" />
|
||||
</button>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
name="pause"
|
||||
mouse_opaque="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
min_width="22"
|
||||
width="22">
|
||||
<button
|
||||
name="pause_btn"
|
||||
follows="top"
|
||||
image_overlay="Pause_Off"
|
||||
image_disabled="PushButton_Disabled"
|
||||
image_disabled_selected="PushButton_Disabled"
|
||||
image_selected="PushButton_Selected"
|
||||
image_unselected="PushButton_Off"
|
||||
hover_glow_amount="0.15"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
height="22"
|
||||
width="22"
|
||||
tool_tip = "Pause selected media">
|
||||
<button.commit_callback
|
||||
function="SelectedMediaCtrl.Pause" />
|
||||
</button>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
name="volume_slider_ctrl"
|
||||
mouse_opaque="false"
|
||||
auto_resize="true"
|
||||
user_resize="false"
|
||||
follows="left|right"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
height="22"
|
||||
min_width="100"
|
||||
width="200">
|
||||
<slider_bar
|
||||
name="volume_slider"
|
||||
follows="left|right|top"
|
||||
top="0"
|
||||
height="22"
|
||||
increment="0.01"
|
||||
initial_value="0.5"
|
||||
layout="topleft"
|
||||
tool_tip="Audio volume for selected media"
|
||||
width="200">
|
||||
<slider_bar.commit_callback
|
||||
function="SelectedMediaCtrl.Volume" />
|
||||
</slider_bar>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
name="mute"
|
||||
mouse_opaque="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
height="72"
|
||||
min_width="22"
|
||||
width="22">
|
||||
<button
|
||||
name="mute_btn"
|
||||
follows="top"
|
||||
image_disabled="PushButton_Disabled"
|
||||
image_disabled_selected="PushButton_Disabled"
|
||||
image_selected="AudioMute_Off"
|
||||
image_unselected="Audio_Off"
|
||||
hover_glow_amount="0.15"
|
||||
is_toggle="true"
|
||||
layout="topleft"
|
||||
scale_image="false"
|
||||
tool_tip="Mute audio on selected media"
|
||||
top="0"
|
||||
height="20"
|
||||
width="22" >
|
||||
<button.commit_callback
|
||||
function="SelectedMediaCtrl.Mute" />
|
||||
</button>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
name="zoom"
|
||||
mouse_opaque="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
height="28"
|
||||
min_width="22"
|
||||
width="22">
|
||||
<button
|
||||
name="zoom_btn"
|
||||
follows="top"
|
||||
image_overlay="Zoom_Off"
|
||||
image_disabled="PushButton_Disabled"
|
||||
image_disabled_selected="PushButton_Disabled"
|
||||
image_selected="PushButton_Selected"
|
||||
image_unselected="PushButton_Off"
|
||||
hover_glow_amount="0.15"
|
||||
top="0"
|
||||
height="22"
|
||||
layout="topleft"
|
||||
tool_tip="Zoom into selected media"
|
||||
width="22">
|
||||
<button.commit_callback
|
||||
function="SelectedMediaCtrl.Zoom" />
|
||||
</button>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
name="unzoom"
|
||||
mouse_opaque="false"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
min_width="21"
|
||||
width="21" >
|
||||
<button
|
||||
name="unzoom_btn"
|
||||
follows="top"
|
||||
image_overlay="UnZoom_Off"
|
||||
image_disabled="PushButton_Disabled"
|
||||
image_disabled_selected="PushButton_Disabled"
|
||||
image_selected="PushButton_Selected"
|
||||
image_unselected="PushButton_Off"
|
||||
hover_glow_amount="0.15"
|
||||
top="0"
|
||||
height="22"
|
||||
layout="topleft"
|
||||
tool_tip ="Zoom back from selected media"
|
||||
top_delta="-4"
|
||||
width="21" >
|
||||
<button.commit_callback
|
||||
function="SelectedMediaCtrl.Unzoom" />
|
||||
</button>
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
name="right_bookend"
|
||||
width="0"
|
||||
mouse_opaque="false"
|
||||
user_resize="false" />
|
||||
</layout_stack>
|
||||
</panel>
|
||||
<panel
|
||||
bevel_style="in"
|
||||
background_visible="true"
|
||||
bg_alpha_color="0.0 0.0 0.0 1.0"
|
||||
bg_opaque_color="0 0 0 0.3"
|
||||
follows="left|right|bottom"
|
||||
top_pad="5"
|
||||
height="90"
|
||||
left="10"
|
||||
right="-10">
|
||||
<check_box
|
||||
name="media_enabled_btn"
|
||||
control_name="AudioStreamingMedia"
|
||||
value="true"
|
||||
follows="left|bottom|right"
|
||||
height="15"
|
||||
tool_tip="Check this to enable all media"
|
||||
label="All Media Enabled"
|
||||
top="10"
|
||||
left="10"/>
|
||||
<check_box
|
||||
name="media_auto_play_btn"
|
||||
control_name="ParcelMediaAutoPlayEnable"
|
||||
enabled_control="AudioStreamingMedia"
|
||||
value="true"
|
||||
follows="left|bottom|right"
|
||||
height="15"
|
||||
tool_tip="Check this to let media auto-play if it wants"
|
||||
label="Allow Media to auto-play"
|
||||
top_pad="5"
|
||||
left="10"/>
|
||||
<!--
|
||||
<check_box
|
||||
name="media_show_within_parcel_btn"
|
||||
control_name="MediaShowWithinParcel"
|
||||
enabled_control="AudioStreamingMedia"
|
||||
value="true"
|
||||
follows="left|bottom|right"
|
||||
height="15"
|
||||
tool_tip="Uncheck this to hide media within the parcel you are standing in"
|
||||
label="Show media within current parcel"
|
||||
left="10"/>
|
||||
-->
|
||||
<check_box
|
||||
name="media_show_outside_parcel_btn"
|
||||
control_name="MediaShowOutsideParcel"
|
||||
enabled_control="AudioStreamingMedia"
|
||||
value="true"
|
||||
follows="left|bottom|right"
|
||||
height="15"
|
||||
tool_tip="Uncheck this to hide media outside the parcel you are standing in"
|
||||
label="Show media outside current parcel"
|
||||
left="10"/>
|
||||
<check_box
|
||||
name="media_show_on_others_btn"
|
||||
control_name="MediaShowOnOthers"
|
||||
enabled_control="AudioStreamingMedia"
|
||||
value="true"
|
||||
follows="left|bottom|right"
|
||||
height="15"
|
||||
tool_tip="Uncheck this to hide media attached to other avatars nearby"
|
||||
label="Show media attached to other avatars"
|
||||
left="10"/>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
@ -71,7 +71,7 @@
|
|||
layout="topleft"
|
||||
top="0"
|
||||
left="0"
|
||||
border_size="1"
|
||||
border_size="0"
|
||||
mouse_opaque="false"
|
||||
orientation="horizontal">
|
||||
<!-- outer layout_panels center the inner one -->
|
||||
|
|
@ -260,7 +260,7 @@
|
|||
top="0"
|
||||
height="22"
|
||||
min_width="22"
|
||||
width="24">
|
||||
width="22">
|
||||
<button
|
||||
name="play_btn"
|
||||
follows="top"
|
||||
|
|
@ -272,7 +272,6 @@
|
|||
hover_glow_amount="0.15"
|
||||
layout="topleft"
|
||||
tool_tip = "Play media"
|
||||
left_delta="2"
|
||||
top="0"
|
||||
height="22"
|
||||
width="22">
|
||||
|
|
@ -288,7 +287,7 @@
|
|||
layout="topleft"
|
||||
top="0"
|
||||
min_width="22"
|
||||
width="24">
|
||||
width="22">
|
||||
<button
|
||||
name="pause_btn"
|
||||
follows="top"
|
||||
|
|
@ -302,7 +301,6 @@
|
|||
top="0"
|
||||
height="22"
|
||||
width="22"
|
||||
left_delta="-1"
|
||||
tool_tip = "Pause media">
|
||||
<button.commit_callback
|
||||
function="MediaCtrl.Pause" />
|
||||
|
|
|
|||
|
|
@ -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,23 @@
|
|||
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="Pause_Off"
|
||||
image_unselected="Play_Off"
|
||||
image_pressed="Play_Press"
|
||||
image_pressed_selected="Pause_Press"
|
||||
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 +112,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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue