From 4a910a80372515b25e9d4170dd4046d46515d67e Mon Sep 17 00:00:00 2001 From: Shyotl Date: Fri, 14 Oct 2011 22:57:35 -0500 Subject: [PATCH] onVisibilityChange renamed to handleVisibilityChange. Added setVisibleCallback to LLPanel --- indra/llui/llpanel.cpp | 19 +++++++++++++++++++ indra/llui/llpanel.h | 3 +++ indra/newview/llmediactrl.cpp | 17 +++++++++++++---- indra/newview/llmediactrl.h | 5 +++-- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index cc7f7bdcc..9b40bfaeb 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -80,6 +80,7 @@ void LLPanel::init() mPanelHandle.bind(this); setTabStop(FALSE); + mVisibleSignal = NULL; } LLPanel::LLPanel() @@ -123,6 +124,7 @@ LLPanel::LLPanel(const std::string& name, const std::string& rect_control, BOOL LLPanel::~LLPanel() { storeRectControl(); + delete mVisibleSignal; } // virtual @@ -364,6 +366,13 @@ BOOL LLPanel::checkRequirements() return TRUE; } +void LLPanel::handleVisibilityChange ( BOOL new_visibility ) +{ + LLUICtrl::handleVisibilityChange ( new_visibility ); + if (mVisibleSignal) + (*mVisibleSignal)(this, LLSD(new_visibility) ); // Pass BOOL as LLSD +} + void LLPanel::setFocus(BOOL b) { if( b ) @@ -1009,6 +1018,16 @@ void LLPanel::childSetControlName(const std::string& id, const std::string& cont } } +boost::signals2::connection LLPanel::setVisibleCallback( const commit_signal_t::slot_type& cb ) +{ + if (!mVisibleSignal) + { + mVisibleSignal = new commit_signal_t(); + } + + return mVisibleSignal->connect(cb); +} + //virtual LLView* LLPanel::getChildView(const std::string& name, BOOL recurse, BOOL create_if_missing) const { diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h index a442a94db..76b8833df 100644 --- a/indra/llui/llpanel.h +++ b/indra/llui/llpanel.h @@ -76,6 +76,7 @@ public: /*virtual*/ BOOL isPanel() const; /*virtual*/ void draw(); /*virtual*/ BOOL handleKeyHere( KEY key, MASK mask ); + /*virtual*/ void handleVisibilityChange ( BOOL new_visibility ); /*virtual*/ LLXMLNodePtr getXML(bool save_children = true) const; // Override to set not found list: virtual LLView* getChildView(const std::string& name, BOOL recurse = TRUE, BOOL create_if_missing = TRUE) const; @@ -223,11 +224,13 @@ public: static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); + boost::signals2::connection setVisibleCallback( const commit_signal_t::slot_type& cb ); protected: // Override to set not found list LLButton* getDefaultButton() { return mDefaultBtn; } LLCallbackMap::map_t mFactoryMap; + commit_signal_t* mVisibleSignal; // Called when visibility changes, passes new visibility as LLSD() private: // common construction logic void init(); diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 186dd2f27..0dfa20e14 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -63,7 +63,7 @@ const S32 MAX_TEXTURE_DIMENSION = 2048; static LLRegisterWidget r("web_browser"); LLMediaCtrl::LLMediaCtrl( const std::string& name, const LLRect& rect ) : - LLUICtrl( name, rect, FALSE, NULL, NULL ), + LLPanel( name, rect, FALSE ), LLInstanceTracker(LLUUID::generateNewID()), mTextureDepthBytes( 4 ), mWebBrowserImage( 0 ), @@ -336,6 +336,15 @@ void LLMediaCtrl::onFocusLost() LLUICtrl::onFocusLost(); } +//////////////////////////////////////////////////////////////////////////////// +// + +BOOL LLMediaCtrl::postBuild () +{ + setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2)); + return true; +} + //////////////////////////////////////////////////////////////////////////////// // BOOL LLMediaCtrl::handleKeyHere( KEY key, MASK mask ) @@ -390,6 +399,7 @@ void LLMediaCtrl::handleVisibilityChange ( BOOL new_visibility ) //////////////////////////////////////////////////////////////////////////////// // + BOOL LLMediaCtrl::handleUnicodeCharHere(llwchar uni_char) { BOOL result = FALSE; @@ -407,10 +417,10 @@ BOOL LLMediaCtrl::handleUnicodeCharHere(llwchar uni_char) //////////////////////////////////////////////////////////////////////////////// // -void LLMediaCtrl::handleVisibilityChange ( BOOL new_visibility ) +void LLMediaCtrl::onVisibilityChange ( const LLSD& new_visibility ) { // set state of frequent updates automatically if visibility changes - if ( new_visibility ) + if ( new_visibility.asBoolean() ) { mFrequentUpdates = true; } @@ -418,7 +428,6 @@ void LLMediaCtrl::handleVisibilityChange ( BOOL new_visibility ) { mFrequentUpdates = false; } - LLUICtrl::handleVisibilityChange(new_visibility); } //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h index de0018988..b5254581f 100644 --- a/indra/newview/llmediactrl.h +++ b/indra/newview/llmediactrl.h @@ -46,7 +46,7 @@ class LLUICtrlFactory; //////////////////////////////////////////////////////////////////////////////// // class LLMediaCtrl : - public LLUICtrl, + public LLPanel, public LLViewerMediaObserver, public LLViewerMediaEventEmitter, public LLInstanceTracker @@ -133,7 +133,7 @@ class LLMediaCtrl : virtual BOOL handleUnicodeCharHere(llwchar uni_char); virtual void reshape( S32 width, S32 height, BOOL called_from_parent = TRUE); virtual void draw(); - virtual void handleVisibilityChange ( BOOL curVisibilityIn ); + virtual BOOL postBuild(); // focus overrides void onFocusLost(); @@ -150,6 +150,7 @@ class LLMediaCtrl : void convertInputCoords(S32& x, S32& y); private: + void onVisibilityChange ( const LLSD& new_visibility ); static bool onClickLinkExternalTarget( const LLSD&, const LLSD& ); const S32 mTextureDepthBytes;