summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llui/llfloater.h2
-rw-r--r--indra/llui/llfolderview.cpp57
-rw-r--r--indra/llui/llfolderviewitem.cpp12
-rw-r--r--indra/llui/llfolderviewitem.h1
-rw-r--r--indra/llui/llfolderviewmodel.h20
-rw-r--r--indra/llui/lltooltip.cpp2
-rw-r--r--indra/newview/llfolderviewmodelinventory.cpp42
-rw-r--r--indra/newview/llfolderviewmodelinventory.h6
-rw-r--r--indra/newview/llimconversation.cpp31
-rw-r--r--indra/newview/llimconversation.h8
-rw-r--r--indra/newview/llimfloater.cpp18
-rw-r--r--indra/newview/llimfloater.h3
-rw-r--r--indra/newview/llimfloatercontainer.h4
-rw-r--r--indra/newview/llinventorypanel.cpp17
-rw-r--r--indra/newview/llnearbychat.cpp109
-rw-r--r--indra/newview/llnearbychat.h8
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;
};