/indra/newview/llpanelsnapshot.cpp
C++ | 201 lines | 136 code | 29 blank | 36 comment | 13 complexity | 1cc7b108ce025923933a8083310a3a6d MD5 | raw file
Possible License(s): LGPL-2.1
- /**
- * @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()));
- }