From 1fb0e233ff67ada0c6d6351494a4b61ce7ff71e1 Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Thu, 3 Sep 2020 17:29:06 +0300
Subject: SL-13814 Clarify dialog for insufficient L$ balance

---
 indra/newview/llcurrencyuimanager.cpp              |   7 +-
 indra/newview/llfloaterbuycurrency.cpp             |  61 +-
 .../skins/default/xui/en/floater_buy_currency.xml  | 624 ++++++++++++---------
 3 files changed, 416 insertions(+), 276 deletions(-)

diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp
index df94e337da..cd7332c4d4 100644
--- a/indra/newview/llcurrencyuimanager.cpp
+++ b/indra/newview/llcurrencyuimanager.cpp
@@ -454,7 +454,7 @@ void LLCurrencyUIManager::Impl::updateUI()
 		
 		if (!mUserEnteredCurrencyBuy)
 		{
-			if (!mZeroMessage.empty() && mUserCurrencyBuy == 0)
+			if (mUserCurrencyBuy == 0)
 			{
 				lindenAmount->setText(LLStringUtil::null);
 			}
@@ -467,8 +467,9 @@ void LLCurrencyUIManager::Impl::updateUI()
 		}
 	}
 
-	mPanel.getChild<LLUICtrl>("currency_est")->setTextArg("[LOCALAMOUNT]", getLocalEstimate());
-	mPanel.getChildView("currency_est")->setVisible( hasEstimate() && mUserCurrencyBuy > 0);
+	std::string estimated = (mUserCurrencyBuy == 0) ? mPanel.getString("estimated_zero") : getLocalEstimate();
+	mPanel.getChild<LLUICtrl>("currency_est")->setTextArg("[LOCALAMOUNT]", estimated);
+	mPanel.getChildView("currency_est")->setVisible( hasEstimate() || mUserCurrencyBuy == 0);
 
 	mPanel.getChildView("currency_links")->setVisible( mSupportsInternationalBilling);
 	mPanel.getChildView("exchange_rate_note")->setVisible( mSupportsInternationalBilling);
diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp
index 25348474a1..b039475389 100644
--- a/indra/newview/llfloaterbuycurrency.cpp
+++ b/indra/newview/llfloaterbuycurrency.cpp
@@ -32,6 +32,8 @@
 #include "llcurrencyuimanager.h"
 #include "llfloater.h"
 #include "llfloaterreg.h"
+#include "lllayoutstack.h"
+#include "lliconctrl.h"
 #include "llnotificationsutil.h"
 #include "llstatusbar.h"
 #include "lltextbox.h"
@@ -60,6 +62,7 @@ public:
 	bool		mHasTarget;
 	std::string	mTargetName;
 	S32			mTargetPrice;
+	S32			mRequiredAmount;
 	
 public:
 	void noTarget();
@@ -68,6 +71,7 @@ public:
 	virtual BOOL postBuild();
 	
 	void updateUI();
+	void collapsePanels(bool collapse);
 
 	virtual void draw();
 	virtual BOOL canClose();
@@ -92,7 +96,9 @@ LLFloater* LLFloaterBuyCurrency::buildFloater(const LLSD& key)
 LLFloaterBuyCurrencyUI::LLFloaterBuyCurrencyUI(const LLSD& key)
 :	LLFloater(key),
 	mChildren(*this),
-	mManager(*this)
+	mManager(*this),
+	mHasTarget(false),
+	mTargetPrice(0)
 {
 }
 
@@ -104,7 +110,8 @@ LLFloaterBuyCurrencyUI::~LLFloaterBuyCurrencyUI()
 void LLFloaterBuyCurrencyUI::noTarget()
 {
 	mHasTarget = false;
-	mManager.setAmount(STANDARD_BUY_AMOUNT);
+	mTargetPrice = 0;
+	mManager.setAmount(0);
 }
 
 void LLFloaterBuyCurrencyUI::target(const std::string& name, S32 price)
@@ -120,7 +127,8 @@ void LLFloaterBuyCurrencyUI::target(const std::string& name, S32 price)
 		need = 0;
 	}
 	
-	mManager.setAmount(need + MINIMUM_BALANCE_AMOUNT);
+	mRequiredAmount = need + MINIMUM_BALANCE_AMOUNT;
+	mManager.setAmount(0);
 }
 
 
@@ -175,7 +183,6 @@ void LLFloaterBuyCurrencyUI::updateUI()
 	getChildView("purchase_warning_repurchase")->setVisible(FALSE);
 	getChildView("purchase_warning_notenough")->setVisible(FALSE);
 	getChildView("contacting")->setVisible(FALSE);
