Satisfy Issue 852: Implement way to stop\start single non-fullperm script in modiable objects

This commit is contained in:
Lirusaito
2013-07-19 08:45:30 -04:00
parent 863c35710f
commit 7f57dd24d8
2 changed files with 41 additions and 0 deletions

View File

@@ -671,6 +671,21 @@ BOOL LLTaskInvFVBridge::dragOrDrop(MASK mask, BOOL drop,
// llwarns << "LLTaskInvFVBridge::dropped() - not implemented" << llendl;
//}
void set_script_running(bool running, const LLInventoryItem* item, const LLViewerObject* obj)
{
if (!item || !obj) return;
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_SetScriptRunning);
msg->nextBlockFast(_PREHASH_AgentData);
msg->addUUIDFast(_PREHASH_AgentID, gAgentID);
msg->addUUIDFast(_PREHASH_SessionID, gAgentSessionID);
msg->nextBlockFast(_PREHASH_Script);
msg->addUUIDFast(_PREHASH_ObjectID, obj->getID());
msg->addUUIDFast(_PREHASH_ItemID, item->getUUID());
msg->addBOOLFast(_PREHASH_Running, running);
msg->sendReliable(obj->getRegion()->getHost());
}
// virtual
void LLTaskInvFVBridge::performAction(LLInventoryModel* model, std::string action)
{
@@ -704,6 +719,14 @@ void LLTaskInvFVBridge::performAction(LLInventoryModel* model, std::string actio
{
showProperties();
}
else if (action == "start_script")
{
set_script_running(true, findItem(), gObjectList.findObject(mPanel->getTaskUUID()));
}
else if (action == "stop_script")
{
set_script_running(false, findItem(), gObjectList.findObject(mPanel->getTaskUUID()));
}
}
void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
@@ -752,6 +775,18 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
else if (canOpenItem())
{
if (LLAssetType::AT_LSL_TEXT == item->getType())
{
items.push_back(std::string("Task Set Running"));
items.push_back(std::string("Task Set Not Running"));
const LLViewerObject* obj = gObjectList.findObject(mPanel->getTaskUUID());
if (!obj || !(obj->permModify() || obj->permYouOwner()))
{
disabled_items.push_back(std::string("Task Set Running"));
disabled_items.push_back(std::string("Task Set Not Running"));
}
}
items.push_back(std::string("Task Open"));
if (!isItemCopyable())
{