summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelmarketplaceoutboxinventory.cpp
diff options
context:
space:
mode:
authorOz Linden <oz@lindenlab.com>2011-09-12 14:52:18 -0400
committerOz Linden <oz@lindenlab.com>2011-09-12 14:52:18 -0400
commite26bd6c140c24d72b44966127825fef5bbe47c1d (patch)
treec70214a7a7e898b528f6b0f3ec6d47992969fe97 /indra/newview/llpanelmarketplaceoutboxinventory.cpp
parent08b75949998adbe3bbb4ef1d1d7e49405e468c94 (diff)
parent1c57963673193d5a3da638848c0540a5fbc91603 (diff)
merge changes for storm-1593 (marketplace inbox)
Diffstat (limited to 'indra/newview/llpanelmarketplaceoutboxinventory.cpp')
-rw-r--r--indra/newview/llpanelmarketplaceoutboxinventory.cpp271
1 files changed, 271 insertions, 0 deletions
diff --git a/indra/newview/llpanelmarketplaceoutboxinventory.cpp b/indra/newview/llpanelmarketplaceoutboxinventory.cpp
new file mode 100644
index 0000000000..ed1206aec8
--- /dev/null
+++ b/indra/newview/llpanelmarketplaceoutboxinventory.cpp
@@ -0,0 +1,271 @@
+/**
+ * @file llpanelmarketplaceoutboxinventory.cpp
+ * @brief LLOutboxInventoryPanel class definition
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelmarketplaceoutboxinventory.h"
+
+#include "llfolderview.h"
+#include "llfoldervieweventlistener.h"
+#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llpanellandmarks.h"
+#include "llplacesinventorybridge.h"
+#include "lltrans.h"
+#include "llviewerfoldertype.h"
+
+
+//
+// statics
+//
+
+static LLDefaultChildRegistry::Register<LLOutboxInventoryPanel> r1("outbox_inventory_panel");
+static LLDefaultChildRegistry::Register<LLOutboxFolderViewFolder> r2("outbox_folder_view_folder");
+
+
+//
+// Marketplace errors
+//
+
+enum
+{
+ MKTERR_NONE = 0,
+
+ MKTERR_NOT_MERCHANT,
+ MKTERR_FOLDER_EMPTY,
+ MKTERR_UNASSOCIATED_PRODUCTS,
+ MKTERR_OBJECT_LIMIT,
+ MKTERR_FOLDER_DEPTH,
+ MKTERR_UNSELLABLE_ITEM,
+ MKTERR_INTERNAL_IMPORT,
+
+ MKTERR_COUNT
+};
+
+static const std::string MARKETPLACE_ERROR_STRINGS[MKTERR_COUNT] =
+{
+ "NO_ERROR",
+ "NOT_MERCHANT_ERROR",
+ "FOLDER_EMPTY_ERROR",
+ "UNASSOCIATED_PRODUCTS_ERROR",
+ "OBJECT_LIMIT_ERROR",
+ "FOLDER_DEPTH_ERROR",
+ "UNSELLABLE_ITEM_FOUND",
+ "INTERNAL_IMPORT_ERROR",
+};
+
+static const std::string MARKETPLACE_ERROR_NAMES[MKTERR_COUNT] =
+{
+ "Marketplace Error None",
+ "Marketplace Error Not Merchant",
+ "Marketplace Error Empty Folder",
+ "Marketplace Error Unassociated Products",
+ "Marketplace Error Object Limit",
+ "Marketplace Error Folder Depth",
+ "Marketplace Error Unsellable Item",
+ "Marketplace Error Internal Import",
+};
+
+
+//
+// LLOutboxInventoryPanel Implementation
+//
+
+LLOutboxInventoryPanel::LLOutboxInventoryPanel(const LLOutboxInventoryPanel::Params& p)
+ : LLInventoryPanel(p)
+{
+}
+
+LLOutboxInventoryPanel::~LLOutboxInventoryPanel()
+{
+}
+
+// virtual
+void LLOutboxInventoryPanel::buildFolderView(const LLInventoryPanel::Params& params)
+{
+ // Determine the root folder in case specified, and
+ // build the views starting with that folder.
+
+ LLUUID root_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false);
+
+ // leslie -- temporary HACK to work around sim not creating outbox with proper system folder type
+ if (root_id.isNull())
+ {
+ std::string start_folder_name(params.start_folder());
+
+ LLInventoryModel::cat_array_t* cats;
+ LLInventoryModel::item_array_t* items;
+
+ gInventory.getDirectDescendentsOf(gInventory.getRootFolderID(), cats, items);
+
+ if (cats)
+ {
+ for (LLInventoryModel::cat_array_t::const_iterator cat_it = cats->begin(); cat_it != cats->end(); ++cat_it)
+ {
+ LLInventoryCategory* cat = *cat_it;
+
+ if (cat->getName() == start_folder_name)
+ {
+ root_id = cat->getUUID();
+ break;
+ }
+ }
+ }
+
+ if (root_id == LLUUID::null)
+ {
+ llwarns << "No category found that matches outbox inventory panel start_folder: " << start_folder_name << llendl;
+ }
+ }
+ // leslie -- end temporary HACK
+
+ if (root_id == LLUUID::null)
+ {
+ llwarns << "Outbox inventory panel has no root folder!" << llendl;
+ root_id = LLUUID::generateNewID();
+ }
+
+ LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(LLAssetType::AT_CATEGORY,
+ LLAssetType::AT_CATEGORY,
+ LLInventoryType::IT_CATEGORY,
+ this,
+ NULL,
+ root_id);
+
+ mFolderRoot = createFolderView(new_listener, params.use_label_suffix());
+}
+
+LLFolderViewFolder * LLOutboxInventoryPanel::createFolderViewFolder(LLInvFVBridge * bridge)
+{
+ LLOutboxFolderViewFolder::Params params;
+
+ params.name = bridge->getDisplayName();
+ params.icon = bridge->getIcon();
+ params.icon_open = bridge->getOpenIcon();
+
+ if (mShowItemLinkOverlays) // if false, then links show up just like normal items
+ {
+ params.icon_overlay = LLUI::getUIImage("Inv_Link");
+ }
+
+ params.root = mFolderRoot;
+ params.listener = bridge;
+ params.tool_tip = params.name;
+
+ return LLUICtrlFactory::create<LLOutboxFolderViewFolder>(params);
+}
+
+LLFolderViewItem * LLOutboxInventoryPanel::createFolderViewItem(LLInvFVBridge * bridge)
+{
+ LLFolderViewItem::Params params;
+
+ params.name = bridge->getDisplayName();
+ params.icon = bridge->getIcon();
+ params.icon_open = bridge->getOpenIcon();
+
+ if (mShowItemLinkOverlays) // if false, then links show up just like normal items
+ {
+ params.icon_overlay = LLUI::getUIImage("Inv_Link");
+ }
+
+ params.creation_date = bridge->getCreationDate();
+ params.root = mFolderRoot;
+ params.listener = bridge;
+ params.rect = LLRect (0, 0, 0, 0);
+ params.tool_tip = params.name;
+
+ return LLUICtrlFactory::create<LLOutboxFolderViewItem>(params);
+}
+
+//
+// LLOutboxFolderViewFolder Implementation
+//
+
+LLOutboxFolderViewFolder::LLOutboxFolderViewFolder(const Params& p)
+ : LLFolderViewFolder(p)
+ , LLBadgeOwner(getHandle())
+ , mError(0)
+{
+ initBadgeParams(p.error_badge());
+}
+
+LLOutboxFolderViewFolder::~LLOutboxFolderViewFolder()
+{
+}
+
+// virtual
+void LLOutboxFolderViewFolder::draw()
+{
+ if (!badgeHasParent())
+ {
+ addBadgeToParentPanel();
+ }
+
+ setBadgeVisibility(hasError());
+
+ LLFolderViewFolder::draw();
+}
+
+void LLOutboxFolderViewFolder::setErrorString(const std::string& errorString)
+{
+ S32 error_code = MKTERR_NONE;
+
+ for (S32 i = 1; i < MKTERR_COUNT; ++i)
+ {
+ if (MARKETPLACE_ERROR_STRINGS[i] == errorString)
+ {
+ error_code = i;
+ break;
+ }
+ }
+
+ setError(error_code);
+}
+
+void LLOutboxFolderViewFolder::setError(S32 errorCode)
+{
+ mError = errorCode;
+
+ if (hasError())
+ {
+ setToolTip(LLTrans::getString(MARKETPLACE_ERROR_NAMES[mError]));
+ }
+ else
+ {
+ setToolTip(LLStringExplicit(""));
+ }
+}
+
+//
+// LLOutboxFolderViewItem Implementation
+//
+
+BOOL LLOutboxFolderViewItem::handleDoubleClick(S32 x, S32 y, MASK mask)
+{
+ return TRUE;
+}
+
+// eof