-	getChildView("buy_action")->setVisible(FALSE);
 
 	if (hasError)
 	{
@@ -208,8 +215,8 @@ void LLFloaterBuyCurrencyUI::updateUI()
 		{
 			if (mHasTarget)
 			{
-				getChildView("buy_action")->setVisible( true);
-				getChild<LLUICtrl>("buy_action")->setTextArg("[ACTION]", mTargetName);
+				getChild<LLUICtrl>("target_price")->setTextArg("[AMT]", llformat("%d", mTargetPrice));
+				getChild<LLUICtrl>("required_amount")->setTextArg("[AMT]", llformat("%d", mRequiredAmount));
 			}
 		}
 		
@@ -230,18 +237,40 @@ void LLFloaterBuyCurrencyUI::updateUI()
 
 		if (mHasTarget)
 		{
-			if (total >= mTargetPrice)
-			{
-				getChildView("purchase_warning_repurchase")->setVisible( true);
-			}
-			else
-			{
-				getChildView("purchase_warning_notenough")->setVisible( true);
-			}
+			getChildView("purchase_warning_repurchase")->setVisible( !getChildView("currency_links")->getVisible());
 		}
 	}
 
-	getChildView("getting_data")->setVisible( !mManager.canBuy() && !hasError);
+	getChildView("getting_data")->setVisible( !mManager.canBuy() && !hasError && !getChildView("currency_est")->getVisible());
+}
+
+void LLFloaterBuyCurrencyUI::collapsePanels(bool collapse)
+{
+	LLLayoutPanel* price_panel = getChild<LLLayoutPanel>("layout_panel_price");
+	
+	if (price_panel->isCollapsed() == collapse)
+		return;
+	
+	LLLayoutStack* outer_stack = getChild<LLLayoutStack>("outer_stack");	
+	LLLayoutPanel* required_panel = getChild<LLLayoutPanel>("layout_panel_required");
+	LLLayoutPanel* msg_panel = getChild<LLLayoutPanel>("layout_panel_msg");
+
+	S32 delta_height = price_panel->getRect().getHeight() + required_panel->getRect().getHeight() + msg_panel->getRect().getHeight();
+	delta_height *= (collapse ? -1 : 1);
+
+	LLIconCtrl* icon = getChild<LLIconCtrl>("normal_background");
+	LLRect rect = icon->getRect();
+	icon->setRect(rect.setOriginAndSize(rect.mLeft, rect.mBottom - delta_height, rect.getWidth(), rect.getHeight() + delta_height));
+
+	outer_stack->collapsePanel(price_panel, collapse);
+	outer_stack->collapsePanel(required_panel, collapse);
+	outer_stack->collapsePanel(msg_panel, collapse);
+
+	outer_stack->updateLayout();
+
+	LLRect floater_rect = getRect();
+	floater_rect.mBottom -= delta_height;
+	setShape(floater_rect, false);
 }
 
 void LLFloaterBuyCurrencyUI::onClickBuy()
@@ -265,6 +294,7 @@ void LLFloaterBuyCurrency::buyCurrency()
 	LLFloaterBuyCurrencyUI* ui = LLFloaterReg::showTypedInstance<LLFloaterBuyCurrencyUI>("buy_currency");
 	ui->noTarget();
 	ui->updateUI();
+	ui->collapsePanels(true);
 }
 
 // static
@@ -273,6 +303,7 @@ void LLFloaterBuyCurrency::buyCurrency(const std::string& name, S32 price)
 	LLFloaterBuyCurrencyUI* ui = LLFloaterReg::showTypedInstance<LLFloaterBuyCurrencyUI>("buy_currency");
 	ui->target(name, price);
 	ui->updateUI();
+	ui->collapsePanels(false);
 }
 
 
diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml
index 061af1b67c..e8e83301be 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <floater
- legacy_header_height="18"
+
  can_minimize="false"
- height="275"
+ height="285"
  layout="topleft"
  title="BUY L$"
  name="buy currency"
@@ -17,277 +17,385 @@
      name="info_cannot_buy">
         Unable to Buy
     </floater.string>
+    <floater.string
+     name="estimated_zero">
+        US$ 0.00
+    </floater.string>
     <icon
-     height="215"
+     height="245"
      image_name="Linden_Dollar_Background"
      layout="topleft"
      left="0"
      name="normal_background"
-     top="17"
+     top="0"
      use_draw_context_alpha="false"
      width="350" />
