summaryrefslogtreecommitdiff
path: root/indra/newview/llinventorypanel.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llinventorypanel.h')
-rw-r--r--indra/newview/llinventorypanel.h978
1 files changed, 489 insertions, 489 deletions
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index bc85644068..6dead2cf6d 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -1,489 +1,489 @@
-/**
- * @file llinventorypanel.h
- * @brief LLInventoryPanel
- * class definition
- *
- * $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$
- */
-
-#ifndef LL_LLINVENTORYPANEL_H
-#define LL_LLINVENTORYPANEL_H
-
-#include "llassetstorage.h"
-#include "llfolderviewitem.h"
-#include "llfolderviewmodelinventory.h"
-#include "llfloater.h"
-#include "llinventory.h"
-#include "llinventoryfilter.h"
-#include "llinventorymodel.h"
-#include "llscrollcontainer.h"
-#include "lluictrlfactory.h"
-#include <set>
-
-class LLInvFVBridge;
-class LLInventoryFolderViewModelBuilder;
-class LLInvPanelComplObserver;
-class LLFolderViewModelInventory;
-class LLFolderViewGroupedItemBridge;
-
-namespace LLInitParam
-{
- template<>
- struct TypeValues<LLFolderType::EType> : public TypeValuesHelper<LLFolderType::EType>
- {
- static void declareValues();
- };
-}
-
-class LLInventoryPanel : public LLPanel
-{
- //--------------------------------------------------------------------
- // Data
- //--------------------------------------------------------------------
-public:
- struct Filter : public LLInitParam::Block<Filter>
- {
- Optional<U32> sort_order;
- Optional<U32> types;
- Optional<std::string> search_string;
-
- Filter()
- : sort_order("sort_order"),
- types("types", 0xffffffff),
- search_string("search_string")
- {}
- };
-
- struct StartFolder : public LLInitParam::ChoiceBlock<StartFolder>
- {
- Alternative<std::string> name;
- Alternative<LLUUID> id;
- Alternative<LLFolderType::EType> type;
-
- StartFolder()
- : name("name"),
- id("id"),
- type("type")
- {}
- };
-
- struct Params
- : public LLInitParam::Block<Params, LLPanel::Params>
- {
- Optional<std::string> sort_order_setting;
- Optional<LLInventoryModel*> inventory;
- Optional<bool> allow_multi_select;
- Optional<bool> allow_drag;
- Optional<bool> show_item_link_overlays;
- Optional<Filter> filter;
- Optional<StartFolder> start_folder;
- Optional<bool> use_label_suffix;
- Optional<bool> show_empty_message;
- Optional<bool> suppress_folder_menu;
- Optional<bool> show_root_folder;
- Optional<bool> allow_drop_on_root;
- Optional<bool> use_marketplace_folders;
- Optional<LLScrollContainer::Params> scroll;
- Optional<bool> accepts_drag_and_drop;
- Optional<LLFolderView::Params> folder_view;
- Optional<LLFolderViewFolder::Params> folder;
- Optional<LLFolderViewItem::Params> item;
- Optional<bool> open_first_folder;
-
- // All item and folder views will be initialized on init if true (default)
- // Will initialize on visibility change otherwise.
- Optional<bool> preinitialize_views;
-
- Params()
- : sort_order_setting("sort_order_setting"),
- inventory("", &gInventory),
- allow_multi_select("allow_multi_select", true),
- allow_drag("allow_drag", true),
- show_item_link_overlays("show_item_link_overlays", false),
- suppress_folder_menu("suppress_folder_menu", false),
- filter("filter"),
- start_folder("start_folder"),
- use_label_suffix("use_label_suffix", true),
- show_empty_message("show_empty_message", true),
- show_root_folder("show_root_folder", false),
- allow_drop_on_root("allow_drop_on_root", true),
- use_marketplace_folders("use_marketplace_folders", false),
- open_first_folder("open_first_folder", true),
- scroll("scroll"),
- accepts_drag_and_drop("accepts_drag_and_drop"),
- folder_view("folder_view"),
- folder("folder"),
- item("item"),
- preinitialize_views("preinitialize_views", true)
- {}
- };
-
- struct InventoryState : public LLInitParam::Block<InventoryState>
- {
- Mandatory<LLInventoryFilter::Params> filter;
- Mandatory<LLInventorySort::Params> sort;
- };
-
- //--------------------------------------------------------------------
- // Initialization
- //--------------------------------------------------------------------
-protected:
- LLInventoryPanel(const Params&);
- void initFromParams(const Params&);
-
- friend class LLUICtrlFactory;
-public:
- virtual ~LLInventoryPanel();
-
-public:
- typedef std::set<LLFolderViewItem*> selected_items_t;
-
- LLInventoryModel* getModel() { return mInventory; }
- LLFolderViewModelInventory& getRootViewModel() { return mInventoryViewModel; }
-
- // LLView methods
- /*virtual*/ void onVisibilityChange(bool new_visibility) override;
- void draw() override;
- /*virtual*/ bool handleKeyHere( KEY key, MASK mask ) override;
- bool handleHover(S32 x, S32 y, MASK mask) override;
- /*virtual*/ bool handleDragAndDrop(S32 x, S32 y, MASK mask, bool drop,
- EDragAndDropType cargo_type,
- void* cargo_data,
- EAcceptance* accept,
- std::string& tooltip_msg) override;
- bool handleToolTip(S32 x, S32 y, MASK mask) override;
- // LLUICtrl methods
- /*virtual*/ void onFocusLost() override;
- /*virtual*/ void onFocusReceived() override;
- void onFolderOpening(const LLUUID &id);
-
- // LLBadgeHolder methods
- bool addBadge(LLBadge * badge) override;
-
- // Call this method to set the selection.
- void openAllFolders();
- void setSelection(const LLUUID& obj_id, bool take_keyboard_focus);
- void setSelectCallback(const boost::function<void (const std::deque<LLFolderViewItem*>& items, bool user_action)>& cb);
- void clearSelection();
- selected_items_t getSelectedItems() const;
-
- bool isSelectionRemovable();
- LLInventoryFilter& getFilter();
- const LLInventoryFilter& getFilter() const;
- void setFilterTypes(U64 filter, LLInventoryFilter::EFilterType = LLInventoryFilter::FILTERTYPE_OBJECT);
- void setFilterWorn();
- U32 getFilterObjectTypes() const;
- void setFilterPermMask(PermissionMask filter_perm_mask);
- U32 getFilterPermMask() const;
- void setFilterWearableTypes(U64 filter);
- void setFilterSettingsTypes(U64 filter);
- void setFilterSubString(const std::string& string);
- const std::string getFilterSubString();
- void setSinceLogoff(bool sl);
- void setHoursAgo(U32 hours);
- void setDateSearchDirection(U32 direction);
- bool getSinceLogoff();
- void setFilterLinks(U64 filter_links);
- void setSearchType(LLInventoryFilter::ESearchType type);
- LLInventoryFilter::ESearchType getSearchType();
-
- void setShowFolderState(LLInventoryFilter::EFolderShow show);
- LLInventoryFilter::EFolderShow getShowFolderState();
- // This method is called when something has changed about the inventory.
- void modelChanged(U32 mask);
- LLFolderView* getRootFolder() { return mFolderRoot.get(); }
- LLUUID getRootFolderID();
- LLScrollContainer* getScrollableContainer() { return mScroller; }
- bool getAllowDropOnRoot() { return mParams.allow_drop_on_root; }
- bool areViewsInitialized() { return mViewsInitialized == VIEWS_INITIALIZED && mFolderRoot.get() && !mFolderRoot.get()->needsArrange(); }
-
- void onSelectionChange(const std::deque<LLFolderViewItem*> &items, bool user_action);
-
- LLHandle<LLInventoryPanel> getInventoryPanelHandle() const { return getDerivedHandle<LLInventoryPanel>(); }
-
- // Callbacks
- void doToSelected(const LLSD& userdata);
- void doCreate(const LLSD& userdata);
- bool beginIMSession();
- void fileUploadLocation(const LLSD& userdata);
- void openSingleViewInventory(LLUUID folder_id = LLUUID());
- void purgeSelectedItems();
- bool attachObject(const LLSD& userdata);
- static void idle(void* user_data);
-
- void updateFolderLabel(const LLUUID& folder_id);
-
- // DEBUG ONLY:
- static void dumpSelectionInformation(void* user_data);
-
- void openSelected();
- void unSelectAll();
-
- static void onIdle(void* user_data);
-
- // Find whichever inventory panel is active / on top.
- // "Auto_open" determines if we open an inventory panel if none are open.
- static LLInventoryPanel *getActiveInventoryPanel(bool auto_open = true);
-
- static void openInventoryPanelAndSetSelection(bool auto_open,
- const LLUUID& obj_id,
- bool use_main_panel = false,
- bool take_keyboard_focus = true,
- bool reset_filter = false);
- static void setSFViewAndOpenFolder(const LLInventoryPanel* panel, const LLUUID& folder_id);
- void addItemID(const LLUUID& id, LLFolderViewItem* itemp);
- void removeItemID(const LLUUID& id);
- LLFolderViewItem* getItemByID(const LLUUID& id);
- LLFolderViewFolder* getFolderByID(const LLUUID& id);
- void setSelectionByID(const LLUUID& obj_id, bool take_keyboard_focus);
- void updateSelection();
-
- void setSuppressOpenItemAction(bool supress_open_item) { mSuppressOpenItemAction = supress_open_item; }
-
- LLFolderViewModelInventory* getFolderViewModel() { return &mInventoryViewModel; }
- const LLFolderViewModelInventory* getFolderViewModel() const { return &mInventoryViewModel; }
-
- // Clean up stuff when the folder root gets deleted
- void clearFolderRoot();
-
- static void callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response, const std::vector<LLUUID> inventory_selected);
-
- void changeFolderRoot(const LLUUID& new_id) {};
- void initFolderRoot();
- void initializeViewBuilding();
-
-protected:
- void openStartFolderOrMyInventory(); // open the first level of inventory
- void onItemsCompletion(); // called when selected items are complete
-
- LLUUID mSelectThisID;
- LLInventoryModel* mInventory;
- LLInventoryObserver* mInventoryObserver;
- LLInvPanelComplObserver* mCompletionObserver;
- bool mFocusSelection;
- bool mAcceptsDragAndDrop;
- bool mAllowMultiSelect;
- bool mAllowDrag;
- bool mShowItemLinkOverlays; // Shows link graphic over inventory item icons
- bool mShowEmptyMessage;
- bool mSuppressFolderMenu;
- bool mSuppressOpenItemAction;
-
- LLHandle<LLFolderView> mFolderRoot;
- LLScrollContainer* mScroller;
-
- LLUUID mPreviousSelectedFolder;
-
- LLFolderViewModelInventory mInventoryViewModel;
- LLPointer<LLFolderViewGroupedItemBridge> mGroupedItemBridge;
- Params mParams; // stored copy of parameter block
-
- std::map<LLUUID, LLFolderViewItem*> mItemMap;
- /**
- * Pointer to LLInventoryFolderViewModelBuilder.
- *
- * It is set in LLInventoryPanel's constructor and can be overridden in derived classes with
- * another implementation.
- * Take into account it will not be deleted by LLInventoryPanel itself.
- */
- const LLInventoryFolderViewModelBuilder* mInvFVBridgeBuilder;
-
- bool mBuildChildrenViews; // build root and children
- bool mRootInited;
-
-
- //--------------------------------------------------------------------
- // Sorting
- //--------------------------------------------------------------------
-public:
- static const std::string DEFAULT_SORT_ORDER;
- static const std::string RECENTITEMS_SORT_ORDER;
- static const std::string INHERIT_SORT_ORDER;
-
- void setSortOrder(U32 order);
- U32 getSortOrder() const;
-
-private:
- std::string mSortOrderSetting;
- int mClipboardState;
-
- //--------------------------------------------------------------------
- // Hidden folders
- //--------------------------------------------------------------------
-public:
- void addHideFolderType(LLFolderType::EType folder_type);
-protected:
- // Builds the UI. Call this once the inventory is usable.
- void initializeViews(F64 max_time);
-
- // Specific inventory colors
- static bool sColorSetInitialized;
- static LLUIColor sDefaultColor;
- static LLUIColor sDefaultHighlightColor;
- static LLUIColor sLibraryColor;
- static LLUIColor sLinkColor;
-
- enum EBuildModes
- {
- BUILD_NO_LIMIT,
- BUILD_TIMELIMIT, // requires mBuildViewsEndTime
- BUILD_ONE_FOLDER,
- BUILD_NO_CHILDREN,
- };
-
- // All buildNewViews() use BUILD_TIMELIMIT by default
- // and expect time limit mBuildViewsEndTime to be set
- LLFolderViewItem* buildNewViews(const LLUUID& id);
- LLFolderViewItem* buildNewViews(const LLUUID& id,
- LLInventoryObject const* objectp);
- LLFolderViewItem* buildNewViews(const LLUUID& id,
- LLInventoryObject const* objectp,
- LLFolderViewItem *target_view,
- const EBuildModes &mode = BUILD_TIMELIMIT);
-
- // if certain types are not allowed, no reason to create views
- virtual bool typedViewsFilter(const LLUUID& id, LLInventoryObject const* objectp) { return true; }
-
- virtual void itemChanged(const LLUUID& item_id, U32 mask, const LLInventoryObject* model_item);
- bool getIsHiddenFolderType(LLFolderType::EType folder_type) const;
-
- virtual LLFolderView * createFolderRoot(LLUUID root_id );
- virtual LLFolderViewFolder* createFolderViewFolder(LLInvFVBridge * bridge, bool allow_drop);
- virtual LLFolderViewItem* createFolderViewItem(LLInvFVBridge * bridge);
-
- boost::function<void(const std::deque<LLFolderViewItem*>& items, bool user_action)> mSelectionCallback;
-private:
- // buildViewsTree does not include some checks and is meant
- // for recursive use, use buildNewViews() for first call
- LLFolderViewItem* buildViewsTree(const LLUUID& id,
- const LLUUID& parent_id,
- LLInventoryObject const* objectp,
- LLFolderViewItem *target_view,
- LLFolderViewFolder *parent_folder_view,
- const EBuildModes &mode,
- S32 depth = -1);
-
- typedef enum e_views_initialization_state
- {
- VIEWS_UNINITIALIZED = 0,
- VIEWS_INITIALIZING,
- VIEWS_BUILDING, // Root folder exists
- VIEWS_INITIALIZED,
- } EViewsInitializationState;
-
- bool mBuildViewsOnInit;
- EViewsInitializationState mViewsInitialized; // Whether views have been generated
- F64 mBuildViewsEndTime; // Stop building views past this timestamp
- std::deque<LLUUID> mBuildViewsQueue;
-};
-
-
-class LLInventorySingleFolderPanel : public LLInventoryPanel
-{
-public:
- struct Params : public LLInitParam::Block<Params, LLInventoryPanel::Params>
- {};
-
- void initFromParams(const Params& p);
- void onFocusReceived() override;
-
- bool isSelectionRemovable() { return false; }
-
- void initFolderRoot(const LLUUID& start_folder_id = LLUUID::null);
-
- void changeFolderRoot(const LLUUID& new_id);
- void onForwardFolder();
- void onBackwardFolder();
- void clearNavigationHistory();
- LLUUID getSingleFolderRoot() { return mFolderID; }
-
- void doCreate(const LLSD& userdata);
- void doToSelected(const LLSD& userdata);
- void doShare();
-
- bool isBackwardAvailable();
- bool isForwardAvailable();
-
- bool hasVisibleItems();
-
- void setNavBackwardList(std::list<LLUUID> backward_list) { mBackwardFolders = backward_list; }
- void setNavForwardList(std::list<LLUUID> forward_list) { mForwardFolders = forward_list; }
- std::list<LLUUID> getNavBackwardList() { return mBackwardFolders; }
- std::list<LLUUID> getNavForwardList() { return mForwardFolders; }
-
- typedef boost::function<void()> root_changed_callback_t;
- boost::signals2::connection setRootChangedCallback(root_changed_callback_t cb);
-
-protected:
- LLInventorySingleFolderPanel(const Params& params);
- ~LLInventorySingleFolderPanel();
- void updateSingleFolderRoot();
-
- friend class LLUICtrlFactory;
-
- LLUUID mFolderID;
- std::list<LLUUID> mBackwardFolders;
- std::list<LLUUID> mForwardFolders;
-
- boost::signals2::signal<void()> mRootChangedSignal;
-};
-
-/************************************************************************/
-/* Asset Pre-Filtered Inventory Panel related class */
-/* Exchanges filter's flexibility for speed of generation and */
-/* improved performance */
-/************************************************************************/
-
-class LLAssetFilteredInventoryPanel : public LLInventoryPanel
-{
-public:
- struct Params
- : public LLInitParam::Block<Params, LLInventoryPanel::Params>
- {
- Mandatory<std::string> filter_asset_types;
-
- Params() : filter_asset_types("filter_asset_types") {}
- };
-
- void initFromParams(const Params& p);
-protected:
- LLAssetFilteredInventoryPanel(const Params& p);
- friend class LLUICtrlFactory;
-public:
- ~LLAssetFilteredInventoryPanel() {}
-
- /*virtual*/ bool handleDragAndDrop(S32 x, S32 y, MASK mask, bool drop,
- EDragAndDropType cargo_type,
- void* cargo_data,
- EAcceptance* accept,
- std::string& tooltip_msg) override;
-
-protected:
- /*virtual*/ bool typedViewsFilter(const LLUUID& id, LLInventoryObject const* objectp) override;
- /*virtual*/ void itemChanged(const LLUUID& item_id, U32 mask, const LLInventoryObject* model_item) override;
-
-private:
- bool mAssetTypes[LLAssetType::AT_COUNT];
- bool mDragTypes[EDragAndDropType::DAD_COUNT];
-};
-
-#endif // LL_LLINVENTORYPANEL_H
+/**
+ * @file llinventorypanel.h
+ * @brief LLInventoryPanel
+ * class definition
+ *
+ * $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$
+ */
+
+#ifndef LL_LLINVENTORYPANEL_H
+#define LL_LLINVENTORYPANEL_H
+
+#include "llassetstorage.h"
+#include "llfolderviewitem.h"
+#include "llfolderviewmodelinventory.h"
+#include "llfloater.h"
+#include "llinventory.h"
+#include "llinventoryfilter.h"
+#include "llinventorymodel.h"
+#include "llscrollcontainer.h"
+#include "lluictrlfactory.h"
+#include <set>
+
+class LLInvFVBridge;
+class LLInventoryFolderViewModelBuilder;
+class LLInvPanelComplObserver;
+class LLFolderViewModelInventory;
+class LLFolderViewGroupedItemBridge;
+
+namespace LLInitParam
+{
+ template<>
+ struct TypeValues<LLFolderType::EType> : public TypeValuesHelper<LLFolderType::EType>
+ {
+ static void declareValues();
+ };
+}
+
+class LLInventoryPanel : public LLPanel
+{
+ //--------------------------------------------------------------------
+ // Data
+ //--------------------------------------------------------------------
+public:
+ struct Filter : public LLInitParam::Block<Filter>
+ {
+ Optional<U32> sort_order;
+ Optional<U32> types;
+ Optional<std::string> search_string;
+
+ Filter()
+ : sort_order("sort_order"),
+ types("types", 0xffffffff),
+ search_string("search_string")
+ {}
+ };
+
+ struct StartFolder : public LLInitParam::ChoiceBlock<StartFolder>
+ {
+ Alternative<std::string> name;
+ Alternative<LLUUID> id;
+ Alternative<LLFolderType::EType> type;
+
+ StartFolder()
+ : name("name"),
+ id("id"),
+ type("type")
+ {}
+ };
+
+ struct Params
+ : public LLInitParam::Block<Params, LLPanel::Params>
+ {
+ Optional<std::string> sort_order_setting;
+ Optional<LLInventoryModel*> inventory;
+ Optional<bool> allow_multi_select;
+ Optional<bool> allow_drag;
+ Optional<bool> show_item_link_overlays;
+ Optional<Filter> filter;
+ Optional<StartFolder> start_folder;
+ Optional<bool> use_label_suffix;
+ Optional<bool> show_empty_message;
+ Optional<bool> suppress_folder_menu;
+ Optional<bool> show_root_folder;
+ Optional<bool> allow_drop_on_root;
+ Optional<bool> use_marketplace_folders;
+ Optional<LLScrollContainer::Params> scroll;
+ Optional<bool> accepts_drag_and_drop;
+ Optional<LLFolderView::Params> folder_view;
+ Optional<LLFolderViewFolder::Params> folder;
+ Optional<LLFolderViewItem::Params> item;
+ Optional<bool> open_first_folder;
+
+ // All item and folder views will be initialized on init if true (default)
+ // Will initialize on visibility change otherwise.
+ Optional<bool> preinitialize_views;
+
+ Params()
+ : sort_order_setting("sort_order_setting"),
+ inventory("", &gInventory),
+ allow_multi_select("allow_multi_select", true),
+ allow_drag("allow_drag", true),
+ show_item_link_overlays("show_item_link_overlays", false),
+ suppress_folder_menu("suppress_folder_menu", false),
+ filter("filter"),
+ start_folder("start_folder"),
+ use_label_suffix("use_label_suffix", true),
+ show_empty_message("show_empty_message", true),
+ show_root_folder("show_root_folder", false),
+ allow_drop_on_root("allow_drop_on_root", true),
+ use_marketplace_folders("use_marketplace_folders", false),
+ open_first_folder("open_first_folder", true),
+ scroll("scroll"),
+ accepts_drag_and_drop("accepts_drag_and_drop"),
+ folder_view("folder_view"),
+ folder("folder"),
+ item("item"),
+ preinitialize_views("preinitialize_views", true)
+ {}
+ };
+
+ struct InventoryState : public LLInitParam::Block<InventoryState>
+ {
+ Mandatory<LLInventoryFilter::Params> filter;
+ Mandatory<LLInventorySort::Params> sort;
+ };
+
+ //--------------------------------------------------------------------
+ // Initialization
+ //--------------------------------------------------------------------
+protected:
+ LLInventoryPanel(const Params&);
+ void initFromParams(const Params&);
+
+ friend class LLUICtrlFactory;
+public:
+ virtual ~LLInventoryPanel();
+
+public:
+ typedef std::set<LLFolderViewItem*> selected_items_t;
+
+ LLInventoryModel* getModel() { return mInventory; }
+ LLFolderViewModelInventory& getRootViewModel() { return mInventoryViewModel; }
+
+ // LLView methods
+ /*virtual*/ void onVisibilityChange(bool new_visibility) override;
+ void draw() override;
+ /*virtual*/ bool handleKeyHere( KEY key, MASK mask ) override;
+ bool handleHover(S32 x, S32 y, MASK mask) override;
+ /*virtual*/ bool handleDragAndDrop(S32 x, S32 y, MASK mask, bool drop,
+ EDragAndDropType cargo_type,
+ void* cargo_data,
+ EAcceptance* accept,
+ std::string& tooltip_msg) override;
+ bool handleToolTip(S32 x, S32 y, MASK mask) override;
+ // LLUICtrl methods
+ /*virtual*/ void onFocusLost() override;
+ /*virtual*/ void onFocusReceived() override;
+ void onFolderOpening(const LLUUID &id);
+
+ // LLBadgeHolder methods
+ bool addBadge(LLBadge * badge) override;
+
+ // Call this method to set the selection.
+ void openAllFolders();
+ void setSelection(const LLUUID& obj_id, bool take_keyboard_focus);
+ void setSelectCallback(const boost::function<void (const std::deque<LLFolderViewItem*>& items, bool user_action)>& cb);
+ void clearSelection();
+ selected_items_t getSelectedItems() const;
+
+ bool isSelectionRemovable();
+ LLInventoryFilter& getFilter();
+ const LLInventoryFilter& getFilter() const;
+ void setFilterTypes(U64 filter, LLInventoryFilter::EFilterType = LLInventoryFilter::FILTERTYPE_OBJECT);
+ void setFilterWorn();
+ U32 getFilterObjectTypes() const;
+ void setFilterPermMask(PermissionMask filter_perm_mask);
+ U32 getFilterPermMask() const;
+ void setFilterWearableTypes(U64 filter);
+ void setFilterSettingsTypes(U64 filter);
+ void setFilterSubString(const std::string& string);
+ const std::string getFilterSubString();
+ void setSinceLogoff(bool sl);
+ void setHoursAgo(U32 hours);
+ void setDateSearchDirection(U32 direction);
+ bool getSinceLogoff();
+ void setFilterLinks(U64 filter_links);
+ void setSearchType(LLInventoryFilter::ESearchType type);
+ LLInventoryFilter::ESearchType getSearchType();
+
+ void setShowFolderState(LLInventoryFilter::EFolderShow show);
+ LLInventoryFilter::EFolderShow getShowFolderState();
+ // This method is called when something has changed about the inventory.
+ void modelChanged(U32 mask);
+ LLFolderView* getRootFolder() { return mFolderRoot.get(); }
+ LLUUID getRootFolderID();
+ LLScrollContainer* getScrollableContainer() { return mScroller; }
+ bool getAllowDropOnRoot() { return mParams.allow_drop_on_root; }
+ bool areViewsInitialized() { return mViewsInitialized == VIEWS_INITIALIZED && mFolderRoot.get() && !mFolderRoot.get()->needsArrange(); }
+
+ void onSelectionChange(const std::deque<LLFolderViewItem*> &items, bool user_action);
+
+ LLHandle<LLInventoryPanel> getInventoryPanelHandle() const { return getDerivedHandle<LLInventoryPanel>(); }
+
+ // Callbacks
+ void doToSelected(const LLSD& userdata);
+ void doCreate(const LLSD& userdata);
+ bool beginIMSession();
+ void fileUploadLocation(const LLSD& userdata);
+ void openSingleViewInventory(LLUUID folder_id = LLUUID());
+ void purgeSelectedItems();
+ bool attachObject(const LLSD& userdata);
+ static void idle(void* user_data);
+
+ void updateFolderLabel(const LLUUID& folder_id);
+
+ // DEBUG ONLY:
+ static void dumpSelectionInformation(void* user_data);
+
+ void openSelected();
+ void unSelectAll();
+
+ static void onIdle(void* user_data);
+
+ // Find whichever inventory panel is active / on top.
+ // "Auto_open" determines if we open an inventory panel if none are open.
+ static LLInventoryPanel *getActiveInventoryPanel(bool auto_open = true);
+
+ static void openInventoryPanelAndSetSelection(bool auto_open,
+ const LLUUID& obj_id,
+ bool use_main_panel = false,
+ bool take_keyboard_focus = true,
+ bool reset_filter = false);
+ static void setSFViewAndOpenFolder(const LLInventoryPanel* panel, const LLUUID& folder_id);
+ void addItemID(const LLUUID& id, LLFolderViewItem* itemp);
+ void removeItemID(const LLUUID& id);
+ LLFolderViewItem* getItemByID(const LLUUID& id);
+ LLFolderViewFolder* getFolderByID(const LLUUID& id);
+ void setSelectionByID(const LLUUID& obj_id, bool take_keyboard_focus);
+ void updateSelection();
+
+ void setSuppressOpenItemAction(bool supress_open_item) { mSuppressOpenItemAction = supress_open_item; }
+
+ LLFolderViewModelInventory* getFolderViewModel() { return &mInventoryViewModel; }
+ const LLFolderViewModelInventory* getFolderViewModel() const { return &mInventoryViewModel; }
+
+ // Clean up stuff when the folder root gets deleted
+ void clearFolderRoot();
+
+ static void callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response, const std::vector<LLUUID> inventory_selected);
+
+ void changeFolderRoot(const LLUUID& new_id) {};
+ void initFolderRoot();
+ void initializeViewBuilding();
+
+protected:
+ void openStartFolderOrMyInventory(); // open the first level of inventory
+ void onItemsCompletion(); // called when selected items are complete
+
+ LLUUID mSelectThisID;
+ LLInventoryModel* mInventory;
+ LLInventoryObserver* mInventoryObserver;
+ LLInvPanelComplObserver* mCompletionObserver;
+ bool mFocusSelection;
+ bool mAcceptsDragAndDrop;
+ bool mAllowMultiSelect;
+ bool mAllowDrag;
+ bool mShowItemLinkOverlays; // Shows link graphic over inventory item icons
+ bool mShowEmptyMessage;
+ bool mSuppressFolderMenu;
+ bool mSuppressOpenItemAction;
+
+ LLHandle<LLFolderView> mFolderRoot;
+ LLScrollContainer* mScroller;
+
+ LLUUID mPreviousSelectedFolder;
+
+ LLFolderViewModelInventory mInventoryViewModel;
+ LLPointer<LLFolderViewGroupedItemBridge> mGroupedItemBridge;
+ Params mParams; // stored copy of parameter block
+
+ std::map<LLUUID, LLFolderViewItem*> mItemMap;
+ /**
+ * Pointer to LLInventoryFolderViewModelBuilder.
+ *
+ * It is set in LLInventoryPanel's constructor and can be overridden in derived classes with
+ * another implementation.
+ * Take into account it will not be deleted by LLInventoryPanel itself.
+ */
+ const LLInventoryFolderViewModelBuilder* mInvFVBridgeBuilder;
+
+ bool mBuildChildrenViews; // build root and children
+ bool mRootInited;
+
+
+ //--------------------------------------------------------------------
+ // Sorting
+ //--------------------------------------------------------------------
+public:
+ static const std::string DEFAULT_SORT_ORDER;
+ static const std::string RECENTITEMS_SORT_ORDER;
+ static const std::string INHERIT_SORT_ORDER;
+
+ void setSortOrder(U32 order);
+ U32 getSortOrder() const;
+
+private:
+ std::string mSortOrderSetting;
+ int mClipboardState;
+
+ //--------------------------------------------------------------------
+ // Hidden folders
+ //--------------------------------------------------------------------
+public:
+ void addHideFolderType(LLFolderType::EType folder_type);
+protected:
+ // Builds the UI. Call this once the inventory is usable.
+ void initializeViews(F64 max_time);
+
+ // Specific inventory colors
+ static bool sColorSetInitialized;
+ static LLUIColor sDefaultColor;
+ static LLUIColor sDefaultHighlightColor;
+ static LLUIColor sLibraryColor;
+ static LLUIColor sLinkColor;
+
+ enum EBuildModes
+ {
+ BUILD_NO_LIMIT,
+ BUILD_TIMELIMIT, // requires mBuildViewsEndTime
+ BUILD_ONE_FOLDER,
+ BUILD_NO_CHILDREN,
+ };
+
+ // All buildNewViews() use BUILD_TIMELIMIT by default
+ // and expect time limit mBuildViewsEndTime to be set
+ LLFolderViewItem* buildNewViews(const LLUUID& id);
+ LLFolderViewItem* buildNewViews(const LLUUID& id,
+ LLInventoryObject const* objectp);
+ LLFolderViewItem* buildNewViews(const LLUUID& id,
+ LLInventoryObject const* objectp,
+ LLFolderViewItem *target_view,
+ const EBuildModes &mode = BUILD_TIMELIMIT);
+
+ // if certain types are not allowed, no reason to create views
+ virtual bool typedViewsFilter(const LLUUID& id, LLInventoryObject const* objectp) { return true; }
+
+ virtual void itemChanged(const LLUUID& item_id, U32 mask, const LLInventoryObject* model_item);
+ bool getIsHiddenFolderType(LLFolderType::EType folder_type) const;
+
+ virtual LLFolderView * createFolderRoot(LLUUID root_id );
+ virtual LLFolderViewFolder* createFolderViewFolder(LLInvFVBridge * bridge, bool allow_drop);
+ virtual LLFolderViewItem* createFolderViewItem(LLInvFVBridge * bridge);
+
+ boost::function<void(const std::deque<LLFolderViewItem*>& items, bool user_action)> mSelectionCallback;
+private:
+ // buildViewsTree does not include some checks and is meant
+ // for recursive use, use buildNewViews() for first call
+ LLFolderViewItem* buildViewsTree(const LLUUID& id,
+ const LLUUID& parent_id,
+ LLInventoryObject const* objectp,
+ LLFolderViewItem *target_view,
+ LLFolderViewFolder *parent_folder_view,
+ const EBuildModes &mode,
+ S32 depth = -1);
+
+ typedef enum e_views_initialization_state
+ {
+ VIEWS_UNINITIALIZED = 0,
+ VIEWS_INITIALIZING,
+ VIEWS_BUILDING, // Root folder exists
+ VIEWS_INITIALIZED,
+ } EViewsInitializationState;
+
+ bool mBuildViewsOnInit;
+ EViewsInitializationState mViewsInitialized; // Whether views have been generated
+ F64 mBuildViewsEndTime; // Stop building views past this timestamp
+ std::deque<LLUUID> mBuildViewsQueue;
+};
+
+
+class LLInventorySingleFolderPanel : public LLInventoryPanel
+{
+public:
+ struct Params : public LLInitParam::Block<Params, LLInventoryPanel::Params>
+ {};
+
+ void initFromParams(const Params& p);
+ void onFocusReceived() override;
+
+ bool isSelectionRemovable() { return false; }
+
+ void initFolderRoot(const LLUUID& start_folder_id = LLUUID::null);
+
+ void changeFolderRoot(const LLUUID& new_id);
+ void onForwardFolder();
+ void onBackwardFolder();
+ void clearNavigationHistory();
+ LLUUID getSingleFolderRoot() { return mFolderID; }
+
+ void doCreate(const LLSD& userdata);
+ void doToSelected(const LLSD& userdata);
+ void doShare();
+
+ bool isBackwardAvailable();
+ bool isForwardAvailable();
+
+ bool hasVisibleItems();
+
+ void setNavBackwardList(std::list<LLUUID> backward_list) { mBackwardFolders = backward_list; }
+ void setNavForwardList(std::list<LLUUID> forward_list) { mForwardFolders = forward_list; }
+ std::list<LLUUID> getNavBackwardList() { return mBackwardFolders; }
+ std::list<LLUUID> getNavForwardList() { return mForwardFolders; }
+
+ typedef boost::function<void()> root_changed_callback_t;
+ boost::signals2::connection setRootChangedCallback(root_changed_callback_t cb);
+
+protected:
+ LLInventorySingleFolderPanel(const Params& params);
+ ~LLInventorySingleFolderPanel();
+ void updateSingleFolderRoot();
+
+ friend class LLUICtrlFactory;
+
+ LLUUID mFolderID;
+ std::list<LLUUID> mBackwardFolders;
+ std::list<LLUUID> mForwardFolders;
+
+ boost::signals2::signal<void()> mRootChangedSignal;
+};
+
+/************************************************************************/
+/* Asset Pre-Filtered Inventory Panel related class */
+/* Exchanges filter's flexibility for speed of generation and */
+/* improved performance */
+/************************************************************************/
+
+class LLAssetFilteredInventoryPanel : public LLInventoryPanel
+{
+public:
+ struct Params
+ : public LLInitParam::Block<Params, LLInventoryPanel::Params>
+ {
+ Mandatory<std::string> filter_asset_types;
+
+ Params() : filter_asset_types("filter_asset_types") {}
+ };
+
+ void initFromParams(const Params& p);
+protected:
+ LLAssetFilteredInventoryPanel(const Params& p);
+ friend class LLUICtrlFactory;
+public:
+ ~LLAssetFilteredInventoryPanel() {}
+
+ /*virtual*/ bool handleDragAndDrop(S32 x, S32 y, MASK mask, bool drop,
+ EDragAndDropType cargo_type,
+ void* cargo_data,
+ EAcceptance* accept,
+ std::string& tooltip_msg) override;
+
+protected:
+ /*virtual*/ bool typedViewsFilter(const LLUUID& id, LLInventoryObject const* objectp) override;
+ /*virtual*/ void itemChanged(const LLUUID& item_id, U32 mask, const LLInventoryObject* model_item) override;
+
+private:
+ bool mAssetTypes[LLAssetType::AT_COUNT];
+ bool mDragTypes[EDragAndDropType::DAD_COUNT];
+};
+
+#endif // LL_LLINVENTORYPANEL_H