diff options
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 32 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.h | 2 | ||||
| -rw-r--r-- | indra/newview/llinventoryfunctions.cpp | 25 | ||||
| -rw-r--r-- | indra/newview/llinventoryfunctions.h | 1 | ||||
| -rw-r--r-- | indra/newview/llinventorygallery.cpp | 13 | 
5 files changed, 53 insertions, 20 deletions
| diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index bff7138282..e48fe69853 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -2981,12 +2981,16 @@ bool LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,                      if (dest_res == MY_OUTFITS_SUBFOLDER && create_outfit)                      {                          // turn it into outfit -                        dropToMyOutfitsSubfolder(inv_cat, mUUID, LLFolderType::FT_OUTFIT, cb); +                        dropToMyOutfitsSubfolder(inv_cat, mUUID, cb);                      }                      else                      { -                        // or link it? -                        dropToMyOutfitsSubfolder(inv_cat, mUUID, LLFolderType::FT_NONE, cb); +                        LLInvFVBridge::changeCategoryParent( +                            model, +                            (LLViewerInventoryCategory*)inv_cat, +                            mUUID, +                            move_is_into_trash); +                        if (cb) cb->fire(inv_cat->getUUID());                      }                      break;                  case MY_OUTFITS_SUBFOLDER: @@ -4123,11 +4127,13 @@ void LLFolderBridge::perform_pasteFromClipboard()                      {                          LLViewerInventoryCategory* cat = model->getCategory(item_id);                          U32 max_items_to_wear = gSavedSettings.getU32("WearFolderLimit"); +                        bool handled = false;                          if (cat && can_move_to_my_outfits_as_outfit(model, cat, max_items_to_wear))                          {                              if (mUUID == my_outifts_id)                              {                                  dropToMyOutfits(cat, cb); +                                handled = true;                              }                              else if (move_is_into_my_outfits)                              { @@ -4135,27 +4141,26 @@ void LLFolderBridge::perform_pasteFromClipboard()                                  if (res == MY_OUTFITS_SUBFOLDER)                                  {                                      // turn it into outfit -                                    dropToMyOutfitsSubfolder(cat, mUUID, LLFolderType::FT_OUTFIT, cb); -                                } -                                else -                                { -                                    dropToMyOutfitsSubfolder(cat, mUUID, LLFolderType::FT_NONE, cb); +                                    dropToMyOutfitsSubfolder(cat, mUUID, cb); +                                    handled = true;                                  }                              }                          } -                        else if (cat && can_move_to_my_outfits_as_subfolder(model, cat)) +                        if (!handled && cat && can_move_to_my_outfits_as_subfolder(model, cat))                          {                              if (LLClipboard::instance().isCutMode())                              {                                  changeCategoryParent(model, cat, parent_id, false); -                                if (cb) cb->fire(item_id);                              }                              else                              {                                  copy_inventory_category(model, cat, parent_id);                              } +                            if (cb) cb->fire(item_id); +                            handled = true;                          } -                        else + +                        if (!handled)                          {                              LLNotificationsUtil::add("MyOutfitsPasteFailed");                          } @@ -5500,12 +5505,11 @@ void LLFolderBridge::dropToMyOutfits(LLInventoryCategory* inv_cat, LLPointer<LLI                                   inv_cat->getThumbnailUUID());  } -void LLFolderBridge::dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID& dest_id, LLFolderType::EType preferred_type, LLPointer<LLInventoryCallback> cb) +void LLFolderBridge::dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID& dest_id, LLPointer<LLInventoryCallback> cb)  { -    const LLUUID outfits_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);      inventory_func_type func = boost::bind(outfitFolderCreatedCallback, inv_cat->getUUID(), _1, cb, mInventoryPanel);      getInventoryModel()->createNewCategory(dest_id, -        preferred_type, +        LLFolderType::FT_OUTFIT,          inv_cat->getName(),          func,          inv_cat->getThumbnailUUID()); diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index a101c7368a..b7bdef9b21 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -369,7 +369,7 @@ protected:      void dropToFavorites(LLInventoryItem* inv_item, LLPointer<LLInventoryCallback> cb = NULL);      void dropToOutfit(LLInventoryItem* inv_item, bool move_is_into_current_outfit, LLPointer<LLInventoryCallback> cb = NULL);      void dropToMyOutfits(LLInventoryCategory* inv_cat, LLPointer<LLInventoryCallback> cb = NULL); -    void dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID& dest, LLFolderType::EType preferred_type, LLPointer<LLInventoryCallback> cb = NULL); +    void dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID& dest, LLPointer<LLInventoryCallback> cb = NULL);      //--------------------------------------------------------------------      // Messy hacks for handling folder options diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 9967318e92..3286eca265 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -460,6 +460,25 @@ void copy_inventory_category(LLInventoryModel* model,      gInventory.createNewCategory(parent_id, LLFolderType::FT_NONE, cat->getName(), func, cat->getThumbnailUUID());  } +void copy_inventory_category(LLInventoryModel* model, +    LLViewerInventoryCategory* cat, +    const LLUUID& parent_id, +    const LLUUID& root_copy_id, +    bool move_no_copy_items, +    LLPointer<LLInventoryCallback> callback) +{ +    // Create the initial folder +    inventory_func_type func = [model, cat, root_copy_id, move_no_copy_items, callback](const LLUUID& new_id) +    { +        copy_inventory_category_content(new_id, model, cat, root_copy_id, move_no_copy_items); +        if (callback) +        { +            callback.get()->fire(new_id); +        } +    }; +    gInventory.createNewCategory(parent_id, LLFolderType::FT_NONE, cat->getName(), func, cat->getThumbnailUUID()); +} +  void copy_cb(const LLUUID& dest_folder, const LLUUID& root_id)  {      // Decrement the count in root_id since that one item won't be copied over @@ -2365,6 +2384,12 @@ bool can_move_to_my_outfits_as_subfolder(LLInventoryModel* model, LLInventoryCat          return false;      } +    if (inv_cat->getPreferredType() != LLFolderType::FT_NONE) +    { +        // only normal folders can become subfodlers +        return false; +    } +      constexpr size_t MAX_CONTENT = 255;      if (cats->size() > MAX_CONTENT)      { diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index f56413bf5d..b23f82a189 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -78,6 +78,7 @@ void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::s  void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& parent_id, const LLUUID& root_copy_id = LLUUID::null, bool move_no_copy_items = false);  void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& parent_id, const LLUUID& root_copy_id, bool move_no_copy_items, inventory_func_type callback); +void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& parent_id, const LLUUID& root_copy_id, bool move_no_copy_items, LLPointer<LLInventoryCallback> callback);  void copy_inventory_category_content(const LLUUID& new_cat_uuid, LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& root_copy_id, bool move_no_copy_items); diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp index 3222dff1b2..43d4edb069 100644 --- a/indra/newview/llinventorygallery.cpp +++ b/indra/newview/llinventorygallery.cpp @@ -65,7 +65,7 @@ const S32 FAST_LOAD_THUMBNAIL_TRSHOLD = 50; // load folders below this value imm  bool dragCategoryIntoFolder(LLUUID dest_id, LLInventoryCategory* inv_cat, bool drop, std::string& tooltip_msg, bool is_link);  bool dragItemIntoFolder(LLUUID folder_id, LLInventoryItem* inv_item, bool drop, std::string& tooltip_msg, bool user_confirm);  void dropToMyOutfits(LLInventoryCategory* inv_cat); -void dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID& dest_id, LLFolderType::EType preferred_type); +void dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID& dest_id);  class LLGalleryPanel: public LLPanel  { @@ -3964,11 +3964,14 @@ bool dragCategoryIntoFolder(LLUUID dest_id, LLInventoryCategory* inv_cat,                      if (dest_res == MY_OUTFITS_SUBFOLDER && create_outfit)                      {                          // turn it into outfit -                        dropToMyOutfitsSubfolder(inv_cat, dest_id, LLFolderType::FT_OUTFIT); +                        dropToMyOutfitsSubfolder(inv_cat, dest_id);                      }                      else                      { -                        dropToMyOutfitsSubfolder(inv_cat, dest_id, LLFolderType::FT_NONE); +                        gInventory.changeCategoryParent( +                            (LLViewerInventoryCategory*)inv_cat, +                            dest_id, +                            move_is_into_trash);                      }                      break;                  case MY_OUTFITS_SUBFOLDER: @@ -4147,10 +4150,10 @@ void dropToMyOutfits(LLInventoryCategory* inv_cat)      gInventory.createNewCategory(dest_id, LLFolderType::FT_OUTFIT, inv_cat->getName(), func, inv_cat->getThumbnailUUID());  } -void dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID &dest_id, LLFolderType::EType preferred_type) +void dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID &dest_id)  {      // Note: creation will take time, so passing folder id to callback is slightly unreliable,      // but so is collecting and passing descendants' ids      inventory_func_type func = boost::bind(&outfitFolderCreatedCallback, inv_cat->getUUID(), _1); -    gInventory.createNewCategory(dest_id, preferred_type, inv_cat->getName(), func, inv_cat->getThumbnailUUID()); +    gInventory.createNewCategory(dest_id, LLFolderType::FT_OUTFIT, inv_cat->getName(), func, inv_cat->getThumbnailUUID());  } | 