-   <text
-     type="string"
-     length="1"
-     follows="top|left|right"
-     font="SansSerifHuge"
-     layout="topleft"
-     left="20"
-     height="30"
-     top="25"
-     width="340"
-     name="info_need_more">
-        You need more L$
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="top|left"
-     height="16"
+  <layout_stack
+    animate="false"
+    name="outer_stack"
+    layout="topleft"
+    follows="all"
+    orientation="vertical"
+    left="0"
+    top="0"
+    width="350"
+    height="285">
+    <layout_panel
+     auto_resize="false"
+     name="layout_panel_title"
      layout="topleft"
-     top="246"
-     left="15"
-     width="300"
-     name="contacting">
-        Contacting LindeX...
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="top|left"
-     font="SansSerifHuge"
+     follows="all"
+     width="350"
+     height="35">
+      <text
+       type="string"
+       length="1"
+       follows="top|left|right"
+       font="SansSerifLarge"
+       layout="topleft"
+       left="20"
+       height="30"
+       top="8"
+       width="340"
+       name="info_need_more">
+          You need more L$
+      </text>
+      <text
+       type="string"
+       length="1"
+       follows="top|left|right"
+       font="SansSerifLarge"
+       layout="topleft"
+       left="20"
+       height="30"
+       top="8"
+       width="300"
+       name="info_buying">
+          Buy L$
+      </text>
+      <view_border
+       bevel_style="none"
+       height="0"
+       layout="topleft"
+       left="20"
+       name="text_border"
+       top_delta="25"
+       width="300"/>
+    </layout_panel>
+    <layout_panel
+     auto_resize="false"
+     name="layout_panel_price"
      layout="topleft"
-     left="20"
-     height="30"
-     top="25"
-     width="300"
-     name="info_buying">
-        Buy L$
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="top|left"
-     font="SansSerifMedium"
-     height="16"
+     follows="all"
+     width="350"
+     height="18">
+      <text
+       type="string"
+       length="1"
+       follows="top|left"
+       font="SansSerifMedium"
+       height="16"
+       layout="topleft"
+       left="20"
+       name="target_price_label"
+       top_pad="3"
+       width="210">
+          You need
+      </text>
+      <text
+       type="string"
+       length="1"
+       font="SansSerifMedium"
+       follows="top|left"
+       halign="right"
+       height="16"
+       layout="topleft"
+       left="200"
+       name="target_price"
+       top_delta="0"
+       width="120">
+          L$ [AMT]
+      </text>
+    </layout_panel>
+    <layout_panel
+     auto_resize="false"
+     name="layout_panel_balance"
      layout="topleft"
-     left="20"
-     name="balance_label"
-     top="65"
-     width="210">
-        I have
-    </text>
-    <text
-     type="string"
-     length="1"
-     font="SansSerifMedium"
-     follows="top|left"
-     halign="right"
-     height="16"
-     layout="topleft"
-     left="200"
-     name="balance_amount"
-     top_delta="0"
-     width="120">
+     follows="all"
+     width="350"
+     height="19">
+      <text
+       type="string"
+       length="1"
+       follows="top|left"
+       font="SansSerifMedium"
+       height="16"
+       layout="topleft"
+       left="20"
+       name="balance_label"
+       top_pad="5"
+       width="210">
+        You now have
+      </text>
+      <text
+       type="string"
+       length="1"
+       font="SansSerifMedium"
+       follows="top|left"
+       halign="right"
+       height="16"
+       layout="topleft"
+       left="200"
+       name="balance_amount"
+       top_delta="0"
+       width="120">
         L$ [AMT]
-    </text>
-    <text
-     type="string"
-     length="1"
-     follows="top|left"
-     font="SansSerifMedium"
-     height="16"
-     top="95"
-     layout="topleft"
-     left="20"
-     name="currency_action"
-     width="210">
-        I want to buy
-    </text>
-    <text
-     font="SansSerifMedium"
-     type="string"
-     length="1"
-     follows="left|top"
-     height="16"
-     layout="topleft"
-     top_delta="0"
-     left="217"
-     name="currency_label"
-     width="15">
-      L$
-    </text>
-    <line_editor
-     type="string"
-     max_length_bytes="10"
-     halign="right"
-     font="SansSerifMedium"
-     select_on_focus="true"
-     follows="top|left"
-     top_delta="-7"
-     height="22"
-     label="L$"
-     left_pad="3"
-     name="currency_amt"
-     width="85">
-        1234
-    </line_editor>
-    <text
-     type="string"
-     font="SansSerifMedium"
-     length="1"
-     follows="top|left"
-     height="16"
-     layout="topleft"
-     left="20"
-     top="125"
-     name="buying_label"
-     width="210">
-        For the price
-    </text>
-    <text
-     type="string"
-     length="1"
-     font="SansSerifMedium"
-     text_color="EmphasisColor"
-     follows="top|left"
-     halign="right"
-     height="16"
-     top_delta="0"
+      </text>
+    </layout_panel>
+    <layout_panel
+     auto_resize="false"
+     name="layout_panel_required"
      layout="topleft"
