# Conflicts:
#	indra/newview/llinventorybridge.cpp
#	indra/newview/llinventorypanel.cpp
#	indra/newview/llpanelmaininventory.cpp
#	indra/newview/skins/default/xui/en/panel_main_inventory.xml
#	indra/newview/skins/default/xui/en/sidepanel_inventory.xml
master
Ansariel 2023-06-26 23:25:05 +02:00
commit efcf81eb4a
20 changed files with 457 additions and 262 deletions

View File

@ -216,7 +216,8 @@ LLButton::LLButton(const LLButton::Params& p)
}
// Hack to make sure there is space for at least one character
if (getRect().getWidth() - (mRightHPad + mLeftHPad) < mGLFont->getWidth(std::string(" ")))
if (getRect().mRight >= 0 && getRect().getWidth() > 0 &&
getRect().getWidth() - (mRightHPad + mLeftHPad) < mGLFont->getWidth(std::string(" ")))
{
// Use old defaults
mLeftHPad = llbutton_orig_h_pad;

View File

@ -591,6 +591,15 @@ void LLLayoutStack::updateLayout()
mNeedsLayout = continue_animating;
} // end LLLayoutStack::updateLayout
void LLLayoutStack::setPanelSpacing(S32 val)
{
if (mPanelSpacing != val)
{
mPanelSpacing = val;
mNeedsLayout = true;
}
}
LLLayoutPanel* LLLayoutStack::findEmbeddedPanel(LLPanel* panelp) const
{
if (!panelp) return NULL;

View File

@ -96,6 +96,7 @@ public:
void updateLayout();
S32 getPanelSpacing() const { return mPanelSpacing; }
void setPanelSpacing(S32 val);
static void updateClass();

View File

@ -105,8 +105,8 @@ LLScrollContainer::LLScrollContainer(const LLScrollContainer::Params& p)
mBorder = LLUICtrlFactory::create<LLViewBorder> (params);
LLView::addChild( mBorder );
mInnerRect.set( 0, getRect().getHeight(), getRect().getWidth(), 0 );
mInnerRect.stretch( -getBorderWidth() );
mInnerRect = getLocalRect();
mInnerRect.stretch( -getBorderWidth() );
LLRect vertical_scroll_rect = mInnerRect;
vertical_scroll_rect.mLeft = vertical_scroll_rect.mRight - scrollbar_size;
@ -124,9 +124,9 @@ LLScrollContainer::LLScrollContainer(const LLScrollContainer::Params& p)
mScrollbar[VERTICAL] = LLUICtrlFactory::create<LLScrollbar> (sbparams);
LLView::addChild( mScrollbar[VERTICAL] );
LLRect horizontal_scroll_rect = mInnerRect;
horizontal_scroll_rect.mTop = horizontal_scroll_rect.mBottom + scrollbar_size;
horizontal_scroll_rect.mLeft += 3;
LLRect horizontal_scroll_rect;
horizontal_scroll_rect.mTop = scrollbar_size;
horizontal_scroll_rect.mRight = mInnerRect.getWidth();
sbparams.name("scrollable horizontal");
sbparams.rect(horizontal_scroll_rect);
sbparams.orientation(LLScrollbar::HORIZONTAL);
@ -135,7 +135,7 @@ LLScrollContainer::LLScrollContainer(const LLScrollContainer::Params& p)
sbparams.page_size(mInnerRect.getWidth());
sbparams.step_size(VERTICAL_MULTIPLE);
sbparams.visible(false);
sbparams.follows.flags(FOLLOWS_LEFT | FOLLOWS_RIGHT);
sbparams.follows.flags(FOLLOWS_LEFT | FOLLOWS_RIGHT | FOLLOWS_BOTTOM);
sbparams.change_callback(p.scroll_callback);
mScrollbar[HORIZONTAL] = LLUICtrlFactory::create<LLScrollbar> (sbparams);
LLView::addChild( mScrollbar[HORIZONTAL] );

View File

@ -1132,7 +1132,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
}
else
{
//Scip tab button space if they are invisible(EXT - 576)
// Skip tab button space if tabs are invisible (EXT-576)
tab_panel_top = getRect().getHeight();
tab_panel_bottom = LLPANEL_BORDER_WIDTH;
}
@ -1147,9 +1147,9 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
}
else
{
tab_panel_rect = LLRect(LLPANEL_BORDER_WIDTH,
tab_panel_rect = LLRect(LLPANEL_BORDER_WIDTH * 3,
tab_panel_top,
getRect().getWidth()-LLPANEL_BORDER_WIDTH,
getRect().getWidth() - LLPANEL_BORDER_WIDTH * 2,
tab_panel_bottom );
}
child->setFollowsAll();
@ -1241,7 +1241,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
p.follows.flags = p.follows.flags() | FOLLOWS_TOP;
}
else
{
{
p.name("htab_"+std::string(child->getName()));
p.visible(false);
p.image_unselected(tab_img);

View File

@ -108,24 +108,11 @@
void copy_slurl_to_clipboard_callback_inv(const std::string& slurl);
typedef std::pair<LLUUID, LLUUID> two_uuids_t;
typedef std::list<two_uuids_t> two_uuids_list_t;
const F32 SOUND_GAIN = 1.0f;
struct LLMoveInv
{
LLUUID mObjectID;
LLUUID mCategoryID;
two_uuids_list_t mMoveList;
void (*mCallback)(S32, void*);
void* mUserData;
};
using namespace LLOldEvents;
// Function declarations
bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, boost::shared_ptr<LLMoveInv>);
bool confirm_attachment_rez(const LLSD& notification, const LLSD& response);
void teleport_via_landmark(const LLUUID& asset_id);
// <FS:CR> Function left unused from FIRE-7219
@ -4941,37 +4928,33 @@ void LLFolderBridge::buildContextMenuFolderOptions(U32 flags, menuentry_vec_t&
// <FS:TT> Patch: ReplaceWornItemsOnly
items.push_back(std::string("Wear Items"));
// </FS:TT>
if (!LLAppearanceMgr::instance().getCanAddToCOF(mUUID))
{
disabled_items.push_back(std::string("Add To Outfit"));
}
}
items.push_back(std::string("Replace Outfit"));
//if (!LLAppearanceMgr::instance().getCanReplaceCOF(mUUID))
// [SL:KB] - Patch: Appearance-Misc | Checked: 2010-11-24 (Catznip-2.4)
if ( ((is_outfit) && (!LLAppearanceMgr::instance().getCanReplaceCOF(mUUID))) ||
((!is_outfit) && (gAgentWearables.isCOFChangeInProgress())) )
// [/SL:KB]
{
disabled_items.push_back(std::string("Replace Outfit"));
}
}
if (is_agent_inventory)
{
items.push_back(std::string("Folder Wearables Separator"));
// Note: If user tries to unwear "My Inventory", it's going to deactivate everything including gestures
// Might be safer to disable this for "My Inventory"
items.push_back(std::string("Remove From Outfit"));
if (!LLAppearanceMgr::getCanRemoveFromCOF(mUUID))
{
disabled_items.push_back(std::string("Remove From Outfit"));
}
}
//if (!LLAppearanceMgr::instance().getCanReplaceCOF(mUUID))
// [SL:KB] - Patch: Appearance-Misc | Checked: 2010-11-24 (Catznip-2.4)
if ( ((is_outfit) && (!LLAppearanceMgr::instance().getCanReplaceCOF(mUUID))) ||
((!is_outfit) && (gAgentWearables.isCOFChangeInProgress())) )
// [/SL:KB]
{
disabled_items.push_back(std::string("Replace Outfit"));
}
// [RLVa:KB] - Checked: RLVa-2.0.3
// Block "Replace Current Outfit" if the user can't wear the new folder
if ( (RlvActions::isRlvEnabled()) && (RlvFolderLocks::instance().isLockedFolder(mUUID, RLV_LOCK_ADD)) )
{
disabled_items.push_back(std::string("Replace Outfit"));
}
// [/RLVa:KB]
if (!LLAppearanceMgr::instance().getCanAddToCOF(mUUID))
{
disabled_items.push_back(std::string("Add To Outfit"));
if (type != LLFolderType::FT_ROOT_INVENTORY // Unless COF is empty, whih shouldn't be, warrantied to have worn items
&& !LLAppearanceMgr::getCanRemoveFromCOF(mUUID)) // expensive from root!
{
disabled_items.push_back(std::string("Remove From Outfit"));
}
}
items.push_back(std::string("Outfit Separator"));

