summaryrefslogtreecommitdiff
path: root/indra/newview/llpreviewnotecard.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llpreviewnotecard.cpp')
-rwxr-xr-x[-rw-r--r--]indra/newview/llpreviewnotecard.cpp105
1 files changed, 74 insertions, 31 deletions
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index 3a9360fd23..1308d1e9a7 100644..100755
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -185,7 +185,7 @@ void LLPreviewNotecard::refreshFromInventory(const LLUUID& new_item_id)
mItemUUID = new_item_id;
setKey(LLSD(new_item_id));
}
- lldebugs << "LLPreviewNotecard::refreshFromInventory()" << llendl;
+ LL_DEBUGS() << "LLPreviewNotecard::refreshFromInventory()" << LL_ENDL;
loadAsset();
}
@@ -215,9 +215,12 @@ void LLPreviewNotecard::loadAsset()
if(item)
{
- if (gAgent.allowOperation(PERM_COPY, item->getPermissions(),
- GP_OBJECT_MANIPULATE)
- || gAgent.isGodlike())
+ LLPermissions perm(item->getPermissions());
+ BOOL is_owner = gAgent.allowOperation(PERM_OWNER, perm, GP_OBJECT_MANIPULATE);
+ BOOL allow_copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
+ BOOL allow_modify = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE);
+
+ if (allow_copy || gAgent.isGodlike())
{
mAssetID = item->getAssetUUID();
if(mAssetID.isNull())
@@ -240,7 +243,7 @@ void LLPreviewNotecard::loadAsset()
else
{
// The object that we're trying to look at disappeared, bail.
- llwarns << "Can't find object " << mObjectUUID << " associated with notecard." << llendl;
+ LL_WARNS() << "Can't find object " << mObjectUUID << " associated with notecard." << LL_ENDL;
mAssetID.setNull();
editor->setText(getString("no_object"));
editor->makePristine();
@@ -271,12 +274,17 @@ void LLPreviewNotecard::loadAsset()
editor->setEnabled(FALSE);
mAssetStatus = PREVIEW_ASSET_LOADED;
}
- if(!gAgent.allowOperation(PERM_MODIFY, item->getPermissions(),
- GP_OBJECT_MANIPULATE))
+
+ if(!allow_modify)
{
editor->setEnabled(FALSE);
getChildView("lock")->setVisible( TRUE);
}
+
+ if(allow_modify || is_owner)
+ {
+ getChildView("Delete")->setEnabled(TRUE);
+ }
}
else
{
@@ -295,7 +303,7 @@ void LLPreviewNotecard::onLoadComplete(LLVFS *vfs,
LLAssetType::EType type,
void* user_data, S32 status, LLExtStat ext_status)
{
- llinfos << "LLPreviewNotecard::onLoadComplete()" << llendl;
+ LL_INFOS() << "LLPreviewNotecard::onLoadComplete()" << LL_ENDL;
LLUUID* item_id = (LLUUID*)user_data;
LLPreviewNotecard* preview = LLFloaterReg::findTypedInstance<LLPreviewNotecard>("preview_notecard", LLSD(*item_id));
@@ -320,7 +328,7 @@ void LLPreviewNotecard::onLoadComplete(LLVFS *vfs,
{
if( !previewEditor->importBuffer( &buffer[0], file_length+1 ) )
{
- llwarns << "Problem importing notecard" << llendl;
+ LL_WARNS() << "Problem importing notecard" << LL_ENDL;
}
}
else
@@ -339,8 +347,6 @@ void LLPreviewNotecard::onLoadComplete(LLVFS *vfs,
}
else
{
- LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
-
if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
LL_ERR_FILE_EMPTY == status)
{
@@ -355,7 +361,7 @@ void LLPreviewNotecard::onLoadComplete(LLVFS *vfs,
LLNotificationsUtil::add("UnableToLoadNotecard");
}
- llwarns << "Problem loading notecard: " << status << llendl;
+ LL_WARNS() << "Problem loading notecard: " << status << LL_ENDL;
preview->mAssetStatus = PREVIEW_ASSET_ERROR;
}
}
@@ -365,7 +371,7 @@ void LLPreviewNotecard::onLoadComplete(LLVFS *vfs,
// static
void LLPreviewNotecard::onClickSave(void* user_data)
{
- //llinfos << "LLPreviewNotecard::onBtnSave()" << llendl;
+ //LL_INFOS() << "LLPreviewNotecard::onBtnSave()" << LL_ENDL;
LLPreviewNotecard* preview = (LLPreviewNotecard*)user_data;
if(preview)
{
@@ -404,7 +410,7 @@ bool LLPreviewNotecard::saveIfNeeded(LLInventoryItem* copyitem)
if(!editor)
{
- llwarns << "Cannot get handle to the notecard editor." << llendl;
+ LL_WARNS() << "Cannot get handle to the notecard editor." << LL_ENDL;
return false;
}
@@ -437,7 +443,7 @@ bool LLPreviewNotecard::saveIfNeeded(LLInventoryItem* copyitem)
const LLViewerRegion* region = gAgent.getRegion();
if (!region)
{
- llwarns << "Not connected to a region, cannot save notecard." << llendl;
+ LL_WARNS() << "Not connected to a region, cannot save notecard." << LL_ENDL;
return false;
}
std::string agent_url = region->getCapability("UpdateNotecardAgentInventory");
@@ -450,8 +456,8 @@ bool LLPreviewNotecard::saveIfNeeded(LLInventoryItem* copyitem)
setEnabled(FALSE);
LLSD body;
body["item_id"] = mItemUUID;
- llinfos << "Saving notecard " << mItemUUID
- << " into agent inventory via " << agent_url << llendl;
+ LL_INFOS() << "Saving notecard " << mItemUUID
+ << " into agent inventory via " << agent_url << LL_ENDL;
LLHTTPClient::post(agent_url, body,
new LLUpdateAgentInventoryResponder(body, asset_id, LLAssetType::AT_NOTECARD));
}
@@ -463,8 +469,8 @@ bool LLPreviewNotecard::saveIfNeeded(LLInventoryItem* copyitem)
LLSD body;
body["task_id"] = mObjectUUID;
body["item_id"] = mItemUUID;
- llinfos << "Saving notecard " << mItemUUID << " into task "
- << mObjectUUID << " via " << task_url << llendl;
+ LL_INFOS() << "Saving notecard " << mItemUUID << " into task "
+ << mObjectUUID << " via " << task_url << LL_ENDL;
LLHTTPClient::post(task_url, body,
new LLUpdateTaskInventoryResponder(body, asset_id, LLAssetType::AT_NOTECARD));
}
@@ -476,12 +482,17 @@ bool LLPreviewNotecard::saveIfNeeded(LLInventoryItem* copyitem)
&onSaveComplete,
(void*)info,
FALSE);
+ return true;
}
else // !gAssetStorage
{
- llwarns << "Not connected to an asset storage system." << llendl;
+ LL_WARNS() << "Not connected to an asset storage system." << LL_ENDL;
return false;
}
+ if(mCloseAfterSave)
+ {
+ closeFloater();
+ }
}
}
return true;
@@ -489,14 +500,7 @@ bool LLPreviewNotecard::saveIfNeeded(LLInventoryItem* copyitem)
void LLPreviewNotecard::deleteNotecard()
{
- LLViewerInventoryItem* item = gInventory.getItem(mItemUUID);
- if (item != NULL)
- {
- const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- gInventory.changeItemParent(item, trash_id, FALSE);
- }
-
- closeFloater();
+ LLNotificationsUtil::add("DeleteNotecard", LLSD(), LLSD(), boost::bind(&LLPreviewNotecard::handleConfirmDeleteDialog,this, _1, _2));
}
// static
@@ -520,8 +524,8 @@ void LLPreviewNotecard::onSaveComplete(const LLUUID& asset_uuid, void* user_data
}
else
{
- llwarns << "Inventory item for script " << info->mItemUUID
- << " is no longer in agent inventory." << llendl;
+ LL_WARNS() << "Inventory item for script " << info->mItemUUID
+ << " is no longer in agent inventory." << LL_ENDL;
}
}
else
@@ -564,7 +568,7 @@ void LLPreviewNotecard::onSaveComplete(const LLUUID& asset_uuid, void* user_data
}
else
{
- llwarns << "Problem saving notecard: " << status << llendl;
+ LL_WARNS() << "Problem saving notecard: " << status << LL_ENDL;
LLSD args;
args["REASON"] = std::string(LLAssetStorage::getErrorString(status));
LLNotificationsUtil::add("SaveNotecardFailReason", args);
@@ -602,4 +606,43 @@ bool LLPreviewNotecard::handleSaveChangesDialog(const LLSD& notification, const
return false;
}
+bool LLPreviewNotecard::handleConfirmDeleteDialog(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (option != 0)
+ {
+ // canceled
+ return false;
+ }
+
+ if (mObjectUUID.isNull())
+ {
+ // move item from agent's inventory into trash
+ LLViewerInventoryItem* item = gInventory.getItem(mItemUUID);
+ if (item != NULL)
+ {
+ const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
+ gInventory.changeItemParent(item, trash_id, FALSE);
+ }
+ }
+ else
+ {
+ // delete item from inventory of in-world object
+ LLViewerObject* object = gObjectList.findObject(mObjectUUID);
+ if(object)
+ {
+ LLViewerInventoryItem* item = dynamic_cast<LLViewerInventoryItem*>(object->getInventoryObject(mItemUUID));
+ if (item != NULL)
+ {
+ object->removeInventory(mItemUUID);
+ }
+ }
+ }
+
+ // close floater, ignore unsaved changes
+ mForceClose = TRUE;
+ closeFloater();
+ return false;
+}
+
// EOF