summaryrefslogtreecommitdiff
path: root/indra/newview/llcofwearables.h
blob: 6f0e97a98b995bd4b14570924ff6f979164eb6e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/**
 * @file llcofwearables.h
 * @brief LLCOFWearables displayes wearables from the current outfit split into three lists (attachments, clothing and body parts)
 *
 * $LicenseInfo:firstyear=2010&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_LLCOFWEARABLES_H
#define LL_LLCOFWEARABLES_H

// llui
#include "llflatlistview.h"
#include "llpanel.h"

#include "llappearancemgr.h"
#include "llinventorymodel.h"

class LLAccordionCtrl;
class LLAccordionCtrlTab;
class LLListContextMenu;
class LLPanelClothingListItem;
class LLPanelBodyPartsListItem;
class LLPanelDeletableWearableListItem;

class LLCOFWearables : public LLPanel
{
public:

    /**
     * Represents a collection of callbacks assigned to inventory panel item's buttons
     */
    class LLCOFCallbacks
    {
    public:
        LLCOFCallbacks() {};
        virtual ~LLCOFCallbacks() {};

        typedef boost::function<void ()> cof_callback_t;

        cof_callback_t mAddWearable;
        cof_callback_t mMoveWearableCloser;
        cof_callback_t mMoveWearableFurther;
        cof_callback_t mEditWearable;
        cof_callback_t mDeleteWearable;
    };



    LLCOFWearables();
    virtual ~LLCOFWearables();

    /*virtual*/ bool postBuild();

    LLUUID getSelectedUUID();
    bool getSelectedUUIDs(uuid_vec_t& selected_ids);

    LLPanel* getSelectedItem();
    void getSelectedItems(std::vector<LLPanel*>& selected_items) const;

    /* Repopulate the COF wearables list if the COF category has been changed since the last refresh */
    void refresh();
    void clear();

    LLAssetType::EType getExpandedAccordionAssetType();
    LLAssetType::EType getSelectedAccordionAssetType();
    void expandDefaultAccordionTab();

    LLCOFCallbacks& getCOFCallbacks() { return mCOFCallbacks; }

    /**
     * Selects first clothing item with specified LLWearableType::EType from clothing list
     */
    void selectClothing(LLWearableType::EType clothing_type);

    void setAttachmentsTitle();

protected:

    void populateAttachmentsAndBodypartsLists(const LLInventoryModel::item_array_t& cof_items);
    void populateClothingList(LLAppearanceMgr::wearables_by_type_t& clothing_by_type);

    void addClothingTypesDummies(const LLAppearanceMgr::wearables_by_type_t& clothing_by_type);
    void onSelectionChange(LLFlatListView* selected_list);
    void onAccordionTabStateChanged(LLUICtrl* ctrl, const LLSD& expanded);

    LLPanelClothingListItem* buildClothingListItem(LLViewerInventoryItem* item, bool first, bool last);
    LLPanelBodyPartsListItem* buildBodypartListItem(LLViewerInventoryItem* item);
    LLPanelDeletableWearableListItem* buildAttachemntListItem(LLViewerInventoryItem* item);

    void onListRightClick(LLUICtrl* ctrl, S32 x, S32 y, LLListContextMenu* menu);

    LLFlatListView* mAttachments;
    LLFlatListView* mClothing;
    LLFlatListView* mBodyParts;

    LLFlatListView* mLastSelectedList;

    LLAccordionCtrlTab* mClothingTab;
    LLAccordionCtrlTab* mAttachmentsTab;
    LLAccordionCtrlTab* mBodyPartsTab;

    LLAccordionCtrlTab* mLastSelectedTab;

    std::map<const LLAccordionCtrlTab*, LLAssetType::EType> mTab2AssetType;

    LLCOFCallbacks mCOFCallbacks;

    LLListContextMenu* mClothingMenu;
    LLListContextMenu* mAttachmentMenu;
    LLListContextMenu* mBodyPartMenu;

    LLAccordionCtrl*    mAccordionCtrl;

    /* COF category version since last refresh */
    S32 mCOFVersion;
};


#endif