summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/llfloaterauction.cpp552
-rw-r--r--indra/newview/llfloaterauction.h86
-rw-r--r--indra/newview/llfloaterland.cpp25
-rw-r--r--indra/newview/llinventoryfunctions.cpp81
-rw-r--r--indra/newview/llinventoryfunctions.h2
-rw-r--r--indra/newview/lltoast.cpp15
-rw-r--r--indra/newview/lltoast.h4
-rw-r--r--indra/newview/llviewerfloaterreg.cpp2
-rw-r--r--indra/newview/llviewermenufile.cpp5
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_auction.xml96
12 files changed, 71 insertions, 801 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 23337ddbfb..923def7820 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -201,7 +201,6 @@ set(viewer_SOURCE_FILES
llflickrconnect.cpp
llfloaterabout.cpp
llfloaterbvhpreview.cpp
- llfloaterauction.cpp
llfloaterautoreplacesettings.cpp
llfloateravatar.cpp
llfloateravatarpicker.cpp
@@ -822,7 +821,6 @@ set(viewer_HEADER_FILES
llflickrconnect.h
llfloaterabout.h
llfloaterbvhpreview.h
- llfloaterauction.h
llfloaterautoreplacesettings.h
llfloateravatar.h
llfloateravatarpicker.h
diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp
deleted file mode 100644
index 56619e818a..0000000000
--- a/indra/newview/llfloaterauction.cpp
+++ /dev/null
@@ -1,552 +0,0 @@
-/**
- * @file llfloaterauction.cpp
- * @author James Cook, Ian Wilkes
- * @brief Implementation of the auction floater.
- *
- * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llfloaterauction.h"
-
-#include "llgl.h"
-#include "llimagej2c.h"
-#include "llimagetga.h"
-#include "llparcel.h"
-#include "llvfile.h"
-#include "llvfs.h"
-#include "llwindow.h"
-#include "message.h"
-
-#include "llagent.h"
-#include "llassetstorage.h"
-#include "llcombobox.h"
-#include "llestateinfomodel.h"
-#include "llmimetypes.h"
-#include "llnotifications.h"
-#include "llnotificationsutil.h"
-#include "llsavedsettingsglue.h"
-#include "llviewertexturelist.h"
-#include "llviewerparcelmgr.h"
-#include "llviewerregion.h"
-#include "lluictrlfactory.h"
-#include "llviewerwindow.h"
-#include "llviewerdisplay.h"
-#include "llviewercontrol.h"
-#include "llui.h"
-#include "llrender.h"
-#include "llsdutil.h"
-#include "llsdutil_math.h"
-#include "lltrans.h"
-#include "llcorehttputil.h"
-
-///----------------------------------------------------------------------------
-/// Local function declarations, constants, enums, and typedefs
-///----------------------------------------------------------------------------
-
-void auction_j2c_upload_done(const LLUUID& asset_id,
- void* user_data, S32 status, LLExtStat ext_status);
-void auction_tga_upload_done(const LLUUID& asset_id,
- void* user_data, S32 status, LLExtStat ext_status);
-
-///----------------------------------------------------------------------------
-/// Class llfloaterauction
-///----------------------------------------------------------------------------
-
-// Default constructor
-LLFloaterAuction::LLFloaterAuction(const LLSD& key)
- : LLFloater(key),
- mParcelID(-1)
-{
- mCommitCallbackRegistrar.add("ClickSnapshot", boost::bind(&LLFloaterAuction::onClickSnapshot, this));
- mCommitCallbackRegistrar.add("ClickSellToAnyone", boost::bind(&LLFloaterAuction::onClickSellToAnyone, this));
- mCommitCallbackRegistrar.add("ClickStartAuction", boost::bind(&LLFloaterAuction::onClickStartAuction, this));
- mCommitCallbackRegistrar.add("ClickResetParcel", boost::bind(&LLFloaterAuction::onClickResetParcel, this));
-}
-
-// Destroys the object
-LLFloaterAuction::~LLFloaterAuction()
-{
-}
-
-BOOL LLFloaterAuction::postBuild()
-{
- return TRUE;
-}
-
-void LLFloaterAuction::onOpen(const LLSD& key)
-{
- initialize();
-}
-
-void LLFloaterAuction::initialize()
-{
- mParcelUpdateCapUrl.clear();
-
- mParcelp = LLViewerParcelMgr::getInstance()->getParcelSelection();
- LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
- LLParcel* parcelp = mParcelp->getParcel();
- if(parcelp && region && !parcelp->getForSale())
- {
- mParcelHost = region->getHost();
- mParcelID = parcelp->getLocalID();
- mParcelUpdateCapUrl = region->getCapability("ParcelPropertiesUpdate");
-
- getChild<LLUICtrl>("parcel_text")->setValue(parcelp->getName());
- getChildView("snapshot_btn")->setEnabled(TRUE);
- getChildView("reset_parcel_btn")->setEnabled(TRUE);
- getChildView("start_auction_btn")->setEnabled(TRUE);
-
- U32 estate_id = LLEstateInfoModel::instance().getID();
- // Only enable "Sell to Anyone" on Teen grid or if we don't know the ID yet
- getChildView("sell_to_anyone_btn")->setEnabled(estate_id == ESTATE_TEEN || estate_id == 0);
- }
- else
- {
- mParcelHost.invalidate();
- if(parcelp && parcelp->getForSale())
- {
- getChild<LLUICtrl>("parcel_text")->setValue(getString("already for sale"));
- }
- else
- {
- getChild<LLUICtrl>("parcel_text")->setValue(LLStringUtil::null);
- }
- mParcelID = -1;
- getChildView("snapshot_btn")->setEnabled(false);
- getChildView("reset_parcel_btn")->setEnabled(false);
- getChildView("sell_to_anyone_btn")->setEnabled(false);
- getChildView("start_auction_btn")->setEnabled(false);
- }
-
- mImageID.setNull();
- mImage = NULL;
-}
-
-void LLFloaterAuction::draw()
-{
- LLFloater::draw();
-
- if(!isMinimized() && mImage.notNull())
- {
- LLView* snapshot_icon = findChildView("snapshot_icon");
- if (snapshot_icon)
- {
- LLRect rect = snapshot_icon->getRect();
- {
- gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- gl_rect_2d(rect, LLColor4(0.f, 0.f, 0.f, 1.f));
- rect.stretch(-1);
- }
- {
- LLGLSUIDefault gls_ui;
- gGL.color3f(1.f, 1.f, 1.f);
- gl_draw_scaled_image(rect.mLeft,
- rect.mBottom,
- rect.getWidth(),
- rect.getHeight(),
- mImage);
- }
- }
- }
-}
-
-
-// static
-void LLFloaterAuction::onClickSnapshot(void* data)
-{
- LLFloaterAuction* self = (LLFloaterAuction*)(data);
-
- LLPointer<LLImageRaw> raw = new LLImageRaw;
-
- gForceRenderLandFence = self->getChild<LLUICtrl>("fence_check")->getValue().asBoolean();
- BOOL success = gViewerWindow->rawSnapshot(raw,
- gViewerWindow->getWindowWidthScaled(),
- gViewerWindow->getWindowHeightScaled(),
- TRUE, FALSE,
- FALSE, FALSE);
- gForceRenderLandFence = FALSE;
-
- if (success)
- {
- self->mTransactionID.generate();
- self->mImageID = self->mTransactionID.makeAssetID(gAgent.getSecureSessionID());
-
- if(!gSavedSettings.getBOOL("QuietSnapshotsToDisk"))
- {
- gViewerWindow->playSnapshotAnimAndSound();
- }
- LL_INFOS() << "Writing TGA..." << LL_ENDL;
-
- LLPointer<LLImageTGA> tga = new LLImageTGA;
- tga->encode(raw);
- LLVFile::writeFile(tga->getData(), tga->getDataSize(), gVFS, self->mImageID, LLAssetType::AT_IMAGE_TGA);
-
- raw->biasedScaleToPowerOfTwo(LLViewerTexture::MAX_IMAGE_SIZE_DEFAULT);
-
- LL_INFOS() << "Writing J2C..." << LL_ENDL;
-
- LLPointer<LLImageJ2C> j2c = new LLImageJ2C;
- j2c->encode(raw, 0.0f);
- LLVFile::writeFile(j2c->getData(), j2c->getDataSize(), gVFS, self->mImageID, LLAssetType::AT_TEXTURE);
-
- self->mImage = LLViewerTextureManager::getLocalTexture((LLImageRaw*)raw, FALSE);
- gGL.getTexUnit(0)->bind(self->mImage);
- self->mImage->setAddressMode(LLTexUnit::TAM_CLAMP);
- }
- else
- {
- LL_WARNS() << "Unable to take snapshot" << LL_ENDL;
- }
-}
-
-// static
-void LLFloaterAuction::onClickStartAuction(void* data)
-{
- LLFloaterAuction* self = (LLFloaterAuction*)(data);
-
- if(self->mImageID.notNull())
- {
- LLSD parcel_name = self->getChild<LLUICtrl>("parcel_text")->getValue();
-
- // create the asset
- std::string* name = new std::string(parcel_name.asString());
- gAssetStorage->storeAssetData(self->mTransactionID, LLAssetType::AT_IMAGE_TGA,
- &auction_tga_upload_done,
- (void*)name,
- FALSE);
- self->getWindow()->incBusyCount();
-
- std::string* j2c_name = new std::string(parcel_name.asString());
- gAssetStorage->storeAssetData(self->mTransactionID, LLAssetType::AT_TEXTURE,
- &auction_j2c_upload_done,
- (void*)j2c_name,
- FALSE);
- self->getWindow()->incBusyCount();
-
- LLNotificationsUtil::add("UploadingAuctionSnapshot");
-
- }
- LLMessageSystem* msg = gMessageSystem;
-
- msg->newMessage("ViewerStartAuction");
-
- msg->nextBlock("AgentData");
- msg->addUUID("AgentID", gAgent.getID());
- msg->addUUID("SessionID", gAgent.getSessionID());
- msg->nextBlock("ParcelData");
- msg->addS32("LocalID", self->mParcelID);
- msg->addUUID("SnapshotID", self->mImageID);
- msg->sendReliable(self->mParcelHost);
-
- // clean up floater, and get out
- self->cleanupAndClose();
-}
-
-
-void LLFloaterAuction::cleanupAndClose()
-{
- mImageID.setNull();
- mImage = NULL;
- mParcelID = -1;
- mParcelHost.invalidate();
- closeFloater();
-}
-
-
-
-// static glue
-void LLFloaterAuction::onClickResetParcel(void* data)
-{
- LLFloaterAuction* self = (LLFloaterAuction*)(data);
- if (self)
- {
- self->doResetParcel();
- }
-}
-
-
-// Reset all the values for the parcel in preparation for a sale
-void LLFloaterAuction::doResetParcel()
-{
- LLParcel* parcelp = mParcelp->getParcel();
- LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
-
- if (parcelp
- && region
- && !mParcelUpdateCapUrl.empty())
- {
- LLSD body;
- std::string empty;
-
- // request new properties update from simulator
- U32 message_flags = 0x01;
- body["flags"] = ll_sd_from_U32(message_flags);
-
- // Set all the default parcel properties for auction
- body["local_id"] = parcelp->getLocalID();
-
- U32 parcel_flags = PF_ALLOW_LANDMARK |
- PF_ALLOW_FLY |
- PF_CREATE_GROUP_OBJECTS |
- PF_ALLOW_ALL_OBJECT_ENTRY |
- PF_ALLOW_GROUP_OBJECT_ENTRY |
- PF_ALLOW_GROUP_SCRIPTS |
- PF_RESTRICT_PUSHOBJECT |
- PF_SOUND_LOCAL |
- PF_ALLOW_VOICE_CHAT |
- PF_USE_ESTATE_VOICE_CHAN;
-
- body["parcel_flags"] = ll_sd_from_U32(parcel_flags);
-
- // Build a parcel name like "Ahern (128,128) PG 4032m"
- std::ostringstream parcel_name;
- LLVector3 center_point( parcelp->getCenterpoint() );
- center_point.snap(0); // Get rid of fractions
- parcel_name << region->getName()
- << " ("
- << (S32) center_point.mV[VX]
- << ","
- << (S32) center_point.mV[VY]
- << ") "
- << region->getSimAccessString()
- << " "
- << parcelp->getArea()
- << "m";
-
- std::string new_name(parcel_name.str().c_str());
- body["name"] = new_name;
- getChild<LLUICtrl>("parcel_text")->setValue(new_name); // Set name in dialog as well, since it won't get updated otherwise
-
- body["sale_price"] = (S32) 0;
- body["description"] = empty;
- body["music_url"] = empty;
- body["media_url"] = empty;
- body["media_desc"] = empty;
- body["media_type"] = LLMIMETypes::getDefaultMimeType();
- body["media_width"] = (S32) 0;
- body["media_height"] = (S32) 0;
- body["auto_scale"] = (S32) 0;
- body["media_loop"] = (S32) 0;
- body["obscure_media"] = (S32) 0; // OBSOLETE - no longer used
- body["obscure_music"] = (S32) 0; // OBSOLETE - no longer used
- body["media_id"] = LLUUID::null;
- body["group_id"] = MAINTENANCE_GROUP_ID; // Use maintenance group
- body["pass_price"] = (S32) 10; // Defaults to $10
- body["pass_hours"] = 0.0f;
- body["category"] = (U8) LLParcel::C_NONE;
- body["auth_buyer_id"] = LLUUID::null;
- body["snapshot_id"] = LLUUID::null;
- body["user_location"] = ll_sd_from_vector3( LLVector3::zero );
- body["user_look_at"] = ll_sd_from_vector3( LLVector3::zero );
- body["landing_type"] = (U8) LLParcel::L_DIRECT;
-
- LL_INFOS() << "Sending parcel update to reset for auction via capability to: "
- << mParcelUpdateCapUrl << LL_ENDL;
-
- LLCoreHttpUtil::HttpCoroutineAdapter::messageHttpPost(mParcelUpdateCapUrl, body,
- "Parcel reset for auction",
- "Parcel not set for auction.");
-
- // Send a message to clear the object return time
- LLMessageSystem *msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_ParcelSetOtherCleanTime);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->nextBlockFast(_PREHASH_ParcelData);
- msg->addS32Fast(_PREHASH_LocalID, parcelp->getLocalID());
- msg->addS32Fast(_PREHASH_OtherCleanTime, 5); // 5 minute object auto-return
-
- msg->sendReliable(region->getHost());
-
- // Clear the access lists
- clearParcelAccessList(parcelp, region, AL_ACCESS);
- clearParcelAccessList(parcelp, region, AL_BAN);
- clearParcelAccessList(parcelp, region, AL_ALLOW_EXPERIENCE);
- clearParcelAccessList(parcelp, region, AL_BLOCK_EXPERIENCE);
- }
-}
-
-
-
-void LLFloaterAuction::clearParcelAccessList(LLParcel* parcel, LLViewerRegion* region, U32 list)
-{
- if (!region || !parcel) return;
-
- LLUUID transactionUUID;
- transactionUUID.generate();
-
- LLMessageSystem* msg = gMessageSystem;
-
- msg->newMessageFast(_PREHASH_ParcelAccessListUpdate);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
- msg->nextBlockFast(_PREHASH_Data);
- msg->addU32Fast(_PREHASH_Flags, list);
- msg->addS32(_PREHASH_LocalID, parcel->getLocalID() );
- msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID);
- msg->addS32Fast(_PREHASH_SequenceID, 1); // sequence_id
- msg->addS32Fast(_PREHASH_Sections, 0); // num_sections
-
- // pack an empty block since there will be no data
- msg->nextBlockFast(_PREHASH_List);
- msg->addUUIDFast(_PREHASH_ID, LLUUID::null );
- msg->addS32Fast(_PREHASH_Time, 0 );
- msg->addU32Fast(_PREHASH_Flags, 0 );
-
- msg->sendReliable( region->getHost() );
-}
-
-
-
-// static - 'Sell to Anyone' clicked, throw up a confirmation dialog
-void LLFloaterAuction::onClickSellToAnyone(void* data)
-{
- LLFloaterAuction* self = (LLFloaterAuction*)(data);
- if (self)
- {
- LLParcel* parcelp = self->mParcelp->getParcel();
-
- // Do a confirmation
- S32 sale_price = parcelp->getArea(); // Selling for L$1 per meter
- S32 area = parcelp->getArea();
-
- LLSD args;
- args["LAND_SIZE"] = llformat("%d", area);
- args["SALE_PRICE"] = llformat("%d", sale_price);
- args["NAME"] = LLTrans::getString("Anyone");
-
- LLNotification::Params params("ConfirmLandSaleChange"); // Re-use existing dialog
- params.substitutions(args)
- .functor.function(boost::bind(&LLFloaterAuction::onSellToAnyoneConfirmed, self, _1, _2));
-
- params.name("ConfirmLandSaleToAnyoneChange");
-
- // ask away
- LLNotifications::instance().add(params);
- }
-}
-
-
-// Sell confirmation clicked
-bool LLFloaterAuction::onSellToAnyoneConfirmed(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- if (option == 0)
- {
- doSellToAnyone();
- }
-
- return false;
-}
-
-
-
-// Reset all the values for the parcel in preparation for a sale
-void LLFloaterAuction::doSellToAnyone()
-{
- LLParcel* parcelp = mParcelp->getParcel();
- LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
-
- if (parcelp
- && region
- && !mParcelUpdateCapUrl.empty())
- {
- LLSD body;
- std::string empty;
-
- // request new properties update from simulator
- U32 message_flags = 0x01;
- body["flags"] = ll_sd_from_U32(message_flags);
-
- // Set all the default parcel properties for auction
- body["local_id"] = parcelp->getLocalID();
-
- // Set 'for sale' flag
- U32 parcel_flags = parcelp->getParcelFlags() | PF_FOR_SALE;
- // Ensure objects not included
- parcel_flags &= ~PF_FOR_SALE_OBJECTS;
- body["parcel_flags"] = ll_sd_from_U32(parcel_flags);
-
- body["sale_price"] = parcelp->getArea(); // Sell for L$1 per square meter
- body["auth_buyer_id"] = LLUUID::null; // To anyone
-
- LL_INFOS() << "Sending parcel update to sell to anyone for L$1 via capability to: "
- << mParcelUpdateCapUrl << LL_ENDL;
-
- LLCoreHttpUtil::HttpCoroutineAdapter::messageHttpPost(mParcelUpdateCapUrl, body,
- "Parcel set as sell to everyone.",
- "Parcel sell to everyone failed.");
-
- // clean up floater, and get out
- cleanupAndClose();
- }
-}
-
-
-///----------------------------------------------------------------------------
-/// Local function definitions
-///----------------------------------------------------------------------------
-
-void auction_tga_upload_done(const LLUUID& asset_id, void* user_data, S32 status, LLExtStat ext_status) // StoreAssetData callback (fixed)
-{
- std::string* name = (std::string*)(user_data);
- LL_INFOS() << "Upload of asset '" << *name << "' " << asset_id
- << " returned " << status << LL_ENDL;
- delete name;
-
- gViewerWindow->getWindow()->decBusyCount();
-
- if (0 == status)
- {
- LLNotificationsUtil::add("UploadWebSnapshotDone");
- }
- else
- {
- LLSD args;
- args["REASON"] = std::string(LLAssetStorage::getErrorString(status));
- LLNotificationsUtil::add("UploadAuctionSnapshotFail", args);
- }
-}
-
-void auction_j2c_upload_done(const LLUUID& asset_id, void* user_data, S32 status, LLExtStat ext_status) // StoreAssetData callback (fixed)
-{
- std::string* name = (std::string*)(user_data);
- LL_INFOS() << "Upload of asset '" << *name << "' " << asset_id
- << " returned " << status << LL_ENDL;
- delete name;
-
- gViewerWindow->getWindow()->decBusyCount();
-
- if (0 == status)
- {
- LLNotificationsUtil::add("UploadSnapshotDone");
- }
- else
- {
- LLSD args;
- args["REASON"] = std::string(LLAssetStorage::getErrorString(status));
- LLNotificationsUtil::add("UploadAuctionSnapshotFail", args);
- }
-}
diff --git a/indra/newview/llfloaterauction.h b/indra/newview/llfloaterauction.h
deleted file mode 100644
index c83a11ba8b..0000000000
--- a/indra/newview/llfloaterauction.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * @file llfloaterauction.h
- * @author James Cook, Ian Wilkes
- * @brief llfloaterauction class header file
- *
- * $LicenseInfo:firstyear=2004&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLFLOATERAUCTION_H
-#define LL_LLFLOATERAUCTION_H
-
-#include "llfloater.h"
-#include "lluuid.h"
-#include "llpointer.h"
-#include "llviewertexture.h"
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLFloaterAuction
-//
-// Class which holds the functionality to start auctions.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLParcelSelection;
-class LLParcel;
-class LLViewerRegion;
-
-class LLFloaterAuction : public LLFloater
-{
- friend class LLFloaterReg;
-public:
- // LLFloater interface
- /*virtual*/ void onOpen(const LLSD& key);
- /*virtual*/ void draw();
-
-private:
-
- LLFloaterAuction(const LLSD& key);
- ~LLFloaterAuction();
-
- void initialize();
-
- static void onClickSnapshot(void* data);
- static void onClickResetParcel(void* data);
- static void onClickSellToAnyone(void* data); // Sell to anyone clicked
- bool onSellToAnyoneConfirmed(const LLSD& notification, const LLSD& response); // Sell confirmation clicked
- static void onClickStartAuction(void* data);
-
- /*virtual*/ BOOL postBuild();
-
- void doResetParcel();
- void doSellToAnyone();
- void clearParcelAccessList( LLParcel* parcel, LLViewerRegion* region, U32 list);
- void cleanupAndClose();
-
-private:
-
- LLTransactionID mTransactionID;
- LLAssetID mImageID;
- LLPointer<LLViewerTexture> mImage;
- LLSafeHandle<LLParcelSelection> mParcelp;
- S32 mParcelID;
- LLHost mParcelHost;
-
- std::string mParcelUpdateCapUrl; // "ParcelPropertiesUpdate" capability
-};
-
-
-#endif // LL_LLFLOATERAUCTION_H
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 88b3fb7b96..596b04c31c 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -45,7 +45,6 @@
#include "llcombobox.h"
#include "llfloaterreg.h"
#include "llfloateravatarpicker.h"
-#include "llfloaterauction.h"
#include "llfloatergroups.h"
#include "llfloaterscriptlimits.h"
#include "llavataractions.h"
@@ -79,6 +78,7 @@
#include "llpanelexperiencelisteditor.h"
#include "llpanelexperiencepicker.h"
#include "llexperiencecache.h"
+#include "llweb.h"
#include "llgroupactions.h"
@@ -542,7 +542,6 @@ void LLPanelLandGeneral::refresh()
mBtnDeedToGroup->setEnabled(FALSE);
mBtnSetGroup->setEnabled(FALSE);
- mBtnStartAuction->setEnabled(FALSE);
mCheckDeedToGroup ->set(FALSE);
mCheckDeedToGroup ->setEnabled(FALSE);
@@ -640,7 +639,6 @@ void LLPanelLandGeneral::refresh()
mTextClaimDate->setEnabled(FALSE);
mTextGroup->setText(getString("none_text"));
mTextGroup->setEnabled(FALSE);
- mBtnStartAuction->setEnabled(FALSE);
}
else
{
@@ -692,11 +690,6 @@ void LLPanelLandGeneral::refresh()
LLStringUtil::format (claim_date_str, substitution);
mTextClaimDate->setText(claim_date_str);
mTextClaimDate->setEnabled(is_leased);
-
- BOOL enable_auction = (gAgent.getGodLevel() >= GOD_LIAISON)
- && (owner_id == GOVERNOR_LINDEN_ID)
- && (parcel->getAuctionID() == 0);
- mBtnStartAuction->setEnabled(enable_auction);
}
// Display options
@@ -1024,20 +1017,8 @@ void LLPanelLandGeneral::onClickBuyPass(void* data)
// static
void LLPanelLandGeneral::onClickStartAuction(void* data)
{
- LLPanelLandGeneral* panelp = (LLPanelLandGeneral*)data;
- LLParcel* parcelp = panelp->mParcel->getParcel();
- if(parcelp)
- {
- if(parcelp->getForSale())
- {
- LLNotificationsUtil::add("CannotStartAuctionAlreadyForSale");
- }
- else
- {
- //LLFloaterAuction::showInstance();
- LLFloaterReg::showInstance("auction");
- }
- }
+ std::string auction_url = "https://places.[GRID]/auctions/";
+ LLWeb::loadURLExternal(LLWeb::expandURLSubstitutions(auction_url, LLSD()));
}
// static
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 0da4331af8..030c967019 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -398,61 +398,66 @@ void copy_inventory_category(LLInventoryModel* model,
LLViewerInventoryCategory* cat,
const LLUUID& parent_id,
const LLUUID& root_copy_id,
- bool move_no_copy_items )
+ bool move_no_copy_items )
{
// Create the initial folder
- LLUUID new_cat_uuid = gInventory.createNewCategory(parent_id, LLFolderType::FT_NONE, cat->getName());
+ inventory_func_type func = boost::bind(&copy_inventory_category_content, _1, model, cat, root_copy_id, move_no_copy_items);
+ gInventory.createNewCategory(parent_id, LLFolderType::FT_NONE, cat->getName(), func);
+}
+
+void copy_inventory_category_content(const LLUUID& new_cat_uuid, LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& root_copy_id, bool move_no_copy_items)
+{
model->notifyObservers();
-
+
// We need to exclude the initial root of the copy to avoid recursively copying the copy, etc...
LLUUID root_id = (root_copy_id.isNull() ? new_cat_uuid : root_copy_id);
// Get the content of the folder
LLInventoryModel::cat_array_t* cat_array;
LLInventoryModel::item_array_t* item_array;
- gInventory.getDirectDescendentsOf(cat->getUUID(),cat_array,item_array);
-
- // If root_copy_id is null, tell the marketplace model we'll be waiting for new items to be copied over for this folder
- if (root_copy_id.isNull())
- {
- LLMarketplaceData::instance().setValidationWaiting(root_id,count_descendants_items(cat->getUUID()));
- }
+ gInventory.getDirectDescendentsOf(cat->getUUID(), cat_array, item_array);
+
+ // If root_copy_id is null, tell the marketplace model we'll be waiting for new items to be copied over for this folder
+ if (root_copy_id.isNull())
+ {
+ LLMarketplaceData::instance().setValidationWaiting(root_id, count_descendants_items(cat->getUUID()));
+ }
// Copy all the items
LLInventoryModel::item_array_t item_array_copy = *item_array;
for (LLInventoryModel::item_array_t::iterator iter = item_array_copy.begin(); iter != item_array_copy.end(); iter++)
{
LLInventoryItem* item = *iter;
- LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(update_folder_cb, new_cat_uuid));
+ LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(update_folder_cb, new_cat_uuid));
- if (item->getIsLinkType())
- {
- link_inventory_object(new_cat_uuid, item->getLinkedUUID(), cb);
- }
- else if(!item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID()))
- {
- // If the item is nocopy, we do nothing or, optionally, move it
- if (move_no_copy_items)
- {
- // Reparent the item
- LLViewerInventoryItem * viewer_inv_item = (LLViewerInventoryItem *) item;
- gInventory.changeItemParent(viewer_inv_item, new_cat_uuid, true);
- }
- // Decrement the count in root_id since that one item won't be copied over
- LLMarketplaceData::instance().decrementValidationWaiting(root_id);
- }
- else
- {
- copy_inventory_item(
- gAgent.getID(),
- item->getPermissions().getOwner(),
- item->getUUID(),
- new_cat_uuid,
- std::string(),
- cb);
- }
+ if (item->getIsLinkType())
+ {
+ link_inventory_object(new_cat_uuid, item->getLinkedUUID(), cb);
+ }
+ else if (!item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID()))
+ {
+ // If the item is nocopy, we do nothing or, optionally, move it
+ if (move_no_copy_items)
+ {
+ // Reparent the item
+ LLViewerInventoryItem * viewer_inv_item = (LLViewerInventoryItem *)item;
+ gInventory.changeItemParent(viewer_inv_item, new_cat_uuid, true);
+ }
+ // Decrement the count in root_id since that one item won't be copied over
+ LLMarketplaceData::instance().decrementValidationWaiting(root_id);
+ }
+ else
+ {
+ copy_inventory_item(
+ gAgent.getID(),
+ item->getPermissions().getOwner(),
+ item->getUUID(),
+ new_cat_uuid,
+ std::string(),
+ cb);
+ }
}
-
+
// Copy all the folders
LLInventoryModel::cat_array_t cat_array_copy = *cat_array;
for (LLInventoryModel::cat_array_t::iterator iter = cat_array_copy.begin(); iter != cat_array_copy.end(); iter++)
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index d454d7e00b..fd106bc2d8 100644
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -72,6 +72,8 @@ void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::s
void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& parent_id, const LLUUID& root_copy_id = LLUUID::null, bool move_no_copy_items = false);
+void copy_inventory_category_content(const LLUUID& new_cat_uuid, LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& root_copy_id, bool move_no_copy_items);
+
// Generates a string containing the path to the item specified by item_id.
void append_path(const LLUUID& id, std::string& path);
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index edde7c8076..b9b05966bc 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -34,6 +34,7 @@
#include "llviewercontrol.h"
using namespace LLNotificationsUI;
+std::list<LLToast*> LLToast::sModalToastsList;
//--------------------------------------------------------------------------
LLToastLifeTimer::LLToastLifeTimer(LLToast* toast, F32 period)
@@ -143,6 +144,11 @@ LLToast::LLToast(const LLToast::Params& p)
{
mOnDeleteToastSignal.connect(p.on_delete_toast());
}
+
+ if (isModal())
+ {
+ sModalToastsList.push_front(this);
+ }
}
void LLToast::reshape(S32 width, S32 height, BOOL called_from_parent)
@@ -187,6 +193,15 @@ LLToast::~LLToast()
{
mOnToastDestroyedSignal(this);
}
+
+ if (isModal())
+ {
+ std::list<LLToast*>::iterator iter = std::find(sModalToastsList.begin(), sModalToastsList.end(), this);
+ if (iter != sModalToastsList.end())
+ {
+ sModalToastsList.erase(iter);
+ }
+ }
}
//--------------------------------------------------------------------------
diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h
index cd92189012..69074b1670 100644
--- a/indra/newview/lltoast.h
+++ b/indra/newview/lltoast.h
@@ -108,6 +108,8 @@ public:
static void updateClass();
static void cleanupToasts();
+ static BOOL isAlertToastShown() { return sModalToastsList.size() > 0; }
+
LLToast(const LLToast::Params& p);
virtual ~LLToast();
BOOL postBuild();
@@ -245,6 +247,8 @@ private:
commit_signal_t mToastMouseEnterSignal;
commit_signal_t mToastMouseLeaveSignal;
+
+ static std::list<LLToast*> sModalToastsList;
};
}
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 0ebacddd9b..55317bdaf5 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -34,7 +34,6 @@
#include "llcompilequeue.h"
#include "llfasttimerview.h"
#include "llfloaterabout.h"
-#include "llfloaterauction.h"
#include "llfloaterautoreplacesettings.h"
#include "llfloateravatar.h"
#include "llfloateravatarpicker.h"
@@ -194,7 +193,6 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("about_land", "floater_about_land.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLand>);
LLFloaterReg::add("appearance", "floater_my_appearance.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
LLFloaterReg::add("associate_listing", "floater_associate_listing.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAssociateListing>);
- LLFloaterReg::add("auction", "floater_auction.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAuction>);
LLFloaterReg::add("avatar", "floater_avatar.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatar>);
LLFloaterReg::add("avatar_picker", "floater_avatar_picker.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarPicker>);
LLFloaterReg::add("avatar_render_settings", "floater_avatar_render_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarRenderSettings>);
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 90355b7166..e4525609c2 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -46,6 +46,7 @@
#include "llimagetga.h"
#include "llinventorymodel.h" // gInventory
#include "llresourcedata.h"
+#include "lltoast.h"
#include "llfloaterperms.h"
#include "llstatusbar.h"
#include "llviewercontrol.h" // gSavedSettings
@@ -482,7 +483,7 @@ class LLFileEnableCloseWindow : public view_listener_t
bool frontmost_fl_exists = (NULL != gFloaterView->getFrontmostClosableFloater());
bool frontmost_snapshot_fl_exists = (NULL != gSnapshotFloaterView->getFrontmostClosableFloater());
- return frontmost_fl_exists || frontmost_snapshot_fl_exists;
+ return !LLNotificationsUI::LLToast::isAlertToastShown() && (frontmost_fl_exists || frontmost_snapshot_fl_exists);
}
};
@@ -519,7 +520,7 @@ class LLFileEnableCloseAllWindows : public view_listener_t
bool is_floaters_snapshot_opened = (floater_snapshot && floater_snapshot->isInVisibleChain())
|| (floater_outfit_snapshot && floater_outfit_snapshot->isInVisibleChain());
bool open_children = gFloaterView->allChildrenClosed() && !is_floaters_snapshot_opened;
- return !open_children;
+ return !open_children && !LLNotificationsUI::LLToast::isAlertToastShown();
}
};
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 535af317d9..cf843a07a6 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -502,7 +502,7 @@
name="Buy Land..."
width="130" />
<button
- enabled="false"
+ enabled="true"
follows="left|top"
height="23"
label="Linden Sale"
diff --git a/indra/newview/skins/default/xui/en/floater_auction.xml b/indra/newview/skins/default/xui/en/floater_auction.xml
deleted file mode 100644
index 9c6d114c4c..0000000000
--- a/indra/newview/skins/default/xui/en/floater_auction.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- can_resize="true"
- height="412"
- layout="topleft"
- min_height="412"
- min_width="420"
- name="floater_auction"
- help_topic="floater_auction"
- title="START LINDEN LAND SALE"
- width="420">
- <floater.string
- name="already for sale">
- You cannot auction parcels which are already for sale.
- </floater.string>
- <icon
- bottom="280"
- follows="left|right|top|bottom"
- layout="topleft"
- left="4"
- name="snapshot_icon"
- right="-4"
- top="24" />
- <text
- follows="left|right|bottom"
- height="16"
- layout="topleft"
- left_delta="0"
- name="parcel_text"
- top_pad="12"
- width="400" />
- <check_box
- control_name="AuctionShowFence"
- follows="left|bottom"
- height="16"
- initial_value="true"
- label="Include yellow selection fence"
- layout="topleft"
- left_delta="0"
- name="fence_check"
- top_pad="12"
- width="199" />
- <button
- follows="left|bottom"
- height="20"
- label="Snapshot"
- label_selected="Snapshot"
- layout="topleft"
- left_delta="0"
- name="snapshot_btn"
- top_pad="4"
- width="150">
- <button.commit_callback
- function="ClickSnapshot" />
- </button>
- <button
- follows="left|bottom"
- height="20"
- label="Sell to Anyone"
- label_selected="Sell to Anyone"
- layout="topleft"
- left_delta="0"
- name="sell_to_anyone_btn"
- top_pad="4"
- width="150">
- <button.commit_callback
- function="ClickSellToAnyone" />
- </button>
- <button
- follows="left|bottom"
- height="20"
- label="Clear Settings"
- label_selected="Clear Settings"
- layout="topleft"
- left_delta="0"
- name="reset_parcel_btn"
- top_pad="4"
- width="150">
- <button.commit_callback
- function="ClickResetParcel" />
- </button>
- <button
- follows="left|bottom"
- height="20"
- label="Start Auction"
- label_selected="Start Auction"
- layout="topleft"
- left_pad="4"
- name="start_auction_btn"
- top_delta="0"
- width="150">
- <button.commit_callback
- function="ClickStartAuction" />
- </button>
-</floater>