From 17e3b2936a63f1242071ffcfe09069fcecc3b73b Mon Sep 17 00:00:00 2001 From: Alexander Gavriliuk Date: Fri, 2 Feb 2024 19:53:08 +0100 Subject: GH-68175 [SL-17986] Ability to drag Favorites to the Overflow menu --- indra/newview/llfavoritesbar.h | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) (limited to 'indra/newview/llfavoritesbar.h') diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index 3b439b31fd..6b9f2cee69 100644 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -56,22 +56,21 @@ protected: public: virtual ~LLFavoritesBarCtrl(); - /*virtual*/ BOOL postBuild(); + /*virtual*/ BOOL postBuild() override; /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, - EDragAndDropType cargo_type, - void* cargo_data, - EAcceptance* accept, - std::string& tooltip_msg); + EDragAndDropType cargo_type, void* cargo_data, EAcceptance* accept, std::string& tooltip_msg) override; + bool handleDragAndDropToMenu(S32 x, S32 y, MASK mask, BOOL drop, + EDragAndDropType cargo_type, void* cargo_data, EAcceptance* accept, std::string& tooltip_msg); - /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); - /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); + /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask) override; + /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override; // LLInventoryObserver observer trigger - virtual void changed(U32 mask); - virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); - virtual void draw(); + /*virtual*/ void changed(U32 mask) override; + /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE) override; + /*virtual*/ void draw() override; - void showDragMarker(BOOL show) { mShowDragMarker = show; } + void showDragMarker(bool show) { mShowDragMarker = show; } void setLandingTab(LLUICtrl* tab) { mLandingTab = tab; } protected: @@ -108,7 +107,7 @@ protected: S32 mDropDownItemsCount; bool mUpdateDropDownItems; bool mRestoreOverflowMenu; - + bool mDragToOverflowMenu; bool mGetPrevItems; LLUUID mSelectedItemID; @@ -118,19 +117,21 @@ protected: private: /* * Helper function to make code more readable. It handles all drag and drop - * operations of the existing favorites items on the favorites bar. + * operations of the existing favorites items to the favorites bar to on the overflow menu. */ void handleExistingFavoriteDragAndDrop(S32 x, S32 y); /* * Helper function to make code more readable. It handles all drag and drop - * operations of the new landmark to the favorites bar. + * operations of the new landmark to the favorites bar or to the overflow menu. */ void handleNewFavoriteDragAndDrop(LLInventoryItem *item, const LLUUID& favorites_id, S32 x, S32 y); // finds a control under the specified LOCAL point LLUICtrl* findChildByLocalCoords(S32 x, S32 y); + bool findDragAndDropTarget(LLUUID &target_id, bool &insert_before, S32 x, S32 y); + // checks if the current order of the favorites items must be saved BOOL needToSaveItemsOrder(const LLInventoryModel::item_array_t& items); @@ -145,27 +146,25 @@ private: void createOverflowMenu(); - void updateMenuItems(LLToggleableMenu* menu); + void updateOverflowMenuItems(); // Fits menu item label width with favorites menu width void fitLabelWidth(LLMenuItemCallGL* menu_item); void addOpenLandmarksMenuItem(LLToggleableMenu* menu); - void positionAndShowMenu(LLToggleableMenu* menu); + void positionAndShowOverflowMenu(); - BOOL mShowDragMarker; + bool mShowDragMarker; LLUICtrl* mLandingTab; LLUICtrl* mLastTab; LLTextBox* mMoreTextBox; LLTextBox* mBarLabel; LLUUID mDragItemId; - BOOL mStartDrag; + bool mStartDrag; LLInventoryModel::item_array_t mItems; - BOOL mTabsHighlightEnabled; - S32 mMouseX; S32 mMouseY; -- cgit v1.2.3 From c285f59ce2a05703e3a1232fcaf3ee3aea714b3f Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sun, 18 Feb 2024 12:52:19 +0100 Subject: Replace BOOL with bool in llwindow and dependent classes --- indra/newview/llfavoritesbar.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra/newview/llfavoritesbar.h') diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index 6b9f2cee69..a1a7cc42d3 100644 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -63,8 +63,8 @@ public: bool handleDragAndDropToMenu(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void* cargo_data, EAcceptance* accept, std::string& tooltip_msg); - /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask) override; - /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override; + /*virtual*/ bool handleHover(S32 x, S32 y, MASK mask) override; + /*virtual*/ bool handleRightMouseDown(S32 x, S32 y, MASK mask) override; // LLInventoryObserver observer trigger /*virtual*/ void changed(U32 mask) override; /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE) override; -- cgit v1.2.3 From a5261a5fa8fad810ecb5c260d92c3e771822bf58 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 20 Feb 2024 23:46:23 +0100 Subject: Convert BOOL to bool in llui --- indra/newview/llfavoritesbar.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'indra/newview/llfavoritesbar.h') diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index a1a7cc42d3..2580b9e514 100644 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -56,9 +56,9 @@ protected: public: virtual ~LLFavoritesBarCtrl(); - /*virtual*/ BOOL postBuild() override; + /*virtual*/ bool postBuild() override; - /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, + /*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 handleDragAndDropToMenu(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void* cargo_data, EAcceptance* accept, std::string& tooltip_msg); @@ -67,7 +67,7 @@ public: /*virtual*/ bool handleRightMouseDown(S32 x, S32 y, MASK mask) override; // LLInventoryObserver observer trigger /*virtual*/ void changed(U32 mask) override; - /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE) override; + /*virtual*/ void reshape(S32 width, S32 height, bool called_from_parent = true) override; /*virtual*/ void draw() override; void showDragMarker(bool show) { mShowDragMarker = show; } @@ -83,7 +83,6 @@ protected: void onButtonRightClick(LLUUID id,LLView* button,S32 x,S32 y,MASK mask); void onButtonMouseDown(LLUUID id, LLUICtrl* button, S32 x, S32 y, MASK mask); - void onOverflowMenuItemMouseDown(LLUUID id, LLUICtrl* item, S32 x, S32 y, MASK mask); void onButtonMouseUp(LLUUID id, LLUICtrl* button, S32 x, S32 y, MASK mask); void onEndDrag(); -- cgit v1.2.3 From 60d3dd98a44230c21803c1606552ee098ed9fa7c Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 21 Feb 2024 21:05:14 +0100 Subject: Convert remaining BOOL to bool --- indra/newview/llfavoritesbar.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'indra/newview/llfavoritesbar.h') diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index 2580b9e514..18576c9486 100644 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -60,7 +60,7 @@ public: /*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 handleDragAndDropToMenu(S32 x, S32 y, MASK mask, BOOL drop, + bool handleDragAndDropToMenu(S32 x, S32 y, MASK mask, bool drop, EDragAndDropType cargo_type, void* cargo_data, EAcceptance* accept, std::string& tooltip_msg); /*virtual*/ bool handleHover(S32 x, S32 y, MASK mask) override; @@ -77,7 +77,7 @@ protected: void updateButtons(bool force_update = false); LLButton* createButton(const LLPointer item, const LLButton::Params& button_params, S32 x_offset ); const LLButton::Params& getButtonParams(); - BOOL collectFavoriteItems(LLInventoryModel::item_array_t &items); + bool collectFavoriteItems(LLInventoryModel::item_array_t &items); void onButtonClick(LLUUID id); void onButtonRightClick(LLUUID id,LLView* button,S32 x,S32 y,MASK mask); @@ -90,7 +90,7 @@ protected: bool enableSelected(const LLSD& userdata); void doToSelected(const LLSD& userdata); static bool onRenameCommit(const LLSD& notification, const LLSD& response); - BOOL isClipboardPasteable() const; + bool isClipboardPasteable() const; void pasteFromClipboard() const; void showDropDownMenu(); @@ -132,7 +132,7 @@ private: bool findDragAndDropTarget(LLUUID &target_id, bool &insert_before, S32 x, S32 y); // checks if the current order of the favorites items must be saved - BOOL needToSaveItemsOrder(const LLInventoryModel::item_array_t& items); + bool needToSaveItemsOrder(const LLInventoryModel::item_array_t& items); /** * inserts an item identified by insertedItemId BEFORE an item identified by beforeItemId. @@ -221,8 +221,8 @@ public: // Remove record of current user's favorites from file on disk. static void removeFavoritesRecordOfUser(); - BOOL saveFavoritesRecord(bool pref_changed = false); - void showFavoritesOnLoginChanged(BOOL show); + bool saveFavoritesRecord(bool pref_changed = false); + void showFavoritesOnLoginChanged(bool show); bool isStorageUpdateNeeded(); -- cgit v1.2.3 From e2e37cced861b98de8c1a7c9c0d3a50d2d90e433 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 22 May 2024 21:25:21 +0200 Subject: Fix line endlings --- indra/newview/llfavoritesbar.h | 594 ++++++++++++++++++++--------------------- 1 file changed, 297 insertions(+), 297 deletions(-) (limited to 'indra/newview/llfavoritesbar.h') diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index 62d6bb8973..ee18f3ed45 100644 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -1,297 +1,297 @@ -/** - * @file llfavoritesbar.h - * @brief LLFavoritesBarCtrl base class - * - * $LicenseInfo:firstyear=2009&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#ifndef LL_LLFAVORITESBARCTRL_H -#define LL_LLFAVORITESBARCTRL_H - -#include "llbutton.h" -#include "lluictrl.h" -#include "lltextbox.h" - -#include "llinventoryobserver.h" -#include "llinventorymodel.h" -#include "llviewerinventory.h" -#include "llinitdestroyclass.h" - -class LLMenuItemCallGL; -class LLToggleableMenu; - -class LLFavoritesBarCtrl : public LLUICtrl, public LLInventoryObserver -{ -public: - struct Params : public LLInitParam::Block - { - Optional image_drag_indication; - Optional more_button; - Optional label; - Params(); - }; - -protected: - LLFavoritesBarCtrl(const Params&); - friend class LLUICtrlFactory; - friend class LLItemCopiedCallback; -public: - virtual ~LLFavoritesBarCtrl(); - - /*virtual*/ bool postBuild() 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 handleDragAndDropToMenu(S32 x, S32 y, MASK mask, bool drop, - EDragAndDropType cargo_type, void* cargo_data, EAcceptance* accept, std::string& tooltip_msg); - - /*virtual*/ bool handleHover(S32 x, S32 y, MASK mask) override; - /*virtual*/ bool handleRightMouseDown(S32 x, S32 y, MASK mask) override; - // LLInventoryObserver observer trigger - /*virtual*/ void changed(U32 mask) override; - /*virtual*/ void reshape(S32 width, S32 height, bool called_from_parent = true) override; - /*virtual*/ void draw() override; - - void showDragMarker(bool show) { mShowDragMarker = show; } - void setLandingTab(LLUICtrl* tab) { mLandingTab = tab; } - -protected: - void updateButtons(bool force_update = false); - LLButton* createButton(const LLPointer item, const LLButton::Params& button_params, S32 x_offset ); - const LLButton::Params& getButtonParams(); - bool collectFavoriteItems(LLInventoryModel::item_array_t &items); - - void onButtonClick(LLUUID id); - void onButtonRightClick(LLUUID id,LLView* button,S32 x,S32 y,MASK mask); - - void onButtonMouseDown(LLUUID id, LLUICtrl* button, S32 x, S32 y, MASK mask); - void onButtonMouseUp(LLUUID id, LLUICtrl* button, S32 x, S32 y, MASK mask); - - void onEndDrag(); - - bool enableSelected(const LLSD& userdata); - void doToSelected(const LLSD& userdata); - static bool onRenameCommit(const LLSD& notification, const LLSD& response); - bool isClipboardPasteable() const; - void pasteFromClipboard() const; - - void showDropDownMenu(); - - void onMoreTextBoxClicked(); - - LLHandle mOverflowMenuHandle; - LLHandle mContextMenuHandle; - - LLUUID mFavoriteFolderId; - const LLFontGL *mFont; - S32 mFirstDropDownItem; - S32 mDropDownItemsCount; - bool mUpdateDropDownItems; - bool mRestoreOverflowMenu; - bool mDragToOverflowMenu; - bool mGetPrevItems; - - LLUUID mSelectedItemID; - LLFrameTimer mItemsChangedTimer; - LLUIImage* mImageDragIndication; - -private: - /* - * Helper function to make code more readable. It handles all drag and drop - * operations of the existing favorites items to the favorites bar to on the overflow menu. - */ - void handleExistingFavoriteDragAndDrop(S32 x, S32 y); - - /* - * Helper function to make code more readable. It handles all drag and drop - * operations of the new landmark to the favorites bar or to the overflow menu. - */ - void handleNewFavoriteDragAndDrop(LLInventoryItem *item, const LLUUID& favorites_id, S32 x, S32 y); - - // finds a control under the specified LOCAL point - LLUICtrl* findChildByLocalCoords(S32 x, S32 y); - - bool findDragAndDropTarget(LLUUID &target_id, bool &insert_before, S32 x, S32 y); - - // checks if the current order of the favorites items must be saved - bool needToSaveItemsOrder(const LLInventoryModel::item_array_t& items); - - /** - * inserts an item identified by insertedItemId BEFORE an item identified by beforeItemId. - * this function assumes that an item identified by insertedItemId doesn't exist in items array. - */ - void insertItem(LLInventoryModel::item_array_t& items, const LLUUID& dest_item_id, LLViewerInventoryItem* insertedItem, bool insert_before); - - // finds an item by it's UUID in the items array - LLInventoryModel::item_array_t::iterator findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id); - - void createOverflowMenu(); - - void updateOverflowMenuItems(); - - // Fits menu item label width with favorites menu width - void fitLabelWidth(LLMenuItemCallGL* menu_item); - - void addOpenLandmarksMenuItem(LLToggleableMenu* menu); - - void positionAndShowOverflowMenu(); - - bool mShowDragMarker; - LLUICtrl* mLandingTab; - LLUICtrl* mLastTab; - LLTextBox* mMoreTextBox; - LLTextBox* mBarLabel; - - LLUUID mDragItemId; - bool mStartDrag; - LLInventoryModel::item_array_t mItems; - - static F64 sWaitingForCallabck; - bool mItemsListDirty; - - S32 mMouseX; - S32 mMouseY; - - boost::signals2::connection mEndDragConnection; -}; - -/** - * Class to store sorting order of favorites landmarks in a local file. EXT-3985. - * It replaced previously implemented solution to store sort index in landmark's name as a "@" prefix. - * Data are stored in user home directory. - */ -class LLFavoritesOrderStorage : public LLSingleton - , public LLDestroyClass -{ - LLSINGLETON(LLFavoritesOrderStorage); - LOG_CLASS(LLFavoritesOrderStorage); -public: - /** - * Sets sort index for specified with LLUUID favorite landmark - */ - void setSortIndex(const LLViewerInventoryItem* inv_item, S32 sort_index); - - /** - * Gets sort index for specified with LLUUID favorite landmark - */ - S32 getSortIndex(const LLUUID& inv_item_id); - void removeSortIndex(const LLUUID& inv_item_id); - - void getSLURL(const LLUUID& asset_id); - - // Saves current order of the passed items using inventory item sort field. - // Resets 'items' sort fields and saves them on server. - // Is used to save order for Favorites folder. - void saveItemsOrder(const LLInventoryModel::item_array_t& items); - - void saveOrder(); - - void rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id); - - /** - * Implementation of LLDestroyClass. Calls cleanup() instance method. - * - * It is important this callback is called before gInventory is cleaned. - * For now it is called from LLAppViewer::cleanup() -> LLAppViewer::disconnectViewer(), - * Inventory is cleaned later from LLAppViewer::cleanup() after LLAppViewer::disconnectViewer() is called. - * @see cleanup() - */ - static void destroyClass(); - static std::string getStoredFavoritesFilename(const std::string &grid); - static std::string getStoredFavoritesFilename(); - static std::string getSavedOrderFileName(); - - // Remove record of specified user's favorites from file on disk. - static void removeFavoritesRecordOfUser(const std::string &user, const std::string &grid); - // Remove record of current user's favorites from file on disk. - static void removeFavoritesRecordOfUser(); - - bool saveFavoritesRecord(bool pref_changed = false); - void showFavoritesOnLoginChanged(bool show); - - bool isStorageUpdateNeeded(); - - LLInventoryModel::item_array_t mPrevFavorites; - LLSD mStorageFavorites; - bool mRecreateFavoriteStorage; - - const static S32 NO_INDEX; - static bool mSaveOnExit; - bool mUpdateRequired; - std::map mFavoriteNames; - -private: - /** - * Removes sort indexes for items which are not in Favorites bar for now. - */ - void cleanup(); - - const static std::string SORTING_DATA_FILE_NAME; - - void load(); - - void onLandmarkLoaded(const LLUUID& asset_id, class LLLandmark* landmark); - void storeFavoriteSLURL(const LLUUID& asset_id, std::string& slurl); - - typedef std::map sort_index_map_t; - sort_index_map_t mSortIndexes; - - typedef std::map slurls_map_t; - slurls_map_t mSLURLs; - std::set mMissingSLURLs; - bool mIsDirty; - - struct IsNotInFavorites - { - IsNotInFavorites(const LLInventoryModel::item_array_t& items) - : mFavoriteItems(items) - { - - } - - /** - * Returns true if specified item is not found among inventory items - */ - bool operator()(const sort_index_map_t::value_type& id_index_pair) const - { - LLPointer item = gInventory.getItem(id_index_pair.first); - if (item.isNull()) return true; - - LLInventoryModel::item_array_t::const_iterator found_it = - std::find(mFavoriteItems.begin(), mFavoriteItems.end(), item); - - return found_it == mFavoriteItems.end(); - } - private: - LLInventoryModel::item_array_t mFavoriteItems; - }; - -}; - -inline -LLFavoritesOrderStorage::LLFavoritesOrderStorage() : - mIsDirty(false), - mUpdateRequired(false), - mRecreateFavoriteStorage(false) -{ load(); } - -#endif // LL_LLFAVORITESBARCTRL_H +/** + * @file llfavoritesbar.h + * @brief LLFavoritesBarCtrl base class + * + * $LicenseInfo:firstyear=2009&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLFAVORITESBARCTRL_H +#define LL_LLFAVORITESBARCTRL_H + +#include "llbutton.h" +#include "lluictrl.h" +#include "lltextbox.h" + +#include "llinventoryobserver.h" +#include "llinventorymodel.h" +#include "llviewerinventory.h" +#include "llinitdestroyclass.h" + +class LLMenuItemCallGL; +class LLToggleableMenu; + +class LLFavoritesBarCtrl : public LLUICtrl, public LLInventoryObserver +{ +public: + struct Params : public LLInitParam::Block + { + Optional image_drag_indication; + Optional more_button; + Optional label; + Params(); + }; + +protected: + LLFavoritesBarCtrl(const Params&); + friend class LLUICtrlFactory; + friend class LLItemCopiedCallback; +public: + virtual ~LLFavoritesBarCtrl(); + + /*virtual*/ bool postBuild() 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 handleDragAndDropToMenu(S32 x, S32 y, MASK mask, bool drop, + EDragAndDropType cargo_type, void* cargo_data, EAcceptance* accept, std::string& tooltip_msg); + + /*virtual*/ bool handleHover(S32 x, S32 y, MASK mask) override; + /*virtual*/ bool handleRightMouseDown(S32 x, S32 y, MASK mask) override; + // LLInventoryObserver observer trigger + /*virtual*/ void changed(U32 mask) override; + /*virtual*/ void reshape(S32 width, S32 height, bool called_from_parent = true) override; + /*virtual*/ void draw() override; + + void showDragMarker(bool show) { mShowDragMarker = show; } + void setLandingTab(LLUICtrl* tab) { mLandingTab = tab; } + +protected: + void updateButtons(bool force_update = false); + LLButton* createButton(const LLPointer item, const LLButton::Params& button_params, S32 x_offset ); + const LLButton::Params& getButtonParams(); + bool collectFavoriteItems(LLInventoryModel::item_array_t &items); + + void onButtonClick(LLUUID id); + void onButtonRightClick(LLUUID id,LLView* button,S32 x,S32 y,MASK mask); + + void onButtonMouseDown(LLUUID id, LLUICtrl* button, S32 x, S32 y, MASK mask); + void onButtonMouseUp(LLUUID id, LLUICtrl* button, S32 x, S32 y, MASK mask); + + void onEndDrag(); + + bool enableSelected(const LLSD& userdata); + void doToSelected(const LLSD& userdata); + static bool onRenameCommit(const LLSD& notification, const LLSD& response); + bool isClipboardPasteable() const; + void pasteFromClipboard() const; + + void showDropDownMenu(); + + void onMoreTextBoxClicked(); + + LLHandle mOverflowMenuHandle; + LLHandle mContextMenuHandle; + + LLUUID mFavoriteFolderId; + const LLFontGL *mFont; + S32 mFirstDropDownItem; + S32 mDropDownItemsCount; + bool mUpdateDropDownItems; + bool mRestoreOverflowMenu; + bool mDragToOverflowMenu; + bool mGetPrevItems; + + LLUUID mSelectedItemID; + LLFrameTimer mItemsChangedTimer; + LLUIImage* mImageDragIndication; + +private: + /* + * Helper function to make code more readable. It handles all drag and drop + * operations of the existing favorites items to the favorites bar to on the overflow menu. + */ + void handleExistingFavoriteDragAndDrop(S32 x, S32 y); + + /* + * Helper function to make code more readable. It handles all drag and drop + * operations of the new landmark to the favorites bar or to the overflow menu. + */ + void handleNewFavoriteDragAndDrop(LLInventoryItem *item, const LLUUID& favorites_id, S32 x, S32 y); + + // finds a control under the specified LOCAL point + LLUICtrl* findChildByLocalCoords(S32 x, S32 y); + + bool findDragAndDropTarget(LLUUID &target_id, bool &insert_before, S32 x, S32 y); + + // checks if the current order of the favorites items must be saved + bool needToSaveItemsOrder(const LLInventoryModel::item_array_t& items); + + /** + * inserts an item identified by insertedItemId BEFORE an item identified by beforeItemId. + * this function assumes that an item identified by insertedItemId doesn't exist in items array. + */ + void insertItem(LLInventoryModel::item_array_t& items, const LLUUID& dest_item_id, LLViewerInventoryItem* insertedItem, bool insert_before); + + // finds an item by it's UUID in the items array + LLInventoryModel::item_array_t::iterator findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id); + + void createOverflowMenu(); + + void updateOverflowMenuItems(); + + // Fits menu item label width with favorites menu width + void fitLabelWidth(LLMenuItemCallGL* menu_item); + + void addOpenLandmarksMenuItem(LLToggleableMenu* menu); + + void positionAndShowOverflowMenu(); + + bool mShowDragMarker; + LLUICtrl* mLandingTab; + LLUICtrl* mLastTab; + LLTextBox* mMoreTextBox; + LLTextBox* mBarLabel; + + LLUUID mDragItemId; + bool mStartDrag; + LLInventoryModel::item_array_t mItems; + + static F64 sWaitingForCallabck; + bool mItemsListDirty; + + S32 mMouseX; + S32 mMouseY; + + boost::signals2::connection mEndDragConnection; +}; + +/** + * Class to store sorting order of favorites landmarks in a local file. EXT-3985. + * It replaced previously implemented solution to store sort index in landmark's name as a "@" prefix. + * Data are stored in user home directory. + */ +class LLFavoritesOrderStorage : public LLSingleton + , public LLDestroyClass +{ + LLSINGLETON(LLFavoritesOrderStorage); + LOG_CLASS(LLFavoritesOrderStorage); +public: + /** + * Sets sort index for specified with LLUUID favorite landmark + */ + void setSortIndex(const LLViewerInventoryItem* inv_item, S32 sort_index); + + /** + * Gets sort index for specified with LLUUID favorite landmark + */ + S32 getSortIndex(const LLUUID& inv_item_id); + void removeSortIndex(const LLUUID& inv_item_id); + + void getSLURL(const LLUUID& asset_id); + + // Saves current order of the passed items using inventory item sort field. + // Resets 'items' sort fields and saves them on server. + // Is used to save order for Favorites folder. + void saveItemsOrder(const LLInventoryModel::item_array_t& items); + + void saveOrder(); + + void rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id); + + /** + * Implementation of LLDestroyClass. Calls cleanup() instance method. + * + * It is important this callback is called before gInventory is cleaned. + * For now it is called from LLAppViewer::cleanup() -> LLAppViewer::disconnectViewer(), + * Inventory is cleaned later from LLAppViewer::cleanup() after LLAppViewer::disconnectViewer() is called. + * @see cleanup() + */ + static void destroyClass(); + static std::string getStoredFavoritesFilename(const std::string &grid); + static std::string getStoredFavoritesFilename(); + static std::string getSavedOrderFileName(); + + // Remove record of specified user's favorites from file on disk. + static void removeFavoritesRecordOfUser(const std::string &user, const std::string &grid); + // Remove record of current user's favorites from file on disk. + static void removeFavoritesRecordOfUser(); + + bool saveFavoritesRecord(bool pref_changed = false); + void showFavoritesOnLoginChanged(bool show); + + bool isStorageUpdateNeeded(); + + LLInventoryModel::item_array_t mPrevFavorites; + LLSD mStorageFavorites; + bool mRecreateFavoriteStorage; + + const static S32 NO_INDEX; + static bool mSaveOnExit; + bool mUpdateRequired; + std::map mFavoriteNames; + +private: + /** + * Removes sort indexes for items which are not in Favorites bar for now. + */ + void cleanup(); + + const static std::string SORTING_DATA_FILE_NAME; + + void load(); + + void onLandmarkLoaded(const LLUUID& asset_id, class LLLandmark* landmark); + void storeFavoriteSLURL(const LLUUID& asset_id, std::string& slurl); + + typedef std::map sort_index_map_t; + sort_index_map_t mSortIndexes; + + typedef std::map slurls_map_t; + slurls_map_t mSLURLs; + std::set mMissingSLURLs; + bool mIsDirty; + + struct IsNotInFavorites + { + IsNotInFavorites(const LLInventoryModel::item_array_t& items) + : mFavoriteItems(items) + { + + } + + /** + * Returns true if specified item is not found among inventory items + */ + bool operator()(const sort_index_map_t::value_type& id_index_pair) const + { + LLPointer item = gInventory.getItem(id_index_pair.first); + if (item.isNull()) return true; + + LLInventoryModel::item_array_t::const_iterator found_it = + std::find(mFavoriteItems.begin(), mFavoriteItems.end(), item); + + return found_it == mFavoriteItems.end(); + } + private: + LLInventoryModel::item_array_t mFavoriteItems; + }; + +}; + +inline +LLFavoritesOrderStorage::LLFavoritesOrderStorage() : + mIsDirty(false), + mUpdateRequired(false), + mRecreateFavoriteStorage(false) +{ load(); } + +#endif // LL_LLFAVORITESBARCTRL_H -- cgit v1.2.3