/** * @file llpanellandmarks.h * @brief Landmarks tab for Side Bar "Places" panel * 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$ */ #ifndef LL_LLPANELLANDMARKS_H #define LL_LLPANELLANDMARKS_H #include "lllandmark.h" // newview #include "llinventorymodel.h" #include "lllandmarklist.h" #include "llpanelplacestab.h" #include "llremoteparcelrequest.h" class LLAccordionCtrlTab; class LLFolderViewItem; class LLMenuButton; class LLMenuGL; class LLToggleableMenu; class LLInventoryPanel; class LLPlacesInventoryPanel; class LLFolderViewModelItemInventory; class LLLandmarksPanel : public LLPanelPlacesTab, LLRemoteParcelInfoObserver { public: LLLandmarksPanel(); LLLandmarksPanel(bool is_landmark_panel); virtual ~LLLandmarksPanel(); bool postBuild() override; void onSearchEdit(const std::string& string) override; void onShowOnMap() override; void onShowProfile() override; void onTeleport() override; void onRemoveSelected() override; void updateVerbs() override; bool isSingleItemSelected() override; LLToggleableMenu* getSelectionMenu() override; LLToggleableMenu* getSortingMenu() override; LLToggleableMenu* getCreateMenu() override; /** * Processes drag-n-drop of the Landmarks and folders into trash button. */ bool handleDragAndDropToTrash(bool drop, EDragAndDropType cargo_type, void* cargo_data, EAcceptance* accept) override; void setCurrentSelectedList(LLPlacesInventoryPanel* inventory_list) { mCurrentSelectedList = inventory_list; } /** * Selects item with "obj_id" in one of accordion tabs. */ void setItemSelected(const LLUUID& obj_id, bool take_keyboard_focus); void updateMenuVisibility(LLUICtrl* menu); void doCreatePick(LLLandmark* landmark, const LLUUID &item_id ); void resetSelection(); protected: /** * @return true - if current selected panel is not null and selected item is a landmark */ bool isLandmarkSelected() const; bool isFolderSelected() const; void doActionOnCurSelectedLandmark(LLLandmarkList::loaded_callback_t cb); LLFolderViewItem* getCurSelectedItem() const; LLFolderViewModelItemInventory* getCurSelectedViewModelItem() const; void updateSortOrder(LLInventoryPanel* panel, bool byDate); //LLRemoteParcelInfoObserver interface void processParcelInfo(const LLParcelData& parcel_data) override; void setParcelID(const LLUUID& parcel_id) override; void setErrorStatus(S32 status, const std::string& reason) override; // List Commands Handlers void initListCommandsHandlers(); void initLandmarksPanel(LLPlacesInventoryPanel* inventory_list); LLPlacesInventoryPanel* mCurrentSelectedList; private: void initLandmarksInventoryPanel(); void onTrashButtonClick() const; void onAddAction(const LLSD& command_name) const; void onClipboardAction(const LLSD& command_name) const; void onFoldingAction(const LLSD& command_name); bool isActionChecked(const LLSD& userdata) const; bool isActionEnabled(const LLSD& command_name) const; void onCustomAction(const LLSD& command_name); /** * Updates context menu depending on the selected items location. * * For items in Trash category the menu includes the "Restore Item" * context menu entry. */ void onMenuVisibilityChange(LLUICtrl* ctrl, const LLSD& param); /** * Determines if an item can be modified via context/gear menu. * * It validates Places Landmarks rules first. And then LLFolderView permissions. * For now it checks cut/rename/delete/paste actions. */ bool canItemBeModified(const std::string& command_name, LLFolderViewItem* item) const; /** * Landmark actions callbacks. Fire when a landmark is loaded from the list. */ void doShowOnMap(LLLandmark* landmark); void doProcessParcelInfo(LLLandmark* landmark, LLInventoryItem* inv_item, const LLParcelData& parcel_data); private: LLPlacesInventoryPanel* mLandmarksInventoryPanel; LLToggleableMenu* mGearLandmarkMenu; LLToggleableMenu* mGearFolderMenu; LLToggleableMenu* mSortingMenu; LLToggleableMenu* mAddMenu; bool isLandmarksPanel; LLUUID mCreatePickItemId; // item we requested a pick for }; class LLFavoritesPanel : public LLLandmarksPanel { public: LLFavoritesPanel(); bool postBuild() override; void initFavoritesInventoryPanel(); }; #endif //LL_LLPANELLANDMARKS_H