summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoren Shih <seraph@lindenlab.com>2010-02-04 14:29:43 -0500
committerLoren Shih <seraph@lindenlab.com>2010-02-04 14:29:43 -0500
commitc58e152236abfc1c414eb6c64783334ca9555b58 (patch)
treed44dbd26c09193737c98dc5b934044288634a630
parentf700be39e7dc9b9e6e56031818b94c329383a097 (diff)
EXT-4801 : hitting trash button for trashed items does not delete item
EXT-4957 : add const correctness for LLFolderViewEventListener::isItemRemovable This checkin affects several files but is a lot less scary than it looks. It's mostly to add const correctness, and to rename isInTrash to isItemInTrash so that its naming is consistent with isItemRemovable/isItemMovable. The only functionality change is to disable the trash button when an item is already in the trash.
-rw-r--r--indra/newview/llfolderview.cpp3
-rw-r--r--indra/newview/llfoldervieweventlistener.h3
-rw-r--r--indra/newview/llinventorybridge.cpp38
-rw-r--r--indra/newview/llinventorybridge.h10
-rw-r--r--indra/newview/llpanelmaininventory.cpp6
-rw-r--r--indra/newview/llpanelobjectinventory.cpp10
-rw-r--r--indra/newview/llplacesinventorybridge.cpp2
7 files changed, 39 insertions, 33 deletions
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index c6135d3bc3..5c65b2c293 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -1272,8 +1272,7 @@ BOOL LLFolderView::canCut() const
const LLFolderViewItem* item = *selected_it;
const LLFolderViewEventListener* listener = item->getListener();
- // *WARKAROUND: it is too many places where the "isItemRemovable" method should be changed with "const" modifier
- if (!listener || !(const_cast<LLFolderViewEventListener*>(listener))->isItemRemovable())
+ if (!listener || !listener->isItemRemovable())
{
return FALSE;
}
diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h
index d6c4459e6f..12e100caf4 100644
--- a/indra/newview/llfoldervieweventlistener.h
+++ b/indra/newview/llfoldervieweventlistener.h
@@ -73,7 +73,8 @@ public:
virtual BOOL isItemRenameable() const = 0;
virtual BOOL renameItem(const std::string& new_name) = 0;
virtual BOOL isItemMovable( void ) const = 0; // Can be moved to another folder
- virtual BOOL isItemRemovable( void ) = 0; // Can be destroyed
+ virtual BOOL isItemRemovable( void ) const = 0; // Can be destroyed
+ virtual BOOL isItemInTrash( void) const { return FALSE; } // TODO: make into pure virtual.
virtual BOOL removeItem() = 0;
virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch) = 0;
virtual void move( LLFolderViewEventListener* parent_listener ) = 0;
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index ab178b4007..3a630650c5 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -174,7 +174,7 @@ time_t LLInvFVBridge::getCreationDate() const
}
// Can be destroyed (or moved to trash)
-BOOL LLInvFVBridge::isItemRemovable()
+BOOL LLInvFVBridge::isItemRemovable() const
{
const LLInventoryModel* model = getInventoryModel();
if(!model)
@@ -605,7 +605,7 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
lldebugs << "LLInvFVBridge::buildContextMenu()" << llendl;
std::vector<std::string> items;
std::vector<std::string> disabled_items;
- if(isInTrash())
+ if(isItemInTrash())
{
items.push_back(std::string("Purge Item"));
if (!isItemRemovable())
@@ -670,7 +670,7 @@ LLInventoryModel* LLInvFVBridge::getInventoryModel() const
return panel ? panel->getModel() : NULL;
}
-BOOL LLInvFVBridge::isInTrash() const
+BOOL LLInvFVBridge::isItemInTrash() const
{
LLInventoryModel* model = getInventoryModel();
if(!model) return FALSE;
@@ -680,7 +680,7 @@ BOOL LLInvFVBridge::isInTrash() const
BOOL LLInvFVBridge::isLinkedObjectInTrash() const
{
- if (isInTrash()) return TRUE;
+ if (isItemInTrash()) return TRUE;
const LLInventoryObject *obj = getInventoryObject();
if (obj && obj->getIsLinkType())
@@ -1412,7 +1412,7 @@ public:
};
// Can be destroyed (or moved to trash)
-BOOL LLFolderBridge::isItemRemovable()
+BOOL LLFolderBridge::isItemRemovable() const
{
LLInventoryModel* model = getInventoryModel();
if(!model)
@@ -3208,7 +3208,7 @@ void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
lldebugs << "LLTextureBridge::buildContextMenu()" << llendl;
std::vector<std::string> items;
std::vector<std::string> disabled_items;
- if(isInTrash())
+ if(isItemInTrash())
{
items.push_back(std::string("Purge Item"));
if (!isItemRemovable())
@@ -3302,7 +3302,7 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
std::vector<std::string> items;
std::vector<std::string> disabled_items;
- if(isInTrash())
+ if(isItemInTrash())
{
items.push_back(std::string("Purge Item"));
if (!isItemRemovable())
@@ -3351,7 +3351,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
std::vector<std::string> disabled_items;
lldebugs << "LLLandmarkBridge::buildContextMenu()" << llendl;
- if(isInTrash())
+ if(isItemInTrash())
{
items.push_back(std::string("Purge Item"));
if (!isItemRemovable())
@@ -3576,7 +3576,7 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
std::vector<std::string> items;
std::vector<std::string> disabled_items;
- if(isInTrash())
+ if(isItemInTrash())
{
items.push_back(std::string("Purge Item"));
if (!isItemRemovable())
@@ -3841,7 +3841,7 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
lldebugs << "LLGestureBridge::buildContextMenu()" << llendl;
std::vector<std::string> items;
std::vector<std::string> disabled_items;
- if(isInTrash())
+ if(isItemInTrash())
{
items.push_back(std::string("Purge Item"));
if (!isItemRemovable())
@@ -3905,7 +3905,7 @@ void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
std::vector<std::string> disabled_items;
lldebugs << "LLAnimationBridge::buildContextMenu()" << llendl;
- if(isInTrash())
+ if(isItemInTrash())
{
items.push_back(std::string("Purge Item"));
if (!isItemRemovable())
@@ -4184,7 +4184,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
{
std::vector<std::string> items;
std::vector<std::string> disabled_items;
- if(isInTrash())
+ if(isItemInTrash())
{
items.push_back(std::string("Purge Item"));
if (!isItemRemovable())
@@ -4220,7 +4220,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
{
items.push_back(std::string("Detach From Yourself"));
}
- else if (!isInTrash() && !isLinkedObjectInTrash() && !isLinkedObjectMissing())
+ else if (!isItemInTrash() && !isLinkedObjectInTrash() && !isLinkedObjectMissing())
{
items.push_back(std::string("Attach Separator"));
items.push_back(std::string("Object Wear"));
@@ -4558,7 +4558,7 @@ void LLWearableBridge::openItem()
LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel());
}
/*
- if( isInTrash() )
+ if( isItemInTrash() )
{
LLNotificationsUtil::add("CannotWearTrash");
}
@@ -4600,7 +4600,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
lldebugs << "LLWearableBridge::buildContextMenu()" << llendl;
std::vector<std::string> items;
std::vector<std::string> disabled_items;
- if(isInTrash())
+ if(isItemInTrash())
{
items.push_back(std::string("Purge Item"));
if (!isItemRemovable())
@@ -5195,7 +5195,7 @@ void LLLSLTextBridgeAction::doIt()
}
-BOOL LLWearableBridgeAction::isInTrash() const
+BOOL LLWearableBridgeAction::isItemInTrash() const
{
if(!mModel) return FALSE;
const LLUUID trash_id = mModel->findCategoryUUIDForType(LLFolderType::FT_TRASH);
@@ -5243,7 +5243,7 @@ void LLWearableBridgeAction::wearOnAvatar()
//virtual
void LLWearableBridgeAction::doIt()
{
- if(isInTrash())
+ if(isItemInTrash())
{
LLNotificationsUtil::add("CannotWearTrash");
}
@@ -5308,7 +5308,7 @@ void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
items.push_back(std::string("Find Original"));
disabled_items.push_back(std::string("Find Original"));
- if(isInTrash())
+ if(isItemInTrash())
{
items.push_back(std::string("Purge Item"));
if (!isItemRemovable())
@@ -5359,7 +5359,7 @@ void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
std::vector<std::string> items;
std::vector<std::string> disabled_items;
- if(isInTrash())
+ if(isItemInTrash())
{
items.push_back(std::string("Purge Item"));
if (!isItemRemovable())
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 6fffec96a0..6e256edc05 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -158,8 +158,10 @@ public:
virtual void showProperties();
virtual BOOL isItemRenameable() const { return TRUE; }
//virtual BOOL renameItem(const std::string& new_name) {}
- virtual BOOL isItemRemovable();
+ virtual BOOL isItemRemovable() const;
virtual BOOL isItemMovable() const;
+ virtual BOOL isItemInTrash() const;
+
//virtual BOOL removeItem() = 0;
virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch);
virtual void move(LLFolderViewEventListener* new_parent_bridge) {}
@@ -185,13 +187,13 @@ public:
// Allow context menus to be customized for side panel.
bool isInOutfitsSidePanel() const;
+
protected:
LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid);
LLInventoryObject* getInventoryObject() const;
LLInventoryModel* getInventoryModel() const;
- BOOL isInTrash() const;
BOOL isLinkedObjectInTrash() const; // Is this obj or its baseobj in the trash?
BOOL isLinkedObjectMissing() const; // Is this a linked obj whose baseobj is not in inventory?
@@ -306,7 +308,7 @@ public:
EDragAndDropType cargo_type,
void* cargo_data);
- virtual BOOL isItemRemovable();
+ virtual BOOL isItemRemovable() const;
virtual BOOL isItemMovable() const ;
virtual BOOL isUpToDate() const;
virtual BOOL isItemCopyable() const;
@@ -786,7 +788,7 @@ protected:
LLWearableBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){}
- BOOL isInTrash() const;
+ BOOL isItemInTrash() const;
// return true if the item is in agent inventory. if false, it
// must be lost or in the inventory library.
BOOL isAgentInventory() const;
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index a5a61f0c7b..1895993a8e 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -1071,7 +1071,11 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)
{
const LLUUID &item_id = (*iter);
LLFolderViewItem *item = folder->getItemByID(item_id);
- can_delete &= item->getListener()->isItemRemovable();
+ const LLFolderViewEventListener *listener = item->getListener();
+ llassert(listener);
+ if (!listener) return FALSE;
+ can_delete &= listener->isItemRemovable();
+ can_delete &= !listener->isItemInTrash();
}
return can_delete;
}
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 5c5c35141e..e8ae006968 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -117,7 +117,7 @@ public:
virtual BOOL isItemRenameable() const;
virtual BOOL renameItem(const std::string& new_name);
virtual BOOL isItemMovable() const;
- virtual BOOL isItemRemovable();
+ virtual BOOL isItemRemovable() const;
virtual BOOL removeItem();
virtual void removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batch);
virtual void move(LLFolderViewEventListener* parent_listener);
@@ -412,9 +412,9 @@ BOOL LLTaskInvFVBridge::isItemMovable() const
return TRUE;
}
-BOOL LLTaskInvFVBridge::isItemRemovable()
+BOOL LLTaskInvFVBridge::isItemRemovable() const
{
- LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
+ const LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
if(object
&& (object->permModify() || object->permYouOwner()))
{
@@ -710,7 +710,7 @@ public:
virtual BOOL isItemRenameable() const;
// virtual BOOL isItemCopyable() const { return FALSE; }
virtual BOOL renameItem(const std::string& new_name);
- virtual BOOL isItemRemovable();
+ virtual BOOL isItemRemovable() const;
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
virtual BOOL hasChildren() const;
virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const;
@@ -742,7 +742,7 @@ BOOL LLTaskCategoryBridge::renameItem(const std::string& new_name)
return FALSE;
}
-BOOL LLTaskCategoryBridge::isItemRemovable()
+BOOL LLTaskCategoryBridge::isItemRemovable() const
{
return FALSE;
}
diff --git a/indra/newview/llplacesinventorybridge.cpp b/indra/newview/llplacesinventorybridge.cpp
index 83443687c9..4fe69f295c 100644
--- a/indra/newview/llplacesinventorybridge.cpp
+++ b/indra/newview/llplacesinventorybridge.cpp
@@ -66,7 +66,7 @@ void LLPlacesLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
std::vector<std::string> items;
std::vector<std::string> disabled_items;
- if(isInTrash())
+ if(isItemInTrash())
{
items.push_back(std::string("Purge Item"));
if (!isItemRemovable())