SL-13335 Friendlier L$ Buy flow when no payment method on file
parent
749464660f
commit
2c0814b00a
|
|
@ -77,6 +77,7 @@ LLNotificationForm::FormButton::FormButton()
|
|||
text("text"),
|
||||
ignore("ignore"),
|
||||
is_default("default"),
|
||||
width("width", 0),
|
||||
type("type")
|
||||
{
|
||||
// set type here so it gets serialized
|
||||
|
|
|
|||
|
|
@ -191,6 +191,7 @@ public:
|
|||
Mandatory<std::string> text;
|
||||
Optional<std::string> ignore;
|
||||
Optional<bool> is_default;
|
||||
Optional<S32> width;
|
||||
|
||||
Mandatory<std::string> type;
|
||||
|
||||
|
|
|
|||
|
|
@ -209,6 +209,7 @@ set(viewer_SOURCE_FILES
|
|||
llflexibleobject.cpp
|
||||
llfloaterabout.cpp
|
||||
llfloaterbvhpreview.cpp
|
||||
llfloateraddpaymentmethod.cpp
|
||||
llfloaterauction.cpp
|
||||
llfloaterautoreplacesettings.cpp
|
||||
llfloateravatar.cpp
|
||||
|
|
@ -839,6 +840,7 @@ set(viewer_HEADER_FILES
|
|||
llflexibleobject.h
|
||||
llfloaterabout.h
|
||||
llfloaterbvhpreview.h
|
||||
llfloateraddpaymentmethod.h
|
||||
llfloaterauction.h
|
||||
llfloaterautoreplacesettings.h
|
||||
llfloateravatar.h
|
||||
|
|
|
|||
|
|
@ -253,6 +253,19 @@ std::string LLAvatarPropertiesProcessor::paymentInfo(const LLAvatarData* avatar_
|
|||
return LLTrans::getString(payment_text);
|
||||
}
|
||||
|
||||
//static
|
||||
bool LLAvatarPropertiesProcessor::hasPaymentInfoOnFile(const LLAvatarData* avatar_data)
|
||||
{
|
||||
// Special accounts like M Linden don't have payment info revealed.
|
||||
if (!avatar_data->caption_text.empty()) return true;
|
||||
|
||||
// Linden employees don't have payment info revealed
|
||||
const S32 LINDEN_EMPLOYEE_INDEX = 3;
|
||||
if (avatar_data->caption_index == LINDEN_EMPLOYEE_INDEX) return true;
|
||||
|
||||
return ((avatar_data->flags & AVATAR_TRANSACTED) || (avatar_data->flags & AVATAR_IDENTIFIED));
|
||||
}
|
||||
|
||||
void LLAvatarPropertiesProcessor::processAvatarPropertiesReply(LLMessageSystem* msg, void**)
|
||||
{
|
||||
LLAvatarData avatar_data;
|
||||
|
|
|
|||
|
|
@ -232,6 +232,8 @@ public:
|
|||
// Used for profiles, inspectors.
|
||||
static std::string paymentInfo(const LLAvatarData* avatar_data);
|
||||
|
||||
static bool hasPaymentInfoOnFile(const LLAvatarData* avatar_data);
|
||||
|
||||
static void processAvatarPropertiesReply(LLMessageSystem* msg, void**);
|
||||
|
||||
static void processAvatarInterestsReply(LLMessageSystem* msg, void**);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,81 @@
|
|||
/**
|
||||
* @file llfloateraddpaymentmethod.cpp
|
||||
* @brief LLFloaterAddPaymentMethod class implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, 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 "llfloateraddpaymentmethod.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llweb.h"
|
||||
|
||||
|
||||
LLFloaterAddPaymentMethod::LLFloaterAddPaymentMethod(const LLSD& key)
|
||||
: LLFloater(key)
|
||||
{
|
||||
}
|
||||
|
||||
LLFloaterAddPaymentMethod::~LLFloaterAddPaymentMethod()
|
||||
{
|
||||
}
|
||||
|
||||
BOOL LLFloaterAddPaymentMethod::postBuild()
|
||||
{
|
||||
setCanDrag(FALSE);
|
||||
getChild<LLButton>("continue_btn")->setCommitCallback(boost::bind(&LLFloaterAddPaymentMethod::onContinueBtn, this));
|
||||
getChild<LLButton>("close_btn")->setCommitCallback(boost::bind(&LLFloaterAddPaymentMethod::onCloseBtn, this));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLFloaterAddPaymentMethod::onOpen(const LLSD& key)
|
||||
{
|
||||
centerOnScreen();
|
||||
}
|
||||
|
||||
void LLFloaterAddPaymentMethod::onContinueBtn()
|
||||
{
|
||||
closeFloater();
|
||||
LLNotificationsUtil::add("AddPaymentMethod", LLSD(), LLSD(),
|
||||
[this](const LLSD¬if, const LLSD&resp)
|
||||
{
|
||||
S32 opt = LLNotificationsUtil::getSelectedOption(notif, resp);
|
||||
if (opt == 0)
|
||||
{
|
||||
LLWeb::loadURL(this->getString("continue_url"));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void LLFloaterAddPaymentMethod::onCloseBtn()
|
||||
{
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLFloaterAddPaymentMethod::centerOnScreen()
|
||||
{
|
||||
LLVector2 window_size = LLUI::getInstance()->getWindowSize();
|
||||
centerWithin(LLRect(0, 0, ll_round(window_size.mV[VX]), ll_round(window_size.mV[VY])));
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
/**
|
||||
* @file llfloateraddpaymentmethod.h
|
||||
* @brief LLFloaterAddPaymentMethod class definition
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, 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_FLOATER_ADDPAYMENTMETHOD_H
|
||||
#define LL_FLOATER_ADDPAYMENTMETHOD_H
|
||||
|
||||
#include "llfloater.h"
|
||||
|
||||
class LLFloaterAddPaymentMethod:
|
||||
public LLFloater
|
||||
{
|
||||
friend class LLFloaterReg;
|
||||
public:
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
private:
|
||||
LLFloaterAddPaymentMethod(const LLSD& key);
|
||||
|
||||
void centerOnScreen();
|
||||
|
||||
void onCloseBtn();
|
||||
void onContinueBtn();
|
||||
|
||||
/*virtual*/ ~LLFloaterAddPaymentMethod();
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -290,22 +290,72 @@ void LLFloaterBuyCurrencyUI::onClickCancel()
|
|||
LLStatusBar::sendMoneyBalanceRequest();
|
||||
}
|
||||
|
||||
LLFetchAvatarPaymentInfo* LLFloaterBuyCurrency::sPropertiesRequest = NULL;
|
||||
|
||||
// static
|
||||
void LLFloaterBuyCurrency::buyCurrency()
|
||||
{
|
||||
LLFloaterBuyCurrencyUI* ui = LLFloaterReg::showTypedInstance<LLFloaterBuyCurrencyUI>("buy_currency");
|
||||
ui->noTarget();
|
||||
ui->updateUI();
|
||||
ui->collapsePanels(true);
|
||||
delete sPropertiesRequest;
|
||||
sPropertiesRequest = new LLFetchAvatarPaymentInfo(false);
|
||||
}
|
||||
|
||||
// static
|
||||
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);
|
||||
delete sPropertiesRequest;
|
||||
sPropertiesRequest = new LLFetchAvatarPaymentInfo(true, name, price);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterBuyCurrency::handleBuyCurrency(bool has_piof, bool has_target, const std::string& name, S32 price)
|
||||
{
|
||||
delete sPropertiesRequest;
|
||||
sPropertiesRequest = NULL;
|
||||
|
||||
if (has_piof)
|
||||
{
|
||||
LLFloaterBuyCurrencyUI* ui = LLFloaterReg::showTypedInstance<LLFloaterBuyCurrencyUI>("buy_currency");
|
||||
if (has_target)
|
||||
{
|
||||
ui->target(name, price);
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->noTarget();
|
||||
}
|
||||
ui->updateUI();
|
||||
ui->collapsePanels(!has_target);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLFloaterReg::showInstance("add_payment_method");
|
||||
}
|
||||
}
|
||||
|
||||
LLFetchAvatarPaymentInfo::LLFetchAvatarPaymentInfo(bool has_target, const std::string& name, S32 price)
|
||||
: mAvatarID(gAgent.getID()),
|
||||
mHasTarget(has_target),
|
||||
mPrice(price),
|
||||
mName(name)
|
||||
{
|
||||
LLAvatarPropertiesProcessor* processor = LLAvatarPropertiesProcessor::getInstance();
|
||||
// register ourselves as an observer
|
||||
processor->addObserver(mAvatarID, this);
|
||||
// send a request (duplicates will be suppressed inside the avatar
|
||||
// properties processor)
|
||||
processor->sendAvatarPropertiesRequest(mAvatarID);
|
||||
}
|
||||
|
||||
LLFetchAvatarPaymentInfo::~LLFetchAvatarPaymentInfo()
|
||||
{
|
||||
LLAvatarPropertiesProcessor::getInstance()->removeObserver(mAvatarID, this);
|
||||
}
|
||||
|
||||
void LLFetchAvatarPaymentInfo::processProperties(void* data, EAvatarProcessorType type)
|
||||
{
|
||||
if (data && type == APT_PROPERTIES)
|
||||
{
|
||||
LLAvatarData* avatar_data = static_cast<LLAvatarData*>(data);
|
||||
LLFloaterBuyCurrency::handleBuyCurrency(LLAvatarPropertiesProcessor::hasPaymentInfoOnFile(avatar_data), mHasTarget, mName, mPrice);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,15 +27,34 @@
|
|||
#ifndef LL_LLFLOATERBUYCURRENCY_H
|
||||
#define LL_LLFLOATERBUYCURRENCY_H
|
||||
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "stdtypes.h"
|
||||
|
||||
#include "llagent.h"
|
||||
class LLFloater;
|
||||
|
||||
class LLFetchAvatarPaymentInfo : public LLAvatarPropertiesObserver
|
||||
{
|
||||
public:
|
||||
LLFetchAvatarPaymentInfo(bool has_target, const std::string& name = std::string(), S32 price = 0);
|
||||
~LLFetchAvatarPaymentInfo();
|
||||
|
||||
void processProperties(void* data, EAvatarProcessorType type);
|
||||
|
||||
private:
|
||||
LLUUID mAvatarID;
|
||||
bool mHasTarget;
|
||||
std::string mName;
|
||||
S32 mPrice;
|
||||
};
|
||||
|
||||
|
||||
class LLFloaterBuyCurrency
|
||||
{
|
||||
public:
|
||||
static void buyCurrency();
|
||||
static void buyCurrency(const std::string& name, S32 price);
|
||||
|
||||
static void handleBuyCurrency(bool has_piof, bool has_target, const std::string& name, S32 price);
|
||||
/* name should be a noun phrase of the object or service being bought:
|
||||
"That object costs"
|
||||
"Trying to give"
|
||||
|
|
@ -44,7 +63,8 @@ public:
|
|||
*/
|
||||
|
||||
static LLFloater* buildFloater(const LLSD& key);
|
||||
|
||||
static LLFetchAvatarPaymentInfo* sPropertiesRequest;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -121,6 +121,15 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
|
|||
data.mURLExternal = mNotification->getURLOpenExternally();
|
||||
}
|
||||
|
||||
if((*it).has("width"))
|
||||
{
|
||||
data.mWidth = (*it)["width"].asInteger();
|
||||
}
|
||||
else
|
||||
{
|
||||
data.mWidth = 0;
|
||||
}
|
||||
|
||||
mButtonData.push_back(data);
|
||||
option_index++;
|
||||
}
|
||||
|
|
@ -159,15 +168,29 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
|
|||
// Calc total width of buttons
|
||||
S32 button_width = 0;
|
||||
S32 sp = font->getWidth(std::string("OO"));
|
||||
S32 btn_total_width = 0;
|
||||
S32 default_size_btns = 0;
|
||||
for( S32 i = 0; i < num_options; i++ )
|
||||
{
|
||||
{
|
||||
S32 w = S32(font->getWidth( options[i].second ) + 0.99f) + sp + 2 * LLBUTTON_H_PAD;
|
||||
button_width = llmax( w, button_width );
|
||||
if (mButtonData[i].mWidth > w)
|
||||
{
|
||||
btn_total_width += mButtonData[i].mWidth;
|
||||
}
|
||||
else
|
||||
{
|
||||
button_width = llmax(w, button_width);
|
||||
default_size_btns++;
|
||||
}
|
||||
}
|
||||
S32 btn_total_width = button_width;
|
||||
|
||||
if( num_options > 1 )
|
||||
{
|
||||
btn_total_width = (num_options * button_width) + ((num_options - 1) * BTN_HPAD);
|
||||
btn_total_width = btn_total_width + (button_width * default_size_btns) + ((num_options - 1) * BTN_HPAD);
|
||||
}
|
||||
else
|
||||
{
|
||||
btn_total_width = llmax(btn_total_width, button_width);
|
||||
}
|
||||
|
||||
// Message: create text box using raw string, as text has been structure deliberately
|
||||
|
|
@ -333,7 +356,7 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
|
|||
if(btn)
|
||||
{
|
||||
btn->setName(options[i].first);
|
||||
btn->setRect(button_rect.setOriginAndSize( button_left, VPAD, button_width, BTN_HEIGHT ));
|
||||
btn->setRect(button_rect.setOriginAndSize( button_left, VPAD, (mButtonData[i].mWidth == 0) ? button_width : mButtonData[i].mWidth, BTN_HEIGHT ));
|
||||
btn->setLabel(options[i].second);
|
||||
btn->setFont(font);
|
||||
|
||||
|
|
@ -348,7 +371,7 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
|
|||
btn->setFocus(TRUE);
|
||||
}
|
||||
}
|
||||
button_left += button_width + BTN_HPAD;
|
||||
button_left += ((mButtonData[i].mWidth == 0) ? button_width : mButtonData[i].mWidth) + BTN_HPAD;
|
||||
}
|
||||
|
||||
setCheckBoxes(HPAD, VPAD);
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ private:
|
|||
LLButton* mButton;
|
||||
std::string mURL;
|
||||
U32 mURLExternal;
|
||||
S32 mWidth;
|
||||
};
|
||||
std::vector<ButtonData> mButtonData;
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
#include "llcompilequeue.h"
|
||||
#include "llfasttimerview.h"
|
||||
#include "llfloaterabout.h"
|
||||
#include "llfloateraddpaymentmethod.h"
|
||||
#include "llfloaterauction.h"
|
||||
#include "llfloaterautoreplacesettings.h"
|
||||
#include "llfloateravatar.h"
|
||||
|
|
@ -194,6 +195,7 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterAboutUtil::registerFloater();
|
||||
LLFloaterReg::add("block_timers", "floater_fast_timers.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFastTimerView>);
|
||||
LLFloaterReg::add("about_land", "floater_about_land.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLand>);
|
||||
LLFloaterReg::add("add_payment_method", "floater_add_payment_method.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAddPaymentMethod>);
|
||||
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>);
|
||||
|
|
|
|||
|
|
@ -957,4 +957,7 @@
|
|||
<color
|
||||
name="OutfitGalleryItemUnselected"
|
||||
value="0.4 0.4 0.4 1" />
|
||||
<color
|
||||
name="AddPaymentPanel"
|
||||
value="0.27 0.27 0.27 1" />
|
||||
</colors>
|
||||
|
|
|
|||
|
|
@ -45,6 +45,10 @@ with the same filename but different name
|
|||
<texture name="AddItem_Off" file_name="icons/AddItem_Off.png" preload="false" />
|
||||
<texture name="AddItem_Press" file_name="icons/AddItem_Press.png" preload="false" />
|
||||
|
||||
<texture name="add_payment_image_center" file_name="windows/add_payment_image_center.png" preload="true" />
|
||||
<texture name="add_payment_image_left" file_name="windows/add_payment_image_left.png" preload="true" />
|
||||
<texture name="add_payment_image_right" file_name="windows/add_payment_image_right.png" preload="true" />
|
||||
|
||||
<texture name="Arrow_Left_Off" file_name="navbar/Arrow_Left_Off.png" preload="true" />
|
||||
<texture name="Arrow_Right_Off" file_name="navbar/Arrow_Right_Off.png" preload="true" />
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 29 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 29 KiB |
|
|
@ -0,0 +1,141 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater
|
||||
height="405"
|
||||
width="900"
|
||||
layout="topleft"
|
||||
name="floater_add_payment_method"
|
||||
single_instance="true"
|
||||
show_title="false"
|
||||
legacy_header_height="0"
|
||||
header_height="0"
|
||||
background_visible="false"
|
||||
can_resize="false"
|
||||
can_drag_on_left="false"
|
||||
can_minimize="false"
|
||||
can_close="false">
|
||||
<floater.string
|
||||
name="continue_url">
|
||||
https://secondlife.com/my/lindex/buy.php?associate_for_viewer=1
|
||||
</floater.string>
|
||||
<panel
|
||||
background_opaque="false"
|
||||
bg_alpha_color="AddPaymentPanel"
|
||||
border_visible="false"
|
||||
background_visible="true"
|
||||
label="wrapper_panel"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="wrapper_panel"
|
||||
top="0"
|
||||
height="405"
|
||||
width="900"
|
||||
follows="all"
|
||||
translate="false">
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left|right"
|
||||
font="SansSerifLargeBold"
|
||||
text_color="White"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
height="14"
|
||||
top_pad="30"
|
||||
width="900"
|
||||
halign="center"
|
||||
name="title_txt">
|
||||
Add a payment method to buy Linden dollars and enjoy more of Second Life.
|
||||
</text>
|
||||
<button
|
||||
follows="top|left|right"
|
||||
height="24"
|
||||
label="Get started"
|
||||
font="SansSerifMedium"
|
||||
font.style="BOLD"
|
||||
layout="topleft"
|
||||
left="320"
|
||||
name="continue_btn"
|
||||
image_unselected="PushButton_Login"
|
||||
image_pressed="PushButton_Login_Pressed"
|
||||
image_hover_unselected="PushButton_Login_Over"
|
||||
label_color="White"
|
||||
top_pad ="15"
|
||||
width="140"/>
|
||||
<button
|
||||
follows="top|left|right"
|
||||
height="24"
|
||||
label="Later"
|
||||
layout="topleft"
|
||||
left_pad="9"
|
||||
name="close_btn"
|
||||
width="90"/>
|
||||
<icon
|
||||
height="195"
|
||||
width="260"
|
||||
image_name="add_payment_image_left"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
name="image_left"
|
||||
top_pad="30"
|
||||
use_draw_context_alpha="false"/>
|
||||
<icon
|
||||
height="195"
|
||||
width="260"
|
||||
image_name="add_payment_image_center"
|
||||
layout="topleft"
|
||||
left_pad="30"
|
||||
name="image_center"
|
||||
use_draw_context_alpha="false"/>
|
||||
<icon
|
||||
height="195"
|
||||
width="260"
|
||||
image_name="add_payment_image_right"
|
||||
layout="topleft"
|
||||
left_pad="30"
|
||||
name="image_right"
|
||||
use_draw_context_alpha="false"/>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerifMedium"
|
||||
text_color="White"
|
||||
height="75"
|
||||
width="260"
|
||||
top_pad="15"
|
||||
layout="topleft"
|
||||
word_wrap="true"
|
||||
left="30"
|
||||
name="image_left_desc">
|
||||
Create an avatar you love. Choose from millions of items in stores and the Second Life Marketplace. Your style is here.
|
||||
</text>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerifMedium"
|
||||
text_color="White"
|
||||
height="75"
|
||||
width="260"
|
||||
layout="topleft"
|
||||
word_wrap="true"
|
||||
left_pad="30"
|
||||
name="image_center_desc">
|
||||
Donate to your favorite performers and hosts. Your support helps them create great experiences.
|
||||
</text>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerifMedium"
|
||||
text_color="White"
|
||||
height="75"
|
||||
width="260"
|
||||
layout="topleft"
|
||||
word_wrap="true"
|
||||
left_pad="30"
|
||||
name="image_right_desc">
|
||||
Make the home of your dreams. With millions of items available to purchase, you can make your retreat unique.
|
||||
</text>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -11446,7 +11446,28 @@ Cannot create large prims that intersect other residents. Please re-try when ot
|
|||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="AddPaymentMethod"
|
||||
type="alertmodal">
|
||||
On the following page, choose a L$ amount
|
||||
and click a place Order button. You will be
|
||||
able to add a payment method at checkout.
|
||||
<tag>confirm</tag>
|
||||
<form name="form">
|
||||
<button
|
||||
default="true"
|
||||
index="0"
|
||||
width="120"
|
||||
name="Continue"
|
||||
text="Continue"/>
|
||||
<button
|
||||
index="1"
|
||||
name="Cancel"
|
||||
text="Cancel"/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alert.tga"
|
||||
|
|
|
|||
Loading…
Reference in New Issue