202 lines
5.7 KiB
C++
Executable File
202 lines
5.7 KiB
C++
Executable File
/**
|
|
* @file llpanelsnapshot.cpp
|
|
* @brief Snapshot panel base class
|
|
*
|
|
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
|
|
* Second Life Viewer Source Code
|
|
* Copyright (C) 2011, 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 "llpanelsnapshot.h"
|
|
|
|
// libs
|
|
#include "llcombobox.h"
|
|
#include "llsliderctrl.h"
|
|
#include "llspinctrl.h"
|
|
#include "lltrans.h"
|
|
|
|
// newview
|
|
#include "llsidetraypanelcontainer.h"
|
|
#include "llviewercontrol.h" // gSavedSettings
|
|
|
|
// virtual
|
|
BOOL LLPanelSnapshot::postBuild()
|
|
{
|
|
getChild<LLUICtrl>(getImageSizeComboName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onResolutionComboCommit, this, _1));
|
|
getChild<LLUICtrl>(getWidthSpinnerName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onCustomResolutionCommit, this));
|
|
getChild<LLUICtrl>(getHeightSpinnerName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onCustomResolutionCommit, this));
|
|
getChild<LLUICtrl>(getAspectRatioCBName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onKeepAspectRatioCommit, this, _1));
|
|
|
|
updateControls(LLSD());
|
|
return TRUE;
|
|
}
|
|
|
|
// virtual
|
|
void LLPanelSnapshot::onOpen(const LLSD& key)
|
|
{
|
|
S32 old_format = gSavedSettings.getS32("SnapshotFormat");
|
|
S32 new_format = (S32) getImageFormat();
|
|
|
|
gSavedSettings.setS32("SnapshotFormat", new_format);
|
|
setCtrlsEnabled(true);
|
|
|
|
// Switching panels will likely change image format.
|
|
// Not updating preview right away may lead to errors,
|
|
// e.g. attempt to send a large BMP image by email.
|
|
if (old_format != new_format)
|
|
{
|
|
LLFloaterSnapshot::getInstance()->notify(LLSD().with("image-format-change", true));
|
|
}
|
|
|
|
updateCustomResControls();
|
|
}
|
|
|
|
LLFloaterSnapshot::ESnapshotFormat LLPanelSnapshot::getImageFormat() const
|
|
{
|
|
return LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG;
|
|
}
|
|
|
|
void LLPanelSnapshot::enableControls(BOOL enable)
|
|
{
|
|
setCtrlsEnabled(enable);
|
|
if (enable)
|
|
{
|
|
// Make sure only relevant controls are enabled/shown.
|
|
updateCustomResControls();
|
|
}
|
|
}
|
|
|
|
LLSpinCtrl* LLPanelSnapshot::getWidthSpinner()
|
|
{
|
|
return getChild<LLSpinCtrl>(getWidthSpinnerName());
|
|
}
|
|
|
|
LLSpinCtrl* LLPanelSnapshot::getHeightSpinner()
|
|
{
|
|
return getChild<LLSpinCtrl>(getHeightSpinnerName());
|
|
}
|
|
|
|
S32 LLPanelSnapshot::getTypedPreviewWidth() const
|
|
{
|
|
return getChild<LLUICtrl>(getWidthSpinnerName())->getValue().asInteger();
|
|
}
|
|
|
|
S32 LLPanelSnapshot::getTypedPreviewHeight() const
|
|
{
|
|
return getChild<LLUICtrl>(getHeightSpinnerName())->getValue().asInteger();
|
|
}
|
|
|
|
void LLPanelSnapshot::enableAspectRatioCheckbox(BOOL enable)
|
|
{
|
|
getChild<LLUICtrl>(getAspectRatioCBName())->setEnabled(enable);
|
|
}
|
|
|
|
LLSideTrayPanelContainer* LLPanelSnapshot::getParentContainer()
|
|
{
|
|
LLSideTrayPanelContainer* parent = dynamic_cast<LLSideTrayPanelContainer*>(getParent());
|
|
if (!parent)
|
|
{
|
|
llwarns << "Cannot find panel container" << llendl;
|
|
return NULL;
|
|
}
|
|
|
|
return parent;
|
|
}
|
|
|
|
// virtual
|
|
void LLPanelSnapshot::updateCustomResControls()
|
|
{
|
|
// Only show width/height spinners and the aspect ratio checkbox
|
|
// when a custom resolution is chosen.
|
|
LLComboBox* combo = getChild<LLComboBox>(getImageSizeComboName());
|
|
const bool show = combo->getFirstSelectedIndex() == (combo->getItemCount() - 1);
|
|
getChild<LLUICtrl>(getImageSizePanelName())->setVisible(show);
|
|
}
|
|
|
|
void LLPanelSnapshot::updateImageQualityLevel()
|
|
{
|
|
LLSliderCtrl* quality_slider = getChild<LLSliderCtrl>("image_quality_slider");
|
|
S32 quality_val = llfloor((F32) quality_slider->getValue().asReal());
|
|
|
|
std::string quality_lvl;
|
|
|
|
if (quality_val < 20)
|
|
{
|
|
quality_lvl = LLTrans::getString("snapshot_quality_very_low");
|
|
}
|
|
else if (quality_val < 40)
|
|
{
|
|
quality_lvl = LLTrans::getString("snapshot_quality_low");
|
|
}
|
|
else if (quality_val < 60)
|
|
{
|
|
quality_lvl = LLTrans::getString("snapshot_quality_medium");
|
|
}
|
|
else if (quality_val < 80)
|
|
{
|
|
quality_lvl = LLTrans::getString("snapshot_quality_high");
|
|
}
|
|
else
|
|
{
|
|
quality_lvl = LLTrans::getString("snapshot_quality_very_high");
|
|
}
|
|
|
|
getChild<LLTextBox>("image_quality_level")->setTextArg("[QLVL]", quality_lvl);
|
|
}
|
|
|
|
void LLPanelSnapshot::goBack()
|
|
{
|
|
LLSideTrayPanelContainer* parent = getParentContainer();
|
|
if (parent)
|
|
{
|
|
parent->openPreviousPanel();
|
|
parent->getCurrentPanel()->onOpen(LLSD());
|
|
}
|
|
}
|
|
|
|
void LLPanelSnapshot::cancel()
|
|
{
|
|
goBack();
|
|
LLFloaterSnapshot::getInstance()->notify(LLSD().with("set-ready", true));
|
|
}
|
|
|
|
void LLPanelSnapshot::onCustomResolutionCommit()
|
|
{
|
|
LLSD info;
|
|
info["w"] = getChild<LLUICtrl>(getWidthSpinnerName())->getValue().asInteger();
|
|
info["h"] = getChild<LLUICtrl>(getHeightSpinnerName())->getValue().asInteger();
|
|
LLFloaterSnapshot::getInstance()->notify(LLSD().with("custom-res-change", info));
|
|
}
|
|
|
|
void LLPanelSnapshot::onResolutionComboCommit(LLUICtrl* ctrl)
|
|
{
|
|
updateCustomResControls();
|
|
|
|
LLSD info;
|
|
info["combo-res-change"]["control-name"] = ctrl->getName();
|
|
LLFloaterSnapshot::getInstance()->notify(info);
|
|
}
|
|
|
|
void LLPanelSnapshot::onKeepAspectRatioCommit(LLUICtrl* ctrl)
|
|
{
|
|
LLFloaterSnapshot::getInstance()->notify(LLSD().with("keep-aspect-change", ctrl->getValue().asBoolean()));
|
|
}
|