summaryrefslogtreecommitdiff
path: root/indra/llui
diff options
context:
space:
mode:
authorGilbert Gonzales <gilbert@lindenlab.com>2012-08-02 09:45:59 -0700
committerGilbert Gonzales <gilbert@lindenlab.com>2012-08-02 09:45:59 -0700
commita87b27c41ddef15fa4027549c38b0129107ff9f6 (patch)
tree980583c52a68f94742abe157a3947e1a0a1d343c /indra/llui
parent1d6957ce09f92df6c0766162de1a84547f40e3bd (diff)
parent4cb1e766fcfcaba702c2638f4c7daa9dd17bcbd8 (diff)
merging of latest code
Diffstat (limited to 'indra/llui')
-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
6 files changed, 55 insertions, 39 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)