STORM-296 : merge with viewer-development
commit
1868e102c2
|
|
@ -1649,10 +1649,12 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||
const LLUUID &cat_id = inv_cat->getUUID();
|
||||
const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false);
|
||||
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
|
||||
const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false);
|
||||
|
||||
const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
|
||||
const BOOL move_is_into_outfit = getCategory() && (getCategory()->getPreferredType() == LLFolderType::FT_OUTFIT);
|
||||
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
|
||||
const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id);
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
// Determine if folder can be moved.
|
||||
|
|
@ -1690,6 +1692,21 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||
}
|
||||
}
|
||||
}
|
||||
if (move_is_into_landmarks)
|
||||
{
|
||||
for (S32 i=0; i < descendent_items.count(); ++i)
|
||||
{
|
||||
LLViewerInventoryItem* item = descendent_items[i];
|
||||
|
||||
// Don't move anything except landmarks and categories into Landmarks folder.
|
||||
// We use getType() instead of getActua;Type() to allow links to landmarks and folders.
|
||||
if (LLAssetType::AT_LANDMARK != item->getType() && LLAssetType::AT_CATEGORY != item->getType())
|
||||
{
|
||||
is_movable = FALSE;
|
||||
break; // It's generally movable, but not into Landmarks.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
//--------------------------------------------------------------------------------
|
||||
|
|
@ -2661,6 +2678,8 @@ BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop,
|
|||
EDragAndDropType cargo_type,
|
||||
void* cargo_data)
|
||||
{
|
||||
LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data;
|
||||
|
||||
//llinfos << "LLFolderBridge::dragOrDrop()" << llendl;
|
||||
BOOL accept = FALSE;
|
||||
switch(cargo_type)
|
||||
|
|
@ -2676,9 +2695,24 @@ BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop,
|
|||
case DAD_BODYPART:
|
||||
case DAD_ANIMATION:
|
||||
case DAD_GESTURE:
|
||||
accept = dragItemIntoFolder(inv_item, drop);
|
||||
break;
|
||||
case DAD_LINK:
|
||||
accept = dragItemIntoFolder((LLInventoryItem*)cargo_data,
|
||||
drop);
|
||||
// DAD_LINK type might mean one of two asset types: AT_LINK or AT_LINK_FOLDER.
|
||||
// If we have an item of AT_LINK_FOLDER type we should process the linked
|
||||
// category being dragged or dropped into folder.
|
||||
if (inv_item && LLAssetType::AT_LINK_FOLDER == inv_item->getActualType())
|
||||
{
|
||||
LLInventoryCategory* linked_category = gInventory.getCategory(inv_item->getLinkedUUID());
|
||||
if (linked_category)
|
||||
{
|
||||
accept = dragCategoryIntoFolder((LLInventoryCategory*)linked_category, drop);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
accept = dragItemIntoFolder(inv_item, drop);
|
||||
}
|
||||
break;
|
||||
case DAD_CATEGORY:
|
||||
if (LLFriendCardsManager::instance().isAnyFriendCategory(mUUID))
|
||||
|
|
@ -2875,6 +2909,24 @@ static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_curr
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
// Returns TRUE if item is a landmark or a link to a landmark
|
||||
// and can be moved to Favorites or Landmarks folder.
|
||||
static BOOL can_move_to_landmarks(LLInventoryItem* inv_item)
|
||||
{
|
||||
// Need to get the linked item to know its type because LLInventoryItem::getType()
|
||||
// returns actual type AT_LINK for links, not the asset type of a linked item.
|
||||
if (LLAssetType::AT_LINK == inv_item->getType())
|
||||
{
|
||||
LLInventoryItem* linked_item = gInventory.getItem(inv_item->getLinkedUUID());
|
||||
if (linked_item)
|
||||
{
|
||||
return LLAssetType::AT_LANDMARK == linked_item->getType();
|
||||
}
|
||||
}
|
||||
|
||||
return LLAssetType::AT_LANDMARK == inv_item->getType();
|
||||
}
|
||||
|
||||
void LLFolderBridge::dropToFavorites(LLInventoryItem* inv_item)
|
||||
{
|
||||
// use callback to rearrange favorite landmarks after adding
|
||||
|
|
@ -2931,9 +2983,12 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||
|
||||
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
|
||||
const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);
|
||||
const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false);
|
||||
|
||||
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
|
||||
const BOOL move_is_into_favorites = (mUUID == favorites_id);
|
||||
const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
|
||||
const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id);
|
||||
|
||||
LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
|
||||
BOOL accept = FALSE;
|
||||
|
|
@ -2944,7 +2999,6 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||
|
||||
const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
|
||||
const BOOL move_is_outof_current_outfit = LLAppearanceMgr::instance().getIsInCOF(inv_item->getUUID());
|
||||
const BOOL folder_allows_reorder = (mUUID == favorites_id);
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
// Determine if item can be moved.
|
||||
|
|
@ -2990,12 +3044,16 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||
|
||||
if (!is_movable)
|
||||
accept = FALSE;
|
||||
if ((mUUID == inv_item->getParentUUID()) && !folder_allows_reorder)
|
||||
if ((mUUID == inv_item->getParentUUID()) && !move_is_into_favorites)
|
||||
accept = FALSE;
|
||||
if (move_is_into_current_outfit || move_is_into_outfit)
|
||||
{
|
||||
accept = can_move_to_outfit(inv_item, move_is_into_current_outfit);
|
||||
}
|
||||
else if (move_is_into_favorites || move_is_into_landmarks)
|
||||
{
|
||||
accept = can_move_to_landmarks(inv_item);
|
||||
}
|
||||
|
||||
if(accept && drop)
|
||||
{
|
||||
|
|
@ -3021,8 +3079,8 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||
//
|
||||
|
||||
// REORDER
|
||||
// (only reorder the item)
|
||||
if ((mUUID == inv_item->getParentUUID()) && folder_allows_reorder)
|
||||
// (only reorder the item in Favorites folder)
|
||||
if ((mUUID == inv_item->getParentUUID()) && move_is_into_favorites)
|
||||
{
|
||||
LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
|
||||
LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
|
||||
|
|
@ -3036,7 +3094,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||
|
||||
// FAVORITES folder
|
||||
// (copy the item)
|
||||
else if (favorites_id == mUUID)
|
||||
else if (move_is_into_favorites)
|
||||
{
|
||||
dropToFavorites(inv_item);
|
||||
}
|
||||
|
|
@ -3101,6 +3159,13 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||
{
|
||||
accept = FALSE;
|
||||
}
|
||||
// Don't allow to move a single item to Favorites or Landmarks
|
||||
// if it is not a landmark or a link to a landmark.
|
||||
else if ((move_is_into_favorites || move_is_into_landmarks)
|
||||
&& !can_move_to_landmarks(inv_item))
|
||||
{
|
||||
accept = FALSE;
|
||||
}
|
||||
|
||||
if(drop && accept)
|
||||
{
|
||||
|
|
@ -3146,12 +3211,18 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||
{
|
||||
accept = can_move_to_outfit(inv_item, move_is_into_current_outfit);
|
||||
}
|
||||
// Don't allow to move a single item to Favorites or Landmarks
|
||||
// if it is not a landmark or a link to a landmark.
|
||||
else if (move_is_into_favorites || move_is_into_landmarks)
|
||||
{
|
||||
accept = can_move_to_landmarks(inv_item);
|
||||
}
|
||||
|
||||
if (accept && drop)
|
||||
{
|
||||
// FAVORITES folder
|
||||
// (copy the item)
|
||||
if (favorites_id == mUUID)
|
||||
if (move_is_into_favorites)
|
||||
{
|
||||
dropToFavorites(inv_item);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -205,24 +205,6 @@ BOOL LLPlacesFolderView::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
|||
return LLFolderView::handleRightMouseDown(x, y, mask);
|
||||
}
|
||||
|
||||
BOOL LLPlacesFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
||||
EDragAndDropType cargo_type,
|
||||
void* cargo_data,
|
||||
EAcceptance* accept,
|
||||
std::string& tooltip_msg)
|
||||
{
|
||||
// Don't accept anything except landmarks and folders to be dropped
|
||||
// in places folder view. See STORM-296.
|
||||
if (cargo_type != DAD_LANDMARK && cargo_type != DAD_CATEGORY)
|
||||
{
|
||||
*accept = ACCEPT_NO;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return LLFolderView::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data,
|
||||
accept, tooltip_msg);
|
||||
}
|
||||
|
||||
void LLPlacesFolderView::setupMenuHandle(LLInventoryType::EType asset_type, LLHandle<LLView> menu_handle)
|
||||
{
|
||||
mMenuHandlesByInventoryType[asset_type] = menu_handle;
|
||||
|
|
|
|||
|
|
@ -70,12 +70,6 @@ public:
|
|||
*/
|
||||
/*virtual*/ BOOL handleRightMouseDown( S32 x, S32 y, MASK mask );
|
||||
|
||||
/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
||||
EDragAndDropType cargo_type,
|
||||
void* cargo_data,
|
||||
EAcceptance* accept,
|
||||
std::string& tooltip_msg);
|
||||
|
||||
void setupMenuHandle(LLInventoryType::EType asset_type, LLHandle<LLView> menu_handle);
|
||||
|
||||
void setParentLandmarksPanel(LLLandmarksPanel* panel)
|
||||
|
|
|
|||
Loading…
Reference in New Issue