Merge branch 'DRTVWR-567' of https://github.com/secondlife/viewer
# Conflicts: # indra/newview/llinventorybridge.cpp # indra/newview/llinventorypanel.cpp # indra/newview/skins/default/xui/en/panel_main_inventory.xmlmaster
commit
147dc16bc5
|
|
@ -55,7 +55,7 @@ void LLCallbackList::addFunction( callback_t func, void *data)
|
|||
|
||||
// only add one callback per func/data pair
|
||||
//
|
||||
if (containsFunction(func))
|
||||
if (containsFunction(func, data))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -724,6 +724,7 @@ void LLFolderView::draw()
|
|||
{
|
||||
// renamer is not connected to the item we are renaming in any form so manage it manually
|
||||
// TODO: consider stopping on any scroll action instead of when out of visible area
|
||||
LL_DEBUGS("Inventory") << "Renamer out of bounds, hiding" << LL_ENDL;
|
||||
finishRenamingItem();
|
||||
}
|
||||
|
||||
|
|
@ -1085,6 +1086,8 @@ void LLFolderView::paste()
|
|||
// public rename functionality - can only start the process
|
||||
void LLFolderView::startRenamingSelectedItem( void )
|
||||
{
|
||||
LL_DEBUGS("Inventory") << "Starting inventory renamer" << LL_ENDL;
|
||||
|
||||
// make sure selection is visible
|
||||
scrollToShowSelection();
|
||||
|
||||
|
|
@ -1568,10 +1571,10 @@ BOOL LLFolderView::handleRightMouseDown( S32 x, S32 y, MASK mask )
|
|||
}
|
||||
}
|
||||
|
||||
bool item_clicked = false;
|
||||
BOOL item_clicked = FALSE;
|
||||
for (selected_items_t::iterator item_it = mSelectedItems.begin(); item_it != mSelectedItems.end(); ++item_it)
|
||||
{
|
||||
item_clicked |= (bool)(*item_it)->getRect().pointInRect(x, y);
|
||||
item_clicked |= (*item_it)->getRect().pointInRect(x, y);
|
||||
}
|
||||
if(!item_clicked && mSingleFolderMode)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -296,8 +296,8 @@ void LLFloaterChangeItemThumbnail::refreshFromInventory()
|
|||
if (obj)
|
||||
{
|
||||
const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
|
||||
bool in_trash = (obj->getUUID() == trash_id) || gInventory.isObjectDescendentOf(obj->getUUID(), trash_id);
|
||||
if (in_trash)
|
||||
bool in_trash = gInventory.isObjectDescendentOf(obj->getUUID(), trash_id);
|
||||
if (in_trash && obj->getUUID() != trash_id)
|
||||
{
|
||||
// Close properties when moving to trash
|
||||
// Aren't supposed to view properties from trash
|
||||
|
|
|
|||
|
|
@ -988,8 +988,8 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
|
|||
|
||||
// <FS:Zi> Don't offer "Show in Main View" for folders opened in separate inventory views
|
||||
// as there are no tabs to switch to
|
||||
//if (!isPanelActive("All Items") && !isPanelActive("single_folder_inv") && !isPanelActive("comb_single_folder_inv"))
|
||||
if (!isPanelActive("All Items") && !isPanelActive("single_folder_inv") && !isPanelActive("comb_single_folder_inv") && !isPanelActive("inv_panel"))
|
||||
//if (!isPanelActive("All Items") && !isPanelActive("comb_single_folder_inv"))
|
||||
if (!isPanelActive("All Items") && !isPanelActive("comb_single_folder_inv") && !isPanelActive("inv_panel"))
|
||||
// </FS:Zi>
|
||||
{
|
||||
items.push_back(std::string("Show in Main Panel"));
|
||||
|
|
@ -4639,6 +4639,8 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items
|
|||
{
|
||||
disabled_items.push_back(std::string("Empty Trash"));
|
||||
}
|
||||
|
||||
items.push_back(std::string("thumbnail"));
|
||||
}
|
||||
else if(isItemInTrash())
|
||||
{
|
||||
|
|
@ -4705,6 +4707,7 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items
|
|||
if (model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT) == mUUID)
|
||||
{
|
||||
items.push_back(std::string("Copy outfit list to clipboard"));
|
||||
addOpenFolderMenuOptions(flags, items);
|
||||
}
|
||||
|
||||
//Added by aura to force inventory pull on right-click to display folder options correctly. 07-17-06
|
||||
|
|
@ -4857,9 +4860,12 @@ void LLFolderBridge::buildContextMenuFolderOptions(U32 flags, menuentry_vec_t&
|
|||
if(!category) return;
|
||||
|
||||
const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH);
|
||||
if (trash_id == mUUID) return;
|
||||
if (isItemInTrash()) return;
|
||||
|
||||
if ((trash_id == mUUID) || isItemInTrash())
|
||||
{
|
||||
addOpenFolderMenuOptions(flags, items);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isItemRemovable())
|
||||
{
|
||||
disabled_items.push_back(std::string("Delete"));
|
||||
|
|
@ -4901,15 +4907,7 @@ void LLFolderBridge::buildContextMenuFolderOptions(U32 flags, menuentry_vec_t&
|
|||
return;
|
||||
}
|
||||
|
||||
if ((flags & ITEM_IN_MULTI_SELECTION) == 0)
|
||||
{
|
||||
items.push_back(std::string("open_in_new_window"));
|
||||
items.push_back(std::string("Open Folder Separator"));
|
||||
if(isPanelActive("single_folder_inv"))
|
||||
{
|
||||
items.push_back(std::string("open_in_current_window"));
|
||||
}
|
||||
}
|
||||
addOpenFolderMenuOptions(flags, items);
|
||||
|
||||
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
||||
if (LLFolderType::lookupIsProtectedType(type) && is_agent_inventory)
|
||||
|
|
@ -5006,6 +5004,20 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||
menu.arrangeAndClear();
|
||||
}
|
||||
|
||||
void LLFolderBridge::addOpenFolderMenuOptions(U32 flags, menuentry_vec_t& items)
|
||||
{
|
||||
if ((flags & ITEM_IN_MULTI_SELECTION) == 0)
|
||||
{
|
||||
items.push_back(std::string("open_in_new_window"));
|
||||
items.push_back(std::string("Open Folder Separator"));
|
||||
items.push_back(std::string("Copy Separator"));
|
||||
if(isPanelActive("comb_single_folder_inv"))
|
||||
{
|
||||
items.push_back(std::string("open_in_current_window"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool LLFolderBridge::hasChildren() const
|
||||
{
|
||||
LLInventoryModel* model = getInventoryModel();
|
||||
|
|
|
|||
|
|
@ -366,6 +366,7 @@ public:
|
|||
protected:
|
||||
void buildContextMenuOptions(U32 flags, menuentry_vec_t& items, menuentry_vec_t& disabled_items);
|
||||
void buildContextMenuFolderOptions(U32 flags, menuentry_vec_t& items, menuentry_vec_t& disabled_items);
|
||||
void addOpenFolderMenuOptions(U32 flags, menuentry_vec_t& items);
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Menu callbacks
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ LLInventoryGallery::LLInventoryGallery(const LLInventoryGallery::Params& p)
|
|||
mRowPanWidthFactor(p.row_panel_width_factor),
|
||||
mGalleryWidthFactor(p.gallery_width_factor),
|
||||
mIsInitialized(false),
|
||||
mRootDirty(false),
|
||||
mNeedsArrange(false),
|
||||
mSearchType(LLInventoryFilter::SEARCHTYPE_NAME)
|
||||
{
|
||||
|
|
@ -142,8 +143,8 @@ LLInventoryGallery::~LLInventoryGallery()
|
|||
delete mInventoryGalleryMenu;
|
||||
delete mRootGalleryMenu;
|
||||
delete mFilter;
|
||||
|
||||
gIdleCallbacks.deleteFunction(onIdle, this);
|
||||
|
||||
gIdleCallbacks.deleteFunction(onIdle, (void*)this);
|
||||
|
||||
while (!mUnusedRowPanels.empty())
|
||||
{
|
||||
|
|
@ -157,6 +158,13 @@ LLInventoryGallery::~LLInventoryGallery()
|
|||
mUnusedItemPanels.pop_back();
|
||||
panelp->die();
|
||||
}
|
||||
while (!mHiddenItems.empty())
|
||||
{
|
||||
LLPanel* panelp = mHiddenItems.back();
|
||||
mHiddenItems.pop_back();
|
||||
panelp->die();
|
||||
}
|
||||
|
||||
|
||||
if (gInventory.containsObserver(mCategoriesObserver))
|
||||
{
|
||||
|
|
@ -176,8 +184,6 @@ LLInventoryGallery::~LLInventoryGallery()
|
|||
|
||||
void LLInventoryGallery::setRootFolder(const LLUUID cat_id)
|
||||
{
|
||||
gIdleCallbacks.deleteFunction(onIdle, this);
|
||||
|
||||
LLViewerInventoryCategory* category = gInventory.getCategory(cat_id);
|
||||
if(!category || (mFolderID == cat_id))
|
||||
{
|
||||
|
|
@ -187,8 +193,26 @@ void LLInventoryGallery::setRootFolder(const LLUUID cat_id)
|
|||
{
|
||||
mBackwardFolders.push_back(mFolderID);
|
||||
}
|
||||
|
||||
gIdleCallbacks.deleteFunction(onIdle, (void*)this);
|
||||
|
||||
mFolderID = cat_id;
|
||||
updateRootFolder();
|
||||
mItemToSelect.setNull();
|
||||
mItemBuildQuery.clear();
|
||||
mNeedsArrange = false;
|
||||
dirtyRootFolder();
|
||||
}
|
||||
|
||||
void LLInventoryGallery::dirtyRootFolder()
|
||||
{
|
||||
if (getVisible())
|
||||
{
|
||||
updateRootFolder();
|
||||
}
|
||||
else
|
||||
{
|
||||
mRootDirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
void LLInventoryGallery::updateRootFolder()
|
||||
|
|
@ -206,6 +230,7 @@ void LLInventoryGallery::updateRootFolder()
|
|||
{
|
||||
updateRemovedItem(mHiddenItems[i]->getUUID());
|
||||
}
|
||||
mItemBuildQuery.clear();
|
||||
|
||||
if (gInventory.containsObserver(mCategoriesObserver))
|
||||
{
|
||||
|
|
@ -249,17 +274,17 @@ void LLInventoryGallery::updateRootFolder()
|
|||
iter != cat_array->end();
|
||||
iter++)
|
||||
{
|
||||
updateAddedItem((*iter)->getUUID());
|
||||
mItemBuildQuery.insert((*iter)->getUUID());
|
||||
}
|
||||
|
||||
for (LLInventoryModel::item_array_t::const_iterator iter = item_array->begin();
|
||||
iter != item_array->end();
|
||||
iter++)
|
||||
{
|
||||
updateAddedItem((*iter)->getUUID());
|
||||
mItemBuildQuery.insert((*iter)->getUUID());
|
||||
}
|
||||
reArrangeRows();
|
||||
mIsInitialized = true;
|
||||
mRootDirty = false;
|
||||
|
||||
if (mScrollPanel)
|
||||
{
|
||||
|
|
@ -273,6 +298,11 @@ void LLInventoryGallery::updateRootFolder()
|
|||
{
|
||||
initGallery();
|
||||
}
|
||||
|
||||
if (!mItemBuildQuery.empty())
|
||||
{
|
||||
gIdleCallbacks.addFunction(onIdle, (void*)this);
|
||||
}
|
||||
}
|
||||
|
||||
void LLInventoryGallery::initGallery()
|
||||
|
|
@ -305,14 +335,26 @@ void LLInventoryGallery::draw()
|
|||
}
|
||||
}
|
||||
|
||||
void LLInventoryGallery::onVisibilityChange(BOOL new_visibility)
|
||||
{
|
||||
if (new_visibility && mRootDirty)
|
||||
{
|
||||
updateRootFolder();
|
||||
}
|
||||
LLPanel::onVisibilityChange(new_visibility);
|
||||
}
|
||||
|
||||
bool LLInventoryGallery::updateRowsIfNeeded()
|
||||
{
|
||||
if(((getRect().getWidth() - mRowPanelWidth) > mItemWidth) && mRowCount > 1)
|
||||
S32 scroll_content_width = mScrollPanel ? mScrollPanel->getVisibleContentRect().getWidth() : getRect().getWidth();
|
||||
if(((scroll_content_width - mRowPanelWidth) > mItemWidth)
|
||||
&& mRowCount > 1)
|
||||
{
|
||||
reArrangeRows(1);
|
||||
return true;
|
||||
}
|
||||
else if((mRowPanelWidth > (getRect().getWidth() + mItemHorizontalGap)) && mItemsInRow > GALLERY_ITEMS_PER_ROW_MIN)
|
||||
else if((mRowPanelWidth > (scroll_content_width + mItemHorizontalGap))
|
||||
&& mItemsInRow > GALLERY_ITEMS_PER_ROW_MIN)
|
||||
{
|
||||
reArrangeRows(-1);
|
||||
return true;
|
||||
|
|
@ -344,7 +386,7 @@ void LLInventoryGallery::reArrangeRows(S32 row_diff)
|
|||
std::vector<LLInventoryGalleryItem*> buf_items = mItems;
|
||||
for (std::vector<LLInventoryGalleryItem*>::const_reverse_iterator it = buf_items.rbegin(); it != buf_items.rend(); ++it)
|
||||
{
|
||||
removeFromGalleryLast(*it);
|
||||
removeFromGalleryLast(*it, false);
|
||||
}
|
||||
for (std::vector<LLInventoryGalleryItem*>::const_reverse_iterator it = mHiddenItems.rbegin(); it != mHiddenItems.rend(); ++it)
|
||||
{
|
||||
|
|
@ -457,11 +499,12 @@ void LLInventoryGallery::addToGallery(LLInventoryGalleryItem* item)
|
|||
}
|
||||
|
||||
|
||||
void LLInventoryGallery::removeFromGalleryLast(LLInventoryGalleryItem* item)
|
||||
void LLInventoryGallery::removeFromGalleryLast(LLInventoryGalleryItem* item, bool needs_reshape)
|
||||
{
|
||||
if(item->isHidden())
|
||||
{
|
||||
mHiddenItems.pop_back();
|
||||
// Note: item still exists!!!
|
||||
return;
|
||||
}
|
||||
int n_prev = mItemsAddedCount;
|
||||
|
|
@ -482,7 +525,10 @@ void LLInventoryGallery::removeFromGalleryLast(LLInventoryGalleryItem* item)
|
|||
}
|
||||
removeLastRow();
|
||||
}
|
||||
reshapeGalleryPanel(row_count);
|
||||
if (needs_reshape)
|
||||
{
|
||||
reshapeGalleryPanel(row_count);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -491,6 +537,7 @@ void LLInventoryGallery::removeFromGalleryMiddle(LLInventoryGalleryItem* item)
|
|||
if(item->isHidden())
|
||||
{
|
||||
mHiddenItems.erase(std::remove(mHiddenItems.begin(), mHiddenItems.end(), item), mHiddenItems.end());
|
||||
// item still exists and needs to be deleted or used!!!
|
||||
return;
|
||||
}
|
||||
int n = mItemIndexMap[item];
|
||||
|
|
@ -522,12 +569,11 @@ void LLInventoryGallery::removeFromLastRow(LLInventoryGalleryItem* item)
|
|||
LLInventoryGalleryItem* LLInventoryGallery::buildGalleryItem(std::string name, LLUUID item_id, LLAssetType::EType type, LLUUID thumbnail_id, LLInventoryType::EType inventory_type, U32 flags, bool is_link, bool is_worn)
|
||||
{
|
||||
LLInventoryGalleryItem::Params giparams;
|
||||
giparams.visible = true;
|
||||
giparams.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP);
|
||||
giparams.rect(LLRect(0,mItemHeight, mItemWidth, 0));
|
||||
LLInventoryGalleryItem* gitem = LLUICtrlFactory::create<LLInventoryGalleryItem>(giparams);
|
||||
gitem->reshape(mItemWidth, mItemHeight);
|
||||
gitem->setVisible(true);
|
||||
gitem->setFollowsLeft();
|
||||
gitem->setFollowsTop();
|
||||
gitem->setName(name);
|
||||
gitem->setItemName(name);
|
||||
gitem->setUUID(item_id);
|
||||
gitem->setGallery(this);
|
||||
gitem->setType(type, inventory_type, flags, is_link);
|
||||
|
|
@ -542,6 +588,9 @@ LLInventoryGalleryItem* LLInventoryGallery::buildGalleryItem(std::string name, L
|
|||
void LLInventoryGallery::buildGalleryPanel(int row_count)
|
||||
{
|
||||
LLPanel::Params params;
|
||||
params.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP);
|
||||
params.visible = true;
|
||||
params.use_bounding_rect = false;
|
||||
mGalleryPanel = LLUICtrlFactory::create<LLPanel>(params);
|
||||
reshapeGalleryPanel(row_count);
|
||||
}
|
||||
|
|
@ -554,40 +603,41 @@ void LLInventoryGallery::reshapeGalleryPanel(int row_count)
|
|||
LLRect rect = LLRect(left, bottom + height, left + mGalleryWidth, bottom);
|
||||
mGalleryPanel->setRect(rect);
|
||||
mGalleryPanel->reshape(mGalleryWidth, height);
|
||||
mGalleryPanel->setVisible(true);
|
||||
mGalleryPanel->setFollowsLeft();
|
||||
mGalleryPanel->setFollowsTop();
|
||||
}
|
||||
|
||||
LLPanel* LLInventoryGallery::buildItemPanel(int left)
|
||||
{
|
||||
LLPanel::Params lpparams;
|
||||
int top = 0;
|
||||
LLPanel* lpanel = NULL;
|
||||
if(mUnusedItemPanels.empty())
|
||||
{
|
||||
LLPanel::Params lpparams;
|
||||
lpparams.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP);
|
||||
lpparams.visible = true;
|
||||
lpparams.rect(LLRect(left, top + mItemHeight, left + mItemWidth + mItemHorizontalGap, top));
|
||||
lpparams.use_bounding_rect = false;
|
||||
lpanel = LLUICtrlFactory::create<LLPanel>(lpparams);
|
||||
}
|
||||
else
|
||||
{
|
||||
lpanel = mUnusedItemPanels.back();
|
||||
mUnusedItemPanels.pop_back();
|
||||
|
||||
LLRect rect = LLRect(left, top + mItemHeight, left + mItemWidth + mItemHorizontalGap, top);
|
||||
lpanel->setShape(rect, false);
|
||||
}
|
||||
LLRect rect = LLRect(left, top + mItemHeight, left + mItemWidth + mItemHorizontalGap, top);
|
||||
lpanel->setRect(rect);
|
||||
lpanel->reshape(mItemWidth + mItemHorizontalGap, mItemHeight);
|
||||
lpanel->setVisible(true);
|
||||
lpanel->setFollowsLeft();
|
||||
lpanel->setFollowsTop();
|
||||
return lpanel;
|
||||
}
|
||||
|
||||
LLPanel* LLInventoryGallery::buildRowPanel(int left, int bottom)
|
||||
{
|
||||
LLPanel::Params sparams;
|
||||
LLPanel* stack = NULL;
|
||||
if(mUnusedRowPanels.empty())
|
||||
{
|
||||
LLPanel::Params sparams;
|
||||
sparams.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP);
|
||||
sparams.use_bounding_rect = false;
|
||||
sparams.visible = true;
|
||||
stack = LLUICtrlFactory::create<LLPanel>(sparams);
|
||||
}
|
||||
else
|
||||
|
|
@ -604,9 +654,6 @@ void LLInventoryGallery::moveRowPanel(LLPanel* stack, int left, int bottom)
|
|||
LLRect rect = LLRect(left, bottom + mRowPanelHeight, left + mRowPanelWidth, bottom);
|
||||
stack->setRect(rect);
|
||||
stack->reshape(mRowPanelWidth, mRowPanelHeight);
|
||||
stack->setVisible(true);
|
||||
stack->setFollowsLeft();
|
||||
stack->setFollowsTop();
|
||||
}
|
||||
|
||||
void LLInventoryGallery::setFilterSubString(const std::string& string)
|
||||
|
|
@ -617,12 +664,15 @@ void LLInventoryGallery::setFilterSubString(const std::string& string)
|
|||
//reArrangeRows();
|
||||
}
|
||||
|
||||
void LLInventoryGallery::applyFilter(LLInventoryGalleryItem* item, const std::string& filter_substring)
|
||||
bool LLInventoryGallery::applyFilter(LLInventoryGalleryItem* item, const std::string& filter_substring)
|
||||
{
|
||||
if(item)
|
||||
{
|
||||
item->setHidden(!checkAgainstFilters(item, filter_substring));
|
||||
bool visible = checkAgainstFilters(item, filter_substring);
|
||||
item->setHidden(!visible);
|
||||
return visible;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool LLInventoryGallery::checkAgainstFilters(LLInventoryGalleryItem* item, const std::string& filter_substring)
|
||||
|
|
@ -701,10 +751,26 @@ void LLInventoryGallery::onIdle(void* userdata)
|
|||
return;
|
||||
}
|
||||
|
||||
const F64 MAX_TIME_VISIBLE = 0.020f;
|
||||
const F64 MAX_TIME_HIDDEN = 0.001f; // take it slow
|
||||
const F64 max_time = self->getVisible() ? MAX_TIME_VISIBLE : MAX_TIME_HIDDEN;
|
||||
F64 curent_time = LLTimer::getTotalSeconds();
|
||||
const F64 end_time = curent_time + max_time;
|
||||
|
||||
while (!self->mItemBuildQuery.empty() && end_time > curent_time)
|
||||
{
|
||||
uuid_set_t::iterator iter = self->mItemBuildQuery.begin();
|
||||
LLUUID item_id = *iter;
|
||||
self->mNeedsArrange |= self->updateAddedItem(item_id);
|
||||
self->mItemBuildQuery.erase(iter);
|
||||
curent_time = LLTimer::getTotalSeconds();
|
||||
}
|
||||
|
||||
if (self->mNeedsArrange)
|
||||
{
|
||||
self->mNeedsArrange = false;
|
||||
self->reArrangeRows();
|
||||
self->updateMessageVisibility();
|
||||
}
|
||||
|
||||
if (self->mItemToSelect.notNull())
|
||||
|
|
@ -714,7 +780,7 @@ void LLInventoryGallery::onIdle(void* userdata)
|
|||
self->changeItemSelection(item_to_select, true);
|
||||
}
|
||||
|
||||
if (self->mItemToSelect.isNull())
|
||||
if (self->mItemToSelect.isNull() && self->mItemBuildQuery.empty())
|
||||
{
|
||||
gIdleCallbacks.deleteFunction(onIdle, (void*)self);
|
||||
}
|
||||
|
|
@ -745,13 +811,13 @@ void LLInventoryGallery::getCurrentCategories(uuid_vec_t& vcur)
|
|||
}
|
||||
}
|
||||
|
||||
void LLInventoryGallery::updateAddedItem(LLUUID item_id)
|
||||
bool LLInventoryGallery::updateAddedItem(LLUUID item_id)
|
||||
{
|
||||
LLInventoryObject* obj = gInventory.getObject(item_id);
|
||||
if (!obj)
|
||||
{
|
||||
LL_WARNS("InventoryGallery") << "Failed to find item: " << item_id << LL_ENDL;
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string name = obj->getName();
|
||||
|
|
@ -782,18 +848,20 @@ void LLInventoryGallery::updateAddedItem(LLUUID item_id)
|
|||
}
|
||||
}
|
||||
|
||||
bool res = false;
|
||||
LLInventoryGalleryItem* item = buildGalleryItem(name, item_id, obj->getType(), thumbnail_id, inventory_type, misc_flags, obj->getIsLinkType(), is_worn);
|
||||
mItemMap.insert(LLInventoryGallery::gallery_item_map_t::value_type(item_id, item));
|
||||
item->setRightMouseDownCallback(boost::bind(&LLInventoryGallery::showContextMenu, this, _1, _2, _3, item_id));
|
||||
item->setFocusReceivedCallback(boost::bind(&LLInventoryGallery::changeItemSelection, this, item_id, false));
|
||||
if (mGalleryCreated)
|
||||
{
|
||||
applyFilter(item, mFilterSubString);
|
||||
res = applyFilter(item, mFilterSubString);
|
||||
addToGallery(item);
|
||||
}
|
||||
|
||||
mThumbnailsObserver->addItem(item_id,
|
||||
boost::bind(&LLInventoryGallery::updateItemThumbnail, this, item_id));
|
||||
return res;
|
||||
}
|
||||
|
||||
void LLInventoryGallery::updateRemovedItem(LLUUID item_id)
|
||||
|
|
@ -812,9 +880,12 @@ void LLInventoryGallery::updateRemovedItem(LLUUID item_id)
|
|||
// kill removed item
|
||||
if (item != NULL)
|
||||
{
|
||||
// Todo: instead of deleting, store somewhere to reuse later
|
||||
item->die();
|
||||
}
|
||||
}
|
||||
|
||||
mItemBuildQuery.erase(item_id);
|
||||
}
|
||||
|
||||
void LLInventoryGallery::updateChangedItemName(LLUUID item_id, std::string name)
|
||||
|
|
@ -825,7 +896,7 @@ void LLInventoryGallery::updateChangedItemName(LLUUID item_id, std::string name)
|
|||
LLInventoryGalleryItem* item = iter->second;
|
||||
if (item)
|
||||
{
|
||||
item->setName(name);
|
||||
item->setItemName(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -870,24 +941,15 @@ void LLInventoryGallery::updateItemThumbnail(LLUUID item_id)
|
|||
}
|
||||
}
|
||||
|
||||
void LLInventoryGallery::onThumbnailAdded(LLUUID item_id)
|
||||
{
|
||||
if((mItemMap.count(item_id) == 0) && mFilter->checkAgainstFilterThumbnails(item_id))
|
||||
{
|
||||
updateAddedItem(item_id);
|
||||
reArrangeRows();
|
||||
}
|
||||
}
|
||||
|
||||
BOOL LLInventoryGallery::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLUUID old_selection = mSelectedItemID;
|
||||
BOOL res = LLPanel::handleRightMouseDown(x, y, mask);
|
||||
if (!res)
|
||||
if(mItemMap[mSelectedItemID])
|
||||
{
|
||||
clearSelection();
|
||||
mItemMap[old_selection]->setFocus(false);
|
||||
mItemMap[mSelectedItemID]->setFocus(false);
|
||||
setFocus(true);
|
||||
}
|
||||
clearSelection();
|
||||
BOOL res = LLPanel::handleRightMouseDown(x, y, mask);
|
||||
|
||||
if (mSelectedItemID.isNull())
|
||||
{
|
||||
|
|
@ -1257,7 +1319,7 @@ void LLInventoryGallery::paste()
|
|||
}
|
||||
|
||||
const LLUUID& marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS);
|
||||
if (gInventory.isObjectDescendentOf(mSelectedItemID, marketplacelistings_id))
|
||||
if (!mSelectedItemID.isNull() && gInventory.isObjectDescendentOf(mSelectedItemID, marketplacelistings_id))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -1649,6 +1711,7 @@ void LLInventoryGallery::computeDifference(
|
|||
|
||||
uuid_vec_t vcur;
|
||||
getCurrentCategories(vcur);
|
||||
std::copy(mItemBuildQuery.begin(), mItemBuildQuery.end(), std::back_inserter(vcur));
|
||||
|
||||
LLCommonUtils::computeDifference(vnew, vcur, vadded, vremoved);
|
||||
}
|
||||
|
|
@ -1793,7 +1856,7 @@ void LLInventoryGallery::onForwardFolder()
|
|||
mBackwardFolders.push_back(mFolderID);
|
||||
mFolderID = mForwardFolders.back();
|
||||
mForwardFolders.pop_back();
|
||||
updateRootFolder();
|
||||
dirtyRootFolder();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1804,7 +1867,7 @@ void LLInventoryGallery::onBackwardFolder()
|
|||
mForwardFolders.push_back(mFolderID);
|
||||
mFolderID = mBackwardFolders.back();
|
||||
mBackwardFolders.pop_back();
|
||||
updateRootFolder();
|
||||
dirtyRootFolder();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1841,6 +1904,11 @@ BOOL LLInventoryGallery::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
|||
return handled;
|
||||
}
|
||||
|
||||
bool LLInventoryGallery::areViewsInitialized()
|
||||
{
|
||||
return mGalleryCreated && mItemBuildQuery.empty();
|
||||
}
|
||||
|
||||
bool LLInventoryGallery::hasDescendents(const LLUUID& cat_id)
|
||||
{
|
||||
LLInventoryModel::cat_array_t* cats;
|
||||
|
|
@ -1946,7 +2014,7 @@ LLInventoryGalleryItem::LLInventoryGalleryItem(const Params& p)
|
|||
: LLPanel(p),
|
||||
mSelected(false),
|
||||
mDefaultImage(true),
|
||||
mName(""),
|
||||
mItemName(""),
|
||||
mWornSuffix(""),
|
||||
mPermSuffix(""),
|
||||
mUUID(LLUUID()),
|
||||
|
|
@ -2062,9 +2130,9 @@ void LLInventoryGalleryItem::draw()
|
|||
gl_rect_2d(border, border_color.get(), FALSE);
|
||||
}
|
||||
|
||||
void LLInventoryGalleryItem::setName(std::string name)
|
||||
void LLInventoryGalleryItem::setItemName(std::string name)
|
||||
{
|
||||
mName = name;
|
||||
mItemName = name;
|
||||
updateNameText();
|
||||
}
|
||||
|
||||
|
|
@ -2232,9 +2300,9 @@ LLFontGL* LLInventoryGalleryItem::getTextFont()
|
|||
void LLInventoryGalleryItem::updateNameText()
|
||||
{
|
||||
mNameText->setFont(getTextFont());
|
||||
mNameText->setText(mName + mPermSuffix + mWornSuffix);
|
||||
mNameText->setToolTip(mName + mPermSuffix + mWornSuffix);
|
||||
getChild<LLThumbnailCtrl>("preview_thumbnail")->setToolTip(mName + mPermSuffix + mWornSuffix);
|
||||
mNameText->setText(mItemName + mPermSuffix + mWornSuffix);
|
||||
mNameText->setToolTip(mItemName + mPermSuffix + mWornSuffix);
|
||||
getChild<LLThumbnailCtrl>("preview_thumbnail")->setToolTip(mItemName + mPermSuffix + mWornSuffix);
|
||||
}
|
||||
|
||||
//-----------------------------
|
||||
|
|
@ -2244,33 +2312,6 @@ void LLInventoryGalleryItem::updateNameText()
|
|||
void LLThumbnailsObserver::changed(U32 mask)
|
||||
{
|
||||
std::vector<LLUUID> deleted_ids;
|
||||
for (item_map_t::iterator iter = mSkippedItems.begin();
|
||||
iter != mSkippedItems.end();
|
||||
++iter)
|
||||
{
|
||||
const LLUUID& obj_id = (*iter).first;
|
||||
LLItemData& data = (*iter).second;
|
||||
|
||||
LLInventoryObject* obj = gInventory.getObject(obj_id);
|
||||
if (!obj)
|
||||
{
|
||||
deleted_ids.push_back(obj_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
const LLUUID thumbnail_id = obj->getThumbnailUUID();
|
||||
if (data.mThumbnailID != thumbnail_id)
|
||||
{
|
||||
data.mThumbnailID = thumbnail_id;
|
||||
data.mCallback();
|
||||
}
|
||||
}
|
||||
for (std::vector<LLUUID>::iterator deleted_id = deleted_ids.begin(); deleted_id != deleted_ids.end(); ++deleted_id)
|
||||
{
|
||||
removeSkippedItem(*deleted_id);
|
||||
}
|
||||
deleted_ids.clear();
|
||||
|
||||
for (item_map_t::iterator iter = mItemMap.begin();
|
||||
iter != mItemMap.end();
|
||||
++iter)
|
||||
|
|
@ -2311,25 +2352,11 @@ bool LLThumbnailsObserver::addItem(const LLUUID& obj_id, callback_t cb)
|
|||
return false;
|
||||
}
|
||||
|
||||
void LLThumbnailsObserver::addSkippedItem(const LLUUID& obj_id, callback_t cb)
|
||||
{
|
||||
LLInventoryObject* obj = gInventory.getObject(obj_id);
|
||||
if (obj)
|
||||
{
|
||||
mSkippedItems.insert(item_map_value_t(obj_id, LLItemData(obj_id, obj->getThumbnailUUID(), cb)));
|
||||
}
|
||||
}
|
||||
|
||||
void LLThumbnailsObserver::removeItem(const LLUUID& obj_id)
|
||||
{
|
||||
mItemMap.erase(obj_id);
|
||||
}
|
||||
|
||||
void LLThumbnailsObserver::removeSkippedItem(const LLUUID& obj_id)
|
||||
{
|
||||
mSkippedItems.erase(obj_id);
|
||||
}
|
||||
|
||||
//-----------------------------
|
||||
// Helper drag&drop functions
|
||||
//-----------------------------
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@ public:
|
|||
BOOL postBuild() override;
|
||||
void initGallery();
|
||||
void draw() override;
|
||||
void onVisibilityChange(BOOL new_visibility) override;
|
||||
BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type,
|
||||
void* cargo_data, EAcceptance* accept, std::string& tooltip_msg) override;
|
||||
BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override;
|
||||
|
|
@ -91,11 +92,10 @@ public:
|
|||
bool checkAgainstFilterType(const LLUUID& object_id);
|
||||
|
||||
void getCurrentCategories(uuid_vec_t& vcur);
|
||||
void updateAddedItem(LLUUID item_id);
|
||||
bool updateAddedItem(LLUUID item_id); // returns true if added item is visible
|
||||
void updateRemovedItem(LLUUID item_id);
|
||||
void updateChangedItemName(LLUUID item_id, std::string name);
|
||||
void updateItemThumbnail(LLUUID item_id);
|
||||
void onThumbnailAdded(LLUUID item_id);
|
||||
void updateWornItem(LLUUID item_id, bool is_worn);
|
||||
|
||||
void updateMessageVisibility();
|
||||
|
|
@ -103,6 +103,7 @@ public:
|
|||
void setRootFolder(const LLUUID cat_id);
|
||||
void updateRootFolder();
|
||||
LLUUID getRootFolder() { return mFolderID; }
|
||||
bool isRootDirty() { return mRootDirty; }
|
||||
boost::signals2::connection setRootChangedCallback(callback_t cb);
|
||||
void onForwardFolder();
|
||||
void onBackwardFolder();
|
||||
|
|
@ -133,6 +134,7 @@ public:
|
|||
void setSearchType(LLInventoryFilter::ESearchType type);
|
||||
LLInventoryFilter::ESearchType getSearchType() { return mSearchType; }
|
||||
|
||||
bool areViewsInitialized();
|
||||
bool hasDescendents(const LLUUID& cat_id);
|
||||
bool hasVisibleItems();
|
||||
void handleModifiedFilter();
|
||||
|
|
@ -165,9 +167,10 @@ protected:
|
|||
|
||||
void showContextMenu(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& item_id);
|
||||
|
||||
void applyFilter(LLInventoryGalleryItem* item, const std::string& filter_substring);
|
||||
bool applyFilter(LLInventoryGalleryItem* item, const std::string& filter_substring);
|
||||
bool checkAgainstFilters(LLInventoryGalleryItem* item, const std::string& filter_substring);
|
||||
static void onIdle(void* userdata);
|
||||
void dirtyRootFolder();
|
||||
|
||||
LLInventoryCategoriesObserver* mCategoriesObserver;
|
||||
LLThumbnailsObserver* mThumbnailsObserver;
|
||||
|
|
@ -176,6 +179,7 @@ protected:
|
|||
LLUUID mSelectedItemID;
|
||||
LLUUID mItemToSelect;
|
||||
bool mIsInitialized;
|
||||
bool mRootDirty;
|
||||
|
||||
selection_change_signal_t mSelectionChangeSignal;
|
||||
boost::signals2::signal<void()> mRootChangedSignal;
|
||||
|
|
@ -185,7 +189,7 @@ protected:
|
|||
|
||||
private:
|
||||
void addToGallery(LLInventoryGalleryItem* item);
|
||||
void removeFromGalleryLast(LLInventoryGalleryItem* item);
|
||||
void removeFromGalleryLast(LLInventoryGalleryItem* item, bool needs_reshape = true);
|
||||
void removeFromGalleryMiddle(LLInventoryGalleryItem* item);
|
||||
LLPanel* addLastRow();
|
||||
void removeLastRow();
|
||||
|
|
@ -243,6 +247,7 @@ private:
|
|||
gallery_item_map_t mItemMap;
|
||||
uuid_vec_t mCOFLinkedItems;
|
||||
uuid_vec_t mActiveGestures;
|
||||
uuid_set_t mItemBuildQuery;
|
||||
std::map<LLInventoryGalleryItem*, S32> mItemIndexMap;
|
||||
std::map<S32, LLInventoryGalleryItem*> mIndexToItemMap;
|
||||
|
||||
|
|
@ -283,7 +288,7 @@ public:
|
|||
|
||||
LLFontGL* getTextFont();
|
||||
|
||||
void setName(std::string name);
|
||||
void setItemName(std::string name);
|
||||
void setSelected(bool value);
|
||||
void setWorn(bool value);
|
||||
void setUUID(LLUUID id) {mUUID = id;}
|
||||
|
|
@ -296,7 +301,7 @@ public:
|
|||
void setCreatorName(std::string name) {mCreatorName = name;}
|
||||
std::string getCreatorName() { return mCreatorName;}
|
||||
|
||||
std::string getItemName() {return mName;}
|
||||
std::string getItemName() {return mItemName;}
|
||||
std::string getItemNameSuffix() {return mPermSuffix + mWornSuffix;}
|
||||
bool isDefaultImage() {return mDefaultImage;}
|
||||
|
||||
|
|
@ -330,7 +335,7 @@ private:
|
|||
|
||||
EInventorySortGroup mSortGroup;
|
||||
LLAssetType::EType mType;
|
||||
std::string mName;
|
||||
std::string mItemName;
|
||||
std::string mWornSuffix;
|
||||
std::string mPermSuffix;
|
||||
LLInventoryGallery* mGallery;
|
||||
|
|
@ -343,9 +348,7 @@ public:
|
|||
|
||||
virtual void changed(U32 mask);
|
||||
bool addItem(const LLUUID& obj_id, callback_t cb);
|
||||
void addSkippedItem(const LLUUID& obj_id, callback_t cb);
|
||||
void removeItem(const LLUUID& obj_id);
|
||||
void removeSkippedItem(const LLUUID& obj_id);
|
||||
|
||||
protected:
|
||||
|
||||
|
|
@ -365,7 +368,6 @@ protected:
|
|||
typedef std::map<LLUUID, LLItemData> item_map_t;
|
||||
typedef item_map_t::value_type item_map_value_t;
|
||||
item_map_t mItemMap;
|
||||
item_map_t mSkippedItems;
|
||||
};
|
||||
|
||||
class LLGalleryGestureObserver : public LLGestureManagerObserver
|
||||
|
|
|
|||
|
|
@ -334,7 +334,7 @@ void LLInventoryGalleryContextMenu::updateMenuItemsVisibility(LLContextMenu* men
|
|||
if(!is_link)
|
||||
{
|
||||
items.push_back(std::string("thumbnail"));
|
||||
if (!is_agent_inventory)
|
||||
if (!is_agent_inventory || (is_in_trash && !is_trash))
|
||||
{
|
||||
disabled_items.push_back(std::string("thumbnail"));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,13 +1121,14 @@ void LLInventoryModel::createNewCategory(const LLUUID& parent_id,
|
|||
{
|
||||
if (new_category.isNull())
|
||||
{
|
||||
if (callback)
|
||||
if (callback && !callback.empty())
|
||||
{
|
||||
callback(new_category);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// todo: not needed since AIS does the accounting?
|
||||
LLViewerInventoryCategory* folderp = gInventory.getCategory(new_category);
|
||||
if (!folderp)
|
||||
{
|
||||
|
|
@ -1147,7 +1148,7 @@ void LLInventoryModel::createNewCategory(const LLUUID& parent_id,
|
|||
updateCategory(cat);
|
||||
}
|
||||
|
||||
if (callback)
|
||||
if (callback && !callback.empty())
|
||||
{
|
||||
callback(new_category);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,7 +170,8 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :
|
|||
mInventoryViewModel(p.name),
|
||||
mGroupedItemBridge(new LLFolderViewGroupedItemBridge),
|
||||
mFocusSelection(false),
|
||||
mBuildChildrenViews(true)
|
||||
mBuildChildrenViews(true),
|
||||
mRootInited(false)
|
||||
{
|
||||
mInvFVBridgeBuilder = &INVENTORY_BRIDGE_BUILDER;
|
||||
|
||||
|
|
@ -311,6 +312,7 @@ void LLInventoryPanel::initFolderRoot()
|
|||
// build the views starting with that folder.
|
||||
LLFolderView* folder_view = createFolderRoot(root_id);
|
||||
mFolderRoot = folder_view->getHandle();
|
||||
mRootInited = true;
|
||||
|
||||
addItemID(root_id, mFolderRoot.get());
|
||||
}
|
||||
|
|
@ -347,22 +349,9 @@ void LLInventoryPanel::initFolderRoot()
|
|||
mCompletionObserver = new LLInvPanelComplObserver(boost::bind(&LLInventoryPanel::onItemsCompletion, this));
|
||||
mInventory->addObserver(mCompletionObserver);
|
||||
|
||||
if (mBuildViewsOnInit && mViewsInitialized == VIEWS_UNINITIALIZED)
|
||||
if (mBuildViewsOnInit)
|
||||
{
|
||||
// Build view of inventory if we need default full hierarchy and inventory is ready, otherwise do in onIdle.
|
||||
// Initializing views takes a while so always do it onIdle if viewer already loaded.
|
||||
if (mInventory->isInventoryUsable()
|
||||
&& LLStartUp::getStartupState() <= STATE_WEARABLES_WAIT)
|
||||
{
|
||||
// Usually this happens on login, so we have less time constraits, but too long and we can cause a disconnect
|
||||
const F64 max_time = 20.f;
|
||||
initializeViews(max_time);
|
||||
}
|
||||
else
|
||||
{
|
||||
mViewsInitialized = VIEWS_INITIALIZING;
|
||||
gIdleCallbacks.addFunction(onIdle, (void*)this);
|
||||
}
|
||||
initializeViewBuilding();
|
||||
}
|
||||
|
||||
if (mSortOrderSetting != INHERIT_SORT_ORDER)
|
||||
|
|
@ -407,13 +396,38 @@ void LLInventoryPanel::initFolderRoot()
|
|||
mClipboardState = LLClipboard::instance().getGeneration();
|
||||
}
|
||||
|
||||
void LLInventoryPanel::initializeViewBuilding()
|
||||
{
|
||||
if (mViewsInitialized == VIEWS_UNINITIALIZED)
|
||||
{
|
||||
LL_DEBUGS("Inventory") << "Setting views for " << getName() << " to initialize" << LL_ENDL;
|
||||
// Build view of inventory if we need default full hierarchy and inventory is ready, otherwise do in onIdle.
|
||||
// Initializing views takes a while so always do it onIdle if viewer already loaded.
|
||||
if (mInventory->isInventoryUsable()
|
||||
&& LLStartUp::getStartupState() <= STATE_WEARABLES_WAIT)
|
||||
{
|
||||
// Usually this happens on login, so we have less time constraits, but too long and we can cause a disconnect
|
||||
const F64 max_time = 20.f;
|
||||
initializeViews(max_time);
|
||||
}
|
||||
else
|
||||
{
|
||||
mViewsInitialized = VIEWS_INITIALIZING;
|
||||
gIdleCallbacks.addFunction(onIdle, (void*)this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLInventoryPanel::onVisibilityChange(BOOL new_visibility)
|
||||
{
|
||||
if (new_visibility && mViewsInitialized == VIEWS_UNINITIALIZED)
|
||||
{
|
||||
mViewsInitialized = VIEWS_INITIALIZING;
|
||||
gIdleCallbacks.addFunction(onIdle, (void*)this);
|
||||
// first call can be from tab initialization
|
||||
if (gFloaterView->getParentFloater(this) != NULL)
|
||||
{
|
||||
initializeViewBuilding();
|
||||
}
|
||||
}
|
||||
LLPanel::onVisibilityChange(new_visibility);
|
||||
}
|
||||
|
|
@ -965,6 +979,7 @@ void LLInventoryPanel::idle(void* user_data)
|
|||
void LLInventoryPanel::initializeViews(F64 max_time)
|
||||
{
|
||||
if (!gInventory.isInventoryUsable()) return;
|
||||
if (!mRootInited) return;
|
||||
|
||||
mViewsInitialized = VIEWS_BUILDING;
|
||||
|
||||
|
|
@ -1153,7 +1168,7 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id,
|
|||
if (objectp->getType() >= LLAssetType::AT_COUNT)
|
||||
{
|
||||
// Example: Happens when we add assets of new, not yet supported type to library
|
||||
LL_DEBUGS() << "LLInventoryPanel::buildViewsTree called with unknown objectp->mType : "
|
||||
LL_DEBUGS("Inventory") << "LLInventoryPanel::buildViewsTree called with unknown objectp->mType : "
|
||||
<< ((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID()
|
||||
<< LL_ENDL;
|
||||
|
||||
|
|
@ -1252,7 +1267,7 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id,
|
|||
else
|
||||
{
|
||||
create_children = true;
|
||||
folder_view_item->setChildrenInited(true);
|
||||
folder_view_item->setChildrenInited(mBuildChildrenViews);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -1293,6 +1308,11 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id,
|
|||
LLViewerInventoryItem::item_array_t* items;
|
||||
mInventory->lockDirectDescendentArrays(id, categories, items);
|
||||
|
||||
// Make sure panel won't lock in a loop over existing items if
|
||||
// folder is enormous and at least some work gets done
|
||||
const S32 MIN_ITEMS_PER_CALL = 500;
|
||||
const S32 starting_item_count = mItemMap.size();
|
||||
|
||||
LLFolderViewFolder *parentp = dynamic_cast<LLFolderViewFolder*>(folder_view_item);
|
||||
|
||||
if(categories)
|
||||
|
|
@ -1318,6 +1338,22 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id,
|
|||
buildViewsTree(cat->getUUID(), id, cat, NULL, parentp, (mode == BUILD_ONE_FOLDER ? BUILD_NO_CHILDREN : mode), depth);
|
||||
}
|
||||
}
|
||||
|
||||
if (!mBuildChildrenViews
|
||||
&& mode == BUILD_TIMELIMIT
|
||||
&& MIN_ITEMS_PER_CALL + starting_item_count < mItemMap.size())
|
||||
{
|
||||
// Single folder view, check if we still have time
|
||||
//
|
||||
// Todo: make sure this causes no dupplciates, breaks nothing,
|
||||
// especially filters and arrange
|
||||
F64 curent_time = LLTimer::getTotalSeconds();
|
||||
if (mBuildViewsEndTime < curent_time)
|
||||
{
|
||||
mBuildViewsQueue.push_back(id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1337,8 +1373,30 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id,
|
|||
LLFolderViewItem* view_itemp = getItemByID(item->getUUID());
|
||||
buildViewsTree(item->getUUID(), id, item, view_itemp, parentp, mode, depth);
|
||||
}
|
||||
|
||||
if (!mBuildChildrenViews
|
||||
&& mode == BUILD_TIMELIMIT
|
||||
&& MIN_ITEMS_PER_CALL + starting_item_count < mItemMap.size())
|
||||
{
|
||||
// Single folder view, check if we still have time
|
||||
//
|
||||
// Todo: make sure this causes no dupplciates, breaks nothing,
|
||||
// especially filters and arrange
|
||||
F64 curent_time = LLTimer::getTotalSeconds();
|
||||
if (mBuildViewsEndTime < curent_time)
|
||||
{
|
||||
mBuildViewsQueue.push_back(id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!mBuildChildrenViews)
|
||||
{
|
||||
// flat list is done initializing folder
|
||||
folder_view_item->setChildrenInited(true);
|
||||
}
|
||||
mInventory->unlockDirectDescendentArrays(id);
|
||||
}
|
||||
|
||||
|
|
@ -1597,6 +1655,10 @@ void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& it
|
|||
{
|
||||
fv->startRenamingSelectedItem();
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("Inventory") << "Failed to start renemr, no items selected" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
std::set<LLFolderViewItem*> selected_items = mFolderRoot.get()->getSelectionList();
|
||||
|
|
@ -2065,6 +2127,7 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const L
|
|||
LLPanelMainInventory* main_panel = inventory_panel->getMainInventoryPanel();
|
||||
if(main_panel->isSingleFolderMode() && main_panel->isGalleryViewMode())
|
||||
{
|
||||
LL_DEBUGS("Inventory") << "Opening gallery panel for item" << obj_id << LL_ENDL;
|
||||
main_panel->setGallerySelection(obj_id);
|
||||
return;
|
||||
}
|
||||
|
|
@ -2078,6 +2141,7 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const L
|
|||
// const LLInventoryObject *obj = gInventory.getObject(obj_id);
|
||||
// if (obj)
|
||||
// {
|
||||
// LL_DEBUGS("Inventory") << "Opening main inventory panel for item" << obj_id << LL_ENDL;
|
||||
// main_inventory->setSingleFolderViewRoot(obj->getParentUUID(), false);
|
||||
// main_inventory->setGallerySelection(obj_id);
|
||||
// return;
|
||||
|
|
@ -2108,7 +2172,7 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const L
|
|||
|
||||
if (active_panel)
|
||||
{
|
||||
LL_DEBUGS("Messaging") << "Highlighting" << obj_id << LL_ENDL;
|
||||
LL_DEBUGS("Messaging", "Inventory") << "Highlighting" << obj_id << LL_ENDL;
|
||||
|
||||
if (reset_filter)
|
||||
{
|
||||
|
|
@ -2401,12 +2465,11 @@ LLInventorySingleFolderPanel::LLInventorySingleFolderPanel(const Params& params)
|
|||
: LLInventoryPanel(params)
|
||||
{
|
||||
mBuildChildrenViews = false;
|
||||
mRootInited = false;
|
||||
getFilter().setSingleFolderMode(true);
|
||||
getFilter().setEmptyLookupMessage("InventorySingleFolderNoMatches");
|
||||
getFilter().setDefaultEmptyLookupMessage("InventorySingleFolderEmpty");
|
||||
|
||||
mCommitCallbackRegistrar.add("Inventory.OpenSelectedFolder", boost::bind(&LLInventorySingleFolderPanel::openInCurrentWindow, this, _2));
|
||||
mCommitCallbackRegistrar.replace("Inventory.DoToSelected", boost::bind(&LLInventorySingleFolderPanel::doToSelected, this, _2));
|
||||
mCommitCallbackRegistrar.replace("Inventory.DoCreate", boost::bind(&LLInventorySingleFolderPanel::doCreate, this, _2));
|
||||
mCommitCallbackRegistrar.replace("Inventory.Share", boost::bind(&LLInventorySingleFolderPanel::doShare, this));
|
||||
}
|
||||
|
|
@ -2440,11 +2503,6 @@ void LLInventorySingleFolderPanel::initFolderRoot(const LLUUID& start_folder_id)
|
|||
mFolderRoot.get()->setSingleFolderMode(true);
|
||||
}
|
||||
|
||||
void LLInventorySingleFolderPanel::openInCurrentWindow(const LLSD& userdata)
|
||||
{
|
||||
changeFolderRoot(LLFolderBridge::sSelf.get()->getUUID());
|
||||
}
|
||||
|
||||
void LLInventorySingleFolderPanel::changeFolderRoot(const LLUUID& new_id)
|
||||
{
|
||||
if (mFolderID != new_id)
|
||||
|
|
@ -2575,6 +2633,16 @@ void LLInventorySingleFolderPanel::doCreate(const LLSD& userdata)
|
|||
menu_create_inventory_item(this, dest_id, userdata);
|
||||
}
|
||||
|
||||
void LLInventorySingleFolderPanel::doToSelected(const LLSD& userdata)
|
||||
{
|
||||
if (("open_in_current_window" == userdata.asString()))
|
||||
{
|
||||
changeFolderRoot(LLFolderBridge::sSelf.get()->getUUID());
|
||||
return;
|
||||
}
|
||||
LLInventoryPanel::doToSelected(userdata);
|
||||
}
|
||||
|
||||
void LLInventorySingleFolderPanel::doShare()
|
||||
{
|
||||
LLAvatarActions::shareWithAvatars(this);
|
||||
|
|
|
|||
|
|
@ -285,6 +285,7 @@ public:
|
|||
|
||||
void changeFolderRoot(const LLUUID& new_id) {};
|
||||
void initFolderRoot();
|
||||
void initializeViewBuilding();
|
||||
|
||||
protected:
|
||||
void openStartFolderOrMyInventory(); // open the first level of inventory
|
||||
|
|
@ -322,7 +323,7 @@ protected:
|
|||
*/
|
||||
const LLInventoryFolderViewModelBuilder* mInvFVBridgeBuilder;
|
||||
|
||||
bool mBuildChildrenViews;
|
||||
bool mBuildChildrenViews; // build root and children
|
||||
bool mRootInited;
|
||||
|
||||
|
||||
|
|
@ -424,7 +425,6 @@ public:
|
|||
|
||||
void initFolderRoot(const LLUUID& start_folder_id = LLUUID::null);
|
||||
|
||||
void openInCurrentWindow(const LLSD& userdata);
|
||||
void changeFolderRoot(const LLUUID& new_id);
|
||||
void onForwardFolder();
|
||||
void onBackwardFolder();
|
||||
|
|
@ -432,6 +432,7 @@ public:
|
|||
LLUUID getSingleFolderRoot() { return mFolderID; }
|
||||
|
||||
void doCreate(const LLSD& userdata);
|
||||
void doToSelected(const LLSD& userdata);
|
||||
void doShare();
|
||||
|
||||
bool isBackwardAvailable();
|
||||
|
|
|
|||
|
|
@ -301,7 +301,7 @@ BOOL LLPanelMainInventory::postBuild()
|
|||
}
|
||||
// Now load the stored settings from disk, if available.
|
||||
std::string filterSaveName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME));
|
||||
LL_INFOS() << "LLPanelMainInventory::init: reading from " << filterSaveName << LL_ENDL;
|
||||
LL_INFOS("Inventory") << "LLPanelMainInventory::init: reading from " << filterSaveName << LL_ENDL;
|
||||
llifstream file(filterSaveName.c_str());
|
||||
LLSD savedFilterState;
|
||||
if (file.is_open())
|
||||
|
|
@ -576,7 +576,10 @@ LLFloaterSidePanelContainer* LLPanelMainInventory::newWindow()
|
|||
|
||||
if (!gAgentCamera.cameraMouselook())
|
||||
{
|
||||
return LLFloaterReg::showTypedInstance<LLFloaterSidePanelContainer>("inventory", LLSD(instance_num));
|
||||
LLFloaterSidePanelContainer* floater = LLFloaterReg::showTypedInstance<LLFloaterSidePanelContainer>("inventory", LLSD(instance_num));
|
||||
LLSidepanelInventory* sidepanel_inventory = floater->findChild<LLSidepanelInventory>("main_panel");
|
||||
sidepanel_inventory->initInventoryViews();
|
||||
return floater;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -648,8 +651,6 @@ void LLPanelMainInventory::doCreate(const LLSD& userdata)
|
|||
{
|
||||
if(isCombinationViewMode())
|
||||
{
|
||||
//show layout and inventory panel before adding the item
|
||||
//to avoid wrong position of the 'renamer'
|
||||
mForceShowInvLayout = true;
|
||||
}
|
||||
|
||||
|
|
@ -662,6 +663,13 @@ void LLPanelMainInventory::doCreate(const LLSD& userdata)
|
|||
{
|
||||
// might need to refresh visibility, delay rename
|
||||
panel->mCombInvUUIDNeedsRename = new_id;
|
||||
|
||||
if (panel->isCombinationViewMode())
|
||||
{
|
||||
panel->mForceShowInvLayout = true;
|
||||
}
|
||||
|
||||
LL_DEBUGS("Inventory") << "Done creating inventory: " << new_id << LL_ENDL;
|
||||
}
|
||||
};
|
||||
menu_create_inventory_item(NULL, getCurrentSFVRoot(), userdata, LLUUID::null, callback_created);
|
||||
|
|
@ -679,6 +687,7 @@ void LLPanelMainInventory::doCreate(const LLSD& userdata)
|
|||
if (panel)
|
||||
{
|
||||
panel->setGallerySelection(new_id);
|
||||
LL_DEBUGS("Inventory") << "Done creating inventory: " << new_id << LL_ENDL;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -1982,9 +1991,10 @@ void LLPanelMainInventory::onAddButtonClick()
|
|||
|
||||
void LLPanelMainInventory::setActivePanel()
|
||||
{
|
||||
// Todo: should cover gallery mode in some way
|
||||
if(mSingleFolderMode && isListViewMode())
|
||||
{
|
||||
mActivePanel = getChild<LLInventoryPanel>("single_folder_inv");
|
||||
mActivePanel = getChild<LLInventoryPanel>("comb_single_folder_inv");
|
||||
}
|
||||
else if(mSingleFolderMode && isCombinationViewMode())
|
||||
{
|
||||
|
|
@ -2002,6 +2012,16 @@ void LLPanelMainInventory::initSingleFolderRoot(const LLUUID& start_folder_id)
|
|||
mCombinationInventoryPanel->initFolderRoot(start_folder_id);
|
||||
}
|
||||
|
||||
void LLPanelMainInventory::initInventoryViews()
|
||||
{
|
||||
LLInventoryPanel* all_item = getChild<LLInventoryPanel>(ALL_ITEMS);
|
||||
all_item->initializeViewBuilding();
|
||||
LLInventoryPanel* recent_item = getChild<LLInventoryPanel>(RECENT_ITEMS);
|
||||
recent_item->initializeViewBuilding();
|
||||
LLInventoryPanel* worn_item = getChild<LLInventoryPanel>(WORN_ITEMS);
|
||||
worn_item->initializeViewBuilding();
|
||||
}
|
||||
|
||||
void LLPanelMainInventory::toggleViewMode()
|
||||
{
|
||||
if(mSingleFolderMode && isCombinationViewMode())
|
||||
|
|
@ -3036,6 +3056,7 @@ void LLPanelMainInventory::updatePanelVisibility()
|
|||
|
||||
// visibility will be controled by updateCombinationVisibility()
|
||||
mCombinationGalleryLayoutPanel->setVisible(true);
|
||||
mCombinationGalleryPanel->setVisible(true);
|
||||
mCombinationListLayoutPanel->setVisible(true);
|
||||
}
|
||||
else
|
||||
|
|
@ -3049,12 +3070,14 @@ void LLPanelMainInventory::updatePanelVisibility()
|
|||
comb_gallery_filter.markDefault();
|
||||
|
||||
mCombinationGalleryLayoutPanel->setVisible(mSingleFolderMode && isGalleryViewMode());
|
||||
mCombinationGalleryPanel->setVisible(mSingleFolderMode && isGalleryViewMode()); // to prevent or process updates
|
||||
mCombinationListLayoutPanel->setVisible(mSingleFolderMode && isListViewMode());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mCombinationGalleryLayoutPanel->setVisible(false);
|
||||
mCombinationGalleryPanel->setVisible(false); // to prevent updates
|
||||
mCombinationListLayoutPanel->setVisible(false);
|
||||
}
|
||||
}
|
||||
|
|
@ -3081,7 +3104,7 @@ void LLPanelMainInventory::updateCombinationVisibility()
|
|||
|
||||
if (mReshapeInvLayout
|
||||
&& show_inv_pane
|
||||
&& mCombinationGalleryPanel->hasVisibleItems()
|
||||
&& (mCombinationGalleryPanel->hasVisibleItems() || mCombinationGalleryPanel->areViewsInitialized())
|
||||
&& mCombinationInventoryPanel->areViewsInitialized())
|
||||
{
|
||||
mReshapeInvLayout = false;
|
||||
|
|
@ -3127,14 +3150,17 @@ void LLPanelMainInventory::updateCombinationVisibility()
|
|||
mCombinationListLayoutPanel->setShape(list_latout, true /*tell stack to account for new shape*/);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mCombInvUUIDNeedsRename.notNull() && mCombinationInventoryPanel->areViewsInitialized())
|
||||
{
|
||||
mCombinationInventoryPanel->setSelectionByID(mCombInvUUIDNeedsRename, TRUE);
|
||||
mCombinationInventoryPanel->getRootFolder()->scrollToShowSelection();
|
||||
mCombinationInventoryPanel->getRootFolder()->setNeedsAutoRename(TRUE);
|
||||
mCombInvUUIDNeedsRename.setNull();
|
||||
}
|
||||
if (mSingleFolderMode
|
||||
&& !isGalleryViewMode()
|
||||
&& mCombInvUUIDNeedsRename.notNull()
|
||||
&& mCombinationInventoryPanel->areViewsInitialized())
|
||||
{
|
||||
mCombinationInventoryPanel->setSelectionByID(mCombInvUUIDNeedsRename, TRUE);
|
||||
mCombinationInventoryPanel->getRootFolder()->scrollToShowSelection();
|
||||
mCombinationInventoryPanel->getRootFolder()->setNeedsAutoRename(TRUE);
|
||||
mCombInvUUIDNeedsRename.setNull();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -123,6 +123,7 @@ public:
|
|||
void onViewModeClick();
|
||||
void toggleViewMode();
|
||||
void initSingleFolderRoot(const LLUUID& start_folder_id = LLUUID::null);
|
||||
void initInventoryViews();
|
||||
void onUpFolderClicked();
|
||||
void onBackFolderClicked();
|
||||
void onForwardFolderClicked();
|
||||
|
|
|
|||
|
|
@ -97,10 +97,15 @@ namespace
|
|||
//=========================================================================
|
||||
void LLSettingsVOBase::createNewInventoryItem(LLSettingsType::type_e stype, const LLUUID& parent_id, std::function<void(const LLUUID&)> created_cb)
|
||||
{
|
||||
inventory_result_fn cb = [created_cb](LLUUID asset_id, LLUUID inventory_id, LLUUID object_id, LLSD results)
|
||||
inventory_result_fn cb = NULL;
|
||||
|
||||
if (created_cb != NULL)
|
||||
{
|
||||
created_cb(inventory_id);
|
||||
};
|
||||
cb = [created_cb](LLUUID asset_id, LLUUID inventory_id, LLUUID object_id, LLSD results)
|
||||
{
|
||||
created_cb(inventory_id);
|
||||
};
|
||||
}
|
||||
createNewInventoryItem(stype, parent_id, cb);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -252,6 +252,17 @@ BOOL LLSidepanelInventory::postBuild()
|
|||
// <FS:Ansariel> Optional hiding of Received Items folder aka Inbox
|
||||
//gSavedSettings.getControl("InventoryDisplayInbox")->getCommitSignal()->connect(boost::bind(&handleInventoryDisplayInboxChanged));
|
||||
|
||||
LLFloater *floater = dynamic_cast<LLFloater*>(getParent());
|
||||
if (floater && floater->getKey().isUndefined() && !sLoginCompleted)
|
||||
{
|
||||
// Prefill inventory for primary inventory floater
|
||||
// Other floaters should fill on visibility change
|
||||
//
|
||||
// see get_instance_num();
|
||||
// Primary inventory floater will have undefined key
|
||||
initInventoryViews();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -489,6 +500,11 @@ void LLSidepanelInventory::showInventoryPanel()
|
|||
mInventoryPanel->setVisible(TRUE);
|
||||
}
|
||||
|
||||
void LLSidepanelInventory::initInventoryViews()
|
||||
{
|
||||
mPanelMainInventory->initInventoryViews();
|
||||
}
|
||||
|
||||
bool LLSidepanelInventory::canShare()
|
||||
{
|
||||
LLInventoryPanel* inbox = mInventoryPanelInbox.get();
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ public:
|
|||
std::set<LLFolderViewItem*> getInboxSelectionList();
|
||||
|
||||
void showInventoryPanel();
|
||||
void initInventoryViews();
|
||||
|
||||
// checks can share selected item(s)
|
||||
bool canShare();
|
||||
|
|
|
|||
|
|
@ -2204,7 +2204,7 @@ void menu_create_inventory_item(LLInventoryPanel* panel, LLUUID dest_id, const L
|
|||
if (panel)
|
||||
{
|
||||
LLHandle<LLPanel> handle = panel->getHandle();
|
||||
std::function<void(const LLUUID&)> callback_cat_created = [handle](const LLUUID& new_category_id)
|
||||
callback_cat_created = [handle](const LLUUID& new_category_id)
|
||||
{
|
||||
gInventory.notifyObservers();
|
||||
LLInventoryPanel* panel = static_cast<LLInventoryPanel*>(handle.get());
|
||||
|
|
@ -2212,6 +2212,7 @@ void menu_create_inventory_item(LLInventoryPanel* panel, LLUUID dest_id, const L
|
|||
{
|
||||
panel->setSelectionByID(new_category_id, TRUE);
|
||||
}
|
||||
LL_DEBUGS(LOG_INV) << "Done creating inventory: " << new_category_id << LL_ENDL;
|
||||
};
|
||||
}
|
||||
else if (created_cb != NULL)
|
||||
|
|
|
|||
|
|
@ -808,6 +808,7 @@
|
|||
name="All Items"
|
||||
sort_order_setting="InventorySortOrder"
|
||||
show_item_link_overlays="true"
|
||||
preinitialize_views="false"
|
||||
top="16"
|
||||
width="288"
|
||||
scroll.reserve_scroll_corner="false">
|
||||
|
|
@ -825,6 +826,7 @@
|
|||
left_delta="0"
|
||||
name="Recent Items"
|
||||
show_item_link_overlays="true"
|
||||
preinitialize_views="false"
|
||||
width="288"
|
||||
scroll.reserve_scroll_corner="false">
|
||||
<folder double_click_override="true"/>
|
||||
|
|
@ -840,6 +842,7 @@
|
|||
left_delta="0"
|
||||
name="Worn Items"
|
||||
show_item_link_overlays="true"
|
||||
preinitialize_views="false"
|
||||
width="288"
|
||||
scroll.reserve_scroll_corner="false">
|
||||
<folder double_click_override="true"/>
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@
|
|||
<menu_item_call label="Teilen" name="Share"/>
|
||||
<menu_item_call label="Papierkorb ausleeren" name="Empty Trash"/>
|
||||
<menu_item_call label="Fundstücke ausleeren" name="Empty Lost And Found"/>
|
||||
<menu_item_call label="Neuer Ordner" name="New Folder"/>
|
||||
<menu_item_call label="Neues Outfit" name="New Outfit"/>
|
||||
<menu_item_call label="Teleportieren" name="Landmark Open"/>
|
||||
<menu_item_call label="Aktuelles Outfit ersetzen" name="Replace Outfit"/>
|
||||
<menu_item_call label="Zum aktuellen Outfit hinzufügen" name="Add To Outfit"/>
|
||||
|
|
@ -37,7 +35,6 @@
|
|||
<menu_item_call label="Instant Message senden" name="Send Instant Message"/>
|
||||
<menu_item_call label="Teleport anbieten..." name="Offer Teleport..."/>
|
||||
<menu_item_call label="Teleport anfordern..." name="Request Teleport..."/>
|
||||
<menu_item_call label="Konferenz-Chat starten" name="Conference Chat"/>
|
||||
<menu_item_call label="Aktivieren" name="Activate"/>
|
||||
<menu_item_call label="Deaktivieren" name="Deactivate"/>
|
||||
<menu_item_call label="Speichern unter" name="Save As"/>
|
||||
|
|
|
|||
|
|
@ -23,22 +23,6 @@
|
|||
<menu_item_call.on_click
|
||||
function="Inventory.EmptyLostAndFound"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="New Folder"
|
||||
layout="topleft"
|
||||
name="New Folder">
|
||||
<menu_item_call.on_click
|
||||
function="Inventory.DoCreate"
|
||||
parameter="category" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="New Outfit"
|
||||
layout="topleft"
|
||||
name="New Outfit">
|
||||
<menu_item_call.on_click
|
||||
function="Inventory.DoCreate"
|
||||
parameter="outfit" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Teleport"
|
||||
layout="topleft"
|
||||
|
|
@ -323,14 +307,6 @@
|
|||
function="Inventory.DoToSelected"
|
||||
parameter="request_lure" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Start Conference Chat"
|
||||
layout="topleft"
|
||||
name="Conference Chat">
|
||||
<menu_item_call.on_click
|
||||
function="Inventory.BeginIMSession"
|
||||
parameter="selected" />
|
||||
</menu_item_call>
|
||||
<menu_item_separator
|
||||
layout="topleft"
|
||||
name="Gesture Separator" />
|
||||
|
|
|
|||
|
|
@ -684,7 +684,8 @@
|
|||
layout="topleft"
|
||||
name="open_in_current_window">
|
||||
<menu_item_call.on_click
|
||||
function="Inventory.OpenSelectedFolder"/>
|
||||
function="Inventory.DoToSelected"
|
||||
parameter="open_in_current_window" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Open in new window"
|
||||
|
|
|
|||
|
|
@ -235,6 +235,7 @@
|
|||
name="All Items"
|
||||
sort_order_setting="InventorySortOrder"
|
||||
show_item_link_overlays="true"
|
||||
preinitialize_views="false"
|
||||
top="16"
|
||||
width="288" >
|
||||
<folder double_click_override="true"/>
|
||||
|
|
@ -251,6 +252,7 @@
|
|||
left_delta="0"
|
||||
name="Recent Items"
|
||||
show_item_link_overlays="true"
|
||||
preinitialize_views="false"
|
||||
width="290" >
|
||||
<folder double_click_override="true"/>
|
||||
</recent_inventory_panel>
|
||||
|
|
@ -265,6 +267,7 @@
|
|||
left_delta="0"
|
||||
name="Worn Items"
|
||||
show_item_link_overlays="true"
|
||||
preinitialize_views="false"
|
||||
width="290" >
|
||||
<folder double_click_override="true"/>
|
||||
</worn_inventory_panel>
|
||||
|
|
|
|||
Loading…
Reference in New Issue