diff options
Diffstat (limited to 'indra/newview/llpanellandmarks.h')
-rw-r--r-- | indra/newview/llpanellandmarks.h | 171 |
1 files changed, 141 insertions, 30 deletions
diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h index 0f400a722e..0d4402d8cb 100644 --- a/indra/newview/llpanellandmarks.h +++ b/indra/newview/llpanellandmarks.h @@ -3,41 +3,47 @@ * @brief Landmarks tab for Side Bar "Places" panel * class definition * - * $LicenseInfo:firstyear=2009&license=viewergpl$ - * - * Copyright (c) 2001-2009, Linden Research, Inc. - * + * $LicenseInfo:firstyear=2009&license=viewerlgpl$ * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. + * 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 "llinventoryview.h" +#include "lllandmark.h" + +// newview #include "llinventorymodel.h" +#include "lllandmarklist.h" #include "llpanelplacestab.h" +#include "llpanelpick.h" +#include "llremoteparcelrequest.h" -class LLLandmarksPanel : public LLPanelPlacesTab +class LLAccordionCtrlTab; +class LLFolderViewItem; +class LLMenuGL; +class LLInventoryPanel; +class LLPlacesInventoryPanel; + +class LLLandmarksPanel : public LLPanelPlacesTab, LLRemoteParcelInfoObserver { public: LLLandmarksPanel(); @@ -46,16 +52,121 @@ public: /*virtual*/ BOOL postBuild(); /*virtual*/ void onSearchEdit(const std::string& string); /*virtual*/ void onShowOnMap(); + /*virtual*/ void onShowProfile(); /*virtual*/ void onTeleport(); - ///*virtual*/ void onCopySLURL(); + /*virtual*/ void updateVerbs(); + /*virtual*/ bool isSingleItemSelected(); - void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action); + void onSelectionChange(LLPlacesInventoryPanel* inventory_list, const std::deque<LLFolderViewItem*> &items, BOOL user_action); void onSelectorButtonClicked(); + void setCurrentSelectedList(LLPlacesInventoryPanel* inventory_list) + { + mCurrentSelectedList = inventory_list; + } + + /** + * Update filter ShowFolderState setting to show empty folder message + * if Landmarks inventory folder is empty. + */ + void updateShowFolderState(); + + /** + * Selects item with "obj_id" in one of accordion tabs. + */ + void setItemSelected(const LLUUID& obj_id, BOOL take_keyboard_focus); + + LLPlacesInventoryPanel* getLibraryInventoryPanel() { return mLibraryInventoryPanel; } + +protected: + /** + * @return true - if current selected panel is not null and selected item is a landmark + */ + bool isLandmarkSelected() const; + bool isReceivedFolderSelected() const; + void doActionOnCurSelectedLandmark(LLLandmarkList::loaded_callback_t cb); + LLFolderViewItem* getCurSelectedItem() const; + + /** + * Selects item with "obj_id" in "inventory_list" and scrolls accordion + * scrollbar to show the item. + * Returns pointer to the item if it is found in "inventory_list", otherwise NULL. + */ + LLFolderViewItem* selectItemInAccordionTab(LLPlacesInventoryPanel* inventory_list, + const std::string& tab_name, + const LLUUID& obj_id, + BOOL take_keyboard_focus) const; + + void updateSortOrder(LLInventoryPanel* panel, bool byDate); + + //LLRemoteParcelInfoObserver interface + /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); + /*virtual*/ void setParcelID(const LLUUID& parcel_id); + /*virtual*/ void setErrorStatus(U32 status, const std::string& reason); + +private: + void initFavoritesInventoryPanel(); + void initLandmarksInventoryPanel(); + void initMyInventoryPanel(); + void initLibraryInventoryPanel(); + void initLandmarksPanel(LLPlacesInventoryPanel* inventory_list); + LLAccordionCtrlTab* initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list, bool expand_tab); + void onAccordionExpandedCollapsed(const LLSD& param, LLPlacesInventoryPanel* inventory_list); + void deselectOtherThan(const LLPlacesInventoryPanel* inventory_list); + + // List Commands Handlers + void initListCommandsHandlers(); + void updateListCommands(); + void onActionsButtonClick(); + void showActionMenu(LLMenuGL* menu, std::string spawning_view_name); + 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); + + /** + * 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; + void onPickPanelExit( LLPanelPickEdit* pick_panel, LLView* owner, const LLSD& params); + + /** + * Processes drag-n-drop of the Landmarks and folders into trash button. + */ + bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, void* cargo_data, EAcceptance* accept); + + /** + * Landmark actions callbacks. Fire when a landmark is loaded from the list. + */ + void doShowOnMap(LLLandmark* landmark); + void doProcessParcelInfo(LLLandmark* landmark, + LLFolderViewItem* cur_item, + LLInventoryItem* inv_item, + const LLParcelData& parcel_data); + void doCreatePick(LLLandmark* landmark); private: - LLInventoryPanel* mInventoryPanel; - LLSaveFolderState* mSavedFolderState; - LLButton* mActionBtn; + LLPlacesInventoryPanel* mFavoritesInventoryPanel; + LLPlacesInventoryPanel* mLandmarksInventoryPanel; + LLPlacesInventoryPanel* mMyInventoryPanel; + LLPlacesInventoryPanel* mLibraryInventoryPanel; + LLMenuGL* mGearLandmarkMenu; + LLMenuGL* mGearFolderMenu; + LLMenuGL* mMenuAdd; + LLPlacesInventoryPanel* mCurrentSelectedList; + LLInventoryObserver* mInventoryObserver; + + LLPanel* mListCommands; + + typedef std::vector<LLAccordionCtrlTab*> accordion_tabs_t; + accordion_tabs_t mAccordionTabs; + + LLAccordionCtrlTab* mMyLandmarksAccordionTab; }; #endif //LL_LLPANELLANDMARKS_H |