phoenix-firestorm/indra/newview/llfloaterbulkupload.cpp

137 lines
4.1 KiB
C++

/**
* @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<LLTextBox>("number_of_items", true);
mCostLabel = getChild<LLTextBox>("upload_cost", true);
mCheckboxPanel = getChild<LLPanel>("checkbox_panel", true);
mLinkPanel = getChild<LLPanel>("link_panel", true);
mWarningPanel = getChild<LLPanel>("warning_panel", true);
mCheckboxUpload2K = getChild<LLUICtrl>("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();
}