diff options
| author | Richard Nelson <richard@lindenlab.com> | 2011-10-12 13:50:20 -0700 | 
|---|---|---|
| committer | Richard Nelson <richard@lindenlab.com> | 2011-10-12 13:50:20 -0700 | 
| commit | a1f0101ca293768a37889856b1dde69110b30b7c (patch) | |
| tree | 36113e433e747b0df8e089175dfe21878fa3cb8a | |
| parent | bb93dc154afe5fbed4dfa187ed6297d5714bdb5f (diff) | |
EXP-1275 WIP A UI element or Keyboard shortcut to clear the viewport
restores hidden floaters now
| -rw-r--r-- | indra/llui/llfloater.cpp | 46 | ||||
| -rw-r--r-- | indra/llui/llfloater.h | 11 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.cpp | 6 | 
3 files changed, 60 insertions, 3 deletions
| diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 0398c0d7eb..4bcc7c6fe0 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -2506,6 +2506,52 @@ void LLFloaterView::closeAllChildren(bool app_quitting)  	}  } +void LLFloaterView::hiddenFloaterClosed(LLFloater* floater) +{ +	for (hidden_floaters_t::iterator it = mHiddenFloaters.begin(), end_it = mHiddenFloaters.end(); +		it != end_it; +		++it) +	{ +		if (it->first.get() == floater) +		{ +			it->second.disconnect(); +			mHiddenFloaters.erase(it); +			break; +		} +	} +} + +void LLFloaterView::hideAllFloaters() +{ +	child_list_t child_list = *(getChildList()); + +	for (child_list_iter_t it = child_list.begin(); it != child_list.end(); ++it) +	{ +		LLFloater* floaterp = dynamic_cast<LLFloater*>(*it); +		if (floaterp && floaterp->getVisible()) +		{ +			floaterp->setVisible(false); +			boost::signals2::connection connection = floaterp->mCloseSignal.connect(boost::bind(&LLFloaterView::hiddenFloaterClosed, this, floaterp)); +			mHiddenFloaters.push_back(std::make_pair(floaterp->getHandle(), connection)); +		} +	} +} + +void LLFloaterView::showHiddenFloaters() +{ +	for (hidden_floaters_t::iterator it = mHiddenFloaters.begin(), end_it = mHiddenFloaters.end(); +		it != end_it; +		++it) +	{ +		LLFloater* floaterp = it->first.get(); +		if (floaterp) +		{ +			floaterp->setVisible(true); +		} +		it->second.disconnect(); +	} +	mHiddenFloaters.clear(); +}  BOOL LLFloaterView::allChildrenClosed()  { diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index b404306e94..275b508f79 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -35,6 +35,7 @@  #include "lluuid.h"  //#include "llnotificationsutil.h"  #include <set> +#include <boost/signals2.hpp>  class LLDragHandle;  class LLResizeHandle; @@ -454,8 +455,6 @@ private:  	typedef std::map<LLHandle<LLFloater>, LLFloater*>::iterator handle_map_iter_t;  	static handle_map_t	sFloaterMap; -	std::vector<LLHandle<LLView> > mMinimizedHiddenChildren; -  	BOOL			mHasBeenDraggedWhileMinimized;  	S32				mPreviousMinimizedBottom;  	S32				mPreviousMinimizedLeft; @@ -509,6 +508,10 @@ public:  	BOOL			allChildrenClosed();  	void			shiftFloaters(S32 x_offset, S32 y_offset); +	void			hideAllFloaters(); +	void			showHiddenFloaters(); + +  	LLFloater* getFrontmost() const;  	LLFloater* getBackmost() const;  	LLFloater* getParentFloater(LLView* viewp) const; @@ -523,11 +526,15 @@ public:  	void setFloaterSnapView(LLHandle<LLView> snap_view) {mSnapView = snap_view; }  private: +	void hiddenFloaterClosed(LLFloater* floater); +  	LLHandle<LLView>	mSnapView;  	BOOL			mFocusCycleMode;  	S32				mSnapOffsetBottom;  	S32				mSnapOffsetRight;  	S32				mMinimizePositionVOffset; +	typedef std::vector<std::pair<LLHandle<LLFloater>, boost::signals2::connection> > hidden_floaters_t; +	hidden_floaters_t mHiddenFloaters;  };  // diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 2473d41a35..665b31a427 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -4992,7 +4992,11 @@ void LLViewerWindow::setUIVisibility(bool visible)  	if (!visible)  	{ -		gFloaterView->closeAllChildren(false); +		gFloaterView->hideAllFloaters(); +	} +	else +	{ +		gFloaterView->showHiddenFloaters();  	}  } | 