View File

@ -48,7 +48,8 @@ class LLViewerJointAttachment;
class LLFolderView;
typedef std::vector<std::string> menuentry_vec_t;
typedef std::pair<LLUUID, LLUUID> two_uuids_t;
typedef std::list<two_uuids_t> two_uuids_list_t;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInvFVBridge
//
@ -835,4 +836,16 @@ public:
bool canWearSelected(const uuid_vec_t& item_ids) const;
};
struct LLMoveInv
{
LLUUID mObjectID;
LLUUID mCategoryID;
two_uuids_list_t mMoveList;
void (*mCallback)(S32, void*);
void* mUserData;
};
void warn_move_inventory(LLViewerObject* object, boost::shared_ptr<LLMoveInv> move_inv);
bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, boost::shared_ptr<LLMoveInv>);
#endif // LL_LLINVENTORYBRIDGE_H

View File

@ -63,6 +63,25 @@ BOOL dragCategoryIntoFolder(LLUUID dest_id, LLInventoryCategory* inv_cat, BOOL d
BOOL dragItemIntoFolder(LLUUID folder_id, LLInventoryItem* inv_item, BOOL drop, std::string& tooltip_msg, BOOL user_confirm);
void dropToMyOutfits(LLInventoryCategory* inv_cat);
class LLGalleryPanel: public LLPanel
{
public:
BOOL canFocusChildren() const override
{
// Tell Tab to not focus children
return FALSE;
}
protected:
LLGalleryPanel(const LLPanel::Params& params): LLPanel(params)
{
};
friend class LLUICtrlFactory;
};
//-----------------------------
// LLInventoryGallery
//-----------------------------
@ -87,7 +106,8 @@ LLInventoryGallery::LLInventoryGallery(const LLInventoryGallery::Params& p)
mIsInitialized(false),
mRootDirty(false),
mNeedsArrange(false),
mSearchType(LLInventoryFilter::SEARCHTYPE_NAME)
mSearchType(LLInventoryFilter::SEARCHTYPE_NAME),
mSortOrder(LLInventoryFilter::SO_DATE)
{
updateGalleryWidth();
mFilter = new LLInventoryFilter();
@ -337,9 +357,16 @@ void LLInventoryGallery::draw()
void LLInventoryGallery::onVisibilityChange(BOOL new_visibility)
{
if (new_visibility && mRootDirty)
if (new_visibility)
{
updateRootFolder();
if (mRootDirty)
{
updateRootFolder();
}
else if (mNeedsArrange)
{
gIdleCallbacks.addFunction(onIdle, (void*)this);
}
}
LLPanel::onVisibilityChange(new_visibility);
}
@ -362,19 +389,35 @@ bool LLInventoryGallery::updateRowsIfNeeded()
return false;
}
bool compareGalleryItem(LLInventoryGalleryItem* item1, LLInventoryGalleryItem* item2)
bool compareGalleryItem(LLInventoryGalleryItem* item1, LLInventoryGalleryItem* item2, bool sort_by_date, bool sort_folders_by_name)
{
if (item1->getSortGroup() != item2->getSortGroup())
{
return (item1->getSortGroup() < item2->getSortGroup());
}
if(((item1->isDefaultImage() && item2->isDefaultImage()) || (!item1->isDefaultImage() && !item2->isDefaultImage())))
if(sort_folders_by_name && (item1->getSortGroup() != LLInventoryGalleryItem::SG_ITEM))
{
std::string name1 = item1->getItemName();
std::string name2 = item2->getItemName();
return (LLStringUtil::compareDict(name1, name2) < 0);
}
if(((item1->isDefaultImage() && item2->isDefaultImage()) || (!item1->isDefaultImage() && !item2->isDefaultImage())))
{
if(sort_by_date)
{
return item1->getCreationDate() > item2->getCreationDate();
}
else
{
std::string name1 = item1->getItemName();
std::string name2 = item2->getItemName();
return (LLStringUtil::compareDict(name1, name2) < 0);
}
}
else
{
return item2->isDefaultImage();
@ -396,7 +439,13 @@ void LLInventoryGallery::reArrangeRows(S32 row_diff)
mItemsInRow+= row_diff;
updateGalleryWidth();
std::sort(buf_items.begin(), buf_items.end(), compareGalleryItem);
bool sort_by_date = (mSortOrder & LLInventoryFilter::SO_DATE);
bool sort_folders_by_name = (mSortOrder & LLInventoryFilter::SO_FOLDERS_BY_NAME);
std::sort(buf_items.begin(), buf_items.end(), [sort_by_date, sort_folders_by_name](LLInventoryGalleryItem* item1, LLInventoryGalleryItem* item2)
{
return compareGalleryItem(item1, item2, sort_by_date, sort_folders_by_name);
});
for (std::vector<LLInventoryGalleryItem*>::const_iterator it = buf_items.begin(); it != buf_items.end(); ++it)
{
@ -566,7 +615,7 @@ void LLInventoryGallery::removeFromLastRow(LLInventoryGalleryItem* item)
mItemPanels.pop_back();
}
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* LLInventoryGallery::buildGalleryItem(std::string name, LLUUID item_id, LLAssetType::EType type, LLUUID thumbnail_id, LLInventoryType::EType inventory_type, U32 flags, time_t creation_date, bool is_link, bool is_worn)
{
LLInventoryGalleryItem::Params giparams;
giparams.visible = true;
@ -582,6 +631,7 @@ LLInventoryGalleryItem* LLInventoryGallery::buildGalleryItem(std::string name, L
gitem->setCreatorName(get_searchable_creator_name(&gInventory, item_id));
gitem->setDescription(get_searchable_description(&gInventory, item_id));
gitem->setAssetIDStr(get_searchable_UUID(&gInventory, item_id));
gitem->setCreationDate(creation_date);
return gitem;
}
@ -591,7 +641,7 @@ void LLInventoryGallery::buildGalleryPanel(int row_count)
params.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP);
params.visible = true;
params.use_bounding_rect = false;
mGalleryPanel = LLUICtrlFactory::create<LLPanel>(params);
mGalleryPanel = LLUICtrlFactory::create<LLGalleryPanel>(params);
reshapeGalleryPanel(row_count);
}
@ -616,6 +666,8 @@ LLPanel* LLInventoryGallery::buildItemPanel(int left)
lpparams.visible = true;
lpparams.rect(LLRect(left, top + mItemHeight, left + mItemWidth + mItemHorizontalGap, top));
lpparams.use_bounding_rect = false;
lpparams.focus_root = false;
//lpparams.tab_stop = false;
lpanel = LLUICtrlFactory::create<LLPanel>(lpparams);
}
else
@ -638,6 +690,8 @@ LLPanel* LLInventoryGallery::buildRowPanel(int left, int bottom)
sparams.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP);
sparams.use_bounding_rect = false;
sparams.visible = true;
sparams.focus_root = false;
//sparams.tab_stop = false;
stack = LLUICtrlFactory::create<LLPanel>(sparams);
}
else
@ -751,9 +805,10 @@ void LLInventoryGallery::onIdle(void* userdata)
return;
}
bool visible = self->getVisible(); // In visible chain?
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;
const F64 max_time = visible ? MAX_TIME_VISIBLE : MAX_TIME_HIDDEN;
F64 curent_time = LLTimer::getTotalSeconds();
const F64 end_time = curent_time + max_time;
@ -766,7 +821,7 @@ void LLInventoryGallery::onIdle(void* userdata)
curent_time = LLTimer::getTotalSeconds();
}
if (self->mNeedsArrange)
if (self->mNeedsArrange && visible)
{
self->mNeedsArrange = false;
self->reArrangeRows();
@ -849,7 +904,8 @@ bool 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);
LLInventoryGalleryItem* item = buildGalleryItem(name, item_id, obj->getType(), thumbnail_id, inventory_type, misc_flags, obj->getCreationDate(), 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));
@ -1174,6 +1230,35 @@ void LLInventoryGallery::moveRight()
}
}
void LLInventoryGallery::onFocusLost()
{
// inventory no longer handles cut/copy/paste/delete
if (gEditMenuHandler == this)
{
gEditMenuHandler = NULL;
}
LLPanel::onFocusLost();
if (mSelectedItemID.notNull() && mItemMap[mSelectedItemID])
{
mItemMap[mSelectedItemID]->setSelected(false);
}
}
void LLInventoryGallery::onFocusReceived()
{
// inventory now handles cut/copy/paste/delete
gEditMenuHandler = this;
LLPanel::onFocusReceived();
if (mSelectedItemID.notNull() && mItemMap[mSelectedItemID])
{
mItemMap[mSelectedItemID]->setSelected(true);
}
}
void LLInventoryGallery::showContextMenu(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& item_id)
{
if (mInventoryGalleryMenu && item_id.notNull())
@ -1568,6 +1653,14 @@ void LLInventoryGallery::claimEditHandler()
gEditMenuHandler = this;
}
void LLInventoryGallery::resetEditHandler()
{
if (gEditMenuHandler == this)
{
gEditMenuHandler = NULL;
}
}
bool LLInventoryGallery::isItemCopyable(const LLUUID & item_id)
{
const LLInventoryCategory* cat = gInventory.getCategory(item_id);
@ -2004,6 +2097,17 @@ void LLInventoryGallery::handleModifiedFilter()
}
}
void LLInventoryGallery::setSortOrder(U32 order, bool update)
{
bool dirty = (mSortOrder != order);
mSortOrder = order;
if(update && dirty)
{
mNeedsArrange = true;
gIdleCallbacks.addFunction(onIdle, (void*)this);
}
}
//-----------------------------
// LLInventoryGalleryItem
//-----------------------------
@ -2272,6 +2376,24 @@ BOOL LLInventoryGalleryItem::handleKeyHere(KEY key, MASK mask)
return handled;
}
void LLInventoryGalleryItem::onFocusLost()
{
// inventory no longer handles cut/copy/paste/delete
mGallery->resetEditHandler();
setSelected(false);
LLPanel::onFocusLost();
}
void LLInventoryGalleryItem::onFocusReceived()
{
// inventory now handles cut/copy/paste/delete
mGallery->claimEditHandler();
setSelected(true);
LLPanel::onFocusReceived();
}
void LLInventoryGalleryItem::setWorn(bool value)
{
mWorn = value;
@ -2676,6 +2798,7 @@ BOOL dragItemIntoFolder(LLUUID folder_id, LLInventoryItem* inv_item, BOOL drop,
// coming from a task. Need to figure out if the person can
// move/copy this item.
LLPermissions perm(inv_item->getPermissions());
bool is_move = false;
if ((perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
&& perm.allowTransferTo(gAgent.getID())))
// || gAgent.isGodlike())
@ -2687,6 +2810,7 @@ BOOL dragItemIntoFolder(LLUUID folder_id, LLInventoryItem* inv_item, BOOL drop,
// If the object cannot be copied, but the object the
// inventory is owned by the agent, then the item can be
// moved from the task to agent inventory.
is_move = true;
accept = TRUE;
}
@ -2711,9 +2835,7 @@ BOOL dragItemIntoFolder(LLUUID folder_id, LLInventoryItem* inv_item, BOOL drop,
if (accept && drop)
{
//todo: dnd from SOURCE_WORLD
/*boost::shared_ptr<LLMoveInv> move_inv (new LLMoveInv());
boost::shared_ptr<LLMoveInv> move_inv (new LLMoveInv());
move_inv->mObjectID = inv_item->getParentUUID();
std::pair<LLUUID, LLUUID> item_pair(folder_id, inv_item->getUUID());
move_inv->mMoveList.push_back(item_pair);
@ -2731,7 +2853,7 @@ BOOL dragItemIntoFolder(LLUUID folder_id, LLInventoryItem* inv_item, BOOL drop,
LLNotification::Params params("MoveInventoryFromObject");
params.functor.function(boost::bind(move_task_inventory_callback, _1, _2, move_inv));
LLNotifications::instance().forceResponse(params, 0);
}*/
}
}
}
else if(LLToolDragAndDrop::SOURCE_NOTECARD == source)
@ -3147,9 +3269,7 @@ BOOL dragCategoryIntoFolder(LLUUID dest_id, LLInventoryCategory* inv_cat,
}
else
{
//todo: dnd from SOURCE_WORLD
accept = FALSE;
//accept = move_inv_category_world_to_agent(cat_id, mUUID, drop, NULL, NULL, filter);
accept = move_inv_category_world_to_agent(cat_id, dest_id, drop);
}
}
else if (LLToolDragAndDrop::SOURCE_LIBRARY == source)

