diff options
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 45 | ||||
| -rw-r--r-- | indra/newview/llinventoryfunctions.cpp | 16 | ||||
| -rw-r--r-- | indra/newview/llinventoryfunctions.h | 18 | ||||
| -rw-r--r-- | indra/newview/llinventorypanel.cpp | 2 | 
4 files changed, 58 insertions, 23 deletions
| diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index bd3de8db42..e7584018a8 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -4410,21 +4410,26 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t&   items          //Added by aura to force inventory pull on right-click to display folder options correctly. 07-17-06          mCallingCards = mWearables = false; -        LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD); -        if (checkFolderForContentsOfType(model, is_callingcard)) +        if (gInventory.getRootFolderID() != mUUID)          { -            mCallingCards=true; -        } +            LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD); +            if (checkFolderForContentsOfType(model, is_callingcard)) +            { +                mCallingCards = true; +            } -        LLFindWearables is_wearable; -        LLIsType is_object( LLAssetType::AT_OBJECT ); -        LLIsType is_gesture( LLAssetType::AT_GESTURE ); +            const std::vector<LLAssetType::EType> types = { LLAssetType::AT_CLOTHING, LLAssetType::AT_BODYPART, LLAssetType::AT_OBJECT, LLAssetType::AT_GESTURE }; +            LLIsOneOfTypes is_wearable(types); -        if (checkFolderForContentsOfType(model, is_wearable) || -            checkFolderForContentsOfType(model, is_object)   || -            checkFolderForContentsOfType(model, is_gesture)    ) +            if (checkFolderForContentsOfType(model, is_wearable)) +            { +                mWearables = true; +            } +        } +        else          { -            mWearables=true; +            // Assume that there are wearables in the root folder +            mWearables = true;          }      }      else @@ -4437,13 +4442,10 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t&   items          LLFolderType::EType type = category->getPreferredType();          const bool is_system_folder = LLFolderType::lookupIsProtectedType(type); -        LLFindWearables is_wearable; -        LLIsType is_object(LLAssetType::AT_OBJECT); -        LLIsType is_gesture(LLAssetType::AT_GESTURE); +        const std::vector<LLAssetType::EType> types = { LLAssetType::AT_CLOTHING, LLAssetType::AT_BODYPART, LLAssetType::AT_OBJECT, LLAssetType::AT_GESTURE }; +        LLIsOneOfTypes is_wearable(types); -        if (checkFolderForContentsOfType(model, is_wearable) || -            checkFolderForContentsOfType(model, is_object) || -            checkFolderForContentsOfType(model, is_gesture)) +        if (checkFolderForContentsOfType(model, is_wearable))          {              mWearables = true;          } @@ -4566,14 +4568,11 @@ void LLFolderBridge::buildContextMenuFolderOptions(U32 flags,   menuentry_vec_t&      // wearables related functionality for folders.      //is_wearable -    LLFindWearables is_wearable; -    LLIsType is_object( LLAssetType::AT_OBJECT ); -    LLIsType is_gesture( LLAssetType::AT_GESTURE ); +    const std::vector<LLAssetType::EType> types = { LLAssetType::AT_CLOTHING, LLAssetType::AT_BODYPART, LLAssetType::AT_OBJECT, LLAssetType::AT_GESTURE }; +    LLIsOneOfTypes is_wearable(types);      if (mWearables || -        checkFolderForContentsOfType(model, is_wearable)  || -        checkFolderForContentsOfType(model, is_object) || -        checkFolderForContentsOfType(model, is_gesture) ) +        checkFolderForContentsOfType(model, is_wearable))      {          // Only enable add/replace outfit for non-system folders.          if (!is_system_folder) diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index dadd0590a9..1ccefa3212 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -2634,6 +2634,22 @@ bool LLIsType::operator()(LLInventoryCategory* cat, LLInventoryItem* item)      return false;  } +bool LLIsOneOfTypes::operator()(LLInventoryCategory* cat, LLInventoryItem* item) +{ +    for (LLAssetType::EType &type : mTypes) +    { +        if (type == LLAssetType::AT_CATEGORY) +        { +            if (cat) return true; +        } +        if (item) +        { +            if (item->getType() == type) return true; +        } +    } +    return false; +} +  bool LLIsNotType::operator()(LLInventoryCategory* cat, LLInventoryItem* item)  {      if(mType == LLAssetType::AT_CATEGORY) diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index a25c0d5ad6..13a64f21dc 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -246,6 +246,24 @@ protected:  };  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLIsOneOfTypes +// +// Implementation of a LLInventoryCollectFunctor which returns true if +// the type is one of the types passed in during construction. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class LLIsOneOfTypes : public LLInventoryCollectFunctor +{ +public: +    LLIsOneOfTypes(const std::vector<LLAssetType::EType> &types) : mTypes(types) {} +    virtual ~LLIsOneOfTypes() {} +    virtual bool operator()(LLInventoryCategory* cat, +        LLInventoryItem* item); +protected: +    std::vector <LLAssetType::EType> mTypes; +}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  // Class LLIsNotType  //  // Implementation of a LLInventoryCollectFunctor which returns false if the diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index e4d1010231..5066a7da7f 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -1334,6 +1334,8 @@ void LLInventoryPanel::openStartFolderOrMyInventory()          LLFolderViewFolder *fchild = dynamic_cast<LLFolderViewFolder*>(child);          if (fchild              && fchild->getViewModelItem() +            // Is this right? Name might be localized, +            // use FT_ROOT_INVENTORY or gInventory.getRootFolderID()?              && fchild->getViewModelItem()->getName() == "My Inventory")          {              fchild->setOpen(true); | 
