Files
SingularityViewer/indra/newview/llpanelnearbymedia.h

204 lines
5.7 KiB
C++

/**
* @file llpanelnearbymedia.h
* @brief Management interface for muting and controlling nearby media
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LL_LLPANELNEARBYMEDIA_H
#define LL_LLPANELNEARBYMEDIA_H
#include "llpanel.h"
#include "llfloater.h"
#include "llsingleton.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 onTopLost();
/*virtual*/ void handleVisibilityChange ( BOOL new_visibility );
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);
/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
// 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();
// callback for when the auto play media preference changes
// to update mParcelAudioAutoStart
void handleMediaAutoPlayChanged(const LLSD& newvalue);
LLPanelNearByMedia(bool standalone_panel = true);
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 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, bool muted, F32 volume);
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;
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;
LLRect mMoreRect;
LLRect mLessRect;
LLFrameTimer mHoverTimer;
LLScrollListItem* mParcelMediaItem;
LLScrollListItem* mParcelAudioItem;
bool mStandalonePanel;
};
class LLFloaterNearbyMedia : public LLFloater, public LLSingleton<LLFloaterNearbyMedia>
{
public:
LLFloaterNearbyMedia();
static void updateClass();
/*virtual*/ BOOL postBuild();
/*virtual*/ void onClose(bool app_quitting);
/*virtual*/ void onOpen();
virtual void handleReshape(const LLRect& new_rect, bool by_user);
LLPanelNearByMedia* getMediaPanel() { return mPanel; }
private:
LLPanelNearByMedia* mPanel;
};
#endif // LL_LLPANELNEARBYMEDIA_H