summaryrefslogtreecommitdiff
path: root/indra/newview/llfloaterbuyland.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llfloaterbuyland.cpp')
-rw-r--r--indra/newview/llfloaterbuyland.cpp2236
1 files changed, 1118 insertions, 1118 deletions
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 464e7ff4a2..ac45e50c08 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -1,25 +1,25 @@
-/**
+/**
* @file llfloaterbuyland.cpp
* @brief LLFloaterBuyLand class implementation
*
* $LicenseInfo:firstyear=2005&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$
*/
@@ -67,205 +67,205 @@
const F32 GROUP_LAND_BONUS_FACTOR = 1.1f;
class LLFloaterBuyLandUI
-: public LLFloater
+: public LLFloater
{
public:
- LLFloaterBuyLandUI(const LLSD& key);
- virtual ~LLFloaterBuyLandUI();
-
- /*virtual*/ void onClose(bool app_quitting);
+ LLFloaterBuyLandUI(const LLSD& key);
+ virtual ~LLFloaterBuyLandUI();
+
+ /*virtual*/ void onClose(bool app_quitting);
- // Left padding for maturity rating icon.
- static const S32 ICON_PAD = 2;
+ // Left padding for maturity rating icon.
+ static const S32 ICON_PAD = 2;
private:
- class SelectionObserver : public LLParcelObserver
- {
- public:
- SelectionObserver(LLFloaterBuyLandUI* floater) : mFloater(floater) {}
- virtual void changed();
- private:
- LLFloaterBuyLandUI* mFloater;
- };
-
+ class SelectionObserver : public LLParcelObserver
+ {
+ public:
+ SelectionObserver(LLFloaterBuyLandUI* floater) : mFloater(floater) {}
+ virtual void changed();
+ private:
+ LLFloaterBuyLandUI* mFloater;
+ };
+
private:
- SelectionObserver mParcelSelectionObserver;
- LLViewerRegion* mRegion;
- LLParcelSelectionHandle mParcel;
- bool mIsClaim;
- bool mIsForGroup;
-
- bool mCanBuy;
- bool mCannotBuyIsError;
- std::string mCannotBuyReason;
- std::string mCannotBuyURI;
-
- bool mBought;
-
- // information about the agent
- S32 mAgentCommittedTier;
- S32 mAgentCashBalance;
- bool mAgentHasNeverOwnedLand;
-
- // information about the parcel
- bool mParcelValid;
- bool mParcelIsForSale;
- bool mParcelIsGroupLand;
- S32 mParcelGroupContribution;
- S32 mParcelPrice;
- S32 mParcelActualArea;
- S32 mParcelBillableArea;
- S32 mParcelSupportedObjects;
- bool mParcelSoldWithObjects;
- std::string mParcelLocation;
- LLUUID mParcelSnapshot;
- std::string mParcelSellerName;
-
- // user's choices
- S32 mUserPlanChoice;
-
- // from website
- bool mSiteValid;
- bool mSiteMembershipUpgrade;
- std::string mSiteMembershipAction;
- std::vector<std::string>
- mSiteMembershipPlanIDs;
- std::vector<std::string>
- mSiteMembershipPlanNames;
- bool mSiteLandUseUpgrade;
- std::string mSiteLandUseAction;
- std::string mSiteConfirm;
-
- // values in current Preflight transaction... used to avoid extra
- // preflights when the parcel manager goes update crazy
- S32 mPreflightAskBillableArea;
- S32 mPreflightAskCurrencyBuy;
-
- LLViewChildren mChildren;
- LLCurrencyUIManager mCurrency;
-
- enum TransactionType
- {
- TransactionPreflight,
- TransactionCurrency,
- TransactionBuy
- };
- LLXMLRPCTransaction* mTransaction;
- TransactionType mTransactionType;
-
- LLViewerParcelMgr::ParcelBuyInfo* mParcelBuyInfo;
-
+ SelectionObserver mParcelSelectionObserver;
+ LLViewerRegion* mRegion;
+ LLParcelSelectionHandle mParcel;
+ bool mIsClaim;
+ bool mIsForGroup;
+
+ bool mCanBuy;
+ bool mCannotBuyIsError;
+ std::string mCannotBuyReason;
+ std::string mCannotBuyURI;
+
+ bool mBought;
+
+ // information about the agent
+ S32 mAgentCommittedTier;
+ S32 mAgentCashBalance;
+ bool mAgentHasNeverOwnedLand;
+
+ // information about the parcel
+ bool mParcelValid;
+ bool mParcelIsForSale;
+ bool mParcelIsGroupLand;
+ S32 mParcelGroupContribution;
+ S32 mParcelPrice;
+ S32 mParcelActualArea;
+ S32 mParcelBillableArea;
+ S32 mParcelSupportedObjects;
+ bool mParcelSoldWithObjects;
+ std::string mParcelLocation;
+ LLUUID mParcelSnapshot;
+ std::string mParcelSellerName;
+
+ // user's choices
+ S32 mUserPlanChoice;
+
+ // from website
+ bool mSiteValid;
+ bool mSiteMembershipUpgrade;
+ std::string mSiteMembershipAction;
+ std::vector<std::string>
+ mSiteMembershipPlanIDs;
+ std::vector<std::string>
+ mSiteMembershipPlanNames;
+ bool mSiteLandUseUpgrade;
+ std::string mSiteLandUseAction;
+ std::string mSiteConfirm;
+
+ // values in current Preflight transaction... used to avoid extra
+ // preflights when the parcel manager goes update crazy
+ S32 mPreflightAskBillableArea;
+ S32 mPreflightAskCurrencyBuy;
+
+ LLViewChildren mChildren;
+ LLCurrencyUIManager mCurrency;
+
+ enum TransactionType
+ {
+ TransactionPreflight,
+ TransactionCurrency,
+ TransactionBuy
+ };
+ LLXMLRPCTransaction* mTransaction;
+ TransactionType mTransactionType;
+
+ LLViewerParcelMgr::ParcelBuyInfo* mParcelBuyInfo;
+
public:
- void setForGroup(bool is_for_group);
- void setParcel(LLViewerRegion* region, LLParcelSelectionHandle parcel);
-
- void updateAgentInfo();
- void updateParcelInfo();
- void updateCovenantInfo();
- static void onChangeAgreeCovenant(LLUICtrl* ctrl, void* user_data);
- void updateFloaterCovenantText(const std::string& string, const LLUUID &asset_id);
- void updateFloaterEstateName(const std::string& name);
- void updateFloaterLastModified(const std::string& text);
- void updateFloaterEstateOwnerName(const std::string& name);
- void updateWebSiteInfo();
- void finishWebSiteInfo();
-
- void runWebSitePrep(const std::string& password);
- void finishWebSitePrep();
- void sendBuyLand();
-
- void updateNames();
- // Name cache callback
- void updateGroupName(const LLUUID& id,
- const std::string& name,
- bool is_group);
-
- void refreshUI();
-
- void startTransaction(TransactionType type, const LLXMLRPCValue& params);
- bool checkTransaction();
-
- void tellUserError(const std::string& message, const std::string& uri);
-
- virtual BOOL postBuild();
-
- void startBuyPreConfirm();
- void startBuyPostConfirm(const std::string& password);
-
- void onClickBuy();
- void onClickCancel();
- void onClickErrorWeb();
-
- virtual void draw();
- virtual BOOL canClose();
-
- void onVisibilityChanged ( const LLSD& new_visibility );
-
+ void setForGroup(bool is_for_group);
+ void setParcel(LLViewerRegion* region, LLParcelSelectionHandle parcel);
+
+ void updateAgentInfo();
+ void updateParcelInfo();
+ void updateCovenantInfo();
+ static void onChangeAgreeCovenant(LLUICtrl* ctrl, void* user_data);
+ void updateFloaterCovenantText(const std::string& string, const LLUUID &asset_id);
+ void updateFloaterEstateName(const std::string& name);
+ void updateFloaterLastModified(const std::string& text);
+ void updateFloaterEstateOwnerName(const std::string& name);
+ void updateWebSiteInfo();
+ void finishWebSiteInfo();
+
+ void runWebSitePrep(const std::string& password);
+ void finishWebSitePrep();
+ void sendBuyLand();
+
+ void updateNames();
+ // Name cache callback
+ void updateGroupName(const LLUUID& id,
+ const std::string& name,
+ bool is_group);
+
+ void refreshUI();
+
+ void startTransaction(TransactionType type, const LLXMLRPCValue& params);
+ bool checkTransaction();
+
+ void tellUserError(const std::string& message, const std::string& uri);
+
+ virtual BOOL postBuild();
+
+ void startBuyPreConfirm();
+ void startBuyPostConfirm(const std::string& password);
+
+ void onClickBuy();
+ void onClickCancel();
+ void onClickErrorWeb();
+
+ virtual void draw();
+ virtual BOOL canClose();
+
+ void onVisibilityChanged ( const LLSD& new_visibility );
+
};
// static
void LLFloaterBuyLand::buyLand(
- LLViewerRegion* region, LLParcelSelectionHandle parcel, bool is_for_group)
+ LLViewerRegion* region, LLParcelSelectionHandle parcel, bool is_for_group)
{
- if(is_for_group && !gAgent.hasPowerInActiveGroup(GP_LAND_DEED))
- {
- LLNotificationsUtil::add("OnlyOfficerCanBuyLand");
- return;
- }
-
- LLFloaterBuyLandUI* ui = LLFloaterReg::showTypedInstance<LLFloaterBuyLandUI>("buy_land");
- if (ui)
- {
- ui->setForGroup(is_for_group);
- ui->setParcel(region, parcel);
- }
+ if(is_for_group && !gAgent.hasPowerInActiveGroup(GP_LAND_DEED))
+ {
+ LLNotificationsUtil::add("OnlyOfficerCanBuyLand");
+ return;
+ }
+
+ LLFloaterBuyLandUI* ui = LLFloaterReg::showTypedInstance<LLFloaterBuyLandUI>("buy_land");
+ if (ui)
+ {
+ ui->setForGroup(is_for_group);
+ ui->setParcel(region, parcel);
+ }
}
// static
void LLFloaterBuyLand::updateCovenantText(const std::string& string, const LLUUID &asset_id)
{
- LLFloaterBuyLandUI* floater = LLFloaterReg::findTypedInstance<LLFloaterBuyLandUI>("buy_land");
- if (floater)
- {
- floater->updateFloaterCovenantText(string, asset_id);
- }
+ LLFloaterBuyLandUI* floater = LLFloaterReg::findTypedInstance<LLFloaterBuyLandUI>("buy_land");
+ if (floater)
+ {
+ floater->updateFloaterCovenantText(string, asset_id);
+ }
}
// static
void LLFloaterBuyLand::updateEstateName(const std::string& name)
{
- LLFloaterBuyLandUI* floater = LLFloaterReg::findTypedInstance<LLFloaterBuyLandUI>("buy_land");
- if (floater)
- {
- floater->updateFloaterEstateName(name);
- }
+ LLFloaterBuyLandUI* floater = LLFloaterReg::findTypedInstance<LLFloaterBuyLandUI>("buy_land");
+ if (floater)
+ {
+ floater->updateFloaterEstateName(name);
+ }
}
// static
void LLFloaterBuyLand::updateLastModified(const std::string& text)
{
- LLFloaterBuyLandUI* floater = LLFloaterReg::findTypedInstance<LLFloaterBuyLandUI>("buy_land");
- if (floater)
- {
- floater->updateFloaterLastModified(text);
- }
+ LLFloaterBuyLandUI* floater = LLFloaterReg::findTypedInstance<LLFloaterBuyLandUI>("buy_land");
+ if (floater)
+ {
+ floater->updateFloaterLastModified(text);
+ }
}
// static
void LLFloaterBuyLand::updateEstateOwnerName(const std::string& name)
{
- LLFloaterBuyLandUI* floater = LLFloaterReg::findTypedInstance<LLFloaterBuyLandUI>("buy_land");
- if (floater)
- {
- floater->updateFloaterEstateOwnerName(name);
- }
+ LLFloaterBuyLandUI* floater = LLFloaterReg::findTypedInstance<LLFloaterBuyLandUI>("buy_land");
+ if (floater)
+ {
+ floater->updateFloaterEstateOwnerName(name);
+ }
}
// static
LLFloater* LLFloaterBuyLand::buildFloater(const LLSD& key)
{
- LLFloaterBuyLandUI* floater = new LLFloaterBuyLandUI(key);
- return floater;
+ LLFloaterBuyLandUI* floater = new LLFloaterBuyLandUI(key);
+ return floater;
}
//----------------------------------------------------------------------------
@@ -278,1101 +278,1101 @@ LLFloater* LLFloaterBuyLand::buildFloater(const LLSD& key)
// already valid, so this call does the correct thing. Disable the
// warning so that we can compile without generating a warning.
#pragma warning(disable : 4355)
-#endif
+#endif
LLFloaterBuyLandUI::LLFloaterBuyLandUI(const LLSD& key)
-: LLFloater(LLSD()),
- mParcelSelectionObserver(this),
- mParcel(0),
- mBought(false),
- mParcelValid(false), mSiteValid(false),
- mChildren(*this), mCurrency(*this), mTransaction(0),
- mParcelBuyInfo(0)
+: LLFloater(LLSD()),
+ mParcelSelectionObserver(this),
+ mParcel(0),
+ mBought(false),
+ mParcelValid(false), mSiteValid(false),
+ mChildren(*this), mCurrency(*this), mTransaction(0),
+ mParcelBuyInfo(0)
{
- LLViewerParcelMgr::getInstance()->addObserver(&mParcelSelectionObserver);
-
+ LLViewerParcelMgr::getInstance()->addObserver(&mParcelSelectionObserver);
+
}
LLFloaterBuyLandUI::~LLFloaterBuyLandUI()
{
- LLViewerParcelMgr::getInstance()->removeObserver(&mParcelSelectionObserver);
- LLViewerParcelMgr::getInstance()->deleteParcelBuy(&mParcelBuyInfo);
-
- delete mTransaction;
+ LLViewerParcelMgr::getInstance()->removeObserver(&mParcelSelectionObserver);
+ LLViewerParcelMgr::getInstance()->deleteParcelBuy(&mParcelBuyInfo);
+
+ delete mTransaction;
}
// virtual
void LLFloaterBuyLandUI::onClose(bool app_quitting)
{
- // This object holds onto observer, transactions, and parcel state.
- // Despite being single_instance, destroy it to call destructors and clean
- // everything up.
- setVisible(FALSE);
- destroy();
+ // This object holds onto observer, transactions, and parcel state.
+ // Despite being single_instance, destroy it to call destructors and clean
+ // everything up.
+ setVisible(FALSE);
+ destroy();
}
void LLFloaterBuyLandUI::SelectionObserver::changed()
{
- if (LLViewerParcelMgr::getInstance()->selectionEmpty())
- {
- mFloater->closeFloater();
- }
- else
- {
- mFloater->setParcel(LLViewerParcelMgr::getInstance()->getSelectionRegion(),
- LLViewerParcelMgr::getInstance()->getParcelSelection());
- }
+ if (LLViewerParcelMgr::getInstance()->selectionEmpty())
+ {
+ mFloater->closeFloater();
+ }
+ else
+ {
+ mFloater->setParcel(LLViewerParcelMgr::getInstance()->getSelectionRegion(),
+ LLViewerParcelMgr::getInstance()->getParcelSelection());
+ }
}
void LLFloaterBuyLandUI::updateAgentInfo()
{
- mAgentCommittedTier = gStatusBar->getSquareMetersCommitted();
- mAgentCashBalance = gStatusBar->getBalance();
+ mAgentCommittedTier = gStatusBar->getSquareMetersCommitted();
+ mAgentCashBalance = gStatusBar->getBalance();
- // *TODO: This is an approximation, we should send this value down
- // to the viewer. See SL-10728 for details.
- mAgentHasNeverOwnedLand = mAgentCommittedTier == 0;
+ // *TODO: This is an approximation, we should send this value down
+ // to the viewer. See SL-10728 for details.
+ mAgentHasNeverOwnedLand = mAgentCommittedTier == 0;
}
void LLFloaterBuyLandUI::updateParcelInfo()
{
- LLParcel* parcel = mParcel->getParcel();
- mParcelValid = parcel && mRegion;
- mParcelIsForSale = false;
- mParcelIsGroupLand = false;
- mParcelGroupContribution = 0;
- mParcelPrice = 0;
- mParcelActualArea = 0;
- mParcelBillableArea = 0;
- mParcelSupportedObjects = 0;
- mParcelSoldWithObjects = false;
- mParcelLocation = "";
- mParcelSnapshot.setNull();
- mParcelSellerName = "";
-
- mCanBuy = false;
- mCannotBuyIsError = false;
-
- if (!mParcelValid)
- {
- mCannotBuyReason = getString("no_land_selected");
- return;
- }
-
- if (mParcel->getMultipleOwners())
- {
- mCannotBuyReason = getString("multiple_parcels_selected");
- return;
- }
-
- const LLUUID& parcelOwner = parcel->getOwnerID();
-
- mIsClaim = parcel->isPublic();
- if (!mIsClaim)
- {
- mParcelActualArea = parcel->getArea();
- mParcelIsForSale = parcel->getForSale();
- mParcelIsGroupLand = parcel->getIsGroupOwned();
- mParcelPrice = mParcelIsForSale ? parcel->getSalePrice() : 0;
-
- if (mParcelIsGroupLand)
- {
- LLUUID group_id = parcel->getGroupID();
- mParcelGroupContribution = gAgent.getGroupContribution(group_id);
- }
- }
- else
- {
- mParcelActualArea = mParcel->getClaimableArea();
- mParcelIsForSale = true;
- mParcelPrice = mParcelActualArea * parcel->getClaimPricePerMeter();
- }
-
- mParcelBillableArea =
- ll_round(mRegion->getBillableFactor() * mParcelActualArea);
-
- mParcelSupportedObjects = ll_round(
- parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus());
- // Can't have more than region max tasks, regardless of parcel
- // object bonus factor.
- LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
- if(region)
- {
- S32 max_tasks_per_region = (S32)region->getMaxTasks();
- mParcelSupportedObjects = llmin(
- mParcelSupportedObjects, max_tasks_per_region);
- }
-
- mParcelSoldWithObjects = parcel->getSellWithObjects();
-
-
- LLVector3 center = parcel->getCenterpoint();
- mParcelLocation = llformat("%s %d,%d",
- mRegion->getName().c_str(),
- (int)center[VX], (int)center[VY]
- );
-
- mParcelSnapshot = parcel->getSnapshotID();
-
- updateNames();
-
- bool haveEnoughCash = mParcelPrice <= mAgentCashBalance;
- S32 cashBuy = haveEnoughCash ? 0 : (mParcelPrice - mAgentCashBalance);
- mCurrency.setAmount(cashBuy, true);
- mCurrency.setZeroMessage(haveEnoughCash ? getString("none_needed") : LLStringUtil::null);
-
- // checks that we can buy the land
-
- if(mIsForGroup && !gAgent.hasPowerInActiveGroup(GP_LAND_DEED))
- {
- mCannotBuyReason = getString("cant_buy_for_group");
- return;
- }
-
- if (!mIsClaim)
- {
- const LLUUID& authorizedBuyer = parcel->getAuthorizedBuyerID();
- const LLUUID buyer = gAgent.getID();
- const LLUUID newOwner = mIsForGroup ? gAgent.getGroupID() : buyer;
-
- if (!mParcelIsForSale
- || (mParcelPrice == 0 && authorizedBuyer.isNull()))
- {
-
- mCannotBuyReason = getString("parcel_not_for_sale");
- return;
- }
-
- if (parcelOwner == newOwner)
- {
- if (mIsForGroup)
- {
- mCannotBuyReason = getString("group_already_owns");
- }
- else
- {
- mCannotBuyReason = getString("you_already_own");
- }
- return;
- }
-
- if (!authorizedBuyer.isNull() && buyer != authorizedBuyer)
- {
- // Maybe the parcel is set for sale to a group we are in.
- bool authorized_group =
- gAgent.hasPowerInGroup(authorizedBuyer,GP_LAND_DEED)
- && gAgent.hasPowerInGroup(authorizedBuyer,GP_LAND_SET_SALE_INFO);
-
- if (!authorized_group)
- {
- mCannotBuyReason = getString("set_to_sell_to_other");
- return;
- }
- }
- }
- else
- {
- if (mParcelActualArea == 0)
- {
- mCannotBuyReason = getString("no_public_land");
- return;
- }
-
- if (mParcel->hasOthersSelected())
- {
- // Policy: Must not have someone else's land selected
- mCannotBuyReason = getString("not_owned_by_you");
- return;
- }
- }
-
- mCanBuy = true;
+ LLParcel* parcel = mParcel->getParcel();
+ mParcelValid = parcel && mRegion;
+ mParcelIsForSale = false;
+ mParcelIsGroupLand = false;
+ mParcelGroupContribution = 0;
+ mParcelPrice = 0;
+ mParcelActualArea = 0;
+ mParcelBillableArea = 0;
+ mParcelSupportedObjects = 0;
+ mParcelSoldWithObjects = false;
+ mParcelLocation = "";
+ mParcelSnapshot.setNull();
+ mParcelSellerName = "";
+
+ mCanBuy = false;
+ mCannotBuyIsError = false;
+
+ if (!mParcelValid)
+ {
+ mCannotBuyReason = getString("no_land_selected");
+ return;
+ }
+
+ if (mParcel->getMultipleOwners())
+ {
+ mCannotBuyReason = getString("multiple_parcels_selected");
+ return;
+ }
+
+ const LLUUID& parcelOwner = parcel->getOwnerID();
+
+ mIsClaim = parcel->isPublic();
+ if (!mIsClaim)
+ {
+ mParcelActualArea = parcel->getArea();
+ mParcelIsForSale = parcel->getForSale();
+ mParcelIsGroupLand = parcel->getIsGroupOwned();
+ mParcelPrice = mParcelIsForSale ? parcel->getSalePrice() : 0;
+
+ if (mParcelIsGroupLand)
+ {
+ LLUUID group_id = parcel->getGroupID();
+ mParcelGroupContribution = gAgent.getGroupContribution(group_id);
+ }
+ }
+ else
+ {
+ mParcelActualArea = mParcel->getClaimableArea();
+ mParcelIsForSale = true;
+ mParcelPrice = mParcelActualArea * parcel->getClaimPricePerMeter();
+ }
+
+ mParcelBillableArea =
+ ll_round(mRegion->getBillableFactor() * mParcelActualArea);
+
+ mParcelSupportedObjects = ll_round(
+ parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus());
+ // Can't have more than region max tasks, regardless of parcel
+ // object bonus factor.
+ LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
+ if(region)
+ {
+ S32 max_tasks_per_region = (S32)region->getMaxTasks();
+ mParcelSupportedObjects = llmin(
+ mParcelSupportedObjects, max_tasks_per_region);
+ }
+
+ mParcelSoldWithObjects = parcel->getSellWithObjects();
+
+
+ LLVector3 center = parcel->getCenterpoint();
+ mParcelLocation = llformat("%s %d,%d",
+ mRegion->getName().c_str(),
+ (int)center[VX], (int)center[VY]
+ );
+
+ mParcelSnapshot = parcel->getSnapshotID();
+
+ updateNames();
+
+ bool haveEnoughCash = mParcelPrice <= mAgentCashBalance;
+ S32 cashBuy = haveEnoughCash ? 0 : (mParcelPrice - mAgentCashBalance);
+ mCurrency.setAmount(cashBuy, true);
+ mCurrency.setZeroMessage(haveEnoughCash ? getString("none_needed") : LLStringUtil::null);
+
+ // checks that we can buy the land
+
+ if(mIsForGroup && !gAgent.hasPowerInActiveGroup(GP_LAND_DEED))
+ {
+ mCannotBuyReason = getString("cant_buy_for_group");
+ return;
+ }
+
+ if (!mIsClaim)
+ {
+ const LLUUID& authorizedBuyer = parcel->getAuthorizedBuyerID();
+ const LLUUID buyer = gAgent.getID();
+ const LLUUID newOwner = mIsForGroup ? gAgent.getGroupID() : buyer;
+
+ if (!mParcelIsForSale
+ || (mParcelPrice == 0 && authorizedBuyer.isNull()))
+ {
+
+ mCannotBuyReason = getString("parcel_not_for_sale");
+ return;
+ }
+
+ if (parcelOwner == newOwner)
+ {
+ if (mIsForGroup)
+ {
+ mCannotBuyReason = getString("group_already_owns");
+ }
+ else
+ {
+ mCannotBuyReason = getString("you_already_own");
+ }
+ return;
+ }
+
+ if (!authorizedBuyer.isNull() && buyer != authorizedBuyer)
+ {
+ // Maybe the parcel is set for sale to a group we are in.
+ bool authorized_group =
+ gAgent.hasPowerInGroup(authorizedBuyer,GP_LAND_DEED)
+ && gAgent.hasPowerInGroup(authorizedBuyer,GP_LAND_SET_SALE_INFO);
+
+ if (!authorized_group)
+ {
+ mCannotBuyReason = getString("set_to_sell_to_other");
+ return;
+ }
+ }
+ }
+ else
+ {
+ if (mParcelActualArea == 0)
+ {
+ mCannotBuyReason = getString("no_public_land");
+ return;
+ }
+
+ if (mParcel->hasOthersSelected())
+ {
+ // Policy: Must not have someone else's land selected
+ mCannotBuyReason = getString("not_owned_by_you");
+ return;
+ }
+ }
+
+ mCanBuy = true;
}
void LLFloaterBuyLandUI::updateCovenantInfo()
{
- LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
- if(!region) return;
-
- U8 sim_access = region->getSimAccess();
- std::string rating = LLViewerRegion::accessToString(sim_access);
-
- LLTextBox* region_name = getChild<LLTextBox>("region_name_text");
- if (region_name)
- {
- std::string region_name_txt = region->getName() + " ("+rating +")";
- region_name->setText(region_name_txt);
-
- LLIconCtrl* rating_icon = getChild<LLIconCtrl>("rating_icon");
- LLRect rect = rating_icon->getRect();
- S32 region_name_width = llmin(region_name->getRect().getWidth(), region_name->getTextBoundingRect().getWidth());
- S32 icon_left_pad = region_name->getRect().mLeft + region_name_width + ICON_PAD;
- region_name->setToolTip(region_name->getText());
- rating_icon->setRect(rect.setOriginAndSize(icon_left_pad, rect.mBottom, rect.getWidth(), rect.getHeight()));
-
- switch(sim_access)
- {
- case SIM_ACCESS_PG:
- rating_icon->setValue(getString("icon_PG"));
- break;
-
- case SIM_ACCESS_ADULT:
- rating_icon->setValue(getString("icon_R"));
- break;
-
- default:
- rating_icon->setValue(getString("icon_M"));
- }
- }
-
- LLTextBox* region_type = getChild<LLTextBox>("region_type_text");
- if (region_type)
- {
- region_type->setText(region->getLocalizedSimProductName());
- region_type->setToolTip(region->getLocalizedSimProductName());
- }
-
- LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause");
- if (resellable_clause)
- {
- if (region->getRegionFlag(REGION_FLAGS_BLOCK_LAND_RESELL))
- {
- resellable_clause->setText(getString("can_not_resell"));
- }
- else
- {
- resellable_clause->setText(getString("can_resell"));
- }
- }
-
- LLTextBox* changeable_clause = getChild<LLTextBox>("changeable_clause");
- if (changeable_clause)
- {
- if (region->getRegionFlag(REGION_FLAGS_ALLOW_PARCEL_CHANGES))
- {
- changeable_clause->setText(getString("can_change"));
- }
- else
- {
- changeable_clause->setText(getString("can_not_change"));
- }
- }
-
- LLCheckBoxCtrl* check = getChild<LLCheckBoxCtrl>("agree_covenant");
- if(check)
- {
- check->set(false);
- check->setEnabled(true);
- check->setCommitCallback(onChangeAgreeCovenant, this);
- }
-
- LLTextBox* box = getChild<LLTextBox>("covenant_text");
- if(box)
- {
- box->setVisible(FALSE);
- }
-
- // send EstateCovenantInfo message
- LLMessageSystem *msg = gMessageSystem;
- msg->newMessage("EstateCovenantRequest");
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
- msg->sendReliable(region->getHost());
+ LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
+ if(!region) return;
+
+ U8 sim_access = region->getSimAccess();
+ std::string rating = LLViewerRegion::accessToString(sim_access);
+
+ LLTextBox* region_name = getChild<LLTextBox>("region_name_text");
+ if (region_name)
+ {
+ std::string region_name_txt = region->getName() + " ("+rating +")";
+ region_name->setText(region_name_txt);
+
+ LLIconCtrl* rating_icon = getChild<LLIconCtrl>("rating_icon");
+ LLRect rect = rating_icon->getRect();
+ S32 region_name_width = llmin(region_name->getRect().getWidth(), region_name->getTextBoundingRect().getWidth());
+ S32 icon_left_pad = region_name->getRect().mLeft + region_name_width + ICON_PAD;
+ region_name->setToolTip(region_name->getText());
+ rating_icon->setRect(rect.setOriginAndSize(icon_left_pad, rect.mBottom, rect.getWidth(), rect.getHeight()));
+
+ switch(sim_access)
+ {
+ case SIM_ACCESS_PG:
+ rating_icon->setValue(getString("icon_PG"));
+ break;
+
+ case SIM_ACCESS_ADULT:
+ rating_icon->setValue(getString("icon_R"));
+ break;
+
+ default:
+ rating_icon->setValue(getString("icon_M"));
+ }
+ }
+
+ LLTextBox* region_type = getChild<LLTextBox>("region_type_text");
+ if (region_type)
+ {
+ region_type->setText(region->getLocalizedSimProductName());
+ region_type->setToolTip(region->getLocalizedSimProductName());
+ }
+
+ LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause");
+ if (resellable_clause)
+ {
+ if (region->getRegionFlag(REGION_FLAGS_BLOCK_LAND_RESELL))
+ {
+ resellable_clause->setText(getString("can_not_resell"));
+ }
+ else
+ {
+ resellable_clause->setText(getString("can_resell"));
+ }
+ }
+
+ LLTextBox* changeable_clause = getChild<LLTextBox>("changeable_clause");
+ if (changeable_clause)
+ {
+ if (region->getRegionFlag(REGION_FLAGS_ALLOW_PARCEL_CHANGES))
+ {
+ changeable_clause->setText(getString("can_change"));
+ }
+ else
+ {
+ changeable_clause->setText(getString("can_not_change"));
+ }
+ }
+
+ LLCheckBoxCtrl* check = getChild<LLCheckBoxCtrl>("agree_covenant");
+ if(check)
+ {
+ check->set(false);
+ check->setEnabled(true);
+ check->setCommitCallback(onChangeAgreeCovenant, this);
+ }
+
+ LLTextBox* box = getChild<LLTextBox>("covenant_text");
+ if(box)
+ {
+ box->setVisible(FALSE);
+ }
+
+ // send EstateCovenantInfo message
+ LLMessageSystem *msg = gMessageSystem;
+ msg->newMessage("EstateCovenantRequest");
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
+ msg->sendReliable(region->getHost());
}
// static
void LLFloaterBuyLandUI::onChangeAgreeCovenant(LLUICtrl* ctrl, void* user_data)
{
- LLFloaterBuyLandUI* self = (LLFloaterBuyLandUI*)user_data;
- if(self)
- {
- self->refreshUI();
- }
+ LLFloaterBuyLandUI* self = (LLFloaterBuyLandUI*)user_data;
+ if(self)
+ {
+ self->refreshUI();
+ }
}
void LLFloaterBuyLandUI::updateFloaterCovenantText(const std::string &string, const LLUUID& asset_id)
{
- LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("covenant_editor");
- editor->setText(string);
-
- LLCheckBoxCtrl* check = getChild<LLCheckBoxCtrl>("agree_covenant");
- LLTextBox* box = getChild<LLTextBox>("covenant_text");
- if (asset_id.isNull())
- {
- check->set(true);
- check->setEnabled(false);
- refreshUI();
-
- // remove the line stating that you must agree
- box->setVisible(FALSE);
- }
- else
- {
- check->setEnabled(true);
-
- // remove the line stating that you must agree
- box->setVisible(TRUE);
- }
+ LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("covenant_editor");
+ editor->setText(string);
+
+ LLCheckBoxCtrl* check = getChild<LLCheckBoxCtrl>("agree_covenant");
+ LLTextBox* box = getChild<LLTextBox>("covenant_text");
+ if (asset_id.isNull())
+ {
+ check->set(true);
+ check->setEnabled(false);
+ refreshUI();
+
+ // remove the line stating that you must agree
+ box->setVisible(FALSE);
+ }
+ else
+ {
+ check->setEnabled(true);
+
+ // remove the line stating that you must agree
+ box->setVisible(TRUE);
+ }
}
void LLFloaterBuyLandUI::updateFloaterEstateName(const std::string& name)
{
- LLTextBox* box = getChild<LLTextBox>("estate_name_text");
- box->setText(name);
- box->setToolTip(name);
+ LLTextBox* box = getChild<LLTextBox>("estate_name_text");
+ box->setText(name);
+ box->setToolTip(name);
}
void LLFloaterBuyLandUI::updateFloaterLastModified(const std::string& text)
{
- LLTextBox* editor = getChild<LLTextBox>("covenant_timestamp_text");
- if (editor) editor->setText(text);
+ LLTextBox* editor = getChild<LLTextBox>("covenant_timestamp_text");
+ if (editor) editor->setText(text);
}
void LLFloaterBuyLandUI::updateFloaterEstateOwnerName(const std::string& name)
{
- LLTextBox* box = getChild<LLTextBox>("estate_owner_text");
- if (box) box->setText(name);
+ LLTextBox* box = getChild<LLTextBox>("estate_owner_text");
+ if (box) box->setText(name);
}
void LLFloaterBuyLandUI::updateWebSiteInfo()
{
- S32 askBillableArea = mIsForGroup ? 0 : mParcelBillableArea;
- S32 askCurrencyBuy = mCurrency.getAmount();
-
- if (mTransaction && mTransactionType == TransactionPreflight
- && mPreflightAskBillableArea == askBillableArea
- && mPreflightAskCurrencyBuy == askCurrencyBuy)
- {
- return;
- }
-
- mPreflightAskBillableArea = askBillableArea;
- mPreflightAskCurrencyBuy = askCurrencyBuy;
-
+ S32 askBillableArea = mIsForGroup ? 0 : mParcelBillableArea;
+ S32 askCurrencyBuy = mCurrency.getAmount();
+
+ if (mTransaction && mTransactionType == TransactionPreflight
+ && mPreflightAskBillableArea == askBillableArea
+ && mPreflightAskCurrencyBuy == askCurrencyBuy)
+ {
+ return;
+ }
+
+ mPreflightAskBillableArea = askBillableArea;
+ mPreflightAskCurrencyBuy = askCurrencyBuy;
+
#if 0
- // enable this code if you want the details to blank while we're talking
- // to the web site... it's kind of jarring
- mSiteValid = false;
- mSiteMembershipUpgrade = false;
- mSiteMembershipAction = "(waiting)";
- mSiteMembershipPlanIDs.clear();
- mSiteMembershipPlanNames.clear();
- mSiteLandUseUpgrade = false;
- mSiteLandUseAction = "(waiting)";
- mSiteCurrencyEstimated = false;
- mSiteCurrencyEstimatedCost = 0;
+ // enable this code if you want the details to blank while we're talking
+ // to the web site... it's kind of jarring
+ mSiteValid = false;
+ mSiteMembershipUpgrade = false;
+ mSiteMembershipAction = "(waiting)";
+ mSiteMembershipPlanIDs.clear();
+ mSiteMembershipPlanNames.clear();
+ mSiteLandUseUpgrade = false;
+ mSiteLandUseAction = "(waiting)";
+ mSiteCurrencyEstimated = false;
+ mSiteCurrencyEstimatedCost = 0;
#endif
-
- LLXMLRPCValue keywordArgs = LLXMLRPCValue::createStruct();
- keywordArgs.appendString("agentId", gAgent.getID().asString());
- keywordArgs.appendString(
- "secureSessionId",
- gAgent.getSecureSessionID().asString());
- keywordArgs.appendString("language", LLUI::getLanguage());
- keywordArgs.appendInt("billableArea", mPreflightAskBillableArea);
- keywordArgs.appendInt("currencyBuy", mPreflightAskCurrencyBuy);
-
- LLXMLRPCValue params = LLXMLRPCValue::createArray();
- params.append(keywordArgs);
-
- startTransaction(TransactionPreflight, params);
+
+ LLXMLRPCValue keywordArgs = LLXMLRPCValue::createStruct();
+ keywordArgs.appendString("agentId", gAgent.getID().asString());
+ keywordArgs.appendString(
+ "secureSessionId",
+ gAgent.getSecureSessionID().asString());
+ keywordArgs.appendString("language", LLUI::getLanguage());
+ keywordArgs.appendInt("billableArea", mPreflightAskBillableArea);
+ keywordArgs.appendInt("currencyBuy", mPreflightAskCurrencyBuy);
+
+ LLXMLRPCValue params = LLXMLRPCValue::createArray();
+ params.append(keywordArgs);
+
+ startTransaction(TransactionPreflight, params);
}
void LLFloaterBuyLandUI::finishWebSiteInfo()
{
-
- LLXMLRPCValue result = mTransaction->responseValue();
-
- mSiteValid = result["success"].asBool();
- if (!mSiteValid)
- {
- tellUserError(
- result["errorMessage"].asString(),
- result["errorURI"].asString()
- );
- return;
- }
-
- LLXMLRPCValue membership = result["membership"];
- mSiteMembershipUpgrade = membership["upgrade"].asBool();
- mSiteMembershipAction = membership["action"].asString();
- mSiteMembershipPlanIDs.clear();
- mSiteMembershipPlanNames.clear();
- LLXMLRPCValue levels = membership["levels"];
- for (LLXMLRPCValue level = levels.rewind();
- level.isValid();
- level = levels.next())
- {
- mSiteMembershipPlanIDs.push_back(level["id"].asString());
- mSiteMembershipPlanNames.push_back(level["description"].asString());
- }
- mUserPlanChoice = 0;
-
- LLXMLRPCValue landUse = result["landUse"];
- mSiteLandUseUpgrade = landUse["upgrade"].asBool();
- mSiteLandUseAction = landUse["action"].asString();
-
- LLXMLRPCValue currency = result["currency"];
- if (currency["estimatedCost"].isValid())
- {
- mCurrency.setUSDEstimate(currency["estimatedCost"].asInt());
- }
- if (currency["estimatedLocalCost"].isValid())
- {
- mCurrency.setLocalEstimate(currency["estimatedLocalCost"].asString());
- }
-
- mSiteConfirm = result["confirm"].asString();
+
+ LLXMLRPCValue result = mTransaction->responseValue();
+
+ mSiteValid = result["success"].asBool();
+ if (!mSiteValid)
+ {
+ tellUserError(
+ result["errorMessage"].asString(),
+ result["errorURI"].asString()
+ );
+ return;
+ }
+
+ LLXMLRPCValue membership = result["membership"];
+ mSiteMembershipUpgrade = membership["upgrade"].asBool();
+ mSiteMembershipAction = membership["action"].asString();
+ mSiteMembershipPlanIDs.clear();
+ mSiteMembershipPlanNames.clear();
+ LLXMLRPCValue levels = membership["levels"];
+ for (LLXMLRPCValue level = levels.rewind();
+ level.isValid();
+ level = levels.next())
+ {
+ mSiteMembershipPlanIDs.push_back(level["id"].asString());
+ mSiteMembershipPlanNames.push_back(level["description"].asString());
+ }
+ mUserPlanChoice = 0;
+
+ LLXMLRPCValue landUse = result["landUse"];
+ mSiteLandUseUpgrade = landUse["upgrade"].asBool();
+ mSiteLandUseAction = landUse["action"].asString();
+
+ LLXMLRPCValue currency = result["currency"];
+ if (currency["estimatedCost"].isValid())
+ {
+ mCurrency.setUSDEstimate(currency["estimatedCost"].asInt());
+ }
+ if (currency["estimatedLocalCost"].isValid())
+ {
+ mCurrency.setLocalEstimate(currency["estimatedLocalCost"].asString());
+ }
+
+ mSiteConfirm = result["confirm"].asString();
}
void LLFloaterBuyLandUI::runWebSitePrep(const std::string& password)
{
- if (!mCanBuy)
- {
- return;
- }
-
- BOOL remove_contribution = getChild<LLUICtrl>("remove_contribution")->getValue().asBoolean();
- mParcelBuyInfo = LLViewerParcelMgr::getInstance()->setupParcelBuy(gAgent.getID(), gAgent.getSessionID(),
- gAgent.getGroupID(), mIsForGroup, mIsClaim, remove_contribution);
-
- if (mParcelBuyInfo
- && !mSiteMembershipUpgrade
- && !mSiteLandUseUpgrade
- && mCurrency.getAmount() == 0
- && mSiteConfirm != "password")
- {
- sendBuyLand();
- return;
- }
-
-
- std::string newLevel = "noChange";
-
- if (mSiteMembershipUpgrade)
- {
- LLComboBox* levels = getChild<LLComboBox>( "account_level");
- if (levels)
- {
- mUserPlanChoice = levels->getCurrentIndex();
- newLevel = mSiteMembershipPlanIDs[mUserPlanChoice];
- }
- }
-
- LLXMLRPCValue keywordArgs = LLXMLRPCValue::createStruct();
- keywordArgs.appendString("agentId", gAgent.getID().asString());
- keywordArgs.appendString(
- "secureSessionId",
- gAgent.getSecureSessionID().asString());
- keywordArgs.appendString("language", LLUI::getLanguage());
- keywordArgs.appendString("levelId", newLevel);
- keywordArgs.appendInt("billableArea",
- mIsForGroup ? 0 : mParcelBillableArea);
- keywordArgs.appendInt("currencyBuy", mCurrency.getAmount());
- keywordArgs.appendInt("estimatedCost", mCurrency.getUSDEstimate());
- keywordArgs.appendString("estimatedLocalCost", mCurrency.getLocalEstimate());
- keywordArgs.appendString("confirm", mSiteConfirm);
- if (!password.empty())
- {
- keywordArgs.appendString("password", password);
- }
-
- LLXMLRPCValue params = LLXMLRPCValue::createArray();
- params.append(keywordArgs);
-
- startTransaction(TransactionBuy, params);
+ if (!mCanBuy)
+ {
+ return;
+ }
+
+ BOOL remove_contribution = getChild<LLUICtrl>("remove_contribution")->getValue().asBoolean();
+ mParcelBuyInfo = LLViewerParcelMgr::getInstance()->setupParcelBuy(gAgent.getID(), gAgent.getSessionID(),
+ gAgent.getGroupID(), mIsForGroup, mIsClaim, remove_contribution);
+
+ if (mParcelBuyInfo
+ && !mSiteMembershipUpgrade
+ && !mSiteLandUseUpgrade
+ && mCurrency.getAmount() == 0
+ && mSiteConfirm != "password")
+ {
+ sendBuyLand();
+ return;
+ }
+
+
+ std::string newLevel = "noChange";
+
+ if (mSiteMembershipUpgrade)
+ {
+ LLComboBox* levels = getChild<LLComboBox>( "account_level");
+ if (levels)
+ {
+ mUserPlanChoice = levels->getCurrentIndex();
+ newLevel = mSiteMembershipPlanIDs[mUserPlanChoice];
+ }
+ }
+
+ LLXMLRPCValue keywordArgs = LLXMLRPCValue::createStruct();
+ keywordArgs.appendString("agentId", gAgent.getID().asString());
+ keywordArgs.appendString(
+ "secureSessionId",
+ gAgent.getSecureSessionID().asString());
+ keywordArgs.appendString("language", LLUI::getLanguage());
+ keywordArgs.appendString("levelId", newLevel);
+ keywordArgs.appendInt("billableArea",
+ mIsForGroup ? 0 : mParcelBillableArea);
+ keywordArgs.appendInt("currencyBuy", mCurrency.getAmount());
+ keywordArgs.appendInt("estimatedCost", mCurrency.getUSDEstimate());
+ keywordArgs.appendString("estimatedLocalCost", mCurrency.getLocalEstimate());
+ keywordArgs.appendString("confirm", mSiteConfirm);
+ if (!password.empty())
+ {
+ keywordArgs.appendString("password", password);
+ }
+
+ LLXMLRPCValue params = LLXMLRPCValue::createArray();
+ params.append(keywordArgs);
+
+ startTransaction(TransactionBuy, params);
}
void LLFloaterBuyLandUI::finishWebSitePrep()
{
- LLXMLRPCValue result = mTransaction->responseValue();
-
- bool success = result["success"].asBool();
- if (!success)
- {
- tellUserError(
- result["errorMessage"].asString(),
- result["errorURI"].asString()
- );
- return;
- }
-
- sendBuyLand();
+ LLXMLRPCValue result = mTransaction->responseValue();
+
+ bool success = result["success"].asBool();
+ if (!success)
+ {
+ tellUserError(
+ result["errorMessage"].asString(),
+ result["errorURI"].asString()
+ );
+ return;
+ }
+
+ sendBuyLand();
}
void LLFloaterBuyLandUI::sendBuyLand()
{
- if (mParcelBuyInfo)
- {
- LLViewerParcelMgr::getInstance()->sendParcelBuy(mParcelBuyInfo);
- LLViewerParcelMgr::getInstance()->deleteParcelBuy(&mParcelBuyInfo);
- mBought = true;
- }
+ if (mParcelBuyInfo)
+ {
+ LLViewerParcelMgr::getInstance()->sendParcelBuy(mParcelBuyInfo);
+ LLViewerParcelMgr::getInstance()->deleteParcelBuy(&mParcelBuyInfo);
+ mBought = true;
+ }
}
void LLFloaterBuyLandUI::updateNames()
{
- LLParcel* parcelp = mParcel->getParcel();
-
- if (!parcelp)
- {
- mParcelSellerName = LLStringUtil::null;
- return;
- }
-
- if (mIsClaim)
- {
- mParcelSellerName = "Linden Lab";
- }
- else if (parcelp->getIsGroupOwned())
- {
- gCacheName->getGroup(parcelp->getGroupID(),
- boost::bind(&LLFloaterBuyLandUI::updateGroupName, this,
- _1, _2, _3));
- }
- else
- {
- mParcelSellerName = LLSLURL("agent", parcelp->getOwnerID(), "completename").getSLURLString();
- }
+ LLParcel* parcelp = mParcel->getParcel();
+
+ if (!parcelp)
+ {
+ mParcelSellerName = LLStringUtil::null;
+ return;
+ }
+
+ if (mIsClaim)
+ {
+ mParcelSellerName = "Linden Lab";
+ }
+ else if (parcelp->getIsGroupOwned())
+ {
+ gCacheName->getGroup(parcelp->getGroupID(),
+ boost::bind(&LLFloaterBuyLandUI::updateGroupName, this,
+ _1, _2, _3));
+ }
+ else
+ {
+ mParcelSellerName = LLSLURL("agent", parcelp->getOwnerID(), "completename").getSLURLString();
+ }
}
void LLFloaterBuyLandUI::updateGroupName(const LLUUID& id,
- const std::string& name,
- bool is_group)
+ const std::string& name,
+ bool is_group)
{
- LLParcel* parcelp = mParcel->getParcel();
- if (parcelp
- && parcelp->getGroupID() == id)
- {
- // request is current
- mParcelSellerName = name;
- }
+ LLParcel* parcelp = mParcel->getParcel();
+ if (parcelp
+ && parcelp->getGroupID() == id)
+ {
+ // request is current
+ mParcelSellerName = name;
+ }
}
void LLFloaterBuyLandUI::startTransaction(TransactionType type, const LLXMLRPCValue& params)
{
- delete mTransaction;
- mTransaction = NULL;
-
- mTransactionType = type;
-
- // Select a URI and method appropriate for the transaction type.
- static std::string transaction_uri;
- if (transaction_uri.empty())
- {
- transaction_uri = LLGridManager::getInstance()->getHelperURI() + "landtool.php";
- }
-
- const char* method;
- switch (mTransactionType)
- {
- case TransactionPreflight:
- method = "preflightBuyLandPrep";
- break;
- case TransactionBuy:
- method = "buyLandPrep";
- break;
- default:
- LL_WARNS() << "LLFloaterBuyLandUI: Unknown transaction type!" << LL_ENDL;
- return;
- }
-
- mTransaction = new LLXMLRPCTransaction(
- transaction_uri,
- method,
- params,
- false /* don't use gzip */
- );
+ delete mTransaction;
+ mTransaction = NULL;
+
+ mTransactionType = type;
+
+ // Select a URI and method appropriate for the transaction type.
+ static std::string transaction_uri;
+ if (transaction_uri.empty())
+ {
+ transaction_uri = LLGridManager::getInstance()->getHelperURI() + "landtool.php";
+ }
+
+ const char* method;
+ switch (mTransactionType)
+ {
+ case TransactionPreflight:
+ method = "preflightBuyLandPrep";
+ break;
+ case TransactionBuy:
+ method = "buyLandPrep";
+ break;
+ default:
+ LL_WARNS() << "LLFloaterBuyLandUI: Unknown transaction type!" << LL_ENDL;
+ return;
+ }
+
+ mTransaction = new LLXMLRPCTransaction(
+ transaction_uri,
+ method,
+ params,
+ false /* don't use gzip */
+ );
}
bool LLFloaterBuyLandUI::checkTransaction()
{
- if (!mTransaction)
- {
- return false;
- }
-
- if (!mTransaction->process())
- {
- return false;
- }
-
- if (mTransaction->status(NULL) != LLXMLRPCTransaction::StatusComplete)
- {
- tellUserError(mTransaction->statusMessage(), mTransaction->statusURI());
- }
- else {
- switch (mTransactionType)
- {
- case TransactionPreflight: finishWebSiteInfo(); break;
- case TransactionBuy: finishWebSitePrep(); break;
- default: ;
- }
- }
-
- delete mTransaction;
- mTransaction = NULL;
-
- return true;
+ if (!mTransaction)
+ {
+ return false;
+ }
+
+ if (!mTransaction->process())
+ {
+ return false;
+ }
+
+ if (mTransaction->status(NULL) != LLXMLRPCTransaction::StatusComplete)
+ {
+ tellUserError(mTransaction->statusMessage(), mTransaction->statusURI());
+ }
+ else {
+ switch (mTransactionType)
+ {
+ case TransactionPreflight: finishWebSiteInfo(); break;
+ case TransactionBuy: finishWebSitePrep(); break;
+ default: ;
+ }
+ }
+
+ delete mTransaction;
+ mTransaction = NULL;
+
+ return true;
}
void LLFloaterBuyLandUI::tellUserError(
- const std::string& message, const std::string& uri)
+ const std::string& message, const std::string& uri)
{
- mCanBuy = false;
- mCannotBuyIsError = true;
- mCannotBuyReason = getString("fetching_error");
- mCannotBuyReason += message;
- mCannotBuyURI = uri;
+ mCanBuy = false;
+ mCannotBuyIsError = true;
+ mCannotBuyReason = getString("fetching_error");
+ mCannotBuyReason += message;
+ mCannotBuyURI = uri;
}
// virtual
BOOL LLFloaterBuyLandUI::postBuild()
{
- setVisibleCallback(boost::bind(&LLFloaterBuyLandUI::onVisibilityChanged, this, _2));
-
- mCurrency.prepare();
-
- getChild<LLUICtrl>("buy_btn")->setCommitCallback( boost::bind(&LLFloaterBuyLandUI::onClickBuy, this));
- getChild<LLUICtrl>("cancel_btn")->setCommitCallback( boost::bind(&LLFloaterBuyLandUI::onClickCancel, this));
- getChild<LLUICtrl>("error_web")->setCommitCallback( boost::bind(&LLFloaterBuyLandUI::onClickErrorWeb, this));
-
- center();
-
- return TRUE;
+ setVisibleCallback(boost::bind(&LLFloaterBuyLandUI::onVisibilityChanged, this, _2));
+
+ mCurrency.prepare();
+
+ getChild<LLUICtrl>("buy_btn")->setCommitCallback( boost::bind(&LLFloaterBuyLandUI::onClickBuy, this));
+ getChild<LLUICtrl>("cancel_btn")->setCommitCallback( boost::bind(&LLFloaterBuyLandUI::onClickCancel, this));
+ getChild<LLUICtrl>("error_web")->setCommitCallback( boost::bind(&LLFloaterBuyLandUI::onClickErrorWeb, this));
+
+ center();
+
+ return TRUE;
}
void LLFloaterBuyLandUI::setParcel(LLViewerRegion* region, LLParcelSelectionHandle parcel)
{
- if (mTransaction && mTransactionType == TransactionBuy)
- {
- // the user is buying, don't change the selection
- return;
- }
-
- mRegion = region;
- mParcel = parcel;
-
- updateAgentInfo();
- updateParcelInfo();
- updateCovenantInfo();
- if (mCanBuy)
- {
- updateWebSiteInfo();
- }
- refreshUI();
+ if (mTransaction && mTransactionType == TransactionBuy)
+ {
+ // the user is buying, don't change the selection
+ return;
+ }
+
+ mRegion = region;
+ mParcel = parcel;
+
+ updateAgentInfo();
+ updateParcelInfo();
+ updateCovenantInfo();
+ if (mCanBuy)
+ {
+ updateWebSiteInfo();
+ }
+ refreshUI();
}
void LLFloaterBuyLandUI::setForGroup(bool forGroup)
{
- mIsForGroup = forGroup;
+ mIsForGroup = forGroup;
}
void LLFloaterBuyLandUI::draw()
{
- LLFloater::draw();
-
- bool needsUpdate = false;
- needsUpdate |= checkTransaction();
- needsUpdate |= mCurrency.process();
-
- if (mBought)
- {
- closeFloater();
- }
- else if (needsUpdate)
- {
- if (mCanBuy && mCurrency.hasError())
- {
- tellUserError(mCurrency.errorMessage(), mCurrency.errorURI());
- }
-
- refreshUI();
- }
+ LLFloater::draw();
+
+ bool needsUpdate = false;
+ needsUpdate |= checkTransaction();
+ needsUpdate |= mCurrency.process();
+
+ if (mBought)
+ {
+ closeFloater();
+ }
+ else if (needsUpdate)
+ {
+ if (mCanBuy && mCurrency.hasError())
+ {
+ tellUserError(mCurrency.errorMessage(), mCurrency.errorURI());
+ }
+
+ refreshUI();
+ }
}
// virtual
BOOL LLFloaterBuyLandUI::canClose()
{
- // mTransactionType check for pre-buy estimation stage and mCurrency to allow exit after transaction
- bool can_close = !mTransaction && (mTransactionType != TransactionBuy || mCurrency.canCancel());
- if (!can_close)
- {
- // explain to user why they can't do this, see DEV-9605
- LLNotificationsUtil::add("CannotCloseFloaterBuyLand");
- }
- return can_close;
+ // mTransactionType check for pre-buy estimation stage and mCurrency to allow exit after transaction
+ bool can_close = !mTransaction && (mTransactionType != TransactionBuy || mCurrency.canCancel());
+ if (!can_close)
+ {
+ // explain to user why they can't do this, see DEV-9605
+ LLNotificationsUtil::add("CannotCloseFloaterBuyLand");
+ }
+ return can_close;
}
void LLFloaterBuyLandUI::onVisibilityChanged ( const LLSD& new_visibility )
{
- if (new_visibility.asBoolean())
- {
- refreshUI();
- }
+ if (new_visibility.asBoolean())
+ {
+ refreshUI();
+ }
}
void LLFloaterBuyLandUI::refreshUI()
{
- // section zero: title area
- {
- LLTextureCtrl* snapshot = getChild<LLTextureCtrl>("info_image");
- if (snapshot)
- {
- snapshot->setImageAssetID(
- mParcelValid ? mParcelSnapshot : LLUUID::null);
- }
-
- if (mParcelValid)
- {
- getChild<LLUICtrl>("info_parcel")->setValue(mParcelLocation);
-
- LLStringUtil::format_map_t string_args;
- string_args["[AMOUNT]"] = llformat("%d", mParcelActualArea);
- string_args["[AMOUNT2]"] = llformat("%d", mParcelSupportedObjects);
-
- getChild<LLUICtrl>("info_size")->setValue(getString("meters_supports_object", string_args));
-
- F32 cost_per_sqm = 0.0f;
- if (mParcelActualArea > 0)
- {
- cost_per_sqm = (F32)mParcelPrice / (F32)mParcelActualArea;
- }
-
- LLStringUtil::format_map_t info_price_args;
- info_price_args["[PRICE]"] = llformat("%d", mParcelPrice);
- info_price_args["[PRICE_PER_SQM]"] = llformat("%.1f", cost_per_sqm);
- if (mParcelSoldWithObjects)
- {
- info_price_args["[SOLD_WITH_OBJECTS]"] = getString("sold_with_objects");
- }
- else
- {
- info_price_args["[SOLD_WITH_OBJECTS]"] = getString("sold_without_objects");
- }
- getChild<LLUICtrl>("info_price")->setValue(getString("info_price_string", info_price_args));
- getChildView("info_price")->setVisible( mParcelIsForSale);
- }
- else
- {
- getChild<LLUICtrl>("info_parcel")->setValue(getString("no_parcel_selected"));
- getChild<LLUICtrl>("info_size")->setValue(LLStringUtil::null);
- getChild<LLUICtrl>("info_price")->setValue(LLStringUtil::null);
- }
-
- getChild<LLUICtrl>("info_action")->setValue(
- mCanBuy
- ?
- mIsForGroup
- ? getString("buying_for_group")//"Buying land for group:"
- : getString("buying_will")//"Buying this land will:"
- :
- mCannotBuyIsError
- ? getString("cannot_buy_now")//"Cannot buy now:"
- : getString("not_for_sale")//"Not for sale:"
-
- );
- }
-
- bool showingError = !mCanBuy || !mSiteValid;
-
- // error section
- if (showingError)
- {
- mChildren.setBadge(std::string("step_error"),
- mCannotBuyIsError
- ? LLViewChildren::BADGE_ERROR
- : LLViewChildren::BADGE_WARN);
-
- LLTextBox* message = getChild<LLTextBox>("error_message");
- if (message)
- {
- message->setVisible(true);
- message->setValue(LLSD(!mCanBuy ? mCannotBuyReason : "(waiting for data)"));
- }
-
- getChildView("error_web")->setVisible(mCannotBuyIsError && !mCannotBuyURI.empty());
- }
- else
- {
- getChildView("step_error")->setVisible(FALSE);
- getChildView("error_message")->setVisible(FALSE);
- getChildView("error_web")->setVisible(FALSE);
- }
-
-
- // section one: account
- if (!showingError)
- {
- mChildren.setBadge(std::string("step_1"),
- mSiteMembershipUpgrade
- ? LLViewChildren::BADGE_NOTE
- : LLViewChildren::BADGE_OK);
- getChild<LLUICtrl>("account_action")->setValue(mSiteMembershipAction);
- getChild<LLUICtrl>("account_reason")->setValue(
- mSiteMembershipUpgrade
- ? getString("must_upgrade")
- : getString("cant_own_land")
- );
-
- LLComboBox* levels = getChild<LLComboBox>( "account_level");
- if (levels)
- {
- levels->setVisible(mSiteMembershipUpgrade);
-
- levels->removeall();
- for(std::vector<std::string>::const_iterator i
- = mSiteMembershipPlanNames.begin();
- i != mSiteMembershipPlanNames.end();
- ++i)
- {
- levels->add(*i);
- }
-
- levels->setCurrentByIndex(mUserPlanChoice);
- }
-
- getChildView("step_1")->setVisible(TRUE);
- getChildView("account_action")->setVisible(TRUE);
- getChildView("account_reason")->setVisible(TRUE);
- }
- else
- {
- getChildView("step_1")->setVisible(FALSE);
- getChildView("account_action")->setVisible(FALSE);
- getChildView("account_reason")->setVisible(FALSE);
- getChildView("account_level")->setVisible(FALSE);
- }
-
- // section two: land use fees
- if (!showingError)
- {
- mChildren.setBadge(std::string("step_2"),
- mSiteLandUseUpgrade
- ? LLViewChildren::BADGE_NOTE
- : LLViewChildren::BADGE_OK);
- getChild<LLUICtrl>("land_use_action")->setValue(mSiteLandUseAction);
-
- std::string message;
-
- if (mIsForGroup)
- {
- LLStringUtil::format_map_t string_args;
- string_args["[GROUP]"] = std::string(gAgent.getGroupName());
-
- message += getString("insufficient_land_credits", string_args);
-
- }
- else
- {
- LLStringUtil::format_map_t string_args;
- string_args["[BUYER]"] = llformat("%d", mAgentCommittedTier);
- message += getString("land_holdings", string_args);
- }
-
- if (!mParcelValid)
- {
- message += LLTrans::getString("sentences_separator") + getString("no_parcel_selected");
- }
- else if (mParcelBillableArea == mParcelActualArea)
- {
- LLStringUtil::format_map_t string_args;
- string_args["[AMOUNT]"] = llformat("%d ", mParcelActualArea);
- message += LLTrans::getString("sentences_separator") + getString("parcel_meters", string_args);
- }
- else
- {
-
- if (mParcelBillableArea > mParcelActualArea)
- {
- LLStringUtil::format_map_t string_args;
- string_args["[AMOUNT]"] = llformat("%d ", mParcelBillableArea);
- message += LLTrans::getString("sentences_separator") + getString("premium_land", string_args);
- }
- else
- {
- LLStringUtil::format_map_t string_args;
- string_args["[AMOUNT]"] = llformat("%d ", mParcelBillableArea);
- message += LLTrans::getString("sentences_separator") + getString("discounted_land", string_args);
- }
- }
-
- getChild<LLUICtrl>("land_use_reason")->setValue(message);
-
- getChildView("step_2")->setVisible(TRUE);
- getChildView("land_use_action")->setVisible(TRUE);
- getChildView("land_use_reason")->setVisible(TRUE);
- }
- else
- {
- getChildView("step_2")->setVisible(FALSE);
- getChildView("land_use_action")->setVisible(FALSE);
- getChildView("land_use_reason")->setVisible(FALSE);
- }
-
- // section three: purchase & currency
- S32 finalBalance = mAgentCashBalance + mCurrency.getAmount() - mParcelPrice;
- bool willHaveEnough = finalBalance >= 0;
- bool haveEnough = mAgentCashBalance >= mParcelPrice;
- S32 minContribution = llceil((F32)mParcelBillableArea / GROUP_LAND_BONUS_FACTOR);
- bool groupContributionEnough = mParcelGroupContribution >= minContribution;
-
- mCurrency.updateUI(!showingError && !haveEnough);
-
- if (!showingError)
- {
- mChildren.setBadge(std::string("step_3"),
- !willHaveEnough
- ? LLViewChildren::BADGE_WARN
- : mCurrency.getAmount() > 0
- ? LLViewChildren::BADGE_NOTE
- : LLViewChildren::BADGE_OK);
-
- LLStringUtil::format_map_t string_args;
- string_args["[AMOUNT]"] = llformat("%d", mParcelPrice);
- string_args["[SELLER]"] = mParcelSellerName;
- getChild<LLUICtrl>("purchase_action")->setValue(getString("pay_to_for_land", string_args));
- getChildView("purchase_action")->setVisible( mParcelValid);
-
- std::string reasonString;
-
- if (haveEnough)
- {
- LLStringUtil::format_map_t string_args;
- string_args["[AMOUNT]"] = llformat("%d", mAgentCashBalance);
-
- getChild<LLUICtrl>("currency_reason")->setValue(getString("have_enough_lindens", string_args));
- }
- else
- {
- LLStringUtil::format_map_t string_args;
- string_args["[AMOUNT]"] = llformat("%d", mAgentCashBalance);
- string_args["[AMOUNT2]"] = llformat("%d", mParcelPrice - mAgentCashBalance);
-
- getChild<LLUICtrl>("currency_reason")->setValue(getString("not_enough_lindens", string_args));
-
- getChild<LLUICtrl>("currency_est")->setTextArg("[LOCAL_AMOUNT]", mCurrency.getLocalEstimate());
- }
-
- if (willHaveEnough)
- {
- LLStringUtil::format_map_t string_args;
- string_args["[AMOUNT]"] = llformat("%d", finalBalance);
-
- getChild<LLUICtrl>("currency_balance")->setValue(getString("balance_left", string_args));
-
- }
- else
- {
- LLStringUtil::format_map_t string_args;
- string_args["[AMOUNT]"] = llformat("%d", mParcelPrice - mAgentCashBalance);
-
- getChild<LLUICtrl>("currency_balance")->setValue(getString("balance_needed", string_args));
-
- }
-
- getChild<LLUICtrl>("remove_contribution")->setValue(LLSD(groupContributionEnough));
- getChildView("remove_contribution")->setEnabled(groupContributionEnough);
- bool showRemoveContribution = mParcelIsGroupLand
- && (mParcelGroupContribution > 0);
- getChildView("remove_contribution")->setLabelArg("[AMOUNT]",
- llformat("%d", minContribution));
- getChildView("remove_contribution")->setVisible( showRemoveContribution);
-
- getChildView("step_3")->setVisible(TRUE);
- getChildView("purchase_action")->setVisible(TRUE);
- getChildView("currency_reason")->setVisible(TRUE);
- getChildView("currency_balance")->setVisible(TRUE);
- }
- else
- {
- getChildView("step_3")->setVisible(FALSE);
- getChildView("purchase_action")->setVisible(FALSE);
- getChildView("currency_reason")->setVisible(FALSE);
- getChildView("currency_balance")->setVisible(FALSE);
- getChildView("remove_group_donation")->setVisible(FALSE);
- }
-
-
- bool agrees_to_covenant = false;
- LLCheckBoxCtrl* check = getChild<LLCheckBoxCtrl>("agree_covenant");
- if (check)
- {
- agrees_to_covenant = check->get();
- }
-
- getChildView("buy_btn")->setEnabled(mCanBuy && mSiteValid && willHaveEnough && !mTransaction && agrees_to_covenant);
+ // section zero: title area
+ {
+ LLTextureCtrl* snapshot = getChild<LLTextureCtrl>("info_image");
+ if (snapshot)
+ {
+ snapshot->setImageAssetID(
+ mParcelValid ? mParcelSnapshot : LLUUID::null);
+ }
+
+ if (mParcelValid)
+ {
+ getChild<LLUICtrl>("info_parcel")->setValue(mParcelLocation);
+
+ LLStringUtil::format_map_t string_args;
+ string_args["[AMOUNT]"] = llformat("%d", mParcelActualArea);
+ string_args["[AMOUNT2]"] = llformat("%d", mParcelSupportedObjects);
+
+ getChild<LLUICtrl>("info_size")->setValue(getString("meters_supports_object", string_args));
+
+ F32 cost_per_sqm = 0.0f;
+ if (mParcelActualArea > 0)
+ {
+ cost_per_sqm = (F32)mParcelPrice / (F32)mParcelActualArea;
+ }
+
+ LLStringUtil::format_map_t info_price_args;
+ info_price_args["[PRICE]"] = llformat("%d", mParcelPrice);
+ info_price_args["[PRICE_PER_SQM]"] = llformat("%.1f", cost_per_sqm);
+ if (mParcelSoldWithObjects)
+ {
+ info_price_args["[SOLD_WITH_OBJECTS]"] = getString("sold_with_objects");
+ }
+ else
+ {
+ info_price_args["[SOLD_WITH_OBJECTS]"] = getString("sold_without_objects");
+ }
+ getChild<LLUICtrl>("info_price")->setValue(getString("info_price_string", info_price_args));
+ getChildView("info_price")->setVisible( mParcelIsForSale);
+ }
+ else
+ {
+ getChild<LLUICtrl>("info_parcel")->setValue(getString("no_parcel_selected"));
+ getChild<LLUICtrl>("info_size")->setValue(LLStringUtil::null);
+ getChild<LLUICtrl>("info_price")->setValue(LLStringUtil::null);
+ }
+
+ getChild<LLUICtrl>("info_action")->setValue(
+ mCanBuy
+ ?
+ mIsForGroup
+ ? getString("buying_for_group")//"Buying land for group:"
+ : getString("buying_will")//"Buying this land will:"
+ :
+ mCannotBuyIsError
+ ? getString("cannot_buy_now")//"Cannot buy now:"
+ : getString("not_for_sale")//"Not for sale:"
+
+ );
+ }
+
+ bool showingError = !mCanBuy || !mSiteValid;
+
+ // error section
+ if (showingError)
+ {
+ mChildren.setBadge(std::string("step_error"),
+ mCannotBuyIsError
+ ? LLViewChildren::BADGE_ERROR
+ : LLViewChildren::BADGE_WARN);
+
+ LLTextBox* message = getChild<LLTextBox>("error_message");
+ if (message)
+ {
+ message->setVisible(true);
+ message->setValue(LLSD(!mCanBuy ? mCannotBuyReason : "(waiting for data)"));
+ }
+
+ getChildView("error_web")->setVisible(mCannotBuyIsError && !mCannotBuyURI.empty());
+ }
+ else
+ {
+ getChildView("step_error")->setVisible(FALSE);
+ getChildView("error_message")->setVisible(FALSE);
+ getChildView("error_web")->setVisible(FALSE);
+ }
+
+
+ // section one: account
+ if (!showingError)
+ {
+ mChildren.setBadge(std::string("step_1"),
+ mSiteMembershipUpgrade
+ ? LLViewChildren::BADGE_NOTE
+ : LLViewChildren::BADGE_OK);
+ getChild<LLUICtrl>("account_action")->setValue(mSiteMembershipAction);
+ getChild<LLUICtrl>("account_reason")->setValue(
+ mSiteMembershipUpgrade
+ ? getString("must_upgrade")
+ : getString("cant_own_land")
+ );
+
+ LLComboBox* levels = getChild<LLComboBox>( "account_level");
+ if (levels)
+ {
+ levels->setVisible(mSiteMembershipUpgrade);
+
+ levels->removeall();
+ for(std::vector<std::string>::const_iterator i
+ = mSiteMembershipPlanNames.begin();
+ i != mSiteMembershipPlanNames.end();
+ ++i)
+ {
+ levels->add(*i);
+ }
+
+ levels->setCurrentByIndex(mUserPlanChoice);
+ }
+
+ getChildView("step_1")->setVisible(TRUE);
+ getChildView("account_action")->setVisible(TRUE);
+ getChildView("account_reason")->setVisible(TRUE);
+ }
+ else
+ {
+ getChildView("step_1")->setVisible(FALSE);
+ getChildView("account_action")->setVisible(FALSE);
+ getChildView("account_reason")->setVisible(FALSE);
+ getChildView("account_level")->setVisible(FALSE);
+ }
+
+ // section two: land use fees
+ if (!showingError)
+ {
+ mChildren.setBadge(std::string("step_2"),
+ mSiteLandUseUpgrade
+ ? LLViewChildren::BADGE_NOTE
+ : LLViewChildren::BADGE_OK);
+ getChild<LLUICtrl>("land_use_action")->setValue(mSiteLandUseAction);
+
+ std::string message;
+
+ if (mIsForGroup)
+ {
+ LLStringUtil::format_map_t string_args;
+ string_args["[GROUP]"] = std::string(gAgent.getGroupName());
+
+ message += getString("insufficient_land_credits", string_args);
+
+ }
+ else
+ {
+ LLStringUtil::format_map_t string_args;
+ string_args["[BUYER]"] = llformat("%d", mAgentCommittedTier);
+ message += getString("land_holdings", string_args);
+ }
+
+ if (!mParcelValid)
+ {
+ message += LLTrans::getString("sentences_separator") + getString("no_parcel_selected");
+ }
+ else if (mParcelBillableArea == mParcelActualArea)
+ {
+ LLStringUtil::format_map_t string_args;
+ string_args["[AMOUNT]"] = llformat("%d ", mParcelActualArea);
+ message += LLTrans::getString("sentences_separator") + getString("parcel_meters", string_args);
+ }
+ else
+ {
+
+ if (mParcelBillableArea > mParcelActualArea)
+ {
+ LLStringUtil::format_map_t string_args;
+ string_args["[AMOUNT]"] = llformat("%d ", mParcelBillableArea);
+ message += LLTrans::getString("sentences_separator") + getString("premium_land", string_args);
+ }
+ else
+ {
+ LLStringUtil::format_map_t string_args;
+ string_args["[AMOUNT]"] = llformat("%d ", mParcelBillableArea);
+ message += LLTrans::getString("sentences_separator") + getString("discounted_land", string_args);
+ }
+ }
+
+ getChild<LLUICtrl>("land_use_reason")->setValue(message);
+
+ getChildView("step_2")->setVisible(TRUE);
+ getChildView("land_use_action")->setVisible(TRUE);
+ getChildView("land_use_reason")->setVisible(TRUE);
+ }
+ else
+ {
+ getChildView("step_2")->setVisible(FALSE);
+ getChildView("land_use_action")->setVisible(FALSE);
+ getChildView("land_use_reason")->setVisible(FALSE);
+ }
+
+ // section three: purchase & currency
+ S32 finalBalance = mAgentCashBalance + mCurrency.getAmount() - mParcelPrice;
+ bool willHaveEnough = finalBalance >= 0;
+ bool haveEnough = mAgentCashBalance >= mParcelPrice;
+ S32 minContribution = llceil((F32)mParcelBillableArea / GROUP_LAND_BONUS_FACTOR);
+ bool groupContributionEnough = mParcelGroupContribution >= minContribution;
+
+ mCurrency.updateUI(!showingError && !haveEnough);
+
+ if (!showingError)
+ {
+ mChildren.setBadge(std::string("step_3"),
+ !willHaveEnough
+ ? LLViewChildren::BADGE_WARN
+ : mCurrency.getAmount() > 0
+ ? LLViewChildren::BADGE_NOTE
+ : LLViewChildren::BADGE_OK);
+
+ LLStringUtil::format_map_t string_args;
+ string_args["[AMOUNT]"] = llformat("%d", mParcelPrice);
+ string_args["[SELLER]"] = mParcelSellerName;
+ getChild<LLUICtrl>("purchase_action")->setValue(getString("pay_to_for_land", string_args));
+ getChildView("purchase_action")->setVisible( mParcelValid);
+
+ std::string reasonString;
+
+ if (haveEnough)
+ {
+ LLStringUtil::format_map_t string_args;
+ string_args["[AMOUNT]"] = llformat("%d", mAgentCashBalance);
+
+ getChild<LLUICtrl>("currency_reason")->setValue(getString("have_enough_lindens", string_args));
+ }
+ else
+ {
+ LLStringUtil::format_map_t string_args;
+ string_args["[AMOUNT]"] = llformat("%d", mAgentCashBalance);
+ string_args["[AMOUNT2]"] = llformat("%d", mParcelPrice - mAgentCashBalance);
+
+ getChild<LLUICtrl>("currency_reason")->setValue(getString("not_enough_lindens", string_args));
+
+ getChild<LLUICtrl>("currency_est")->setTextArg("[LOCAL_AMOUNT]", mCurrency.getLocalEstimate());
+ }
+
+ if (willHaveEnough)
+ {
+ LLStringUtil::format_map_t string_args;
+ string_args["[AMOUNT]"] = llformat("%d", finalBalance);
+
+ getChild<LLUICtrl>("currency_balance")->setValue(getString("balance_left", string_args));
+
+ }
+ else
+ {
+ LLStringUtil::format_map_t string_args;
+ string_args["[AMOUNT]"] = llformat("%d", mParcelPrice - mAgentCashBalance);
+
+ getChild<LLUICtrl>("currency_balance")->setValue(getString("balance_needed", string_args));
+
+ }
+
+ getChild<LLUICtrl>("remove_contribution")->setValue(LLSD(groupContributionEnough));
+ getChildView("remove_contribution")->setEnabled(groupContributionEnough);
+ bool showRemoveContribution = mParcelIsGroupLand
+ && (mParcelGroupContribution > 0);
+ getChildView("remove_contribution")->setLabelArg("[AMOUNT]",
+ llformat("%d", minContribution));
+ getChildView("remove_contribution")->setVisible( showRemoveContribution);
+
+ getChildView("step_3")->setVisible(TRUE);
+ getChildView("purchase_action")->setVisible(TRUE);
+ getChildView("currency_reason")->setVisible(TRUE);
+ getChildView("currency_balance")->setVisible(TRUE);
+ }
+ else
+ {
+ getChildView("step_3")->setVisible(FALSE);
+ getChildView("purchase_action")->setVisible(FALSE);
+ getChildView("currency_reason")->setVisible(FALSE);
+ getChildView("currency_balance")->setVisible(FALSE);
+ getChildView("remove_group_donation")->setVisible(FALSE);
+ }
+
+
+ bool agrees_to_covenant = false;
+ LLCheckBoxCtrl* check = getChild<LLCheckBoxCtrl>("agree_covenant");
+ if (check)
+ {
+ agrees_to_covenant = check->get();
+ }
+
+ getChildView("buy_btn")->setEnabled(mCanBuy && mSiteValid && willHaveEnough && !mTransaction && agrees_to_covenant);
}
void LLFloaterBuyLandUI::startBuyPreConfirm()
{
- std::string action;
-
- if (mSiteMembershipUpgrade)
- {
- action += mSiteMembershipAction;
- action += "\n";
-
- LLComboBox* levels = getChild<LLComboBox>( "account_level");
- if (levels)
- {
- action += " * ";
- action += mSiteMembershipPlanNames[levels->getCurrentIndex()];
- action += "\n";
- }
- }
- if (mSiteLandUseUpgrade)
- {
- action += mSiteLandUseAction;
- action += "\n";
- }
- if (mCurrency.getAmount() > 0)
- {
- LLStringUtil::format_map_t string_args;
- string_args["[AMOUNT]"] = llformat("%d", mCurrency.getAmount());
- string_args["[LOCAL_AMOUNT]"] = mCurrency.getLocalEstimate();
-
- action += getString("buy_for_US", string_args);
- }
-
- LLStringUtil::format_map_t string_args;
- string_args["[AMOUNT]"] = llformat("%d", mParcelPrice);
- string_args["[SELLER]"] = mParcelSellerName;
- action += getString("pay_to_for_land", string_args);
-
-
- LLConfirmationManager::confirm(mSiteConfirm,
- action,
- *this,
- &LLFloaterBuyLandUI::startBuyPostConfirm);
+ std::string action;
+
+ if (mSiteMembershipUpgrade)
+ {
+ action += mSiteMembershipAction;
+ action += "\n";
+
+ LLComboBox* levels = getChild<LLComboBox>( "account_level");
+ if (levels)
+ {
+ action += " * ";
+ action += mSiteMembershipPlanNames[levels->getCurrentIndex()];
+ action += "\n";
+ }
+ }
+ if (mSiteLandUseUpgrade)
+ {
+ action += mSiteLandUseAction;
+ action += "\n";
+ }
+ if (mCurrency.getAmount() > 0)
+ {
+ LLStringUtil::format_map_t string_args;
+ string_args["[AMOUNT]"] = llformat("%d", mCurrency.getAmount());
+ string_args["[LOCAL_AMOUNT]"] = mCurrency.getLocalEstimate();
+
+ action += getString("buy_for_US", string_args);
+ }
+
+ LLStringUtil::format_map_t string_args;
+ string_args["[AMOUNT]"] = llformat("%d", mParcelPrice);
+ string_args["[SELLER]"] = mParcelSellerName;
+ action += getString("pay_to_for_land", string_args);
+
+
+ LLConfirmationManager::confirm(mSiteConfirm,
+ action,
+ *this,
+ &LLFloaterBuyLandUI::startBuyPostConfirm);
}
void LLFloaterBuyLandUI::startBuyPostConfirm(const std::string& password)
{
- runWebSitePrep(password);
-
- mCanBuy = false;
- mCannotBuyReason = getString("processing");
- refreshUI();
+ runWebSitePrep(password);
+
+ mCanBuy = false;
+ mCannotBuyReason = getString("processing");
+ refreshUI();
}
void LLFloaterBuyLandUI::onClickBuy()
{
- startBuyPreConfirm();
+ startBuyPreConfirm();
}
void LLFloaterBuyLandUI::onClickCancel()
{
- closeFloater();
+ closeFloater();
}
void LLFloaterBuyLandUI::onClickErrorWeb()
{
- LLWeb::loadURLExternal(mCannotBuyURI);
- closeFloater();
+ LLWeb::loadURLExternal(mCannotBuyURI);
+ closeFloater();
}