-     left="150"
-     name="currency_est"
-     width="170">
-     approx. [LOCALAMOUNT]
-    </text>
-    <text
-     type="string"
-     font="SansSerifSmall"
-     text_color="EmphasisColor"
-     length="1"
-     follows="top|left"
-     height="16"
-     layout="topleft"
-     top="125"
-     left="170"
-     width="150"
-     halign="right"
-     name="getting_data">
-        Estimating...
-    </text>
-    <text
-     type="string"
-     font="SansSerifSmall"
-     top="145"
-     length="1"
-     follows="top|left"
-     height="16"
-     halign="right"
-     left="20"
-     width="300"
-     layout="topleft"
-     name="buy_action">
-        [ACTION]
-    </text>
-    <text
-     type="string"
-     font="SansSerifMedium"
-     length="1"
-     follows="top|left"
-     height="16"
-     layout="topleft"
-     left="20"
-     name="total_label"
-     top="165"
-     width="210">
-        My new balance will be
-    </text>
-    <text
-     type="string"
-     length="1"
-     font="SansSerifMedium"
-     follows="top|left"
-     top_delta="0"
-     height="16"
-     layout="topleft"
-     left="200"
-     halign="right"
-     name="total_amount"
-     width="120">
+     follows="all"
+     width="350"
+     height="22">
+      <text
+        type="string"
+        length="1"
+        follows="top|left"
+        font="SansSerifMedium"
+        font.style="BOLD"
+        height="16"
+        layout="topleft"
+        left="20"
+        name="required_label"
+        top_pad="6"
+        width="210">
+        You should buy at least
+      </text>
+      <text
+       type="string"
+       length="1"
+       font="SansSerifMedium"
+       follows="top|left"
+       halign="right"
+       height="16"
+       layout="topleft"
+       left="200"
+       name="required_amount"
+       top_delta="0"
+       width="120">
         L$ [AMT]
-    </text>
-    <text
-     type="string"
-     length="1"
-     text_color="LtGray_50"
-     follows="top|left"
+      </text>
+    </layout_panel>
+    <layout_panel
+     auto_resize="false"
+     name="layout_panel_action"
      layout="topleft"
