summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llassetuploadresponders.cpp26
-rw-r--r--indra/newview/llassetuploadresponders.h12
-rw-r--r--indra/newview/llfloateranimpreview.cpp9
-rw-r--r--indra/newview/llfloaternamedesc.cpp6
-rw-r--r--indra/newview/llfloatersnapshot.cpp708
-rw-r--r--indra/newview/llfloatersnapshot.h9
-rw-r--r--indra/newview/llviewermenufile.cpp124
-rw-r--r--indra/newview/llviewermenufile.h14
-rw-r--r--indra/newview/skins/default/xui/en/floater_snapshot.xml517
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml19
10 files changed, 834 insertions, 610 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..f798ee1a2b 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,7 @@ 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">