Remove the Outbox
Goodbye, old friend.
This commit is contained in:
@@ -245,7 +245,6 @@ set(viewer_SOURCE_FILES
|
|||||||
llfloaterobjectiminfo.cpp
|
llfloaterobjectiminfo.cpp
|
||||||
llfloaterobjectweights.cpp
|
llfloaterobjectweights.cpp
|
||||||
llfloateropenobject.cpp
|
llfloateropenobject.cpp
|
||||||
llfloateroutbox.cpp
|
|
||||||
llfloaterparcel.cpp
|
llfloaterparcel.cpp
|
||||||
llfloaterpathfindingcharacters.cpp
|
llfloaterpathfindingcharacters.cpp
|
||||||
llfloaterpathfindinglinksets.cpp
|
llfloaterpathfindinglinksets.cpp
|
||||||
@@ -781,7 +780,6 @@ set(viewer_HEADER_FILES
|
|||||||
llfloaterobjectiminfo.h
|
llfloaterobjectiminfo.h
|
||||||
llfloaterobjectweights.h
|
llfloaterobjectweights.h
|
||||||
llfloateropenobject.h
|
llfloateropenobject.h
|
||||||
llfloateroutbox.h
|
|
||||||
llfloaterparcel.h
|
llfloaterparcel.h
|
||||||
llfloaterpathfindingcharacters.h
|
llfloaterpathfindingcharacters.h
|
||||||
llfloaterpathfindinglinksets.h
|
llfloaterpathfindinglinksets.h
|
||||||
|
|||||||
@@ -8084,10 +8084,10 @@ This should be as low as possible, but too low may break functionality</string>
|
|||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>FloaterOutboxRect</key>
|
<key>FloaterMarketplaceListingsRect</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
<string>Rectangle for merchant outbox window</string>
|
<string>Rectangle for Marketplace Listings window</string>
|
||||||
<key>Persist</key>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
|
|||||||
@@ -1902,10 +1902,10 @@ Changing this setting only affects new text.</string>
|
|||||||
<key>IsCOA</key>
|
<key>IsCOA</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</map>
|
</map>
|
||||||
<key>ToolbarVisibleOutbox</key>
|
<key>ToolbarVisibleMarketplaceListings</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
<string>Whether or not the button for outbox is on the toolbar</string>
|
<string>Whether or not the button for Marketplace Listings is on the toolbar</string>
|
||||||
<key>Persist</key>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
@@ -1928,19 +1928,6 @@ Changing this setting only affects new text.</string>
|
|||||||
<key>IsCOA</key>
|
<key>IsCOA</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</map>
|
</map>
|
||||||
<key>ToolbarVisibleOutbox</key>
|
|
||||||
<map>
|
|
||||||
<key>Comment</key>
|
|
||||||
<string>Whether or not the button for the merchant outbox is on the toolbar</string>
|
|
||||||
<key>Persist</key>
|
|
||||||
<integer>1</integer>
|
|
||||||
<key>Type</key>
|
|
||||||
<string>Boolean</string>
|
|
||||||
<key>Value</key>
|
|
||||||
<boolean>0</boolean>
|
|
||||||
<key>IsCOA</key>
|
|
||||||
<integer>1</integer>
|
|
||||||
</map>
|
|
||||||
<key>ToolbarVisibleOutfit</key>
|
<key>ToolbarVisibleOutfit</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
|
|||||||
@@ -1,690 +0,0 @@
|
|||||||
/**
|
|
||||||
* @file llfloateroutbox.cpp
|
|
||||||
* @brief Implementation of the merchant outbox window
|
|
||||||
*
|
|
||||||
* $LicenseInfo:firstyear=2001&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 "llfloateroutbox.h"
|
|
||||||
|
|
||||||
#include "llfolderview.h"
|
|
||||||
#include "llinventorybridge.h"
|
|
||||||
#include "llinventorymodelbackgroundfetch.h"
|
|
||||||
#include "llinventoryobserver.h"
|
|
||||||
#include "llinventorypanel.h"
|
|
||||||
#include "llmarketplacefunctions.h"
|
|
||||||
#include "llnotifications.h"
|
|
||||||
#include "llnotificationsutil.h"
|
|
||||||
#include "lltextbox.h"
|
|
||||||
#include "lltexteditor.h"
|
|
||||||
//#include "lltransientfloatermgr.h"
|
|
||||||
#include "lltrans.h"
|
|
||||||
#include "llviewernetwork.h"
|
|
||||||
//#include "llwindowshade.h"
|
|
||||||
|
|
||||||
#define USE_WINDOWSHADE_DIALOGS 0
|
|
||||||
|
|
||||||
|
|
||||||
///----------------------------------------------------------------------------
|
|
||||||
/// LLOutboxNotification class
|
|
||||||
///----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class LLOutboxNotification
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
bool processNotification(const LLSD& notify)
|
|
||||||
{
|
|
||||||
LLFloaterOutbox* outbox_floater = LLFloaterOutbox::getInstance();
|
|
||||||
|
|
||||||
outbox_floater->showNotification(notify);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
///----------------------------------------------------------------------------
|
|
||||||
/// LLOutboxAddedObserver helper class
|
|
||||||
///----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class LLOutboxAddedObserver : public LLInventoryCategoryAddedObserver
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
LLOutboxAddedObserver(LLFloaterOutbox * outboxFloater)
|
|
||||||
: LLInventoryCategoryAddedObserver()
|
|
||||||
, mOutboxFloater(outboxFloater)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void done()
|
|
||||||
{
|
|
||||||
for (cat_vec_t::iterator it = mAddedCategories.begin(); it != mAddedCategories.end(); ++it)
|
|
||||||
{
|
|
||||||
LLViewerInventoryCategory* added_category = *it;
|
|
||||||
|
|
||||||
LLFolderType::EType added_category_type = added_category->getPreferredType();
|
|
||||||
|
|
||||||
if (added_category_type == LLFolderType::FT_OUTBOX)
|
|
||||||
{
|
|
||||||
mOutboxFloater->initializeMarketPlace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
LLFloaterOutbox * mOutboxFloater;
|
|
||||||
};
|
|
||||||
|
|
||||||
///----------------------------------------------------------------------------
|
|
||||||
/// LLFloaterOutbox
|
|
||||||
///----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
LLFloaterOutbox::LLFloaterOutbox(const LLSD& key)
|
|
||||||
: LLFloater(key)
|
|
||||||
, mCategoriesObserver(NULL)
|
|
||||||
, mCategoryAddedObserver(NULL)
|
|
||||||
, mImportBusy(false)
|
|
||||||
, mImportButton(NULL)
|
|
||||||
, mInventoryFolderCountText(NULL)
|
|
||||||
, mInventoryImportInProgress(NULL)
|
|
||||||
, mInventoryPlaceholder(NULL)
|
|
||||||
, mInventoryText(NULL)
|
|
||||||
, mInventoryTitle(NULL)
|
|
||||||
, mOutboxId(LLUUID::null)
|
|
||||||
, mOutboxItemCount(0)
|
|
||||||
, mOutboxTopLevelDropZone(NULL)
|
|
||||||
// , mWindowShade(NULL)
|
|
||||||
{
|
|
||||||
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_merchant_outbox.xml");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
LLFloaterOutbox::~LLFloaterOutbox()
|
|
||||||
{
|
|
||||||
if (mCategoriesObserver && gInventory.containsObserver(mCategoriesObserver))
|
|
||||||
{
|
|
||||||
gInventory.removeObserver(mCategoriesObserver);
|
|
||||||
}
|
|
||||||
delete mCategoriesObserver;
|
|
||||||
|
|
||||||
if (mCategoryAddedObserver && gInventory.containsObserver(mCategoryAddedObserver))
|
|
||||||
{
|
|
||||||
gInventory.removeObserver(mCategoryAddedObserver);
|
|
||||||
}
|
|
||||||
delete mCategoryAddedObserver;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LLFloaterOutbox::postBuild()
|
|
||||||
{
|
|
||||||
mInventoryFolderCountText = getChild<LLTextBox>("outbox_folder_count");
|
|
||||||
mInventoryImportInProgress = getChild<LLView>("import_progress_indicator");
|
|
||||||
mInventoryPlaceholder = getChild<LLView>("outbox_inventory_placeholder_panel");
|
|
||||||
mInventoryText = mInventoryPlaceholder->getChild<LLTextEditor>("outbox_inventory_placeholder_text");
|
|
||||||
// For some reason, adding style doesn't work unless this is true.
|
|
||||||
mInventoryText->setParseHTML(TRUE);
|
|
||||||
|
|
||||||
mInventoryTitle = mInventoryPlaceholder->getChild<LLTextBox>("outbox_inventory_placeholder_title");
|
|
||||||
|
|
||||||
mImportButton = getChild<LLButton>("outbox_import_btn");
|
|
||||||
mImportButton->setCommitCallback(boost::bind(&LLFloaterOutbox::onImportButtonClicked, this));
|
|
||||||
|
|
||||||
// Set up the outbox inventory view
|
|
||||||
LLInventoryPanel* inventory_panel = getChild<LLInventoryPanel>("panel_outbox_inventory");
|
|
||||||
mOutboxInventoryPanel = inventory_panel->getInventoryPanelHandle();
|
|
||||||
llassert(mOutboxInventoryPanel.get() != NULL);
|
|
||||||
|
|
||||||
mOutboxTopLevelDropZone = getChild<LLPanel>("outbox_generic_drag_target");
|
|
||||||
|
|
||||||
LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLFloaterOutbox::onFocusReceived, this));
|
|
||||||
|
|
||||||
// Observe category creation to catch outbox creation (moot if already existing)
|
|
||||||
mCategoryAddedObserver = new LLOutboxAddedObserver(this);
|
|
||||||
gInventory.addObserver(mCategoryAddedObserver);
|
|
||||||
|
|
||||||
// Setup callbacks for importer
|
|
||||||
LLMarketplaceInventoryImporter& importer = LLMarketplaceInventoryImporter::instance();
|
|
||||||
importer.setInitializationErrorCallback(boost::bind(&LLFloaterOutbox::initializationReportError, this, _1, _2));
|
|
||||||
importer.setStatusChangedCallback(boost::bind(&LLFloaterOutbox::importStatusChanged, this, _1));
|
|
||||||
importer.setStatusReportCallback(boost::bind(&LLFloaterOutbox::importReportResults, this, _1, _2));
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::cleanOutbox()
|
|
||||||
{
|
|
||||||
// Note: we cannot delete the mOutboxInventoryPanel as that point
|
|
||||||
// as this is called through callback observers of the panel itself.
|
|
||||||
// Doing so would crash rapidly.
|
|
||||||
|
|
||||||
// Invalidate the outbox data
|
|
||||||
mOutboxId.setNull();
|
|
||||||
mOutboxItemCount = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::onClose(bool app_quitting)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
if (mWindowShade)
|
|
||||||
{
|
|
||||||
delete mWindowShade;
|
|
||||||
|
|
||||||
mWindowShade = NULL;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
setVisible(FALSE);
|
|
||||||
//destroy(); //Don't because outbox should be persistent.
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::onOpen()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Initialize the Market Place or go update the outbox
|
|
||||||
//
|
|
||||||
|
|
||||||
if (LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus() == MarketplaceStatusCodes::MARKET_PLACE_NOT_INITIALIZED)
|
|
||||||
{
|
|
||||||
initializeMarketPlace();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setupOutbox();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Update the floater view
|
|
||||||
//
|
|
||||||
updateView();
|
|
||||||
|
|
||||||
//
|
|
||||||
// Trigger fetch of outbox contents
|
|
||||||
//
|
|
||||||
fetchOutboxContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::onFocusReceived()
|
|
||||||
{
|
|
||||||
fetchOutboxContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::fetchOutboxContents()
|
|
||||||
{
|
|
||||||
if (mOutboxId.notNull())
|
|
||||||
{
|
|
||||||
LLInventoryModelBackgroundFetch::instance().start(mOutboxId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::setupOutbox()
|
|
||||||
{
|
|
||||||
if (LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus() != MarketplaceStatusCodes::MARKET_PLACE_MERCHANT)
|
|
||||||
{
|
|
||||||
// If we are *not* a merchant or we have no market place connection established yet, do nothing
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// We are a merchant. Get the outbox, create it if needs be.
|
|
||||||
LLUUID outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, true);
|
|
||||||
if (outbox_id.isNull())
|
|
||||||
{
|
|
||||||
// We should never get there unless inventory fails badly
|
|
||||||
LL_ERRS() << "Inventory problem: failure to create the outbox for a merchant!" << LL_ENDL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Consolidate Merchant Outbox
|
|
||||||
// We shouldn't have to do that but with a client/server system relying on a "well known folder" convention, things get messy and conventions get broken down eventually
|
|
||||||
gInventory.consolidateForType(outbox_id, LLFolderType::FT_OUTBOX);
|
|
||||||
|
|
||||||
if (outbox_id == mOutboxId)
|
|
||||||
{
|
|
||||||
|
|
||||||
LL_WARNS() << "Inventory warning: Merchant outbox already set" << LL_ENDL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mOutboxId = outbox_id;
|
|
||||||
|
|
||||||
// No longer need to observe new category creation
|
|
||||||
if (mCategoryAddedObserver && gInventory.containsObserver(mCategoryAddedObserver))
|
|
||||||
{
|
|
||||||
gInventory.removeObserver(mCategoryAddedObserver);
|
|
||||||
delete mCategoryAddedObserver;
|
|
||||||
mCategoryAddedObserver = NULL;
|
|
||||||
}
|
|
||||||
llassert(!mCategoryAddedObserver);
|
|
||||||
|
|
||||||
// Create observer for outbox modifications : clear the old one and create a new one
|
|
||||||
if (mCategoriesObserver && gInventory.containsObserver(mCategoriesObserver))
|
|
||||||
{
|
|
||||||
gInventory.removeObserver(mCategoriesObserver);
|
|
||||||
delete mCategoriesObserver;
|
|
||||||
}
|
|
||||||
mCategoriesObserver = new LLInventoryCategoriesObserver();
|
|
||||||
gInventory.addObserver(mCategoriesObserver);
|
|
||||||
mCategoriesObserver->addCategory(mOutboxId, boost::bind(&LLFloaterOutbox::onOutboxChanged, this));
|
|
||||||
llassert(mCategoriesObserver);
|
|
||||||
|
|
||||||
// Set up the outbox inventory view
|
|
||||||
// Singu Note: we handle this in postBuild, grabbing the panel from the built xml.
|
|
||||||
LLInventoryPanel* inventory_panel = mOutboxInventoryPanel.get();
|
|
||||||
|
|
||||||
// Reshape the inventory to the proper size
|
|
||||||
LLRect inventory_placeholder_rect = mInventoryPlaceholder->getRect();
|
|
||||||
inventory_panel->setShape(inventory_placeholder_rect);
|
|
||||||
|
|
||||||
// Set the sort order newest to oldest
|
|
||||||
inventory_panel->setSortOrder(LLInventoryFilter::SO_FOLDERS_BY_NAME);
|
|
||||||
inventory_panel->getFilter().markDefault();
|
|
||||||
|
|
||||||
// Get the content of the outbox
|
|
||||||
fetchOutboxContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::initializeMarketPlace()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Initialize the marketplace import API
|
|
||||||
//
|
|
||||||
LLMarketplaceInventoryImporter& importer = LLMarketplaceInventoryImporter::instance();
|
|
||||||
if (!importer.isInitialized())
|
|
||||||
{
|
|
||||||
importer.initialize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::setStatusString(const std::string& statusString)
|
|
||||||
{
|
|
||||||
llassert(mInventoryFolderCountText != NULL);
|
|
||||||
|
|
||||||
mInventoryFolderCountText->setText(statusString);
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::updateFolderCount()
|
|
||||||
{
|
|
||||||
if (mOutboxInventoryPanel.get() && mOutboxId.notNull())
|
|
||||||
{
|
|
||||||
S32 item_count = 0;
|
|
||||||
|
|
||||||
if (mOutboxId.notNull())
|
|
||||||
{
|
|
||||||
LLInventoryModel::cat_array_t * cats;
|
|
||||||
LLInventoryModel::item_array_t * items;
|
|
||||||
gInventory.getDirectDescendentsOf(mOutboxId, cats, items);
|
|
||||||
|
|
||||||
item_count = cats->size() + items->size();
|
|
||||||
}
|
|
||||||
|
|
||||||
mOutboxItemCount = item_count;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// If there's no outbox, the number of items in it should be set to 0 for consistency
|
|
||||||
mOutboxItemCount = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mImportBusy)
|
|
||||||
{
|
|
||||||
updateFolderCountStatus();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::updateFolderCountStatus()
|
|
||||||
{
|
|
||||||
if (mOutboxInventoryPanel.get() && mOutboxId.notNull())
|
|
||||||
{
|
|
||||||
switch (mOutboxItemCount)
|
|
||||||
{
|
|
||||||
case 0: setStatusString(getString("OutboxFolderCount0")); break;
|
|
||||||
case 1: setStatusString(getString("OutboxFolderCount1")); break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
std::string item_count_str = llformat("%d", mOutboxItemCount);
|
|
||||||
|
|
||||||
LLStringUtil::format_map_t args;
|
|
||||||
args["[NUM]"] = item_count_str;
|
|
||||||
|
|
||||||
setStatusString(getString("OutboxFolderCountN", args));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mImportButton->setEnabled(mOutboxItemCount > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::updateView()
|
|
||||||
{
|
|
||||||
//updateView() is called twice the first time.
|
|
||||||
updateFolderCount();
|
|
||||||
LLInventoryPanel* panel = mOutboxInventoryPanel.get();
|
|
||||||
|
|
||||||
if (mOutboxItemCount > 0)
|
|
||||||
{
|
|
||||||
panel->setVisible(TRUE);
|
|
||||||
mInventoryPlaceholder->setVisible(FALSE);
|
|
||||||
mOutboxTopLevelDropZone->setVisible(TRUE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (panel)
|
|
||||||
{
|
|
||||||
panel->setVisible(FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show the drop zone if there is an outbox folder
|
|
||||||
mOutboxTopLevelDropZone->setVisible(mOutboxId.notNull());
|
|
||||||
|
|
||||||
mInventoryPlaceholder->setVisible(TRUE);
|
|
||||||
|
|
||||||
std::string outbox_text;
|
|
||||||
std::string outbox_text2;
|
|
||||||
std::string outbox_title;
|
|
||||||
std::string outbox_tooltip;
|
|
||||||
|
|
||||||
const LLSD& subs = getMarketplaceStringSubstitutions();
|
|
||||||
U32 mkt_status = LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus();
|
|
||||||
|
|
||||||
// Text styles for marketplace hyperlinks
|
|
||||||
std::string subs_link;
|
|
||||||
std::string subs_text;
|
|
||||||
|
|
||||||
if (mOutboxId.notNull())
|
|
||||||
{
|
|
||||||
// Does the outbox needs recreation?
|
|
||||||
if ((mOutboxInventoryPanel.get() == NULL) || !gInventory.getCategory(mOutboxId))
|
|
||||||
{
|
|
||||||
setupOutbox();
|
|
||||||
}
|
|
||||||
// "Outbox is empty!" message strings
|
|
||||||
outbox_text = LLTrans::getString("InventoryOutboxNoItems");
|
|
||||||
subs_link = "[MARKETPLACE_DASHBOARD_URL]";
|
|
||||||
subs_text = " " + LLTrans::getString("InventoryOutboxNoItemsSubs");
|
|
||||||
outbox_text2 = LLTrans::getString("InventoryOutboxNoItems2");
|
|
||||||
outbox_title = LLTrans::getString("InventoryOutboxNoItemsTitle");
|
|
||||||
outbox_tooltip = LLTrans::getString("InventoryOutboxNoItemsTooltip");
|
|
||||||
}
|
|
||||||
else if (mkt_status <= MarketplaceStatusCodes::MARKET_PLACE_INITIALIZING)
|
|
||||||
{
|
|
||||||
// "Initializing!" message strings
|
|
||||||
outbox_text = LLTrans::getString("InventoryOutboxInitializing");
|
|
||||||
subs_link = "[MARKETPLACE_CREATE_STORE_URL]";
|
|
||||||
subs_text = " " + LLTrans::getString("InventoryOutboxInitializingSubs");
|
|
||||||
outbox_text2 = LLTrans::getString("InventoryOutboxInitializing2");
|
|
||||||
outbox_title = LLTrans::getString("InventoryOutboxInitializingTitle");
|
|
||||||
outbox_tooltip = LLTrans::getString("InventoryOutboxInitializingTooltip");
|
|
||||||
}
|
|
||||||
else if (mkt_status == MarketplaceStatusCodes::MARKET_PLACE_NOT_MERCHANT)
|
|
||||||
{
|
|
||||||
// "Not a merchant!" message strings
|
|
||||||
outbox_text = LLTrans::getString("InventoryOutboxNotMerchant");
|
|
||||||
subs_link = "[MARKETPLACE_CREATE_STORE_URL]";
|
|
||||||
subs_text = " " + LLTrans::getString("InventoryOutboxNotMerchantSubs");
|
|
||||||
outbox_text2 = LLTrans::getString("InventoryOutboxNotMerchant2");
|
|
||||||
outbox_title = LLTrans::getString("InventoryOutboxNotMerchantTitle");
|
|
||||||
outbox_tooltip = LLTrans::getString("InventoryOutboxNotMerchantTooltip");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// "Errors!" message strings
|
|
||||||
outbox_text = LLTrans::getString("InventoryOutboxError");
|
|
||||||
subs_link = "[MARKETPLACE_CREATE_STORE_URL]";
|
|
||||||
subs_text = " " + LLTrans::getString("InventoryOutboxErrorSubs");
|
|
||||||
outbox_text2 = " " + LLTrans::getString("InventoryOutboxError2");
|
|
||||||
outbox_title = LLTrans::getString("InventoryOutboxErrorTitle");
|
|
||||||
outbox_tooltip = LLTrans::getString("InventoryOutboxErrorTooltip");
|
|
||||||
}
|
|
||||||
|
|
||||||
mInventoryText->clear();
|
|
||||||
const LLColor4 color = gColors.getColor("TextFgReadOnlyColor");
|
|
||||||
mInventoryText->appendColoredText(outbox_text, false, false, color);
|
|
||||||
LLStringUtil::format(subs_link, subs);
|
|
||||||
LLStyleSP subs_link_style(new LLStyle);
|
|
||||||
subs_link_style->setLinkHREF(subs_link);
|
|
||||||
subs_link_style->setColor(gSavedSettings.getColor4("HTMLLinkColor"));
|
|
||||||
mInventoryText->appendText(subs_text, false, false, subs_link_style);
|
|
||||||
mInventoryText->appendColoredText(outbox_text2, false, false, color);
|
|
||||||
mInventoryTitle->setValue(outbox_title);
|
|
||||||
mInventoryPlaceholder->getParent()->setToolTip(outbox_tooltip);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool isAccepted(EAcceptance accept)
|
|
||||||
{
|
|
||||||
return (accept >= ACCEPT_YES_COPY_SINGLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LLFloaterOutbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
|
||||||
EDragAndDropType cargo_type,
|
|
||||||
void* cargo_data,
|
|
||||||
EAcceptance* accept,
|
|
||||||
std::string& tooltip_msg)
|
|
||||||
{
|
|
||||||
if ((mOutboxInventoryPanel.get() == NULL) ||
|
|
||||||
//(mWindowShade && mWindowShade->isShown()) ||
|
|
||||||
LLMarketplaceInventoryImporter::getInstance()->isImportInProgress() ||
|
|
||||||
mOutboxId.isNull())
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
LLView * handled_view = childrenHandleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
|
|
||||||
BOOL handled = (handled_view != NULL);
|
|
||||||
|
|
||||||
// Determine if the mouse is inside the inventory panel itself or just within the floater
|
|
||||||
bool pointInInventoryPanel = false;
|
|
||||||
bool pointInInventoryPanelChild = false;
|
|
||||||
LLInventoryPanel* panel = mOutboxInventoryPanel.get();
|
|
||||||
LLFolderView * root_folder = panel->getRootFolder();
|
|
||||||
if (panel->getVisible())
|
|
||||||
{
|
|
||||||
S32 inv_x, inv_y;
|
|
||||||
localPointToOtherView(x, y, &inv_x, &inv_y, panel);
|
|
||||||
|
|
||||||
pointInInventoryPanel = panel->getRect().pointInRect(inv_x, inv_y);
|
|
||||||
|
|
||||||
LLView * inventory_panel_child_at_point = panel->childFromPoint(inv_x, inv_y, true);
|
|
||||||
pointInInventoryPanelChild = (inventory_panel_child_at_point != root_folder);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pass all drag and drop for this floater to the outbox inventory control
|
|
||||||
if (!handled || !isAccepted(*accept))
|
|
||||||
{
|
|
||||||
// Handle the drag and drop directly to the root of the outbox if we're not in the inventory panel
|
|
||||||
// (otherwise the inventory panel itself will handle the drag and drop operation, without any override)
|
|
||||||
if (!pointInInventoryPanel)
|
|
||||||
{
|
|
||||||
handled = root_folder->handleDragAndDropToThisFolder(mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
mOutboxTopLevelDropZone->setBackgroundVisible(handled && !drop && isAccepted(*accept));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mOutboxTopLevelDropZone->setBackgroundVisible(!pointInInventoryPanelChild);
|
|
||||||
}
|
|
||||||
|
|
||||||
return handled;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LLFloaterOutbox::handleHover(S32 x, S32 y, MASK mask)
|
|
||||||
{
|
|
||||||
mOutboxTopLevelDropZone->setBackgroundVisible(FALSE);
|
|
||||||
|
|
||||||
return LLFloater::handleHover(x, y, mask);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
void LLFloaterOutbox::onMouseLeave(S32 x, S32 y, MASK mask)
|
|
||||||
{
|
|
||||||
mOutboxTopLevelDropZone->setBackgroundVisible(FALSE);
|
|
||||||
|
|
||||||
LLFloater::onMouseLeave(x, y, mask);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
void LLFloaterOutbox::onImportButtonClicked()
|
|
||||||
{
|
|
||||||
if (mOutboxInventoryPanel.get())
|
|
||||||
{
|
|
||||||
mOutboxInventoryPanel.get()->clearSelection();
|
|
||||||
}
|
|
||||||
|
|
||||||
mImportBusy = LLMarketplaceInventoryImporter::instance().triggerImport();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::onOutboxChanged()
|
|
||||||
{
|
|
||||||
LLViewerInventoryCategory* category = gInventory.getCategory(mOutboxId);
|
|
||||||
if (mOutboxId.notNull() && category)
|
|
||||||
{
|
|
||||||
fetchOutboxContents();
|
|
||||||
updateView();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cleanOutbox();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::importReportResults(U32 status, const LLSD& content)
|
|
||||||
{
|
|
||||||
if (status == MarketplaceErrorCodes::IMPORT_DONE)
|
|
||||||
{
|
|
||||||
LLNotificationsUtil::add("OutboxImportComplete");
|
|
||||||
}
|
|
||||||
else if (status == MarketplaceErrorCodes::IMPORT_DONE_WITH_ERRORS)
|
|
||||||
{
|
|
||||||
const LLSD& subs = getMarketplaceStringSubstitutions();
|
|
||||||
|
|
||||||
LLNotificationsUtil::add("OutboxImportHadErrors", subs);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
char status_string[16];
|
|
||||||
sprintf(status_string, "%d", status);
|
|
||||||
|
|
||||||
LLSD subs;
|
|
||||||
subs["[ERROR_CODE]"] = status_string;
|
|
||||||
|
|
||||||
LLNotificationsUtil::add("OutboxImportFailed", subs);
|
|
||||||
}
|
|
||||||
|
|
||||||
updateView();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::importStatusChanged(bool inProgress)
|
|
||||||
{
|
|
||||||
if (mOutboxId.isNull() && (LLMarketplaceInventoryImporter::getInstance()->getMarketPlaceStatus() == MarketplaceStatusCodes::MARKET_PLACE_MERCHANT))
|
|
||||||
{
|
|
||||||
setupOutbox();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inProgress)
|
|
||||||
{
|
|
||||||
if (mImportBusy)
|
|
||||||
{
|
|
||||||
setStatusString(getString("OutboxImporting"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setStatusString(getString("OutboxInitializing"));
|
|
||||||
}
|
|
||||||
|
|
||||||
mImportBusy = true;
|
|
||||||
mImportButton->setEnabled(false);
|
|
||||||
mInventoryImportInProgress->setVisible(true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setStatusString("");
|
|
||||||
mImportBusy = false;
|
|
||||||
mImportButton->setEnabled(mOutboxItemCount > 0);
|
|
||||||
mInventoryImportInProgress->setVisible(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
updateView();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::initializationReportError(U32 status, const LLSD& content)
|
|
||||||
{
|
|
||||||
if (status >= MarketplaceErrorCodes::IMPORT_BAD_REQUEST)
|
|
||||||
{
|
|
||||||
char status_string[16];
|
|
||||||
sprintf(status_string, "%d", status);
|
|
||||||
|
|
||||||
LLSD subs;
|
|
||||||
subs["[ERROR_CODE]"] = status_string;
|
|
||||||
|
|
||||||
LLNotificationsUtil::add("OutboxInitFailed", subs);
|
|
||||||
}
|
|
||||||
|
|
||||||
updateView();
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLFloaterOutbox::showNotification(const LLSD& notify)
|
|
||||||
{
|
|
||||||
LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
|
|
||||||
|
|
||||||
if (!notification)
|
|
||||||
{
|
|
||||||
LL_ERRS() << "Unable to find outbox notification!" << notify.asString() << LL_ENDL;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if USE_WINDOWSHADE_DIALOGS
|
|
||||||
|
|
||||||
if (mWindowShade)
|
|
||||||
{
|
|
||||||
delete mWindowShade;
|
|
||||||
}
|
|
||||||
|
|
||||||
LLRect floater_rect = getLocalRect();
|
|
||||||
floater_rect.mTop -= getHeaderHeight();
|
|
||||||
floater_rect.stretch(-5, 0);
|
|
||||||
|
|
||||||
LLWindowShade::Params params;
|
|
||||||
params.name = "notification_shade";
|
|
||||||
params.rect = floater_rect;
|
|
||||||
params.follows.flags = FOLLOWS_ALL;
|
|
||||||
params.modal = true;
|
|
||||||
params.can_close = false;
|
|
||||||
params.shade_color = LLColor4::white % 0.25f;
|
|
||||||
params.text_color = LLColor4::white;
|
|
||||||
|
|
||||||
mWindowShade = LLUICtrlFactory::create<LLWindowShade>(params);
|
|
||||||
|
|
||||||
addChild(mWindowShade);
|
|
||||||
mWindowShade->show(notification);
|
|
||||||
|
|
||||||
#else //USE_WINDOWSHADE_DIALOGS
|
|
||||||
/*
|
|
||||||
LLNotificationsUI::LLEventHandler * handler =
|
|
||||||
LLNotificationsUI::LLNotificationManager::instance().getHandlerForNotification("alertmodal");
|
|
||||||
|
|
||||||
LLNotificationsUI::LLSysHandler * sys_handler = dynamic_cast<LLNotificationsUI::LLSysHandler *>(handler);
|
|
||||||
llassert(sys_handler);
|
|
||||||
|
|
||||||
sys_handler->processNotification(notify);
|
|
||||||
*/
|
|
||||||
LLNotifications::instance().add(notification);
|
|
||||||
#endif //USE_WINDOWSHADE_DIALOGS
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
/**
|
|
||||||
* @file llfloateroutbox.h
|
|
||||||
* @brief Implementation of the merchant outbox window
|
|
||||||
*
|
|
||||||
* $LicenseInfo:firstyear=2001&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
|
|
||||||
* ABILITY 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_LLFLOATEROUTBOX_H
|
|
||||||
#define LL_LLFLOATEROUTBOX_H
|
|
||||||
|
|
||||||
#include "llfloater.h"
|
|
||||||
#include "llfoldertype.h"
|
|
||||||
#include "llinventoryfilter.h"
|
|
||||||
#include "llnotificationptr.h"
|
|
||||||
|
|
||||||
|
|
||||||
class LLButton;
|
|
||||||
class LLInventoryCategoriesObserver;
|
|
||||||
class LLInventoryCategoryAddedObserver;
|
|
||||||
class LLInventoryPanel;
|
|
||||||
class LLLoadingIndicator;
|
|
||||||
class LLNotification;
|
|
||||||
class LLTextBox;
|
|
||||||
class LLTextEditor;
|
|
||||||
class LLView;
|
|
||||||
//class LLWindowShade;
|
|
||||||
|
|
||||||
|
|
||||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
// Class LLFloaterOutbox
|
|
||||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
class LLFloaterOutbox : public LLFloater, public LLFloaterSingleton<LLFloaterOutbox>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
LLFloaterOutbox(const LLSD& key);
|
|
||||||
~LLFloaterOutbox();
|
|
||||||
|
|
||||||
void initializeMarketPlace();
|
|
||||||
|
|
||||||
// virtuals
|
|
||||||
BOOL postBuild();
|
|
||||||
BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
|
||||||
EDragAndDropType cargo_type,
|
|
||||||
void* cargo_data,
|
|
||||||
EAcceptance* accept,
|
|
||||||
std::string& tooltip_msg);
|
|
||||||
|
|
||||||
void showNotification(const LLSD& notify);
|
|
||||||
|
|
||||||
BOOL handleHover(S32 x, S32 y, MASK mask);
|
|
||||||
// void onMouseLeave(S32 x, S32 y, MASK mask);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void setupOutbox();
|
|
||||||
void cleanOutbox();
|
|
||||||
void fetchOutboxContents();
|
|
||||||
|
|
||||||
void importReportResults(U32 status, const LLSD& content);
|
|
||||||
void importStatusChanged(bool inProgress);
|
|
||||||
void initializationReportError(U32 status, const LLSD& content);
|
|
||||||
|
|
||||||
void onClose(bool app_quitting);
|
|
||||||
void onOpen();
|
|
||||||
|
|
||||||
void onFocusReceived();
|
|
||||||
|
|
||||||
void onImportButtonClicked();
|
|
||||||
void onOutboxChanged();
|
|
||||||
|
|
||||||
void setStatusString(const std::string& statusString);
|
|
||||||
|
|
||||||
void updateFolderCount();
|
|
||||||
void updateFolderCountStatus();
|
|
||||||
void updateView();
|
|
||||||
|
|
||||||
private:
|
|
||||||
LLInventoryCategoriesObserver * mCategoriesObserver;
|
|
||||||
LLInventoryCategoryAddedObserver * mCategoryAddedObserver;
|
|
||||||
|
|
||||||
bool mImportBusy;
|
|
||||||
LLButton * mImportButton;
|
|
||||||
|
|
||||||
LLTextBox * mInventoryFolderCountText;
|
|
||||||
LLView * mInventoryImportInProgress;
|
|
||||||
LLView * mInventoryPlaceholder;
|
|
||||||
LLTextEditor * mInventoryText;
|
|
||||||
LLTextBox * mInventoryTitle;
|
|
||||||
|
|
||||||
LLUUID mOutboxId;
|
|
||||||
LLHandle<LLInventoryPanel> mOutboxInventoryPanel;
|
|
||||||
U32 mOutboxItemCount;
|
|
||||||
LLPanel * mOutboxTopLevelDropZone;
|
|
||||||
|
|
||||||
//LLWindowShade * mWindowShade;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // LL_LLFLOATEROUTBOX_H
|
|
||||||
@@ -131,11 +131,6 @@ bool isRemoveAction(const std::string& action)
|
|||||||
return ("take_off" == action || "detach" == action || "deactivate" == action);
|
return ("take_off" == action || "detach" == action || "deactivate" == action);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isMarketplaceCopyAction(const std::string& action)
|
|
||||||
{
|
|
||||||
return (("copy_to_outbox" == action) || ("move_to_outbox" == action));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Used by LLFolderBridge as callback for directory fetching recursion
|
// Used by LLFolderBridge as callback for directory fetching recursion
|
||||||
class LLRightClickInventoryFetchDescendentsObserver : public LLInventoryFetchDescendentsObserver
|
class LLRightClickInventoryFetchDescendentsObserver : public LLInventoryFetchDescendentsObserver
|
||||||
{
|
{
|
||||||
@@ -827,14 +822,6 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
|
|||||||
{
|
{
|
||||||
items.push_back(std::string("Marketplace Separator"));
|
items.push_back(std::string("Marketplace Separator"));
|
||||||
|
|
||||||
if (gMenuHolder->getChild<LLView>("MerchantOutbox")->getVisible())
|
|
||||||
{
|
|
||||||
items.push_back(std::string("Merchant Copy"));
|
|
||||||
if (!canListOnOutboxNow())
|
|
||||||
{
|
|
||||||
disabled_items.push_back(std::string("Merchant Copy"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (gMenuHolder->getChild<LLView>("MarketplaceListings")->getVisible())
|
if (gMenuHolder->getChild<LLView>("MarketplaceListings")->getVisible())
|
||||||
{
|
{
|
||||||
items.push_back(std::string("Marketplace Copy"));
|
items.push_back(std::string("Marketplace Copy"));
|
||||||
@@ -851,7 +838,7 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
|
|||||||
|
|
||||||
bool paste_as_copy = false; // If Paste As Copy is on the menu, Paste As Link will always show up disabled, so don't bother.
|
bool paste_as_copy = false; // If Paste As Copy is on the menu, Paste As Link will always show up disabled, so don't bother.
|
||||||
// Don't allow items to be pasted directly into the COF or the inbox/outbox
|
// Don't allow items to be pasted directly into the COF or the inbox/outbox
|
||||||
if (!isCOFFolder() && !isInboxFolder() && !isOutboxFolder())
|
if (!isCOFFolder() && !isInboxFolder())
|
||||||
{
|
{
|
||||||
items.push_back(std::string("Paste"));
|
items.push_back(std::string("Paste"));
|
||||||
// Paste as copy if we have links.
|
// Paste as copy if we have links.
|
||||||
@@ -897,10 +884,6 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
{
|
{
|
||||||
addTrashContextMenuOptions(items, disabled_items);
|
addTrashContextMenuOptions(items, disabled_items);
|
||||||
}
|
}
|
||||||
else if(isOutboxFolder())
|
|
||||||
{
|
|
||||||
addOutboxContextMenuOptions(flags, items, disabled_items);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
items.push_back(std::string("Share"));
|
items.push_back(std::string("Share"));
|
||||||
@@ -1015,31 +998,6 @@ void LLInvFVBridge::addOpenRightClickMenuOption(menuentry_vec_t &items)
|
|||||||
items.push_back(std::string("Open"));
|
items.push_back(std::string("Open"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLInvFVBridge::addOutboxContextMenuOptions(U32 flags,
|
|
||||||
menuentry_vec_t &items,
|
|
||||||
menuentry_vec_t &disabled_items)
|
|
||||||
{
|
|
||||||
items.push_back(std::string("Rename"));
|
|
||||||
items.push_back(std::string("Delete"));
|
|
||||||
|
|
||||||
if ((flags & FIRST_SELECTED_ITEM) == 0)
|
|
||||||
{
|
|
||||||
disabled_items.push_back(std::string("Rename"));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Singu TODO: Remove this block when removing outbox.
|
|
||||||
if (isOutboxFolderDirectParent())
|
|
||||||
{
|
|
||||||
items.push_back(std::string("Marketplace Separator"));
|
|
||||||
items.push_back(std::string("Marketplace Send"));
|
|
||||||
|
|
||||||
if (!canListOnMarketplaceNow() || (flags & FIRST_SELECTED_ITEM) == 0)
|
|
||||||
{
|
|
||||||
disabled_items.push_back(std::string("Marketplace Send"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLInvFVBridge::addMarketplaceContextMenuOptions(U32 flags,
|
void LLInvFVBridge::addMarketplaceContextMenuOptions(U32 flags,
|
||||||
menuentry_vec_t &items,
|
menuentry_vec_t &items,
|
||||||
menuentry_vec_t &disabled_items)
|
menuentry_vec_t &disabled_items)
|
||||||
@@ -1288,41 +1246,6 @@ BOOL LLInvFVBridge::isMarketplaceListingsFolder() const
|
|||||||
return gInventory.isObjectDescendentOf(mUUID, folder_id);
|
return gInventory.isObjectDescendentOf(mUUID, folder_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL LLInvFVBridge::isOutboxFolder() const
|
|
||||||
{
|
|
||||||
const LLUUID outbox_id = getOutboxFolder();
|
|
||||||
|
|
||||||
if (outbox_id.isNull())
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return gInventory.isObjectDescendentOf(mUUID, outbox_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LLInvFVBridge::isOutboxFolderDirectParent() const
|
|
||||||
{
|
|
||||||
BOOL outbox_is_parent = FALSE;
|
|
||||||
|
|
||||||
const LLInventoryCategory *cat = gInventory.getCategory(mUUID);
|
|
||||||
|
|
||||||
if (cat)
|
|
||||||
{
|
|
||||||
const LLUUID outbox_id = getOutboxFolder();
|
|
||||||
|
|
||||||
outbox_is_parent = (outbox_id.notNull() && (outbox_id == cat->getParentUUID()));
|
|
||||||
}
|
|
||||||
|
|
||||||
return outbox_is_parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
const LLUUID LLInvFVBridge::getOutboxFolder() const
|
|
||||||
{
|
|
||||||
const LLUUID outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
|
|
||||||
|
|
||||||
return outbox_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LLInvFVBridge::isItemPermissive() const
|
BOOL LLInvFVBridge::isItemPermissive() const
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -1583,55 +1506,6 @@ bool LLInvFVBridge::canListOnMarketplace() const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// *TODO : Suppress canListOnOutboxNow() once we deprecate Merchant Outbox completely
|
|
||||||
bool LLInvFVBridge::canListOnOutboxNow() const
|
|
||||||
{
|
|
||||||
bool can_list = true;
|
|
||||||
|
|
||||||
// Do not allow listing while import is in progress
|
|
||||||
if (LLMarketplaceInventoryImporter::instanceExists())
|
|
||||||
{
|
|
||||||
can_list = !LLMarketplaceInventoryImporter::instance().isImportInProgress();
|
|
||||||
}
|
|
||||||
|
|
||||||
const LLInventoryObject* obj = getInventoryObject();
|
|
||||||
can_list &= (obj != NULL);
|
|
||||||
|
|
||||||
if (can_list)
|
|
||||||
{
|
|
||||||
const LLUUID& object_id = obj->getLinkedUUID();
|
|
||||||
can_list = object_id.notNull();
|
|
||||||
|
|
||||||
if (can_list)
|
|
||||||
{
|
|
||||||
LLFolderViewFolder * object_folderp = mRoot->getFolderByID(object_id);
|
|
||||||
if (object_folderp)
|
|
||||||
{
|
|
||||||
can_list = !object_folderp->isLoading();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (can_list)
|
|
||||||
{
|
|
||||||
// Get outbox id
|
|
||||||
const LLUUID & outbox_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
|
|
||||||
LLFolderViewItem * outbox_itemp = mRoot->getItemByID(outbox_id);
|
|
||||||
|
|
||||||
if (outbox_itemp)
|
|
||||||
{
|
|
||||||
MASK mask = 0x0;
|
|
||||||
BOOL drop = FALSE;
|
|
||||||
EDragAndDropType cargo_type = LLViewerAssetType::lookupDragAndDropType(obj->getActualType());
|
|
||||||
void * cargo_data = (void *) obj;
|
|
||||||
|
|
||||||
can_list = outbox_itemp->getListener()->dragOrDrop(mask, drop, cargo_type, cargo_data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return can_list;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool LLInvFVBridge::canListOnMarketplaceNow() const
|
bool LLInvFVBridge::canListOnMarketplaceNow() const
|
||||||
{
|
{
|
||||||
bool can_list = true;
|
bool can_list = true;
|
||||||
@@ -1796,16 +1670,6 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action)
|
|||||||
folder_view_itemp->getListener()->pasteLinkFromClipboard();
|
folder_view_itemp->getListener()->pasteLinkFromClipboard();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (isMarketplaceCopyAction(action))
|
|
||||||
{
|
|
||||||
LL_INFOS() << "Copy item to marketplace action!" << LL_ENDL;
|
|
||||||
|
|
||||||
LLInventoryItem* itemp = model->getItem(mUUID);
|
|
||||||
if (!itemp) return;
|
|
||||||
|
|
||||||
const LLUUID outbox_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
|
|
||||||
copy_item_to_outbox(itemp, outbox_id, LLUUID::null, LLToolDragAndDrop::getOperationId());
|
|
||||||
}
|
|
||||||
else if (("move_to_marketplace_listings" == action) || ("copy_to_marketplace_listings" == action) || ("copy_or_move_to_marketplace_listings" == action))
|
else if (("move_to_marketplace_listings" == action) || ("copy_to_marketplace_listings" == action) || ("copy_or_move_to_marketplace_listings" == action))
|
||||||
{
|
{
|
||||||
LLInventoryItem* itemp = model->getItem(mUUID);
|
LLInventoryItem* itemp = model->getItem(mUUID);
|
||||||
@@ -2451,13 +2315,10 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||||||
|
|
||||||
const LLUUID &cat_id = inv_cat->getUUID();
|
const LLUUID &cat_id = inv_cat->getUUID();
|
||||||
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
|
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
|
||||||
const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
|
|
||||||
const LLUUID& marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
const LLUUID& marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
||||||
const LLUUID from_folder_uuid = inv_cat->getParentUUID();
|
const LLUUID from_folder_uuid = inv_cat->getParentUUID();
|
||||||
|
|
||||||
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
|
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
|
||||||
const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id);
|
|
||||||
const BOOL move_is_from_outbox = model->isObjectDescendentOf(cat_id, outbox_id);
|
|
||||||
const BOOL move_is_into_marketplacelistings = model->isObjectDescendentOf(mUUID, marketplacelistings_id);
|
const BOOL move_is_into_marketplacelistings = model->isObjectDescendentOf(mUUID, marketplacelistings_id);
|
||||||
const BOOL move_is_from_marketplacelistings = model->isObjectDescendentOf(cat_id, marketplacelistings_id);
|
const BOOL move_is_from_marketplacelistings = model->isObjectDescendentOf(cat_id, marketplacelistings_id);
|
||||||
|
|
||||||
@@ -2607,9 +2468,9 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||||||
}
|
}
|
||||||
// [/RLVa:KB]
|
// [/RLVa:KB]
|
||||||
|
|
||||||
if (is_movable && (move_is_into_outbox || move_is_into_marketplacelistings))
|
if (is_movable && move_is_into_marketplacelistings)
|
||||||
{
|
{
|
||||||
const LLViewerInventoryCategory* master_folder = (move_is_into_outbox ? model->getFirstDescendantOf(outbox_id, mUUID) : model->getFirstDescendantOf(marketplacelistings_id, mUUID));
|
const LLViewerInventoryCategory* master_folder = model->getFirstDescendantOf(marketplacelistings_id, mUUID);
|
||||||
LLViewerInventoryCategory * dest_folder = getCategory();
|
LLViewerInventoryCategory * dest_folder = getCategory();
|
||||||
S32 bundle_size = (drop ? 1 : LLToolDragAndDrop::instance().getCargoCount());
|
S32 bundle_size = (drop ? 1 : LLToolDragAndDrop::instance().getCargoCount());
|
||||||
is_movable = can_move_folder_to_marketplace(master_folder, dest_folder, inv_cat, tooltip_msg, bundle_size);
|
is_movable = can_move_folder_to_marketplace(master_folder, dest_folder, inv_cat, tooltip_msg, bundle_size);
|
||||||
@@ -2704,10 +2565,6 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (move_is_into_outbox && !move_is_from_outbox)
|
|
||||||
{
|
|
||||||
copy_folder_to_outbox(inv_cat, mUUID, cat_id, LLToolDragAndDrop::getOperationId());
|
|
||||||
}
|
|
||||||
else if (move_is_into_marketplacelistings)
|
else if (move_is_into_marketplacelistings)
|
||||||
{
|
{
|
||||||
move_folder_to_marketplacelistings(inv_cat, mUUID);
|
move_folder_to_marketplacelistings(inv_cat, mUUID);
|
||||||
@@ -2758,7 +2615,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||||||
}
|
}
|
||||||
else if (LLToolDragAndDrop::SOURCE_WORLD == source)
|
else if (LLToolDragAndDrop::SOURCE_WORLD == source)
|
||||||
{
|
{
|
||||||
if (move_is_into_outbox || move_is_into_marketplacelistings)
|
if (move_is_into_marketplacelistings)
|
||||||
{
|
{
|
||||||
accept = FALSE;
|
accept = FALSE;
|
||||||
}
|
}
|
||||||
@@ -2769,7 +2626,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||||||
}
|
}
|
||||||
else if (LLToolDragAndDrop::SOURCE_LIBRARY == source)
|
else if (LLToolDragAndDrop::SOURCE_LIBRARY == source)
|
||||||
{
|
{
|
||||||
if (move_is_into_outbox || move_is_into_marketplacelistings)
|
if (move_is_into_marketplacelistings)
|
||||||
{
|
{
|
||||||
accept = FALSE;
|
accept = FALSE;
|
||||||
}
|
}
|
||||||
@@ -3288,16 +3145,6 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
|
|||||||
removeSystemFolder();
|
removeSystemFolder();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (isMarketplaceCopyAction(action))
|
|
||||||
{
|
|
||||||
LL_INFOS() << "Copy folder to marketplace action!" << LL_ENDL;
|
|
||||||
|
|
||||||
LLInventoryCategory * cat = gInventory.getCategory(mUUID);
|
|
||||||
if (!cat) return;
|
|
||||||
|
|
||||||
const LLUUID outbox_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
|
|
||||||
copy_folder_to_outbox(cat, outbox_id, cat->getUUID(), LLToolDragAndDrop::getOperationId());
|
|
||||||
}
|
|
||||||
else if (("move_to_marketplace_listings" == action) || ("copy_to_marketplace_listings" == action) || ("copy_or_move_to_marketplace_listings" == action))
|
else if (("move_to_marketplace_listings" == action) || ("copy_to_marketplace_listings" == action) || ("copy_or_move_to_marketplace_listings" == action))
|
||||||
{
|
{
|
||||||
LLInventoryCategory * cat = gInventory.getCategory(mUUID);
|
LLInventoryCategory * cat = gInventory.getCategory(mUUID);
|
||||||
@@ -3305,12 +3152,6 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
|
|||||||
const LLUUID &marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
const LLUUID &marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
||||||
move_folder_to_marketplacelistings(cat, marketplacelistings_id, ("copy_to_marketplace_listings" == action), (("copy_or_move_to_marketplace_listings" == action)));
|
move_folder_to_marketplacelistings(cat, marketplacelistings_id, ("copy_to_marketplace_listings" == action), (("copy_or_move_to_marketplace_listings" == action)));
|
||||||
}
|
}
|
||||||
// Singu TODO: Remove this block when removing outbox.
|
|
||||||
else if ("send_to_marketplace" == action)
|
|
||||||
{
|
|
||||||
LL_INFOS() << "Send to marketplace action!" << LL_ENDL;
|
|
||||||
LLMarketplaceInventoryImporter::instance().triggerImport();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLFolderBridge::gatherMessage(std::string& message, S32 depth, LLError::ELevel log_level)
|
void LLFolderBridge::gatherMessage(std::string& message, S32 depth, LLError::ELevel log_level)
|
||||||
@@ -3537,24 +3378,22 @@ void LLFolderBridge::perform_pasteFromClipboard(bool only_copies)
|
|||||||
if (model && isClipboardPasteable())
|
if (model && isClipboardPasteable())
|
||||||
{
|
{
|
||||||
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
|
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
|
||||||
const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
|
|
||||||
const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
|
const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
|
||||||
const LLUUID& marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
const LLUUID& marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
||||||
|
|
||||||
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
|
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
|
||||||
const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
|
const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
|
||||||
const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
|
const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
|
||||||
const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id);
|
|
||||||
const BOOL move_is_into_marketplacelistings = model->isObjectDescendentOf(mUUID, marketplacelistings_id);
|
const BOOL move_is_into_marketplacelistings = model->isObjectDescendentOf(mUUID, marketplacelistings_id);
|
||||||
|
|
||||||
std::vector<LLUUID> objects;
|
std::vector<LLUUID> objects;
|
||||||
LLInventoryClipboard::instance().retrieve(objects);
|
LLInventoryClipboard::instance().retrieve(objects);
|
||||||
|
|
||||||
LLViewerInventoryCategory* dest_folder = getCategory();
|
LLViewerInventoryCategory* dest_folder = getCategory();
|
||||||
if (move_is_into_outbox || move_is_into_marketplacelistings)
|
if (move_is_into_marketplacelistings)
|
||||||
{
|
{
|
||||||
std::string error_msg;
|
std::string error_msg;
|
||||||
const LLViewerInventoryCategory* master_folder = (move_is_into_outbox ? model->getFirstDescendantOf(outbox_id, mUUID) : model->getFirstDescendantOf(marketplacelistings_id, mUUID));
|
const LLViewerInventoryCategory* master_folder = model->getFirstDescendantOf(marketplacelistings_id, mUUID);
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (std::vector<LLUUID>::const_iterator iter = objects.begin(); iter != objects.end(); ++iter)
|
for (std::vector<LLUUID>::const_iterator iter = objects.begin(); iter != objects.end(); ++iter)
|
||||||
{
|
{
|
||||||
@@ -3740,17 +3579,15 @@ void LLFolderBridge::pasteLinkFromClipboard()
|
|||||||
if(model)
|
if(model)
|
||||||
{
|
{
|
||||||
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
|
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
|
||||||
const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
|
|
||||||
const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
|
const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
|
||||||
const LLUUID& marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
const LLUUID& marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
||||||
|
|
||||||
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
|
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
|
||||||
const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
|
const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
|
||||||
const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
|
const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
|
||||||
const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id);
|
|
||||||
const BOOL move_is_into_marketplacelistings = model->isObjectDescendentOf(mUUID, marketplacelistings_id);
|
const BOOL move_is_into_marketplacelistings = model->isObjectDescendentOf(mUUID, marketplacelistings_id);
|
||||||
|
|
||||||
if (move_is_into_outbox || move_is_into_marketplacelistings)
|
if (move_is_into_marketplacelistings)
|
||||||
{
|
{
|
||||||
// Notify user of failure somehow -- play error sound? modal dialog?
|
// Notify user of failure somehow -- play error sound? modal dialog?
|
||||||
return;
|
return;
|
||||||
@@ -3871,10 +3708,6 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items
|
|||||||
items.clear(); // clear any items that used to exist
|
items.clear(); // clear any items that used to exist
|
||||||
addTrashContextMenuOptions(items, disabled_items);
|
addTrashContextMenuOptions(items, disabled_items);
|
||||||
}
|
}
|
||||||
else if(isOutboxFolder())
|
|
||||||
{
|
|
||||||
addOutboxContextMenuOptions(flags, items, disabled_items);
|
|
||||||
}
|
|
||||||
else if(isAgentInventory()) // do not allow creating in library
|
else if(isAgentInventory()) // do not allow creating in library
|
||||||
{
|
{
|
||||||
LLViewerInventoryCategory *cat = getCategory();
|
LLViewerInventoryCategory *cat = getCategory();
|
||||||
@@ -3883,7 +3716,7 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items
|
|||||||
const bool is_cof(isCOFFolder());
|
const bool is_cof(isCOFFolder());
|
||||||
if (!is_cof && cat && (cat->getPreferredType() != LLFolderType::FT_OUTFIT))
|
if (!is_cof && cat && (cat->getPreferredType() != LLFolderType::FT_OUTFIT))
|
||||||
{
|
{
|
||||||
if (!isInboxFolder() && !isOutboxFolder()) // don't allow creation in inbox or outbox
|
if (!isInboxFolder()) // don't allow creation in inbox
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
items.push_back(std::string("New Folder"));
|
items.push_back(std::string("New Folder"));
|
||||||
@@ -3953,7 +3786,7 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items
|
|||||||
disabled_items.push_back(std::string("Delete System Folder"));
|
disabled_items.push_back(std::string("Delete System Folder"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isOutboxFolder() && !isMarketplaceListingsFolder() && !isItemInTrash()) // <alchemy/>
|
if (!isMarketplaceListingsFolder() && !isItemInTrash()) // <alchemy/>
|
||||||
{
|
{
|
||||||
items.push_back(std::string("Share"));
|
items.push_back(std::string("Share"));
|
||||||
if (!canShare())
|
if (!canShare())
|
||||||
@@ -3991,7 +3824,6 @@ void LLFolderBridge::buildContextMenuFolderOptions(U32 flags, menuentry_vec_t&
|
|||||||
// Build folder specific options back up
|
// Build folder specific options back up
|
||||||
LLInventoryModel* model = getInventoryModel();
|
LLInventoryModel* model = getInventoryModel();
|
||||||
|
|
||||||
if (isOutboxFolder()) return;
|
|
||||||
if (!isAgentInventory()) return;
|
if (!isAgentInventory()) return;
|
||||||
|
|
||||||
build_context_menu_folder_options(model, mUUID, items, disabled_items);
|
build_context_menu_folder_options(model, mUUID, items, disabled_items);
|
||||||
@@ -4604,7 +4436,6 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||||||
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
|
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
|
||||||
const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);
|
const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);
|
||||||
const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false);
|
const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false);
|
||||||
const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
|
|
||||||
const LLUUID& marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
const LLUUID& marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
||||||
const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
|
const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
|
||||||
const LLUUID from_folder_uuid = inv_item->getParentUUID();
|
const LLUUID from_folder_uuid = inv_item->getParentUUID();
|
||||||
@@ -4614,8 +4445,6 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||||||
const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
|
const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
|
||||||
const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
|
const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
|
||||||
const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id);
|
const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id);
|
||||||
const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id);
|
|
||||||
const BOOL move_is_from_outbox = model->isObjectDescendentOf(inv_item->getUUID(), outbox_id);
|
|
||||||
const BOOL move_is_into_marketplacelistings = model->isObjectDescendentOf(mUUID, marketplacelistings_id);
|
const BOOL move_is_into_marketplacelistings = model->isObjectDescendentOf(mUUID, marketplacelistings_id);
|
||||||
const BOOL move_is_from_marketplacelistings = model->isObjectDescendentOf(inv_item->getUUID(), marketplacelistings_id);
|
const BOOL move_is_from_marketplacelistings = model->isObjectDescendentOf(inv_item->getUUID(), marketplacelistings_id);
|
||||||
|
|
||||||
@@ -4707,9 +4536,9 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||||||
{
|
{
|
||||||
accept = can_move_to_landmarks(inv_item);
|
accept = can_move_to_landmarks(inv_item);
|
||||||
}
|
}
|
||||||
else if (user_confirm && (move_is_into_outbox || move_is_into_marketplacelistings))
|
else if (user_confirm && move_is_into_marketplacelistings)
|
||||||
{
|
{
|
||||||
const LLViewerInventoryCategory* master_folder = (move_is_into_outbox ? model->getFirstDescendantOf(outbox_id, mUUID) : model->getFirstDescendantOf(marketplacelistings_id, mUUID));
|
const LLViewerInventoryCategory* master_folder = model->getFirstDescendantOf(marketplacelistings_id, mUUID);
|
||||||
LLViewerInventoryCategory* dest_folder = getCategory();
|
LLViewerInventoryCategory* dest_folder = getCategory();
|
||||||
std::string tooltip_msg;
|
std::string tooltip_msg;
|
||||||
accept = can_move_item_to_marketplace(master_folder, dest_folder, inv_item, tooltip_msg, LLToolDragAndDrop::instance().getCargoCount() - LLToolDragAndDrop::instance().getCargoIndex());
|
accept = can_move_item_to_marketplace(master_folder, dest_folder, inv_item, tooltip_msg, LLToolDragAndDrop::instance().getCargoCount() - LLToolDragAndDrop::instance().getCargoIndex());
|
||||||
@@ -4793,19 +4622,6 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||||||
{
|
{
|
||||||
dropToOutfit(inv_item, move_is_into_current_outfit);
|
dropToOutfit(inv_item, move_is_into_current_outfit);
|
||||||
}
|
}
|
||||||
// MERCHANT OUTBOX folder
|
|
||||||
// Move the item
|
|
||||||
else if (move_is_into_outbox)
|
|
||||||
{
|
|
||||||
if (move_is_from_outbox)
|
|
||||||
{
|
|
||||||
move_item_within_outbox(inv_item, mUUID, LLToolDragAndDrop::getOperationId());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
copy_item_to_outbox(inv_item, mUUID, LLUUID::null, LLToolDragAndDrop::getOperationId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// MARKETPLACE LISTINGS folder
|
// MARKETPLACE LISTINGS folder
|
||||||
// Move the item
|
// Move the item
|
||||||
else if (move_is_into_marketplacelistings)
|
else if (move_is_into_marketplacelistings)
|
||||||
@@ -4892,7 +4708,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||||||
{
|
{
|
||||||
accept = FALSE;
|
accept = FALSE;
|
||||||
}
|
}
|
||||||
else if (move_is_into_outbox || move_is_into_marketplacelistings)
|
else if (move_is_into_marketplacelistings)
|
||||||
{
|
{
|
||||||
accept = FALSE;
|
accept = FALSE;
|
||||||
}
|
}
|
||||||
@@ -4922,7 +4738,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||||||
}
|
}
|
||||||
else if(LLToolDragAndDrop::SOURCE_NOTECARD == source)
|
else if(LLToolDragAndDrop::SOURCE_NOTECARD == source)
|
||||||
{
|
{
|
||||||
if (move_is_into_outbox || move_is_into_marketplacelistings)
|
if (move_is_into_marketplacelistings)
|
||||||
{
|
{
|
||||||
accept = FALSE;
|
accept = FALSE;
|
||||||
}
|
}
|
||||||
@@ -4948,7 +4764,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
|
|||||||
{
|
{
|
||||||
accept = TRUE;
|
accept = TRUE;
|
||||||
|
|
||||||
if (move_is_into_outbox || move_is_into_marketplacelistings)
|
if (move_is_into_marketplacelistings)
|
||||||
{
|
{
|
||||||
accept = FALSE;
|
accept = FALSE;
|
||||||
}
|
}
|
||||||
@@ -5087,10 +4903,6 @@ void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
{
|
{
|
||||||
addTrashContextMenuOptions(items, disabled_items);
|
addTrashContextMenuOptions(items, disabled_items);
|
||||||
}
|
}
|
||||||
else if(isOutboxFolder())
|
|
||||||
{
|
|
||||||
addOutboxContextMenuOptions(flags, items, disabled_items);
|
|
||||||
}
|
|
||||||
else if (isMarketplaceListingsFolder())
|
else if (isMarketplaceListingsFolder())
|
||||||
{
|
{
|
||||||
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
||||||
@@ -5184,11 +4996,7 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
menuentry_vec_t items;
|
menuentry_vec_t items;
|
||||||
menuentry_vec_t disabled_items;
|
menuentry_vec_t disabled_items;
|
||||||
|
|
||||||
if (isOutboxFolder())
|
if (isMarketplaceListingsFolder())
|
||||||
{
|
|
||||||
addOutboxContextMenuOptions(flags, items, disabled_items);
|
|
||||||
}
|
|
||||||
else if (isMarketplaceListingsFolder())
|
|
||||||
{
|
{
|
||||||
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
||||||
items.push_back(std::string("Properties"));
|
items.push_back(std::string("Properties"));
|
||||||
@@ -5265,11 +5073,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
menuentry_vec_t disabled_items;
|
menuentry_vec_t disabled_items;
|
||||||
|
|
||||||
LL_DEBUGS() << "LLLandmarkBridge::buildContextMenu()" << LL_ENDL;
|
LL_DEBUGS() << "LLLandmarkBridge::buildContextMenu()" << LL_ENDL;
|
||||||
if(isOutboxFolder())
|
if (isMarketplaceListingsFolder())
|
||||||
{
|
|
||||||
addOutboxContextMenuOptions(flags, items, disabled_items);
|
|
||||||
}
|
|
||||||
else if (isMarketplaceListingsFolder())
|
|
||||||
{
|
{
|
||||||
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
||||||
items.push_back(std::string("Properties"));
|
items.push_back(std::string("Properties"));
|
||||||
@@ -5551,10 +5355,6 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
{
|
{
|
||||||
addTrashContextMenuOptions(items, disabled_items);
|
addTrashContextMenuOptions(items, disabled_items);
|
||||||
}
|
}
|
||||||
else if(isOutboxFolder())
|
|
||||||
{
|
|
||||||
items.push_back(std::string("Delete"));
|
|
||||||
}
|
|
||||||
else if (isMarketplaceListingsFolder())
|
else if (isMarketplaceListingsFolder())
|
||||||
{
|
{
|
||||||
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
||||||
@@ -5886,10 +5686,6 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
{
|
{
|
||||||
addTrashContextMenuOptions(items, disabled_items);
|
addTrashContextMenuOptions(items, disabled_items);
|
||||||
}
|
}
|
||||||
else if(isOutboxFolder())
|
|
||||||
{
|
|
||||||
items.push_back(std::string("Delete"));
|
|
||||||
}
|
|
||||||
else if (isMarketplaceListingsFolder())
|
else if (isMarketplaceListingsFolder())
|
||||||
{
|
{
|
||||||
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
||||||
@@ -5946,11 +5742,7 @@ void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
menuentry_vec_t disabled_items;
|
menuentry_vec_t disabled_items;
|
||||||
|
|
||||||
LL_DEBUGS() << "LLAnimationBridge::buildContextMenu()" << LL_ENDL;
|
LL_DEBUGS() << "LLAnimationBridge::buildContextMenu()" << LL_ENDL;
|
||||||
if(isOutboxFolder())
|
if (isMarketplaceListingsFolder())
|
||||||
{
|
|
||||||
items.push_back(std::string("Delete"));
|
|
||||||
}
|
|
||||||
else if (isMarketplaceListingsFolder())
|
|
||||||
{
|
{
|
||||||
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
||||||
items.push_back(std::string("Properties"));
|
items.push_back(std::string("Properties"));
|
||||||
@@ -6265,10 +6057,6 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
{
|
{
|
||||||
addTrashContextMenuOptions(items, disabled_items);
|
addTrashContextMenuOptions(items, disabled_items);
|
||||||
}
|
}
|
||||||
else if(isOutboxFolder())
|
|
||||||
{
|
|
||||||
items.push_back(std::string("Delete"));
|
|
||||||
}
|
|
||||||
else if (isMarketplaceListingsFolder())
|
else if (isMarketplaceListingsFolder())
|
||||||
{
|
{
|
||||||
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
||||||
@@ -6555,10 +6343,6 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
{
|
{
|
||||||
addTrashContextMenuOptions(items, disabled_items);
|
addTrashContextMenuOptions(items, disabled_items);
|
||||||
}
|
}
|
||||||
else if(isOutboxFolder())
|
|
||||||
{
|
|
||||||
items.push_back(std::string("Delete"));
|
|
||||||
}
|
|
||||||
else if (isMarketplaceListingsFolder())
|
else if (isMarketplaceListingsFolder())
|
||||||
{
|
{
|
||||||
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
||||||
@@ -6952,10 +6736,6 @@ void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
|
|
||||||
items.push_back(std::string("Restore Item"));
|
items.push_back(std::string("Restore Item"));
|
||||||
}
|
}
|
||||||
else if(isOutboxFolder())
|
|
||||||
{
|
|
||||||
addOutboxContextMenuOptions(flags, items, disabled_items);
|
|
||||||
}
|
|
||||||
else if (isMarketplaceListingsFolder())
|
else if (isMarketplaceListingsFolder())
|
||||||
{
|
{
|
||||||
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
addMarketplaceContextMenuOptions(flags, items, disabled_items);
|
||||||
@@ -7012,7 +6792,7 @@ void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
getClipboardEntries(false, items, disabled_items, flags);
|
getClipboardEntries(false, items, disabled_items, flags);
|
||||||
if (LLPanelMainInventory::getActiveInventory() && !isOutboxFolder() && isAgentInventory())
|
if (LLPanelMainInventory::getActiveInventory() && isAgentInventory())
|
||||||
build_context_menu_folder_options(getInventoryModel(), getFolderID(), items, disabled_items);
|
build_context_menu_folder_options(getInventoryModel(), getFolderID(), items, disabled_items);
|
||||||
addDeleteContextMenuOptions(items, disabled_items);
|
addDeleteContextMenuOptions(items, disabled_items);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,6 @@ public:
|
|||||||
|
|
||||||
bool canShare() const;
|
bool canShare() const;
|
||||||
bool canListOnMarketplace() const;
|
bool canListOnMarketplace() const;
|
||||||
bool canListOnOutboxNow() const;
|
|
||||||
bool canListOnMarketplaceNow() const;
|
bool canListOnMarketplaceNow() const;
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
@@ -139,9 +138,6 @@ protected:
|
|||||||
virtual void addDeleteContextMenuOptions(menuentry_vec_t &items,
|
virtual void addDeleteContextMenuOptions(menuentry_vec_t &items,
|
||||||
menuentry_vec_t &disabled_items);
|
menuentry_vec_t &disabled_items);
|
||||||
virtual void addOpenRightClickMenuOption(menuentry_vec_t &items);
|
virtual void addOpenRightClickMenuOption(menuentry_vec_t &items);
|
||||||
virtual void addOutboxContextMenuOptions(U32 flags,
|
|
||||||
menuentry_vec_t &items,
|
|
||||||
menuentry_vec_t &disabled_items);
|
|
||||||
virtual void addMarketplaceContextMenuOptions(U32 flags,
|
virtual void addMarketplaceContextMenuOptions(U32 flags,
|
||||||
menuentry_vec_t &items,
|
menuentry_vec_t &items,
|
||||||
menuentry_vec_t &disabled_items);
|
menuentry_vec_t &disabled_items);
|
||||||
@@ -158,9 +154,7 @@ protected:
|
|||||||
BOOL isCOFFolder() const; // true if COF or descendant of
|
BOOL isCOFFolder() const; // true if COF or descendant of
|
||||||
BOOL isInboxFolder() const; // true if COF or descendant of marketplace inbox
|
BOOL isInboxFolder() const; // true if COF or descendant of marketplace inbox
|
||||||
|
|
||||||
BOOL isOutboxFolderDirectParent() const;
|
|
||||||
BOOL isMarketplaceListingsFolder() const; // true if descendant of Marketplace listings folder
|
BOOL isMarketplaceListingsFolder() const; // true if descendant of Marketplace listings folder
|
||||||
const LLUUID getOutboxFolder() const;
|
|
||||||
|
|
||||||
virtual BOOL isItemPermissive() const;
|
virtual BOOL isItemPermissive() const;
|
||||||
static void changeItemParent(LLInventoryModel* model,
|
static void changeItemParent(LLInventoryModel* model,
|
||||||
@@ -177,9 +171,6 @@ public:
|
|||||||
BOOL callback_cutToClipboard(const LLSD& notification, const LLSD& response);
|
BOOL callback_cutToClipboard(const LLSD& notification, const LLSD& response);
|
||||||
BOOL perform_cutToClipboard();
|
BOOL perform_cutToClipboard();
|
||||||
|
|
||||||
public:
|
|
||||||
BOOL isOutboxFolder() const; // true if COF or descendant of marketplace outbox
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
LLHandle<LLInventoryPanel> mInventoryPanel;
|
LLHandle<LLInventoryPanel> mInventoryPanel;
|
||||||
LLFolderView* mRoot;
|
LLFolderView* mRoot;
|
||||||
@@ -722,7 +713,5 @@ public:
|
|||||||
// Helper functions to classify actions.
|
// Helper functions to classify actions.
|
||||||
bool isAddAction(const std::string& action);
|
bool isAddAction(const std::string& action);
|
||||||
bool isRemoveAction(const std::string& action);
|
bool isRemoveAction(const std::string& action);
|
||||||
bool isMarketplaceCopyAction(const std::string& action);
|
|
||||||
bool isMarketplaceSendAction(const std::string& action);
|
|
||||||
|
|
||||||
#endif // LL_LLINVENTORYBRIDGE_H
|
#endif // LL_LLINVENTORYBRIDGE_H
|
||||||
|
|||||||
@@ -47,7 +47,6 @@
|
|||||||
//#include "llfirstuse.h"
|
//#include "llfirstuse.h"
|
||||||
#include "llfloaterinventory.h"
|
#include "llfloaterinventory.h"
|
||||||
#include "llfloatermarketplacelistings.h"
|
#include "llfloatermarketplacelistings.h"
|
||||||
#include "llfloateroutbox.h"
|
|
||||||
#include "llfocusmgr.h"
|
#include "llfocusmgr.h"
|
||||||
#include "llfolderview.h"
|
#include "llfolderview.h"
|
||||||
#include "llgesturemgr.h"
|
#include "llgesturemgr.h"
|
||||||
@@ -744,183 +743,11 @@ void show_item_profile(const LLUUID& item_uuid)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void open_outbox()
|
|
||||||
{
|
|
||||||
LLFloaterOutbox::showInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
void open_marketplace_listings()
|
void open_marketplace_listings()
|
||||||
{
|
{
|
||||||
LLFloaterMarketplaceListings::showInstance();
|
LLFloaterMarketplaceListings::showInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new folder in destFolderId with the same name as the item name and return the uuid of the new folder
|
|
||||||
// Note: this is used locally in various situation where we need to wrap an item into a special folder
|
|
||||||
LLUUID create_folder_for_item(LLInventoryItem* item, const LLUUID& destFolderId)
|
|
||||||
{
|
|
||||||
llassert(item);
|
|
||||||
llassert(destFolderId.notNull());
|
|
||||||
|
|
||||||
LLUUID created_folder_id = gInventory.createNewCategory(destFolderId, LLFolderType::FT_NONE, item->getName());
|
|
||||||
gInventory.notifyObservers();
|
|
||||||
|
|
||||||
// *TODO : Create different notifications for the various cases
|
|
||||||
LLNotificationsUtil::add("OutboxFolderCreated");
|
|
||||||
|
|
||||||
return created_folder_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
void move_to_outbox_cb_action(const LLSD& payload)
|
|
||||||
{
|
|
||||||
LLViewerInventoryItem * viitem = gInventory.getItem(payload["item_id"].asUUID());
|
|
||||||
LLUUID dest_folder_id = payload["dest_folder_id"].asUUID();
|
|
||||||
|
|
||||||
if (viitem)
|
|
||||||
{
|
|
||||||
// when moving item directly into outbox create folder with that name
|
|
||||||
if (dest_folder_id == gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false))
|
|
||||||
{
|
|
||||||
dest_folder_id = create_folder_for_item(viitem, dest_folder_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
LLUUID parent = viitem->getParentUUID();
|
|
||||||
|
|
||||||
gInventory.changeItemParent(
|
|
||||||
viitem,
|
|
||||||
dest_folder_id,
|
|
||||||
false);
|
|
||||||
|
|
||||||
LLUUID top_level_folder = payload["top_level_folder"].asUUID();
|
|
||||||
|
|
||||||
if (top_level_folder != LLUUID::null)
|
|
||||||
{
|
|
||||||
LLViewerInventoryCategory* category;
|
|
||||||
|
|
||||||
while (parent.notNull())
|
|
||||||
{
|
|
||||||
LLInventoryModel::cat_array_t* cat_array;
|
|
||||||
LLInventoryModel::item_array_t* item_array;
|
|
||||||
gInventory.getDirectDescendentsOf(parent,cat_array,item_array);
|
|
||||||
|
|
||||||
LLUUID next_parent;
|
|
||||||
|
|
||||||
category = gInventory.getCategory(parent);
|
|
||||||
|
|
||||||
if (!category) break;
|
|
||||||
|
|
||||||
next_parent = category->getParentUUID();
|
|
||||||
|
|
||||||
if (cat_array->empty() && item_array->empty())
|
|
||||||
{
|
|
||||||
gInventory.removeCategory(parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parent == top_level_folder)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
parent = next_parent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
open_outbox();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void copy_item_to_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, const LLUUID& top_level_folder, S32 operation_id)
|
|
||||||
{
|
|
||||||
// Collapse links directly to items/folders
|
|
||||||
LLViewerInventoryItem * viewer_inv_item = (LLViewerInventoryItem *) inv_item;
|
|
||||||
LLViewerInventoryCategory * linked_category = viewer_inv_item->getLinkedCategory();
|
|
||||||
if (linked_category != NULL)
|
|
||||||
{
|
|
||||||
copy_folder_to_outbox(linked_category, dest_folder, top_level_folder, operation_id);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LLViewerInventoryItem * linked_item = viewer_inv_item->getLinkedItem();
|
|
||||||
if (linked_item != NULL)
|
|
||||||
{
|
|
||||||
inv_item = (LLInventoryItem *) linked_item;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for copy permissions
|
|
||||||
if (inv_item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID()))
|
|
||||||
{
|
|
||||||
// when moving item directly into outbox create folder with that name
|
|
||||||
if (dest_folder == gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false))
|
|
||||||
{
|
|
||||||
dest_folder = create_folder_for_item(inv_item, dest_folder);
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_inventory_item(gAgent.getID(),
|
|
||||||
inv_item->getPermissions().getOwner(),
|
|
||||||
inv_item->getUUID(),
|
|
||||||
dest_folder,
|
|
||||||
inv_item->getName(),
|
|
||||||
LLPointer<LLInventoryCallback>(NULL));
|
|
||||||
|
|
||||||
open_outbox();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LLSD payload;
|
|
||||||
payload["item_id"] = inv_item->getUUID();
|
|
||||||
payload["dest_folder_id"] = dest_folder;
|
|
||||||
payload["top_level_folder"] = top_level_folder;
|
|
||||||
payload["operation_id"] = operation_id;
|
|
||||||
|
|
||||||
LLMarketplaceInventoryNotifications::addNoCopyNotification(payload, move_to_outbox_cb_action);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void move_item_within_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, S32 operation_id)
|
|
||||||
{
|
|
||||||
// when moving item directly into outbox create folder with that name
|
|
||||||
if (dest_folder == gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false))
|
|
||||||
{
|
|
||||||
dest_folder = create_folder_for_item(inv_item, dest_folder);
|
|
||||||
}
|
|
||||||
|
|
||||||
LLViewerInventoryItem * viewer_inv_item = (LLViewerInventoryItem *) inv_item;
|
|
||||||
|
|
||||||
gInventory.changeItemParent(
|
|
||||||
viewer_inv_item,
|
|
||||||
dest_folder,
|
|
||||||
false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_folder, const LLUUID& top_level_folder, S32 operation_id)
|
|
||||||
{
|
|
||||||
LLUUID new_folder_id = gInventory.createNewCategory(dest_folder, LLFolderType::FT_NONE, inv_cat->getName());
|
|
||||||
gInventory.notifyObservers();
|
|
||||||
|
|
||||||
LLInventoryModel::cat_array_t* cat_array;
|
|
||||||
LLInventoryModel::item_array_t* item_array;
|
|
||||||
gInventory.getDirectDescendentsOf(inv_cat->getUUID(),cat_array,item_array);
|
|
||||||
|
|
||||||
// copy the vector because otherwise the iterator won't be happy if we delete from it
|
|
||||||
LLInventoryModel::item_array_t item_array_copy = *item_array;
|
|
||||||
|
|
||||||
for (LLInventoryModel::item_array_t::iterator iter = item_array_copy.begin(); iter != item_array_copy.end(); iter++)
|
|
||||||
{
|
|
||||||
LLInventoryItem* item = *iter;
|
|
||||||
copy_item_to_outbox(item, new_folder_id, top_level_folder, operation_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
LLInventoryModel::cat_array_t cat_array_copy = *cat_array;
|
|
||||||
|
|
||||||
for (LLInventoryModel::cat_array_t::iterator iter = cat_array_copy.begin(); iter != cat_array_copy.end(); iter++)
|
|
||||||
{
|
|
||||||
LLViewerInventoryCategory* category = *iter;
|
|
||||||
copy_folder_to_outbox(category, new_folder_id, top_level_folder, operation_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
open_outbox();
|
|
||||||
}
|
|
||||||
|
|
||||||
///----------------------------------------------------------------------------
|
///----------------------------------------------------------------------------
|
||||||
// Marketplace functions
|
// Marketplace functions
|
||||||
//
|
//
|
||||||
@@ -1213,7 +1040,7 @@ bool has_correct_permissions_for_sale(LLInventoryCategory* cat, std::string& err
|
|||||||
// bundle_size is the amount of sibling items that are getting moved to the marketplace at the same time.
|
// bundle_size is the amount of sibling items that are getting moved to the marketplace at the same time.
|
||||||
bool can_move_item_to_marketplace(const LLInventoryCategory* root_folder, LLInventoryCategory* dest_folder, LLInventoryItem* inv_item, std::string& tooltip_msg, S32 bundle_size, bool from_paste)
|
bool can_move_item_to_marketplace(const LLInventoryCategory* root_folder, LLInventoryCategory* dest_folder, LLInventoryItem* inv_item, std::string& tooltip_msg, S32 bundle_size, bool from_paste)
|
||||||
{
|
{
|
||||||
// Check stock folder type matches item type in marketplace listings or merchant outbox (even if of no use there for the moment)
|
// Check stock folder type matches item type in marketplace listings (even if of no use there for the moment)
|
||||||
LLViewerInventoryCategory* view_folder = dynamic_cast<LLViewerInventoryCategory*>(dest_folder);
|
LLViewerInventoryCategory* view_folder = dynamic_cast<LLViewerInventoryCategory*>(dest_folder);
|
||||||
bool move_in_stock = (view_folder && (view_folder->getPreferredType() == LLFolderType::FT_MARKETPLACE_STOCK));
|
bool move_in_stock = (view_folder && (view_folder->getPreferredType() == LLFolderType::FT_MARKETPLACE_STOCK));
|
||||||
bool accept = (view_folder && view_folder->acceptItem(inv_item));
|
bool accept = (view_folder && view_folder->acceptItem(inv_item));
|
||||||
|
|||||||
@@ -70,10 +70,6 @@ void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory*
|
|||||||
// Generates a string containing the path to the item specified by item_id.
|
// Generates a string containing the path to the item specified by item_id.
|
||||||
void append_path(const LLUUID& id, std::string& path);
|
void append_path(const LLUUID& id, std::string& path);
|
||||||
|
|
||||||
void copy_item_to_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, const LLUUID& top_level_folder, S32 operation_id);
|
|
||||||
void move_item_within_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, S32 operation_id);
|
|
||||||
void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_folder, const LLUUID& top_level_folder, S32 operation_id);
|
|
||||||
|
|
||||||
typedef boost::function<void(std::string& validation_message, S32 depth, LLError::ELevel log_level)> validation_callback_t;
|
typedef boost::function<void(std::string& validation_message, S32 depth, LLError::ELevel log_level)> validation_callback_t;
|
||||||
|
|
||||||
bool can_move_item_to_marketplace(const LLInventoryCategory* root_folder, LLInventoryCategory* dest_folder, LLInventoryItem* inv_item, std::string& tooltip_msg, S32 bundle_size = 1, bool from_paste = false);
|
bool can_move_item_to_marketplace(const LLInventoryCategory* root_folder, LLInventoryCategory* dest_folder, LLInventoryItem* inv_item, std::string& tooltip_msg, S32 bundle_size = 1, bool from_paste = false);
|
||||||
|
|||||||
@@ -1323,17 +1323,6 @@ BOOL LLInventoryPanel::handleKeyHere( KEY key, MASK mask )
|
|||||||
// Open selected items if enter key hit on the inventory panel
|
// Open selected items if enter key hit on the inventory panel
|
||||||
if (mask == MASK_NONE)
|
if (mask == MASK_NONE)
|
||||||
{
|
{
|
||||||
//Don't allow attaching or opening items from Merchant Outbox
|
|
||||||
LLFolderViewItem* folder_item = mFolderRoot.get()->getCurSelectedItem();
|
|
||||||
if(folder_item)
|
|
||||||
{
|
|
||||||
LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener();
|
|
||||||
if(bridge && bridge->isOutboxFolder() && (bridge->getInventoryType() != LLInventoryType::IT_CATEGORY))
|
|
||||||
{
|
|
||||||
return handled;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LLInventoryAction::doToSelected(mFolderRoot.get(), "open");
|
LLInventoryAction::doToSelected(mFolderRoot.get(), "open");
|
||||||
handled = TRUE;
|
handled = TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,7 +82,6 @@
|
|||||||
#include "llfloatermessagelog.h"
|
#include "llfloatermessagelog.h"
|
||||||
#include "llfloatermute.h"
|
#include "llfloatermute.h"
|
||||||
#include "llfloaternotificationsconsole.h"
|
#include "llfloaternotificationsconsole.h"
|
||||||
#include "llfloateroutbox.h"
|
|
||||||
#include "llfloaterpathfindingcharacters.h"
|
#include "llfloaterpathfindingcharacters.h"
|
||||||
#include "llfloaterpathfindinglinksets.h"
|
#include "llfloaterpathfindinglinksets.h"
|
||||||
#include "llfloaterperms.h"
|
#include "llfloaterperms.h"
|
||||||
@@ -234,7 +233,6 @@ struct MenuFloaterDict : public LLSingleton<MenuFloaterDict>
|
|||||||
registerFloater<LLFloaterMove> ("movement controls");
|
registerFloater<LLFloaterMove> ("movement controls");
|
||||||
registerFloater<LLFloaterMute> ("mute list");
|
registerFloater<LLFloaterMute> ("mute list");
|
||||||
registerFloater<LLFloaterNotificationConsole> ("notifications console");
|
registerFloater<LLFloaterNotificationConsole> ("notifications console");
|
||||||
registerFloater<LLFloaterOutbox> ("outbox");
|
|
||||||
registerFloater<LLFloaterPathfindingCharacters> ("pathfinding_characters");
|
registerFloater<LLFloaterPathfindingCharacters> ("pathfinding_characters");
|
||||||
registerFloater<LLFloaterPathfindingLinksets> ("pathfinding_linksets");
|
registerFloater<LLFloaterPathfindingLinksets> ("pathfinding_linksets");
|
||||||
registerFloater<LLFloaterPermsDefault> ("perm prefs");
|
registerFloater<LLFloaterPermsDefault> ("perm prefs");
|
||||||
|
|||||||
Binary file not shown.
@@ -1,31 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<floater name="floater_merchant_outbox" title="Händler-Outbox">
|
|
||||||
<string name="OutboxFolderCount0">Keine Ordner</string>
|
|
||||||
<string name="OutboxFolderCount1">1 Ordner</string>
|
|
||||||
<string name="OutboxFolderCountN">[NUM] Ordner</string>
|
|
||||||
<string name="OutboxImporting">Ordner übertragen...</string>
|
|
||||||
<string name="OutboxInitializing">Initialisieren...</string>
|
|
||||||
<!--panel
|
|
||||||
name="panel_1 this panel killed xui names, for some reason"
|
|
||||||
follows="all"
|
|
||||||
layout="topleft"
|
|
||||||
left="0"
|
|
||||||
top="0"
|
|
||||||
label=""
|
|
||||||
height="440"
|
|
||||||
width="333"-->
|
|
||||||
<panel name="outbox_inventory_placeholder_panel">
|
|
||||||
<text name="outbox_inventory_placeholder_title">Wird geladen...</text>
|
|
||||||
|
|
||||||
</panel>
|
|
||||||
|
|
||||||
<panel name="panel_2">
|
|
||||||
<panel name="outbox_generic_drag_target">
|
|
||||||
<text name="text_1">Objekte hier ablegen, um Ordner zu erstellen</text>
|
|
||||||
</panel>
|
|
||||||
|
|
||||||
<button label="In Marktplatz übertragen" tool_tip="In meinen Marktplatz-Laden verschieben" name="outbox_import_btn"/>
|
|
||||||
</panel>
|
|
||||||
<text name="import_progress_indicator">Importfortschritt</text>
|
|
||||||
<!--/panel-->
|
|
||||||
</floater>
|
|
||||||
@@ -1,147 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<floater
|
|
||||||
positioning="cascading"
|
|
||||||
can_close="true"
|
|
||||||
can_resize="true"
|
|
||||||
height="440"
|
|
||||||
help_topic="floater_merchant_outbox"
|
|
||||||
min_width="300"
|
|
||||||
min_height="200"
|
|
||||||
name="floater_merchant_outbox"
|
|
||||||
save_rect="true"
|
|
||||||
save_visibility="false"
|
|
||||||
rect_control="FloaterOutboxRect"
|
|
||||||
reuse_instance="true"
|
|
||||||
title="Merchant Outbox"
|
|
||||||
width="333">
|
|
||||||
<string name="OutboxFolderCount0">No folders</string>
|
|
||||||
<string name="OutboxFolderCount1">1 folder</string>
|
|
||||||
<string name="OutboxFolderCountN">[NUM] folders</string>
|
|
||||||
<string name="OutboxImporting">Sending folders...</string>
|
|
||||||
<string name="OutboxInitializing">Initializing...</string>
|
|
||||||
<!--panel
|
|
||||||
name="panel_1 this panel killed xui names, for some reason"
|
|
||||||
follows="all"
|
|
||||||
layout="topleft"
|
|
||||||
left="0"
|
|
||||||
top="0"
|
|
||||||
label=""
|
|
||||||
height="440"
|
|
||||||
width="333"-->
|
|
||||||
<panel
|
|
||||||
name="outbox_inventory_placeholder_panel"
|
|
||||||
mouse_opaque="false"
|
|
||||||
follows="all"
|
|
||||||
layout="topleft"
|
|
||||||
bottom="70"
|
|
||||||
left="10"
|
|
||||||
width="308"
|
|
||||||
height="352"
|
|
||||||
bg_opaque_color="InventoryBackgroundColor">
|
|
||||||
<text
|
|
||||||
name="outbox_inventory_placeholder_title"
|
|
||||||
type="string"
|
|
||||||
follows="top|left|right"
|
|
||||||
layout="topleft"
|
|
||||||
top="355"
|
|
||||||
left="0"
|
|
||||||
width="308"
|
|
||||||
height="25"
|
|
||||||
wrap="true"
|
|
||||||
halign="center"
|
|
||||||
font="SansSerifBold">
|
|
||||||
Loading...
|
|
||||||
</text>
|
|
||||||
<text_editor
|
|
||||||
name="outbox_inventory_placeholder_text"
|
|
||||||
type="string"
|
|
||||||
follows="top|left|right"
|
|
||||||
layout="topleft"
|
|
||||||
top="337"
|
|
||||||
left="0"
|
|
||||||
width="308"
|
|
||||||
bottom="130"
|
|
||||||
wrap="true"
|
|
||||||
enabled="false"
|
|
||||||
font="SansSerifSmall"
|
|
||||||
hide_scrollbar="true"
|
|
||||||
hide_border="true"
|
|
||||||
bg_readonly_color="0 0 0 0"
|
|
||||||
halign="left" />
|
|
||||||
</panel>
|
|
||||||
<inventory_panel
|
|
||||||
name="panel_outbox_inventory"
|
|
||||||
mouse_opaque="false"
|
|
||||||
filename="panel_outbox_inventory.xml"
|
|
||||||
follows="all"
|
|
||||||
layout="topleft"
|
|
||||||
bottom="70"
|
|
||||||
left="10"
|
|
||||||
width="308"
|
|
||||||
height="352"
|
|
||||||
bg_opaque_color="InventoryBackgroundColor"/>
|
|
||||||
<panel
|
|
||||||
name="panel_2"
|
|
||||||
mouse_opaque="false"
|
|
||||||
follows="bottom|left|right"
|
|
||||||
left="10"
|
|
||||||
bottom="5"
|
|
||||||
width="313"
|
|
||||||
top="70">
|
|
||||||
<panel
|
|
||||||
name="outbox_generic_drag_target"
|
|
||||||
mouse_opaque="false"
|
|
||||||
follows="left|right"
|
|
||||||
bottom="33"
|
|
||||||
left="0"
|
|
||||||
width="308"
|
|
||||||
height="25"
|
|
||||||
background_visible="false"
|
|
||||||
bg_alpha_color="0.950 0.412 0.173 0.35"
|
|
||||||
border="true"
|
|
||||||
bevel_style="in"
|
|
||||||
visible="true">
|
|
||||||
<text
|
|
||||||
name="text_1"
|
|
||||||
type="string"
|
|
||||||
follows="all"
|
|
||||||
layout="topleft"
|
|
||||||
height="20"
|
|
||||||
left="5"
|
|
||||||
width="293"
|
|
||||||
halign="center"
|
|
||||||
font="SansSerifMedium"
|
|
||||||
font_shadow="hard"
|
|
||||||
valign="top">
|
|
||||||
Drag items here to create folders
|
|
||||||
</text>
|
|
||||||
</panel>
|
|
||||||
<text
|
|
||||||
name="outbox_folder_count"
|
|
||||||
type="string"
|
|
||||||
follows="all"
|
|
||||||
layout="topleft"
|
|
||||||
bottom_delta="-27"
|
|
||||||
left="0"
|
|
||||||
width="150"
|
|
||||||
height="20"
|
|
||||||
wrap="true"
|
|
||||||
halign="left"
|
|
||||||
valign="center"
|
|
||||||
font="SansSerif"/>
|
|
||||||
<button
|
|
||||||
label="Send to Marketplace"
|
|
||||||
tool_tip="Push to my Marketplace Storefront"
|
|
||||||
name="outbox_import_btn"
|
|
||||||
follows="bottom|right"
|
|
||||||
tab_stop="false"
|
|
||||||
halign="center"
|
|
||||||
bottom_delta="-3"
|
|
||||||
left="160"
|
|
||||||
height="25"
|
|
||||||
width="150"
|
|
||||||
enabled="false" />
|
|
||||||
</panel>
|
|
||||||
<text name="import_progress_indicator" left="160" height="440" top="438" width="333" follows="all" visible="false">Import in progress</text>
|
|
||||||
<!--/panel-->
|
|
||||||
</floater>
|
|
||||||
@@ -80,7 +80,7 @@
|
|||||||
<check_box bottom_delta="-20" label="Make Outfit" name="make_outfit_btn" follows="left|right" control_name="ToolbarVisibleOutfit"/>
|
<check_box bottom_delta="-20" label="Make Outfit" name="make_outfit_btn" follows="left|right" control_name="ToolbarVisibleOutfit"/>
|
||||||
<check_box bottom_delta="-20" label="Outfits" name="outfits_btn" follows="left|right" control_name="ToolbarVisibleInventoryOutfits"/>
|
<check_box bottom_delta="-20" label="Outfits" name="outfits_btn" follows="left|right" control_name="ToolbarVisibleInventoryOutfits"/>
|
||||||
<check_box bottom_delta="-20" label="Favorites" name="favs_btn" follows="left|right" control_name="ToolbarVisibleInventoryFavs"/>
|
<check_box bottom_delta="-20" label="Favorites" name="favs_btn" follows="left|right" control_name="ToolbarVisibleInventoryFavs"/>
|
||||||
<check_box bottom_delta="-20" label="Outbox" name="outbox_btn" follows="left|right" control_name="ToolbarVisibleOutbox"/>
|
<check_box bottom_delta="-20" label="Marketplace Listings" name="marketplace_listings_btn" follows="left|right" control_name="ToolbarVisibleMarketplaceListings"/>
|
||||||
<check_box bottom_delta="-20" label="Preferences" name="preferences_btn" follows="left|right" control_name="ToolbarVisiblePreferences"/>
|
<check_box bottom_delta="-20" label="Preferences" name="preferences_btn" follows="left|right" control_name="ToolbarVisiblePreferences"/>
|
||||||
<check_box bottom="-38" label="Joystick Config" name="joystick_btn" follows="left|right" control_name="ToolbarVisibleJoystick" left_delta="160"/>
|
<check_box bottom="-38" label="Joystick Config" name="joystick_btn" follows="left|right" control_name="ToolbarVisibleJoystick" left_delta="160"/>
|
||||||
<check_box bottom_delta="-20" label="Autoreplace" name="auto_replace_btn" follows="left|right" control_name="ToolbarVisibleAutoReplace"/>
|
<check_box bottom_delta="-20" label="Autoreplace" name="auto_replace_btn" follows="left|right" control_name="ToolbarVisibleAutoReplace"/>
|
||||||
|
|||||||
@@ -392,21 +392,12 @@
|
|||||||
<on_click filter="" function="Inventory.DoToSelected" userdata="take_off" />
|
<on_click filter="" function="Inventory.DoToSelected" userdata="take_off" />
|
||||||
</menu_item_call>
|
</menu_item_call>
|
||||||
<menu_item_separator name="Marketplace Separator" />
|
<menu_item_separator name="Marketplace Separator" />
|
||||||
<menu_item_call bottom_delta="-18" height="18" label="Copy to Merchant Outbox" left="0" mouse_opaque="true"
|
|
||||||
name="Merchant Copy" width="128">
|
|
||||||
<on_click filter="" function="Inventory.DoToSelected" userdata="copy_to_outbox" />
|
|
||||||
</menu_item_call>
|
|
||||||
<menu_item_call label="Copy to Marketplace Listings" name="Marketplace Copy">
|
<menu_item_call label="Copy to Marketplace Listings" name="Marketplace Copy">
|
||||||
<on_click function="Inventory.DoToSelected" userdata="copy_to_marketplace_listings" />
|
<on_click function="Inventory.DoToSelected" userdata="copy_to_marketplace_listings" />
|
||||||
</menu_item_call>
|
</menu_item_call>
|
||||||
<menu_item_call label="Move to Marketplace Listings" name="Marketplace Move">
|
<menu_item_call label="Move to Marketplace Listings" name="Marketplace Move">
|
||||||
<on_click function="Inventory.DoToSelected" userdata="move_to_marketplace_listings" />
|
<on_click function="Inventory.DoToSelected" userdata="move_to_marketplace_listings" />
|
||||||
</menu_item_call>
|
</menu_item_call>
|
||||||
<!-- Singu TODO: Remove Marketplace Send when removing Outbox -->
|
|
||||||
<menu_item_call bottom_delta="-18" height="18" label="Send to Marketplace" left="0" mouse_opaque="true"
|
|
||||||
name="Marketplace Send" width="128">
|
|
||||||
<on_click filter="" function="Inventory.DoToSelected" userdata="send_to_marketplace" />
|
|
||||||
</menu_item_call>
|
|
||||||
<menu_item_call label="Share" name="Share">
|
<menu_item_call label="Share" name="Share">
|
||||||
<menu_item_call.on_click function="Inventory.Share"/>
|
<menu_item_call.on_click function="Inventory.Share"/>
|
||||||
</menu_item_call>
|
</menu_item_call>
|
||||||
|
|||||||
@@ -610,12 +610,6 @@
|
|||||||
name="MarketplaceListings">
|
name="MarketplaceListings">
|
||||||
<on_click function="ShowFloater" userdata="marketplace_listings" />
|
<on_click function="ShowFloater" userdata="marketplace_listings" />
|
||||||
<on_check function="FloaterVisible" userdata="marketplace_listings" />
|
<on_check function="FloaterVisible" userdata="marketplace_listings" />
|
||||||
</menu_item_check>
|
|
||||||
<menu_item_check
|
|
||||||
label="Merchant Outbox..."
|
|
||||||
name="MerchantOutbox">
|
|
||||||
<on_click function="ShowFloater" userdata="outbox" />
|
|
||||||
<on_check function="FloaterVisible" userdata="outbox" />
|
|
||||||
</menu_item_check>
|
</menu_item_check>
|
||||||
<menu_item_call bottom="-286" enabled="true" height="19" label="Buy [CURRENCY]..." left="0"
|
<menu_item_call bottom="-286" enabled="true" height="19" label="Buy [CURRENCY]..." left="0"
|
||||||
mouse_opaque="true" name="Buy and Sell L$..." width="166">
|
mouse_opaque="true" name="Buy and Sell L$..." width="166">
|
||||||
|
|||||||
@@ -407,11 +407,6 @@
|
|||||||
<button.commit_callback function="ShowFloater" parameter="floater_inventory_favs.xml"/>
|
<button.commit_callback function="ShowFloater" parameter="floater_inventory_favs.xml"/>
|
||||||
</button>
|
</button>
|
||||||
</layout_panel>
|
</layout_panel>
|
||||||
<layout_panel name="paneloutbox" height="24" width="50" user_resize="false" visibility_control="ToolbarVisibleOutbox">
|
|
||||||
<button bottom="0" height="24" label="Outbox" image_overlay="icn_toolbar_outbox.tga" image_overlay_alignment="left" image_selected="toolbar_btn_selected.tga" image_unselected="toolbar_btn_enabled.tga" image_disabled="toolbar_btn_disabled.tga" scale_image="true" name="outbox_btn" width="50" follows="left|right">
|
|
||||||
<button.commit_callback function="ShowFloater" parameter="outbox"/>
|
|
||||||
</button>
|
|
||||||
</layout_panel>
|
|
||||||
<layout_panel name="panelmarketplacelistings" height="24" width="50" user_resize="false" visibility_control="ToolbarVisibleMarketplaceListings">
|
<layout_panel name="panelmarketplacelistings" height="24" width="50" user_resize="false" visibility_control="ToolbarVisibleMarketplaceListings">
|
||||||
<button bottom="0" height="24" label="Market Listings" image_overlay="icn_toolbar_marketplace_listings.tga" image_overlay_alignment="left" image_selected="toolbar_btn_selected.tga" image_unselected="toolbar_btn_enabled.tga" image_disabled="toolbar_btn_disabled.tga" scale_image="true" name="marketplace_listings_btn" width="50" follows="left|right">
|
<button bottom="0" height="24" label="Market Listings" image_overlay="icn_toolbar_marketplace_listings.tga" image_overlay_alignment="left" image_selected="toolbar_btn_selected.tga" image_unselected="toolbar_btn_enabled.tga" image_disabled="toolbar_btn_disabled.tga" scale_image="true" name="marketplace_listings_btn" width="50" follows="left|right">
|
||||||
<button.commit_callback function="ShowFloater" parameter="marketplace_listings"/>
|
<button.commit_callback function="ShowFloater" parameter="marketplace_listings"/>
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<floater name="floater_merchant_outbox" title="Buzón de Salida de Comerciante">
|
|
||||||
<string name="OutboxFolderCount0">Sin Carpetas</string>
|
|
||||||
<string name="OutboxFolderCount1">1 Carpeta</string>
|
|
||||||
<string name="OutboxFolderCountN">[NUM] Carpetas</string>
|
|
||||||
<string name="OutboxImporting">Enviando Carpetas...</string>
|
|
||||||
<string name="OutboxInitializing">Inicializando...</string>
|
|
||||||
<!--panel
|
|
||||||
name="panel_1 this panel killed xui names, for some reason"
|
|
||||||
follows="all"
|
|
||||||
layout="topleft"
|
|
||||||
left="0"
|
|
||||||
top="0"
|
|
||||||
label=""
|
|
||||||
height="440"
|
|
||||||
width="333"-->
|
|
||||||
<panel name="outbox_inventory_placeholder_panel">
|
|
||||||
<text name="outbox_inventory_placeholder_title">
|
|
||||||
Cargando...
|
|
||||||
</text>
|
|
||||||
</panel>
|
|
||||||
<panel name="panel_2">
|
|
||||||
<panel name="outbox_generic_drag_target">
|
|
||||||
<text name="text_1">
|
|
||||||
Arrastra los Ítems aquí para crear las carpetas
|
|
||||||
</text>
|
|
||||||
</panel>
|
|
||||||
<button label="Enviar al Mercado" tool_tip="Poner en el escaparate de mi Tienda en el Mercado" name="outbox_import_btn"/>
|
|
||||||
</panel>
|
|
||||||
<text name="import_progress_indicator" left="180">
|
|
||||||
Importación en progreso
|
|
||||||
</text>
|
|
||||||
<!--/panel-->
|
|
||||||
</floater>
|
|
||||||
Reference in New Issue
Block a user