diff options
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/CMakeLists.txt | 2 | ||||
-rw-r--r-- | indra/newview/llfloaterauction.cpp | 552 | ||||
-rw-r--r-- | indra/newview/llfloaterauction.h | 86 | ||||
-rw-r--r-- | indra/newview/llfloaterland.cpp | 25 | ||||
-rw-r--r-- | indra/newview/llinventoryfunctions.cpp | 81 | ||||
-rw-r--r-- | indra/newview/llinventoryfunctions.h | 2 | ||||
-rw-r--r-- | indra/newview/lltoast.cpp | 15 | ||||
-rw-r--r-- | indra/newview/lltoast.h | 4 | ||||
-rw-r--r-- | indra/newview/llviewerfloaterreg.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llviewermenufile.cpp | 5 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_about_land.xml | 2 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_auction.xml | 96 |
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(©_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> |