diff options
Diffstat (limited to 'indra/newview/llpreviewnotecard.cpp')
-rwxr-xr-x[-rw-r--r--] | indra/newview/llpreviewnotecard.cpp | 105 |
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 |