/** * @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 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(); 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, 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; }; #endif // LL_LLPANELNEARBYMEDIA_H