summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llfloatersnapshot.cpp518
-rw-r--r--indra/newview/llfloatersnapshot.h14
-rw-r--r--indra/newview/skins/default/xui/en/floater_snapshot.xml488
3 files changed, 665 insertions, 355 deletions
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 8fb1b40b26..f3baa482a0 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -39,32 +39,28 @@
// Viewer includes
#include "llagent.h"
#include "llagentcamera.h"
-#include "llagentui.h"
-#include "llbottomtray.h"
-#include "llbutton.h"
#include "llcallbacklist.h"
-#include "llcheckboxctrl.h"
-#include "llcombobox.h"
#include "llcriticaldamp.h"
-#include "lleconomy.h"
-#include "llfloaterpostcard.h"
+#include "llui.h"
#include "llfocusmgr.h"
-#include "lllandmarkactions.h"
-#include "llradiogroup.h"
+#include "llbutton.h"
+#include "llcombobox.h"
+#include "lleconomy.h"
#include "llsliderctrl.h"
-#include "llslurl.h"
#include "llspinctrl.h"
-#include "lltoolfocus.h"
-#include "lltoolmgr.h"
-#include "llui.h"
-#include "lluictrlfactory.h"
-#include "llviewercamera.h"
#include "llviewercontrol.h"
-#include "llviewermenufile.h" // upload_new_resource()
+#include "lluictrlfactory.h"
#include "llviewerstats.h"
+#include "llviewercamera.h"
#include "llviewerwindow.h"
-#include "llweb.h"
+#include "llviewermenufile.h" // upload_new_resource()
+#include "llfloaterpostcard.h"
+#include "llcheckboxctrl.h"
+#include "llradiogroup.h"
+#include "lltoolfocus.h"
+#include "lltoolmgr.h"
#include "llworld.h"
+#include "llagentui.h"
// Linden library includes
#include "llfontgl.h"
@@ -118,7 +114,6 @@ public:
enum ESnapshotType
{
SNAPSHOT_POSTCARD,
- SNAPSHOT_WEB,
SNAPSHOT_TEXTURE,
SNAPSHOT_LOCAL
};
@@ -169,7 +164,6 @@ public:
LLFloaterPostcard* savePostcard();
void saveTexture();
BOOL saveLocal();
- void saveWeb(std::string url);
BOOL setThumbnailImageSize() ;
void generateThumbnailImage(BOOL force_update = FALSE) ;
@@ -178,9 +172,6 @@ public:
// Returns TRUE when snapshot generated, FALSE otherwise.
static BOOL onIdle( void* snapshot_preview );
-
- // callback for region name resolve
- void regionNameCallback(std::string url, LLSD body, const std::string& name, S32 x, S32 y, S32 z);
private:
LLColor4 mColor;
@@ -302,7 +293,7 @@ F32 LLSnapshotLivePreview::getAspect()
F32 image_aspect_ratio = ((F32)mWidth[mCurImageIndex]) / ((F32)mHeight[mCurImageIndex]);
F32 window_aspect_ratio = ((F32)getRect().getWidth()) / ((F32)getRect().getHeight());
- if (!mKeepAspectRatio)
+ if (!mKeepAspectRatio)//gSavedSettings.getBOOL("KeepAspectForSnapshot"))
{
return image_aspect_ratio;
}
@@ -635,20 +626,20 @@ BOOL LLSnapshotLivePreview::setThumbnailImageSize()
F32 window_aspect_ratio = ((F32)window_width) / ((F32)window_height);
// UI size for thumbnail
- LLFloater* floater = LLFloaterReg::getInstance("snapshot");
- mThumbnailWidth = floater->getChild<LLView>("thumbnail_placeholder")->getRect().getWidth();
- mThumbnailHeight = floater->getChild<LLView>("thumbnail_placeholder")->getRect().getHeight();
+ S32 max_width = LLFloaterSnapshot::getUIWinWidth() - 20;
+ S32 max_height = 90;
-
- if (window_aspect_ratio > (F32)mThumbnailWidth / mThumbnailHeight)
+ if (window_aspect_ratio > (F32)max_width / max_height)
{
// image too wide, shrink to width
- mThumbnailHeight = llround((F32)mThumbnailWidth / window_aspect_ratio);
+ mThumbnailWidth = max_width;
+ mThumbnailHeight = llround((F32)max_width / window_aspect_ratio);
}
else
{
// image too tall, shrink to height
- mThumbnailWidth = llround((F32)mThumbnailHeight * window_aspect_ratio);
+ mThumbnailHeight = max_height;
+ mThumbnailWidth = llround((F32)max_height * window_aspect_ratio);
}
if(mThumbnailWidth > window_width || mThumbnailHeight > window_height)
@@ -834,21 +825,10 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
{
// delete any existing image
previewp->mFormattedImage = NULL;
-
// now create the new one of the appropriate format.
- // note: postcards and web hardcoded to use jpeg always.
- LLFloaterSnapshot::ESnapshotFormat format;
-
- if (previewp->getSnapshotType() == SNAPSHOT_POSTCARD ||
- previewp->getSnapshotType() == SNAPSHOT_WEB)
- {
- format = LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG;
- }
- else
- {
- format = previewp->getSnapshotFormat();
- }
-
+ // note: postcards hardcoded to use jpeg always.
+ LLFloaterSnapshot::ESnapshotFormat format = previewp->getSnapshotType() == SNAPSHOT_POSTCARD
+ ? LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG : previewp->getSnapshotFormat();
switch(format)
{
case LLFloaterSnapshot::SNAPSHOT_FORMAT_PNG:
@@ -1041,66 +1021,6 @@ BOOL LLSnapshotLivePreview::saveLocal()
return success;
}
-
-class LLSendWebResponder : public LLHTTPClient::Responder
-{
-public:
-
- void result(const LLSD& content)
- {
- LLWeb::loadURLExternal(content["response_url"]);
- }
-
-};
-
-void LLSnapshotLivePreview::saveWeb(std::string url)
-{
- if (url.empty())
- {
- llwarns << "No share to web url" << llendl;
- return;
- }
-
- LLImageJPEG* jpg = dynamic_cast<LLImageJPEG*>(mFormattedImage.get());
- if(!jpg)
- {
- llwarns << "Formatted image not a JPEG" << llendl;
- return;
- }
-
-/* figure out if there's a better way to serialize */
- LLSD body;
- std::vector<U8> binary_image;
- U8* data = jpg->getData();
- for (int i = 0; i < jpg->getDataSize(); i++)
- {
- binary_image.push_back(data[i]);
- }
-
- body["image"] = binary_image;
-
- body["description"] = getChild<LLLineEditor>("description")->getText();
-
- std::string name;
- LLAgentUI::buildFullname(name);
-
- body["avatar_name"] = name;
-
- LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(gAgentCamera.getCameraPositionGlobal(),
- boost::bind(&LLSnapshotLivePreview::regionNameCallback, this, url, body, _1, _2, _3, _4));
-
- gViewerWindow->playSnapshotAnimAndSound();
-}
-
-
-void LLSnapshotLivePreview::regionNameCallback(std::string url, LLSD body, const std::string& name, S32 x, S32 y, S32 z)
-{
- body["slurl"] = LLSLURL(name, LLVector3d(x, y, z)).getSLURLString();
-
- LLHTTPClient::post(url, body,
- new LLSendWebResponder());
-}
-
///----------------------------------------------------------------------------
/// Class LLFloaterSnapshot::Impl
///----------------------------------------------------------------------------
@@ -1120,6 +1040,9 @@ public:
mAvatarPauseHandles.clear();
}
+ static void onClickDiscard(void* data);
+ static void onClickKeep(void* data);
+ static void onCommitSave(LLUICtrl* ctrl, void* data);
static void onClickNewSnapshot(void* data);
static void onClickAutoSnap(LLUICtrl *ctrl, void* data);
//static void onClickAdvanceSnap(LLUICtrl *ctrl, void* data);
@@ -1134,10 +1057,9 @@ public:
static void updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update = TRUE);
static void onCommitFreezeFrame(LLUICtrl* ctrl, void* data);
static void onCommitLayerTypes(LLUICtrl* ctrl, void*data);
+ static void onCommitSnapshotType(LLUICtrl* ctrl, void* data);
static void onCommitSnapshotFormat(LLUICtrl* ctrl, void* data);
static void onCommitCustomResolution(LLUICtrl *ctrl, void* data);
- static void onCommitSnapshot(LLFloaterSnapshot* view, LLSnapshotLivePreview::ESnapshotType type);
- static void onToggleAdvanced(LLUICtrl *ctrl, void* data);
static void resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32 width, S32 height) ;
static BOOL checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value);
@@ -1145,8 +1067,10 @@ public:
static void setResolution(LLFloaterSnapshot* floater, const std::string& comboname);
static void updateControls(LLFloaterSnapshot* floater);
static void updateLayout(LLFloaterSnapshot* floater);
+ static void updateResolutionTextEntry(LLFloaterSnapshot* floater);
private:
+ static LLSnapshotLivePreview::ESnapshotType getTypeIndex(LLFloaterSnapshot* floater);
static ESnapshotFormat getFormatIndex(LLFloaterSnapshot* floater);
static LLViewerWindow::ESnapshotType getLayerType(LLFloaterSnapshot* floater);
static void comboSetCustom(LLFloaterSnapshot *floater, const std::string& comboname);
@@ -1169,6 +1093,22 @@ LLSnapshotLivePreview* LLFloaterSnapshot::Impl::getPreviewView(LLFloaterSnapshot
}
// static
+LLSnapshotLivePreview::ESnapshotType LLFloaterSnapshot::Impl::getTypeIndex(LLFloaterSnapshot* floater)
+{
+ LLSnapshotLivePreview::ESnapshotType index = LLSnapshotLivePreview::SNAPSHOT_POSTCARD;
+ LLSD value = floater->childGetValue("snapshot_type_radio");
+ const std::string id = value.asString();
+ if (id == "postcard")
+ index = LLSnapshotLivePreview::SNAPSHOT_POSTCARD;
+ else if (id == "texture")
+ index = LLSnapshotLivePreview::SNAPSHOT_TEXTURE;
+ else if (id == "local")
+ index = LLSnapshotLivePreview::SNAPSHOT_LOCAL;
+ return index;
+}
+
+
+// static
LLFloaterSnapshot::ESnapshotFormat LLFloaterSnapshot::Impl::getFormatIndex(LLFloaterSnapshot* floater)
{
ESnapshotFormat index = SNAPSHOT_FORMAT_PNG;
@@ -1216,12 +1156,20 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
{
LLSnapshotLivePreview* previewp = getPreviewView(floaterp);
+ S32 delta_height = gSavedSettings.getBOOL("AdvanceSnapshot") ? 0 : floaterp->getUIWinHeightShort() - floaterp->getUIWinHeightLong() ;
+
if(!gSavedSettings.getBOOL("AdvanceSnapshot")) //set to original window resolution
{
previewp->mKeepAspectRatio = TRUE;
- floaterp->getChild<LLComboBox>("snapshot_size_combo")->setCurrentByIndex(0);
- gSavedSettings.setS32("SnapshotLastResolution", 0);
+ floaterp->getChild<LLComboBox>("postcard_size_combo")->setCurrentByIndex(0);
+ gSavedSettings.setS32("SnapshotPostcardLastResolution", 0);
+
+ floaterp->getChild<LLComboBox>("texture_size_combo")->setCurrentByIndex(0);
+ gSavedSettings.setS32("SnapshotTextureLastResolution", 0);
+
+ floaterp->getChild<LLComboBox>("local_size_combo")->setCurrentByIndex(0);
+ gSavedSettings.setS32("SnapshotLocalLastResolution", 0);
LLSnapshotLivePreview* previewp = getPreviewView(floaterp);
previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());
@@ -1234,6 +1182,9 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
// stop all mouse events at fullscreen preview layer
floaterp->getParent()->setMouseOpaque(TRUE);
+ // shrink to smaller layout
+ floaterp->reshape(floaterp->getRect().getWidth(), floaterp->getUIWinHeightLong() + delta_height);
+
// can see and interact with fullscreen preview now
if (previewp)
{
@@ -1262,6 +1213,7 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
else // turning off freeze frame mode
{
floaterp->getParent()->setMouseOpaque(FALSE);
+ floaterp->reshape(floaterp->getRect().getWidth(), floaterp->getUIWinHeightLong() + delta_height);
if (previewp)
{
previewp->setVisible(FALSE);
@@ -1290,7 +1242,127 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
// static
void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
{
+ LLRadioGroup* snapshot_type_radio = floater->getChild<LLRadioGroup>("snapshot_type_radio");
+ snapshot_type_radio->setSelectedIndex(gSavedSettings.getS32("LastSnapshotType"));
+ LLSnapshotLivePreview::ESnapshotType shot_type = getTypeIndex(floater);
+ ESnapshotFormat shot_format = (ESnapshotFormat)gSavedSettings.getS32("SnapshotFormat"); //getFormatIndex(floater); LLViewerWindow::ESnapshotType layer_type = getLayerType(floater);
+ LLViewerWindow::ESnapshotType layer_type = getLayerType(floater);
+
+ floater->childSetVisible("postcard_size_combo", FALSE);
+ floater->childSetVisible("texture_size_combo", FALSE);
+ floater->childSetVisible("local_size_combo", FALSE);
+
+ floater->getChild<LLComboBox>("postcard_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotPostcardLastResolution"));
+ floater->getChild<LLComboBox>("texture_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotTextureLastResolution"));
+ floater->getChild<LLComboBox>("local_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotLocalLastResolution"));
+ floater->getChild<LLComboBox>("local_format_combo")->selectNthItem(gSavedSettings.getS32("SnapshotFormat"));
+
+ floater->childSetVisible("upload_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE);
+ floater->childSetVisible("send_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD);
+ floater->childSetVisible("save_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL);
+ floater->childSetEnabled("keep_aspect_check", shot_type != LLSnapshotLivePreview::SNAPSHOT_TEXTURE && !floater->impl.mAspectRatioCheckOff);
+ floater->childSetEnabled("layer_types", shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL);
+
+ BOOL is_advance = gSavedSettings.getBOOL("AdvanceSnapshot");
+ BOOL is_local = shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL;
+ BOOL show_slider =
+ shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD
+ || (is_local && shot_format == LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG);
+
+ floater->childSetVisible("more_btn", !is_advance); // the only item hidden in advanced mode
+ floater->childSetVisible("less_btn", is_advance);
+ floater->childSetVisible("type_label2", is_advance);
+ floater->childSetVisible("format_label", is_advance && is_local);
+ floater->childSetVisible("local_format_combo", is_advance && is_local);
+ floater->childSetVisible("layer_types", is_advance);
+ floater->childSetVisible("layer_type_label", is_advance);
+ floater->childSetVisible("snapshot_width", is_advance);
+ floater->childSetVisible("snapshot_height", is_advance);
+ floater->childSetVisible("keep_aspect_check", is_advance);
+ floater->childSetVisible("ui_check", is_advance);
+ floater->childSetVisible("hud_check", is_advance);
+ floater->childSetVisible("keep_open_check", is_advance);
+ floater->childSetVisible("freeze_frame_check", is_advance);
+ floater->childSetVisible("auto_snapshot_check", is_advance);
+ floater->childSetVisible("image_quality_slider", is_advance && show_slider);
+
+ LLSnapshotLivePreview* previewp = getPreviewView(floater);
+ BOOL got_bytes = previewp && previewp->getDataSize() > 0;
+ BOOL got_snap = previewp && previewp->getSnapshotUpToDate();
+
+ floater->childSetEnabled("send_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD && got_snap && previewp->getDataSize() <= MAX_POSTCARD_DATASIZE);
+ floater->childSetEnabled("upload_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE && got_snap);
+ floater->childSetEnabled("save_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL && got_snap);
+
+ LLLocale locale(LLLocale::USER_LOCALE);
+ std::string bytes_string;
+ if (got_snap)
+ {
+ LLResMgr::getInstance()->getIntegerString(bytes_string, (previewp->getDataSize()) >> 10 );
+ }
+ S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
+ floater->childSetLabelArg("texture", "[AMOUNT]", llformat("%d",upload_cost));
+ floater->childSetLabelArg("upload_btn", "[AMOUNT]", llformat("%d",upload_cost));
+ floater->childSetTextArg("file_size_label", "[SIZE]", got_snap ? bytes_string : floater->getString("unknown"));
+ floater->childSetColor("file_size_label",
+ shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD
+ && got_bytes
+ && previewp->getDataSize() > MAX_POSTCARD_DATASIZE ? LLUIColor(LLColor4::red) : LLUIColorTable::instance().getColor( "LabelTextColor" ));
+
+ switch(shot_type)
+ {
+ case LLSnapshotLivePreview::SNAPSHOT_POSTCARD:
+ layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR;
+ floater->childSetValue("layer_types", "colors");
+ if(is_advance)
+ {
+ setResolution(floater, "postcard_size_combo");
+ }
+ break;
+ case LLSnapshotLivePreview::SNAPSHOT_TEXTURE:
+ layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR;
+ floater->childSetValue("layer_types", "colors");
+ if(is_advance)
+ {
+ setResolution(floater, "texture_size_combo");
+ }
+ break;
+ case LLSnapshotLivePreview::SNAPSHOT_LOCAL:
+ if(is_advance)
+ {
+ setResolution(floater, "local_size_combo");
+ }
+ break;
+ default:
+ break;
+ }
+
+ updateResolutionTextEntry(floater);
+
+ if (previewp)
+ {
+ previewp->setSnapshotType(shot_type);
+ previewp->setSnapshotFormat(shot_format);
+ previewp->setSnapshotBufferType(layer_type);
+ }
+}
+
+// static
+void LLFloaterSnapshot::Impl::updateResolutionTextEntry(LLFloaterSnapshot* floater)
+{
+ LLSpinCtrl* width_spinner = floater->getChild<LLSpinCtrl>("snapshot_width");
+ LLSpinCtrl* height_spinner = floater->getChild<LLSpinCtrl>("snapshot_height");
+ if(getTypeIndex(floater) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
+ {
+ width_spinner->setAllowEdit(FALSE);
+ height_spinner->setAllowEdit(FALSE);
+ }
+ else
+ {
+ width_spinner->setAllowEdit(TRUE);
+ height_spinner->setAllowEdit(TRUE);
+ }
}
// static
@@ -1304,6 +1376,70 @@ void LLFloaterSnapshot::Impl::checkAutoSnapshot(LLSnapshotLivePreview* previewp,
}
// static
+void LLFloaterSnapshot::Impl::onClickDiscard(void* data)
+{
+ LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
+
+ if (view)
+ {
+ view->closeFloater();
+ }
+}
+
+
+// static
+void LLFloaterSnapshot::Impl::onCommitSave(LLUICtrl* ctrl, void* data)
+{
+ if (ctrl->getValue().asString() == "save as")
+ {
+ gViewerWindow->resetSnapshotLoc();
+ }
+ onClickKeep(data);
+}
+
+// static
+void LLFloaterSnapshot::Impl::onClickKeep(void* data)
+{
+ LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
+ LLSnapshotLivePreview* previewp = getPreviewView(view);
+
+ if (previewp)
+ {
+ if (previewp->getSnapshotType() == LLSnapshotLivePreview::SNAPSHOT_POSTCARD)
+ {
+ LLFloaterPostcard* floater = previewp->savePostcard();
+ // if still in snapshot mode, put postcard floater in snapshot floaterview
+ // and link it to snapshot floater
+ if (floater && !gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
+ {
+ gFloaterView->removeChild(floater);
+ gSnapshotFloaterView->addChild(floater);
+ view->addDependentFloater(floater, FALSE);
+ }
+ }
+ else if (previewp->getSnapshotType() == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
+ {
+ previewp->saveTexture();
+ }
+ else
+ {
+ previewp->saveLocal();
+ }
+
+ if (gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
+ {
+ view->closeFloater();
+ }
+ else
+ {
+ checkAutoSnapshot(previewp);
+ }
+
+ updateControls(view);
+ }
+}
+
+// static
void LLFloaterSnapshot::Impl::onClickNewSnapshot(void* data)
{
LLSnapshotLivePreview* previewp = getPreviewView((LLFloaterSnapshot *)data);
@@ -1539,8 +1675,10 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
}
// save off all selected resolution values
- gSavedSettings.setS32("SnapshotLastResolution", view->getChild<LLComboBox>("snapshot_size_combo")->getCurrentIndex());
-
+ gSavedSettings.setS32("SnapshotPostcardLastResolution", view->getChild<LLComboBox>("postcard_size_combo")->getCurrentIndex());
+ gSavedSettings.setS32("SnapshotTextureLastResolution", view->getChild<LLComboBox>("texture_size_combo")->getCurrentIndex());
+ gSavedSettings.setS32("SnapshotLocalLastResolution", view->getChild<LLComboBox>("local_size_combo")->getCurrentIndex());
+
std::string sdstring = combobox->getSelectedValue();
LLSD sdres;
std::stringstream sstream(sdstring);
@@ -1620,76 +1758,17 @@ void LLFloaterSnapshot::Impl::onCommitLayerTypes(LLUICtrl* ctrl, void*data)
}
//static
-void LLFloaterSnapshot::Impl::onToggleAdvanced(LLUICtrl* ctrl, void* data)
+void LLFloaterSnapshot::Impl::onCommitSnapshotType(LLUICtrl* ctrl, void* data)
{
- LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
-
- LLPanel* advanced_panel = view->getChild<LLPanel>("snapshot_advanced");
-
- if (advanced_panel->getVisible())
- {
- advanced_panel->setVisible(false);
-
- // shrink floater back to original size
- view->reshape(view->getRect().getWidth() - advanced_panel->getRect().getWidth(), view->getRect().getHeight());
-
- view->getChild<LLButton>("hide_advanced")->setVisible(false);
- view->getChild<LLButton>("show_advanced")->setVisible(true);
- }
- else
+ LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
+ if (view)
{
- advanced_panel->setVisible(true);
- // stretch the floater so it can accommodate the advanced panel
- view->reshape(view->getRect().getWidth() + advanced_panel->getRect().getWidth(), view->getRect().getHeight());
-
- view->getChild<LLButton>("hide_advanced")->setVisible(true);
- view->getChild<LLButton>("show_advanced")->setVisible(false);
+ gSavedSettings.setS32("LastSnapshotType", getTypeIndex(view));
+ getPreviewView(view)->updateSnapshot(TRUE);
+ updateControls(view);
}
}
-void LLFloaterSnapshot::Impl::onCommitSnapshot(LLFloaterSnapshot* view, LLSnapshotLivePreview::ESnapshotType type)
-{
- LLSnapshotLivePreview* previewp = getPreviewView(view);
-
- if (previewp)
- {
- previewp->setSnapshotType(type);
-
- if (type == LLSnapshotLivePreview::SNAPSHOT_WEB)
- {
- previewp->saveWeb(view->getString("share_to_web_url"));
- }
- else if (type == LLSnapshotLivePreview::SNAPSHOT_LOCAL)
- {
- previewp->saveLocal();
- }
- else if (type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
- {
- previewp->saveTexture();
- }
- else if (type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD)
- {
- LLFloaterPostcard* floater = previewp->savePostcard();
- // if still in snapshot mode, put postcard floater in snapshot floaterview
- // and link it to snapshot floater
- if (floater && !gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
- {
- gFloaterView->removeChild(floater);
- gSnapshotFloaterView->addChild(floater);
- view->addDependentFloater(floater, FALSE);
- }
- }
-
- if (gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
- {
- view->closeFloater();
- }
- else
- {
- checkAutoSnapshot(previewp);
- }
- }
-}
//static
void LLFloaterSnapshot::Impl::onCommitSnapshotFormat(LLUICtrl* ctrl, void* data)
@@ -1713,7 +1792,18 @@ void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const s
combo->setCurrentByIndex(combo->getItemCount() - 1); // "custom" is always the last index
- gSavedSettings.setS32("SnapshotLastResolution", combo->getCurrentIndex());
+ if(comboname == "postcard_size_combo")
+ {
+ gSavedSettings.setS32("SnapshotPostcardLastResolution", combo->getCurrentIndex());
+ }
+ else if(comboname == "texture_size_combo")
+ {
+ gSavedSettings.setS32("SnapshotTextureLastResolution", combo->getCurrentIndex());
+ }
+ else if(comboname == "local_size_combo")
+ {
+ gSavedSettings.setS32("SnapshotLocalLastResolution", combo->getCurrentIndex());
+ }
checkAspectRatio(floater, -1); // -1 means custom
}
@@ -1860,7 +1950,9 @@ void LLFloaterSnapshot::Impl::onCommitCustomResolution(LLUICtrl *ctrl, void* dat
previewp->setSize(w,h);
checkAutoSnapshot(previewp, FALSE);
previewp->updateSnapshot(FALSE, TRUE);
- comboSetCustom(view, "snapshot_size_combo");
+ comboSetCustom(view, "postcard_size_combo");
+ comboSetCustom(view, "texture_size_combo");
+ comboSetCustom(view, "local_size_combo");
}
}
@@ -1877,7 +1969,7 @@ void LLFloaterSnapshot::Impl::onCommitCustomResolution(LLUICtrl *ctrl, void* dat
// Default constructor
LLFloaterSnapshot::LLFloaterSnapshot(const LLSD& key)
- : LLTransientDockableFloater(NULL, true, key),
+ : LLFloater(key),
impl (*(new Impl))
{
//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_snapshot.xml", FALSE);
@@ -1902,19 +1994,7 @@ LLFloaterSnapshot::~LLFloaterSnapshot()
BOOL LLFloaterSnapshot::postBuild()
{
-
- getChild<LLButton>("share")->setCommitCallback(boost::bind(&LLFloaterSnapshot::updateButtons, this, SNAPSHOT_SHARE));
- getChild<LLButton>("save")->setCommitCallback(boost::bind(&LLFloaterSnapshot::updateButtons, this, SNAPSHOT_SAVE));
- getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterSnapshot::updateButtons, this, SNAPSHOT_MAIN));
-
- getChild<LLButton>("share_to_web")->setCommitCallback(boost::bind(&Impl::onCommitSnapshot, this, LLSnapshotLivePreview::SNAPSHOT_WEB));
- getChild<LLButton>("share_to_email")->setCommitCallback(boost::bind(&Impl::onCommitSnapshot, this, LLSnapshotLivePreview::SNAPSHOT_POSTCARD));
- getChild<LLButton>("save_to_inventory")->setCommitCallback(boost::bind(&Impl::onCommitSnapshot, this, LLSnapshotLivePreview::SNAPSHOT_TEXTURE));
- getChild<LLButton>("save_to_computer")->setCommitCallback(boost::bind(&Impl::onCommitSnapshot, this, LLSnapshotLivePreview::SNAPSHOT_LOCAL));
-
- childSetCommitCallback("show_advanced", Impl::onToggleAdvanced, this);
- childSetCommitCallback("hide_advanced", Impl::onToggleAdvanced, this);
-
+ childSetCommitCallback("snapshot_type_radio", Impl::onCommitSnapshotType, this);
childSetCommitCallback("local_format_combo", Impl::onCommitSnapshotFormat, this);
childSetAction("new_snapshot_btn", Impl::onClickNewSnapshot, this);
@@ -1922,6 +2002,11 @@ BOOL LLFloaterSnapshot::postBuild()
childSetAction("more_btn", Impl::onClickMore, this);
childSetAction("less_btn", Impl::onClickLess, this);
+ childSetAction("upload_btn", Impl::onClickKeep, this);
+ childSetAction("send_btn", Impl::onClickKeep, this);
+ childSetCommitCallback("save_btn", Impl::onCommitSave, this);
+ childSetAction("discard_btn", Impl::onClickDiscard, this);
+
childSetCommitCallback("image_quality_slider", Impl::onCommitQuality, this);
childSetValue("image_quality_slider", gSavedSettings.getS32("SnapshotQuality"));
@@ -1942,6 +2027,7 @@ BOOL LLFloaterSnapshot::postBuild()
childSetCommitCallback("layer_types", Impl::onCommitLayerTypes, this);
childSetValue("layer_types", "colors");
+ childSetEnabled("layer_types", FALSE);
childSetValue("snapshot_width", gSavedSettings.getS32(lastSnapshotWidthName()));
childSetValue("snapshot_height", gSavedSettings.getS32(lastSnapshotHeightName()));
@@ -1952,7 +2038,9 @@ BOOL LLFloaterSnapshot::postBuild()
childSetValue("auto_snapshot_check", gSavedSettings.getBOOL("AutoSnapshot"));
childSetCommitCallback("auto_snapshot_check", Impl::onClickAutoSnap, this);
- childSetCommitCallback("snapshot_size_combo", Impl::onCommitResolution, this);
+ childSetCommitCallback("postcard_size_combo", Impl::onCommitResolution, this);
+ childSetCommitCallback("texture_size_combo", Impl::onCommitResolution, this);
+ childSetCommitCallback("local_size_combo", Impl::onCommitResolution, this);
// create preview window
LLRect full_screen_rect = getRootView()->getRect();
@@ -1973,14 +2061,8 @@ BOOL LLFloaterSnapshot::postBuild()
impl.mPreviewHandle = previewp->getHandle();
impl.updateControls(this);
impl.updateLayout(this);
-
- //save off the refresh button's rectangle so we can apply offsets with thumbnail resize
- mRefreshBtnRect = getChild<LLButton>("new_snapshot_btn")->getRect();
-
- // make sure we share/hide the general buttons
- updateButtons(SNAPSHOT_MAIN);
- return LLDockableFloater::postBuild();
+ return TRUE;
}
void LLFloaterSnapshot::draw()
@@ -1993,19 +2075,15 @@ void LLFloaterSnapshot::draw()
return;
}
- LLDockableFloater::draw();
-
- LLButton* refresh_btn = getChild<LLButton>("new_snapshot_btn");
- // revert the refresh button to original intended position
- LLRect refresh_rect = mRefreshBtnRect;
+ LLFloater::draw();
if (previewp)
{
if(previewp->getThumbnailImage())
{
- LLRect thumbnail_rect = getChild<LLView>("thumbnail_placeholder")->getRect();
+ LLRect thumbnail_rect = getChild<LLUICtrl>("thumbnail_placeholder")->getRect();
- S32 offset_x = (thumbnail_rect.getWidth() - previewp->getThumbnailWidth()) / 2 + thumbnail_rect.mLeft;
+ S32 offset_x = (getRect().getWidth() - previewp->getThumbnailWidth()) / 2 ;
S32 offset_y = thumbnail_rect.mBottom + (thumbnail_rect.getHeight() - previewp->getThumbnailHeight()) / 2 ;
glMatrixMode(GL_MODELVIEW);
@@ -2014,14 +2092,8 @@ void LLFloaterSnapshot::draw()
previewp->getThumbnailImage(), LLColor4::white);
previewp->drawPreviewRect(offset_x, offset_y) ;
-
- refresh_rect.translate(offset_x - thumbnail_rect.mLeft, offset_y - thumbnail_rect.mBottom);
}
}
-
- refresh_btn->setRect(refresh_rect);
- drawChild(refresh_btn);
-
}
void LLFloaterSnapshot::onOpen(const LLSD& key)
@@ -2035,12 +2107,6 @@ void LLFloaterSnapshot::onOpen(const LLSD& key)
gSnapshotFloaterView->setEnabled(TRUE);
gSnapshotFloaterView->setVisible(TRUE);
gSnapshotFloaterView->adjustToFitScreen(this, FALSE);
-
- LLButton *snapshots = LLBottomTray::getInstance()->getChild<LLButton>("snapshots");
-
- setDockControl(new LLDockControl(
- snapshots, this,
- getDockTongue(), LLDockControl::TOP));
}
void LLFloaterSnapshot::onClose(bool app_quitting)
@@ -2069,22 +2135,6 @@ void LLFloaterSnapshot::update()
}
-bool LLFloaterSnapshot::updateButtons(ESnapshotMode mode)
-{
- childSetVisible("share", mode == SNAPSHOT_MAIN);
- childSetVisible("save", mode == SNAPSHOT_MAIN);
- childSetVisible("set_profile_pic", mode == SNAPSHOT_MAIN);
-
- childSetVisible("share_to_web", mode == SNAPSHOT_SHARE);
- childSetVisible("share_to_email", mode == SNAPSHOT_SHARE);
-
- childSetVisible("save_to_inventory", mode == SNAPSHOT_SAVE);
- childSetVisible("save_to_computer", mode == SNAPSHOT_SAVE);
-
- childSetVisible("cancel", mode != SNAPSHOT_MAIN);
-
- return true;
-}
///----------------------------------------------------------------------------
/// Class LLSnapshotFloaterView
///----------------------------------------------------------------------------
diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h
index f212352cfc..1333497bd2 100644
--- a/indra/newview/llfloatersnapshot.h
+++ b/indra/newview/llfloatersnapshot.h
@@ -34,10 +34,9 @@
#define LL_LLFLOATERSNAPSHOT_H
#include "llfloater.h"
-#include "lltransientdockablefloater.h"
-class LLFloaterSnapshot : public LLTransientDockableFloater
+class LLFloaterSnapshot : public LLFloater
{
public:
typedef enum e_snapshot_format
@@ -46,13 +45,6 @@ public:
SNAPSHOT_FORMAT_JPEG,
SNAPSHOT_FORMAT_BMP
} ESnapshotFormat;
-
- enum ESnapshotMode
- {
- SNAPSHOT_SHARE,
- SNAPSHOT_SAVE,
- SNAPSHOT_MAIN
- };
LLFloaterSnapshot(const LLSD& key);
virtual ~LLFloaterSnapshot();
@@ -64,8 +56,6 @@ public:
static void update();
- bool updateButtons(ESnapshotMode mode);
-
static S32 getUIWinHeightLong() {return sUIWinHeightLong ;}
static S32 getUIWinHeightShort() {return sUIWinHeightShort ;}
static S32 getUIWinWidth() {return sUIWinWidth ;}
@@ -77,8 +67,6 @@ private:
static S32 sUIWinHeightLong ;
static S32 sUIWinHeightShort ;
static S32 sUIWinWidth ;
-
- LLRect mRefreshBtnRect;
};
class LLSnapshotFloaterView : public LLFloaterView
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 7dcf2aab99..452b2ac664 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -1,127 +1,399 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
legacy_header_height="18"
- can_minimize="true"
- can_close="false"
+ can_minimize="false"
+ can_close="true"
follows="left|top"
- height="340"
+ height="516"
layout="topleft"
name="Snapshot"
help_topic="snapshot"
save_rect="true"
save_visibility="true"
- can_dock="true"
- title="Snapshot"
- width="250">
- <floater.string
- name="unknown">
- unknown
- </floater.string>
- <floater.string
- name="share_to_web_url" translate="false">
- http://pdp36.lindenlab.com:12777/
- </floater.string>
- <view
- height="160"
- width="230"
+ title="SNAPSHOT PREVIEW"
+ width="215">
+ <floater.string
+ name="share_to_web_url" translate="false">
+http://pdp36.lindenlab.com:12777/
+ </floater.string>
+ <floater.string
+ name="unknown">
+ unknown
+ </floater.string>
+ <radio_group
+ height="58"
+ label="Snapshot type"
+ layout="topleft"
+ left="10"
+ name="snapshot_type_radio"
+ top="25"
+ width="205">
+ <radio_item
+ bottom="19"
+ height="16"
+ label="Email"
+ layout="topleft"
+ name="postcard" />
+ <radio_item
+ bottom="38"
+ height="16"
+ label="My inventory (L$[AMOUNT])"
+ layout="topleft"
+ name="texture" />
+ <radio_item
+ bottom="57"
+ height="16"
+ label="Save to my computer"
+ layout="topleft"
+ name="local" />
+ </radio_group>
+ <ui_ctrl
+ height="90"
+ width="125"
layout="topleft"
name="thumbnail_placeholder"
- top_pad="30"
+ top_pad="6"
follows="left|top"
left="10"
/>
- <button
- follows="left|top"
- height="22"
- image_overlay="Refresh_Off"
- layout="topleft"
- left="20"
- top_pad="-30"
- name="new_snapshot_btn"
- width="23" />
- <line_editor
- border_style="line"
- border_thickness="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left="10"
- max_length="500"
- name="description"
- top_pad="15"
- width="230"
- label="Description"/>
- <button
- label="Share Snapshot"
- name="share"
- top_pad="20"
- left="10"
- width="130"/>
- <button
- label="Share to Web"
- name="share_to_web"
- top_delta="0"
- left="10"
- width="130"/>
- <button
- label="Save to My Inventory"
- name="save_to_inventory"
- top_delta="0"
- left="10"
- width="130"/>
- <button
- label="Save Snapshot"
- name="save"
- top_pad="7"
- left="10"
- width="130"/>
- <button
- label="Email Snapshot"
- name="share_to_email"
- top_delta="0"
- left="10"
- width="130"/>
- <button
- label="Save to My Computer"
- name="save_to_computer"
- top_delta="0"
- left="10"
- width="130"/>
- <button
- label="Set As Profile Pic"
- name="set_profile_pic"
- top_pad="7"
- left="10"
- width="130"/>
- <button
- label="Back"
- name="cancel"
- top_delta="0"
- left="10"
- width="130"/>
- <button
- follows="left"
- height="22"
+ <text
+ type="string"
+ font="SansSerifSmall"
+ length="1"
+ follows="left|top"
+ height="14"
layout="topleft"
- left="210"
- name="show_advanced"
- image_overlay="TabIcon_Close_Off"
- top_delta="1"
- width="30"/>
- <button
- follows="left"
+ right="-5"
+ left_delta="0"
+ halign="right"
+ name="file_size_label"
+ top_pad="10"
+ width="195">
+ [SIZE] KB
+ </text>
+ <button
+ follows="left|top"
height="22"
+ image_overlay="Refresh_Off"
+ layout="topleft"
+ left="10"
+ name="new_snapshot_btn"
+ width="23" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Send"
+ layout="topleft"
+ left_pad="5"
+ right="-5"
+ name="send_btn"
+ width="100" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Save (L$[AMOUNT])"
+ layout="topleft"
+ right="-5"
+ name="upload_btn"
+ top_delta="0"
+ width="100" />
+ <flyout_button
+ follows="left|top"
+ height="23"
+ label="Save"
+ layout="topleft"
+ right="-5"
+ name="save_btn"
+ tool_tip="Save image to a file"
+ top_delta="0"
+ width="100">
+ <flyout_button.item
+ label="Save"
+ name="save_item"
+ value="save" />
+ <flyout_button.item
+ label="Save As..."
+ name="saveas_item"
+ value="save as" />
+ </flyout_button>
+ <button
+ follows="left|top"
+ height="23"
+ label="More"
+ layout="topleft"
+ left="10"
+ name="more_btn"
+ tool_tip="Advanced options"
+ width="80" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Less"
+ layout="topleft"
+ left_delta="0"
+ name="less_btn"
+ tool_tip="Advanced options"
+ top_delta="0"
+ width="80" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ right="-5"
+ left_pad="5"
+ name="discard_btn"
+ width="100" />
+ <text
+ type="string"
+ length="1"
+ follows="top|left"
+ height="12"
+ layout="topleft"
+ left="10"
+ name="type_label2"
+ top_pad="5"
+ width="127">
+ Size
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="top|left"
+ height="12"
+ layout="topleft"
+ left_pad="5"
+ name="format_label"
+ top_delta="0"
+ width="70">
+ Format
+ </text>
+ <combo_box
+ height="23"
+ label="Resolution"
+ layout="topleft"
+ left="10"
+ name="postcard_size_combo"
+ width="120">
+ <combo_box.item
+ label="Current Window"
+ name="CurrentWindow"
+ value="[i0,i0]" />
+ <combo_box.item
+ label="640x480"
+ name="640x480"
+ value="[i640,i480]" />
+ <combo_box.item
+ label="800x600"
+ name="800x600"
+ value="[i800,i600]" />
+ <combo_box.item
+ label="1024x768"
+ name="1024x768"
+ value="[i1024,i768]" />
+ <combo_box.item
+ label="Custom"
+ name="Custom"
+ value="[i-1,i-1]" />
+ </combo_box>
+ <combo_box
+ height="23"
+ label="Resolution"
layout="topleft"
- left="210"
- visible="false"
- name="hide_advanced"
- image_overlay="TabIcon_Open_Off"
+ left_delta="0"
+ name="texture_size_combo"
top_delta="0"
- width="30"/>
- <panel
- visible="false"
- left="250"
- top="17"
- name="snapshot_advanced"
- filename="panel_snapshot_advanced.xml"/>
+ width="127">
+ <combo_box.item
+ label="Current Window"
+ name="CurrentWindow"
+ value="[i0,i0]" />
+ <combo_box.item
+ label="Small (128x128)"
+ name="Small(128x128)"
+ value="[i128,i128]" />
+ <combo_box.item
+ label="Medium (256x256)"
+ name="Medium(256x256)"
+ value="[i256,i256]" />
+ <combo_box.item
+ label="Large (512x512)"
+ name="Large(512x512)"
+ value="[i512,i512]" />
+ <combo_box.item
+ label="Custom"
+ name="Custom"
+ value="[i-1,i-1]" />
+ </combo_box>
+ <combo_box
+ height="23"
+ label="Resolution"
+ layout="topleft"
+ left_delta="0"
+ name="local_size_combo"
+ top_delta="0"
+ width="127">
+ <combo_box.item
+ label="Current Window"
+ name="CurrentWindow"
+ value="[i0,i0]" />
+ <combo_box.item
+ label="320x240"
+ name="320x240"
+ value="[i320,i240]" />
+ <combo_box.item
+ label="640x480"
+ name="640x480"
+ value="[i640,i480]" />
+ <combo_box.item
+ label="800x600"
+ name="800x600"
+ value="[i800,i600]" />
+ <combo_box.item
+ label="1024x768"
+ name="1024x768"
+ value="[i1024,i768]" />
+ <combo_box.item
+ label="1280x1024"
+ name="1280x1024"
+ value="[i1280,i1024]" />
+ <combo_box.item
+ label="1600x1200"
+ name="1600x1200"
+ value="[i1600,i1200]" />
+ <combo_box.item
+ label="Custom"
+ name="Custom"
+ value="[i-1,i-1]" />
+ </combo_box>
+ <combo_box
+ height="23"
+ label="Format"
+ layout="topleft"
+ left_pad="5"
+ name="local_format_combo"
+ width="70">
+ <combo_box.item
+ label="PNG"
+ name="PNG" />
+ <combo_box.item
+ label="JPEG"
+ name="JPEG" />
+ <combo_box.item
+ label="BMP"
+ name="BMP" />
+ </combo_box>
+ <spinner
+ allow_text_entry="false"
+ decimal_digits="0"
+ follows="left|top"
+ height="20"
+ increment="32"
+ label="Width"
+ label_width="40"
+ layout="topleft"
+ left="10"
+ max_val="6016"
+ min_val="32"
+ name="snapshot_width"
+ top_pad="10"
+ width="95" />
+ <spinner
+ allow_text_entry="false"
+ decimal_digits="0"
+ follows="left|top"
+ height="20"
+ increment="32"
+ label="Height"
+ label_width="40"
+ layout="topleft"
+ left_pad="5"
+ max_val="6016"
+ min_val="32"
+ name="snapshot_height"
+ top_delta="0"
+ width="95" />
+ <check_box
+ bottom_delta="20"
+ label="Constrain proportions"
+ layout="topleft"
+ left="10"
+ name="keep_aspect_check" />
+ <slider
+ decimal_digits="0"
+ follows="left|top"
+ height="15"
+ increment="1"
+ initial_value="75"
+ label="Image quality"
+ label_width="100"
+ layout="topleft"
+ left_delta="0"
+ max_val="100"
+ name="image_quality_slider"
+ top_pad="5"
+ width="205" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="13"
+ layout="topleft"
+ left="10"
+ name="layer_type_label"
+ top_pad="5"
+ width="50">
+ Capture:
+ </text>
+ <combo_box
+ height="23"
+ label="Image Layers"
+ layout="topleft"
+ left="30"
+ name="layer_types"
+ width="145">
+ <combo_box.item
+ label="Colors"
+ name="Colors"
+ value="colors" />
+ <combo_box.item
+ label="Depth"
+ name="Depth"
+ value="depth" />
+ </combo_box>
+ <check_box
+ label="Interface"
+ layout="topleft"
+ left="30"
+ top_pad="10"
+ width="180"
+ name="ui_check" />
+ <check_box
+ label="HUDs"
+ layout="topleft"
+ left="30"
+ top_pad="10"
+ width="180"
+ name="hud_check" />
+ <check_box
+ label="Keep open after saving"
+ layout="topleft"
+ left="10"
+ top_pad="8"
+ width="180"
+ name="keep_open_check" />
+ <check_box
+ label="Freeze frame (fullscreen)"
+ layout="topleft"
+ left="10"
+ top_pad="8"
+ width="180"
+ name="freeze_frame_check" />
+ <check_box
+ label="Auto-refresh"
+ layout="topleft"
+ left="10"
+ top_pad="8"
+ width="180"
+ name="auto_snapshot_check" />
</floater>