View File

@ -86,6 +86,9 @@ public:
void moveLeft();
void moveRight();
void onFocusLost() override;
void onFocusReceived() override;
void setFilterSubString(const std::string& string);
std::string getFilterSubString() { return mFilterSubString; }
LLInventoryFilter& getFilter() const { return *mFilter; }
@ -157,7 +160,11 @@ public:
bool canDeleteSelection();
void pasteAsLink();
void setSortOrder(U32 order, bool update = false);
U32 getSortOrder() { return mSortOrder; };
void claimEditHandler();
void resetEditHandler();
static bool isItemCopyable(const LLUUID & item_id);
BOOL baseHandleDragAndDrop(LLUUID dest_id, BOOL drop, EDragAndDropType cargo_type,
@ -202,7 +209,7 @@ private:
bool updateRowsIfNeeded();
void updateGalleryWidth();
LLInventoryGalleryItem* 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* buildGalleryItem(std::string name, LLUUID item_id, LLAssetType::EType type, LLUUID thumbnail_id, LLInventoryType::EType inventory_type, U32 flags, time_t creation_date, bool is_link, bool is_worn);
void buildGalleryPanel(int row_count);
void reshapeGalleryPanel(int row_count);
@ -242,6 +249,7 @@ private:
LLInventoryGalleryContextMenu* mRootGalleryMenu;
std::string mFilterSubString;
LLInventoryFilter* mFilter;
U32 mSortOrder;
typedef std::map<LLUUID, LLInventoryGalleryItem*> gallery_item_map_t;
gallery_item_map_t mItemMap;
@ -286,6 +294,9 @@ public:
std::string& tooltip_msg);
BOOL handleKeyHere(KEY key, MASK mask);
void onFocusLost();
void onFocusReceived();
LLFontGL* getTextFont();
void setItemName(std::string name);
@ -300,6 +311,8 @@ public:
std::string getDescription() { return mDesc;}
void setCreatorName(std::string name) {mCreatorName = name;}
std::string getCreatorName() { return mCreatorName;}
void setCreationDate(time_t date) {mCreationDate = date;}
time_t getCreationDate() { return mCreationDate;}
std::string getItemName() {return mItemName;}
std::string getItemNameSuffix() {return mPermSuffix + mWornSuffix;}
@ -332,6 +345,7 @@ private:
std::string mAssetIDStr;
std::string mDesc;
std::string mCreatorName;
time_t mCreationDate;
EInventorySortGroup mSortGroup;
LLAssetType::EType mType;

