/** * @file llfloaterbulkupload.cpp * @author Andrey Kleshchev * @brief LLFloaterBulkUpload class implementation * * $LicenseInfo:firstyear=2024&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2024, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ #include "llviewerprecompiledheaders.h" #include "llfloaterbulkupload.h" #include "lltextbox.h" #include "llviewercontrol.h" #include "llviewermenufile.h" constexpr S32 MAX_HEIGH = 211; LLFloaterBulkUpload::LLFloaterBulkUpload(const LLSD& key) : LLModalDialog(key, true) { mUploadCost = key["upload_cost"].asInteger(); mUploadCount = key["upload_count"].asInteger(); mHas2kTextures = key["has_2k_textures"].asBoolean(); if (key["files"].isArray()) { const LLSD& files = key["files"]; for (LLSD::array_const_iterator it = files.beginArray(); it != files.endArray(); ++it) { mFiles.push_back(it->asString()); } } } LLFloaterBulkUpload::~LLFloaterBulkUpload() { } bool LLFloaterBulkUpload::postBuild() { childSetAction("upload_btn", [this](void*) { onClickUpload(); }, this); childSetAction("cancel_btn", [this](void*) { onClickCancel(); }, this); mCountLabel = getChild("number_of_items", true); mCostLabel = getChild("upload_cost", true); mCheckboxPanel = getChild("checkbox_panel", true); mLinkPanel = getChild("link_panel", true); mWarningPanel = getChild("warning_panel", true); mCheckboxUpload2K = getChild("upload_2k"); mCheckboxUpload2K->setCommitCallback([this](LLUICtrl* ctrl, const LLSD& data) { onUpload2KCheckBox(); }); mAllow2kTextures = gSavedSettings.getBOOL("BulkUpload2KTextures"); mCheckboxUpload2K->setValue(!mAllow2kTextures); if (!mAllow2kTextures && mHas2kTextures) { // provided cost is for 2K textures, recalculate cost S32 bvh_count; S32 textures_2k_count; get_bulk_upload_expected_cost(mFiles, mAllow2kTextures, mUploadCost, mUploadCount, bvh_count, textures_2k_count); update(); } update(); return LLModalDialog::postBuild(); } void LLFloaterBulkUpload::update() { mCountLabel->setTextArg("[COUNT]", llformat("%d", mUploadCount)); mCostLabel->setTextArg("[COST]", llformat("%d", mUploadCost)); mCheckboxPanel->setVisible(mHas2kTextures); mLinkPanel->setVisible(mHas2kTextures); mWarningPanel->setVisible(mHas2kTextures); S32 new_height = MAX_HEIGH; if (!mHas2kTextures) { new_height -= mCheckboxPanel->getRect().getHeight(); new_height -= mLinkPanel->getRect().getHeight(); new_height -= mWarningPanel->getRect().getHeight(); } reshape(getRect().getWidth(), new_height, false); } void LLFloaterBulkUpload::onUpload2KCheckBox() { mAllow2kTextures = !mCheckboxUpload2K->getValue().asBoolean(); gSavedSettings.setBOOL("BulkUpload2KTextures", mAllow2kTextures); S32 bvh_count; S32 textures_2k_count; get_bulk_upload_expected_cost(mFiles, mAllow2kTextures, mUploadCost, mUploadCount, bvh_count, textures_2k_count); // keep old value of mHas2kTextures to show checkbox update(); } void LLFloaterBulkUpload::onClickUpload() { do_bulk_upload(mFiles, mAllow2kTextures); closeFloater(); } void LLFloaterBulkUpload::onClickCancel() { closeFloater(); }