EXP-840 FIX -- Create outbox panels to help the user get started on the marketplace and to indicate drag and drop targets.

EXP-858 PROGRESS -- Outbox sync failure error handling
EXP-908 FIX -- Hide outbox when appropriate
EXP-1062 FIX -- Add modal dialog for outbox sync complete
EXP-1096 FIX -- Extra space below Received Items panel for an account that does not have a Merchant Account setup, no outbox display
EXP-1104 FIX -- User can activate Merchant Outbox synch button when outbox is empty

* Added separate class for outbox view to support error tag rendering
* Added confirmation for sync complete.
* Added different outbox messages for empty outbox, non-merchant and error: merchant but no outbox
* Progress on a bunch of other fronts.
meow-7.2.2
Leslie Linden 2011-08-19 16:20:29 -07:00
parent 38aa19614e
commit 7b09592bf9
18 changed files with 525 additions and 57 deletions

View File

@ -368,6 +368,7 @@ set(viewer_SOURCE_FILES
llpanelmarketplaceinbox.cpp
llpanelmarketplaceinboxinventory.cpp
llpanelmarketplaceoutbox.cpp
llpanelmarketplaceoutboxinventory.cpp
llpanelmediasettingsgeneral.cpp
llpanelmediasettingspermissions.cpp
llpanelmediasettingssecurity.cpp
@ -924,6 +925,7 @@ set(viewer_HEADER_FILES
llpanelmarketplaceinbox.h
llpanelmarketplaceinboxinventory.h
llpanelmarketplaceoutbox.h
llpanelmarketplaceoutboxinventory.h
llpanelmediasettingsgeneral.h
llpanelmediasettingspermissions.h
llpanelmediasettingssecurity.h

View File

@ -4226,6 +4226,17 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>InventoryMarketplaceUserStatus</key>
<map>
<key>Comment</key>
<string>Marketplace user status.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string />
</map>
<key>InventorySortOrder</key>
<map>
<key>Comment</key>

View File

@ -34,6 +34,7 @@
#include "lleventcoro.h"
#include "llinventorypanel.h"
#include "llloadingindicator.h"
#include "llnotificationsutil.h"
#include "llpanelmarketplaceinbox.h"
#include "llsidepanelinventory.h"
#include "llsidetray.h"
@ -100,7 +101,7 @@ void LLPanelMarketplaceOutbox::onSelectionChange()
LLInventoryPanel * LLPanelMarketplaceOutbox::setupInventoryPanel()
{
LLView * outbox_inventory_placeholder = getChild<LLView>("outbox_inventory_placeholder");
LLView * outbox_inventory_placeholder = getChild<LLView>("outbox_inventory_placeholder_panel");
LLView * outbox_inventory_parent = outbox_inventory_placeholder->getParent();
mInventoryPanel =
@ -150,9 +151,7 @@ BOOL LLPanelMarketplaceOutbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL d
bool LLPanelMarketplaceOutbox::isOutboxEmpty() const
{
// TODO: Check for contents of outbox
return false;
return (getTotalItemCount() == 0);
}
bool LLPanelMarketplaceOutbox::isSyncInProgress() const
@ -176,7 +175,7 @@ void timeDelay(LLCoros::self& self, LLPanelMarketplaceOutbox* outboxPanel)
waitForEventOn(self, "mainloop");
}
outboxPanel->onSyncComplete();
outboxPanel->onSyncComplete(true, LLSD::emptyMap());
gTimeDelayDebugFunc = "";
}
@ -193,7 +192,7 @@ public:
void completed(U32 status, const std::string& reason, const LLSD& content)
{
llinfos << "inventory_import complete status: " << status << llendl;
llinfos << "inventory_import complete status: " << status << ", reason: " << reason << llendl;
if (isGoodStatus(status))
{
@ -212,7 +211,7 @@ public:
llwarns << "failed" << llendl;
}
mOutboxPanel->onSyncComplete();
mOutboxPanel->onSyncComplete(isGoodStatus(status), content);
}
private:
@ -248,10 +247,19 @@ void LLPanelMarketplaceOutbox::onSyncButtonClicked()
//gTimeDelayDebugFunc = LLCoros::instance().launch("LLPanelMarketplaceOutbox timeDelay", boost::bind(&timeDelay, _1, this));
}
void LLPanelMarketplaceOutbox::onSyncComplete()
void LLPanelMarketplaceOutbox::onSyncComplete(bool goodStatus, const LLSD& content)
{
mSyncInProgress = false;
updateSyncButtonStatus();
if (goodStatus)
{
LLNotificationsUtil::add("OutboxUploadComplete", LLSD::emptyMap(), LLSD::emptyMap());
}
else
{
LLNotificationsUtil::add("OutboxUploadHadErrors", LLSD::emptyMap(), LLSD::emptyMap());
}
}
void LLPanelMarketplaceOutbox::updateSyncButtonStatus()
@ -293,9 +301,10 @@ U32 LLPanelMarketplaceOutbox::getTotalItemCount() const
void LLPanelMarketplaceOutbox::draw()
{
U32 item_count = getTotalItemCount();
const U32 item_count = getTotalItemCount();
const bool not_empty = (item_count > 0);
if (item_count > 0)
if (not_empty)
{
std::string item_count_str = llformat("%d", item_count);
@ -307,6 +316,11 @@ void LLPanelMarketplaceOutbox::draw()
{
getChild<LLButton>("outbox_btn")->setLabel(getString("OutboxLabelNoArg"));
}
if (!isSyncInProgress())
{
mSyncButton->setEnabled(not_empty);
}
LLPanel::draw();
}

View File

@ -63,7 +63,7 @@ public:
bool isOutboxEmpty() const;
bool isSyncInProgress() const;
void onSyncComplete();
void onSyncComplete(bool goodStatus, const LLSD& content);
/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
EDragAndDropType cargo_type,

View File

@ -0,0 +1,172 @@
/**
* @file llpanelmarketplaceoutboxinventory.cpp
* @brief LLOutboxInventoryPanel class definition
*
* $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llpanelmarketplaceoutboxinventory.h"
#include "llfolderview.h"
#include "llfoldervieweventlistener.h"
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
#include "llpanellandmarks.h"
#include "llplacesinventorybridge.h"
#include "llviewerfoldertype.h"
//
// statics
//
static LLDefaultChildRegistry::Register<LLOutboxInventoryPanel> r1("outbox_inventory_panel");
static LLDefaultChildRegistry::Register<LLOutboxFolderViewFolder> r2("outbox_folder_view_folder");
//
// LLOutboxInventoryPanel Implementation
//
LLOutboxInventoryPanel::LLOutboxInventoryPanel(const LLOutboxInventoryPanel::Params& p)
: LLInventoryPanel(p)
{
}
LLOutboxInventoryPanel::~LLOutboxInventoryPanel()
{
}
// virtual
void LLOutboxInventoryPanel::buildFolderView(const LLInventoryPanel::Params& params)
{
// Determine the root folder in case specified, and
// build the views starting with that folder.
LLUUID root_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false);
// leslie -- temporary HACK to work around sim not creating outbox with proper system folder type
if (root_id.isNull())
{
std::string start_folder_name(params.start_folder());
LLInventoryModel::cat_array_t* cats;
LLInventoryModel::item_array_t* items;
gInventory.getDirectDescendentsOf(gInventory.getRootFolderID(), cats, items);
if (cats)
{
for (LLInventoryModel::cat_array_t::const_iterator cat_it = cats->begin(); cat_it != cats->end(); ++cat_it)
{
LLInventoryCategory* cat = *cat_it;
if (cat->getName() == start_folder_name)
{
root_id = cat->getUUID();
break;
}
}
}
if (root_id == LLUUID::null)
{
llwarns << "No category found that matches outbox inventory panel start_folder: " << start_folder_name << llendl;
}
}
// leslie -- end temporary HACK
if (root_id == LLUUID::null)
{
llwarns << "Outbox inventory panel has no root folder!" << llendl;
root_id = LLUUID::generateNewID();
}
LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(LLAssetType::AT_CATEGORY,
LLAssetType::AT_CATEGORY,
LLInventoryType::IT_CATEGORY,
this,
NULL,
root_id);
mFolderRoot = createFolderView(new_listener, params.use_label_suffix());
}
LLFolderViewFolder * LLOutboxInventoryPanel::createFolderViewFolder(LLInvFVBridge * bridge)
{
LLOutboxFolderViewFolder::Params params;
params.name = bridge->getDisplayName();
params.icon = bridge->getIcon();
params.icon_open = bridge->getOpenIcon();
if (mShowItemLinkOverlays) // if false, then links show up just like normal items
{
params.icon_overlay = LLUI::getUIImage("Inv_Link");
}
params.root = mFolderRoot;
params.listener = bridge;
params.tool_tip = params.name;
return LLUICtrlFactory::create<LLOutboxFolderViewFolder>(params);
}
//
// LLOutboxFolderViewFolder Implementation
//
LLOutboxFolderViewFolder::LLOutboxFolderViewFolder(const Params& p)
: LLFolderViewFolder(p)
, LLBadgeOwner(getHandle())
, mError(false)
{
initBadgeParams(p.error_badge());
}
LLOutboxFolderViewFolder::~LLOutboxFolderViewFolder()
{
}
// virtual
void LLOutboxFolderViewFolder::draw()
{
if (!badgeHasParent())
{
addBadgeToParentPanel();
}
setBadgeVisibility(mError);
LLFolderViewFolder::draw();
}
void LLOutboxFolderViewFolder::setCreationDate(time_t creation_date_utc) const
{
mCreationDate = creation_date_utc;
}
// eof

View File

@ -0,0 +1,82 @@
/**
* @file llpanelmarketplaceoutboxinventory.h
* @brief LLOutboxInventoryPanel class declaration
*
* $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LL_OUTBOXINVENTORYPANEL_H
#define LL_OUTBOXINVENTORYPANEL_H
#include "llbadgeowner.h"
#include "llinventorypanel.h"
#include "llfolderviewitem.h"
class LLOutboxInventoryPanel : public LLInventoryPanel
{
public:
struct Params : public LLInitParam::Block<Params, LLInventoryPanel::Params>
{
Params() {}
};
LLOutboxInventoryPanel(const Params& p);
~LLOutboxInventoryPanel();
// virtual
void buildFolderView(const LLInventoryPanel::Params& params);
// virtual
class LLFolderViewFolder* createFolderViewFolder(LLInvFVBridge * bridge);
};
class LLOutboxFolderViewFolder : public LLFolderViewFolder, public LLBadgeOwner
{
public:
struct Params : public LLInitParam::Block<Params, LLFolderViewFolder::Params>
{
Optional<LLBadge::Params> error_badge;
Params()
: error_badge("error_badge")
{
}
};
LLOutboxFolderViewFolder(const Params& p);
~LLOutboxFolderViewFolder();
void draw();
bool hasError() const { return mError; }
protected:
void setCreationDate(time_t creation_date_utc) const;
bool mError;
};
#endif //LL_OUTBOXINVENTORYPANEL_H

View File

@ -52,7 +52,10 @@
#include "llsidepaneltaskinfo.h"
#include "llstring.h"
#include "lltabcontainer.h"
#include "lltextbox.h"
#include "lltrans.h"
#include "llviewermedia.h"
#include "llviewernetwork.h"
#include "llweb.h"
static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
@ -394,22 +397,48 @@ void LLSidepanelInventory::observeOutboxModifications(const LLUUID& outboxID)
void LLSidepanelInventory::enableInbox(bool enabled)
{
mInboxEnabled = enabled;
getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME)->setVisible(enabled);
LLLayoutPanel * inbox_layout_panel = getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME);
inbox_layout_panel->setVisible(enabled);
if (mInboxEnabled)
{
getChild<LLLayoutPanel>(INBOX_OUTBOX_LAYOUT_PANEL_NAME)->setVisible(TRUE);
LLLayoutPanel * inout_layout_panel = getChild<LLLayoutPanel>(INBOX_OUTBOX_LAYOUT_PANEL_NAME);
inout_layout_panel->setVisible(TRUE);
if (mOutboxEnabled)
{
S32 inbox_min_dim = inbox_layout_panel->getMinDim();
S32 outbox_min_dim = getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME)->getMinDim();
inout_layout_panel->setMinDim(inbox_min_dim + outbox_min_dim);
}
}
}
void LLSidepanelInventory::enableOutbox(bool enabled)
{
mOutboxEnabled = enabled;
getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME)->setVisible(enabled);
LLLayoutPanel * outbox_layout_panel = getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME);
outbox_layout_panel->setVisible(enabled);
if (mOutboxEnabled)
{
getChild<LLLayoutPanel>(INBOX_OUTBOX_LAYOUT_PANEL_NAME)->setVisible(TRUE);
LLLayoutPanel * inout_layout_panel = getChild<LLLayoutPanel>(INBOX_OUTBOX_LAYOUT_PANEL_NAME);
inout_layout_panel->setVisible(TRUE);
if (mInboxEnabled)
{
S32 inbox_min_dim = getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME)->getMinDim();
S32 outbox_min_dim = outbox_layout_panel->getMinDim();
inout_layout_panel->setMinDim(inbox_min_dim + outbox_min_dim);
}
updateOutboxUserStatus();
}
}
@ -417,10 +446,18 @@ void LLSidepanelInventory::onInboxChanged(const LLUUID& inbox_id)
{
// Trigger a load of the entire inbox so we always know the contents and their creation dates for sorting
LLInventoryModelBackgroundFetch::instance().start(inbox_id);
// If the outbox is expanded, don't auto-expand the inbox
if (mOutboxEnabled)
{
if (getChild<LLButton>(OUTBOX_BUTTON_NAME)->getToggleState())
{
return;
}
}
// Expand the inbox since we have fresh items
LLPanelMarketplaceInbox * inbox = findChild<LLPanelMarketplaceInbox>(MARKETPLACE_INBOX_PANEL);
if (inbox)
// Expand the inbox since we have fresh items and the outbox is not expanded
if (mInboxEnabled)
{
getChild<LLButton>(INBOX_BUTTON_NAME)->setToggleState(true);
onToggleInboxBtn();
@ -430,8 +467,7 @@ void LLSidepanelInventory::onInboxChanged(const LLUUID& inbox_id)
void LLSidepanelInventory::onOutboxChanged(const LLUUID& outbox_id)
{
// Expand the outbox since we have new items in it
LLPanelMarketplaceInbox * outbox = findChild<LLPanelMarketplaceInbox>(MARKETPLACE_OUTBOX_PANEL);
if (outbox)
if (mOutboxEnabled)
{
getChild<LLButton>(OUTBOX_BUTTON_NAME)->setToggleState(true);
onToggleOutboxBtn();
@ -675,6 +711,77 @@ void LLSidepanelInventory::showInventoryPanel()
updateVerbs();
}
void LLSidepanelInventory::updateOutboxUserStatus()
{
const bool isMerchant = (gSavedSettings.getString("InventoryMarketplaceUserStatus") == "merchant");
const bool hasOutbox = !gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false).isNull();
LLView * outbox_placeholder = getChild<LLView>("outbox_inventory_placeholder_panel");
LLView * outbox_placeholder_parent = outbox_placeholder->getParent();
LLTextBox * outbox_title_box = outbox_placeholder->getChild<LLTextBox>("outbox_inventory_placeholder_title");
LLTextBox * outbox_text_box = outbox_placeholder->getChild<LLTextBox>("outbox_inventory_placeholder_text");
std::string outbox_text;
std::string outbox_title;
std::string outbox_tooltip;
if (isMerchant)
{
if (hasOutbox)
{
outbox_text = LLTrans::getString("InventoryOutboxNoItems");
outbox_title = LLTrans::getString("InventoryOutboxNoItemsTitle");
outbox_tooltip = LLTrans::getString("InventoryOutboxNoItemsTooltip");
}
else
{
outbox_text = LLTrans::getString("InventoryOutboxCreationError");
outbox_title = LLTrans::getString("InventoryOutboxCreationErrorTitle");
outbox_tooltip = LLTrans::getString("InventoryOutboxCreationErrorTooltip");
}
}
else
{
//
// The string to become a merchant contains 3 URL's which need the domain name patched in.
//
std::string domain = "secondlife.com";
if (!LLGridManager::getInstance()->isInProductionGrid())
{
std::string gridLabel = LLGridManager::getInstance()->getGridLabel();
domain = llformat("%s.lindenlab.com", utf8str_tolower(gridLabel).c_str());
}
LLStringUtil::format_map_t domain_arg;
domain_arg["[DOMAIN_NAME]"] = domain;
std::string marketplace_url = LLTrans::getString("MarketplaceURL", domain_arg);
std::string marketplace_url_create = LLTrans::getString("MarketplaceURL_CreateStore", domain_arg);
std::string marketplace_url_info = LLTrans::getString("MarketplaceURL_LearnMore", domain_arg);
LLStringUtil::format_map_t args1, args2, args3;
args1["[MARKETPLACE_URL]"] = marketplace_url;
args2["[LEARN_MORE_URL]"] = marketplace_url_info;
args3["[CREATE_STORE_URL]"] = marketplace_url_create;
// NOTE: This is dumb, ridiculous and very finicky. The order of these is very important
// to have these three string substitutions work properly.
outbox_text = LLTrans::getString("InventoryOutboxNotMerchant", args1);
LLStringUtil::format(outbox_text, args2);
LLStringUtil::format(outbox_text, args3);
outbox_title = LLTrans::getString("InventoryOutboxNotMerchantTitle");
outbox_tooltip = LLTrans::getString("InventoryOutboxNotMerchantTooltip");
}
outbox_text_box->setValue(outbox_text);
outbox_title_box->setValue(outbox_title);
outbox_placeholder_parent->setToolTip(outbox_tooltip);
}
void LLSidepanelInventory::updateVerbs()
{
mInfoBtn->setEnabled(FALSE);

View File

@ -76,10 +76,11 @@ public:
void enableInbox(bool enabled);
void enableOutbox(bool enabled);
bool isInboxEnabled() const { return mInboxEnabled; }
bool isOutboxEnabled() const { return mOutboxEnabled; }
void updateOutboxUserStatus();
void updateVerbs();
protected:

View File

@ -1381,15 +1381,17 @@ public:
std::string merchantStatus = content[gAgent.getID().getString()].asString();
llinfos << "Marketplace merchant status: " << merchantStatus << llendl;
// Save the merchant status before turning on the display
gSavedSettings.setString("InventoryMarketplaceUserStatus", merchantStatus);
// Complete success
gSavedSettings.setBOOL("InventoryDisplayInbox", true);
gSavedSettings.setBOOL("InventoryDisplayOutbox", (merchantStatus == "merchant"));
gSavedSettings.setBOOL("InventoryDisplayOutbox", true);
}
else if (status == 401)
{
// API is available for use but OpenID authorization failed
gSavedSettings.setBOOL("InventoryDisplayInbox", true);
//gSavedSettings.setBOOL("InventoryDisplayOutbox", true);
}
else
{

View File

@ -72,10 +72,11 @@ with the same filename but different name
<texture name="BackButton_Over" file_name="icons/back_arrow_over.png" preload="false" scale.left="22" scale.top="12" scale.right="25" scale.bottom="12" />
<texture name="BackButton_Press" file_name="icons/back_arrow_press.png" preload="false" scale.left="22" scale.top="12" scale.right="25" scale.bottom="12" />
<texture name="New_Tag_Background" file_name="widgets/New_Tag_Background.png" preload="true" scale.left="12" scale.top="2" scale.right="36" scale.bottom="2" />
<texture name="New_Tag_Border" file_name="widgets/New_Tag_Border.png" preload="true" scale.left="12" scale.top="2" scale.right="36" scale.bottom="2" />
<texture name="Error_Tag_Background" file_name="widgets/Error_Tag_Background.png" preload="true" scale.left="12" scale.top="2" scale.right="36" scale.bottom="2" />
<texture name="New_Tag_Background" file_name="widgets/New_Tag_Background.png" preload="true" scale.left="12" scale.top="2" scale.right="36" scale.bottom="2" />
<texture name="New_Tag_Border" file_name="widgets/New_Tag_Border.png" preload="true" scale.left="12" scale.top="2" scale.right="36" scale.bottom="2" />
<texture name="Badge_Background" file_name="widgets/Badge_Background.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
<texture name="Badge_Background" file_name="widgets/Badge_Background.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
<texture name="Badge_Border" file_name="widgets/Badge_Border.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
<texture name="Blank" file_name="Blank.png" preload="false" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -211,6 +211,26 @@ Save changes to current clothing/body part?
yestext="Yes"/>
</notification>
<notification
icon="alertmodal.tga"
name="OutboxUploadComplete"
type="alertmodal">
Marketplace upload complete.
<usetemplate
name="okbutton"
yestext="Hooray!"/>
</notification>
<notification
icon="alertmodal.tga"
name="OutboxUploadHadErrors"
type="alertmodal">
Marketplace upload completed with errors! Please correct the problems in your outbox and retry. Thanks.
<usetemplate
name="okbutton"
yestext="Boo!"/>
</notification>
<notification
@ -5103,7 +5123,7 @@ Topic: [SUBJECT], Message: [MESSAGE]
name="FriendOnline"
type="notifytip">
<tag>friendship</tag>
&lt;nolink&gt;[NAME]&lt;/nolink&gt; is Online
[NAME] is Online
</notification>
<notification
@ -5111,7 +5131,7 @@ Topic: [SUBJECT], Message: [MESSAGE]
name="FriendOffline"
type="notifytip">
<tag>friendship</tag>
&lt;nolink&gt;[NAME]&lt;/nolink&gt; is Offline
[NAME] is Offline
</notification>
<notification
@ -6848,7 +6868,7 @@ Are you sure you want to share the following items:
With the following Residents:
&lt;nolink&gt;[RESIDENTS]&lt;/nolink&gt;
[RESIDENTS]
<tag>confirm</tag>
<usetemplate
name="okcancelbuttons"

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<inventory_panel
<outbox_inventory_panel
name="inventory_outbox"
start_folder="Outbox"
follows="all" layout="topleft"
@ -12,6 +12,7 @@
border="false"
bevel_style="none"
show_item_link_overlays="true"
tool_tip="Drag and drop items here to prepare them for sale on your storefront"
>
<scroll reserve_scroll_corner="false" />
</inventory_panel>
</outbox_inventory_panel>

View File

@ -56,7 +56,7 @@
follows="bottom|left|right"
name="inbox_outbox_layout_panel"
visible="false"
min_dim="70"
min_dim="35"
max_dim="235"
expanded_min_dim="125"
height="235">
@ -153,7 +153,7 @@
</layout_panel>
<layout_panel
width="330"
layout="topleft"
layout="topleft"
auto_resize="true"
user_resize="false"
follows="all"
@ -162,7 +162,7 @@
min_dim="35"
max_dim="200"
expanded_min_dim="90"
height="35">
height="200">
<panel
follows="all"
layout="topleft"
@ -171,13 +171,13 @@
class="panel_marketplace_outbox"
top="0"
label=""
height="35"
height="200"
width="330">
<string name="OutboxLabelWithArg">Merchant Outbox ([NUM])</string>
<string name="OutboxLabelNoArg">Merchant Outbox</string>
<button
label="Merchant Outbox"
font="SansSerifMedium"
font="SansSerifMedium"
name="outbox_btn"
height="35"
width="308"
@ -240,21 +240,45 @@
bg_opaque_color="InventoryBackgroundColor"
background_visible="true"
background_opaque="true"
tool_tip="Drag and drop items here to prepare them for sale on your storefront"
>
<text
name="outbox_inventory_placeholder"
type="string"
<panel
name="outbox_inventory_placeholder_panel"
follows="all"
layout="topleft"
top="0"
left="0"
width="308"
height="0"
wrap="true"
halign="center">
Set up your merchant account to use this feature.
</text>
height="165"
bg_opaque_color="InventoryBackgroundColor"
background_visible="true"
background_opaque="true"
>
<text
name="outbox_inventory_placeholder_title"
type="string"
follows="all"
layout="topleft"
top="10"
left="0"
width="308"
height="25"
wrap="true"
halign="center"
font="SansSerifBold">
Loading...
</text>
<text
name="outbox_inventory_placeholder_text"
type="string"
follows="all"
layout="topleft"
top="35"
left="0"
width="308"
height="130"
wrap="true"
halign="left" />
</panel>
</panel>
</panel>
</layout_panel>

View File

@ -164,17 +164,16 @@ Please try logging in again in a minute.</string>
<string name="TooltipLand">Land:</string>
<string name="TooltipMustSingleDrop">Only a single item can be dragged here</string>
<string name="TooltipPrice" value="L$[AMOUNT]: "/>
<string name="TooltipOutboxNoTransfer">One or more of these objects cannot be sold or transferred to another user.</string>
<string name="TooltipOutboxWorn">ou are wearing one or more of these objects. Remove them from your avatar and try moving them again.</string>
<string name="TooltipOutboxFolderLevels">This folder has too many levels of subfolders. Rearrange the interior folders to a maximum of 4 levels deep (Root Folder contains A contains B contains C).</string>
<string name="TooltipOutboxTooManyObjects">This folder contains more than 200 objects. Box some of the items to reduce the object count.</string>
<!-- tooltips for Urls -->
<string name="TooltipOutboxNoTransfer">One or more of these objects cannot be sold or transferred to another user.</string>
<string name="TooltipOutboxWorn">ou are wearing one or more of these objects. Remove them from your avatar and try moving them again.</string>
<string name="TooltipOutboxFolderLevels">This folder has too many levels of subfolders. Rearrange the interior folders to a maximum of 4 levels deep (Root Folder contains A contains B contains C).</string>
<string name="TooltipOutboxTooManyObjects">This folder contains more than 200 objects. Box some of the items to reduce the object count.</string>
<!-- tooltips for Urls -->
<string name="TooltipHttpUrl">Click to view this web page</string>
<string name="TooltipSLURL">Click to view this location's information</string>
<string name="TooltipAgentUrl">Click to view this Resident's profile</string>
<string name="TooltipAgentInspect">Learn more about this Resident</string>
<string name="TooltipAgentInspect">Learn more about this Resident</string>
<string name="TooltipAgentMute">Click to mute this Resident</string>
<string name="TooltipAgentUnmute">Click to unmute this Resident</string>
<string name="TooltipAgentIM">Click to IM this Resident</string>
@ -2030,7 +2029,18 @@ Returns a string with the requested data about the region
<string name="FavoritesNoMatchingItems">Drag a landmark here to add it to your favorites.</string>
<string name="InventoryNoTexture">You do not have a copy of this texture in your inventory</string>
<string name="InventoryInboxNoItems">Items purchased through the marketplace will be delivered here.</string>
<string name="InventoryOutboxNoItems">Drag items here in preparation for listing on your marketplace storefront.</string>
<string name="MarketplaceURL">http://marketplace.[DOMAIN_NAME]</string>
<string name="MarketplaceURL_CreateStore">http://marketplace.[DOMAIN_NAME]/create_store</string>
<string name="MarketplaceURL_LearnMore">http://marketplace.[DOMAIN_NAME]/learn_more</string>
<string name="InventoryOutboxCreationErrorTitle">Your Merchant Outbox is not properly configured</string>
<string name="InventoryOutboxCreationErrorTooltip">Merchant Outbox configuration error</string>
<string name="InventoryOutboxCreationError">Please contact Customer Service to correct the problem.</string>
<string name="InventoryOutboxNotMerchantTitle">Anyone can sell items on the Marketplace</string>
<string name="InventoryOutboxNotMerchantTooltip">Become a merchant!</string>
<string name="InventoryOutboxNotMerchant">[[MARKETPLACE_URL] The Second Life Marketplace] offers more than one million virtual products for sale, all of them created by Residents. You, too, can sell items you create, as well as some of the items you have purchased. It’s easy and setup is free. [[LEARN_MORE_URL] Learn more] or [[CREATE_STORE_URL] create a store] on the Marketplace to get started.</string>
<string name="InventoryOutboxNoItemsTitle">A new way to send items to the Marketplace</string>
<string name="InventoryOutboxNoItemsTooltip">Drag and drop items here to prepare them for sale on the Marketplace</string>
<string name="InventoryOutboxNoItems">Drag items or folders that you wish to sell into this area. A copy of the item will appear, leaving your inventory unchanged, unless you have dragged a no-copy item. When you are ready to send the items to the Marketplace, click the Upload button. Once your items have been moved to your Marketplace Inventory, they will disappear from this folder.</string>
<!-- use value="" because they have preceding spaces -->
<string name="no_transfer" value=" (no transfer)" />
<string name="no_modify" value=" (no modify)" />

View File

@ -14,8 +14,8 @@
padding_vert="2"
location_offset_hcenter="-23"
border_image="New_Tag_Border"
border_color="DkGray2"
border_color="DkGray2"
image="New_Tag_Background"
image_color="Black"
image_color="Black"
/>
</inbox_folder_view_folder>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<outbox_folder_view_folder
folder_arrow_image="Folder_Arrow"
folder_indentation="8"
item_height="20"
item_top_pad="4"
selection_image="Rounded_Square"
>
<error_badge
label=" "
label_offset_horiz="-1"
location="right"
padding_horiz="12.5"
padding_vert="2"
location_offset_hcenter="-23"
image="Error_Tag_Background"
image_color="Black"
/>
</outbox_folder_view_folder>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<outbox_inventory_panel show_load_status="false" />