diff options
| author | Gilbert Gonzales <gilbert@lindenlab.com> | 2012-08-02 09:45:59 -0700 | 
|---|---|---|
| committer | Gilbert Gonzales <gilbert@lindenlab.com> | 2012-08-02 09:45:59 -0700 | 
| commit | a87b27c41ddef15fa4027549c38b0129107ff9f6 (patch) | |
| tree | 980583c52a68f94742abe157a3947e1a0a1d343c /indra | |
| parent | 1d6957ce09f92df6c0766162de1a84547f40e3bd (diff) | |
| parent | 4cb1e766fcfcaba702c2638f4c7daa9dd17bcbd8 (diff) | |
merging of latest code
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llui/llfloater.h | 2 | ||||
| -rw-r--r-- | indra/llui/llfolderview.cpp | 57 | ||||
| -rw-r--r-- | indra/llui/llfolderviewitem.cpp | 12 | ||||
| -rw-r--r-- | indra/llui/llfolderviewitem.h | 1 | ||||
| -rw-r--r-- | indra/llui/llfolderviewmodel.h | 20 | ||||
| -rw-r--r-- | indra/llui/lltooltip.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llfolderviewmodelinventory.cpp | 42 | ||||
| -rw-r--r-- | indra/newview/llfolderviewmodelinventory.h | 6 | ||||
| -rw-r--r-- | indra/newview/llimconversation.cpp | 31 | ||||
| -rw-r--r-- | indra/newview/llimconversation.h | 8 | ||||
| -rw-r--r-- | indra/newview/llimfloater.cpp | 18 | ||||
| -rw-r--r-- | indra/newview/llimfloater.h | 3 | ||||
| -rw-r--r-- | indra/newview/llimfloatercontainer.h | 4 | ||||
| -rw-r--r-- | indra/newview/llinventorypanel.cpp | 17 | ||||
| -rw-r--r-- | indra/newview/llnearbychat.cpp | 109 | ||||
| -rw-r--r-- | indra/newview/llnearbychat.h | 8 | 
16 files changed, 155 insertions, 185 deletions
| diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 17402b8d63..5be6e6d922 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -324,7 +324,7 @@ public:  	virtual void    setDocked(bool docked, bool pop_on_undock = true);  	virtual void    setTornOff(bool torn_off) { mTornOff = torn_off; } -	bool getTornOff() {return mTornOff;} +	bool isTornOff() {return mTornOff;}  	void setOpenPositioning(LLFloaterEnums::EOpenPositioning pos) {mPositioning = pos;}  	// Return a closeable floater, if any, given the current focus. diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index 0c1ed2aab9..5c421976b5 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -717,33 +717,6 @@ void LLFolderView::closeRenamer( void )  	}  } -bool isDescendantOfASelectedItem(LLFolderViewItem* item, const std::vector<LLFolderViewItem*>& selectedItems) -{ -	LLFolderViewItem* item_parent = dynamic_cast<LLFolderViewItem*>(item->getParent()); - -	if (item_parent) -	{ -		for(std::vector<LLFolderViewItem*>::const_iterator it = selectedItems.begin(); it != selectedItems.end(); ++it) -		{ -			const LLFolderViewItem* const selected_item = (*it); - -			LLFolderViewItem* parent = item_parent; - -			while (parent) -			{ -				if (selected_item == parent) -				{ -					return true; -				} - -				parent = dynamic_cast<LLFolderViewItem*>(parent->getParent()); -			} -		} -	} - -	return false; -} -  void LLFolderView::removeSelectedItems()  {  	if(getVisible() && getEnabled()) @@ -815,7 +788,7 @@ void LLFolderView::removeSelectedItems()  			if (!new_selection)  			{  				new_selection = last_item->getPreviousOpenNode(FALSE); -				while (new_selection && (new_selection->isSelected() || isDescendantOfASelectedItem(new_selection, items))) +				while (new_selection && (new_selection->isInSelection()))  				{  					new_selection = new_selection->getPreviousOpenNode(FALSE);  				} @@ -1060,16 +1033,42 @@ void LLFolderView::cut()  	if(getVisible() && getEnabled() && (count > 0))  	{  		LLFolderViewModelItem* listener = NULL; + +		LLFolderViewItem* last_item = *mSelectedItems.rbegin();; +		LLFolderViewItem* new_selection = last_item->getNextOpenNode(FALSE); +		while(new_selection && new_selection->isSelected()) +		{ +			new_selection = new_selection->getNextOpenNode(FALSE); +		} +		if (!new_selection) +		{ +			new_selection = last_item->getPreviousOpenNode(FALSE); +			while (new_selection && (new_selection->isInSelection())) +			{ +				new_selection = new_selection->getPreviousOpenNode(FALSE); +			} +		} +  		selected_items_t::iterator item_it;  		for (item_it = mSelectedItems.begin(); item_it != mSelectedItems.end(); ++item_it)  		{ -			listener = (*item_it)->getViewModelItem(); +			LLFolderViewItem* item_to_cut = *item_it; +			listener = item_to_cut->getViewModelItem();  			if(listener)  			{  				listener->cutToClipboard();  				listener->removeItem();  			}  		} + +		if (new_selection) +		{ +			setSelection(new_selection, new_selection->isOpen(), mParentPanel->hasFocus()); +		} +		else +		{ +			setSelection(NULL, mParentPanel->hasFocus()); +		}  	}  	mSearchString.clear();  } diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index 480332ae70..68b442dd9a 100644 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -801,14 +801,20 @@ void LLFolderViewItem::draw()  }  const LLFolderViewModelInterface* LLFolderViewItem::getFolderViewModel( void ) const -	{ +{  	return getRoot()->getFolderViewModel();  }  LLFolderViewModelInterface* LLFolderViewItem::getFolderViewModel( void ) -		{ +{  	return getRoot()->getFolderViewModel(); -		} +} + +bool LLFolderViewItem::isInSelection() const +{ +	return mIsSelected || (mParentFolder && mParentFolder->isInSelection()); +} +  ///---------------------------------------------------------------------------- diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h index 4eda02f13f..e75059bc01 100644 --- a/indra/llui/llfolderviewitem.h +++ b/indra/llui/llfolderviewitem.h @@ -164,6 +164,7 @@ public:  	virtual void destroyView();  	BOOL isSelected() const { return mIsSelected; } +	bool isInSelection() const;  	void setUnselected() { mIsSelected = FALSE; } diff --git a/indra/llui/llfolderviewmodel.h b/indra/llui/llfolderviewmodel.h index c4d98657e2..9908e538a4 100644 --- a/indra/llui/llfolderviewmodel.h +++ b/indra/llui/llfolderviewmodel.h @@ -172,10 +172,11 @@ public:  	virtual bool potentiallyVisible() = 0; // is the item definitely visible or we haven't made up our minds yet? -	virtual void filter( LLFolderViewFilter& filter) = 0; +	virtual bool filter( LLFolderViewFilter& filter) = 0;  	virtual bool passedFilter(S32 filter_generation = -1) = 0;  	virtual bool descendantsPassedFilter(S32 filter_generation = -1) = 0; -	virtual void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) = 0; +	virtual void setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) = 0; +	virtual void setPassedFolderFilter(bool passed, S32 filter_generation) = 0;  	virtual void dirtyFilter() = 0;  	virtual bool hasFilterStringMatch() = 0;  	virtual std::string::size_type getFilterStringOffset() = 0; @@ -219,6 +220,7 @@ public:  		mStringFilterSize(0),  		mFolderViewItem(NULL),  		mLastFilterGeneration(-1), +		mLastFolderFilterGeneration(-1),  		mMostFilteredDescendantGeneration(-1),  		mParent(NULL),  		mRootViewModel(root_view_model) @@ -231,9 +233,11 @@ public:  	void setSortVersion(S32 version) { mSortVersion = version;}  	S32	getLastFilterGeneration() const { return mLastFilterGeneration; } +	S32	getLastFolderFilterGeneration() const { return mLastFolderFilterGeneration; }  	void dirtyFilter()  	{  		mLastFilterGeneration = -1; +		mLastFolderFilterGeneration = -1;  		// bubble up dirty flag all the way to root  		if (mParent) @@ -259,15 +263,20 @@ public:  		dirtyFilter();  	} -	void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) +	void setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0)  	{  		mPassedFilter = passed; -		mPassedFolderFilter = passed_folder;  		mLastFilterGeneration = filter_generation;  		mStringMatchOffsetFilter = string_offset;  		mStringFilterSize = string_size;  	} +	void setPassedFolderFilter(bool passed, S32 filter_generation) +	{ +		mPassedFolderFilter = passed; +		mLastFolderFilterGeneration = filter_generation; +	} +  	virtual bool potentiallyVisible()  	{  		return passedFilter() // we've passed the filter @@ -280,7 +289,7 @@ public:  		if (filter_generation < 0)   			filter_generation = mRootViewModel.getFilter().getFirstSuccessGeneration(); -		bool passed_folder_filter = mPassedFolderFilter && mLastFilterGeneration >= filter_generation; +		bool passed_folder_filter = mPassedFolderFilter && mLastFolderFilterGeneration >= filter_generation;  		bool passed_filter = mPassedFilter && mLastFilterGeneration >= filter_generation;  		return passed_folder_filter  				&& (descendantsPassedFilter(filter_generation) @@ -304,6 +313,7 @@ protected:  	std::string::size_type	mStringFilterSize;  	S32						mLastFilterGeneration; +	S32						mLastFolderFilterGeneration;  	S32						mMostFilteredDescendantGeneration; diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index f737d48abf..d4670efedf 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -288,7 +288,7 @@ void LLToolTip::initFromParams(const LLToolTip::Params& p)  		mTextBox->setText(p.message());  	} -	S32 text_width = llmin(p.max_width(), mTextBox->getTextPixelWidth()); +	S32 text_width = llmin(p.max_width(), mTextBox->getTextPixelWidth() + 1);  	S32 text_height = mTextBox->getTextPixelHeight();  	mTextBox->reshape(text_width, text_height);  	if (mInfoButton) diff --git a/indra/newview/llfolderviewmodelinventory.cpp b/indra/newview/llfolderviewmodelinventory.cpp index e2376b18d5..8a4b4bae84 100644 --- a/indra/newview/llfolderviewmodelinventory.cpp +++ b/indra/newview/llfolderviewmodelinventory.cpp @@ -125,9 +125,9 @@ void LLFolderViewModelItemInventory::requestSort()  	}  } -void LLFolderViewModelItemInventory::setPassedFilter(bool passed, bool passed_folder, S32 filter_generation, std::string::size_type string_offset, std::string::size_type string_size) +void LLFolderViewModelItemInventory::setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset, std::string::size_type string_size)  { -	LLFolderViewModelItemCommon::setPassedFilter(passed, passed_folder, filter_generation, string_offset, string_size); +	LLFolderViewModelItemCommon::setPassedFilter(passed, filter_generation, string_offset, string_size);  	bool passed_filter_before = mPrevPassedAllFilters;  	mPrevPassedAllFilters = passedFilter(filter_generation); @@ -143,14 +143,15 @@ void LLFolderViewModelItemInventory::setPassedFilter(bool passed, bool passed_fo  	}  } -void LLFolderViewModelItemInventory::filterChildItem( LLFolderViewModelItem* item, LLFolderViewFilter& filter ) +bool LLFolderViewModelItemInventory::filterChildItem( LLFolderViewModelItem* item, LLFolderViewFilter& filter )  {  	S32 filter_generation = filter.getCurrentGeneration(); +	bool continue_filtering = true;  	if (item->getLastFilterGeneration() < filter_generation)  	{  		// recursive application of the filter for child items -		item->filter( filter ); +		continue_filtering = item->filter( filter );  	}  	// track latest generation to pass any child items, for each folder up to root @@ -164,22 +165,31 @@ void LLFolderViewModelItemInventory::filterChildItem( LLFolderViewModelItem* ite  			view_model = static_cast<LLFolderViewModelItemInventory*>(view_model->mParent);  		}  	} + +	return continue_filtering;  } -void LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter) +bool LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)  {  	const S32 filter_generation = filter.getCurrentGeneration();  	const S32 must_pass_generation = filter.getFirstRequiredGeneration();  	if (getLastFilterGeneration() >= must_pass_generation  +		&& getLastFolderFilterGeneration() >= must_pass_generation  		&& !passedFilter(must_pass_generation))  	{  		// failed to pass an earlier filter that was a subset of the current one  		// go ahead and flag this item as done -		setPassedFilter(false, false, filter_generation); -		return; +		setPassedFilter(false, filter_generation); +		setPassedFolderFilter(false, filter_generation); +		return true;  	} +	const bool passed_filter_folder = (getInventoryType() == LLInventoryType::IT_CATEGORY)  +		? filter.checkFolder(this) +		: true; +	setPassedFolderFilter(passed_filter_folder, filter_generation); +  	if(!mChildren.empty()  		&& (getLastFilterGeneration() < must_pass_generation // haven't checked descendants against minimum required generation to pass  			|| descendantsPassedFilter(must_pass_generation))) // or at least one descendant has passed the minimum requirement @@ -189,7 +199,10 @@ void LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)  			iter != end_iter && filter.getFilterCount() > 0;  			++iter)  		{ -			filterChildItem((*iter), filter); +			if (!filterChildItem((*iter), filter)) +			{ +				break; +			}  		}  	} @@ -200,12 +213,13 @@ void LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)  	{  		filter.decrementFilterCount(); -		const BOOL passed_filter = filter.check(this); -		const BOOL passed_filter_folder = (getInventoryType() == LLInventoryType::IT_CATEGORY)  -								? filter.checkFolder(this) -								: true; - -		setPassedFilter(passed_filter, passed_filter_folder, filter_generation, filter.getStringMatchOffset(this), filter.getFilterStringSize()); +		const bool passed_filter = filter.check(this); +		setPassedFilter(passed_filter, filter_generation, filter.getStringMatchOffset(this), filter.getFilterStringSize()); +		return true; +	} +	else +	{ +		return false;  	}  } diff --git a/indra/newview/llfolderviewmodelinventory.h b/indra/newview/llfolderviewmodelinventory.h index 664addf336..890d03d1c9 100644 --- a/indra/newview/llfolderviewmodelinventory.h +++ b/indra/newview/llfolderviewmodelinventory.h @@ -53,9 +53,9 @@ public:  	virtual EInventorySortGroup getSortGroup() const = 0;  	virtual LLInventoryObject* getInventoryObject() const = 0;  	virtual void requestSort(); -	virtual void setPassedFilter(bool filtered, bool filtered_folder, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0); -	virtual void filter( LLFolderViewFilter& filter); -	virtual void filterChildItem( LLFolderViewModelItem* item, LLFolderViewFilter& filter); +	virtual void setPassedFilter(bool filtered, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0); +	virtual bool filter( LLFolderViewFilter& filter); +	virtual bool filterChildItem( LLFolderViewModelItem* item, LLFolderViewFilter& filter);  	virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const = 0;  	virtual LLToolDragAndDrop::ESource getDragSource() const = 0; diff --git a/indra/newview/llimconversation.cpp b/indra/newview/llimconversation.cpp index ec534b903d..3e23d75d28 100644 --- a/indra/newview/llimconversation.cpp +++ b/indra/newview/llimconversation.cpp @@ -94,12 +94,16 @@ BOOL LLIMConversation::postBuild()  	mTearOffBtn->setCommitCallback(boost::bind(&LLIMConversation::onTearOffClicked, this));  	mChatHistory = getChild<LLChatHistory>("chat_history"); -	mInputEditor = getChild<LLChatEntry>("chat_editor"); +	mInputEditor = getChild<LLChatEntry>("chat_editor");  	mInputEditor->setTextExpandedCallback(boost::bind(&LLIMConversation::reshapeChatHistory, this)); +	mInputEditor->setCommitOnFocusLost( FALSE ); +	mInputEditor->setPassDelete(TRUE); +	mInputEditor->setFont(LLViewerChat::getChatFont()); +  	mInputEditorTopPad = mChatHistory->getRect().mBottom - mInputEditor->getRect().mTop; -	if (!getTornOff()) +	if (!isTornOff())  	{  		setOpenPositioning(LLFloaterEnums::POSITIONING_RELATIVE);  	} @@ -221,18 +225,16 @@ bool LLIMConversation::onIMShowModesMenuItemEnable(const LLSD& userdata)  void LLIMConversation::hideOrShowTitle()  { -	bool is_hosted = getHost() != NULL; -  	const LLFloater::Params& default_params = LLFloater::getDefaultParams();  	S32 floater_header_size = default_params.header_height;  	LLView* floater_contents = getChild<LLView>("contents_view");  	LLRect floater_rect = getLocalRect(); -	S32 top_border_of_contents = floater_rect.mTop - (is_hosted? 0 : floater_header_size); +	S32 top_border_of_contents = floater_rect.mTop - (isTornOff()? floater_header_size : 0);  	LLRect handle_rect (0, floater_rect.mTop, floater_rect.mRight, top_border_of_contents);  	LLRect contents_rect (0, top_border_of_contents, floater_rect.mRight, floater_rect.mBottom);  	mDragHandle->setShape(handle_rect); -	mDragHandle->setVisible(! is_hosted); +	mDragHandle->setVisible(isTornOff());  	floater_contents->setShape(contents_rect);  } @@ -250,9 +252,8 @@ void LLIMConversation::hideAllStandardButtons()  void LLIMConversation::updateHeaderAndToolbar()  { -	bool is_hosted = getHost() != NULL; - -	if (is_hosted) +	bool is_torn_off = isTornOff(); +	if (!is_torn_off)  	{  		hideAllStandardButtons();  	} @@ -261,7 +262,7 @@ void LLIMConversation::updateHeaderAndToolbar()  	// Participant list should be visible only in torn off floaters.  	bool is_participant_list_visible = -			!is_hosted +			is_torn_off  			&& gSavedSettings.getBOOL("IMShowControlPanel")  			&& !mIsP2PChat; @@ -269,21 +270,21 @@ void LLIMConversation::updateHeaderAndToolbar()  	// Display collapse image (<<) if the floater is hosted  	// or if it is torn off but has an open control panel. -	bool is_expanded = is_hosted || is_participant_list_visible; +	bool is_expanded = !is_torn_off || is_participant_list_visible;  	mExpandCollapseBtn->setImageOverlay(getString(is_expanded ? "collapse_icon" : "expand_icon"));  	// toggle floater's drag handle and title visibility  	if (mDragHandle)  	{ -		mDragHandle->setTitleVisible(!is_hosted); +		mDragHandle->setTitleVisible(is_torn_off);  	}  	// The button (>>) should be disabled for torn off P2P conversations. -	mExpandCollapseBtn->setEnabled(is_hosted || !mIsP2PChat); +	mExpandCollapseBtn->setEnabled(!is_torn_off || !mIsP2PChat); -	mTearOffBtn->setImageOverlay(getString(is_hosted ? "tear_off_icon" : "return_icon")); +	mTearOffBtn->setImageOverlay(getString(is_torn_off? "return_icon" : "tear_off_icon")); -	mCloseBtn->setVisible(is_hosted && !mIsNearbyChat); +	mCloseBtn->setVisible(!is_torn_off && !mIsNearbyChat);  	enableDisableCallBtn(); diff --git a/indra/newview/llimconversation.h b/indra/newview/llimconversation.h index c3dff96d5d..649c200899 100644 --- a/indra/newview/llimconversation.h +++ b/indra/newview/llimconversation.h @@ -99,6 +99,10 @@ protected:  	LLParticipantList* mParticipantList;  	LLUUID mSessionID; +	LLChatHistory* mChatHistory; +	LLChatEntry* mInputEditor; +	int mInputEditorTopPad; // padding between input field and chat history +  	LLButton* mExpandCollapseBtn;  	LLButton* mTearOffBtn;  	LLButton* mCloseBtn; @@ -117,10 +121,6 @@ private:  	 */  	void reshapeChatHistory(); -	LLChatHistory* mChatHistory; -	LLChatEntry* mInputEditor; -	int mInputEditorTopPad; // padding between input field and chat history -  	LLTimer* mRefreshTimer; ///< Defines the rate at which refresh() is called.  }; diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 1b08c454b7..3399a88c9e 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -66,11 +66,9 @@ LLIMFloater::LLIMFloater(const LLUUID& session_id)    : LLIMConversation(session_id),  	mLastMessageIndex(-1),  	mDialog(IM_NOTHING_SPECIAL), -	mInputEditor(NULL),  	mSavedTitle(),  	mTypingStart(),  	mShouldSendTypingState(false), -	mChatHistory(NULL),  	mMeTyping(false),  	mOtherTyping(false),  	mTypingTimer(), @@ -80,6 +78,7 @@ LLIMFloater::LLIMFloater(const LLUUID& session_id)  	mStartConferenceInSameFloater(false)  {  	mIsNearbyChat = false; +  	initIMSession(session_id);  	setOverlapsScreenChannel(true); @@ -313,9 +312,8 @@ void LLIMFloater::initIMFloater()  //virtual  BOOL LLIMFloater::postBuild()  { -	LLIMConversation::postBuild(); +	BOOL result = LLIMConversation::postBuild(); -	mInputEditor = getChild<LLChatEntry>("chat_editor");  	mInputEditor->setMaxTextLength(1023);  	// enable line history support for instant message bar  	// XXX stinson TODO : resolve merge by adding autoreplace to text editors @@ -323,19 +321,11 @@ BOOL LLIMFloater::postBuild()  	// *TODO Establish LineEditor with autoreplace callback  	mInputEditor->setAutoreplaceCallback(boost::bind(&LLAutoReplace::autoreplaceCallback, LLAutoReplace::getInstance(), _1, _2));  #endif - -	LLFontGL* font = LLViewerChat::getChatFont(); -	mInputEditor->setFont(font);	  	mInputEditor->setFocusReceivedCallback( boost::bind(onInputEditorFocusReceived, _1, this) );  	mInputEditor->setFocusLostCallback( boost::bind(onInputEditorFocusLost, _1, this) );  	mInputEditor->setKeystrokeCallback( boost::bind(onInputEditorKeystroke, _1, this) ); -	mInputEditor->setCommitOnFocusLost( FALSE ); -	mInputEditor->setPassDelete( TRUE ); -  	mInputEditor->setCommitCallback(boost::bind(onSendMsg, _1, this)); -	 -	mChatHistory = getChild<LLChatHistory>("chat_history");  	setDocked(true); @@ -358,7 +348,7 @@ BOOL LLIMFloater::postBuild()  	LLIMFloaterContainer* im_box = LLIMFloaterContainer::getInstance();  	im_box->addConversationListItem(getTitle(), getKey(), this); -	return TRUE; +	return result;  }  void LLIMFloater::onAddButtonClicked() @@ -1004,7 +994,7 @@ void LLIMFloater::onInputEditorKeystroke(LLTextEditor* caller, void* userdata)  		// Deleting all text counts as stopping typing.  	self->setTyping(!text.empty()); -	} +}  void LLIMFloater::setTyping(bool typing)  { diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h index 7e45cf42c2..434613ff43 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -184,11 +184,8 @@ private:  	LLIMModel::LLIMSession* mSession;  	S32 mLastMessageIndex; -	LLChatHistory* mChatHistory; -  	EInstantMessage mDialog;  	LLUUID mOtherParticipantUUID; -	LLChatEntry* mInputEditor;  	bool mPositioned;  	std::string mSavedTitle; diff --git a/indra/newview/llimfloatercontainer.h b/indra/newview/llimfloatercontainer.h index b352e8a004..5154b02dd6 100644 --- a/indra/newview/llimfloatercontainer.h +++ b/indra/newview/llimfloatercontainer.h @@ -89,9 +89,9 @@ public:  	virtual bool hasChildren() const { return FALSE; }  	virtual bool potentiallyVisible() { return true; } -	virtual void filter( LLFolderViewFilter& filter) { } +	virtual bool filter( LLFolderViewFilter& filter) { return false; }  	virtual bool descendantsPassedFilter(S32 filter_generation = -1) { return true; } -	virtual void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) { } +	virtual void setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) { }  	virtual bool passedFilter(S32 filter_generation = -1) { return true; }  	// The action callbacks diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 1b3391f7ee..9403ccdabe 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -281,13 +281,6 @@ void LLInventoryPanel::draw()  	// Select the desired item (in case it wasn't loaded when the selection was requested)  	updateSelection(); -	// Nudge the filter if the clipboard state changed -	if (mClipboardState != LLClipboard::instance().getGeneration()) -	{ -		mClipboardState = LLClipboard::instance().getGeneration(); -		getFilter().setModified(LLClipboard::instance().isCutMode() ? LLInventoryFilter::FILTER_MORE_RESTRICTIVE : LLInventoryFilter::FILTER_LESS_RESTRICTIVE); -	} -	  	LLPanel::draw();  } @@ -586,7 +579,6 @@ LLUUID LLInventoryPanel::getRootFolderID()  	}  } -  // static  void LLInventoryPanel::onIdle(void *userdata)  { @@ -608,6 +600,15 @@ void LLInventoryPanel::onIdle(void *userdata)  void LLInventoryPanel::idle(void* user_data)  {  	LLInventoryPanel* panel = (LLInventoryPanel*)user_data; +	// Nudge the filter if the clipboard state changed +	if (panel->mClipboardState != LLClipboard::instance().getGeneration()) +	{ +		panel->mClipboardState = LLClipboard::instance().getGeneration(); +		panel->getFilter().setModified(LLClipboard::instance().isCutMode()  +										? LLInventoryFilter::FILTER_MORE_RESTRICTIVE  +										: LLInventoryFilter::FILTER_LESS_RESTRICTIVE); +	} +  	panel->mFolderRoot->update();  	// while dragging, update selection rendering to reflect single/multi drag status  	if (LLToolDragAndDrop::getInstance()->hasMouseCapture()) diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 3bd5f96add..b628697bbc 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -125,30 +125,24 @@ static LLChatTypeTrigger sChatTypeTriggers[] = {  LLNearbyChat::LLNearbyChat(const LLSD& key)  :	LLIMConversation(key), -	mChatBox(NULL), -	mChatHistory(NULL),  	//mOutputMonitor(NULL),  	mSpeakerMgr(NULL),  	mExpandedHeight(COLLAPSED_HEIGHT + EXPANDED_HEIGHT)  { +	mIsNearbyChat = true;  	setIsChrome(TRUE);  	mKey = LLSD(); -	mIsNearbyChat = true;  	mSpeakerMgr = LLLocalSpeakerMgr::getInstance();  }  //virtual  BOOL LLNearbyChat::postBuild()  { -	mChatBox = getChild<LLChatEntry>("chat_editor"); - -	mChatBox->setCommitCallback(boost::bind(&LLNearbyChat::onChatBoxCommit, this)); -	mChatBox->setKeystrokeCallback(boost::bind(&onChatBoxKeystroke, _1, this)); -	mChatBox->setFocusLostCallback(boost::bind(&onChatBoxFocusLost, _1, this)); -	mChatBox->setFocusReceivedCallback(boost::bind(&LLNearbyChat::onChatBoxFocusReceived, this)); -	mChatBox->setCommitOnFocusLost( FALSE ); -	mChatBox->setPassDelete(TRUE); -	mChatBox->setFont(LLViewerChat::getChatFont()); +    BOOL result = LLIMConversation::postBuild(); +	mInputEditor->setCommitCallback(boost::bind(&LLNearbyChat::onChatBoxCommit, this)); +	mInputEditor->setKeystrokeCallback(boost::bind(&onChatBoxKeystroke, _1, this)); +	mInputEditor->setFocusLostCallback(boost::bind(&onChatBoxFocusLost, _1, this)); +	mInputEditor->setFocusReceivedCallback(boost::bind(&LLNearbyChat::onChatBoxFocusReceived, this));  //	mOutputMonitor = getChild<LLOutputMonitorCtrl>("chat_zone_indicator");  //	mOutputMonitor->setVisible(FALSE); @@ -180,7 +174,6 @@ BOOL LLNearbyChat::postBuild()  	// obsolete, but may be needed for backward compatibility?  	gSavedSettings.declareS32("nearbychat_showicons_and_names", 2, "NearByChat header settings", true); -	mChatHistory = getChild<LLChatHistory>("chat_history");  	if (gSavedPerAccountSettings.getBOOL("LogShowHistory"))  	{  		loadHistory(); @@ -190,7 +183,7 @@ BOOL LLNearbyChat::postBuild()  	LLIMFloaterContainer* im_box = LLIMFloaterContainer::getInstance();  	im_box->addConversationListItem(getTitle(), LLSD(), this); -	return LLIMConversation::postBuild(); +	return result;  }  // virtual @@ -227,10 +220,6 @@ bool	LLNearbyChat::onNearbyChatCheckContextMenuItem(const LLSD& userdata)  	return false;  } -void LLNearbyChat::getAllowedRect(LLRect& rect) -{ -	rect = gViewerWindow->getWorldViewRectScaled(); -}  ////////////////////////////////////////////////////////////////////////////////  //  void LLNearbyChat::onFocusReceived() @@ -352,10 +341,8 @@ void LLNearbyChat::onTearOffClicked()  {  	LLIMConversation::onTearOffClicked(); -	LLIMFloaterContainer* im_box = LLIMFloaterContainer::getInstance(); -  	// see CHUI-170: Save torn-off state of the nearby chat between sessions -	BOOL in_the_multifloater = (getHost() == im_box); +	BOOL in_the_multifloater = !isTornOff();  	gSavedSettings.setBOOL("NearbyChatIsNotTornOff", in_the_multifloater);  } @@ -389,18 +376,12 @@ void LLNearbyChat::onOpen(const LLSD& key)  	showTranslationCheckbox(LLTranslate::isTranslationConfigured());  } -bool LLNearbyChat::applyRectControl() -{ -	setResizeLimits(getMinWidth(), EXPANDED_MIN_HEIGHT); -	return LLFloater::applyRectControl(); -} -  void LLNearbyChat::onChatFontChange(LLFontGL* fontp)  {  	// Update things with the new font whohoo -	if (mChatBox) +	if (mInputEditor)  	{ -		mChatBox->setFont(fontp); +		mInputEditor->setFont(fontp);  	}  } @@ -416,33 +397,20 @@ void LLNearbyChat::show()  	{  		openFloater(getKey());  	} -	setVisible(TRUE);  }  bool LLNearbyChat::isChatVisible() const  {  	bool isVisible = false; - -	if (isChatMultiTab()) -	{ -		LLIMFloaterContainer* im_box = LLIMFloaterContainer::getInstance(); -		// Is the IM floater container ever null? -		llassert(im_box != NULL); -		if (im_box != NULL) -		{ -			if (gSavedSettings.getBOOL("NearbyChatIsNotTornOff")) -			{ -				isVisible = (im_box->getVisible() && !im_box->isMinimized()); -			} -			else -			{ -				isVisible = (getVisible() && !isMinimized()); -			} -		} -	} -	else +	LLIMFloaterContainer* im_box = LLIMFloaterContainer::getInstance(); +	// Is the IM floater container ever null? +	llassert(im_box != NULL); +	if (im_box != NULL)  	{ -		isVisible = (getVisible() && !isMinimized()); +		isVisible = +				isChatMultiTab() && gSavedSettings.getBOOL("NearbyChatIsNotTornOff")? +						im_box->getVisible() && !im_box->isMinimized() : +						getVisible() && !isMinimized();  	}  	return isVisible; @@ -452,22 +420,11 @@ void LLNearbyChat::showHistory()  {  	openFloater();  	setResizeLimits(getMinWidth(), EXPANDED_MIN_HEIGHT); - -	bool is_torn_off = getHost() == NULL; - -	// Reshape and enable resize controls only if it's a torn off floater. -	// Otherwise all the size changes should be handled by LLIMFloaterContainer. -	if (is_torn_off) -	{ -		reshape(getRect().getWidth(), mExpandedHeight); -		enableResizeCtrls(true); -		storeRectControl(); -	}  }  std::string LLNearbyChat::getCurrentChat()  { -	return mChatBox ? mChatBox->getText() : LLStringUtil::null; +	return mInputEditor ? mInputEditor->getText() : LLStringUtil::null;  }  // virtual @@ -516,7 +473,7 @@ void LLNearbyChat::onChatBoxKeystroke(LLTextEditor* caller, void* userdata)  	LLNearbyChat* self = (LLNearbyChat *)userdata; -	LLWString raw_text = self->mChatBox->getWText(); +	LLWString raw_text = self->mInputEditor->getWText();  	// Can't trim the end, because that will cause autocompletion  	// to eat trailing spaces that might be part of a gesture. @@ -563,17 +520,17 @@ void LLNearbyChat::onChatBoxKeystroke(LLTextEditor* caller, void* userdata)  		if (LLGestureMgr::instance().matchPrefix(utf8_trigger, &utf8_out_str))  		{  			std::string rest_of_match = utf8_out_str.substr(utf8_trigger.size()); -			self->mChatBox->setText(utf8_trigger + rest_of_match); // keep original capitalization for user-entered part +			self->mInputEditor->setText(utf8_trigger + rest_of_match); // keep original capitalization for user-entered part  			// Select to end of line, starting from the character  			// after the last one the user typed. -			self->mChatBox->selectNext(rest_of_match, false); +			self->mInputEditor->selectNext(rest_of_match, false);  		}  		else if (matchChatTypeTrigger(utf8_trigger, &utf8_out_str))  		{  			std::string rest_of_match = utf8_out_str.substr(utf8_trigger.size()); -			self->mChatBox->setText(utf8_trigger + rest_of_match + " "); // keep original capitalization for user-entered part -			self->mChatBox->endOfDoc(); +			self->mInputEditor->setText(utf8_trigger + rest_of_match + " "); // keep original capitalization for user-entered part +			self->mInputEditor->endOfDoc();  		}  		//llinfos << "GESTUREDEBUG " << trigger  @@ -592,7 +549,7 @@ void LLNearbyChat::onChatBoxFocusLost(LLFocusableElement* caller, void* userdata  void LLNearbyChat::onChatBoxFocusReceived()  { -	mChatBox->setEnabled(!gDisconnected); +	mInputEditor->setEnabled(!gDisconnected);  }  EChatType LLNearbyChat::processChatTypeTriggers(EChatType type, std::string &str) @@ -629,9 +586,9 @@ EChatType LLNearbyChat::processChatTypeTriggers(EChatType type, std::string &str  void LLNearbyChat::sendChat( EChatType type )  { -	if (mChatBox) +	if (mInputEditor)  	{ -		LLWString text = mChatBox->getWText(); +		LLWString text = mInputEditor->getWText();  		LLWStringUtil::trim(text);  		LLWStringUtil::replaceChar(text,182,'\n'); // Convert paragraph symbols back into newlines.  		if (!text.empty()) @@ -664,7 +621,7 @@ void LLNearbyChat::sendChat( EChatType type )  			}  		} -		mChatBox->setText(LLStringExplicit("")); +		mInputEditor->setText(LLStringExplicit(""));  	}  	gAgent.stopTyping(); @@ -735,7 +692,7 @@ void	LLNearbyChat::addMessage(const LLChat& chat,bool archive,const LLSD &args)  void LLNearbyChat::onChatBoxCommit()  { -	if (mChatBox->getText().length() > 0) +	if (mInputEditor->getText().length() > 0)  	{  		sendChat(CHAT_TYPE_NORMAL);  	} @@ -837,15 +794,15 @@ void LLNearbyChat::startChat(const char* line)  		cb->show();  		cb->setVisible(TRUE);  		cb->setFocus(TRUE); -		cb->mChatBox->setFocus(TRUE); +		cb->mInputEditor->setFocus(TRUE);  		if (line)  		{  			std::string line_string(line); -			cb->mChatBox->setText(line_string); +			cb->mInputEditor->setText(line_string);  		} -		cb->mChatBox->endOfDoc(); +		cb->mInputEditor->endOfDoc();  	}  } @@ -857,7 +814,7 @@ void LLNearbyChat::stopChat()  	if (cb)  	{ -		cb->mChatBox->setFocus(FALSE); +		cb->mInputEditor->setFocus(FALSE);  		// stop typing animation  		gAgent.stopTyping(); diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h index a0928e67ef..7c58e3037e 100644 --- a/indra/newview/llnearbychat.h +++ b/indra/newview/llnearbychat.h @@ -39,7 +39,6 @@  #include "llpanel.h"  class LLResizeBar; -class LLChatHistory;  class LLNearbyChat  	:	public LLIMConversation @@ -73,7 +72,7 @@ public:  	void	onNearbyChatContextMenuItemClicked(const LLSD& userdata);  	bool	onNearbyChatCheckContextMenuItem(const LLSD& userdata); -	LLChatEntry* getChatBox() { return mChatBox; } +	LLChatEntry* getChatBox() { return mInputEditor; }  	std::string getCurrentChat(); @@ -98,8 +97,6 @@ protected:  	void onChatBoxCommit();  	void onChatFontChange(LLFontGL* fontp); -	/* virtual */ bool applyRectControl(); -  	/*virtual*/ void onTearOffClicked();  	static LLWString stripChannelNumber(const LLWString &mesg, S32* channel); @@ -113,7 +110,6 @@ protected:  	// Which non-zero channel did we last chat on?  	static S32 sLastSpecialChatChannel; -	LLChatEntry*			mChatBox;  	LLOutputMonitorCtrl*	mOutputMonitor;  	LLLocalSpeakerMgr*		mSpeakerMgr; @@ -121,7 +117,6 @@ protected:  private: -	void	getAllowedRect		(LLRect& rect);  	// prepare chat's params and out one message to chatHistory  	void appendMessage(const LLChat& chat, const LLSD &args = 0);  	void	onNearbySpeakers	(); @@ -130,7 +125,6 @@ private:  	LLHandle<LLView>	mPopupMenuHandle;  	std::vector<LLChat> mMessageArchive; -	LLChatHistory*		mChatHistory;  }; | 