-     halign="right"
-     top="189"
-     left="20"
-     width="300"
-     height="30"
-     name="currency_links">
-      [http://www.secondlife.com/my/account/payment_method_management.php payment method] | [http://www.secondlife.com/my/account/currency.php currency]
-    </text>
-    <text
-     type="string"
-     length="1"
-     text_color="LtGray_50"
-     follows="top|left"
+     follows="all"
+     width="350"
+     height="90">
+      <view_border
+       bevel_style="none"
+       height="0"
+       layout="topleft"
+       left="20"
+       name="text_border_2"
+       top_pad="5"
+       width="300"/>
+      <text
+       type="string"
+       length="1"
+       follows="top|left"
+       font="SansSerifMedium"
+       height="16"
+       top_pad="15"
+       layout="topleft"
+       left="20"
+       name="currency_action"
+       width="210">
+          Choose amount to buy
+      </text>
+      <text
+       font="SansSerifMedium"
+       type="string"
+       length="1"
+       follows="left|top"
+       height="16"
+       layout="topleft"
+       top_delta="0"
+       left="247"
+       name="currency_label"
+       width="15">
+        L$
+      </text>
+      <line_editor
+       type="string"
+       max_length_bytes="10"
+       halign="right"
+       font="SansSerifMedium"
+       select_on_focus="true"
+       follows="top|left"
+       top_delta="-4"
+       height="22"
+       label="L$"
+       left_pad="3"
+       name="currency_amt"
+       width="55">
+          1234
+      </line_editor>
+      <text
+       type="string"
+       length="1"
+       font="SansSerifMedium"
+       text_color="EmphasisColor"
+       follows="top|left"
+       halign="right"
+       height="16"
+       top_pad="4"
+       layout="topleft"
+       left="150"
+       name="currency_est"
+       width="170">
+       Approx. [LOCALAMOUNT]
+      </text>
+      <text
+       type="string"
+       font="SansSerifSmall"
+       text_color="EmphasisColor"
+       length="1"
+       follows="top|left"
+       height="16"
+       layout="topleft"
+       left="170"
+       top_delta="0"
+       width="150"
+       halign="right"
+       name="getting_data">
+          Estimating...
+      </text>
+      <text
+       type="string"
+       font="SansSerifMedium"
+       length="1"
+       follows="top|left"
+       height="16"
+       layout="topleft"
+       left="20"
+       name="total_label"
+       top_pad="10"
+       width="210">
+          Your new balance will be
+      </text>
+      <text
+       type="string"
+       length="1"
+       font="SansSerifMedium"
+       follows="top|left"
+       top_delta="0"
+       height="16"
+       layout="topleft"
+       left="200"
+       halign="right"
+       name="total_amount"
+       width="120">
+          L$ [AMT]
+      </text>
+    </layout_panel>
+    <layout_panel
+     auto_resize="false"
+     name="layout_panel_msg"
      layout="topleft"
-     halign="right"
-     top="202"
-     left="20"
-     width="300"
-     height="30"
-     name="exchange_rate_note">
+     follows="all"
+     width="350"
+     height="50">
+      <view_border
+       bevel_style="none"
+       height="0"
+       layout="topleft"
+       left="20"
+       name="text_border_3"
+       top_pad="0"
+       width="300"/>
+      <text
+       type="string"
+       length="1"
+       text_color="LtGray_50"
+       follows="top|left"
+       layout="topleft"
+       halign="right"
+       top_pad="3"
+       left="20"
+       width="300"
+       height="30"
+       name="currency_links">
+        [http://www.secondlife.com/my/account/payment_method_management.php payment method] | [http://www.secondlife.com/my/account/currency.php currency]
+      </text>
+      <text
+       type="string"
+       length="1"
+       text_color="LtGray_50"
+       follows="top|left"
+       layout="topleft"
+       halign="right"
+       top="19"
+       left="20"
+       width="300"
+       height="30"
+       name="exchange_rate_note">
 Re-enter amount to see the latest exchange rate.
-    </text>
-    <text
-     type="string"
-     length="1"
-     text_color="LtGray_50"
-     follows="top|left"
-     layout="topleft"
-     halign="right"
-     top="208"
-     left="10"
-     width="310"
-     height="35"
-     name="purchase_warning_repurchase">
-        Confirming this purchase only buys L$, not the object.
-    </text>
-    <text
-     type="string"
-     length="1"
-     text_color="LtGray_50"
-     follows="top|left"
-     layout="topleft"
-     halign="right"
-     top="213"
-     left="20"
-     width="300"
-     height="30"
-     name="purchase_warning_notenough">
-        You aren&apos;t buying enough L$. Please increase the amount.
-    </text>
-
-    <button
-     follows="bottom|left"
-     height="20"
-     label="Buy Now"
-     layout="topleft"
-     left="151"
-     name="buy_btn"
-     top="242"
-     width="90"/>
-    <button
-     follows="bottom|right"
-     height="20"
-     label="Cancel"
+      </text>
+      <text
+       type="string"
+       length="1"
+       follows="top|left"
+       layout="topleft"
+       font="SansSerifMedium"
+       top="10"
+       left="20"
+       width="310"
+       height="35"
+       name="purchase_warning_repurchase">
+After you receive your L$, you should try your
+purchase again.
+      </text>
+    </layout_panel>
+    <layout_panel
+     auto_resize="false"
+     name="layout_panel_buttons"
      layout="topleft"
-     left_pad="10"
-     name="cancel_btn"
-     width="90"/>
+     follows="all"
+     width="350"
+     height="40">
+      <text
+       type="string"
+       length="1"
+       follows="top|left"
+       height="16"
+       layout="topleft"
+       top_pad="0"
+       left="15"
+       width="300"
+       name="contacting">
+          Contacting LindeX...
+        </text>
+      <button
+       follows="top|left|right"
+       height="20"
+       label="Buy L$ now"
+       layout="topleft"
+       left="151"
+       name="buy_btn"
+       bottom_delta ="8"
+       width="90"/>
+      <button
+       follows="top|left|right"
+       height="20"
+       label="Cancel"
+       layout="topleft"
+       left_pad="10"     
+       name="cancel_btn"
+       width="90"/>
+    </layout_panel>
+  </layout_stack>
 </floater>
-- 
cgit v1.2.3