diff options
| -rw-r--r-- | indra/newview/llassetuploadresponders.cpp | 26 | ||||
| -rw-r--r-- | indra/newview/llassetuploadresponders.h | 12 | ||||
| -rw-r--r-- | indra/newview/llfloateranimpreview.cpp | 9 | ||||
| -rw-r--r-- | indra/newview/llfloaternamedesc.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llfloatersnapshot.cpp | 708 | ||||
| -rw-r--r-- | indra/newview/llfloatersnapshot.h | 9 | ||||
| -rw-r--r-- | indra/newview/llviewermenufile.cpp | 124 | ||||
| -rw-r--r-- | indra/newview/llviewermenufile.h | 14 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_snapshot.xml | 517 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/notifications.xml | 20 | 
10 files changed, 834 insertions, 611 deletions
diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index 27dcb9f1c7..116c4cafc2 100644 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -203,19 +203,13 @@ void LLAssetUploadResponder::uploadComplete(const LLSD& content)  LLNewAgentInventoryResponder::LLNewAgentInventoryResponder(const LLSD& post_data,  														   const LLUUID& vfile_id, -														   LLAssetType::EType asset_type, -														   boost::function<void(const LLUUID& uuid)> callback) -: LLAssetUploadResponder(post_data, vfile_id, asset_type), -  mCallback(callback) +														   LLAssetType::EType asset_type) +: LLAssetUploadResponder(post_data, vfile_id, asset_type)  {  } -LLNewAgentInventoryResponder::LLNewAgentInventoryResponder(const LLSD& post_data,  -														   const std::string& file_name,  -														   LLAssetType::EType asset_type,  -														   boost::function<void(const LLUUID& uuid)> callback) -: LLAssetUploadResponder(post_data, file_name, asset_type), -  mCallback(callback) +LLNewAgentInventoryResponder::LLNewAgentInventoryResponder(const LLSD& post_data, const std::string& file_name, LLAssetType::EType asset_type) +: LLAssetUploadResponder(post_data, file_name, asset_type)  {  } @@ -293,12 +287,6 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content)  										creation_date_now);  		gInventory.updateItem(item);  		gInventory.notifyObservers(); -		 -		if (mCallback) -		{ -			// call the callback with the new Asset UUID -			mCallback(item->getAssetUUID()); -		}  		// Show the preview panel for textures and sounds to let  		// user know that the image (or snapshot) arrived intact. @@ -346,11 +334,13 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content)  		U32 group_perms      = mPostData.has("group_mask")      ? mPostData.get("group_mask"     ).asInteger() : PERM_NONE;  		U32 next_owner_perms = mPostData.has("next_owner_mask") ? mPostData.get("next_owner_mask").asInteger() : PERM_NONE;  		std::string display_name = LLStringUtil::null; +		LLAssetStorage::LLStoreAssetCallback callback = NULL; +		void *userdata = NULL;  		upload_new_resource(next_file, asset_name, asset_name, -				    LLFolderType::FT_NONE, LLInventoryType::IT_NONE, +				    0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,  				    next_owner_perms, group_perms,  				    everyone_perms, display_name, -				    NULL, expected_upload_cost); +				    callback, expected_upload_cost, userdata);  	}  } diff --git a/indra/newview/llassetuploadresponders.h b/indra/newview/llassetuploadresponders.h index 2358aeb39d..91fb39916d 100644 --- a/indra/newview/llassetuploadresponders.h +++ b/indra/newview/llassetuploadresponders.h @@ -33,7 +33,6 @@  #ifndef LL_LLASSETUPLOADRESPONDER_H  #define LL_LLASSETUPLOADRESPONDER_H -#include "llassetstorage.h"  #include "llhttpclient.h"  // Abstract class for supporting asset upload @@ -67,15 +66,10 @@ class LLNewAgentInventoryResponder : public LLAssetUploadResponder  public:  	LLNewAgentInventoryResponder(const LLSD& post_data,  								const LLUUID& vfile_id, -								LLAssetType::EType asset_type, -								boost::function<void(const LLUUID& uuid)> callback = NULL); -	LLNewAgentInventoryResponder(const LLSD& post_data,  -								const std::string& file_name, -								 LLAssetType::EType asset_type, -								boost::function<void(const LLUUID& uuid)> callback = NULL); +								LLAssetType::EType asset_type); +	LLNewAgentInventoryResponder(const LLSD& post_data, const std::string& file_name, +											   LLAssetType::EType asset_type);  	virtual void uploadComplete(const LLSD& content); - -	boost::function<void(const LLUUID& uuid)> mCallback;  };  struct LLBakedUploadData; diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp index 043f753e01..f14e64e3e4 100644 --- a/indra/newview/llfloateranimpreview.cpp +++ b/indra/newview/llfloateranimpreview.cpp @@ -1001,18 +1001,19 @@ void LLFloaterAnimPreview::onBtnOK(void* userdata)  			{  				std::string name = floaterp->childGetValue("name_form").asString();  				std::string desc = floaterp->childGetValue("description_form").asString(); +				LLAssetStorage::LLStoreAssetCallback callback = NULL;  				S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); +				void *userdata = NULL;  				upload_new_resource(floaterp->mTransactionID, // tid  						    LLAssetType::AT_ANIMATION,  						    name,  						    desc, +						    0,  						    LLFolderType::FT_NONE,  						    LLInventoryType::IT_ANIMATION, -						    LLFloaterPerms::getNextOwnerPerms(),  -							LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), +						    LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),  						    name, -						    NULL,  -							expected_upload_cost); +						    callback, expected_upload_cost, userdata);  			}  			else  			{ diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp index 5c343ecb22..159ce41b79 100644 --- a/indra/newview/llfloaternamedesc.cpp +++ b/indra/newview/llfloaternamedesc.cpp @@ -169,14 +169,16 @@ void LLFloaterNameDesc::onBtnOK( )  {  	childDisable("ok_btn"); // don't allow inadvertent extra uploads +	LLAssetStorage::LLStoreAssetCallback callback = NULL;  	S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); // kinda hack - assumes that unsubclassed LLFloaterNameDesc is only used for uploading chargeable assets, which it is right now (it's only used unsubclassed for the sound upload dialog, and THAT should be a subclass). +	void *nruserdata = NULL;  	std::string display_name = LLStringUtil::null;  	upload_new_resource(mFilenameAndPath, // file  			    childGetValue("name_form").asString(),   			    childGetValue("description_form").asString(),  -			    LLFolderType::FT_NONE, LLInventoryType::IT_NONE, +			    0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,  			    LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), -			    display_name, NULL, expected_upload_cost); +			    display_name, callback, expected_upload_cost, nruserdata);  	closeFloater(false);  } diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 129dd55e48..f3baa482a0 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -39,33 +39,28 @@  // Viewer includes  #include "llagent.h"  #include "llagentcamera.h" -#include "llagentui.h" -#include "llavatarpropertiesprocessor.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" @@ -91,6 +86,10 @@  ///----------------------------------------------------------------------------  /// Local function declarations, constants, enums, and typedefs  ///---------------------------------------------------------------------------- +S32 LLFloaterSnapshot::sUIWinHeightLong = 526 ; +S32 LLFloaterSnapshot::sUIWinHeightShort = LLFloaterSnapshot::sUIWinHeightLong - 230 ; +S32 LLFloaterSnapshot::sUIWinWidth = 215 ; +  LLSnapshotFloaterView* gSnapshotFloaterView = NULL;  const F32 AUTO_SNAPSHOT_TIME_DELAY = 1.f; @@ -115,7 +114,6 @@ public:  	enum ESnapshotType  	{  		SNAPSHOT_POSTCARD, -		SNAPSHOT_WEB,  		SNAPSHOT_TEXTURE,  		SNAPSHOT_LOCAL  	}; @@ -164,9 +162,8 @@ public:  	void setSnapshotBufferType(LLViewerWindow::ESnapshotType type) { mSnapshotBufferType = type; }  	void updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail = FALSE, F32 delay = 0.f);  	LLFloaterPostcard* savePostcard(); -	void saveTexture(bool set_as_profile_pic = false); +	void saveTexture();  	BOOL saveLocal(); -	void saveWeb(std::string url);  	BOOL setThumbnailImageSize() ;  	void generateThumbnailImage(BOOL force_update = FALSE) ; @@ -175,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; @@ -299,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;  	} @@ -632,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) @@ -831,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: @@ -972,20 +955,13 @@ LLFloaterPostcard* LLSnapshotLivePreview::savePostcard()  	return floater;  } -// Callback for asset upload -void profile_pic_upload_callback(const LLUUID& uuid) -{ -	LLFloaterSnapshot* floater =  LLFloaterReg::getTypedInstance<LLFloaterSnapshot>("snapshot"); -	floater->setAsProfilePic(uuid); -} - -void LLSnapshotLivePreview::saveTexture(bool set_as_profile_pic) +void LLSnapshotLivePreview::saveTexture()  {  	// gen a new uuid for this asset  	LLTransactionID tid;  	tid.generate();  	LLAssetID new_asset_id = tid.makeAssetID(gAgent.getSecureSessionID()); - +		  	LLPointer<LLImageJ2C> formatted = new LLImageJ2C;  	LLPointer<LLImageRaw> scaled = new LLImageRaw(mPreviewImage->getData(),  												  mPreviewImage->getWidth(), @@ -996,30 +972,26 @@ void LLSnapshotLivePreview::saveTexture(bool set_as_profile_pic)  	if (formatted->encode(scaled, 0.0f))  	{ -		boost::function<void(const LLUUID& uuid)> callback = NULL; - -		if (set_as_profile_pic) -		{ -			callback = profile_pic_upload_callback; -		} -  		LLVFile::writeFile(formatted->getData(), formatted->getDataSize(), gVFS, new_asset_id, LLAssetType::AT_TEXTURE);  		std::string pos_string;  		LLAgentUI::buildLocationString(pos_string, LLAgentUI::LOCATION_FORMAT_FULL);  		std::string who_took_it;  		LLAgentUI::buildFullname(who_took_it); +		LLAssetStorage::LLStoreAssetCallback callback = NULL;  		S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); +		void *userdata = NULL;  		upload_new_resource(tid,	// tid  				    LLAssetType::AT_TEXTURE,  				    "Snapshot : " + pos_string,  				    "Taken by " + who_took_it + " at " + pos_string, +				    0,  				    LLFolderType::FT_SNAPSHOT_CATEGORY,  				    LLInventoryType::IT_SNAPSHOT,  				    PERM_ALL,  // Note: Snapshots to inventory is a special case of content upload  				    PERM_NONE, // that ignores the user's premissions preferences and continues to  				    PERM_NONE, // always use these fairly permissive hard-coded initial perms. - MG  				    "Snapshot : " + pos_string, -				    callback, expected_upload_cost); +				    callback, expected_upload_cost, userdata);  		gViewerWindow->playSnapshotAnimAndSound();  	}  	else @@ -1049,81 +1021,6 @@ BOOL LLSnapshotLivePreview::saveLocal()  	return success;  } - -class LLSendWebResponder : public LLHTTPClient::Responder -{ -public: -	 -	virtual void error(U32 status, const std::string& reason) -	{ -		llwarns << status << ": " << reason << llendl; -		LLNotificationsUtil::add("ShareToWebFailed"); -	} -	 -	virtual void result(const LLSD& content) -	{ -		std::string response_url = content["response_url"].asString(); - -		if (!response_url.empty()) -		{ -			LLWeb::loadURLExternal(response_url); -		} -		else -		{ -			LLNotificationsUtil::add("ShareToWebFailed"); -		} -	} - -}; - -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  ///---------------------------------------------------------------------------- @@ -1143,8 +1040,14 @@ 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); +	static void onClickLess(void* data) ; +	static void onClickMore(void* data) ;  	static void onClickUICheck(LLUICtrl *ctrl, void* data);  	static void onClickHUDCheck(LLUICtrl *ctrl, void* data);  	static void onClickKeepOpenCheck(LLUICtrl *ctrl, void* data); @@ -1154,14 +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 confirmSavingTexture(LLFloaterSnapshot* view, bool set_as_profile_pic = false); -	static void onSavingTextureConfirmed(const LLSD& notification, const LLSD& response, LLFloaterSnapshot* view, bool set_as_profile_pic); -	static void checkCloseOnKeep(LLFloaterSnapshot* view); -	static void onCommitProfilePic(LLFloaterSnapshot* view); -	static void showAdvanced(LLFloaterSnapshot* view, const BOOL visible);  	static void resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32 width, S32 height) ;  	static BOOL checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value); @@ -1169,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); @@ -1193,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; @@ -1240,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()); @@ -1258,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)  		{ @@ -1286,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); @@ -1314,27 +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); -	if (NULL == previewp) -	{ -		return; +	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;  	} -	// Disable buttons until Snapshot is ready. EXT-6534 -	BOOL got_snap = previewp->getSnapshotUpToDate(); +	updateResolutionTextEntry(floater); -	// process Main buttons -	floater->childSetEnabled("share", got_snap); -	floater->childSetEnabled("save", got_snap); -	floater->childSetEnabled("set_profile_pic", got_snap); +	if (previewp) +	{ +		previewp->setSnapshotType(shot_type); +		previewp->setSnapshotFormat(shot_format); +		previewp->setSnapshotBufferType(layer_type); +	} +} -	// process Share actions buttons -	floater->childSetEnabled("share_to_web", got_snap); -	floater->childSetEnabled("share_to_email", got_snap); +// static +void LLFloaterSnapshot::Impl::updateResolutionTextEntry(LLFloaterSnapshot* floater) +{ +	LLSpinCtrl* width_spinner = floater->getChild<LLSpinCtrl>("snapshot_width"); +	LLSpinCtrl* height_spinner = floater->getChild<LLSpinCtrl>("snapshot_height"); -	// process Save actions buttons -	floater->childSetEnabled("save_to_inventory", got_snap); -	floater->childSetEnabled("save_to_computer", got_snap); +	if(getTypeIndex(floater) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE) +	{ +		width_spinner->setAllowEdit(FALSE); +		height_spinner->setAllowEdit(FALSE); +	} +	else +	{ +		width_spinner->setAllowEdit(TRUE); +		height_spinner->setAllowEdit(TRUE); +	}  }  // static @@ -1348,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); @@ -1372,6 +1464,41 @@ void LLFloaterSnapshot::Impl::onClickAutoSnap(LLUICtrl *ctrl, void* data)  	}  } +void LLFloaterSnapshot::Impl::onClickMore(void* data) +{ +	gSavedSettings.setBOOL( "AdvanceSnapshot", TRUE ); +	 +	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;		 +	if (view) +	{ +		view->translate( 0, view->getUIWinHeightShort() - view->getUIWinHeightLong() ); +		view->reshape(view->getRect().getWidth(), view->getUIWinHeightLong()); +		updateControls(view) ; +		updateLayout(view) ; +		if(getPreviewView(view)) +		{ +			getPreviewView(view)->setThumbnailImageSize() ; +		} +	} +} +void LLFloaterSnapshot::Impl::onClickLess(void* data) +{ +	gSavedSettings.setBOOL( "AdvanceSnapshot", FALSE ); +	 +	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;		 +	if (view) +	{ +		view->translate( 0, view->getUIWinHeightLong() - view->getUIWinHeightShort() ); +		view->reshape(view->getRect().getWidth(), view->getUIWinHeightShort()); +		updateControls(view) ; +		updateLayout(view) ; +		if(getPreviewView(view)) +		{ +			getPreviewView(view)->setThumbnailImageSize() ; +		} +	} +} +  // static  void LLFloaterSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data)  { @@ -1548,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); @@ -1629,149 +1758,17 @@ void LLFloaterSnapshot::Impl::onCommitLayerTypes(LLUICtrl* ctrl, void*data)  }  //static  -void LLFloaterSnapshot::Impl::showAdvanced(LLFloaterSnapshot* view, const BOOL visible) -{ -	LLPanel* advanced_panel = view->getChild<LLPanel>("snapshot_advanced"); - -	if (advanced_panel->getVisible() != visible) -	{ -		gSavedSettings.setBOOL("AdvanceSnapshot", visible); - -		advanced_panel->setVisible(visible); -		view->getChild<LLButton>("hide_advanced")->setVisible(visible); -		view->getChild<LLButton>("show_advanced")->setVisible(!visible); - -		if (visible) -		{ -			// stretch the floater so it can accommodate the advanced panel -			view->reshape(view->getRect().getWidth() + advanced_panel->getRect().getWidth(), view->getRect().getHeight()); -		} -		else -		{ -			// shrink floater back to original size -			view->reshape(view->getRect().getWidth() - advanced_panel->getRect().getWidth(), view->getRect().getHeight()); -		} -	} -} - -// This object represents a pending request for avatar properties information -class LLAvatarDataRequest : public LLAvatarPropertiesObserver -{ -public: -	LLAvatarDataRequest(const LLUUID& avatar_id, const LLUUID& image_id, LLFloaterSnapshot* floater) -	:	mAvatarID(avatar_id), -		mImageID(image_id), -		mSnapshotFloater(floater) - -	{ -	} -	 -	~LLAvatarDataRequest() -	{ -		// remove ourselves as an observer -		LLAvatarPropertiesProcessor::getInstance()-> -		removeObserver(mAvatarID, this); -	} -	 -	void processProperties(void* data, EAvatarProcessorType type) -	{ -		// route the data to the inspector -		if (data -			&& type == APT_PROPERTIES) -		{ - -			LLAvatarData* avatar_data = static_cast<LLAvatarData*>(data); - -			LLAvatarData new_data(*avatar_data); -			new_data.image_id = mImageID; - -			LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesUpdate(&new_data); - -			delete this; -		} -	} -	 -	// Store avatar ID so we can un-register the observer on destruction -	LLUUID mAvatarID; -	LLUUID mImageID; -	LLFloaterSnapshot* mSnapshotFloater; -}; - -void LLFloaterSnapshot::Impl::onCommitProfilePic(LLFloaterSnapshot* view) -{ -	confirmSavingTexture(view, true); -} - -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")); -			checkCloseOnKeep(view); -		} -		else if (type == LLSnapshotLivePreview::SNAPSHOT_LOCAL) -		{ -			previewp->saveLocal(); -			checkCloseOnKeep(view); -		} -		else if (type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE) -		{ -			// uploads and then calls checkCloseOnKeep() on confirmation from user -			confirmSavingTexture(view); -		} -		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); -			} -			checkCloseOnKeep(view); -		} -	} -} - -void LLFloaterSnapshot::Impl::confirmSavingTexture(LLFloaterSnapshot* view, bool set_as_profile_pic) -{ -	LLSD args; -	args["AMOUNT"] = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); -	LLNotificationsUtil::add("UploadConfirmation", args, LLSD(), -							 boost::bind(&onSavingTextureConfirmed, _1, _2, view, set_as_profile_pic)); -} - -void LLFloaterSnapshot::Impl::onSavingTextureConfirmed(const LLSD& notification, const LLSD& response, LLFloaterSnapshot* view, bool set_as_profile_pic) +void LLFloaterSnapshot::Impl::onCommitSnapshotType(LLUICtrl* ctrl, void* data)  { -	S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - -	if (option == 0) +	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;		 +	if (view)  	{ -		LLSnapshotLivePreview* previewp = getPreviewView(view); -		previewp->saveTexture(set_as_profile_pic); -		checkCloseOnKeep(view); +		gSavedSettings.setS32("LastSnapshotType", getTypeIndex(view)); +		getPreviewView(view)->updateSnapshot(TRUE); +		updateControls(view);  	}  } -void LLFloaterSnapshot::Impl::checkCloseOnKeep(LLFloaterSnapshot* view) -{ -	if (gSavedSettings.getBOOL("CloseSnapshotOnKeep")) -	{ -		view->closeFloater(); -	} -	else -	{ -		checkAutoSnapshot(getPreviewView(view)); -	} -}  //static   void LLFloaterSnapshot::Impl::onCommitSnapshotFormat(LLUICtrl* ctrl, void* data) @@ -1785,6 +1782,8 @@ void LLFloaterSnapshot::Impl::onCommitSnapshotFormat(LLUICtrl* ctrl, void* data)  	}  } + +  // Sets the named size combo to "custom" mode.  // static  void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const std::string& comboname) @@ -1793,11 +1792,24 @@ 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  } + +  //static  BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value)  { @@ -1938,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");  			}  		} @@ -1955,15 +1969,10 @@ 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); - -	mCommitCallbackRegistrar.add("Snapshot.ShowButtons",  boost::bind(&LLFloaterSnapshot::updateButtons, this, _2)); -	mCommitCallbackRegistrar.add("Snapshot.ShowAdvanced", boost::bind(&Impl::showAdvanced, this, true)); -	mCommitCallbackRegistrar.add("Snapshot.HideAdvanced", boost::bind(&Impl::showAdvanced, this, false)); -	mCommitCallbackRegistrar.add("Snapshot.Refresh", boost::bind(&Impl::onClickNewSnapshot, this));  }  // Destroys the object @@ -1985,14 +1994,19 @@ LLFloaterSnapshot::~LLFloaterSnapshot()  BOOL LLFloaterSnapshot::postBuild()  { -	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)); -	getChild<LLButton>("set_profile_pic")->setCommitCallback(boost::bind(&Impl::onCommitProfilePic, this)); - +	childSetCommitCallback("snapshot_type_radio", Impl::onCommitSnapshotType, this);  	childSetCommitCallback("local_format_combo", Impl::onCommitSnapshotFormat, this); +	childSetAction("new_snapshot_btn", Impl::onClickNewSnapshot, this); + +	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")); @@ -2013,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())); @@ -2023,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(); @@ -2044,15 +2061,8 @@ BOOL LLFloaterSnapshot::postBuild()  	impl.mPreviewHandle = previewp->getHandle();  	impl.updateControls(this);  	impl.updateLayout(this); -	impl.showAdvanced(this, gSavedSettings.getBOOL("AdvanceSnapshot")); - -	//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(LLSD("main")); -	return LLDockableFloater::postBuild(); +	return TRUE;  }  void LLFloaterSnapshot::draw() @@ -2065,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); @@ -2086,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) @@ -2107,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) @@ -2140,34 +2134,6 @@ void LLFloaterSnapshot::update()  	}  } -bool LLFloaterSnapshot::updateButtons(const LLSD& mode) -{ -	std::string button_mode = mode.asString(); - -	bool mode_main("main" == button_mode); -	bool mode_share("share" == button_mode); -	bool mode_save("save" == button_mode); - -	// Default to a known state if mode is invalid. -	if (!mode_main && !mode_share && !mode_save) mode_main = true; - -	childSetVisible("panel_snapshot_main", mode_main); -	childSetVisible("panel_snapshot_share", mode_share); -	childSetVisible("panel_snapshot_save", mode_save); - -	return true; -} - -void LLFloaterSnapshot::setAsProfilePic(const LLUUID& image_id) -{ -	LLAvatarDataRequest* avatar_data_request = new LLAvatarDataRequest(gAgent.getID(), image_id, this); -	 -	LLAvatarPropertiesProcessor* processor =  -		LLAvatarPropertiesProcessor::getInstance(); -	 -	processor->addObserver(gAgent.getID(), avatar_data_request); -	processor->sendAvatarPropertiesRequest(gAgent.getID()); -}  ///----------------------------------------------------------------------------  /// Class LLSnapshotFloaterView diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h index 8c4373c35c..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 @@ -57,10 +56,6 @@ public:  	static void update(); -	void setAsProfilePic(const LLUUID& image_id); -	 -	bool updateButtons(const LLSD& mode); -	  	static S32  getUIWinHeightLong()  {return sUIWinHeightLong ;}  	static S32  getUIWinHeightShort() {return sUIWinHeightShort ;}  	static S32  getUIWinWidth()       {return sUIWinWidth ;} @@ -72,8 +67,6 @@ private:  	static S32    sUIWinHeightLong ;  	static S32    sUIWinHeightShort ;  	static S32    sUIWinWidth ; - -	LLRect mRefreshBtnRect;  };  class LLSnapshotFloaterView : public LLFloaterView diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 5570fe5fec..f741e1bc10 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -318,11 +318,13 @@ class LLFileUploadBulk : public view_listener_t  			LLStringUtil::trim(asset_name);  			std::string display_name = LLStringUtil::null; +			LLAssetStorage::LLStoreAssetCallback callback = NULL;  			S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); -			upload_new_resource(filename, asset_name, asset_name, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, +			void *userdata = NULL; +			upload_new_resource(filename, asset_name, asset_name, 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,  				LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(),  					    display_name, -					    NULL, expected_upload_cost); +					    callback, expected_upload_cost, userdata);  			// *NOTE: Ew, we don't iterate over the file list here,  			// we handle the next files in upload_done_callback() @@ -478,15 +480,16 @@ void handle_compress_image(void*)  }  void upload_new_resource(const std::string& src_filename, std::string name, -			 std::string desc, +			 std::string desc, S32 compression_info,  			 LLFolderType::EType destination_folder_type,  			 LLInventoryType::EType inv_type,  			 U32 next_owner_perms,  			 U32 group_perms,  			 U32 everyone_perms,  			 const std::string& display_name, -			 boost::function<void(const LLUUID& uuid)> callback, -			 S32 expected_upload_cost) +			 LLAssetStorage::LLStoreAssetCallback callback, +			 S32 expected_upload_cost, +			 void *userdata)  {	  	// Generate the temporary UUID.  	std::string filename = gDirUtilp->getTempFilename(); @@ -768,9 +771,9 @@ void upload_new_resource(const std::string& src_filename, std::string name,  		{  			t_disp_name = src_filename;  		} -		upload_new_resource(tid, asset_type, name, desc, +		upload_new_resource(tid, asset_type, name, desc, compression_info, // tid  				    destination_folder_type, inv_type, next_owner_perms, group_perms, everyone_perms, -				    display_name, callback, expected_upload_cost); +				    display_name, callback, expected_upload_cost, userdata);  	}  	else  	{ @@ -889,28 +892,30 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt  		LLStringUtil::trim(asset_name);  		std::string display_name = LLStringUtil::null; +		LLAssetStorage::LLStoreAssetCallback callback = NULL; +		void *userdata = NULL;  		upload_new_resource(next_file, asset_name, asset_name,	// file -				    LLFolderType::FT_NONE, LLInventoryType::IT_NONE, +				    0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE,  				    PERM_NONE, PERM_NONE, PERM_NONE,  				    display_name, -				    NULL, -				    expected_upload_cost); // assuming next in a group of uploads is of roughly the same type, i.e. same upload cost -				 +				    callback, +				    expected_upload_cost, // assuming next in a group of uploads is of roughly the same type, i.e. same upload cost +				    userdata);  	}  } -void upload_new_resource(const LLTransactionID &tid,  -			 LLAssetType::EType asset_type, +void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_type,  			 std::string name, -			 std::string desc,  +			 std::string desc, S32 compression_info,  			 LLFolderType::EType destination_folder_type,  			 LLInventoryType::EType inv_type,  			 U32 next_owner_perms,  			 U32 group_perms,  			 U32 everyone_perms,  			 const std::string& display_name, -			 boost::function<void(const LLUUID& uuid)> callback, -			 S32 expected_upload_cost) +			 LLAssetStorage::LLStoreAssetCallback callback, +			 S32 expected_upload_cost, +			 void *userdata)  {  	if(gDisconnected)  	{ @@ -954,26 +959,79 @@ void upload_new_resource(const LLTransactionID &tid,  	upload_message.append(display_name);  	LLUploadDialog::modalUploadDialog(upload_message); +	llinfos << "*** Uploading: " << llendl; +	llinfos << "Type: " << LLAssetType::lookup(asset_type) << llendl; +	llinfos << "UUID: " << uuid << llendl; +	llinfos << "Name: " << name << llendl; +	llinfos << "Desc: " << desc << llendl; +	llinfos << "Expected Upload Cost: " << expected_upload_cost << llendl; +	lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type) << llendl; +	lldebugs << "Asset Type: " << LLAssetType::lookup(asset_type) << llendl;  	std::string url = gAgent.getRegion()->getCapability("NewFileAgentInventory"); -	 -	if (url.empty()) { -		llwarns << "Could not get NewFileAgentInventory capability" << llendl; -		return; -	} +	if (!url.empty()) +	{ +		llinfos << "New Agent Inventory via capability" << llendl; +		LLSD body; +		body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type); +		body["asset_type"] = LLAssetType::lookup(asset_type); +		body["inventory_type"] = LLInventoryType::lookup(inv_type); +		body["name"] = name; +		body["description"] = desc; +		body["next_owner_mask"] = LLSD::Integer(next_owner_perms); +		body["group_mask"] = LLSD::Integer(group_perms); +		body["everyone_mask"] = LLSD::Integer(everyone_perms); +		body["expected_upload_cost"] = LLSD::Integer(expected_upload_cost); +		 +		//std::ostringstream llsdxml; +		//LLSDSerialize::toPrettyXML(body, llsdxml); +		//llinfos << "posting body to capability: " << llsdxml.str() << llendl; -	llinfos << "New Agent Inventory via capability" << llendl; -	LLSD body; -	body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type); -	body["asset_type"] = LLAssetType::lookup(asset_type); -	body["inventory_type"] = LLInventoryType::lookup(inv_type); -	body["name"] = name; -	body["description"] = desc; -	body["next_owner_mask"] = LLSD::Integer(next_owner_perms); -	body["group_mask"] = LLSD::Integer(group_perms); -	body["everyone_mask"] = LLSD::Integer(everyone_perms); -	body["expected_upload_cost"] = LLSD::Integer(expected_upload_cost); +		LLHTTPClient::post(url, body, new LLNewAgentInventoryResponder(body, uuid, asset_type)); +	} +	else +	{ +		llinfos << "NewAgentInventory capability not found, new agent inventory via asset system." << llendl; +		// check for adequate funds +		// TODO: do this check on the sim +		if (LLAssetType::AT_SOUND == asset_type || +			LLAssetType::AT_TEXTURE == asset_type || +			LLAssetType::AT_ANIMATION == asset_type) +		{ +			S32 balance = gStatusBar->getBalance(); +			if (balance < expected_upload_cost) +			{ +				LLStringUtil::format_map_t args; +				args["NAME"] = name; +				args["AMOUNT"] = llformat("%d", expected_upload_cost); +				// insufficient funds, bail on this upload +				LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString("UploadingCosts", args), expected_upload_cost ); +				return; +			} +		} -	LLHTTPClient::post(url, body, new LLNewAgentInventoryResponder(body, uuid, asset_type, callback)); +		LLResourceData* data = new LLResourceData; +		data->mAssetInfo.mTransactionID = tid; +		data->mAssetInfo.mUuid = uuid; +		data->mAssetInfo.mType = asset_type; +		data->mAssetInfo.mCreatorID = gAgentID; +		data->mInventoryType = inv_type; +		data->mNextOwnerPerm = next_owner_perms; +		data->mExpectedUploadCost = expected_upload_cost; +		data->mUserData = userdata; +		data->mAssetInfo.setName(name); +		data->mAssetInfo.setDescription(desc); +		data->mPreferredLocation = destination_folder_type; + +		LLAssetStorage::LLStoreAssetCallback asset_callback = &upload_done_callback; +		if (callback) +		{ +			asset_callback = callback; +		} +		gAssetStorage->storeAssetData(data->mAssetInfo.mTransactionID, data->mAssetInfo.mType, +										asset_callback, +										(void*)data, +										FALSE); +	}  }  void init_menu_file() diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index 33f8243ac0..1e6d13f1c6 100644 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -34,35 +34,41 @@  #define LLVIEWERMENUFILE_H  #include "llfoldertype.h" +#include "llassetstorage.h"  #include "llinventorytype.h"  class LLTransactionID; +  void init_menu_file();  void upload_new_resource(const std::string& src_filename,   			 std::string name,  			 std::string desc,  +			 S32 compression_info,  			 LLFolderType::EType destination_folder_type,  			 LLInventoryType::EType inv_type,  			 U32 next_owner_perms,  			 U32 group_perms,  			 U32 everyone_perms,  			 const std::string& display_name, -			 boost::function<void(const LLUUID& uuid)> callback, -			 S32 expected_upload_cost); +			 LLAssetStorage::LLStoreAssetCallback callback, +			 S32 expected_upload_cost, +			 void *userdata);  void upload_new_resource(const LLTransactionID &tid,   			 LLAssetType::EType type,  			 std::string name,  			 std::string desc,  +			 S32 compression_info,  			 LLFolderType::EType destination_folder_type,  			 LLInventoryType::EType inv_type,  			 U32 next_owner_perms,  			 U32 group_perms,  			 U32 everyone_perms,  			 const std::string& display_name, -			 boost::function<void(const LLUUID& uuid)> callback, -			 S32 expected_upload_cost); +			 LLAssetStorage::LLStoreAssetCallback callback, +			 S32 expected_upload_cost, +			 void *userdata);  #endif diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index 7d81c3e551..452b2ac664 100644 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -1,166 +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" -    commit_callback.function="Snapshot.Refresh"/> -  <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"/> -  <panel -   top_pad="20" -   left="10" -   height="83" -   name="panel_snapshot_main" -   width="130"> -    <button -     label="Share Snapshot" -     name="share" -     top="0" -     left="0" -     width="130" -     commit_callback.function="Snapshot.ShowButtons" -     commit_callback.parameter="share"/> -    <button -     label="Save Snapshot" -     name="save" -     top_pad="7" +    <text +     type="string" +     font="SansSerifSmall" +     length="1" +     follows="left|top" +     height="14" +     layout="topleft" +     right="-5"       left_delta="0" -     width="130" -     commit_callback.function="Snapshot.ShowButtons" -     commit_callback.parameter="save"/> +     halign="right" +     name="file_size_label" +     top_pad="10" +     width="195"> +        [SIZE] KB +    </text>      <button -     label="Set As Profile Pic" -     name="set_profile_pic" -     top_pad="7" -     left_delta="0" -     width="130"/> -  </panel> -  <panel -   top_delta="0" -   left_delta="0" -   height="83" -   name="panel_snapshot_share" -   width="130"> +     follows="left|top" +     height="22" +     image_overlay="Refresh_Off" +     layout="topleft" +     left="10" +     name="new_snapshot_btn" +     width="23" />      <button -     label="Share to Web" -     name="share_to_web" -     top="0" -     left="0" -     visible="false" -     width="130"/> +     follows="left|top" +     height="23" +     label="Send" +     layout="topleft" +     left_pad="5" +     right="-5" +     name="send_btn" +     width="100" />      <button -     label="Email Snapshot" -     name="share_to_email" -     top_pad="7" -     left_delta="0" -     width="130"/> +     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 -     label="Back" -     name="cancel_share" -     top_pad="7" +     follows="left|top" +     height="23" +     label="Less" +     layout="topleft"       left_delta="0" -     width="130" -     commit_callback.function="Snapshot.ShowButtons" -     commit_callback.parameter="main"/> -  </panel> -  <panel -   top_delta="0" -   left_delta="0" -   height="83" -   name="panel_snapshot_save" -   width="130"> +     name="less_btn" +     tool_tip="Advanced options" +     top_delta="0" +     width="80" />      <button -     label="Save to My Inventory" -     name="save_to_inventory" -     top="0" -     left="0" -     width="130"/> -    <button -     label="Save to My Computer" -     name="save_to_computer" -     top_pad="7" +     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_delta="0" -     width="130"/> -    <button -     label="Back" -     name="cancel_save" -     top_pad="7" +     name="texture_size_combo" +     top_delta="0" +     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" -     width="130" -     commit_callback.function="Snapshot.ShowButtons" -     commit_callback.parameter="main"/> -  </panel> -  <button -   follows="left" -   height="22" -   layout="topleft" -   left="210" -   name="show_advanced" -   image_overlay="TabIcon_Close_Off" -   bottom_delta="0" -   width="30" -   commit_callback.function="Snapshot.ShowAdvanced"/> -  <button -   follows="left" -   height="22" -   layout="topleft" -   left="210" -   name="hide_advanced" -   image_overlay="TabIcon_Open_Off" -   top_delta="0" -   visible="false" -   width="30" -   commit_callback.function="Snapshot.HideAdvanced"/> -  <panel  -   visible="false" -   left="250" -   top="17" -   name="snapshot_advanced" -   filename="panel_snapshot_advanced.xml"/> +     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> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index cf3097cb06..20a2a7d954 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -4518,18 +4518,6 @@ Uploading in-world and web site snapshots...    </notification>    <notification -   icon="alertmodal.tga" -   name="UploadConfirmation" -   type="alertmodal"> -Uploading costs L$[AMOUNT]. -Do you wish to proceed? -    <usetemplate -     name="okcancelbuttons" -     notext="Cancel" -     yestext="Upload"/> -  </notification> - -  <notification     icon="notify.tga"     name="UploadPayment"     persist="true" @@ -5527,14 +5515,6 @@ Failed to find [TYPE] named [DESC] in database.    <notification     icon="notify.tga" -   name="ShareToWebFailed" -   persist="true" -   type="notify"> -    Failed to upload image to web. -  </notification> -   -  <notification -   icon="notify.tga"     name="InvalidWearable"     persist="true"     type="notify">  | 
