diff options
| author | Tofu Linden <tofu.linden@lindenlab.com> | 2010-06-15 14:55:05 +0100 | 
|---|---|---|
| committer | Tofu Linden <tofu.linden@lindenlab.com> | 2010-06-15 14:55:05 +0100 | 
| commit | b9ea8cc0b53d6a352e0bda8f45dc46ae6d7fc71c (patch) | |
| tree | 5890b12ec39e4256941f26d533c760299b976202 | |
| parent | 23b395b91dd10c6fd11c38d7556340ec26987abd (diff) | |
| parent | 9fd6bab430a1b79b3c2ff307839e756fa4bb82eb (diff) | |
final(?) merge to revert snapshot floater to 2.0.1 level.
| -rw-r--r-- | indra/newview/llfloatersnapshot.cpp | 518 | ||||
| -rw-r--r-- | indra/newview/llfloatersnapshot.h | 14 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_snapshot.xml | 488 | 
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> | 
