summaryrefslogtreecommitdiff
path: root/indra/newview/llgrouplist.h
blob: 0e2dcf5fb3bdc161a96d5dd62f5c3b1a7b4bc8d8 (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
139
140
141
142
143
144
/**
 * @file llgrouplist.h
 * @brief List of the groups the agent belongs to.
 *
 * $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_LLGROUPLIST_H
#define LL_LLGROUPLIST_H

#include "llevent.h"
#include "llpointer.h"

#include "llflatlistview.h"
#include "llpanel.h"
#include "llstyle.h"
#include "lltoggleablemenu.h"

#include "llgroupmgr.h"

/**
 * Auto-updating list of agent groups.
 *
 * Can use optional group name filter.
 *
 * @see setNameFilter()
 */
class LLGroupList: public LLFlatListViewEx, public LLOldEvents::LLSimpleListener
{
    LOG_CLASS(LLGroupList);
public:
    struct Params : public LLInitParam::Block<Params, LLFlatListViewEx::Params>
    {
        Optional<bool> for_agent;
        Params();
    };

    LLGroupList(const Params& p);
    virtual ~LLGroupList();

    void enableForAgent(bool show_icons);

    virtual void draw(); // from LLView
    /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); // from LLView
    /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); // from LLView

    void setNameFilter(const std::string& filter);
    void toggleIcons();
    bool getIconsVisible() const { return mShowIcons; }
    void setIconsVisible(bool show_icons) { mShowIcons = show_icons; }
    void setShowNone(bool show_none) { mShowNone = show_none; }
    void setGroups(const std::map< std::string,LLUUID> group_list);

    LLToggleableMenu* getContextMenu() const { return mContextMenuHandle.get(); }

private:
    void setDirty(bool val = true)      { mDirty = val; }
    void refresh();
    void addNewItem(const LLUUID& id, const std::string& name, const LLUUID& icon_id, EAddPosition pos = ADD_BOTTOM, bool visible_in_profile = true);
    bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); // called on agent group list changes

    bool onContextMenuItemClick(const LLSD& userdata);
    bool onContextMenuItemEnable(const LLSD& userdata);

    LLHandle<LLToggleableMenu>  mContextMenuHandle;

    bool mShowIcons;
    bool mDirty;
    std::string mNameFilter;

    bool mForAgent;
    bool mShowNone;
    typedef std::map< std::string,LLUUID>   group_map_t;
    group_map_t             mGroups;
};

class LLButton;
class LLGroupIconCtrl;
class LLTextBox;

class LLGroupListItem : public LLPanel
    , public LLGroupMgrObserver
{
public:
    LLGroupListItem(bool for_agent, bool show_icons);
    ~LLGroupListItem();
    /*virtual*/ BOOL postBuild();
    /*virtual*/ void setValue(const LLSD& value);
    void onMouseEnter(S32 x, S32 y, MASK mask);
    void onMouseLeave(S32 x, S32 y, MASK mask);

    const LLUUID& getGroupID() const            { return mGroupID; }
    const std::string& getGroupName() const     { return mGroupName; }

    void setName(const std::string& name, const std::string& highlight = LLStringUtil::null);
    void setGroupID(const LLUUID& group_id);
    void setGroupIconID(const LLUUID& group_icon_id);
    void setGroupIconVisible(bool visible);

    virtual void changed(LLGroupChange gc);

    void setVisibleInProfile(bool visible);
private:
    void setBold(bool bold);
    void onInfoBtnClick();
    void onProfileBtnClick();
    void onNoticesBtnClick();
    void onVisibilityBtnClick(bool new_visibility);

    LLTextBox*  mGroupNameBox;
    LLUUID      mGroupID;
    LLGroupIconCtrl* mGroupIcon;
    LLButton*   mInfoBtn;
    LLButton*   mProfileBtn;
    LLButton*   mNoticesBtn;
    LLButton*   mVisibilityHideBtn;
    LLButton*   mVisibilityShowBtn;

    std::string mGroupName;
    bool        mForAgent;
    LLStyle::Params mGroupNameStyle;

    S32 mIconWidth;
};
#endif // LL_LLGROUPLIST_H