236 lines
6.7 KiB
C++
236 lines
6.7 KiB
C++
/**
|
|
* @file llinventorylistitem.h
|
|
* @brief Inventory list item panel.
|
|
*
|
|
* Class LLPanelInventoryListItemBase displays inventory item as an element
|
|
* of LLInventoryItemsList.
|
|
*
|
|
* $LicenseInfo:firstyear=2010&license=viewergpl$
|
|
*
|
|
* Copyright (c) 2010, 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_LLINVENTORYLISTITEM_H
|
|
#define LL_LLINVENTORYLISTITEM_H
|
|
|
|
// llcommon
|
|
#include "llassettype.h"
|
|
|
|
// llui
|
|
#include "llpanel.h"
|
|
#include "llstyle.h"
|
|
|
|
// newview
|
|
#include "llwearabletype.h"
|
|
|
|
class LLIconCtrl;
|
|
class LLTextBox;
|
|
class LLViewerInventoryItem;
|
|
|
|
/**
|
|
* @class LLPanelInventoryListItemBase
|
|
*
|
|
* Base class for Inventory flat list item. Panel consists of inventory icon
|
|
* and inventory item name.
|
|
* This class is able to display widgets(buttons) on left(before icon) and right(after text-box) sides
|
|
* of panel.
|
|
*
|
|
* How to use (see LLPanelClothingListItem for example):
|
|
* - implement init() to build panel from xml
|
|
* - create new xml file, fill it with widgets you want to dynamically show/hide/reshape on left/right sides
|
|
* - redefine postBuild()(call base implementation) and add needed widgets to needed sides,
|
|
*
|
|
*/
|
|
class LLPanelInventoryListItemBase : public LLPanel
|
|
{
|
|
public:
|
|
struct Params : public LLInitParam::Block<Params, LLPanel::Params>
|
|
{
|
|
Optional<LLStyle::Params> default_style,
|
|
worn_style;
|
|
Params();
|
|
};
|
|
|
|
typedef enum e_item_state {
|
|
IS_DEFAULT,
|
|
IS_WORN,
|
|
} EItemState;
|
|
|
|
static LLPanelInventoryListItemBase* create(LLViewerInventoryItem* item);
|
|
|
|
virtual void draw();
|
|
|
|
/**
|
|
* Let item know it need to be refreshed in next draw()
|
|
*/
|
|
void setNeedsRefresh(bool needs_refresh){ mNeedsRefresh = needs_refresh; }
|
|
|
|
bool getNeedsRefresh(){ return mNeedsRefresh; }
|
|
|
|
/**
|
|
* Add widget to left side
|
|
*/
|
|
void addWidgetToLeftSide(const std::string& name, bool show_widget = true);
|
|
void addWidgetToLeftSide(LLUICtrl* ctrl, bool show_widget = true);
|
|
|
|
/**
|
|
* Add widget to right side, widget is supposed to be child of calling panel
|
|
*/
|
|
void addWidgetToRightSide(const std::string& name, bool show_widget = true);
|
|
void addWidgetToRightSide(LLUICtrl* ctrl, bool show_widget = true);
|
|
|
|
/**
|
|
* Mark widgets as visible. Only visible widgets take part in reshaping children
|
|
*/
|
|
void setShowWidget(const std::string& name, bool show);
|
|
void setShowWidget(LLUICtrl* ctrl, bool show);
|
|
|
|
/**
|
|
* Set spacing between widgets during reshape
|
|
*/
|
|
void setWidgetSpacing(S32 spacing) { mWidgetSpacing = spacing; }
|
|
|
|
S32 getWidgetSpacing() { return mWidgetSpacing; }
|
|
|
|
/**
|
|
* Inheritors need to call base implementation of postBuild()
|
|
*/
|
|
/*virtual*/ BOOL postBuild();
|
|
|
|
/**
|
|
* Handles item selection
|
|
*/
|
|
/*virtual*/ void setValue(const LLSD& value);
|
|
|
|
/**
|
|
* Handles filter request
|
|
*/
|
|
/*virtual*/ S32 notify(const LLSD& info);
|
|
|
|
/* Highlights item */
|
|
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
|
|
/* Removes item highlight */
|
|
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
|
|
|
|
/** Get the name of a corresponding inventory item */
|
|
const std::string& getItemName() const;
|
|
|
|
/** Get the asset type of a corresponding inventory item */
|
|
LLAssetType::EType getType() const;
|
|
|
|
/** Get the wearable type of a corresponding inventory item */
|
|
LLWearableType::EType getWearableType() const;
|
|
|
|
/** Get the description of a corresponding inventory item */
|
|
const std::string& getDescription() const;
|
|
|
|
/** Get the associated inventory item */
|
|
LLViewerInventoryItem* getItem() const;
|
|
|
|
virtual ~LLPanelInventoryListItemBase(){}
|
|
|
|
protected:
|
|
|
|
LLPanelInventoryListItemBase(LLViewerInventoryItem* item);
|
|
|
|
typedef std::vector<LLUICtrl*> widget_array_t;
|
|
|
|
/**
|
|
* Use it from a factory function to build panel, do not build panel in constructor
|
|
*/
|
|
virtual void init();
|
|
|
|
/**
|
|
* Called after inventory item was updated, update panel widgets to reflect inventory changes.
|
|
*/
|
|
virtual void updateItem(const std::string& name,
|
|
EItemState item_state = IS_DEFAULT);
|
|
|
|
/** setter for mIconCtrl */
|
|
void setIconCtrl(LLIconCtrl* icon) { mIconCtrl = icon; }
|
|
/** setter for MTitleCtrl */
|
|
void setTitleCtrl(LLTextBox* tb) { mTitleCtrl = tb; }
|
|
|
|
void setLeftWidgetsWidth(S32 width) { mLeftWidgetsWidth = width; }
|
|
void setRightWidgetsWidth(S32 width) { mRightWidgetsWidth = width; }
|
|
|
|
/**
|
|
* Set all widgets from both side visible/invisible. Only enabled widgets
|
|
* (see setShowWidget()) can become visible
|
|
*/
|
|
virtual void setWidgetsVisible(bool visible);
|
|
|
|
/**
|
|
* Reshape all child widgets - icon, text-box and side widgets
|
|
*/
|
|
virtual void reshapeWidgets();
|
|
|
|
/** set wearable type icon image */
|
|
void setIconImage(const LLUIImagePtr& image);
|
|
|
|
/** Set item title - inventory item name usually */
|
|
void setTitle(const std::string& title,
|
|
const std::string& highlit_text,
|
|
EItemState item_state = IS_DEFAULT);
|
|
|
|
/**
|
|
* Show tool tip if item name text size > panel size
|
|
*/
|
|
virtual BOOL handleToolTip( S32 x, S32 y, MASK mask);
|
|
|
|
const LLUUID mInventoryItemUUID;
|
|
|
|
private:
|
|
|
|
/** reshape left side widgets
|
|
* Deprecated for now. Disabled reshape left for now to reserve space for 'delete'
|
|
* button in LLPanelClothingListItem according to Neal's comment (https://codereview.productengine.com/secondlife/r/325/)
|
|
*/
|
|
void reshapeLeftWidgets();
|
|
|
|
/** reshape right side widgets */
|
|
void reshapeRightWidgets();
|
|
|
|
/** reshape remaining widgets */
|
|
void reshapeMiddleWidgets();
|
|
|
|
|
|
LLIconCtrl* mIconCtrl;
|
|
LLTextBox* mTitleCtrl;
|
|
|
|
LLUIImagePtr mIconImage;
|
|
std::string mHighlightedText;
|
|
|
|
widget_array_t mLeftSideWidgets;
|
|
widget_array_t mRightSideWidgets;
|
|
S32 mWidgetSpacing;
|
|
|
|
S32 mLeftWidgetsWidth;
|
|
S32 mRightWidgetsWidth;
|
|
bool mNeedsRefresh;
|
|
};
|
|
|
|
#endif //LL_LLINVENTORYLISTITEM_H
|