231 lines
6.8 KiB
C++
231 lines
6.8 KiB
C++
/**
|
|
* @file llpaneloutfitedit.h
|
|
* @brief Displays outfit edit information in Side Tray.
|
|
*
|
|
* $LicenseInfo:firstyear=2009&license=viewergpl$
|
|
*
|
|
* Copyright (c) 2004-2009, Linden Research, Inc.
|
|
*
|
|
* 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.
|
|
* $/LicenseInfo$
|
|
*/
|
|
|
|
#ifndef LL_LLPANELOUTFITEDIT_H
|
|
#define LL_LLPANELOUTFITEDIT_H
|
|
|
|
#include "llpanel.h"
|
|
|
|
#include "v3dmath.h"
|
|
#include "lluuid.h"
|
|
|
|
#include "lliconctrl.h"
|
|
|
|
#include "llremoteparcelrequest.h"
|
|
#include "llinventory.h"
|
|
#include "llinventoryfunctions.h"
|
|
#include "llinventoryitemslist.h"
|
|
#include "llinventorymodel.h"
|
|
|
|
class LLButton;
|
|
class LLCOFWearables;
|
|
class LLComboBox;
|
|
class LLTextBox;
|
|
class LLInventoryCategory;
|
|
class LLOutfitObserver;
|
|
class LLCOFDragAndDropObserver;
|
|
class LLInventoryPanel;
|
|
class LLSaveFolderState;
|
|
class LLFolderViewItem;
|
|
class LLScrollListCtrl;
|
|
class LLToggleableMenu;
|
|
class LLFilterEditor;
|
|
class LLFilteredWearableListManager;
|
|
class LLMenuGL;
|
|
class LLFindNonLinksByMask;
|
|
class LLFindWearablesOfType;
|
|
class LLSaveOutfitComboBtn;
|
|
|
|
class LLPanelOutfitEdit : public LLPanel
|
|
{
|
|
LOG_CLASS(LLPanelOutfitEdit);
|
|
public:
|
|
|
|
// NOTE: initialize mFolderViewItemTypes at the index of any new enum you add in the LLPanelOutfitEdit() constructor
|
|
typedef enum e_folder_view_item_type
|
|
{
|
|
FVIT_ALL = 0,
|
|
FVIT_WEARABLE, // clothing or shape
|
|
FVIT_ATTACHMENT,
|
|
NUM_FOLDER_VIEW_ITEM_TYPES
|
|
} EFolderViewItemType;
|
|
|
|
//should reflect order from LLWearableType::EType
|
|
typedef enum e_list_view_item_type
|
|
{
|
|
LVIT_ALL = 0,
|
|
LVIT_CLOTHING,
|
|
LVIT_BODYPART,
|
|
LVIT_ATTACHMENT,
|
|
LVIT_SHAPE,
|
|
LVIT_SKIN,
|
|
LVIT_HAIR,
|
|
LVIT_EYES,
|
|
LVIT_SHIRT,
|
|
LVIT_PANTS,
|
|
LVIT_SHOES,
|
|
LVIT_SOCKS,
|
|
LVIT_JACKET,
|
|
LVIT_GLOVES,
|
|
LVIT_UNDERSHIRT,
|
|
LVIT_UNDERPANTS,
|
|
LVIT_SKIRT,
|
|
LVIT_ALPHA,
|
|
LVIT_TATTOO,
|
|
NUM_LIST_VIEW_ITEM_TYPES
|
|
} EListViewItemType;
|
|
|
|
struct LLLookItemType {
|
|
std::string displayName;
|
|
U64 inventoryMask;
|
|
LLLookItemType() : displayName("NONE"), inventoryMask(0) {}
|
|
LLLookItemType(std::string name, U64 mask) : displayName(name), inventoryMask(mask) {}
|
|
};
|
|
|
|
struct LLFilterItem {
|
|
std::string displayName;
|
|
LLInventoryCollectFunctor* collector;
|
|
LLFilterItem() : displayName("NONE"), collector(NULL) {}
|
|
LLFilterItem(std::string name, LLInventoryCollectFunctor* _collector) : displayName(name), collector(_collector) {}
|
|
~LLFilterItem() { delete collector; }
|
|
|
|
//the struct is not supposed to by copied, either way the destructor kills collector
|
|
//LLPointer is not used as it requires LLInventoryCollectFunctor to extend LLRefCount what it doesn't do
|
|
private:
|
|
LLFilterItem(const LLFilterItem& filter_item) {};
|
|
};
|
|
|
|
LLPanelOutfitEdit();
|
|
/*virtual*/ ~LLPanelOutfitEdit();
|
|
|
|
/*virtual*/ BOOL postBuild();
|
|
/*virtual*/ void onOpen(const LLSD& key);
|
|
|
|
void moveWearable(bool closer_to_body);
|
|
|
|
void toggleAddWearablesPanel();
|
|
void showAddWearablesPanel(bool show__add_wearables);
|
|
|
|
//following methods operate with "add wearables" panel
|
|
void showWearablesFilter();
|
|
void showWearablesListView();
|
|
void showWearablesFolderView();
|
|
|
|
void updateFiltersVisibility();
|
|
|
|
void onFolderViewFilterCommitted(LLUICtrl* ctrl);
|
|
void onListViewFilterCommitted(LLUICtrl* ctrl);
|
|
void onSearchEdit(const std::string& string);
|
|
void onInventorySelectionChange();
|
|
void onPlusBtnClicked(void);
|
|
|
|
void applyFolderViewFilter(EFolderViewItemType type);
|
|
void applyListViewFilter(EListViewItemType type);
|
|
|
|
/**
|
|
* Filter items in views of Add Wearables Panel and show appropriate view depending on currently selected COF item(s)
|
|
* No COF items selected - shows the folder view, reset filter
|
|
* 1 COF item selected - shows the list view and filters wearables there by a wearable type of the selected item
|
|
* More than 1 COF item selected - shows the list view and filters it by a type of the selected item (attachment or clothing)
|
|
*/
|
|
void filterWearablesBySelectedItem(void);
|
|
|
|
void onRemoveFromOutfitClicked(void);
|
|
void onEditWearableClicked(void);
|
|
void onAddWearableClicked(void);
|
|
void onReplaceBodyPartMenuItemClicked(LLUUID selected_item_id);
|
|
void onShopButtonClicked();
|
|
|
|
void displayCurrentOutfit();
|
|
void updateCurrentOutfitName();
|
|
|
|
void update();
|
|
|
|
void updateVerbs();
|
|
/**
|
|
* @brief Helper function. Shows one panel instead of another.
|
|
* If panels already switched does nothing and returns false.
|
|
* @param switch_from_panel panel to hide
|
|
* @param switch_to_panel panel to show
|
|
* @retun returns true if switching happened, false if not.
|
|
*/
|
|
bool switchPanels(LLPanel* switch_from_panel, LLPanel* switch_to_panel);
|
|
|
|
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
|
EDragAndDropType cargo_type,
|
|
void* cargo_data,
|
|
EAcceptance* accept,
|
|
std::string& tooltip_msg);
|
|
|
|
private:
|
|
|
|
void onGearButtonClick(LLUICtrl* clicked_button);
|
|
void onAddMoreButtonClicked();
|
|
void showFilteredWearablesListView(LLWearableType::EType type);
|
|
void onOutfitChanging(bool started);
|
|
LLUUID getSelectedItemUUID();
|
|
|
|
LLTextBox* mCurrentOutfitName;
|
|
LLTextBox* mStatus;
|
|
LLInventoryPanel* mInventoryItemsPanel;
|
|
LLFilterEditor* mSearchFilter;
|
|
LLSaveFolderState* mSavedFolderState;
|
|
std::string mSearchString;
|
|
LLButton* mEditWearableBtn;
|
|
LLButton* mFolderViewBtn;
|
|
LLButton* mListViewBtn;
|
|
LLButton* mPlusBtn;
|
|
LLPanel* mAddWearablesPanel;
|
|
|
|
LLComboBox* mFolderViewFilterCmbBox;
|
|
LLComboBox* mListViewFilterCmbBox;
|
|
|
|
LLFilteredWearableListManager* mWearableListManager;
|
|
LLInventoryItemsList* mWearableItemsList;
|
|
LLPanel* mWearablesListViewPanel;
|
|
|
|
LLCOFDragAndDropObserver* mCOFDragAndDropObserver;
|
|
|
|
std::vector<LLLookItemType> mFolderViewItemTypes;
|
|
std::vector<LLFilterItem*> mListViewItemTypes;
|
|
|
|
LLCOFWearables* mCOFWearables;
|
|
LLMenuGL* mGearMenu;
|
|
bool mInitialized;
|
|
std::auto_ptr<LLSaveOutfitComboBtn> mSaveComboBtn;
|
|
|
|
|
|
|
|
};
|
|
|
|
#endif // LL_LLPANELOUTFITEDIT_H
|