summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Linden <none@none>2012-06-15 13:35:39 -0700
committerRichard Linden <none@none>2012-06-15 13:35:39 -0700
commit379eec8841212665881569c69804fafd96152387 (patch)
treec650962a4e75ecd9dc10f7ce966f3fe8d5b4b26e
parent86103dd5d40a685c3ba0ad385e6585e005785e50 (diff)
CHUI-101 WIP Make LLFolderView general purpose
continuing fixing build errors renamed llfoldervieweventlistener.h to llfolderviewmodel.h
-rw-r--r--indra/newview/CMakeLists.txt2
-rwxr-xr-xindra/newview/llavataractions.cpp4
-rw-r--r--indra/newview/llfloateroutbox.cpp2
-rw-r--r--indra/newview/llfolderview.cpp38
-rw-r--r--indra/newview/llfolderview.h5
-rw-r--r--indra/newview/llfolderviewitem.cpp290
-rw-r--r--indra/newview/llfolderviewitem.h67
-rw-r--r--indra/newview/llfolderviewmodel.h (renamed from indra/newview/llfoldervieweventlistener.h)65
-rw-r--r--indra/newview/llinventorybridge.cpp104
-rw-r--r--indra/newview/llinventorybridge.h30
-rw-r--r--indra/newview/llinventoryfilter.cpp31
-rw-r--r--indra/newview/llinventoryfilter.h33
-rw-r--r--indra/newview/llinventoryfunctions.cpp2
-rw-r--r--indra/newview/llinventorypanel.cpp50
-rw-r--r--indra/newview/llinventorypanel.h86
-rw-r--r--indra/newview/llpanellandmarks.cpp40
-rw-r--r--indra/newview/llpanelmaininventory.cpp22
-rw-r--r--indra/newview/llpanelmarketplaceinbox.cpp2
-rw-r--r--indra/newview/llpanelmarketplaceoutboxinventory.cpp2
-rw-r--r--indra/newview/llpanelobjectinventory.cpp8
-rw-r--r--indra/newview/llpaneloutfitedit.cpp8
-rw-r--r--indra/newview/llplacesinventorypanel.cpp4
-rw-r--r--indra/newview/llsidepanelappearance.cpp2
-rw-r--r--indra/newview/llsidepanelinventory.cpp4
-rw-r--r--indra/newview/lltexturectrl.cpp4
25 files changed, 417 insertions, 488 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 785bf4b868..4f447fd35b 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -808,7 +808,7 @@ set(viewer_HEADER_FILES
llfloaterwindowsize.h
llfloaterworldmap.h
llfolderview.h
- llfoldervieweventlistener.h
+ llfolderviewmodel.h
llfolderviewitem.h
llfollowcam.h
llfriendcard.h
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index decfef2ae6..68dc7681cc 100755
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -778,7 +778,7 @@ bool LLAvatarActions::canShareSelectedItems(LLInventoryPanel* inv_panel /* = NUL
const std::set<LLFolderViewItem*>::const_iterator it_end = inventory_selected.end();
for (; it != it_end; ++it)
{
- LLViewerInventoryCategory* inv_cat = gInventory.getCategory((*it)->getListener()->getUUID());
+ LLViewerInventoryCategory* inv_cat = gInventory.getCategory((*it)->getItemViewModel()->getUUID());
// any category can be offered.
if (inv_cat)
{
@@ -788,7 +788,7 @@ bool LLAvatarActions::canShareSelectedItems(LLInventoryPanel* inv_panel /* = NUL
// check if inventory item can be given
LLFolderViewItem* item = *it;
if (!item) return false;
- LLInvFVBridge* bridge = dynamic_cast<LLInvFVBridge*>(item->getListener());
+ LLInvFVBridge* bridge = dynamic_cast<LLInvFVBridge*>(item->getViewModelItem());
if (bridge && bridge->canShare())
{
continue;
diff --git a/indra/newview/llfloateroutbox.cpp b/indra/newview/llfloateroutbox.cpp
index ba0f51b467..04a55b261c 100644
--- a/indra/newview/llfloateroutbox.cpp
+++ b/indra/newview/llfloateroutbox.cpp
@@ -251,7 +251,7 @@ void LLFloaterOutbox::setupOutbox(const LLUUID& outboxId)
// Set the sort order newest to oldest
- mOutboxInventoryPanel->getViewModel()->setSorter(LLInventoryFilter::SO_FOLDERS_BY_NAME);
+ mOutboxInventoryPanel->getFolderViewModel()->setSorter(LLInventoryFilter::SO_FOLDERS_BY_NAME);
mOutboxInventoryPanel->getFilter()->markDefault();
fetchOutboxContents();
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 1f48ef98f6..918e68e444 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -304,7 +304,7 @@ BOOL LLFolderView::canFocusChildren() const
BOOL LLFolderView::addFolder( LLFolderViewFolder* folder)
{
// enforce sort order of My Inventory followed by Library
- if (folder->getListener()->getUUID() == gInventory.getLibraryRootFolderID())
+ if (folder->getViewModelItem()->getUUID() == gInventory.getLibraryRootFolderID())
{
mFolders.push_back(folder);
}
@@ -366,7 +366,7 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_gen
static LLFastTimer::DeclareTimer FTM_FILTER("Filter Inventory");
-void LLFolderView::filter( LLInventoryFilter& filter )
+void LLFolderView::filter( LLFolderViewFilter& filter )
{
LLFastTimer t2(FTM_FILTER);
filter.setFilterCount(llclamp(gSavedSettings.getS32("FilterItemsPerFrame"), 1, 5000));
@@ -667,7 +667,7 @@ BOOL LLFolderView::startDrag(LLToolDragAndDrop::ESource source)
{
EDragAndDropType type = DAD_NONE;
LLUUID id = LLUUID::null;
- can_drag = can_drag && (*item_it)->getListener()->startDrag(&type, &id);
+ can_drag = can_drag && (*item_it)->getViewModelItem()->startDrag(&type, &id);
types.push_back(type);
cargo_ids.push_back(id);
@@ -947,7 +947,7 @@ void LLFolderView::onItemsRemovalConfirmation(const LLSD& notification, const LL
for(S32 i = 0; i < count; ++i)
{
- listener = items[i]->getListener();
+ listener = items[i]->getViewModelItem();
if(listener && (listeners.find(listener) == LLDynamicArray<LLFolderViewModelItemInventory*>::FAIL))
{
listeners.put(listener);
@@ -984,7 +984,7 @@ void LLFolderView::openSelectedItems( void )
// IT_{OBJECT,ATTACHMENT} creates LLProperties
// floaters; others create LLPreviews. Put
// each one in the right type of container.
- LLFolderViewModelItemInventory* listener = (*item_it)->getListener();
+ LLFolderViewModelItemInventory* listener = (*item_it)->getViewModelItem();
bool is_prop = listener && (listener->getInventoryType() == LLInventoryType::IT_OBJECT || listener->getInventoryType() == LLInventoryType::IT_ATTACHMENT);
if (is_prop)
LLFloater::setFloaterHost(multi_propertiesp);
@@ -1010,7 +1010,7 @@ void LLFolderView::propertiesSelectedItems( void )
{
LLFolderViewItem* folder_item = mSelectedItems.front();
if(!folder_item) return;
- folder_item->getListener()->showProperties();
+ folder_item->getViewModelItem()->showProperties();
}
else
{
@@ -1021,7 +1021,7 @@ void LLFolderView::propertiesSelectedItems( void )
selected_items_t::iterator item_it;
for (item_it = mSelectedItems.begin(); item_it != mSelectedItems.end(); ++item_it)
{
- (*item_it)->getListener()->showProperties();
+ (*item_it)->getViewModelItem()->showProperties();
}
LLFloater::setFloaterHost(NULL);
@@ -1124,7 +1124,7 @@ BOOL LLFolderView::canCopy() const
for (selected_items_t::const_iterator selected_it = mSelectedItems.begin(); selected_it != mSelectedItems.end(); ++selected_it)
{
const LLFolderViewItem* item = *selected_it;
- if (!item->getListener()->isItemCopyable())
+ if (!item->getViewModelItem()->isItemCopyable())
{
return FALSE;
}
@@ -1144,7 +1144,7 @@ void LLFolderView::copy()
selected_items_t::iterator item_it;
for (item_it = mSelectedItems.begin(); item_it != mSelectedItems.end(); ++item_it)
{
- listener = (*item_it)->getListener();
+ listener = (*item_it)->getViewModelItem();
if(listener)
{
listener->copyToClipboard();
@@ -1164,7 +1164,7 @@ BOOL LLFolderView::canCut() const
for (selected_items_t::const_iterator selected_it = mSelectedItems.begin(); selected_it != mSelectedItems.end(); ++selected_it)
{
const LLFolderViewItem* item = *selected_it;
- const LLFolderViewModelItemInventory* listener = item->getListener();
+ const LLFolderViewModelItemInventory* listener = item->getViewModelItem();
if (!listener || !listener->isItemRemovable())
{
@@ -1185,7 +1185,7 @@ void LLFolderView::cut()
selected_items_t::iterator item_it;
for (item_it = mSelectedItems.begin(); item_it != mSelectedItems.end(); ++item_it)
{
- listener = (*item_it)->getListener();
+ listener = (*item_it)->getViewModelItem();
if(listener)
{
listener->cutToClipboard();
@@ -1210,11 +1210,11 @@ BOOL LLFolderView::canPaste() const
{
// *TODO: only check folders and parent folders of items
const LLFolderViewItem* item = (*item_it);
- const LLFolderViewModelItemInventory* listener = item->getListener();
+ const LLFolderViewModelItemInventory* listener = item->getViewModelItem();
if(!listener || !listener->isClipboardPasteable())
{
const LLFolderViewFolder* folderp = item->getParentFolder();
- listener = folderp->getListener();
+ listener = folderp->getViewModelItem();
if (!listener || !listener->isClipboardPasteable())
{
return FALSE;
@@ -1238,7 +1238,7 @@ void LLFolderView::paste()
for (selected_it = mSelectedItems.begin(); selected_it != mSelectedItems.end(); ++selected_it)
{
LLFolderViewItem* item = *selected_it;
- LLFolderViewModelItemInventory* listener = item->getListener();
+ LLFolderViewModelItemInventory* listener = item->getViewModelItem();
if (listener->getInventoryType() != LLInventoryType::IT_CATEGORY)
{
item = item->getParentFolder();
@@ -1271,8 +1271,8 @@ void LLFolderView::startRenamingSelectedItem( void )
{
item = mSelectedItems.front();
}
- if(getVisible() && getEnabled() && (count == 1) && item && item->getListener() &&
- item->getListener()->isItemRenameable())
+ if(getVisible() && getEnabled() && (count == 1) && item && item->getViewModelItem() &&
+ item->getViewModelItem()->isItemRenameable())
{
mRenameItem = item;
@@ -1581,7 +1581,7 @@ BOOL LLFolderView::canDoDelete() const
for (selected_items_t::const_iterator item_it = mSelectedItems.begin(); item_it != mSelectedItems.end(); ++item_it)
{
- if (!(*item_it)->getListener()->isItemRemovable())
+ if (!(*item_it)->getViewModelItem()->isItemRemovable())
{
return FALSE;
}
@@ -1766,7 +1766,7 @@ BOOL LLFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
// when drop is not handled by child, it should be handled
// by the folder which is the hierarchy root.
if (!handled
- && getListener()->getUUID().notNull())
+ && getViewModelItem()->getUUID().notNull())
{
handled = LLFolderViewFolder::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
}
@@ -1930,7 +1930,7 @@ bool LLFolderView::doToSelected(LLInventoryModel* model, const LLSD& userdata)
{
LLFolderViewItem* folder_item = *set_iter;
if(!folder_item) continue;
- LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
+ LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getViewModelItem();
if(!bridge) continue;
bridge->performAction(model, action);
}
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 37005f080f..9b8a629387 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -111,7 +111,7 @@ public:
virtual LLFolderView* getRoot() { return this; }
- LLFolderViewModelInterface* getViewModel() { return mViewModel; }
+ LLFolderViewModelInterface* getFolderViewModel() { return mViewModel; }
void setFilterPermMask(PermissionMask filter_perm_mask);
@@ -272,8 +272,6 @@ protected:
void onItemsRemovalConfirmation(const LLSD& notification, const LLSD& response);
- LLInventorySort& getSortFunction() { return mSortFunction; }
-
protected:
LLHandle<LLView> mPopupMenuHandle;
@@ -318,7 +316,6 @@ protected:
LLPanel* mParentPanel;
- LLInventorySort mSortFunction;
LLFolderViewModelInterface* mViewModel;
/**
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index 13b721fa23..0a3c03e868 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -30,10 +30,9 @@
// viewer includes
#include "llfolderview.h" // Items depend extensively on LLFolderViews
#include "llfolderview.h"
-#include "llfoldervieweventlistener.h"
+#include "llfolderviewmodel.h"
#include "llviewerfoldertype.h"
#include "llinventorybridge.h" // for LLItemBridge in LLInventorySort::operator()
-#include "llinventoryfilter.h"
#include "llinventoryfunctions.h"
#include "llinventorymodelbackgroundfetch.h"
#include "llpanel.h"
@@ -120,7 +119,8 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
mItemHeight(p.item_height),
mPassedFilter(FALSE),
mLastFilterGeneration(-1),
- mStringMatchOffset(std::string::npos),
+ //TODO RN: create interface for string highlighting
+ //mStringMatchOffset(std::string::npos),
mControlLabelRotation(0.f),
mDragAndDropTarget(FALSE),
mLabel(p.name),
@@ -218,7 +218,7 @@ LLFolderViewItem* LLFolderViewItem::getPreviousOpenNode(BOOL include_children)
BOOL LLFolderViewItem::potentiallyVisible()
{
return getFiltered() // we've passed the filter
- || getLastFilterGeneration() < getRoot()->getFilter()->getFirstSuccessGeneration()); // or we don't know yet
+ || getLastFilterGeneration() < getRoot()->getFilter()->getFirstSuccessGeneration(); // or we don't know yet
}
BOOL LLFolderViewItem::getFiltered()
@@ -244,45 +244,17 @@ void LLFolderViewItem::setIcon(LLUIImagePtr icon)
void LLFolderViewItem::refresh()
{
- if(!getListener()) return;
+ if(!getViewModelItem()) return;
- mLabel = getListener()->getDisplayName();
- LLFolderType::EType preferred_type = getListener()->getPreferredType();
+ mLabel = getViewModelItem()->getDisplayName();
- // *TODO: to be removed when database supports multi language. This is a
- // temporary attempt to display the inventory folder in the user locale.
- // mantipov: *NOTE: be sure this code is synchronized with LLFriendCardsManager::findChildFolderUUID
- // it uses the same way to find localized string
-
- // HACK: EXT - 6028 ([HARD CODED]? Inventory > Library > "Accessories" folder)
- // Translation of Accessories folder in Library inventory folder
- bool accessories = false;
- if(mLabel == std::string("Accessories"))
- {
- //To ensure that Accessories folder is in Library we have to check its parent folder.
- //Due to parent LLFolderViewFloder is not set to this item yet we have to check its parent via Inventory Model
- LLInventoryCategory* cat = gInventory.getCategory(getListener()->getUUID());
- if(cat)
- {
- const LLUUID& parent_folder_id = cat->getParentUUID();
- accessories = (parent_folder_id == gInventory.getLibraryRootFolderID());
- }
- }
-
- //"Accessories" inventory category has folder type FT_NONE. So, this folder
- //can not be detected as protected with LLFolderType::lookupIsProtectedType
- if (accessories || LLFolderType::lookupIsProtectedType(preferred_type))
- {
- LLTrans::findString(mLabel, "InvFolder " + mLabel);
- };
-
- setToolTip(mLabel);
- setIcon(getListener()->getIcon());
- if (mRoot->useLabelSuffix())
- {
- mLabelStyle = getListener()->getLabelStyle();
- mLabelSuffix = getListener()->getLabelSuffix();
-}
+ setToolTip(mLabel);
+ setIcon(getViewModelItem()->getIcon());
+ if (mRoot->useLabelSuffix())
+ {
+ mLabelStyle = getViewModelItem()->getLabelStyle();
+ mLabelSuffix = getViewModelItem()->getLabelSuffix();
+ }
std::string searchable_label(mLabel);
searchable_label.append(mLabelSuffix);
@@ -381,7 +353,6 @@ BOOL LLFolderViewItem::addToFolder(LLFolderViewFolder* folder)
return FALSE;
}
mParentFolder = folder;
- root->addItemID(getListener()->getUUID(), this);
return folder->addItem(this);
}
@@ -420,7 +391,7 @@ S32 LLFolderViewItem::getItemHeight()
return mItemHeight;
}
-void LLFolderViewItem::filter( LLInventoryFilter& filter)
+void LLFolderViewItem::filter( LLFolderViewFilter& filter)
{
const BOOL previous_passed_filter = mPassedFilter;
const BOOL passed_filter = filter.check(this);
@@ -435,7 +406,8 @@ void LLFolderViewItem::filter( LLInventoryFilter& filter)
}
setFiltered(passed_filter, filter.getCurrentGeneration());
- mStringMatchOffset = filter.getStringMatchOffset(this);
+ //TODO RN: create interface for string highlighting
+ //mStringMatchOffset = filter.getStringMatchOffset(this);
filter.decrementFilterCount();
if (getRoot()->getDebugFilters())
@@ -498,9 +470,9 @@ void LLFolderViewItem::selectItem(void)
{
if (mIsSelected == FALSE)
{
- if (getListener())
+ if (getViewModelItem())
{
- getListener()->selectItem();
+ getViewModelItem()->selectItem();
}
mIsSelected = TRUE;
}
@@ -508,9 +480,9 @@ void LLFolderViewItem::selectItem(void)
BOOL LLFolderViewItem::isMovable()
{
- if( getListener() )
+ if( getViewModelItem() )
{
- return getListener()->isItemMovable();
+ return getViewModelItem()->isItemMovable();
}
else
{
@@ -520,9 +492,9 @@ BOOL LLFolderViewItem::isMovable()
BOOL LLFolderViewItem::isRemovable()
{
- if( getListener() )
+ if( getViewModelItem() )
{
- return getListener()->isItemRemovable();
+ return getViewModelItem()->isItemRemovable();
}
else
{
@@ -548,9 +520,9 @@ BOOL LLFolderViewItem::remove()
{
return FALSE;
}
- if(getListener())
+ if(getViewModelItem())
{
- return getListener()->removeItem();
+ return getViewModelItem()->removeItem();
}
return TRUE;
}
@@ -558,25 +530,17 @@ BOOL LLFolderViewItem::remove()
// Build an appropriate context menu for the item.
void LLFolderViewItem::buildContextMenu(LLMenuGL& menu, U32 flags)
{
- if(getListener())
+ if(getViewModelItem())
{
- getListener()->buildContextMenu(menu, flags);
+ getViewModelItem()->buildContextMenu(menu, flags);
}
}
void LLFolderViewItem::openItem( void )
{
- if( getListener() )
+ if( getViewModelItem() )
{
- getListener()->openItem();
- }
-}
-
-void LLFolderViewItem::preview( void )
-{
- if (getListener())
- {
- getListener()->previewItem();
+ getViewModelItem()->openItem();
}
}
@@ -584,9 +548,9 @@ void LLFolderViewItem::rename(const std::string& new_name)
{
if( !new_name.empty() )
{
- if( getListener() )
+ if( getViewModelItem() )
{
- getListener()->renameItem(new_name);
+ getViewModelItem()->renameItem(new_name);
if(mParentFolder)
{
@@ -601,19 +565,13 @@ const std::string& LLFolderViewItem::getSearchableLabel() const
return mSearchableLabel;
}
-LLViewerInventoryItem * LLFolderViewItem::getInventoryItem(void)
-{
- if (!getListener()) return NULL;
- return gInventory.getItem(getListener()->getUUID());
-}
-
const std::string& LLFolderViewItem::getName( void ) const
{
- if(getListener())
+ if(getViewModelItem())
{
- return getListener()->getName();
+ return getViewModelItem()->getName();
}
- return z;
+ return LLStringUtil::null;
}
// LLView functionality
@@ -689,9 +647,9 @@ BOOL LLFolderViewItem::handleHover( S32 x, S32 y, MASK mask )
// *TODO: push this into listener and remove
// dependency on llagent
- if (getListener())
+ if (getViewModelItem())
{
- src = getListener()->getDragSource();
+ src = getViewModelItem()->getDragSource();
}
else
{
@@ -701,7 +659,7 @@ BOOL LLFolderViewItem::handleHover( S32 x, S32 y, MASK mask )
can_drag = root->startDrag(src);
if (can_drag)
{
- // if (getListener()) getListener()->startDrag();
+ // if (getViewModelItem()) getViewModelItem()->startDrag();
// RN: when starting drag and drop, clear out last auto-open
root->autoOpenTest(NULL);
root->setShowSelectionContext(TRUE);
@@ -738,7 +696,10 @@ BOOL LLFolderViewItem::handleHover( S32 x, S32 y, MASK mask )
BOOL LLFolderViewItem::handleDoubleClick( S32 x, S32 y, MASK mask )
{
- preview();
+ if (getViewModelItem())
+ {
+ getViewModelItem()->openItem();
+ }
return TRUE;
}
@@ -790,9 +751,9 @@ BOOL LLFolderViewItem::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
{
BOOL accepted = FALSE;
BOOL handled = FALSE;
- if(getListener())
+ if(getViewModelItem())
{
- accepted = getListener()->dragOrDrop(mask,drop,cargo_type,cargo_data, tooltip_msg);
+ accepted = getViewModelItem()->dragOrDrop(mask,drop,cargo_type,cargo_data, tooltip_msg);
handled = accepted;
if (accepted)
{
@@ -838,15 +799,12 @@ void LLFolderViewItem::draw()
const S32 FOCUS_LEFT = 1;
const LLFontGL* font = getLabelFontForStyle(mLabelStyle);
- getListener()->update();
+ getViewModelItem()->update();
//--------------------------------------------------------------------------------//
// Draw open folder arrow
//
- const bool up_to_date = getListener() && getListener()->isUpToDate();
- const bool possibly_has_children = ((up_to_date && hasVisibleChildren()) // we fetched our children and some of them have passed the filter...
- || (!up_to_date && getListener() && getListener()->hasChildren())); // ...or we know we have children but haven't fetched them (doesn't obey filter)
- if (possibly_has_children)
+ if (hasVisibleChildren() || getViewModelItem()->hasChildren())
{
LLUIImage* arrow_image = default_params.folder_arrow_image;
gl_draw_scaled_rotated_image(
@@ -943,25 +901,27 @@ void LLFolderViewItem::draw()
mDragAndDropTarget = FALSE;
}
- const LLViewerInventoryItem *item = getInventoryItem();
- const BOOL highlight_link = mIconOverlay && item && item->getIsLinkType();
- //--------------------------------------------------------------------------------//
- // Draw open icon
- //
- const S32 icon_x = mIndentation + ARROW_SIZE + TEXT_PAD;
- if (!mIconOpen.isNull() && (llabs(mControlLabelRotation) > 80)) // For open folders
- {
- mIconOpen->draw(icon_x, getRect().getHeight() - mIconOpen->getHeight() - TOP_PAD + 1);
- }
- else if (mIcon)
- {
- mIcon->draw(icon_x, getRect().getHeight() - mIcon->getHeight() - TOP_PAD + 1);
- }
+ //TODO RN: implement this in terms of getIcon() and getIconOverlay()
- if (highlight_link)
- {
- mIconOverlay->draw(icon_x, getRect().getHeight() - mIcon->getHeight() - TOP_PAD + 1);
- }
+ //const LLViewerInventoryItem *item = getInventoryItem();
+ //const BOOL highlight_link = mIconOverlay && item && item->getIsLinkType();
+ ////--------------------------------------------------------------------------------//
+ //// Draw open icon
+ ////
+ //const S32 icon_x = mIndentation + ARROW_SIZE + TEXT_PAD;
+ //if (!mIconOpen.isNull() && (llabs(mControlLabelRotation) > 80)) // For open folders
+ // {
+ // mIconOpen->draw(icon_x, getRect().getHeight() - mIconOpen->getHeight() - TOP_PAD + 1);
+ //}
+ //else if (mIcon)
+ //{
+ // mIcon->draw(icon_x, getRect().getHeight() - mIcon->getHeight() - TOP_PAD + 1);
+ // }
+
+ //if (highlight_link)
+ //{
+ // mIconOverlay->draw(icon_x, getRect().getHeight() - mIcon->getHeight() - TOP_PAD + 1);
+ //}
//--------------------------------------------------------------------------------//
// Exit if no label to draw
@@ -972,8 +932,9 @@ void LLFolderViewItem::draw()
}
LLColor4 color = (mIsSelected && filled) ? sHighlightFgColor : sFgColor;
- if (highlight_link) color = sLinkColor;
- if (in_library) color = sLibraryColor;
+ //TODO RN: implement this in terms of getColor()
+ //if (highlight_link) color = sLinkColor;
+ //if (getViewModelItem() && gInventory.isObjectDescendentOf(getViewModelItem()->getUUID(), gInventory.getLibraryRootFolderID())) color = sLibraryColor;
F32 right_x = 0;
F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD;
@@ -984,7 +945,7 @@ void LLFolderViewItem::draw()
//
if (getRoot()->getDebugFilters())
{
- if (!getFiltered() && !possibly_has_children)
+ if (!getFiltered() && !getViewModelItem()->hasChildren())
{
color.mV[VALPHA] *= 0.5f;
}
@@ -1016,7 +977,7 @@ void LLFolderViewItem::draw()
//--------------------------------------------------------------------------------//
// Highlight string match
//
- RN: expose interface for highlighting
+ //TODO RN: expose interface for highlighting
//if (mStringMatchOffset != std::string::npos)
//{
// // don't draw backgrounds for zero-length strings
@@ -1098,7 +1059,7 @@ static LLFastTimer::DeclareTimer FTM_ARRANGE("Arrange");
S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation)
{
// sort before laying out contents
- getRoot->getViewModel()->sort(this);
+ getRoot()->getFolderViewModel()->sort(this);
LLFastTimer t2(FTM_ARRANGE);
@@ -1122,8 +1083,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation)
for (folders_t::iterator fit = mFolders.begin(); fit != mFolders.end(); ++fit)
{
LLFolderViewFolder* folderp = (*fit);
- found = ( folderp->getListener()
- && (folderp->getFiltered(filter_generation)
+ found = ( (folderp->getFiltered(filter_generation)
|| (folderp->getFilteredFolder(filter_generation)
&& folderp->hasFilteredDescendants(filter_generation))));
if (found)
@@ -1164,10 +1124,9 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation)
}
else
{
- folderp->setVisible( folderp->getListener()
- && (folderp->getFiltered(filter_generation)
+ folderp->setVisible( folderp->getFiltered(filter_generation)
|| (folderp->getFilteredFolder(filter_generation)
- && folderp->hasFilteredDescendants(filter_generation)))); // passed filter or has descendants that passed filter
+ && folderp->hasFilteredDescendants(filter_generation))); // passed filter or has descendants that passed filter
}
if (folderp->getVisible())
@@ -1277,7 +1236,7 @@ BOOL LLFolderViewFolder::needsArrange()
void LLFolderViewFolder::requestSort()
{
- getRoot()->getViewModel()->requestSort(this);
+ getRoot()->getFolderViewModel()->requestSort(this);
}
void LLFolderViewFolder::setCompletedFilterGeneration(S32 generation, BOOL recurse_up)
@@ -1293,7 +1252,7 @@ void LLFolderViewFolder::setCompletedFilterGeneration(S32 generation, BOOL recur
}
}
-void LLFolderViewFolder::filter( LLInventoryFilter& filter)
+void LLFolderViewFolder::filter( LLFolderViewFilter& filter)
{
S32 filter_generation = filter.getCurrentGeneration();
// if failed to pass filter newer than must_pass_generation
@@ -1301,7 +1260,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
// check against items that have passed the filter
S32 must_pass_generation = filter.getFirstRequiredGeneration();
- bool autoopen_folders = (filter.hasFilterString());
+ bool autoopen_folders = filter.showAllResults();
// if we have already been filtered against this generation, skip out
if (getCompletedFilterGeneration() >= filter_generation)
@@ -1317,7 +1276,8 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
{
// go ahead and flag this folder as done
mLastFilterGeneration = filter_generation;
- mStringMatchOffset = std::string::npos;
+ //TODO RN: create interface for string highlighting
+ //mStringMatchOffset = std::string::npos;
}
else // filter self only on first pass through
{
@@ -1351,15 +1311,6 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
return;
}
- // when applying a filter, matching folders get their contents downloaded first
- if (filter.isNotDefault()
- && getFiltered(filter.getFirstSuccessGeneration())
- && (getListener()
- && !gInventory.isCategoryComplete(getListener()->getUUID())))
- {
- LLInventoryModelBackgroundFetch::instance().start(getListener()->getUUID());
- }
-
// now query children
for (folders_t::iterator iter = mFolders.begin();
iter != mFolders.end();
@@ -1449,7 +1400,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
}
}
-void LLFolderViewFolder::filterFolder(LLInventoryFilter& filter)
+void LLFolderViewFolder::filterFolder(LLFolderViewFilter& filter)
{
const BOOL previous_passed_filter = mPassedFolderFilter;
const BOOL passed_filter = filter.checkFolder(this);
@@ -1944,9 +1895,9 @@ void LLFolderViewFolder::extractItem( LLFolderViewItem* item )
BOOL LLFolderViewFolder::isMovable()
{
- if( getListener() )
+ if( getViewModelItem() )
{
- if( !(getListener()->isItemMovable()) )
+ if( !(getViewModelItem()->isItemMovable()) )
{
return FALSE;
}
@@ -1977,9 +1928,9 @@ BOOL LLFolderViewFolder::isMovable()
BOOL LLFolderViewFolder::isRemovable()
{
- if( getListener() )
+ if( getViewModelItem() )
{
- if( !(getListener()->isItemRemovable()) )
+ if( !(getViewModelItem()->isItemRemovable()) )
{
return FALSE;
}
@@ -2023,7 +1974,7 @@ BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
requestArrange();
requestSort();
- FIXME: RN - make sort bubble up as long as parent Folder doesn't have anything matching sort criteria
+ //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)
@@ -2052,16 +2003,7 @@ BOOL LLFolderViewFolder::addFolder(LLFolderViewFolder* folder)
// rearrange all descendants too, as our indentation level might have changed
folder->requestArrange(TRUE);
requestSort();
- if (getRoot()->getSortFunction().isByDate())
- {
- LLFolderViewFolder* parentp = getParentFolder();
- while(parentp)
- {
- // parent folder doesn't have a time stamp yet, so get it from us
- parentp->requestSort();
- parentp = parentp->getParentFolder();
- }
- }
+
return TRUE;
}
@@ -2100,15 +2042,15 @@ void LLFolderViewFolder::setOpenArrangeRecursively(BOOL openitem, ERecurseType r
{
BOOL was_open = isOpen();
mIsOpen = openitem;
- if (getListener())
+ if (getViewModelItem())
{
if(!was_open && openitem)
{
- getListener()->openItem();
+ getViewModelItem()->openItem();
}
else if(was_open && !openitem)
{
- getListener()->closeItem();
+ getViewModelItem()->closeItem();
}
}
@@ -2229,7 +2171,7 @@ BOOL LLFolderViewFolder::handleDragAndDropToThisFolder(MASK mask,
EAcceptance* accept,
std::string& tooltip_msg)
{
- BOOL accepted = getListener() && getListener()->dragOrDrop(mask,drop,c_type,cargo_data, tooltip_msg);
+ BOOL accepted = getViewModelItem() && getViewModelItem()->dragOrDrop(mask,drop,cargo_type,cargo_data, tooltip_msg);
if (accepted)
{
@@ -2253,9 +2195,6 @@ BOOL LLFolderViewFolder::handleDragAndDropToThisFolder(MASK mask,
BOOL LLFolderViewFolder::handleRightMouseDown( S32 x, S32 y, MASK mask )
{
BOOL handled = FALSE;
- // fetch contents of this folder, as context menu can depend on contents
- // still, user would have to open context menu again to see the changes
- gInventory.fetchDescendentsOf(getListener()->getUUID());
if( isOpen() )
{
@@ -2311,11 +2250,11 @@ BOOL LLFolderViewFolder::handleMouseDown( S32 x, S32 y, MASK mask )
BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )
{
/* Disable outfit double click to wear
- const LLUUID &cat_uuid = getListener()->getUUID();
+ const LLUUID &cat_uuid = getViewModelItem()->getUUID();
const LLViewerInventoryCategory *cat = gInventory.getCategory(cat_uuid);
if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT)
{
- getListener()->performAction(NULL, NULL,"replaceoutfit");
+ getViewModelItem()->performAction(NULL, NULL,"replaceoutfit");
return TRUE;
}
*/
@@ -2594,30 +2533,31 @@ bool LLInventorySort::operator()(const LLFolderViewModelItemInventory* const& a,
{
// ignore sort order for landmarks in the Favorites folder.
// they should be always sorted as in Favorites bar. See EXT-719
- if (a->getSortGroup() == SG_ITEM
- && b->getSortGroup() == SG_ITEM
- && a->getInventoryType() == LLInventoryType::IT_LANDMARK
- && b->getInventoryType() == LLInventoryType::IT_LANDMARK)
- {
+ //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);
+ // static const LLUUID& favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
- LLUUID a_uuid = a->getParentFolder()->getUUID();
- LLUUID b_uuid = b->getParentFolder()->getUUID();
+ // 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;
- }
- }
+ // 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;
+ // }
+ //}
// We sort by name if we aren't sorting by date
// OR if these are folders and we are sorting folders by name.
@@ -2645,7 +2585,7 @@ bool LLInventorySort::operator()(const LLFolderViewModelItemInventory* const& a,
if (by_name)
{
- S32 compare = LLStringUtil::compareDict(a->getLabel(), b->getLabel());
+ S32 compare = LLStringUtil::compareDict(a->getDisplayName(), b->getDisplayName());
if (0 == compare)
{
return (a->getCreationDate() > b->getCreationDate());
@@ -2661,7 +2601,7 @@ bool LLInventorySort::operator()(const LLFolderViewModelItemInventory* const& a,
time_t second_create = b->getCreationDate();
if (first_create == second_create)
{
- return (LLStringUtil::compareDict(a->getLabel(), b->getLabel()) < 0);
+ return (LLStringUtil::compareDict(a->getDisplayName(), b->getDisplayName()) < 0);
}
else
{
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index b7588223da..7bcc9dd0a2 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -31,11 +31,10 @@
#include "lluiimage.h"
class LLFolderView;
-class LLFolderViewModelItemInventory;
+class LLFolderViewModelItem;
class LLFolderViewFolder;
class LLFolderViewFunctor;
-class LLInventoryFilter;
-class LLViewerInventoryItem;
+class LLFolderViewFilter;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLFolderViewItem
@@ -57,8 +56,8 @@ public:
icon_overlay, // for links
folder_arrow_image,
selection_image;
- Optional<LLFolderView*> root;
- Mandatory<LLFolderViewModelItemInventory*> listener;
+ Optional<LLFolderView*> root;
+ Mandatory<LLFolderViewModelItem*> listener;
Optional<S32> folder_indentation, // pixels
item_height,
@@ -98,7 +97,7 @@ protected:
S32 mLabelWidth;
bool mLabelWidthDirty;
LLFolderViewFolder* mParentFolder;
- LLFolderViewModelItemInventory* mListener;
+ LLFolderViewModelItem* mListener;
BOOL mIsCurSelection;
BOOL mSelectPending;
LLFontGL::StyleFlags mLabelStyle;
@@ -112,7 +111,8 @@ protected:
S32 mItemHeight;
BOOL mPassedFilter;
S32 mLastFilterGeneration;
- std::string::size_type mStringMatchOffset;
+ //TODO RN: create interface for string highlighting
+ //std::string::size_type mStringMatchOffset;
F32 mControlLabelRotation;
LLFolderView* mRoot;
BOOL mDragAndDropTarget;
@@ -159,8 +159,8 @@ public:
virtual S32 arrange( S32* width, S32* height, S32 filter_generation );
virtual S32 getItemHeight();
- // applies filters to control visibility of inventory items
- virtual void filter( LLInventoryFilter& filter);
+ // applies filters to control visibility of items
+ virtual void filter( LLFolderViewFilter& filter);
// updates filter serial number and optionally propagated value up to root
S32 getLastFilterGeneration() { return mLastFilterGeneration; }
@@ -230,8 +230,8 @@ public:
LLFolderViewItem* getNextOpenNode( BOOL include_children = TRUE );
LLFolderViewItem* getPreviousOpenNode( BOOL include_children = TRUE );
- const LLFolderViewModelItemInventory* getListener( void ) const { return mListener; }
- LLFolderViewModelItemInventory* getListener( void ) { return mListener; }
+ const LLFolderViewModelItem* getViewModelItem( void ) const { return mListener; }
+ LLFolderViewModelItem* getViewModelItem( void ) { return mListener; }
// just rename the object.
void rename(const std::string& new_name);
@@ -277,41 +277,10 @@ public:
EAcceptance* accept,
std::string& tooltip_msg);
- // Gets the inventory item if it exists (null otherwise)
- LLViewerInventoryItem * getInventoryItem(void);
- // open
- virtual void preview(void);
-
private:
static std::map<U8, LLFontGL*> sFonts; // map of styles to fonts
};
-class LLInventorySort
-{
-public:
- LLInventorySort(U32 order)
- : mSortOrder(0),
- mByDate(false),
- mSystemToTop(false),
- mFoldersByName(false)
- {
- mSortOrder = order;
- mByDate = (order & LLInventoryFilter::SO_DATE);
- mSystemToTop = (order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP);
- mFoldersByName = (order & LLInventoryFilter::SO_FOLDERS_BY_NAME);
- }
-
- bool isByDate() { return mByDate; }
- U32 getSortOrder() { return mSortOrder; }
-
- bool operator()(const LLFolderViewModelItemInventory* const& a, const LLFolderViewModelItemInventory* const& b);
-private:
- U32 mSortOrder;
- bool mByDate;
- bool mSystemToTop;
- bool mFoldersByName;
-};
-
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLFolderViewFolder
//
@@ -379,8 +348,8 @@ public:
BOOL hasFilteredDescendants(S32 filter_generation);
BOOL hasFilteredDescendants();
- // applies filters to control visibility of inventory items
- virtual void filter( LLInventoryFilter& filter);
+ // applies filters to control visibility of items
+ virtual void filter( LLFolderViewFilter& filter);
virtual void setFiltered(BOOL filtered, S32 filter_generation);
virtual BOOL getFiltered();
virtual BOOL getFiltered(S32 filter_generation);
@@ -388,7 +357,7 @@ public:
virtual void dirtyFilter();
// folder-specific filtering (filter status propagates top down instead of bottom up)
- void filterFolder(LLInventoryFilter& filter);
+ void filterFolder(LLFolderViewFilter& filter);
void setFilteredFolder(bool filtered, S32 filter_generation);
bool getFilteredFolder(S32 filter_generation);
@@ -496,12 +465,12 @@ public:
virtual void draw();
- folders_t::iterator getFoldersBegin() const { return mFolders.begin(); }
- folders_t::iterator getFoldersEnd() const { return mFolders.end(); }
+ folders_t::iterator getFoldersBegin() { return mFolders.begin(); }
+ folders_t::iterator getFoldersEnd() { return mFolders.end(); }
folders_t::size_type getFoldersCount() const { return mFolders.size(); }
- items_t::iterator getItemsBegin() const { return mItems.begin(); }
- items_t::iterator getItemsEnd() const { return mItems.end(); }
+ items_t::const_iterator getItemsBegin() const { return mItems.begin(); }
+ items_t::const_iterator getItemsEnd() const { return mItems.end(); }
items_t::size_type getItemsCount() const { return mItems.size(); }
LLFolderViewFolder* getCommonAncestor(LLFolderViewItem* item_a, LLFolderViewItem* item_b, bool& reverse);
diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfolderviewmodel.h
index 76e051d12f..b81a81f837 100644
--- a/indra/newview/llfoldervieweventlistener.h
+++ b/indra/newview/llfolderviewmodel.h
@@ -1,5 +1,5 @@
/**
- * @file llfoldervieweventlistener.h
+ * @file llfolderviewmodel.h
*
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
@@ -28,6 +28,7 @@
#include "lldarray.h" // *TODO: convert to std::vector
#include "llfoldertype.h"
#include "llfontgl.h" // just for StyleFlags enum
+#include "llfolderviewitem.h"
#include "llinventorytype.h"
#include "llpermissionsflags.h"
#include "llpointer.h"
@@ -55,6 +56,16 @@ class LLFolderViewFolder;
class LLFolderViewFilter
{
public:
+ enum EFilterBehavior
+ {
+ FILTER_NONE, // nothing to do, already filtered
+ FILTER_RESTART, // restart filtering from scratch
+ FILTER_LESS_RESTRICTIVE, // existing filtered items will certainly pass this filter
+ FILTER_MORE_RESTRICTIVE // if you didn't pass the previous filter, you definitely won't pass this one
+ };
+
+public:
+
LLFolderViewFilter() {}
virtual ~LLFolderViewFilter() {}
@@ -69,6 +80,8 @@ public:
virtual void setEmptyLookupMessage(const std::string& message) = 0;
const virtual std::string& getEmptyLookupMessage() const = 0;
+ virtual bool showAllResults() const = 0;
+
// +-------------------------------------------------------------------+
// + Status
// +-------------------------------------------------------------------+
@@ -91,7 +104,8 @@ public:
// +-------------------------------------------------------------------+
// + Default
// +-------------------------------------------------------------------+
- virtual BOOL isNotDefault() const = 0;
+ virtual bool isDefault() const = 0;
+ virtual bool isNotDefault() const = 0;
virtual void markDefault() = 0;
virtual void resetDefault() = 0;
@@ -103,8 +117,9 @@ public:
virtual S32 getFirstRequiredGeneration() const = 0;
};
-struct LLFolderViewModelInterface
+class LLFolderViewModelInterface
{
+public:
virtual void requestSortAll() = 0;
virtual void requestSort(class LLFolderViewFolder*) = 0;
@@ -130,15 +145,11 @@ struct LLFolderViewModelCommon : public LLFolderViewModelInterface
}
protected:
- bool needsSort(class LLFolderViewModelItem* item)
- {
- return item->getSortVersion() < mTargetSortVersion;
- }
+ bool needsSort(class LLFolderViewModelItem* item);
S32 mTargetSortVersion;
};
-
// This is am abstract base class that users of the folderview classes
// would use to bridge the folder view with the underlying data
class LLFolderViewModelItem
@@ -185,6 +196,8 @@ public:
virtual LLToolDragAndDrop::ESource getDragSource() const = 0;
virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const = 0;
+ virtual bool hasChildren() const = 0;
+
// This method will be called to determine if a drop can be
// performed, and will set drop to TRUE if a drop is
// requested. Returns TRUE if a drop is possible/happened,
@@ -208,7 +221,7 @@ public:
void requestSort() { mSortVersion = -1; }
S32 getSortVersion() { return mSortVersion; }
- void setSortVersion(S32 version) { mSortVersion = VERSION;}
+ void setSortVersion(S32 version) { mSortVersion = version;}
protected:
S32 mSortVersion;
@@ -219,6 +232,7 @@ class LLFolderViewModel : public LLFolderViewModelCommon
{
protected:
LLFolderViewModel() {}
+ virtual ~LLFolderViewModel() {}
typedef SORT_TYPE SortType;
typedef ITEM_TYPE ItemType;
@@ -226,13 +240,13 @@ protected:
typedef FILTER_TYPE FilterType;
virtual const SortType& getSorter() const { return mSorter; }
- virtual void setSorter(const SortType& type) { mSorter = sorter; requestSortAll(); }
- virtual FilterType& getFilter() const { return mFilter; }
+ virtual void setSorter(const SortType& sorter) { mSorter = sorter; requestSortAll(); }
+ virtual FilterType& getFilter() { return mFilter; }
virtual void setFilter(const FilterType& filter) { mFilter = filter; }
public:
- struct ViewModelCompare()
+ struct ViewModelCompare
{
ViewModelCompare(const SortType& sorter)
: mSorter(sorter)
@@ -240,46 +254,47 @@ public:
int operator () (const LLFolderViewItem* a, const LLFolderViewItem* b)
{
- return mSorter(static_cast<const ItemType*>(a->getListener()), static_cast<const ItemType*>(b->getListener()));
+ return mSorter(static_cast<const ItemType*>(a->getViewModelItem()), static_cast<const ItemType*>(b->getViewModelItem()));
}
int operator () (const LLFolderViewFolder* a, const LLFolderViewFolder* b)
{
- return mSorter(static_cast<const ItemType*>(a->getListener()), static_cast<const ItemType*>(b->getListener()));
+ return mSorter(static_cast<const ItemType*>(a->getViewModelItem()), static_cast<const ItemType*>(b->getViewModelItem()));
}
const SortType& mSorter;
- }
+ };
void sort(LLFolderViewFolder* folder)
{
- if (needsSort(folder))
+ if (needsSort(folder->getViewModelItem()))
{
std::sort(folder->getFoldersBegin(), folder->getFoldersEnd(), ViewModelCompare(getSorter()));
std::sort(folder->getItemsBegin(), folder->getItemsEnd(), ViewModelCompare(getSorter()));
- folder->getListener()->setSortVersion(mTargetSortVersion);
+ folder->getViewModelItem()->setSortVersion(mTargetSortVersion);
folder->requestArrange();
}
}
+ //TODO RN: fix this
void filter(LLFolderViewFolder* folder)
{
- FilterType& filter = getFilter();
- for (std::list<LLFolderViewItem*>::iterator it = folder->getItemsBegin(), end_it = folder->getItemsEnd();
+ /*FilterType& filter = getFilter();
+ for (std::list<LLFolderViewItem*>::const_iterator it = folder->getItemsBegin(), end_it = folder->getItemsEnd();
it != end_it;
++it)
{
LLFolderViewItem* child_item = *it;
- child_item->setFiltered(filter(static_cast<ItemType*>(child_item->getListener())), filter.getCurrentGeneration())
+ child_item->setFiltered(filter.checkFolder(static_cast<ItemType*>(child_item->getViewModelItem())), filter.getCurrentGeneration());
}
- for (std::list<LLFolderViewFolder*>::iterator it = folder->getFoldersBegin(), end_it = folder->getFoldersEnd();
+ for (std::list<LLFolderViewFolder*>::const_iterator it = folder->getFoldersBegin(), end_it = folder->getFoldersEnd();
it != end_it;
++it)
{
LLFolderViewItem* child_folder = *it;
- child_folder->setFiltered(filter(static_cast<ItemType*>(child_folder->getListener())), filter.getCurrentGeneration())
- }
+ child_folder->setFiltered(filter.check(static_cast<ItemType*>(child_folder->getViewModelItem())), filter.getCurrentGeneration());
+ }*/
}
protected:
@@ -288,6 +303,10 @@ protected:
};
+bool LLFolderViewModelCommon::needsSort(class LLFolderViewModelItem* item)
+{
+ return item->getSortVersion() < mTargetSortVersion;
+}
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index d0d2215361..b51bbf7bfe 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -208,7 +208,11 @@ const std::string& LLInvFVBridge::getName() const
const std::string& LLInvFVBridge::getDisplayName() const
{
- return getName();
+ if(mDisplayName.empty())
+ {
+ buildDisplayName();
+ }
+ return mDisplayName;
}
// Folders have full perms
@@ -1292,7 +1296,7 @@ bool LLInvFVBridge::canListOnMarketplaceNow() const
void * cargo_data = (void *) obj;
std::string tooltip_msg;
- can_list = outbox_itemp->getListener()->dragOrDrop(mask, drop, cargo_type, cargo_data, tooltip_msg);
+ can_list = outbox_itemp->getViewModelItem()->dragOrDrop(mask, drop, cargo_type, cargo_data, tooltip_msg);
}
}
}
@@ -1407,7 +1411,7 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
LLFolderViewItem* folder_view_itemp = mInventoryPanel.get()->getItemByID(itemp->getParentUUID());
if (!folder_view_itemp) return;
- folder_view_itemp->getListener()->pasteFromClipboard();
+ folder_view_itemp->getViewModelItem()->pasteFromClipboard();
return;
}
else if ("paste_link" == action)
@@ -1419,7 +1423,7 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
LLFolderViewItem* folder_view_itemp = mInventoryPanel.get()->getItemByID(itemp->getParentUUID());
if (!folder_view_itemp) return;
- folder_view_itemp->getListener()->pasteLinkFromClipboard();
+ folder_view_itemp->getViewModelItem()->pasteLinkFromClipboard();
return;
}
else if (isMarketplaceCopyAction(action))
@@ -1530,24 +1534,15 @@ PermissionMask LLItemBridge::getPermissionMask() const
return perm_mask;
}
-const std::string& LLItemBridge::getDisplayName() const
+void LLItemBridge::buildDisplayName()
{
- if(mDisplayName.empty())
+ if(getItem())
{
- buildDisplayName(getItem(), mDisplayName);
- }
- return mDisplayName;
-}
-
-void LLItemBridge::buildDisplayName(LLInventoryItem* item, std::string& name)
-{
- if(item)
- {
- name.assign(item->getName());
+ mDisplayName.assign(getItem()->getName());
}
else
{
- name.assign(LLStringUtil::null);
+ mDisplayName.assign(LLStringUtil::null);
}
}
@@ -1665,11 +1660,11 @@ BOOL LLItemBridge::renameItem(const std::string& new_name)
{
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
new_item->rename(new_name);
- buildDisplayName(new_item, mDisplayName);
new_item->updateServer(FALSE);
model->updateItem(new_item);
model->notifyObservers();
+ buildDisplayName();
}
// return FALSE because we either notified observers (& therefore
// rebuilt) or we didn't update.
@@ -1821,9 +1816,37 @@ void LLFolderBridge::selectItem()
// Have no fear: the first thing start() does is to test if everything for that folder has been fetched...
LLInventoryModelBackgroundFetch::instance().start(getUUID(), true);
}
-std::string& LLFolderBridge::getDisplayName() const
+
+void LLFolderBridge::buildDisplayName()
{
- return mDisplayName;
+ LLFolderType::EType preferred_type = getPreferredType();
+
+ // *TODO: to be removed when database supports multi language. This is a
+ // temporary attempt to display the inventory folder in the user locale.
+ // mantipov: *NOTE: be sure this code is synchronized with LLFriendCardsManager::findChildFolderUUID
+ // it uses the same way to find localized string
+
+ // HACK: EXT - 6028 ([HARD CODED]? Inventory > Library > "Accessories" folder)
+ // Translation of Accessories folder in Library inventory folder
+ bool accessories = false;
+ if(getName() == "Accessories")
+ {
+ //To ensure that Accessories folder is in Library we have to check its parent folder.
+ //Due to parent LLFolderViewFloder is not set to this item yet we have to check its parent via Inventory Model
+ LLInventoryCategory* cat = gInventory.getCategory(getUUID());
+ if(cat)
+ {
+ const LLUUID& parent_folder_id = cat->getParentUUID();
+ accessories = (parent_folder_id == gInventory.getLibraryRootFolderID());
+ }
+ }
+
+ //"Accessories" inventory category has folder type FT_NONE. So, this folder
+ //can not be detected as protected with LLFolderType::lookupIsProtectedType
+ if (accessories || LLFolderType::lookupIsProtectedType(preferred_type))
+ {
+ LLTrans::findString(mDisplayName, "InvFolder " + getName());
+ };
}
@@ -1884,11 +1907,11 @@ public:
LLIsItemRemovable() : mPassed(TRUE) {}
virtual void doFolder(LLFolderViewFolder* folder)
{
- mPassed &= folder->getListener()->isItemRemovable();
+ mPassed &= folder->getViewModelItem()->isItemRemovable();
}
virtual void doItem(LLFolderViewItem* item)
{
- mPassed &= item->getListener()->isItemRemovable();
+ mPassed &= item->getViewModelItem()->isItemRemovable();
}
BOOL mPassed;
};
@@ -3084,7 +3107,7 @@ void LLFolderBridge::pasteFromClipboard()
void * cargo_data = (void *) item;
std::string tooltip_msg;
- can_list = outbox_itemp->getListener()->dragOrDrop(mask, drop, cargo_type, cargo_data, tooltip_msg);
+ can_list = outbox_itemp->getViewModelItem()->dragOrDrop(mask, drop, cargo_type, cargo_data, tooltip_msg);
}
}
@@ -3494,6 +3517,11 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
{
sSelf.markDead();
+ // fetch contents of this folder, as context menu can depend on contents
+ // still, user would have to open context menu again to see the changes
+ gInventory.fetchDescendentsOf(getUUID());
+
+
menuentry_vec_t items;
menuentry_vec_t disabled_items;
@@ -3510,7 +3538,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
menu.arrangeAndClear();
}
-BOOL LLFolderBridge::hasChildren() const
+bool LLFolderBridge::hasChildren() const
{
LLInventoryModel* model = getInventoryModel();
if(!model) return FALSE;
@@ -3802,9 +3830,9 @@ void LLFolderBridge::dropToFavorites(LLInventoryItem* inv_item)
LLPointer<AddFavoriteLandmarkCallback> cb = new AddFavoriteLandmarkCallback();
LLInventoryPanel* panel = mInventoryPanel.get();
LLFolderViewItem* drag_over_item = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
- if (drag_over_item && drag_over_item->getListener())
+ if (drag_over_item && drag_over_item->getViewModelItem())
{
- cb.get()->setTargetLandmarkId(drag_over_item->getListener()->getUUID());
+ cb.get()->setTargetLandmarkId(drag_over_item->getViewModelItem()->getUUID());
}
copy_inventory_item(
@@ -4004,7 +4032,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
if (itemp)
{
LLUUID srcItemId = inv_item->getUUID();
- LLUUID destItemId = itemp->getListener()->getUUID();
+ LLUUID destItemId = itemp->getViewModelItem()->getUUID();
gInventory.rearrangeFavoriteLandmarks(srcItemId, destItemId);
}
}
@@ -4394,15 +4422,6 @@ void LLSoundBridge::openItem()
}
}
-void LLSoundBridge::previewItem()
-{
- LLViewerInventoryItem* item = getItem();
- if(item)
- {
- send_sound_trigger(item->getAssetUUID(), 1.0);
- }
-}
-
void LLSoundBridge::openSoundPreview(void* which)
{
LLSoundBridge *me = (LLSoundBridge *)which;
@@ -5409,11 +5428,10 @@ BOOL LLObjectBridge::renameItem(const std::string& new_name)
{
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
new_item->rename(new_name);
- buildDisplayName(new_item, mDisplayName);
new_item->updateServer(FALSE);
model->updateItem(new_item);
-
model->notifyObservers();
+ buildDisplayName();
if (isAgentAvatarValid())
{
@@ -6013,16 +6031,6 @@ void LLMeshBridge::openItem()
}
}
-void LLMeshBridge::previewItem()
-{
- LLViewerInventoryItem* item = getItem();
- if(item)
- {
- // preview mesh
- }
-}
-
-
void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
{
lldebugs << "LLMeshBridge::buildContextMenu()" << llendl;
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 114144c8a4..bc5ac24c70 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -29,7 +29,7 @@
#include "llcallingcard.h"
#include "llfloaterproperties.h"
-#include "llfoldervieweventlistener.h"
+#include "llfolderviewmodel.h"
#include "llinventorymodel.h"
#include "llinventoryobserver.h"
#include "llinventorypanel.h"
@@ -96,7 +96,6 @@ public:
virtual std::string getLabelSuffix() const { return LLStringUtil::null; }
virtual void openItem() {}
virtual void closeItem() {}
- virtual void previewItem() {openItem();}
virtual void showProperties();
virtual BOOL isItemRenameable() const { return TRUE; }
//virtual BOOL renameItem(const std::string& new_name) {}
@@ -126,6 +125,8 @@ public:
virtual LLInventoryType::EType getInventoryType() const { return mInvType; }
virtual LLWearableType::EType getWearableType() const { return LLWearableType::WT_NONE; }
EInventorySortGroup getSortGroup() const { return SG_ITEM; }
+ virtual LLInventoryObject* getInventoryObject() const;
+
//--------------------------------------------------------------------
// Convenience functions for adding various common menu options.
@@ -142,7 +143,6 @@ protected:
protected:
LLInvFVBridge(LLInventoryPanel* inventory, LLFolderView* root, const LLUUID& uuid);
- LLInventoryObject* getInventoryObject() const;
LLInventoryModel* getInventoryModel() const;
LLInventoryFilter* getInventoryFilter() const;
@@ -167,13 +167,16 @@ protected:
BOOL restamp);
void removeBatchNoCheck(std::vector<LLFolderViewModelItem*>& batch);
protected:
- LLHandle<LLInventoryPanel> mInventoryPanel;
- LLFolderView* mRoot;
- const LLUUID mUUID; // item id
- LLInventoryType::EType mInvType;
+ LLHandle<LLInventoryPanel> mInventoryPanel;
+ LLFolderView* mRoot;
+ const LLUUID mUUID; // item id
+ LLInventoryType::EType mInvType;
bool mIsLink;
LLTimer mTimeSinceRequestStart;
+ mutable std::string mDisplayName;
+
void purgeItem(LLInventoryModel *model, const LLUUID &uuid);
+ virtual void buildDisplayName();
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -209,7 +212,6 @@ public:
virtual void restoreToWorld();
virtual void gotoItem();
virtual LLUIImagePtr getIcon() const;
- virtual const std::string& getDisplayName() const;
virtual std::string getLabelSuffix() const;
virtual LLFontGL::StyleFlags getLabelStyle() const;
virtual PermissionMask getPermissionMask() const;
@@ -218,7 +220,7 @@ public:
virtual BOOL renameItem(const std::string& new_name);
virtual BOOL removeItem();
virtual BOOL isItemCopyable() const;
- virtual BOOL hasChildren() const { return FALSE; }
+ virtual bool hasChildren() const { return FALSE; }
virtual BOOL isUpToDate() const { return TRUE; }
/*virtual*/ void clearDisplayName() { mDisplayName.clear(); }
@@ -228,9 +230,8 @@ public:
protected:
BOOL confirmRemoveItem(const LLSD& notification, const LLSD& response);
virtual BOOL isItemPermissive() const;
- static void buildDisplayName(LLInventoryItem* item, std::string& name);
+ virtual void buildDisplayName();
- mutable std::string mDisplayName;
};
class LLFolderBridge : public LLInvFVBridge
@@ -248,7 +249,7 @@ public:
BOOL dragItemIntoFolder(LLInventoryItem* inv_item, BOOL drop, std::string& tooltip_msg);
BOOL dragCategoryIntoFolder(LLInventoryCategory* inv_category, BOOL drop, std::string& tooltip_msg);
- const std::string& getDisplayName() const;
+ virtual void buildDisplayName();
virtual void performAction(LLInventoryModel* model, std::string action);
virtual void openItem();
@@ -271,7 +272,7 @@ public:
virtual void pasteFromClipboard();
virtual void pasteLinkFromClipboard();
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
- virtual BOOL hasChildren() const;
+ virtual bool hasChildren() const;
virtual BOOL dragOrDrop(MASK mask, BOOL drop,
EDragAndDropType cargo_type,
void* cargo_data,
@@ -331,6 +332,7 @@ public:
static void staticFolderOptionsMenu();
private:
+
bool mCallingCards;
bool mWearables;
bool mIsLoading;
@@ -365,7 +367,6 @@ public:
const LLUUID& uuid) :
LLItemBridge(inventory, root, uuid) {}
virtual void openItem();
- virtual void previewItem();
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
static void openSoundPreview(void*);
};
@@ -555,7 +556,6 @@ class LLMeshBridge : public LLItemBridge
public:
virtual LLUIImagePtr getIcon() const;
virtual void openItem();
- virtual void previewItem();
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
protected:
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index 5de3f0cb4e..1d25a7a1f9 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -29,7 +29,7 @@
#include "llinventoryfilter.h"
// viewer includes
-#include "llfoldervieweventlistener.h"
+#include "llfolderviewmodel.h"
#include "llfolderviewitem.h"
#include "llinventorymodel.h"
#include "llinventorymodelbackgroundfetch.h"
@@ -92,7 +92,7 @@ LLInventoryFilter::~LLInventoryFilter()
BOOL LLInventoryFilter::check(const LLFolderViewItem* item)
{
// Clipboard cut items are *always* filtered so we need this value upfront
- const LLFolderViewEventListener* listener = item->getListener();
+ const LLFolderViewEventListener* listener = item->getViewModelItem();
const BOOL passed_clipboard = (listener ? checkAgainstClipboard(listener->getUUID()) : TRUE);
// If it's a folder and we're showing all folders, return automatically.
@@ -140,7 +140,7 @@ bool LLInventoryFilter::checkFolder(const LLFolderViewFolder* folder) const
return false;
}
- const LLFolderViewModelItemInventory* listener = folder->getListener();
+ const LLFolderViewModelItemInventory* listener = folder->getViewModelItem();
if (!listener)
{
llwarns << "Folder view event listener not found." << llendl;
@@ -155,6 +155,13 @@ bool LLInventoryFilter::checkFolder(const LLFolderViewFolder* folder) const
bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
{
+ // when applying a filter, matching folders get their contents downloaded first
+ if (isNotDefault()
+ && !gInventory.isCategoryComplete(getUUID())))
+ {
+ LLInventoryModelBackgroundFetch::instance().start(getViewModelItem()->getUUID());
+ }
+
// Always check against the clipboard
const BOOL passed_clipboard = checkAgainstClipboard(folder_id);
@@ -181,7 +188,7 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) const
{
- const LLFolderViewModelItemInventory* listener = item->getListener();
+ const LLFolderViewModelItemInventory* listener = item->getViewModelItem();
if (!listener) return FALSE;
LLInventoryType::EType object_type = listener->getInventoryType();
@@ -349,11 +356,11 @@ bool LLInventoryFilter::checkAgainstClipboard(const LLUUID& object_id) const
BOOL LLInventoryFilter::checkAgainstPermissions(const LLFolderViewItem* item) const
{
- const LLFolderViewModelItemInventory* listener = item->getListener();
+ const LLFolderViewModelItemInventory* listener = item->getViewModelItem();
if (!listener) return FALSE;
PermissionMask perm = listener->getPermissionMask();
- const LLInvFVBridge *bridge = dynamic_cast<const LLInvFVBridge *>(item->getListener());
+ const LLInvFVBridge *bridge = dynamic_cast<const LLInvFVBridge *>(item->getViewModelItem());
if (bridge && bridge->isLink())
{
const LLUUID& linked_uuid = gInventory.getLinkedItemID(bridge->getUUID());
@@ -377,7 +384,7 @@ bool LLInventoryFilter::checkAgainstPermissions(const LLInventoryItem* item) con
BOOL LLInventoryFilter::checkAgainstFilterLinks(const LLFolderViewItem* item) const
{
- const LLFolderViewModelItemInventory* listener = item->getListener();
+ const LLFolderViewModelItemInventory* listener = item->getViewModelItem();
if (!listener) return TRUE;
const LLUUID object_id = listener->getUUID();
@@ -408,9 +415,9 @@ BOOL LLInventoryFilter::isDefault() const
}
// has user modified default filter params?
-BOOL LLInventoryFilter::isNotDefault() const
+bool LLInventoryFilter::isNotDefault() const
{
- BOOL not_default = FALSE;
+ bool not_default = FALSE;
not_default |= (mFilterOps.mFilterObjectTypes != mDefaultFilterOps.mFilterObjectTypes);
not_default |= (mFilterOps.mFilterCategoryTypes != mDefaultFilterOps.mFilterCategoryTypes);
@@ -1125,6 +1132,12 @@ LLInventoryFilter& LLInventoryFilter::operator=( const LLInventoryFilter& othe
fromParams(other.toParams());
}
+bool LLInventoryFilter::showAllResults() const
+{
+ return hasFilterString();
+}
+
+
bool LLInventoryFilter::FilterOps::DateRange::validateBlock( bool emit_errors /*= true*/ )
{
diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h
index 4434008958..746e9a2820 100644
--- a/indra/newview/llinventoryfilter.h
+++ b/indra/newview/llinventoryfilter.h
@@ -29,6 +29,7 @@
#include "llinventorytype.h"
#include "llpermissionsflags.h"
+#include "llfolderviewmodel.h"
class LLFolderViewItem;
class LLFolderViewFolder;
@@ -44,14 +45,6 @@ public:
SHOW_NO_FOLDERS
};
- enum EFilterBehavior
- {
- FILTER_NONE, // nothing to do, already filtered
- FILTER_RESTART, // restart filtering from scratch
- FILTER_LESS_RESTRICTIVE, // existing filtered items will certainly pass this filter
- FILTER_MORE_RESTRICTIVE // if you didn't pass the previous filter, you definitely won't pass this one
- };
-
enum EFilterType {
FILTERTYPE_NONE = 0,
FILTERTYPE_OBJECT = 0x1 << 0, // normal default search-by-object-type
@@ -89,7 +82,7 @@ public:
max_date("max_date", time_max())
{}
- bool validateBlock(bool emit_errors = true);
+ bool validateBlock(bool emit_errors = true) const;
};
struct Params : public LLInitParam::Block<Params>
@@ -200,6 +193,9 @@ public:
bool checkAgainstFilterLinks(const LLFolderViewItem* item) const;
bool checkAgainstClipboard(const LLUUID& object_id) const;
+ bool showAllResults() const;
+
+
std::string::size_type getStringMatchOffset() const;
std::string::size_type getStringMatchOffset(LLFolderViewItem* item) const;
@@ -262,24 +258,6 @@ public:
private:
bool areDateLimitsSet();
- struct FilterOps
- {
- FilterOps();
- U32 mFilterTypes;
-
- U64 mFilterObjectTypes; // For _OBJECT
- U64 mFilterWearableTypes;
- U64 mFilterCategoryTypes; // For _CATEGORY
- LLUUID mFilterUUID; // for UUID
-
- time_t mMinDate;
- time_t mMaxDate;
- U32 mHoursAgo;
- EFolderShow mShowFolderState;
- PermissionMask mPermissions;
- U64 mFilterLinks;
- };
-
U32 mOrder;
U32 mLastLogoff;
@@ -287,7 +265,6 @@ private:
FilterOps mFilterOps;
FilterOps mDefaultFilterOps;
- std::string::size_type mSubStringMatchOffset;
std::string mFilterSubString;
std::string mFilterSubStringOrig;
const std::string mName;
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index ab5b082915..1e494c3ef1 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -948,7 +948,7 @@ void LLSaveFolderState::setApply(BOOL apply)
void LLSaveFolderState::doFolder(LLFolderViewFolder* folder)
{
LLMemType mt(LLMemType::MTYPE_INVENTORY_DO_FOLDER);
- LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getListener();
+ LLInvFVBridge* bridge = (LLInvFVBridge*)folder->getViewModelItem();
if(!bridge) return;
if(mApply)
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index d60b819da8..401daf6353 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -59,7 +59,7 @@ static const LLInventoryFVBridgeBuilder INVENTORY_BRIDGE_BUILDER;
//
// class LLFolderViewModelInventory
//
-void LLFolderViewModelInventory::requestSort(class LLFolderViewFolder* folder)
+void LLFolderViewModelInventory::requestSort(class LLFolderViewFolder* folder)
{
base_t::requestSort(folder);
if (getSorter().isByDate())
@@ -78,7 +78,7 @@ void LLFolderViewModelInventory::sort( LLFolderViewFolder* folder )
if (!needsSort(folder)) return;
- LLFolderViewModelItemInventory* modelp = static_cast<LLFolderViewModelItemInventory*>(folder->getListener());
+ LLFolderViewModelItemInventory* modelp = static_cast<LLFolderViewModelItemInventory*>(folder->getViewModelItem());
if (modelp->getUUID().isNull()) return;
for (std::list<LLFolderViewFolder*>::iterator it = folder->getFoldersBegin(), end_it = folder->getFoldersEnd();
@@ -91,8 +91,8 @@ void LLFolderViewModelInventory::sort( LLFolderViewFolder* folder )
if (child_folderp->getFoldersCount() > 0)
{
time_t most_recent_folder_time =
- static_cast<LLFolderViewModelItemInventory*>(child_folderp->getFoldersBegin()->getListener())->getCreationDate();
- LLFolderViewModelItemInventory* modelp = static_cast<LLFolderViewModelItemInventory*>(child_folderp->getListener());
+ static_cast<LLFolderViewModelItemInventory*>(child_folderp->getFoldersBegin()->getViewModelItem())->getCreationDate();
+ LLFolderViewModelItemInventory* modelp = static_cast<LLFolderViewModelItemInventory*>(child_folderp->getViewModelItem());
if (most_recent_folder_time > modelp->getCreationDate())
{
modelp->setCreationDate(most_recent_folder_time);
@@ -101,9 +101,9 @@ void LLFolderViewModelInventory::sort( LLFolderViewFolder* folder )
if (child_folderp->getItemsCount() > 0)
{
time_t most_recent_item_time =
- static_cast<LLFolderViewModelItemInventory*>(child_folderp->getItemsBegin()->getListener())->getCreationDate();
+ static_cast<LLFolderViewModelItemInventory*>(child_folderp->getItemsBegin()->getViewModelItem())->getCreationDate();
- LLFolderViewModelItemInventory* modelp = static_cast<LLFolderViewModelItemInventory*>(child_folderp->getListener());
+ LLFolderViewModelItemInventory* modelp = static_cast<LLFolderViewModelItemInventory*>(child_folderp->getViewModelItem());
if (most_recent_item_time > modelp->getCreationDate())
{
modelp->setCreationDate(most_recent_item_time);
@@ -474,7 +474,7 @@ void LLInventoryPanel::modelChanged(U32 mask)
if (view_item)
{
// Request refresh on this item (also flags for filtering)
- LLInvFVBridge* bridge = (LLInvFVBridge*)view_item->getListener();
+ LLInvFVBridge* bridge = (LLInvFVBridge*)view_item->getViewModelItem();
if(bridge)
{ // Clear the display name first, so it gets properly re-built during refresh()
bridge->clearDisplayName();
@@ -493,7 +493,7 @@ void LLInventoryPanel::modelChanged(U32 mask)
if (model_item && view_item)
{
view_item->destroyView();
- removeItemID(view_item->getListener()->getUUID());
+ removeItemID(view_item->getViewModelItem()->getUUID());
}
view_item = buildNewViews(item_id);
view_folder = dynamic_cast<LLFolderViewFolder *>(view_item);
@@ -563,14 +563,14 @@ void LLInventoryPanel::modelChanged(U32 mask)
// Item is to be moved and we found its new parent in the panel's directory, so move the item's UI.
view_item->getParentFolder()->extractItem(view_item);
view_item->addToFolder(new_parent);
- addItemID(view_item->getListener()->getUUID(), view_item);
+ addItemID(view_item->getViewModelItem()->getUUID(), view_item);
}
else
{
// Item is to be moved outside the panel's directory (e.g. moved to trash for a panel that
// doesn't include trash). Just remove the item's UI.
view_item->destroyView();
- removeItemID(view_item->getListener()->getUUID());
+ removeItemID(view_item->getViewModelItem()->getUUID());
}
}
}
@@ -583,7 +583,7 @@ void LLInventoryPanel::modelChanged(U32 mask)
{
// Remove the item's UI.
view_item->destroyView();
- removeItemID(view_item->getListener()->getUUID());
+ removeItemID(view_item->getViewModelItem()->getUUID());
}
}
}
@@ -615,7 +615,7 @@ void LLInventoryPanel::onIdle(void *userdata)
const LLUUID& LLInventoryPanel::getRootFolderID() const
{
- return mFolderRoot->getListener()->getUUID();
+ return mFolderRoot->getViewModelItem()->getUUID();
}
void LLInventoryPanel::initializeViews()
@@ -654,7 +654,7 @@ LLFolderViewItem* LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
if (old_view)
{
old_view->destroyView();
- removeItemID(old_view->getListener()->getUUID());
+ removeItemID(old_view->getViewModelItem()->getUUID());
}
return buildNewViews(id);
@@ -727,7 +727,7 @@ LLFolderViewItem * LLInventoryPanel::createFolderViewItem(LLInvFVBridge * bridge
LLFolderViewItem* LLInventoryPanel::buildNewViews(const LLUUID& id)
{
LLInventoryObject const* objectp = gInventory.getObject(id);
- LLUUID root_id = mFolderRoot->getListener()->getUUID();
+ LLUUID root_id = mFolderRoot->getViewModelItem()->getUUID();
LLFolderViewFolder* parent_folder = NULL;
LLFolderViewItem* itemp = NULL;
@@ -786,7 +786,7 @@ LLFolderViewItem* LLInventoryPanel::buildNewViews(const LLUUID& id)
if (itemp)
{
itemp->addToFolder(parent_folder);
- addItemID(itemp->getListener()->getUUID(), itemp);
+ addItemID(itemp->getViewModelItem()->getUUID(), itemp);
}
}
}
@@ -836,8 +836,8 @@ void LLInventoryPanel::openStartFolderOrMyInventory()
{
LLFolderViewFolder *fchild = dynamic_cast<LLFolderViewFolder*>(child);
if (fchild
- && fchild->getListener()
- && fchild->getListener()->getUUID() == gInventory.getRootFolderID())
+ && fchild->getViewModelItem()
+ && fchild->getViewModelItem()->getUUID() == gInventory.getRootFolderID())
{
fchild->setOpen(TRUE);
break;
@@ -854,7 +854,7 @@ void LLInventoryPanel::openSelected()
{
LLFolderViewItem* folder_item = mFolderRoot->getCurSelectedItem();
if(!folder_item) return;
- LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
+ LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getViewModelItem();
if(!bridge) return;
bridge->openItem();
}
@@ -980,7 +980,7 @@ void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& it
mCompletionObserver->reset();
for (std::deque<LLFolderViewItem*>::const_iterator it = items.begin(); it != items.end(); ++it)
{
- LLUUID id = (*it)->getListener()->getUUID();
+ LLUUID id = (*it)->getViewModelItem()->getUUID();
LLViewerInventoryItem* inv_item = mInventory->getItem(id);
if (inv_item && !inv_item->isFinished())
@@ -1028,11 +1028,11 @@ bool LLInventoryPanel::beginIMSession()
if(folder_item)
{
- LLFolderViewEventListener* fve_listener = folder_item->getListener();
+ LLFolderViewEventListener* fve_listener = folder_item->getViewModelItem();
if (fve_listener && (fve_listener->getInventoryType() == LLInventoryType::IT_CATEGORY))
{
- LLFolderBridge* bridge = (LLFolderBridge*)folder_item->getListener();
+ LLFolderBridge* bridge = (LLFolderBridge*)folder_item->getViewModelItem();
if(!bridge) return true;
LLViewerInventoryCategory* cat = bridge->getCategory();
if(!cat) return true;
@@ -1066,7 +1066,7 @@ bool LLInventoryPanel::beginIMSession()
}
else
{
- LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getListener();
+ LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getViewModelItem();
if (listenerp->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
{
@@ -1113,7 +1113,7 @@ bool LLInventoryPanel::attachObject(const LLSD& userdata)
set_iter != selected_items.end();
++set_iter)
{
- items.push_back((*set_iter)->getListener()->getUUID());
+ items.push_back((*set_iter)->getItemViewModel()->getUUID());
}
// Attach selected items.
@@ -1292,7 +1292,7 @@ LLFastTimer::DeclareTimer FTM_GET_ITEM_BY_ID("Get FolderViewItem by ID");
LLFolderViewItem* LLInventoryPanel::getItemByID(const LLUUID& id)
{
LLFastTimer _(FTM_GET_ITEM_BY_ID);
- if (id == mFolderRoot->getListener()->getUUID())
+ if (id == mFolderRoot->getViewModelItem()->getUUID())
{
return mFolderRoot;
}
@@ -1317,7 +1317,7 @@ LLFolderViewFolder* LLInventoryPanel::getFolderByID(const LLUUID& id)
void LLInventoryPanel::setSelectionByID( const LLUUID& obj_id, BOOL take_keyboard_focus )
{
LLFolderViewItem* itemp = getItemByID(obj_id);
- if(itemp && itemp->getListener())
+ if(itemp && itemp->getViewModelItem())
{
itemp->arrangeAndSet(TRUE, take_keyboard_focus);
mSelectThisID.setNull();
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 7cf82bf268..467c508aa0 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -39,25 +39,58 @@
#include "lluictrlfactory.h"
#include <set>
-class LLFolderView;
-class LLFolderViewFolder;
-class LLFolderViewItem;
-class LLInventoryFilter;
-class LLInventoryModel;
class LLInvFVBridge;
class LLInventoryFVBridgeBuilder;
-class LLMenuBarGL;
-class LLCheckBoxCtrl;
-class LLSpinCtrl;
-class LLTextBox;
-class LLIconCtrl;
-class LLSaveFolderState;
-class LLFilterEditor;
-class LLTabContainer;
class LLInvPanelComplObserver;
+class LLFolderViewModelItemInventory
+ : public LLFolderViewModelItemCommon
+{
+public:
+ virtual const LLUUID& getUUID() const = 0;
+ virtual time_t getCreationDate() const = 0; // UTC seconds
+ virtual void setCreationDate(time_t creation_date_utc) = 0;
+ virtual PermissionMask getPermissionMask() const = 0;
+ virtual LLFolderType::EType getPreferredType() const = 0;
+ virtual void showProperties(void) = 0;
+ virtual BOOL isItemInTrash( void) const { return FALSE; } // TODO: make into pure virtual.
+ virtual BOOL isUpToDate() const = 0;
+ virtual bool hasChildren() const = 0;
+ virtual LLInventoryType::EType getInventoryType() const = 0;
+ virtual void performAction(LLInventoryModel* model, std::string action) = 0;
+ virtual LLWearableType::EType getWearableType() const = 0;
+ virtual EInventorySortGroup getSortGroup() const = 0;
+ virtual LLInventoryObject* getInventoryObject() const = 0;
+};
+
+class LLInventorySort
+{
+public:
+ LLInventorySort(U32 order)
+ : mSortOrder(0),
+ mByDate(false),
+ mSystemToTop(false),
+ mFoldersByName(false)
+ {
+ mSortOrder = order;
+ mByDate = (order & LLInventoryFilter::SO_DATE);
+ mSystemToTop = (order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP);
+ mFoldersByName = (order & LLInventoryFilter::SO_FOLDERS_BY_NAME);
+ }
+
+ bool isByDate() { return mByDate; }
+ U32 getSortOrder() { return mSortOrder; }
+
+ bool operator()(const LLFolderViewModelItemInventory* const& a, const LLFolderViewModelItemInventory* const& b);
+private:
+ U32 mSortOrder;
+ bool mByDate;
+ bool mSystemToTop;
+ bool mFoldersByName;
+};
+
class LLFolderViewModelInventory
-: public LLFolderViewModel<LLInventorySort, LLFolderViewModelItemInventory, LLFolderViewModelItemInventory, LLInventoryFilter>
+ : public LLFolderViewModel<LLInventorySort, LLFolderViewModelItemInventory, LLFolderViewModelItemInventory, LLInventoryFilter>
{
typedef LLFolderViewModel<LLInventorySort, LLFolderViewModelItemInventory, LLFolderViewModelItemInventory, LLInventoryFilter> base_t;
@@ -200,8 +233,8 @@ public:
void setSelectionByID(const LLUUID& obj_id, BOOL take_keyboard_focus);
void updateSelection();
- LLFolderViewModelInventory* getViewModel() { return &mViewModel; }
- const LLFolderViewModelInventory* getViewModel() const { return &mViewModel; }
+ LLFolderViewModelInventory* getFolderViewModel() { return &mViewModel; }
+ const LLFolderViewModelInventory* getFolderViewModel() const { return &mViewModel; }
protected:
void openStartFolderOrMyInventory(); // open the first level of inventory
@@ -276,25 +309,4 @@ private:
LLUUID mStartFolderID;
};
-class LLFolderViewModelItemInventory
- : public LLFolderViewModelItemCommon
-{
-public:
- virtual const LLUUID& getUUID() const = 0;
- virtual time_t getCreationDate() const = 0; // UTC seconds
- virtual void setCreationDate(time_t creation_date_utc) = 0;
- virtual PermissionMask getPermissionMask() const = 0;
- virtual LLFolderType::EType getPreferredType() const = 0;
- virtual void previewItem( void ) = 0;
- virtual void showProperties(void) = 0;
- virtual BOOL isItemInTrash( void) const { return FALSE; } // TODO: make into pure virtual.
- virtual BOOL isUpToDate() const = 0;
- virtual BOOL hasChildren() const = 0;
- virtual LLInventoryType::EType getInventoryType() const = 0;
- virtual void performAction(LLInventoryModel* model, std::string action) = 0;
- virtual LLWearableType::EType getWearableType() const = 0;
- virtual EInventorySortGroup getSortGroup() const;
- virtual void requestSort(const LLInventorySort& sorter);
-};
-
#endif // LL_LLINVENTORYPANEL_H
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 234fa7590d..54ad2bcb76 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -102,7 +102,7 @@ void LLCheckFolderState::doFolder(LLFolderViewFolder* folder)
// Counting only folders that pass the filter.
// The listener check allow us to avoid counting the folder view
// object itself because it has no listener assigned.
- if (folder->hasFilteredDescendants() && folder->getListener())
+ if (folder->hasFilteredDescendants() && folder->getViewModelItem())
{
if (folder->isOpen())
{
@@ -138,7 +138,7 @@ private:
// virtual
void LLOpenFolderByID::doFolder(LLFolderViewFolder* folder)
{
- if (folder->getListener() && folder->getListener()->getUUID() == mFolderID)
+ if (folder->getViewModelItem() && folder->getViewModelItem()->getUUID() == mFolderID)
{
if (!folder->isOpen())
{
@@ -286,7 +286,7 @@ void LLLandmarksPanel::onShowProfile()
if(!cur_item)
return;
- cur_item->getListener()->performAction(mCurrentSelectedList->getModel(),"about");
+ cur_item->getViewModelItem()->performAction(mCurrentSelectedList->getModel(),"about");
}
// virtual
@@ -299,7 +299,7 @@ void LLLandmarksPanel::onTeleport()
return;
}
- LLFolderViewModelItem* listenerp = current_item->getListener();
+ LLFolderViewModelItem* listenerp = current_item->getViewModelItem();
if (listenerp && listenerp->getInventoryType() == LLInventoryType::IT_LANDMARK)
{
listenerp->openItem();
@@ -360,7 +360,7 @@ void LLLandmarksPanel::onSelectorButtonClicked()
LLFolderViewItem* cur_item = mFavoritesInventoryPanel->getRootFolder()->getCurSelectedItem();
if (!cur_item) return;
- LLFolderViewModelItem* listenerp = cur_item->getListener();
+ LLFolderViewModelItem* listenerp = cur_item->getViewModelItem();
if (listenerp->getInventoryType() == LLInventoryType::IT_LANDMARK)
{
LLSD key;
@@ -418,7 +418,7 @@ void LLLandmarksPanel::setItemSelected(const LLUUID& obj_id, BOOL take_keyboard_
bool LLLandmarksPanel::isLandmarkSelected() const
{
LLFolderViewItem* current_item = getCurSelectedItem();
- if(current_item && current_item->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK)
+ if(current_item && current_item->getViewModelItem()->getInventoryType() == LLInventoryType::IT_LANDMARK)
{
return true;
}
@@ -441,9 +441,9 @@ bool LLLandmarksPanel::isReceivedFolderSelected() const
void LLLandmarksPanel::doActionOnCurSelectedLandmark(LLLandmarkList::loaded_callback_t cb)
{
LLFolderViewItem* cur_item = getCurSelectedItem();
- if(cur_item && cur_item->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK)
+ if(cur_item && cur_item->getViewModelItem()->getInventoryType() == LLInventoryType::IT_LANDMARK)
{
- LLLandmark* landmark = LLLandmarkActions::getLandmark(cur_item->getListener()->getUUID(), cb);
+ LLLandmark* landmark = LLLandmarkActions::getLandmark(cur_item->getViewModelItem()->getUUID(), cb);
if (landmark)
{
cb(landmark);
@@ -510,7 +510,7 @@ void LLLandmarksPanel::processParcelInfo(const LLParcelData& parcel_data)
{
LLFolderViewItem* cur_item = getCurSelectedItem();
if (!cur_item) return;
- LLUUID id = cur_item->getListener()->getUUID();
+ LLUUID id = cur_item->getViewModelItem()->getUUID();
LLInventoryItem* inv_item = mCurrentSelectedList->getModel()->getItem(id);
doActionOnCurSelectedLandmark(boost::bind(
&LLLandmarksPanel::doProcessParcelInfo, this, _1, cur_item, inv_item, parcel_data));
@@ -738,7 +738,7 @@ void LLLandmarksPanel::onActionsButtonClick()
if(!cur_item)
return;
- LLFolderViewModelItem* listenerp = cur_item->getListener();
+ LLFolderViewModelItem* listenerp = cur_item->getViewModelItem();
if(!listenerp)
return;
@@ -795,17 +795,17 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const
if (item && mCurrentSelectedList == mLandmarksInventoryPanel)
{
LLFolderViewModelItem* folder_bridge = NULL;
- if (item-> getListener()->getInventoryType()
+ if (item-> getViewModelItem()->getInventoryType()
== LLInventoryType::IT_LANDMARK)
{
// for a landmark get parent folder bridge
- folder_bridge = item->getParentFolder()->getListener();
+ folder_bridge = item->getParentFolder()->getViewModelItem();
}
- else if (item-> getListener()->getInventoryType()
+ else if (item-> getViewModelItem()->getInventoryType()
== LLInventoryType::IT_CATEGORY)
{
// for a folder get its own bridge
- folder_bridge = item->getListener();
+ folder_bridge = item->getViewModelItem();
}
menu_create_inventory_item(mCurrentSelectedList,
@@ -836,7 +836,7 @@ void LLLandmarksPanel::onClipboardAction(const LLSD& userdata) const
{
LLFolderViewItem* cur_item = getCurSelectedItem();
if(cur_item)
- LLLandmarkActions::copySLURLtoClipboard(cur_item->getListener()->getUUID());
+ LLLandmarkActions::copySLURLtoClipboard(cur_item->getViewModelItem()->getUUID());
}
else if ( "paste" == command_name)
{
@@ -1015,7 +1015,7 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const
LLFolderViewItem* cur_item = root_folder_view->getCurSelectedItem();
if (!cur_item) return false;
- LLViewerInventoryItem* inv_item = cur_item->getInventoryItem();
+ LLViewerInventoryItem* inv_item = static_cast<LLViewerInventoryItem*>(static_cast<LLFolderViewModelItemInventory*>(cur_item->getViewModelItem())->getInventoryObject());
if (!inv_item) return false;
LLUUID asset_uuid = inv_item->getAssetUUID();
@@ -1116,12 +1116,12 @@ void LLLandmarksPanel::onMenuVisibilityChange(LLUICtrl* ctrl, const LLSD& param)
// If no item is found it might be a folder id.
if (!item) continue;
- LLFolderViewModelItem* listenerp = item->getListener();
+ LLFolderViewModelItem* listenerp = item->getViewModelItem();
if(!listenerp) continue;
// Trash category itself should not be included because it can't be
// actually restored from trash.
- are_all_items_in_trash &= listenerp->isItemInTrash() && (*iter)->getListener()->getUUID() != trash_id;
+ are_all_items_in_trash &= listenerp->isItemInTrash() && (*iter)->getItemViewModel()->getUUID() != trash_id;
// If there are any selected items in Trash including the Trash category itself
// we show "Restore Item" in context menu and hide other irrelevant items.
@@ -1160,7 +1160,7 @@ bool LLLandmarksPanel::canItemBeModified(const std::string& command_name, LLFold
bool can_be_modified = false;
// landmarks can be modified in any other accordion...
- if (item->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK)
+ if (item->getViewModelItem()->getInventoryType() == LLInventoryType::IT_LANDMARK)
{
can_be_modified = true;
@@ -1198,7 +1198,7 @@ bool LLLandmarksPanel::canItemBeModified(const std::string& command_name, LLFold
if (can_be_modified)
{
- LLFolderViewModelItemInventory* listenerp = item->getListener();
+ LLFolderViewModelItemInventory* listenerp = item->getViewModelItem();
if ("cut" == command_name)
{
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index a7970bde24..fbdbce61bd 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -977,7 +977,7 @@ void LLPanelMainInventory::saveTexture(const LLSD& userdata)
return;
}
- const LLUUID& item_id = current_item->getListener()->getUUID();
+ const LLUUID& item_id = current_item->getViewModelItem()->getUUID();
LLPreviewTexture* preview_texture = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(item_id), TAKE_FOCUS_YES);
if (preview_texture)
{
@@ -1050,7 +1050,7 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
{
return;
}
- const LLUUID item_id = current_item->getListener()->getUUID();
+ const LLUUID item_id = current_item->getViewModelItem()->getUUID();
LLViewerInventoryItem *item = gInventory.getItem(item_id);
if (item)
{
@@ -1065,7 +1065,7 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
{
return;
}
- current_item->getListener()->performAction(getActivePanel()->getModel(), "goto");
+ current_item->getViewModelItem()->performAction(getActivePanel()->getModel(), "goto");
}
if (command_name == "find_links")
@@ -1075,8 +1075,8 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
{
return;
}
- const LLUUID& item_id = current_item->getListener()->getUUID();
- const std::string &item_name = current_item->getListener()->getName();
+ const LLUUID& item_id = current_item->getViewModelItem()->getUUID();
+ const std::string &item_name = current_item->getViewModelItem()->getName();
mFilterSubString = item_name;
LLInventoryFilter *filter = mActivePanel->getFilter();
filter->setFilterSubString(item_name);
@@ -1094,11 +1094,11 @@ bool LLPanelMainInventory::isSaveTextureEnabled(const LLSD& userdata)
LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
if (current_item)
{
- LLViewerInventoryItem *inv_item = current_item->getInventoryItem();
+ LLViewerInventoryItem *inv_item = dynamic_cast<LLViewerInventoryItem*>(static_cast<LLFolderViewModelItemInventory*>(current_item->getViewModelItem())->getInventoryObject());
if(inv_item)
{
bool can_save = inv_item->checkPermissionsSet(PERM_ITEM_UNRESTRICTED);
- LLInventoryType::EType curr_type = current_item->getListener()->getInventoryType();
+ LLInventoryType::EType curr_type = static_cast<LLFolderViewModelItemInventory*>(current_item->getViewModelItem())->getInventoryType();
return can_save && (curr_type == LLInventoryType::IT_TEXTURE || curr_type == LLInventoryType::IT_SNAPSHOT);
}
}
@@ -1123,7 +1123,7 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
{
const LLUUID &item_id = (*iter);
LLFolderViewItem *item = *iter;
- const LLFolderViewModelItemInventory *listener = item->getListener();
+ const LLFolderViewModelItemInventory *listener = item->getViewModelItem();
llassert(listener);
if (!listener) return FALSE;
can_delete &= listener->isItemRemovable();
@@ -1141,7 +1141,7 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
{
LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
if (!current_item) return FALSE;
- const LLUUID& item_id = current_item->getListener()->getUUID();
+ const LLUUID& item_id = current_item->getViewModelItem()->getUUID();
const LLViewerInventoryItem *item = gInventory.getItem(item_id);
if (item && item->getIsLinkType() && !item->getIsBrokenLink())
{
@@ -1157,7 +1157,7 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
if (selection_set.size() != 1) return FALSE;
LLFolderViewItem* current_item = root->getCurSelectedItem();
if (!current_item) return FALSE;
- const LLUUID& item_id = current_item->getListener()->getUUID();
+ const LLUUID& item_id = current_item->getViewModelItem()->getUUID();
const LLInventoryObject *obj = gInventory.getObject(item_id);
if (obj && !obj->getIsLinkType() && LLAssetType::lookupCanLink(obj->getType()))
{
@@ -1170,7 +1170,7 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
{
LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
if (!current_item) return FALSE;
- const LLUUID& item_id = current_item->getListener()->getUUID();
+ const LLUUID& item_id = current_item->getViewModelItem()->getUUID();
const LLViewerInventoryItem *item = gInventory.getItem(item_id);
if (item && item->getIsBrokenLink())
{
diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp
index 6804342106..8a07d6d516 100644
--- a/indra/newview/llpanelmarketplaceinbox.cpp
+++ b/indra/newview/llpanelmarketplaceinbox.cpp
@@ -94,7 +94,7 @@ LLInventoryPanel * LLPanelMarketplaceInbox::setupInventoryPanel()
mInventoryPanel->setShape(inventory_placeholder_rect);
// Set the sort order newest to oldest
- mInventoryPanel->getViewModel()->setSorter(LLInventoryFilter::SO_DATE);
+ mInventoryPanel->getFolderViewModel()->setSorter(LLInventoryFilter::SO_DATE);
mInventoryPanel->getFilter()->markDefault();
// Set selection callback for proper update of inventory status buttons
diff --git a/indra/newview/llpanelmarketplaceoutboxinventory.cpp b/indra/newview/llpanelmarketplaceoutboxinventory.cpp
index b5c7c4ca88..7db01d9059 100644
--- a/indra/newview/llpanelmarketplaceoutboxinventory.cpp
+++ b/indra/newview/llpanelmarketplaceoutboxinventory.cpp
@@ -29,7 +29,7 @@
#include "llpanelmarketplaceoutboxinventory.h"
#include "llfolderviewitem.h"
-#include "llfoldervieweventlistener.h"
+#include "llfolderviewmodel.h"
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
#include "llpanellandmarks.h"
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 3d7d9d573e..240c5b2da4 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -113,7 +113,6 @@ public:
virtual void openItem();
virtual BOOL canOpenItem() const { return FALSE; }
virtual void closeItem() {}
- virtual void previewItem();
virtual void selectItem() {}
virtual BOOL isItemRenameable() const;
virtual BOOL renameItem(const std::string& new_name);
@@ -352,11 +351,6 @@ void LLTaskInvFVBridge::openItem()
lldebugs << "LLTaskInvFVBridge::openItem()" << llendl;
}
-void LLTaskInvFVBridge::previewItem()
-{
- openItem();
-}
-
BOOL LLTaskInvFVBridge::isItemRenameable() const
{
if(gAgent.isGodlike()) return TRUE;
@@ -1754,7 +1748,7 @@ void LLPanelObjectInventory::createViewsForCategory(LLInventoryObject::object_li
view = LLUICtrlFactory::create<LLFolderViewItem> (params);
}
view->addToFolder(folder);
- addItemID(view->getListener()->getUUID(), view);
+ addItemID(view->getViewModelItem()->getUUID(), view);
}
}
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 4abc7fea0e..a95d27f992 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -270,7 +270,7 @@ private:
if (inventory_panel->getVisible())
{
- inventory_panel->getViewModel()->setSorter(sort_order);
+ inventory_panel->getFolderViewModel()->setSorter(sort_order);
}
else
{
@@ -1310,7 +1310,7 @@ void LLPanelOutfitEdit::getCurrentItemUUID(LLUUID& selected_id)
LLFolderViewItem* curr_item = mInventoryItemsPanel->getRootFolder()->getCurSelectedItem();
if (!curr_item) return;
- LLFolderViewModelItemInventory* listenerp = curr_item->getListener();
+ LLFolderViewModelItemInventory* listenerp = curr_item->getViewModelItem();
if (!listenerp) return;
selected_id = listenerp->getUUID();
@@ -1332,7 +1332,7 @@ void LLPanelOutfitEdit::getSelectedItemsUUID(uuid_vec_t& uuid_list)
it != end_it;
++it)
{
- uuid_list.push_back((*it)->getListener()->getUUID());
+ uuid_list.push_back((*it)->getItemViewModel()->getUUID());
}
}
else if (mWearablesListViewPanel->getVisible())
@@ -1384,7 +1384,7 @@ void LLPanelOutfitEdit::saveListSelection()
for (std::set<LLFolderViewItem*>::const_iterator item_id = selected_ids.begin(); item_id != selected_ids.end(); ++item_id)
{
- mWearableItemsList->selectItemByUUID((*item_id)->getListener()->getUUID(), true);
+ mWearableItemsList->selectItemByUUID((*item_id)->getItemViewModel()->getUUID(), true);
}
mWearableItemsList->scrollToShowFirstSelectedItem();
}
diff --git a/indra/newview/llplacesinventorypanel.cpp b/indra/newview/llplacesinventorypanel.cpp
index 1de26660bc..da5ce7d4b7 100644
--- a/indra/newview/llplacesinventorypanel.cpp
+++ b/indra/newview/llplacesinventorypanel.cpp
@@ -30,7 +30,7 @@
#include "llplacesinventorypanel.h"
-#include "llfoldervieweventlistener.h"
+#include "llfolderviewmodel.h"
#include "llfolderview.h"
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
@@ -162,7 +162,7 @@ BOOL LLPlacesFolderView::handleRightMouseDown(S32 x, S32 y, MASK mask)
// then determine its type and set necessary menu handle
if (getCurSelectedItem())
{
- LLInventoryType::EType inventory_type = getCurSelectedItem()->getListener()->getInventoryType();
+ LLInventoryType::EType inventory_type = getCurSelectedItem()->getViewModelItem()->getInventoryType();
inventory_type_menu_handle_t::iterator it_handle = mMenuHandlesByInventoryType.find(inventory_type);
if (it_handle != mMenuHandlesByInventoryType.end())
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index f069da5869..194aa7f71b 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -38,7 +38,7 @@
#include "llfiltereditor.h"
#include "llfloaterreg.h"
#include "llfloaterworldmap.h"
-#include "llfoldervieweventlistener.h"
+#include "llfolderviewmodel.h"
#include "lloutfitobserver.h"
#include "llpaneleditwearable.h"
#include "llpaneloutfitsinventory.h"
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index cc578b5799..f3d32e7a67 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -473,7 +473,7 @@ void LLSidepanelInventory::performActionOnSelection(const std::string &action)
}
}
- current_item->getListener()->performAction(mPanelMainInventory->getActivePanel()->getModel(), action);
+ current_item->getViewModelItem()->performAction(mPanelMainInventory->getActivePanel()->getModel(), action);
}
void LLSidepanelInventory::onWearButtonClicked()
@@ -663,7 +663,7 @@ LLInventoryItem *LLSidepanelInventory::getSelectedItem()
return NULL;
}
}
- const LLUUID &item_id = current_item->getListener()->getUUID();
+ const LLUUID &item_id = current_item->getViewModelItem()->getUUID();
LLInventoryItem *item = gInventory.getItem(item_id);
return item;
}
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index ad2db966bd..a995f07df7 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -39,7 +39,7 @@
#include "llfocusmgr.h"
#include "llviewertexture.h"
#include "llfolderview.h"
-#include "llfoldervieweventlistener.h"
+#include "llfolderviewmodel.h"
#include "llinventory.h"
#include "llinventoryfunctions.h"
#include "llinventorymodelbackgroundfetch.h"
@@ -800,7 +800,7 @@ void LLFloaterTexturePicker::onSelectionChange(const std::deque<LLFolderViewItem
if (items.size())
{
LLFolderViewItem* first_item = items.front();
- LLInventoryItem* itemp = gInventory.getItem(first_item->getListener()->getUUID());
+ LLInventoryItem* itemp = gInventory.getItem(first_item->getViewModelItem()->getUUID());
mNoCopyTextureSelected = FALSE;
if (itemp)
{