summaryrefslogtreecommitdiff
path: root/indra/newview/llfloaterfixedenvironment.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llfloaterfixedenvironment.cpp')
-rw-r--r--indra/newview/llfloaterfixedenvironment.cpp357
1 files changed, 11 insertions, 346 deletions
diff --git a/indra/newview/llfloaterfixedenvironment.cpp b/indra/newview/llfloaterfixedenvironment.cpp
index cd8e0a48e7..41bbd5e8f9 100644
--- a/indra/newview/llfloaterfixedenvironment.cpp
+++ b/indra/newview/llfloaterfixedenvironment.cpp
@@ -81,44 +81,11 @@ namespace
const std::string XML_FLYOUTMENU_FILE("menu_save_settings.xml");
}
-//=========================================================================
-const std::string LLFloaterFixedEnvironment::KEY_INVENTORY_ID("inventory_id");
-
-
-//=========================================================================
-
-class LLFixedSettingCopiedCallback : public LLInventoryCallback
-{
-public:
- LLFixedSettingCopiedCallback(LLHandle<LLFloater> handle) : mHandle(handle) {}
-
- virtual void fire(const LLUUID& inv_item_id)
- {
- if (!mHandle.isDead())
- {
- LLViewerInventoryItem* item = gInventory.getItem(inv_item_id);
- if (item)
- {
- LLFloaterFixedEnvironment* floater = (LLFloaterFixedEnvironment*)mHandle.get();
- floater->onInventoryCreated(item->getAssetUUID(), inv_item_id);
- }
- }
- }
-
-private:
- LLHandle<LLFloater> mHandle;
-};
//=========================================================================
LLFloaterFixedEnvironment::LLFloaterFixedEnvironment(const LLSD &key) :
- LLFloater(key),
- mFlyoutControl(nullptr),
- mInventoryId(),
- mInventoryItem(nullptr),
- mIsDirty(false),
- mCanCopy(false),
- mCanMod(false),
- mCanTrans(false)
+ LLFloaterEditEnvironmentBase(key),
+ mFlyoutControl(nullptr)
{
}
@@ -176,19 +143,6 @@ void LLFloaterFixedEnvironment::onClose(bool app_quitting)
syncronizeTabs();
}
-void LLFloaterFixedEnvironment::onFocusReceived()
-{
- if (isInVisibleChain())
- {
- updateEditEnvironment();
- LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_EDIT, LLEnvironment::TRANSITION_FAST);
- }
-}
-
-void LLFloaterFixedEnvironment::onFocusLost()
-{
-}
-
void LLFloaterFixedEnvironment::refresh()
{
if (!mSettings)
@@ -220,6 +174,15 @@ void LLFloaterFixedEnvironment::refresh()
}
}
+void LLFloaterFixedEnvironment::setEditSettingsAndUpdate(const LLSettingsBase::ptr_t &settings)
+{
+ mSettings = settings; // shouldn't this do buildDeepCloneAndUncompress() ?
+ updateEditEnvironment();
+ syncronizeTabs();
+ refresh();
+ LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_FAST);
+}
+
void LLFloaterFixedEnvironment::syncronizeTabs()
{
S32 count = mTab->getTabCount();
@@ -250,131 +213,9 @@ LLFloaterSettingsPicker * LLFloaterFixedEnvironment::getSettingsPicker()
return picker;
}
-void LLFloaterFixedEnvironment::loadInventoryItem(const LLUUID &inventoryId, bool can_trans)
-{
- if (inventoryId.isNull())
- {
- mInventoryItem = nullptr;
- mInventoryId.setNull();
- mCanMod = true;
- mCanCopy = true;
- mCanTrans = true;
- return;
- }
-
- mInventoryId = inventoryId;
- LL_INFOS("SETTINGS") << "Setting edit inventory item to " << mInventoryId << "." << LL_ENDL;
- mInventoryItem = gInventory.getItem(mInventoryId);
-
- if (!mInventoryItem)
- {
- LL_WARNS("SETTINGS") << "Could not find inventory item with Id = " << mInventoryId << LL_ENDL;
- LLNotificationsUtil::add("CantFindInvItem");
- closeFloater();
-
- mInventoryId.setNull();
- mInventoryItem = nullptr;
- return;
- }
-
- if (mInventoryItem->getAssetUUID().isNull())
- {
- LL_WARNS("ENVIRONMENT") << "Asset ID in inventory item is NULL (" << mInventoryId << ")" << LL_ENDL;
- LLNotificationsUtil::add("UnableEditItem");
- closeFloater();
-
- mInventoryId.setNull();
- mInventoryItem = nullptr;
- return;
- }
-
- mCanCopy = mInventoryItem->getPermissions().allowCopyBy(gAgent.getID());
- mCanMod = mInventoryItem->getPermissions().allowModifyBy(gAgent.getID());
- mCanTrans = can_trans && mInventoryItem->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID());
-
- LLSettingsVOBase::getSettingsAsset(mInventoryItem->getAssetUUID(),
- [this](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onAssetLoaded(asset_id, settings, status); });
-}
-
-
-void LLFloaterFixedEnvironment::checkAndConfirmSettingsLoss(LLFloaterFixedEnvironment::on_confirm_fn cb)
-{
- if (isDirty())
- {
- LLSD args(LLSDMap("TYPE", mSettings->getSettingsType())
- ("NAME", mSettings->getName()));
-
- // create and show confirmation textbox
- LLNotificationsUtil::add("SettingsConfirmLoss", args, LLSD(),
- [cb](const LLSD&notif, const LLSD&resp)
- {
- S32 opt = LLNotificationsUtil::getSelectedOption(notif, resp);
- if (opt == 0)
- cb();
- });
- }
- else if (cb)
- {
- cb();
- }
-}
-
void LLFloaterFixedEnvironment::onPickerCommitSetting(LLUUID item_id)
{
loadInventoryItem(item_id);
-// mInventoryId = item_id;
-// mInventoryItem = gInventory.getItem(mInventoryId);
-//
-// mCanCopy = mInventoryItem->getPermissions().allowCopyBy(gAgent.getID());
-// mCanMod = mInventoryItem->getPermissions().allowModifyBy(gAgent.getID());
-// mCanTrans = mInventoryItem->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID());
-//
-// LLSettingsVOBase::getSettingsAsset(mInventoryItem->getAssetUUID(),
-// [this](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onAssetLoaded(asset_id, settings, status); });
-}
-
-void LLFloaterFixedEnvironment::onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status)
-{
- if (mInventoryItem && mInventoryItem->getAssetUUID() != asset_id)
- {
- LL_WARNS("ENVIRONMENT") << "Discarding obsolete asset callback" << LL_ENDL;
- return;
- }
-
- clearDirtyFlag();
-
- if (!settings || status)
- {
- LLSD args;
- args["NAME"] = (mInventoryItem) ? mInventoryItem->getName() : asset_id.asString();
- LLNotificationsUtil::add("FailedToFindSettings", args);
- closeFloater();
- return;
- }
-
- mSettings = settings;
- if (mInventoryItem)
- mSettings->setName(mInventoryItem->getName());
-
- if (mCanCopy)
- settings->clearFlag(LLSettingsBase::FLAG_NOCOPY);
- else
- settings->setFlag(LLSettingsBase::FLAG_NOCOPY);
-
- if (mCanMod)
- settings->clearFlag(LLSettingsBase::FLAG_NOMOD);
- else
- settings->setFlag(LLSettingsBase::FLAG_NOMOD);
-
- if (mCanTrans)
- settings->clearFlag(LLSettingsBase::FLAG_NOTRANS);
- else
- settings->setFlag(LLSettingsBase::FLAG_NOTRANS);
-
- updateEditEnvironment();
- syncronizeTabs();
- refresh();
- LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_FAST);
}
void LLFloaterFixedEnvironment::onNameChanged(const std::string &name)
@@ -473,50 +314,6 @@ void LLFloaterFixedEnvironment::onButtonApply(LLUICtrl *ctrl, const LLSD &data)
}
}
-void LLFloaterFixedEnvironment::onSaveAsCommit(const LLSD& notification, const LLSD& response, const LLSettingsBase::ptr_t &settings)
-{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- if (0 == option)
- {
- std::string settings_name = response["message"].asString();
-
- LLInventoryObject::correctInventoryName(settings_name);
- if (settings_name.empty())
- {
- // Ideally notification should disable 'OK' button if name won't fit our requirements,
- // for now either display notification, or use some default name
- settings_name = "Unnamed";
- }
-
- if (mCanMod)
- {
- doApplyCreateNewInventory(settings_name, settings);
- }
- else if (mInventoryItem)
- {
- const LLUUID &marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
- LLUUID parent_id = mInventoryItem->getParentUUID();
- if (marketplacelistings_id == parent_id)
- {
- parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_SETTINGS);
- }
-
- LLPointer<LLInventoryCallback> cb = new LLFixedSettingCopiedCallback(getHandle());
- copy_inventory_item(
- gAgent.getID(),
- mInventoryItem->getPermissions().getOwner(),
- mInventoryItem->getUUID(),
- parent_id,
- settings_name,
- cb);
- }
- else
- {
- LL_WARNS() << "Failed to copy fixed env setting" << LL_ENDL;
- }
- }
-}
-
void LLFloaterFixedEnvironment::onClickCloseBtn(bool app_quitting)
{
if (!app_quitting)
@@ -530,116 +327,6 @@ void LLFloaterFixedEnvironment::onButtonLoad()
checkAndConfirmSettingsLoss([this](){ doSelectFromInventory(); });
}
-void LLFloaterFixedEnvironment::doApplyCreateNewInventory(std::string settings_name, const LLSettingsBase::ptr_t &settings)
-{
- if (mInventoryItem)
- {
- LLUUID parent_id = mInventoryItem->getParentUUID();
- U32 next_owner_perm = mInventoryItem->getPermissions().getMaskNextOwner();
- LLSettingsVOBase::createInventoryItem(settings, next_owner_perm, parent_id, settings_name,
- [this](LLUUID asset_id, LLUUID inventory_id, LLUUID, LLSD results) { onInventoryCreated(asset_id, inventory_id, results); });
- }
- else
- {
- LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_SETTINGS);
- // This method knows what sort of settings object to create.
- LLSettingsVOBase::createInventoryItem(settings, parent_id, settings_name,
- [this](LLUUID asset_id, LLUUID inventory_id, LLUUID, LLSD results) { onInventoryCreated(asset_id, inventory_id, results); });
- }
-}
-
-void LLFloaterFixedEnvironment::doApplyUpdateInventory(const LLSettingsBase::ptr_t &settings)
-{
- LL_DEBUGS("ENVEDIT") << "Update inventory for " << mInventoryId << LL_ENDL;
- if (mInventoryId.isNull())
- {
- LLSettingsVOBase::createInventoryItem(settings, gInventory.findCategoryUUIDForType(LLFolderType::FT_SETTINGS), std::string(),
- [this](LLUUID asset_id, LLUUID inventory_id, LLUUID, LLSD results) { onInventoryCreated(asset_id, inventory_id, results); });
- }
- else
- {
- LLSettingsVOBase::updateInventoryItem(settings, mInventoryId,
- [this](LLUUID asset_id, LLUUID inventory_id, LLUUID, LLSD results) { onInventoryUpdated(asset_id, inventory_id, results); });
- }
-}
-
-void LLFloaterFixedEnvironment::doApplyEnvironment(const std::string &where, const LLSettingsBase::ptr_t &settings)
-{
- U32 flags(0);
-
- if (mInventoryItem)
- {
- if (!mInventoryItem->getPermissions().allowOperationBy(PERM_MODIFY, gAgent.getID()))
- flags |= LLSettingsBase::FLAG_NOMOD;
- if (!mInventoryItem->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID()))
- flags |= LLSettingsBase::FLAG_NOTRANS;
- }
-
- flags |= settings->getFlags();
- settings->setFlag(flags);
-
- if (where == ACTION_APPLY_LOCAL)
- {
- settings->setName("Local"); // To distinguish and make sure there is a name. Safe, because this is a copy.
- LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_LOCAL, settings);
- }
- else if (where == ACTION_APPLY_PARCEL)
- {
- LLParcel *parcel(LLViewerParcelMgr::instance().getAgentOrSelectedParcel());
-
- if ((!parcel) || (parcel->getLocalID() == INVALID_PARCEL_ID))
- {
- LL_WARNS("ENVIRONMENT") << "Can not identify parcel. Not applying." << LL_ENDL;
- LLNotificationsUtil::add("WLParcelApplyFail");
- return;
- }
-
- if (mInventoryItem && !isDirty())
- {
- LLEnvironment::instance().updateParcel(parcel->getLocalID(), mInventoryItem->getAssetUUID(), mInventoryItem->getName(), LLEnvironment::NO_TRACK, -1, -1, flags);
- }
- else if (settings->getSettingsType() == "sky")
- {
- LLEnvironment::instance().updateParcel(parcel->getLocalID(), std::static_pointer_cast<LLSettingsSky>(settings), -1, -1);
- }
- else if (settings->getSettingsType() == "water")
- {
- LLEnvironment::instance().updateParcel(parcel->getLocalID(), std::static_pointer_cast<LLSettingsWater>(settings), -1, -1);
- }
- }
- else if (where == ACTION_APPLY_REGION)
- {
- if (mInventoryItem && !isDirty())
- {
- LLEnvironment::instance().updateRegion(mInventoryItem->getAssetUUID(), mInventoryItem->getName(), LLEnvironment::NO_TRACK, -1, -1, flags);
- }
- else if (settings->getSettingsType() == "sky")
- {
- LLEnvironment::instance().updateRegion(std::static_pointer_cast<LLSettingsSky>(settings), -1, -1);
- }
- else if (settings->getSettingsType() == "water")
- {
- LLEnvironment::instance().updateRegion(std::static_pointer_cast<LLSettingsWater>(settings), -1, -1);
- }
- }
- else
- {
- LL_WARNS("ENVIRONMENT") << "Unknown apply '" << where << "'" << LL_ENDL;
- return;
- }
-
-}
-
-void LLFloaterFixedEnvironment::doCloseInventoryFloater(bool quitting)
-{
- LLFloater* floaterp = mInventoryFloater.get();
-
- if (floaterp)
- {
- floaterp->closeFloater(quitting);
- }
-}
-
void LLFloaterFixedEnvironment::onInventoryCreated(LLUUID asset_id, LLUUID inventory_id, LLSD results)
{
LL_WARNS("ENVIRONMENT") << "Inventory item " << inventory_id << " has been created with asset " << asset_id << " results are:" << results << LL_ENDL;
@@ -709,28 +396,6 @@ void LLFloaterFixedEnvironment::doSelectFromInventory()
picker->setFocus(TRUE);
}
-void LLFloaterFixedEnvironment::onPanelDirtyFlagChanged(bool value)
-{
- if (value)
- setDirtyFlag();
-}
-
-//-------------------------------------------------------------------------
-bool LLFloaterFixedEnvironment::canUseInventory() const
-{
- return LLEnvironment::instance().isInventoryEnabled();
-}
-
-bool LLFloaterFixedEnvironment::canApplyRegion() const
-{
- return gAgent.canManageEstate();
-}
-
-bool LLFloaterFixedEnvironment::canApplyParcel() const
-{
- return LLEnvironment::instance().canAgentUpdateParcelEnvironment();
-}
-
//=========================================================================
LLFloaterFixedEnvironmentWater::LLFloaterFixedEnvironmentWater(const LLSD &key):
LLFloaterFixedEnvironment(key)