summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llui/llfolderview.cpp86
-rw-r--r--indra/llui/llfolderview.h4
-rwxr-xr-xindra/llui/llfolderviewitem.cpp67
-rw-r--r--indra/llui/llfolderviewmodel.h6
-rw-r--r--indra/newview/llfolderviewmodelinventory.cpp54
-rw-r--r--indra/newview/llinventoryfilter.cpp9
-rw-r--r--indra/newview/llinventorypanel.cpp20
-rw-r--r--indra/newview/llinventorypanel.h1
-rw-r--r--indra/newview/llpanelobjectinventory.cpp10
-rw-r--r--indra/newview/lltexturectrl.cpp15
10 files changed, 63 insertions, 209 deletions
diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp
index 7ae79d94fe..324142f6c3 100644
--- a/indra/llui/llfolderview.cpp
+++ b/indra/llui/llfolderview.cpp
@@ -275,17 +275,6 @@ BOOL LLFolderView::canFocusChildren() const
void LLFolderView::addFolder( LLFolderViewFolder* folder)
{
LLFolderViewFolder::addFolder(folder);
-
- // TODO RN: enforce sort order of My Inventory followed by Library
- //mFolders.remove(folder);
- //if (((LLFolderViewModelItemInventory*)folder->getViewModelItem())->getUUID() == gInventory.getLibraryRootFolderID())
- //{
- // mFolders.push_back(folder);
- //}
- //else
- //{
- // mFolders.insert(mFolders.begin(), folder);
- //}
}
void LLFolderView::closeAllFolders()
@@ -793,76 +782,6 @@ void LLFolderView::removeSelectedItems()
}
}
-// TODO RN: abstract
-// open the selected item.
-void LLFolderView::openSelectedItems( void )
-{
- //TODO RN: get working again
- //if(getVisible() && getEnabled())
- //{
- // if (mSelectedItems.size() == 1)
- // {
- // mSelectedItems.front()->openItem();
- // }
- // else
- // {
- // LLMultiPreview* multi_previewp = new LLMultiPreview();
- // LLMultiProperties* multi_propertiesp = new LLMultiProperties();
-
- // selected_items_t::iterator item_it;
- // for (item_it = mSelectedItems.begin(); item_it != mSelectedItems.end(); ++item_it)
- // {
- // // IT_{OBJECT,ATTACHMENT} creates LLProperties
- // // floaters; others create LLPreviews. Put
- // // each one in the right type of container.
- // LLFolderViewModelItemInventory* listener = static_cast<LLFolderViewModelItemInventory*>((*item_it)->getViewModelItem());
- // bool is_prop = listener && (listener->getInventoryType() == LLInventoryType::IT_OBJECT || listener->getInventoryType() == LLInventoryType::IT_ATTACHMENT);
- // if (is_prop)
- // LLFloater::setFloaterHost(multi_propertiesp);
- // else
- // LLFloater::setFloaterHost(multi_previewp);
- // listener->openItem();
- // }
-
- // LLFloater::setFloaterHost(NULL);
- // // *NOTE: LLMulti* will safely auto-delete when open'd
- // // without any children.
- // multi_previewp->openFloater(LLSD());
- // multi_propertiesp->openFloater(LLSD());
- // }
- //}
- }
-
-void LLFolderView::propertiesSelectedItems( void )
-{
- //TODO RN: get working again
- //if(getVisible() && getEnabled())
- //{
- // if (mSelectedItems.size() == 1)
- // {
- // LLFolderViewItem* folder_item = mSelectedItems.front();
- // if(!folder_item) return;
- // folder_item->getViewModelItem()->showProperties();
- // }
- // else
- // {
- // LLMultiProperties* multi_propertiesp = new LLMultiProperties();
-
- // LLFloater::setFloaterHost(multi_propertiesp);
-
- // selected_items_t::iterator item_it;
- // for (item_it = mSelectedItems.begin(); item_it != mSelectedItems.end(); ++item_it)
- // {
- // (*item_it)->getViewModelItem()->showProperties();
- // }
-
- // LLFloater::setFloaterHost(NULL);
- // multi_propertiesp->openFloater(LLSD());
- // }
- //}
- }
-
-
void LLFolderView::autoOpenItem( LLFolderViewFolder* item )
{
if ((mAutoOpenItems.check() == item) ||
@@ -1151,11 +1070,6 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
mSearchString.clear();
handled = TRUE;
}
- else
- {
- LLFolderView::openSelectedItems();
- handled = TRUE;
- }
}
break;
diff --git a/indra/llui/llfolderview.h b/indra/llui/llfolderview.h
index 2ee7417240..a6e0a3b4c0 100644
--- a/indra/llui/llfolderview.h
+++ b/indra/llui/llfolderview.h
@@ -163,10 +163,6 @@ public:
// Deletion functionality
void removeSelectedItems();
- // Open the selected item
- void openSelectedItems( void );
- void propertiesSelectedItems( void );
-
void autoOpenItem(LLFolderViewFolder* item);
void closeAutoOpenedFolders();
BOOL autoOpenTest(LLFolderViewFolder* item);
diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp
index 1281d6bd66..b7165f68b7 100755
--- a/indra/llui/llfolderviewitem.cpp
+++ b/indra/llui/llfolderviewitem.cpp
@@ -267,28 +267,11 @@ void LLFolderViewItem::refresh()
mIconOpen = vmi.getIconOpen();
mIconOverlay = vmi.getIconOverlay();
- if (mRoot->useLabelSuffix())
- {
+ if (mRoot->useLabelSuffix())
+ {
mLabelStyle = vmi.getLabelStyle();
mLabelSuffix = vmi.getLabelSuffix();
-}
-
- //TODO RN: make sure this logic still fires
- //std::string searchable_label(mLabel);
- //searchable_label.append(mLabelSuffix);
- //LLStringUtil::toUpper(searchable_label);
-
- //if (mSearchableLabel.compare(searchable_label))
- //{
- // mSearchableLabel.assign(searchable_label);
- // vmi.dirtyFilter();
- // // some part of label has changed, so overall width has potentially changed, and sort order too
- // if (mParentFolder)
- // {
- // mParentFolder->requestSort();
- // mParentFolder->requestArrange();
- // }
- //}
+ }
mLabelWidthDirty = true;
vmi.dirtyFilter();
@@ -1125,22 +1108,6 @@ BOOL LLFolderViewFolder::needsArrange()
return mLastArrangeGeneration < getRoot()->getArrangeGeneration();
}
-//TODO RN: get height resetting working
-//void LLFolderViewFolder::setPassedFilter(BOOL passed, BOOL passed_folder, S32 filter_generation)
-//{
-// // if this folder is now filtered, but wasn't before
-// // (it just passed)
-// if (passed && !passedFilter(filter_generation))
-// {
-// // reset current height, because last time we drew it
-// // it might have had more visible items than now
-// mCurHeight = 0.f;
-// }
-//
-// LLFolderViewItem::setPassedFilter(passed, passed_folder, filter_generation);
-//}
-
-
// Passes selection information on to children and record selection
// information if necessary.
BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem,
@@ -1620,20 +1587,6 @@ void LLFolderViewFolder::addItem(LLFolderViewItem* item)
{
getViewModelItem()->addChild(item->getViewModelItem());
}
-
- //TODO RN - make sort bubble up as long as parent Folder doesn't have anything matching sort criteria
- //// Traverse parent folders and update creation date and resort, if necessary
- //LLFolderViewFolder* parentp = this;
- //while (parentp)
- //{
- // if (parentp->mSortFunction.isByDate())
- // {
- // // parent folder doesn't have a time stamp yet, so get it from us
- // parentp->requestSort();
- // }
-
- // parentp = parentp->getParentFolder();
- //}
}
// this is an internal method used for adding items to folders.
@@ -1664,16 +1617,16 @@ void LLFolderViewFolder::addFolder(LLFolderViewFolder* folder)
void LLFolderViewFolder::requestArrange()
{
- //if ( mLastArrangeGeneration != -1)
- {
- mLastArrangeGeneration = -1;
- // flag all items up to root
- if (mParentFolder)
+ if ( mLastArrangeGeneration != -1)
{
- mParentFolder->requestArrange();
- }
+ mLastArrangeGeneration = -1;
+ // flag all items up to root
+ if (mParentFolder)
+ {
+ mParentFolder->requestArrange();
}
}
+}
void LLFolderViewFolder::toggleOpen()
{
diff --git a/indra/llui/llfolderviewmodel.h b/indra/llui/llfolderviewmodel.h
index 7019857c0f..1b61212c0e 100644
--- a/indra/llui/llfolderviewmodel.h
+++ b/indra/llui/llfolderviewmodel.h
@@ -127,7 +127,7 @@ public:
virtual bool startDrag(std::vector<LLFolderViewModelItem*>& items) = 0;
};
-// This is am abstract base class that users of the folderview classes
+// This is an abstract base class that users of the folderview classes
// would use to bridge the folder view with the underlying data
class LLFolderViewModelItem : public LLRefCount
{
@@ -401,8 +401,8 @@ public:
virtual const FilterType& getFilter() const { return mFilter; }
virtual void setFilter(const FilterType& filter) { mFilter = filter; }
- // TODO RN: remove this and put all filtering logic in view model
- // add getStatusText and isFiltering()
+ // By default, we assume the content is available. If a network fetch mechanism is implemented for the model,
+ // this method needs to be overloaded and return the relevant fetch status.
virtual bool contentsReady() { return true; }
diff --git a/indra/newview/llfolderviewmodelinventory.cpp b/indra/newview/llfolderviewmodelinventory.cpp
index 8a4b4bae84..586965e5a0 100644
--- a/indra/newview/llfolderviewmodelinventory.cpp
+++ b/indra/newview/llfolderviewmodelinventory.cpp
@@ -29,6 +29,7 @@
#include "llinventorymodelbackgroundfetch.h"
#include "llinventorypanel.h"
#include "lltooldraganddrop.h"
+#include "llfavoritesbar.h"
//
// class LLFolderViewModelInventory
@@ -134,7 +135,6 @@ void LLFolderViewModelItemInventory::setPassedFilter(bool passed, S32 filter_gen
if (passed_filter_before != mPrevPassedAllFilters)
{
- //TODO RN: ensure this still happens, but without dependency on folderview
LLFolderViewFolder* parent_folder = mFolderViewItem->getParentFolder();
if (parent_folder)
{
@@ -236,39 +236,31 @@ const LLFolderViewModelInventory* LLInventoryPanel::getFolderViewModel() const
bool LLInventorySort::operator()(const LLFolderViewModelItemInventory* const& a, const LLFolderViewModelItemInventory* const& b) const
{
- // ignore sort order for landmarks in the Favorites folder.
- // they should be always sorted as in Favorites bar. See EXT-719
- //TODO RN: fix sorting in favorites folder
- //if (a->getSortGroup() == SG_ITEM
- // && b->getSortGroup() == SG_ITEM
- // && a->getInventoryType() == LLInventoryType::IT_LANDMARK
- // && b->getInventoryType() == LLInventoryType::IT_LANDMARK)
- //{
-
- // static const LLUUID& favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
-
- // LLUUID a_uuid = a->getParentFolder()->getUUID();
- // LLUUID b_uuid = b->getParentFolder()->getUUID();
-
- // if ((a_uuid == favorites_folder_id && b_uuid == favorites_folder_id))
- // {
- // // *TODO: mantipov: probably it is better to add an appropriate method to LLFolderViewItem
- // // or to LLInvFVBridge
- // LLViewerInventoryItem* aitem = (static_cast<const LLItemBridge*>(a))->getItem();
- // LLViewerInventoryItem* bitem = (static_cast<const LLItemBridge*>(b))->getItem();
- // if (!aitem || !bitem)
- // return false;
- // S32 a_sort = aitem->getSortField();
- // S32 b_sort = bitem->getSortField();
- // return a_sort < b_sort;
- // }
- //}
+ // Ignore sort order for landmarks in the Favorites folder.
+ // In that folder, landmarks should be always sorted as in the Favorites bar. See EXT-719
+ if (a->getSortGroup() == SG_ITEM
+ && b->getSortGroup() == SG_ITEM
+ && a->getInventoryType() == LLInventoryType::IT_LANDMARK
+ && b->getInventoryType() == LLInventoryType::IT_LANDMARK)
+ {
+ static const LLUUID& favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
+ // If both landmarks are in the Favorites folder...
+ if (gInventory.isObjectDescendentOf(a->getUUID(), favorites_folder_id) && gInventory.isObjectDescendentOf(b->getUUID(), favorites_folder_id))
+ {
+ // Get their index in that folder
+ S32 a_sort = LLFavoritesOrderStorage::instance().getSortIndex(a->getUUID());
+ S32 b_sort = LLFavoritesOrderStorage::instance().getSortIndex(b->getUUID());
+ // Note: this test is a bit overkill: since they are both in the Favorites folder, we shouldn't get negative index values...
+ if (!((a_sort < 0) && (b_sort < 0)))
+ {
+ return a_sort < b_sort;
+ }
+ }
+ }
// We sort by name if we aren't sorting by date
// OR if these are folders and we are sorting folders by name.
- bool by_name = (!mByDate
- || (mFoldersByName
- && (a->getSortGroup() != SG_ITEM)));
+ bool by_name = (!mByDate || (mFoldersByName && (a->getSortGroup() != SG_ITEM)));
if (a->getSortGroup() != b->getSortGroup())
{
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index c913269aad..92f2d33073 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -42,8 +42,6 @@
#include "llclipboard.h"
#include "lltrans.h"
-//TODO RN: fix use of static cast as much as possible
-
LLFastTimer::DeclareTimer FT_FILTER_CLIPBOARD("Filter Clipboard");
LLInventoryFilter::FilterOps::FilterOps(const Params& p)
@@ -83,7 +81,7 @@ LLInventoryFilter::LLInventoryFilter(const Params& p)
bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
{
- const LLFolderViewModelItemInventory* listener = static_cast<const LLFolderViewModelItemInventory*>(item);
+ const LLFolderViewModelItemInventory* listener = dynamic_cast<const LLFolderViewModelItemInventory*>(item);
// Clipboard cut items are *always* filtered so we need this value upfront
const BOOL passed_clipboard = (listener ? checkAgainstClipboard(listener->getUUID()) : TRUE);
@@ -122,7 +120,7 @@ bool LLInventoryFilter::check(const LLInventoryItem* item)
bool LLInventoryFilter::checkFolder(const LLFolderViewModelItem* item) const
{
- const LLFolderViewModelItemInventory* listener = static_cast<const LLFolderViewModelItemInventory*>(item);
+ const LLFolderViewModelItemInventory* listener = dynamic_cast<const LLFolderViewModelItemInventory*>(item);
if (!listener)
{
llerrs << "Folder view event listener not found." << llendl;
@@ -384,8 +382,7 @@ const std::string& LLInventoryFilter::getFilterSubString(BOOL trim) const
std::string::size_type LLInventoryFilter::getStringMatchOffset(LLFolderViewModelItem* item) const
{
- const LLFolderViewModelItemInventory* listener = static_cast<const LLFolderViewModelItemInventory*>(item);
- return mFilterSubString.size() ? listener->getSearchableName().find(mFilterSubString) : std::string::npos;
+ return mFilterSubString.size() ? item->getSearchableName().find(mFilterSubString) : std::string::npos;
}
bool LLInventoryFilter::isDefault() const
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 81e7f166e1..25dc365467 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -684,8 +684,9 @@ void LLInventoryPanel::initializeViews()
}
else
{
- buildNewViews(gInventory.getRootFolderID());
- buildNewViews(gInventory.getLibraryRootFolderID());
+ // Default case: always add "My Inventory" first, "Library" second
+ buildNewViews(gInventory.getRootFolderID()); // My Inventory
+ buildNewViews(gInventory.getLibraryRootFolderID()); // Library
}
gIdleCallbacks.addFunction(idle, this);
@@ -1354,6 +1355,21 @@ void LLInventoryPanel::doToSelected(const LLSD& userdata)
return;
}
+BOOL LLInventoryPanel::handleKeyHere( KEY key, MASK mask )
+{
+ BOOL handled = FALSE;
+ switch (key)
+ {
+ case KEY_RETURN:
+ // Open selected items if enter key hit on the inventory panel
+ if (mask == MASK_NONE)
+ {
+ LLInventoryAction::doToSelected(mInventory, mFolderRoot, "open");
+ handled = TRUE;
+ }
+ }
+ return handled;
+}
/************************************************************************/
/* Recent Inventory Panel related class */
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 9639086c11..6eb85fbad2 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -143,6 +143,7 @@ public:
// LLView methods
void draw();
+ /*virtual*/ BOOL handleKeyHere( KEY key, MASK mask );
BOOL handleHover(S32 x, S32 y, MASK mask);
BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
EDragAndDropType cargo_type,
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index a2aabb50b5..527aefe821 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -1555,6 +1555,10 @@ void LLPanelObjectInventory::reset()
mCommitCallbackRegistrar.pushScope(); // push local callbacks
+ // Reset the inventory model to show all folders by default
+ mInventoryViewModel.getFilter().setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
+
+ // Create a new folder view root
LLRect dummy_rect(0, 1, 1, 0);
LLFolderView::Params p;
p.name = "task inventory";
@@ -1566,11 +1570,7 @@ void LLPanelObjectInventory::reset()
p.view_model = &mInventoryViewModel;
p.root = NULL;
mFolders = LLUICtrlFactory::create<LLFolderView>(p);
- // this ensures that we never say "searching..." or "no items found"
- //TODO RN: make this happen by manipulating filter object directly
- LLInventoryFilter& inventoryFilter = dynamic_cast<LLInventoryFilter&>(mFolders->getFolderViewModel()->getFilter());
- inventoryFilter.setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
-
+
mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);
if (hasFocus())
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 65f0290060..007eb8e33f 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -652,26 +652,11 @@ void LLFloaterTexturePicker::draw()
{
folder_view->setPinningSelectedItem(mSelectedItemPinned);
folder_view->getViewModelItem()->dirtyFilter();
- //TODO RN: test..still works without this?
- //folder_view->arrangeFromRoot();
-
mSelectedItemPinned = TRUE;
}
}
}
-// static
-/*
-void LLFloaterTexturePicker::onSaveAnotherCopyDialog( S32 option, void* userdata )
-{
- LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
- if( 0 == option )
- {
- self->copyToInventoryFinal();
- }
-}
-*/
-
const LLUUID& LLFloaterTexturePicker::findItemID(const LLUUID& asset_id, BOOL copyable_only)
{
LLViewerInventoryCategory::cat_array_t cats;