00001
00033 #ifndef LL_LLTEXTURECTRL_H
00034 #define LL_LLTEXTURECTRL_H
00035
00036 #include "llcoord.h"
00037 #include "llfloater.h"
00038 #include "llstring.h"
00039 #include "lluictrl.h"
00040 #include "llpermissionsflags.h"
00041
00042 class LLButton;
00043 class LLFloaterTexturePicker;
00044 class LLInventoryItem;
00045 class LLTextBox;
00046 class LLViewBorder;
00047
00048
00049 typedef BOOL (*drag_n_drop_callback)(LLUICtrl*, LLInventoryItem*, void*);
00050
00052
00053
00054
00055 class LLTextureCtrl
00056 : public LLUICtrl
00057 {
00058 public:
00059 typedef enum e_texture_pick_op
00060 {
00061 TEXTURE_CHANGE,
00062 TEXTURE_SELECT,
00063 TEXTURE_CANCEL
00064 } ETexturePickOp;
00065
00066 public:
00067 LLTextureCtrl(
00068 const std::string& name, const LLRect& rect,
00069 const std::string& label,
00070 const LLUUID& image_id,
00071 const LLUUID& default_image_id,
00072 const std::string& default_image_name );
00073 virtual ~LLTextureCtrl();
00074
00075
00076 virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_TEXTURE_PICKER; }
00077 virtual LLString getWidgetTag() const { return LL_TEXTURE_CTRL_TAG; }
00078 virtual LLXMLNodePtr getXML(bool save_children = true) const;
00079 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
00080
00081 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
00082 virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
00083 BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
00084 EAcceptance *accept,
00085 LLString& tooltip_msg);
00086 virtual BOOL handleHover(S32 x, S32 y, MASK mask);
00087 virtual BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent);
00088
00089 virtual void draw();
00090 virtual void setVisible( BOOL visible );
00091 virtual void setEnabled( BOOL enabled );
00092
00093 virtual BOOL isDirty() const;
00094 virtual void resetDirty();
00095
00096 void setValid(BOOL valid);
00097
00098
00099 virtual void clear();
00100
00101
00102 virtual void setValue( LLSD value );
00103 virtual LLSD getValue() const;
00104
00105
00106 void showPicker(BOOL take_focus);
00107 void setLabel(const LLString& label);
00108 const LLString& getLabel() const { return mLabel; }
00109
00110 void setAllowNoTexture( BOOL b ) { mAllowNoTexture = b; }
00111 bool getAllowNoTexture() const { return mAllowNoTexture; }
00112
00113 const LLUUID& getImageItemID() { return mImageItemID; }
00114
00115 void setImageAssetID(const LLUUID &image_asset_id);
00116 const LLUUID& getImageAssetID() const { return mImageAssetID; }
00117
00118 void setDefaultImageAssetID( const LLUUID& id ) { mDefaultImageAssetID = id; }
00119
00120 const LLString& getDefaultImageName() const { return mDefaultImageName; }
00121 const LLUUID& getDefaultImageAssetID() const { return mDefaultImageAssetID; }
00122
00123 void setCaption(const LLString& caption);
00124 void setCanApplyImmediately(BOOL b);
00125
00126 void setImmediateFilterPermMask(PermissionMask mask)
00127 { mImmediateFilterPermMask = mask; }
00128 void setNonImmediateFilterPermMask(PermissionMask mask)
00129 { mNonImmediateFilterPermMask = mask; }
00130 PermissionMask getImmediateFilterPermMask() { return mImmediateFilterPermMask; }
00131 PermissionMask getNonImmediateFilterPermMask() { return mNonImmediateFilterPermMask; }
00132
00133 void closeFloater();
00134
00135 void onFloaterClose();
00136 void onFloaterCommit(ETexturePickOp op);
00137
00138
00139
00140 void setDragCallback(drag_n_drop_callback cb) { mDragCallback = cb; }
00141
00142
00143
00144
00145 void setDropCallback(drag_n_drop_callback cb) { mDropCallback = cb; }
00146
00147 void setOnCancelCallback(LLUICtrlCallback cb) { mOnCancelCallback = cb; }
00148
00149 void setOnSelectCallback(LLUICtrlCallback cb) { mOnSelectCallback = cb; }
00150
00151 private:
00152 BOOL allowDrop(LLInventoryItem* item);
00153 BOOL doDrop(LLInventoryItem* item);
00154
00155 private:
00156 drag_n_drop_callback mDragCallback;
00157 drag_n_drop_callback mDropCallback;
00158 LLUICtrlCallback mOnCancelCallback;
00159 LLUICtrlCallback mOnSelectCallback;
00160 LLPointer<LLViewerImage> mTexturep;
00161 LLColor4 mBorderColor;
00162 LLUUID mImageItemID;
00163 LLUUID mImageAssetID;
00164 LLUUID mDefaultImageAssetID;
00165 LLString mDefaultImageName;
00166 LLViewHandle mFloaterHandle;
00167 LLTextBox* mTentativeLabel;
00168 LLTextBox* mCaption;
00169 LLString mLabel;
00170 BOOL mAllowNoTexture;
00171 LLCoordGL mLastFloaterLeftTop;
00172 PermissionMask mImmediateFilterPermMask;
00173 PermissionMask mNonImmediateFilterPermMask;
00174 BOOL mCanApplyImmediately;
00175 BOOL mNeedsRawImageData;
00176 LLViewBorder* mBorder;
00177 BOOL mValid;
00178 BOOL mDirty;
00179 };
00180
00181
00182
00183 #define LLTexturePicker LLTextureCtrl
00184
00185 #endif // LL_LLTEXTURECTRL_H