View File

@ -33,12 +33,16 @@
#include "llavataractions.h"
#include "llclipboard.h"
#include "llfloaterreg.h"
#include "llfloatersidepanelcontainer.h"
#include "llfloaterworldmap.h"
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
#include "lllandmarkactions.h"
#include "llmarketplacefunctions.h"
#include "llmenugl.h"
#include "llnotificationsutil.h"
#include "llpreviewtexture.h"
#include "lltrans.h"
#include "llviewerfoldertype.h"
#include "llviewerwindow.h"
@ -217,6 +221,64 @@ void LLInventoryGalleryContextMenu::doToSelected(const LLSD& userdata, const LLU
{
LLFloaterReg::showInstance("linkreplace", LLSD(selected_id));
}
else if ("copy_slurl" == action)
{
boost::function<void(LLLandmark*)> copy_slurl_cb = [](LLLandmark* landmark)
{
LLVector3d global_pos;
landmark->getGlobalPos(global_pos);
boost::function<void(std::string& slurl)> copy_slurl_to_clipboard_cb = [](const std::string& slurl)
{
gViewerWindow->getWindow()->copyTextToClipboard(utf8str_to_wstring(slurl));
LLSD args;
args["SLURL"] = slurl;
LLNotificationsUtil::add("CopySLURL", args);
};
LLLandmarkActions::getSLURLfromPosGlobal(global_pos, copy_slurl_to_clipboard_cb, true);
};
LLLandmark* landmark = LLLandmarkActions::getLandmark(selected_id, copy_slurl_cb);
if (landmark)
{
copy_slurl_cb(landmark);
}
}
else if ("about" == action)
{
LLSD key;
key["type"] = "landmark";
key["id"] = selected_id;
LLFloaterSidePanelContainer::showPanel("places", key);
}
else if ("show_on_map" == action)
{
boost::function<void(LLLandmark*)> show_on_map_cb = [](LLLandmark* landmark)
{
LLVector3d landmark_global_pos;
if (landmark->getGlobalPos(landmark_global_pos))
{
LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance();
if (!landmark_global_pos.isExactlyZero() && worldmap_instance)
{
worldmap_instance->trackLocation(landmark_global_pos);
LLFloaterReg::showInstance("world_map", "center");
}
}
};
LLLandmark* landmark = LLLandmarkActions::getLandmark(selected_id, show_on_map_cb);
if(landmark)
{
show_on_map_cb(landmark);
}
}
else if ("save_as" == action)
{
LLPreviewTexture* preview_texture = LLFloaterReg::getTypedInstance<LLPreviewTexture>("preview_texture", selected_id);
if (preview_texture)
{
preview_texture->openToSave();
preview_texture->saveAs();
}
}
}
void LLInventoryGalleryContextMenu::onRename(const LLSD& notification, const LLSD& response)
@ -357,6 +419,13 @@ void LLInventoryGalleryContextMenu::updateMenuItemsVisibility(LLContextMenu* men
{
items.push_back(std::string("Replace Links"));
}
if (obj->getType() == LLAssetType::AT_LANDMARK)
{
items.push_back(std::string("Landmark Separator"));
items.push_back(std::string("url_copy"));
items.push_back(std::string("About Landmark"));
items.push_back(std::string("show_on_map"));
}
}
if(is_trash)
@ -561,6 +630,15 @@ void LLInventoryGalleryContextMenu::updateMenuItemsVisibility(LLContextMenu* men
}
}
}
if(obj->getType() == LLAssetType::AT_TEXTURE)
{
items.push_back(std::string("Save As"));
bool can_copy = selected_item && selected_item->checkPermissionsSet(PERM_ITEM_UNRESTRICTED);
if (!can_copy)
{
disabled_items.push_back(std::string("Save As"));
}
}
if (is_link)
{
items.push_back(std::string("Find Original"));

View File

@ -361,6 +361,8 @@ void LLInventoryModelBackgroundFetch::scheduleFolderFetch(const LLUUID& cat_id,
{
if (mFetchFolderQueue.empty() || mFetchFolderQueue.front().mUUID != cat_id)
{
mBackgroundFetchActive = true;
// Specific folder requests go to front of queue.
mFetchFolderQueue.push_front(FetchQueueInfo(cat_id, forced ? FT_FORCED : FT_DEFAULT));
gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL);

View File

@ -323,11 +323,6 @@ void LLInventoryPanel::initFolderRoot()
// Scroller
LLRect scroller_view_rect = getRect();
scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
// <FS:Ansariel> Pull this magic number here so inventory scroll panel
// doesn't get cut off on the left side!
scroller_view_rect.mLeft += 2;
// </FS:Ansariel>
scroller_view_rect.mTop -= 3;
LLScrollContainer::Params scroller_params(mParams.scroll());
scroller_params.rect(scroller_view_rect);
mScroller = LLUICtrlFactory::create<LLFolderViewScrollContainer>(scroller_params);
@ -1314,6 +1309,7 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id,
const S32 starting_item_count = mItemMap.size();
LLFolderViewFolder *parentp = dynamic_cast<LLFolderViewFolder*>(folder_view_item);
bool done = true;
if(categories)
{
@ -1351,6 +1347,7 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id,
if (mBuildViewsEndTime < curent_time)
{
mBuildViewsQueue.push_back(id);
done = false;
break;
}
}
@ -1386,13 +1383,14 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id,
if (mBuildViewsEndTime < curent_time)
{
mBuildViewsQueue.push_back(id);
done = false;
break;
}
}
}
}
if (!mBuildChildrenViews)
if (!mBuildChildrenViews && done)
{
// flat list is done initializing folder
folder_view_item->setChildrenInited(true);

View File

@ -377,6 +377,7 @@ BOOL LLPanelMainInventory::postBuild()
mCombinationViewPanel = getChild<LLPanel>("combination_view_inventory");
mCombinationGalleryLayoutPanel = getChild<LLLayoutPanel>("comb_gallery_layout");
mCombinationListLayoutPanel = getChild<LLLayoutPanel>("comb_inventory_layout");
mCombinationLayoutStack = getChild<LLLayoutStack>("combination_view_stack");
mCombinationInventoryPanel = getChild<LLInventorySingleFolderPanel>("comb_single_folder_inv");
LLInventoryFilter& comb_inv_filter = mCombinationInventoryPanel->getFilter();
@ -386,6 +387,7 @@ BOOL LLPanelMainInventory::postBuild()
mListViewRootUpdatedConnection = mCombinationInventoryPanel->setRootChangedCallback(boost::bind(&LLPanelMainInventory::onCombinationRootChanged, this, false));
mCombinationGalleryPanel = getChild<LLInventoryGallery>("comb_gallery_view_inv");
mCombinationGalleryPanel->setSortOrder(mCombinationInventoryPanel->getSortOrder());
LLInventoryFilter& comb_gallery_filter = mCombinationGalleryPanel->getFilter();
comb_gallery_filter.setFilterThumbnails(LLInventoryFilter::FILTER_ONLY_THUMBNAILS);
comb_gallery_filter.markDefault();
@ -745,6 +747,59 @@ void LLPanelMainInventory::findLinks(const LLUUID& item_id, const std::string& i
mFilterEditor->setFocus(TRUE);
}
void LLPanelMainInventory::setSortBy(const LLSD& userdata)
{
U32 sort_order_mask = getActivePanel()->getSortOrder();
std::string sort_type = userdata.asString();
if (sort_type == "name")
{
sort_order_mask &= ~LLInventoryFilter::SO_DATE;
}
else if (sort_type == "date")
{
sort_order_mask |= LLInventoryFilter::SO_DATE;
}
else if (sort_type == "foldersalwaysbyname")
{
if ( sort_order_mask & LLInventoryFilter::SO_FOLDERS_BY_NAME )
{
sort_order_mask &= ~LLInventoryFilter::SO_FOLDERS_BY_NAME;
}
else
{
sort_order_mask |= LLInventoryFilter::SO_FOLDERS_BY_NAME;
}
}
else if (sort_type == "systemfolderstotop")
{
if ( sort_order_mask & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP )
{
sort_order_mask &= ~LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
}
else
{
sort_order_mask |= LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
}
}
if(mSingleFolderMode && !isListViewMode())
{
mCombinationGalleryPanel->setSortOrder(sort_order_mask, true);
}
getActivePanel()->setSortOrder(sort_order_mask);
// <FS:Zi> Recent items panel should save sort order
//if (isRecentItemsPanelSelected())
//{
// gSavedSettings.setU32("RecentItemsSortOrder", sort_order_mask);
//}
//else
//{
// gSavedSettings.setU32("InventorySortOrder", sort_order_mask);
//}
gSavedSettings.setU32(getActivePanel()->mSortOrderSetting, sort_order_mask);
// </FS:Zi>
}
void LLPanelMainInventory::onSelectSearchType()
{
std::string new_type = mSearchTypeCombo->getValue();
@ -825,56 +880,6 @@ void LLPanelMainInventory::updateSearchTypeCombo()
}
}
// <FS:Zi> Sort By menu handlers
void LLPanelMainInventory::setSortBy(const LLSD& userdata)
{
U32 sort_order_mask = getActivePanel()->getSortOrder();
std::string sort_type = userdata.asString();
if (sort_type == "name")
{
sort_order_mask &= ~LLInventoryFilter::SO_DATE;
}
else if (sort_type == "date")
{
sort_order_mask |= LLInventoryFilter::SO_DATE;
}
else if (sort_type == "foldersalwaysbyname")
{
if ( sort_order_mask & LLInventoryFilter::SO_FOLDERS_BY_NAME )
{
sort_order_mask &= ~LLInventoryFilter::SO_FOLDERS_BY_NAME;
}
else
{
sort_order_mask |= LLInventoryFilter::SO_FOLDERS_BY_NAME;
}
}
else if (sort_type == "systemfolderstotop")
{
if ( sort_order_mask & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP )
{
sort_order_mask &= ~LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
}
else
{
sort_order_mask |= LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;
}
}
getActivePanel()->setSortOrder(sort_order_mask);
// <FS:Zi> Recent items panel should save sort order
//if (isRecentItemsPanelSelected())
//{
// gSavedSettings.setU32("RecentItemsSortOrder", sort_order_mask);
//}
//else
//{
// gSavedSettings.setU32("InventorySortOrder", sort_order_mask);
//}
gSavedSettings.setU32(getActivePanel()->mSortOrderSetting, sort_order_mask);
// </FS:Zi>
}
BOOL LLPanelMainInventory::isSortByChecked(const LLSD& userdata)
{
U32 sort_order_mask = getActivePanel()->getSortOrder();
@ -2656,7 +2661,7 @@ bool LLPanelMainInventory::isActionVisible(const LLSD& userdata)
BOOL LLPanelMainInventory::isActionChecked(const LLSD& userdata)
{
U32 sort_order_mask = getActivePanel()->getSortOrder();
U32 sort_order_mask = (mSingleFolderMode && isGalleryViewMode()) ? mCombinationGalleryPanel->getSortOrder() : getActivePanel()->getSortOrder();
const std::string command_name = userdata.asString();
if (command_name == "sort_by_name")
{
@ -3069,6 +3074,7 @@ void LLPanelMainInventory::updatePanelVisibility()
comb_gallery_filter.setFilterThumbnails(LLInventoryFilter::FILTER_INCLUDE_THUMBNAILS);
comb_gallery_filter.markDefault();
mCombinationLayoutStack->setPanelSpacing(0);
mCombinationGalleryLayoutPanel->setVisible(mSingleFolderMode && isGalleryViewMode());
mCombinationGalleryPanel->setVisible(mSingleFolderMode && isGalleryViewMode()); // to prevent or process updates
mCombinationListLayoutPanel->setVisible(mSingleFolderMode && isListViewMode());
@ -3088,6 +3094,10 @@ void LLPanelMainInventory::updateCombinationVisibility()
{
bool is_gallery_empty = !mCombinationGalleryPanel->hasVisibleItems();
bool show_inv_pane = mCombinationInventoryPanel->hasVisibleItems() || is_gallery_empty || mForceShowInvLayout;
const S32 DRAG_HANDLE_PADDING = 12; // for drag handle to not overlap gallery when both inventories are visible
mCombinationLayoutStack->setPanelSpacing(show_inv_pane ? DRAG_HANDLE_PADDING : 0);
mCombinationGalleryLayoutPanel->setVisible(!is_gallery_empty);
mCombinationListLayoutPanel->setVisible(show_inv_pane);
mCombinationInventoryPanel->getRootFolder()->setForceArrange(!show_inv_pane);
@ -3203,20 +3213,24 @@ void LLPanelMainInventory::setViewMode(EViewModeType mode)
{
std::list<LLUUID> forward_history;
std::list<LLUUID> backward_history;
U32 sort_order = 0;
switch(mViewMode)
{
case MODE_LIST:
forward_history = mCombinationInventoryPanel->getNavForwardList();
backward_history = mCombinationInventoryPanel->getNavBackwardList();
sort_order = mCombinationInventoryPanel->getSortOrder();
break;
case MODE_GALLERY:
forward_history = mCombinationGalleryPanel->getNavForwardList();
backward_history = mCombinationGalleryPanel->getNavBackwardList();
sort_order = mCombinationGalleryPanel->getSortOrder();
break;
case MODE_COMBINATION:
forward_history = mCombinationInventoryPanel->getNavForwardList();
backward_history = mCombinationInventoryPanel->getNavBackwardList();
mCombinationInventoryPanel->getRootFolder()->setForceArrange(false);
sort_order = mCombinationInventoryPanel->getSortOrder();
break;
}
@ -3230,12 +3244,14 @@ void LLPanelMainInventory::setViewMode(EViewModeType mode)
mCombinationInventoryPanel->changeFolderRoot(cur_root);
mCombinationInventoryPanel->setNavForwardList(forward_history);
mCombinationInventoryPanel->setNavBackwardList(backward_history);
mCombinationInventoryPanel->setSortOrder(sort_order);
}
if(isGalleryViewMode())
{
mCombinationGalleryPanel->setRootFolder(cur_root);
mCombinationGalleryPanel->setNavForwardList(forward_history);
mCombinationGalleryPanel->setNavBackwardList(backward_history);
mCombinationGalleryPanel->setSortOrder(sort_order, true);
}
if(isCombinationViewMode())
{
@ -3245,6 +3261,8 @@ void LLPanelMainInventory::setViewMode(EViewModeType mode)
mCombinationInventoryPanel->setNavBackwardList(backward_history);
mCombinationGalleryPanel->setNavForwardList(forward_history);
mCombinationGalleryPanel->setNavBackwardList(backward_history);
mCombinationInventoryPanel->setSortOrder(sort_order);
mCombinationGalleryPanel->setSortOrder(sort_order, true);
}
updateNavButtons();

View File

@ -236,7 +236,8 @@ private:
LLInventorySingleFolderPanel* mCombinationInventoryPanel;
LLInventoryGallery* mCombinationGalleryPanel;
LLPanel* mCombinationGalleryLayoutPanel;
LLPanel* mCombinationListLayoutPanel;
LLLayoutPanel* mCombinationListLayoutPanel;
LLLayoutStack* mCombinationLayoutStack;
// <FS:Zi> Filter dropdown
LLComboBox* mFilterComboBox;

View File

@ -366,7 +366,13 @@ void LLSidepanelInventory::enableInbox(bool enabled)
void LLSidepanelInventory::hideInbox()
{
if (mInboxLayoutPanel) // <FS:Ansariel> Inbox panel randomly shown on secondary inventory window
{
mInboxLayoutPanel->setVisible(false);
if (LLLayoutStack* inv_stack = findChild<LLLayoutStack>(INVENTORY_LAYOUT_STACK_NAME); inv_stack)
{
inv_stack->setPanelSpacing(0);
}
}
}
void LLSidepanelInventory::toggleInbox()
@ -374,12 +380,19 @@ void LLSidepanelInventory::toggleInbox()
// <FS:Ansariel> Optional hiding of Received Items folder aka Inbox
//mInboxLayoutPanel->setVisible(mInboxEnabled);
if (mInboxLayoutPanel)
{
mInboxLayoutPanel->setVisible(mInboxEnabled && (!gSavedSettings.getBOOL("FSShowInboxFolder") || gSavedSettings.getBOOL("FSAlwaysShowInboxButton"))
// <FS:CR> Show Received Items panel only in Second Life
// <FS:CR> Show Received Items panel only in Second Life
#ifdef OPENSIM
&& LLGridManager::getInstance()->isInSecondLife()
&& LLGridManager::getInstance()->isInSecondLife()
#endif // OPENSIM
);
);
if (LLLayoutStack* inv_stack = findChild<LLLayoutStack>(INVENTORY_LAYOUT_STACK_NAME); inv_stack)
{
inv_stack->setPanelSpacing(mInboxLayoutPanel->getVisible() ? gSavedSettings.getS32("UIResizeBarHeight") : 0);
}
}
}
// <FS:Ansariel> Optional hiding of Received Items folder aka Inbox

View File

@ -7,8 +7,7 @@
layout="topleft"
min_height="300"
min_width="240"
name="main inventory panel"
width="330">
name="main inventory panel">
<panel.string
name="Itemcount">
</panel.string>
@ -777,9 +776,9 @@
height="314"
layout="topleft"
left="2"
right="-3"
name="default_inventory_panel"
top_pad="4"
width="326">
top_pad="4">
<tab_container
bg_alpha_color="DkGray"
bg_opaque_color="DkGray"
@ -794,23 +793,18 @@
open_tabs_on_drag_and_drop="true"
tab_group="1"
tab_position="top"
top="0"
width="326">
top="0">
<inventory_panel
border="false"
bevel_style="none"
follows="all"
height="338"
label="Inventory"
help_topic="my_inventory_tab"
layout="topleft"
left="0"
name="All Items"
sort_order_setting="InventorySortOrder"
show_item_link_overlays="true"
preinitialize_views="false"
top="16"
width="288"
scroll.reserve_scroll_corner="false">
<folder double_click_override="true"/>
</inventory_panel>
@ -818,16 +812,13 @@
border="false"
bevel_style="none"
follows="all"
height="338"
label="Recent"
sort_order_setting="RecentItemsSortOrder"
help_topic="recent_inventory_tab"
layout="topleft"
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"/>
</recent_inventory_panel>
@ -835,15 +826,12 @@
border="false"
bevel_style="none"
follows="all"
height="338"
label="Worn"
help_topic="worn_inventory_tab"
layout="topleft"
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"/>
</worn_inventory_panel>
@ -852,19 +840,18 @@
<panel
follows="all"
halign="center"
height="314"
height="313"
layout="topleft"
left="2"
left="4"
right="-4"
name="combination_view_inventory"
top_delta="0"
visible="false"
width="326">
visible="false">
<layout_stack
follows="all"
height="314"
width="326"
height="313"
name="combination_view_stack"
animate="false"
drag_handle_gap="13"
drag_handle_thickness="6"
drag_handle_first_indent="18"
drag_handle_second_indent="18"
@ -879,8 +866,7 @@
bevel_style="in"
user_resize="true"
auto_resize="true"
height="209"
width="326"
height="203"
min_width="150"
name="comb_gallery_layout">
<panel
@ -888,8 +874,7 @@
filename="panel_inventory_gallery.xml"
left="0"
top_pad="0"
height="204"
width="326"
height="203"
name="comb_gallery_view_inv"
background_visible="true"
follows="all"
@ -902,15 +887,13 @@
user_resize="true"
auto_resize="true"
height="110"
width="326"
name="comb_inventory_layout">
<single_folder_inventory_panel
name="comb_single_folder_inv"
follows="all"
left="0"
top="1"
top="0"
height="110"
width="326"
layout="topleft"
show_item_link_overlays="true"
background_visible="true"
@ -934,7 +917,7 @@
bottom="-5"
left="4"
name="bottom_panel"
width="322">
right="-4">
<panel
visible="false"
follows="top|left"

View File

@ -6,8 +6,7 @@
layout="topleft"
min_height="350"
min_width="240"
name="objects panel"
width="330">
name="objects panel">
<panel
follows="all"
layout="topleft"
@ -16,8 +15,7 @@
top="0"
label=""
height="570"
visible="true"
width="330">
visible="true">
<layout_stack
follows="left|right|top|bottom"
layout="topleft"
@ -25,15 +23,13 @@
top="0"
orientation="vertical"
name="inventory_layout_stack"
height="570"
width="330">
height="570">
<layout_panel
name="main_inventory_layout_panel"
layout="topleft"
auto_resize="true"
user_resize="true"
min_dim="150"
width="330"
follows="bottom|left|right"
height="325">
<panel
@ -45,11 +41,9 @@
name="panel_main_inventory"
top="0"
label=""
height="330"
width="330" />
height="330" />
</layout_panel>
<layout_panel
width="330"
layout="topleft"
auto_resize="true"
user_resize="true"
@ -67,8 +61,7 @@
class="panel_marketplace_inbox"
top="0"
label=""
height="235"
width="330">
height="235">
<string name="InboxLabelWithArg">Received items ([NUM])</string>
<string name="InboxLabelNoArg">Received items</string>
<button
@ -77,7 +70,6 @@
font="SansSerifMedium"
name="inbox_btn"
height="35"
width="308"
image_unselected="MarketplaceBtn_Off"
image_selected="MarketplaceBtn_Selected"
halign="left"
@ -87,7 +79,8 @@
tab_stop="false"
pad_left="35"
top="0"
left="10" />
left="5"
right="-5" />
<text
type="string"
length="1"
@ -99,35 +92,32 @@
name="inbox_fresh_new_count"
font="SansSerifMedium"
halign="right"
top_pad="0"
width="300">
top_pad="0">
[NUM] new
</text>
<panel
name="inbox_inventory_placeholder_panel"
follows="all"
left="10"
bottom="235"
width="308"
left="5"
right="-5"
top="35"
height="200"
bg_opaque_color="InventoryBackgroundColor"
background_visible="true"
background_opaque="true"
tool_tip="Drag and drop items to your inventory to use them"
>
<text
name="inbox_inventory_placeholder"
type="string"
follows="all"
layout="topleft"
top="0"
left="0"
width="308"
height="200"
wrap="true"
halign="center">
Purchases from the marketplace will be delivered here.
</text>
<text name="inbox_inventory_placeholder"
type="string"
follows="all"
layout="topleft"
top="0"
height="200"
wrap="true"
halign="center"
valign="center">
Purchases from the marketplace will be delivered here.
</text>
</panel>
</panel>
</layout_panel>

View File

@ -6,19 +6,15 @@
follows="all"
height="390"
name="Inventory Gallery"
layout="topleft"
left="0"
top="0"
width="404">
layout="topleft">
<text
type="string"
clip_partial="false"
follows="left|top"
follows="all"
layout="topleft"
left="13"
name="empty_txt"
top="0"
height="32"
height="390"
halign="center"
valign="center"
parse_urls="true"
wrap="true">
@ -28,10 +24,10 @@
follows="all"
height="390"
layout="topleft"
left="4"
left="0"
top="0"
tab_stop="true"
name="gallery_scroll_panel"
opaque="false"
top_pad="0">
opaque="false">
</scroll_container>
</panel>

View File

@ -6,8 +6,7 @@
layout="topleft"
min_height="300"
min_width="240"
name="main inventory panel"
width="330">
name="main inventory panel">
<panel.string
name="Itemcount">
</panel.string>
@ -204,10 +203,10 @@
halign="center"
height="338"
layout="topleft"
left="4"
left="3"
right="-3"
name="default_inventory_panel"
top_pad="4"
width="322">
top_pad="4">
<tab_container
bg_alpha_color="DkGray"
bg_opaque_color="DkGray"
@ -221,54 +220,45 @@
name="inventory filter tabs"
open_tabs_on_drag_and_drop="true"
tab_position="top"
top="0"
width="322">
top="0">
<inventory_panel
border="false"
bevel_style="none"
follows="all"
height="338"
label="Inventory"
help_topic="my_inventory_tab"
layout="topleft"
left="0"
name="All Items"
sort_order_setting="InventorySortOrder"
show_item_link_overlays="true"
preinitialize_views="false"
top="16"
width="288" >
scroll.reserve_scroll_corner="false">
<folder double_click_override="true"/>
</inventory_panel>
<recent_inventory_panel
border="false"
bevel_style="none"
follows="all"
height="338"
label="Recent"
sort_order_setting="RecentItemsSortOrder"
help_topic="recent_inventory_tab"
layout="topleft"
left_delta="0"
name="Recent Items"
show_item_link_overlays="true"
preinitialize_views="false"
width="290" >
scroll.reserve_scroll_corner="false">
<folder double_click_override="true"/>
</recent_inventory_panel>
<worn_inventory_panel
border="false"
bevel_style="none"
follows="all"
height="338"
label="Worn"
help_topic="worn_inventory_tab"
layout="topleft"
left_delta="0"
name="Worn Items"
show_item_link_overlays="true"
preinitialize_views="false"
width="290" >
preinitialize_views="false">
<folder double_click_override="true"/>
</worn_inventory_panel>
</tab_container>
@ -281,14 +271,12 @@
left="4"
name="combination_view_inventory"
top_delta="0"
visible="false"
width="322">
visible="false">
<layout_stack
follows="all"
height="338"
width="322"
name="combination_view_stack"
animate="false"
drag_handle_gap="13"
drag_handle_thickness="6"
drag_handle_first_indent="18"
drag_handle_second_indent="18"
@ -304,7 +292,6 @@
user_resize="true"
auto_resize="true"
height="228"
width="322"
min_width="150"
name="comb_gallery_layout">
<panel
@ -313,7 +300,6 @@
left="0"
top_pad="0"
height="228"
width="322"
name="comb_gallery_view_inv"
background_visible="true"
follows="all"
@ -326,15 +312,13 @@
user_resize="true"
auto_resize="true"
height="110"
width="322"
name="comb_inventory_layout">
<single_folder_inventory_panel
name="comb_single_folder_inv"
follows="all"
left="0"
top="1"
top="0"
height="110"
width="322"
layout="topleft"
show_item_link_overlays="true"
background_visible="true"
@ -358,7 +342,7 @@
bottom="-8"
left="4"
name="bottom_panel"
width="322">
right="-4">
<panel
follows="top|left"
height="25"

View File

@ -6,8 +6,7 @@
layout="topleft"
min_height="350"
min_width="240"
name="objects panel"
width="333">
name="objects panel">
<panel
follows="all"
layout="topleft"
@ -17,25 +16,22 @@
label=""
height="570"
visible="true"
default_tab_group="1"
width="330">
default_tab_group="1">
<layout_stack
follows="left|right|top|bottom"
layout="topleft"
left="0"
top="0"
tab_group="1"
tab_group="1"
orientation="vertical"
name="inventory_layout_stack"
height="565"
width="330">
height="565">
<layout_panel
name="main_inventory_layout_panel"
layout="topleft"
auto_resize="true"
user_resize="true"
min_dim="150"
width="330"
follows="bottom|left|right"
height="300">
<panel
@ -47,11 +43,9 @@
name="panel_main_inventory"
top="0"
label=""
height="300"
width="330" />
height="300" />
</layout_panel>
<layout_panel
width="330"
layout="topleft"
auto_resize="false"
user_resize="true"
@ -69,17 +63,15 @@
class="panel_marketplace_inbox"
top="0"
label=""
height="235"
width="330">
height="235">
<string name="InboxLabelWithArg">Received items ([NUM])</string>
<string name="InboxLabelNoArg">Received items</string>
<button
control_name="InventoryInboxToggleState"
label="Received items"
font="SansSerifMedium"
font="SansSerifMedium"
name="inbox_btn"
height="35"
width="308"
image_unselected="MarketplaceBtn_Off"
image_selected="MarketplaceBtn_Selected"
halign="left"
@ -89,7 +81,8 @@
tab_stop="false"
pad_left="35"
top="0"
left="10" />
left="5"
right="-5" />
<text
type="string"
length="1"
@ -101,34 +94,32 @@
name="inbox_fresh_new_count"
font="SansSerifMedium"
halign="right"
top_pad="0"
width="300">
top_pad="0">
[NUM] new
</text>
<panel
name="inbox_inventory_placeholder_panel"
follows="all"
left="10"
bottom="235"
width="308"
left="5"
right="-5"
top="35"
height="200"
bg_opaque_color="InventoryBackgroundColor"
background_visible="true"
background_opaque="true"
tool_tip="Drag and drop items to your inventory to use them"
>
<text name="inbox_inventory_placeholder"
type="string"
follows="all"
layout="topleft"
top="0"
left="0"
width="308"
height="200"
wrap="true"
halign="center">
Purchases from the marketplace will be delivered here.
</text>
type="string"
follows="all"
layout="topleft"
top="0"
height="200"
wrap="true"
halign="center"
valign="center">
Purchases from the marketplace will be delivered here.
</text>
</panel>
</panel>
</layout_panel>