diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llfolderview.cpp | 11 | ||||
-rw-r--r-- | indra/newview/llfolderviewitem.cpp | 27 | ||||
-rw-r--r-- | indra/newview/llfolderviewitem.h | 13 | ||||
-rw-r--r-- | indra/newview/llinventorybridge.cpp | 11 | ||||
-rw-r--r-- | indra/newview/llinventoryfilter.cpp | 32 | ||||
-rw-r--r-- | indra/newview/llinventorymodel.cpp | 82 | ||||
-rw-r--r-- | indra/newview/llinventorymodel.h | 42 | ||||
-rw-r--r-- | indra/newview/llpanellandmarks.cpp | 19 | ||||
-rw-r--r-- | indra/newview/llsidepaneliteminfo.cpp | 25 | ||||
-rw-r--r-- | indra/newview/llviewerinventory.cpp | 2 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/menu_inventory.xml | 27 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/sidepanel_item_info.xml | 317 |
12 files changed, 339 insertions, 269 deletions
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 1c5d7ae9b9..321982ceb6 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -411,7 +411,12 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_gen folderp->setVisible(show_folder_state == LLInventoryFilter::SHOW_ALL_FOLDERS || // always show folders? (folderp->getFiltered(filter_generation) || folderp->hasFilteredDescendants(filter_generation))); // passed filter or has descendants that passed filter } - if (folderp->getVisible()) + + // Need to call arrange regardless of visibility, since children's visibility + // might need to be changed too (e.g. even though a folder is invisible, its + // children also need to be set invisible for state-tracking purposes, e.g. + // llfolderviewitem::filter). + // if (folderp->getVisible()) { S32 child_height = 0; S32 child_width = 0; @@ -479,13 +484,13 @@ void LLFolderView::filter( LLInventoryFilter& filter ) if (getCompletedFilterGeneration() < filter.getCurrentGeneration()) { - mFiltered = FALSE; + mPassedFilter = FALSE; mMinWidth = 0; LLFolderViewFolder::filter(filter); } else { - mFiltered = TRUE; + mPassedFilter = TRUE; } } diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index fe793fbcb8..135821f662 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -122,7 +122,7 @@ LLFolderViewItem::LLFolderViewItem(LLFolderViewItem::Params p) mHasVisibleChildren(FALSE), mIndentation(0), mNumDescendantsSelected(0), - mFiltered(FALSE), + mPassedFilter(FALSE), mLastFilterGeneration(-1), mStringMatchOffset(std::string::npos), mControlLabelRotation(0.f), @@ -224,17 +224,17 @@ BOOL LLFolderViewItem::potentiallyVisible() BOOL LLFolderViewItem::getFiltered() { - return mFiltered && mLastFilterGeneration >= getRoot()->getFilter()->getMinRequiredGeneration(); + return mPassedFilter && mLastFilterGeneration >= getRoot()->getFilter()->getMinRequiredGeneration(); } BOOL LLFolderViewItem::getFiltered(S32 filter_generation) { - return mFiltered && mLastFilterGeneration >= filter_generation; + return mPassedFilter && mLastFilterGeneration >= filter_generation; } void LLFolderViewItem::setFiltered(BOOL filtered, S32 filter_generation) { - mFiltered = filtered; + mPassedFilter = filtered; mLastFilterGeneration = filter_generation; } @@ -424,19 +424,20 @@ S32 LLFolderViewItem::getItemHeight() void LLFolderViewItem::filter( LLInventoryFilter& filter) { - BOOL filtered = mListener && filter.check(this); + const BOOL previous_passed_filter = mPassedFilter; + const BOOL passed_filter = mListener && filter.check(this); - // if our visibility will change as a result of this filter, then + // If our visibility will change as a result of this filter, then // we need to be rearranged in our parent folder - if (getVisible() != filtered) + if (mParentFolder) { - if (mParentFolder) - { + if (getVisible() != passed_filter) + mParentFolder->requestArrange(); + if (passed_filter != previous_passed_filter) mParentFolder->requestArrange(); - } } - setFiltered(filtered, filter.getCurrentGeneration()); + setFiltered(passed_filter, filter.getCurrentGeneration()); mStringMatchOffset = filter.getStringMatchOffset(); filter.decrementFilterCount(); @@ -1243,7 +1244,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter) if (getLastFilterGeneration() < filter_generation) { if (getLastFilterGeneration() >= must_pass_generation && // folder has been compared to a valid precursor filter - !mFiltered) // and did not pass the filter + !mPassedFilter) // and did not pass the filter { // go ahead and flag this folder as done mLastFilterGeneration = filter_generation; @@ -1381,7 +1382,7 @@ void LLFolderViewFolder::setFiltered(BOOL filtered, S32 filter_generation) { // if this folder is now filtered, but wasn't before // (it just passed) - if (filtered && !mFiltered) + if (filtered && !mPassedFilter) { // reset current height, because last time we drew it // it might have had more visible items than now diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h index 43a5fd8de5..620aa070b9 100644 --- a/indra/newview/llfolderviewitem.h +++ b/indra/newview/llfolderviewitem.h @@ -121,6 +121,9 @@ public: static const F32 FOLDER_CLOSE_TIME_CONSTANT; static const F32 FOLDER_OPEN_TIME_CONSTANT; + // Mostly for debugging printout purposes. + const std::string& getSearchableLabel() { return mSearchableLabel; } + protected: friend class LLUICtrlFactory; friend class LLFolderViewEventListener; @@ -149,7 +152,7 @@ protected: BOOL mHasVisibleChildren; S32 mIndentation; S32 mNumDescendantsSelected; - BOOL mFiltered; + BOOL mPassedFilter; S32 mLastFilterGeneration; std::string::size_type mStringMatchOffset; F32 mControlLabelRotation; @@ -157,8 +160,8 @@ protected: BOOL mDragAndDropTarget; LLUIImagePtr mArrowImage; LLUIImagePtr mBoxImage; - BOOL mIsLoading; - LLTimer mTimeSinceRequestStart; + BOOL mIsLoading; + LLTimer mTimeSinceRequestStart; bool mDontShowInHierarchy; // helper function to change the selection from the root. @@ -203,7 +206,7 @@ public: virtual S32 arrange( S32* width, S32* height, S32 filter_generation ); virtual S32 getItemHeight(); void setDontShowInHierarchy(bool dont_show) { mDontShowInHierarchy = dont_show; } - bool getDontShowInHierarchy() { return mDontShowInHierarchy; } + bool getDontShowInHierarchy() const { return mDontShowInHierarchy; } // applies filters to control visibility of inventory items virtual void filter( LLInventoryFilter& filter); @@ -332,7 +335,7 @@ public: EAcceptance* accept, std::string& tooltip_msg); - private: +private: static std::map<U8, LLFontGL*> sFonts; // map of styles to fonts }; diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 26a8a707b8..e361082f7b 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1471,13 +1471,14 @@ BOOL LLFolderBridge::isItemRemovable() { return FALSE; } + // Allow protected types to be removed, but issue a warning. - /* - if(LLFolderType::lookupIsProtectedType(category->getPreferredType())) + // Restrict to god mode so users don't inadvertently mess up their inventory. + if(LLFolderType::lookupIsProtectedType(category->getPreferredType()) && + !gAgent.isGodlike()) { return FALSE; } - */ LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); LLFolderViewFolder* folderp = dynamic_cast<LLFolderViewFolder*>(panel ? panel->getRootFolder()->getItemByID(mUUID) : NULL); @@ -2508,8 +2509,8 @@ void LLFolderBridge::folderOptionsMenu() mItems.push_back(std::string("Wear As Ensemble")); } mItems.push_back(std::string("Remove From Outfit")); - if (is_sidepanel) - mItems.push_back(std::string("Outfit Separator")); + + mItems.push_back(std::string("Outfit Separator")); } hide_context_entries(*mMenu, mItems, disabled_items); diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 81b10f5a62..522edd0cb5 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -40,6 +40,7 @@ #include "llinventorymodel.h" // gInventory.backgroundFetchActive() #include "llviewercontrol.h" #include "llviewerinventory.h" +#include "llfolderview.h" // linden library includes #include "lltrans.h" @@ -329,7 +330,6 @@ void LLInventoryFilter::setFilterSubString(const std::string& string) mFilterSubString = string; LLStringUtil::toUpper(mFilterSubString); LLStringUtil::trimHead(mFilterSubString); - if (less_restrictive) { setModified(FILTER_LESS_RESTRICTIVE); @@ -512,21 +512,21 @@ void LLInventoryFilter::setModified(EFilterBehavior behavior) // if not keeping current filter results, update last valid as well switch(mFilterBehavior) { - case FILTER_RESTART: - mMustPassGeneration = mFilterGeneration; - mMinRequiredGeneration = mFilterGeneration; - break; - case FILTER_LESS_RESTRICTIVE: - mMustPassGeneration = mFilterGeneration; - break; - case FILTER_MORE_RESTRICTIVE: - mMinRequiredGeneration = mFilterGeneration; - // must have passed either current filter generation (meaningless, as it hasn't been run yet) - // or some older generation, so keep the value - mMustPassGeneration = llmin(mMustPassGeneration, mFilterGeneration); - break; - default: - llerrs << "Bad filter behavior specified" << llendl; + case FILTER_RESTART: + mMustPassGeneration = mFilterGeneration; + mMinRequiredGeneration = mFilterGeneration; + break; + case FILTER_LESS_RESTRICTIVE: + mMustPassGeneration = mFilterGeneration; + break; + case FILTER_MORE_RESTRICTIVE: + mMinRequiredGeneration = mFilterGeneration; + // must have passed either current filter generation (meaningless, as it hasn't been run yet) + // or some older generation, so keep the value + mMustPassGeneration = llmin(mMustPassGeneration, mFilterGeneration); + break; + default: + llerrs << "Bad filter behavior specified" << llendl; } } else diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 5d8a8805b5..0a8108899a 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -59,7 +59,8 @@ BOOL LLInventoryModel::sBackgroundFetchActive = FALSE; BOOL LLInventoryModel::sAllFoldersFetched = FALSE; -BOOL LLInventoryModel::sFullFetchStarted = FALSE; +BOOL LLInventoryModel::sMyInventoryFetchStarted = FALSE; +BOOL LLInventoryModel::sLibraryFetchStarted = FALSE; S32 LLInventoryModel::sNumFetchRetries = 0; F32 LLInventoryModel::sMinTimeBetweenFetches = 0.3f; F32 LLInventoryModel::sMaxTimeBetweenFetches = 10.f; @@ -1342,11 +1343,11 @@ bool LLInventoryModel::isBulkFetchProcessingComplete() && sBulkFetchCount<=0) ? TRUE : FALSE ) ; } -class fetchDescendentsResponder: public LLHTTPClient::Responder +class LLInventoryModelFetchDescendentsResponder: public LLHTTPClient::Responder { public: - fetchDescendentsResponder(const LLSD& request_sd) : mRequestSD(request_sd) {}; - //fetchDescendentsResponder() {}; + LLInventoryModelFetchDescendentsResponder(const LLSD& request_sd) : mRequestSD(request_sd) {}; + //LLInventoryModelFetchDescendentsResponder() {}; void result(const LLSD& content); void error(U32 status, const std::string& reason); public: @@ -1356,7 +1357,7 @@ class fetchDescendentsResponder: public LLHTTPClient::Responder }; //If we get back a normal response, handle it here -void fetchDescendentsResponder::result(const LLSD& content) +void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content) { if (content.has("folders")) { @@ -1423,7 +1424,8 @@ void fetchDescendentsResponder::result(const LLSD& content) LLSD category = *category_it; tcategory->fromLLSD(category); - if (LLInventoryModel::sFullFetchStarted) + if (LLInventoryModel::sMyInventoryFetchStarted || + LLInventoryModel::sLibraryFetchStarted) { sFetchQueue.push_back(tcategory->getUUID()); } @@ -1475,20 +1477,16 @@ void fetchDescendentsResponder::result(const LLSD& content) if (LLInventoryModel::isBulkFetchProcessingComplete()) { llinfos << "Inventory fetch completed" << llendl; - if (LLInventoryModel::sFullFetchStarted) - { - LLInventoryModel::sAllFoldersFetched = TRUE; - } - LLInventoryModel::stopBackgroundFetch(); + LLInventoryModel::setAllFoldersFetched(); } gInventory.notifyObservers("fetchDescendents"); } //If we get back an error (not found, etc...), handle it here -void fetchDescendentsResponder::error(U32 status, const std::string& reason) +void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::string& reason) { - llinfos << "fetchDescendentsResponder::error " + llinfos << "LLInventoryModelFetchDescendentsResponder::error " << status << ": " << reason << llendl; LLInventoryModel::incrBulkFetch(-1); @@ -1508,11 +1506,7 @@ void fetchDescendentsResponder::error(U32 status, const std::string& reason) { if (LLInventoryModel::isBulkFetchProcessingComplete()) { - if (LLInventoryModel::sFullFetchStarted) - { - LLInventoryModel::sAllFoldersFetched = TRUE; - } - LLInventoryModel::stopBackgroundFetch(); + LLInventoryModel::setAllFoldersFetched(); } } gInventory.notifyObservers("fetchDescendents"); @@ -1580,7 +1574,8 @@ void LLInventoryModel::bulkFetch(std::string url) body["folders"].append(folder_sd); folder_count++; } - if (sFullFetchStarted) + if (sMyInventoryFetchStarted || + sLibraryFetchStarted) { //Already have this folder but append child folders to list. // add all children to queue parent_cat_map_t::iterator cat_it = gInventory.mParentChildCategoryTree.find(cat->getUUID()); @@ -1605,22 +1600,18 @@ void LLInventoryModel::bulkFetch(std::string url) sBulkFetchCount++; if (body["folders"].size()) { - LLHTTPClient::post(url, body, new fetchDescendentsResponder(body),300.0); + LLHTTPClient::post(url, body, new LLInventoryModelFetchDescendentsResponder(body),300.0); } if (body_lib["folders"].size()) { std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents"); - LLHTTPClient::post(url_lib, body_lib, new fetchDescendentsResponder(body_lib),300.0); + LLHTTPClient::post(url_lib, body_lib, new LLInventoryModelFetchDescendentsResponder(body_lib),300.0); } sFetchTimer.reset(); } else if (isBulkFetchProcessingComplete()) { - if (sFullFetchStarted) - { - sAllFoldersFetched = TRUE; - } - stopBackgroundFetch(); + setAllFoldersFetched(); } } @@ -1636,7 +1627,6 @@ BOOL LLInventoryModel::backgroundFetchActive() return sBackgroundFetchActive; } -//static void LLInventoryModel::startBackgroundFetch(const LLUUID& cat_id) { if (!sAllFoldersFetched) @@ -1644,9 +1634,16 @@ void LLInventoryModel::startBackgroundFetch(const LLUUID& cat_id) sBackgroundFetchActive = TRUE; if (cat_id.isNull()) { - if (!sFullFetchStarted) + if (!sMyInventoryFetchStarted) { - sFullFetchStarted = TRUE; + sMyInventoryFetchStarted = TRUE; + sFetchQueue.push_back(gInventory.getLibraryRootFolderID()); + sFetchQueue.push_back(gInventory.getRootFolderID()); + gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL); + } + if (!sLibraryFetchStarted) + { + sLibraryFetchStarted = TRUE; sFetchQueue.push_back(gInventory.getLibraryRootFolderID()); sFetchQueue.push_back(gInventory.getRootFolderID()); gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL); @@ -1660,6 +1657,14 @@ void LLInventoryModel::startBackgroundFetch(const LLUUID& cat_id) sFetchQueue.push_front(cat_id); gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL); } + if (cat_id == gInventory.getLibraryRootFolderID()) + { + sLibraryFetchStarted = TRUE; + } + if (cat_id == gInventory.getRootFolderID()) + { + sMyInventoryFetchStarted = TRUE; + } } } } @@ -1681,10 +1686,20 @@ void LLInventoryModel::stopBackgroundFetch() gIdleCallbacks.deleteFunction(&LLInventoryModel::backgroundFetch, NULL); sBulkFetchCount=0; sMinTimeBetweenFetches=0.0f; -// sFullFetchStarted=FALSE; } } +// static +void LLInventoryModel::setAllFoldersFetched() +{ + if (sMyInventoryFetchStarted && + sLibraryFetchStarted) + { + sAllFoldersFetched = TRUE; + } + stopBackgroundFetch(); +} + //static void LLInventoryModel::backgroundFetch(void*) { @@ -1703,11 +1718,8 @@ void LLInventoryModel::backgroundFetch(void*) if (sFetchQueue.empty()) { llinfos << "Inventory fetch completed" << llendl; - if (sFullFetchStarted) - { - sAllFoldersFetched = TRUE; - } - stopBackgroundFetch(); + + setAllFoldersFetched(); return; } diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index b744d821c7..27bbca493d 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -72,6 +72,8 @@ class LLInventoryCollectFunctor; class LLInventoryModel { public: + friend class LLInventoryModelFetchDescendentsResponder; + enum EHasChildren { CHILDREN_NO, @@ -282,9 +284,6 @@ public: // Make sure we have the descendents in the structure. Returns true // if a fetch was performed. bool fetchDescendentsOf(const LLUUID& folder_id); - - // Add categories to a list to be fetched in bulk. - static void bulkFetch(std::string url); // call this method to request the inventory. //void requestFromServer(const LLUUID& agent_id); @@ -369,15 +368,7 @@ public: // Utility Functions void removeItem(const LLUUID& item_id); - // start and stop background breadth-first fetching of inventory contents - // this gets triggered when performing a filter-search - static void startBackgroundFetch(const LLUUID& cat_id = LLUUID::null); // start fetch process static void findLostItems(); - static BOOL backgroundFetchActive(); - static bool isEverythingFetched(); - static void backgroundFetch(void*); // background fetch idle function - static void incrBulkFetch(S16 fetching) { sBulkFetchCount+=fetching; if (sBulkFetchCount<0) sBulkFetchCount=0; } - // Data about the agent's root folder and root library folder // are stored here, rather than in LLAgent where it used to be, because @@ -477,14 +468,11 @@ private: LLUUID mLibraryRootFolderID; LLUUID mLibraryOwnerID; - // completing the fetch once per session should be sufficient - static BOOL sBackgroundFetchActive; static BOOL sTimelyFetchPending; static S32 sNumFetchRetries; static LLFrameTimer sFetchTimer; static F32 sMinTimeBetweenFetches; static F32 sMaxTimeBetweenFetches; - static S16 sBulkFetchCount; // Expected inventory cache version const static S32 sCurrentInvCacheVersion; @@ -510,11 +498,33 @@ private: public: // *NOTE: DEBUG functionality void dumpInventory() const; - static bool isBulkFetchProcessingComplete(); + + //////////////////////////////////////////////////////////////////////////////// + // Bulk / Background Fetch + +public: + // Start and stop background breadth-first fetching of inventory contents. + // This gets triggered when performing a filter-search + void startBackgroundFetch(const LLUUID& cat_id = LLUUID::null); + static BOOL backgroundFetchActive(); + static bool isEverythingFetched(); + static void backgroundFetch(void*); // background fetch idle function + static void incrBulkFetch(S16 fetching) { sBulkFetchCount+=fetching; if (sBulkFetchCount<0) sBulkFetchCount=0; } static void stopBackgroundFetch(); // stop fetch process + static bool isBulkFetchProcessingComplete(); + + // Add categories to a list to be fetched in bulk. + static void bulkFetch(std::string url); - static BOOL sFullFetchStarted; +private: + static BOOL sMyInventoryFetchStarted; + static BOOL sLibraryFetchStarted; static BOOL sAllFoldersFetched; + static void setAllFoldersFetched(); + + // completing the fetch once per session should be sufficient + static BOOL sBackgroundFetchActive; + static S16 sBulkFetchCount; }; // a special inventory model for the agent diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 32c9faa688..e56ed00dcb 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -367,6 +367,7 @@ void LLLandmarksPanel::initFavoritesInventoryPanel() initLandmarksPanel(mFavoritesInventoryPanel); mFavoritesInventoryPanel->getFilter()->setEmptyLookupMessage("FavoritesNoMatchingItems"); + initAccordion("tab_favorites", mFavoritesInventoryPanel); } @@ -428,6 +429,7 @@ void LLLandmarksPanel::initLandmarksPanel(LLInventorySubTreePanel* inventory_lis } root_folder->setParentLandmarksPanel(this); + inventory_list->saveFolderState(); } void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLInventorySubTreePanel* inventory_list) @@ -1030,21 +1032,30 @@ void LLLandmarksPanel::doCreatePick(LLLandmark* landmark) ////////////////////////////////////////////////////////////////////////// static void filter_list(LLInventorySubTreePanel* inventory_list, const std::string& string) { - // Open the immediate children of the root folder, since those - // are invisible in the UI and thus must always be open. - inventory_list->getRootFolder()->openTopLevelFolders(); - + // When search is cleared, restore the old folder state. if (string == "") { inventory_list->setFilterSubString(LLStringUtil::null); + // Re-open folders that were open before + inventory_list->restoreFolderState(); } + // Open the immediate children of the root folder, since those + // are invisible in the UI and thus must always be open. + inventory_list->getRootFolder()->openTopLevelFolders(); + if (inventory_list->getFilterSubString().empty() && string.empty()) { // current filter and new filter empty, do nothing return; } + // save current folder open state if no filter currently applied + if (inventory_list->getRootFolder()->getFilterSubString().empty()) + { + inventory_list->saveFolderState(); + } + // Set new filter string inventory_list->setFilterSubString(string); diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index 449bdefb8f..25518d87d6 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -109,19 +109,30 @@ BOOL LLSidepanelItemInfo::postBuild() { LLSidepanelInventorySubpanel::postBuild(); - // build the UI - // item name & description childSetPrevalidate("LabelItemName",&LLLineEditor::prevalidateASCIIPrintableNoPipe); - //getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitName,this)); + getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitName,this)); childSetPrevalidate("LabelItemDesc",&LLLineEditor::prevalidateASCIIPrintableNoPipe); - //getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLSidepanelItemInfo:: onCommitDescription, this)); - + getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLSidepanelItemInfo:: onCommitDescription, this)); // Creator information getChild<LLUICtrl>("BtnCreator")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickCreator,this)); - // owner information getChild<LLUICtrl>("BtnOwner")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickOwner,this)); - + // acquired date + // owner permissions + // Permissions debug text + // group permissions + getChild<LLUICtrl>("CheckShareWithGroup")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); + // everyone permissions + getChild<LLUICtrl>("CheckEveryoneCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); + // next owner permissions + getChild<LLUICtrl>("CheckNextOwnerModify")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); + getChild<LLUICtrl>("CheckNextOwnerCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); + getChild<LLUICtrl>("CheckNextOwnerTransfer")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this)); + // Mark for sale or not, and sale info + getChild<LLUICtrl>("CheckPurchase")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this)); + getChild<LLUICtrl>("RadioSaleType")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleType, this)); + // "Price" label for edit + getChild<LLUICtrl>("Edit Cost")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this)); refresh(); return TRUE; } diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 78cee15384..8dcd1b8f93 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -519,7 +519,7 @@ bool LLViewerInventoryCategory::fetchDescendents() std::string url = gAgent.getRegion()->getCapability("WebFetchInventoryDescendents"); if (!url.empty()) //Capability found. Build up LLSD and use it. { - LLInventoryModel::startBackgroundFetch(mUUID); + gInventory.startBackgroundFetch(mUUID); } else { //Deprecated, but if we don't have a capability, use the old system. diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index 660e3858ac..0f400777b8 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -339,6 +339,9 @@ function="Inventory.DoToSelected" parameter="open" /> </menu_item_call> + <menu_item_separator + layout="topleft" + name="Folder Wearables Separator" /> <menu_item_call label="Replace Current Outfit" layout="topleft" @@ -423,7 +426,8 @@ parameter="copy_uuid" /> </menu_item_call> <menu_item_separator - layout="topleft" /> + layout="topleft" + name="Copy Separator" /> <menu_item_call label="Copy" layout="topleft" @@ -449,7 +453,8 @@ parameter="paste_link" /> </menu_item_call> <menu_item_separator - layout="topleft" /> + layout="topleft" + name="Paste Separator" /> <menu_item_call label="Remove Link" layout="topleft" @@ -500,7 +505,8 @@ parameter="about" /> </menu_item_call> <menu_item_separator - layout="topleft" /> + layout="topleft" + name="Animation Separator" /> <menu_item_call label="Play in World" layout="topleft" @@ -518,7 +524,8 @@ parameter="playlocal" /> </menu_item_call> <menu_item_separator - layout="topleft" /> + layout="topleft" + name="Send Instant Message Separator" /> <menu_item_call label="Send Instant Message" layout="topleft" @@ -544,7 +551,8 @@ parameter="selected" /> </menu_item_call> <menu_item_separator - layout="topleft" /> + layout="topleft" + name="Gesture Separator" /> <menu_item_call label="Activate" layout="topleft" @@ -562,7 +570,8 @@ parameter="deactivate" /> </menu_item_call> <menu_item_separator - layout="topleft" /> + layout="topleft" + name="Texture Separator" /> <menu_item_call label="Save As" layout="topleft" @@ -572,7 +581,8 @@ parameter="save_as" /> </menu_item_call> <menu_item_separator - layout="topleft" /> + layout="topleft" + name="Attach Separator"/> <menu_item_call label="Detach From Yourself" layout="topleft" @@ -608,6 +618,9 @@ label="Attach To HUD" layout="topleft" name="Attach To HUD" /> + <menu_item_separator + layout="topleft" + name="Wearable Separator"/> <menu_item_call label="Edit" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index d006fd0700..3cddbed2d4 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -6,7 +6,7 @@ name="item properties" help_topic="item_properties" save_rect="true" - title="Inventory Item Properties" + title="Object Profile" width="333"> <panel.string name="unknown"> @@ -39,27 +39,39 @@ top="4" width="18" /> <button - follows="top|right" - height="25" - image_overlay="BackArrow_Off" - layout="topleft" - name="back_btn" - picture_style="true" - right="-5" - tab_stop="false" - top="0" - width="25" /> + follows="top|right" + height="23" + image_overlay="BackArrow_Off" + layout="topleft" + left="10" + name="back_btn" + tab_stop="false" + top="0" + width="23" /> + <text + follows="top|left|right" + font="SansSerifHuge" + height="26" + layout="topleft" + left_pad="10" + name="title" + text_color="LtGray" + top="0" + use_ellipses="true" + value="Object Profile" + width="275" /> <panel follows="all" height="500" label="" layout="topleft" - left="5" + left="10" help_topic="" top="30" - border="1" - width="313"> - <text + width="313" + background_visible="true" + bg_alpha_color="DkGray2"> + <text type="string" length="1" follows="left|top" @@ -67,7 +79,7 @@ layout="topleft" left="5" name="LabelItemNameTitle" - top="5" + top="10" width="78"> Name: </text> @@ -75,7 +87,7 @@ border_style="line" border_thickness="1" follows="left|top|right" - height="16" + height="20" layout="topleft" left_delta="78" max_length="63" @@ -90,7 +102,7 @@ layout="topleft" left="5" name="LabelItemDescTitle" - top_delta="20" + top_pad="10" width="78"> Description: </text> @@ -98,88 +110,106 @@ border_style="line" border_thickness="1" follows="left|top|right" - height="16" + height="23" layout="topleft" left_delta="78" max_length="127" name="LabelItemDesc" - top_delta="0" + top_delta="-5" width="225" /> <text type="string" length="1" follows="left|top" - height="16" + height="23" layout="topleft" - left="10" + left="5" name="LabelCreatorTitle" - top="65" +top_pad="10" width="78"> Creator: </text> + <avatar_icon + follows="top|left" + height="20" + default_icon_name="Generic_Person" + layout="topleft" + left_pad="0" + top_delta="-6" + mouse_opaque="true" + width="20" /> <text type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left_delta="78" + follows="left|right" + font="SansSerifSmall" + height="15" + layout="topleft" + left_pad="5" name="LabelCreatorName" - top_delta="0" + top_delta="6" width="140"> Nicole Linden </text> <button follows="top|right" - height="16" - label="Profile..." + height="23" + label="Profile" layout="topleft" - left_delta="144" + right="-1" name="BtnCreator" - top_delta="0" + top_delta="-6" width="78" /> <text type="string" length="1" follows="left|top" - height="16" + height="23" layout="topleft" - left="10" + left="5" name="LabelOwnerTitle" - top="85" +top_pad="5" width="78"> Owner: </text> + <avatar_icon + follows="top|left" + height="20" + default_icon_name="Generic_Person" + layout="topleft" + left_pad="0" + top_delta="-6" + mouse_opaque="true" + width="20" /> <text type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left_delta="78" + follows="left|right" + font="SansSerifSmall" + height="15" + layout="topleft" + left_pad="5" name="LabelOwnerName" - top_delta="0" + top_delta="6" width="140"> Thrax Linden </text> <button follows="top|right" - height="16" - label="Profile..." + height="23" + label="Profile" layout="topleft" - left_delta="144" + right="-1" name="BtnOwner" - top_delta="0" + top_delta="-3" width="78" /> <text type="string" length="1" follows="left|top" - height="16" + height="23" layout="topleft" - left="10" + left="5" name="LabelAcquiredTitle" - top="105" +top_pad="10" width="78"> Acquired: </text> @@ -187,7 +217,7 @@ type="string" length="1" follows="left|top" - height="16" + height="23" layout="topleft" left_delta="78" name="LabelAcquiredDate" @@ -195,134 +225,146 @@ width="222"> Wed May 24 12:50:46 2006 </text> - <text - type="string" - length="1" - follows="left|top" - height="10" - layout="topleft" - left="10" - name="OwnerLabel" - top="125" - width="78"> - You: - </text> + <panel + border="false" + follows="left|top" + layout="topleft" + mouse_opaque="false" + background_visible="true" + bg_alpha_color="DkGray" + name="perms_inv" + left="0" + top_pad="25" + height="155" + width="313"> + <text + type="string" + length="1" + left="10" + top_pad="13" + text_color="EmphasisColor" + height="15" + follows="left|top|right" + layout="topleft" + name="perm_modify" + width="200"> + You can: + </text> <check_box - height="16" - label="Edit" + height="18" + label="Modify" layout="topleft" - left_pad="5" + left="20" name="CheckOwnerModify" - top_delta="0" - width="78" /> + top_pad="0" + width="90" /> <check_box - height="16" + height="18" label="Copy" layout="topleft" - left_delta="0" + left_pad="0" name="CheckOwnerCopy" - top_pad="5" - width="88" /> + width="90" /> <check_box - height="16" - label="Resell" + height="18" + label="Transfer" layout="topleft" - left_delta="0" + left_pad="0" name="CheckOwnerTransfer" - top_pad="5" width="106" /> <text type="string" length="1" follows="left|top" - height="10" + height="16" layout="topleft" left="10" name="AnyoneLabel" - top_pad="5" - width="78"> + top_pad="8" + width="100"> Anyone: </text> <check_box - height="16" + height="18" label="Copy" layout="topleft" - left_pad="5" + left_pad="0" name="CheckEveryoneCopy" - top_delta="0" - width="130" /> + top_delta="-2" + width="150" /> <text type="string" length="1" follows="left|top" - height="10" + height="16" layout="topleft" left="10" name="GroupLabel" - top_pad="5" - width="78"> + top_pad="8" + width="100"> Group: </text> <check_box - height="16" + height="18" label="Share" layout="topleft" - left_pad="5" + left_pad="0" + top_delta="-2" name="CheckShareWithGroup" - top_delta="5" - width="106" /> + tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." + width="150" /> <text type="string" length="1" follows="left|top" - height="25" + height="16" layout="topleft" left="10" name="NextOwnerLabel" - top_pad="5" - width="78" + top_pad="8" + width="200" word_wrap="true"> Next owner: </text> <check_box - height="16" - label="Edit" + height="18" + label="Modify" layout="topleft" - left_pad="5" + left="20" + top_pad="0" name="CheckNextOwnerModify" - top_delta="0" - width="78" /> + width="90" /> <check_box - height="16" + height="18" label="Copy" layout="topleft" - left_delta="0" + left_pad="0" name="CheckNextOwnerCopy" - top_pad="5" - width="88" /> + width="90" /> <check_box - height="16" - label="Resell" + height="18" + label="Transfer" layout="topleft" - left_delta="0" + left_pad="0" name="CheckNextOwnerTransfer" - top_pad="5" + tool_tip="Next owner can give away or resell this object" width="106" /> + </panel> <check_box - height="16" + height="18" label="For Sale" layout="topleft" - left="10" + left="20" name="CheckPurchase" - top_pad="5" - width="78" /> + top_pad="20" + width="100" /> <combo_box - height="19" - left_pad="5" + height="23" + left_pad="0" layout="topleft" follows="left|top" name="combobox sale copy" - width="110"> + width="170"> <combo_box.item label="Copy" name="Copy" @@ -338,26 +380,14 @@ increment="1" control_name="Edit Cost" name="Edit Cost" - label="Price:" - label_width="100" - left="10" - width="192" + label="Price: L$" + label_width="75" + left="120" + width="170" min_val="1" - height="19" + height="23" max_val="999999999" - top_pad="5"/> - <text - type="string" - length="1" - height="15" - follows="left|top" - layout="topleft" - left_delta="82" - name="CurrencySymbol" - top_delta="1" - width="18"> - L$ - </text> + top_pad="10"/> <!--line_editor border_style="line" border_thickness="1" @@ -480,31 +510,4 @@ Price: L$ </text--> </panel> - <panel - height="25" - layout="bottomright" - help_topic="button_tab" - name="button_panel" - left="5" - bottom="5" - width="313"> - <button - follows="bottom|right" - height="25" - label="Cancel" - layout="topleft" - name="cancel_btn" - right="-1" - top="0" - width="70" /> - <button - follows="bottom|right" - height="25" - label="Save" - layout="topleft" - name="save_btn" - left_pad="-135" - top="0" - width="60" /> - </panel> </panel> |