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